]> git.alsa-project.org Git - alsa-utils.git/commitdiff
aseqdump: Add dump of UMP Mixed Data Set messages
authorTakashi Iwai <tiwai@suse.de>
Sun, 28 Jul 2024 09:24:06 +0000 (11:24 +0200)
committerTakashi Iwai <tiwai@suse.de>
Sun, 28 Jul 2024 09:24:06 +0000 (11:24 +0200)
Add the support for yet more UMP messages.  UMP Mixed Data Set
messages are the generic data containers withe the message type 5
(shared with 8-bit SysEx).

Signed-off-by: Takashi Iwai <tiwai@suse.de>
seq/aseqdump/aseqdump.c

index 673074f45e7e01bed6907aad480891689a2caf1e..1d9c01e01dd3296a602a3282f539b051c2cce669 100644 (file)
@@ -726,6 +726,45 @@ static void dump_ump_sysex8_event(const unsigned int *ump)
        printf("\n");
 }
 
+static void dump_ump_mixed_data_event(const unsigned int *ump)
+{
+       const snd_ump_msg_mixed_data_t *m =
+               (const snd_ump_msg_mixed_data_t *)ump;
+       int i;
+
+       printf("Group %2d, ", group_number(snd_ump_msg_group(ump)));
+       switch (snd_ump_sysex_msg_status(ump)) {
+       case SND_UMP_MIXED_DATA_SET_STATUS_HEADER:
+               printf("MDS Header id=0x%x, bytes=%d, chunk=%d/%d, manufacturer=0x%04x, device=0x%04x, sub_id=0x%04x 0x%04x\n",
+                      m->header.mds_id, m->header.bytes,
+                      m->header.chunk, m->header.chunks,
+                      m->header.manufacturer, m->header.device,
+                      m->header.sub_id_1, m->header.sub_id_2);
+               break;
+       case SND_UMP_MIXED_DATA_SET_STATUS_PAYLOAD:
+               printf("MDS Payload id=0x%x, ", m->payload.mds_id);
+               for (i = 0; i < 14; i++)
+                       printf("%s%02x", i ? ":" : "",
+                              snd_ump_get_byte(ump, i + 2));
+               printf("\n");
+               break;
+       default:
+               printf("Extended Data (status 0x%x)\n",
+                      snd_ump_sysex_msg_status(ump));
+               break;
+       }
+}
+
+static void dump_ump_extended_data_event(const unsigned int *ump)
+{
+       unsigned char status = snd_ump_sysex_msg_status(ump);
+
+       if (status < 4)
+               dump_ump_sysex8_event(ump);
+       else
+               dump_ump_mixed_data_event(ump);
+}
+
 static void print_ump_string(const unsigned int *ump, unsigned int fmt,
                             unsigned int offset, int maxlen)
 {
@@ -988,7 +1027,7 @@ static void dump_ump_event(const snd_seq_ump_event_t *ev)
                dump_ump_sysex_event(ev->ump);
                break;
        case SND_UMP_MSG_TYPE_EXTENDED_DATA:
-               dump_ump_sysex8_event(ev->ump);
+               dump_ump_extended_data_event(ev->ump);
                break;
        case SND_UMP_MSG_TYPE_FLEX_DATA:
                dump_ump_flex_data_event(ev->ump);