ALSA project - the C library reference
ump_msg.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: LGPL-2.1+ */
9 #ifndef __ALSA_UMP_MSG_H
10 #define __ALSA_UMP_MSG_H
11 
12 #include <stdint.h>
13 
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17 
19 typedef struct _snd_ump_msg_hdr {
20 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
21  uint8_t type:4;
22  uint8_t group:4;
23  uint8_t status:4;
24  uint8_t channel:4;
25  uint8_t byte1;
26  uint8_t byte2;
27 #else
28  uint8_t byte2;
29  uint8_t byte1;
30  uint8_t channel:4;
31  uint8_t status:4;
32  uint8_t group:4;
33  uint8_t type:4;
34 #endif
35 } __attribute((packed)) snd_ump_msg_hdr_t;
36 
38 typedef struct _snd_ump_msg_midi1_note {
39 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
40  uint8_t type:4;
41  uint8_t group:4;
42  uint8_t status:4;
43  uint8_t channel:4;
44  uint8_t note;
45  uint8_t velocity;
46 #else
47  uint8_t velocity;
48  uint8_t note;
49  uint8_t channel:4;
50  uint8_t status:4;
51  uint8_t group:4;
52  uint8_t type:4;
53 #endif
54 } __attribute((packed)) snd_ump_msg_midi1_note_t;
55 
57 typedef struct _snd_ump_msg_midi1_paf {
58 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
59  uint8_t type:4;
60  uint8_t group:4;
61  uint8_t status:4;
62  uint8_t channel:4;
63  uint8_t note;
64  uint8_t data;
65 #else
66  uint8_t data;
67  uint8_t note;
68  uint8_t channel:4;
69  uint8_t status:4;
70  uint8_t group:4;
71  uint8_t type:4;
72 #endif
73 } __attribute((packed)) snd_ump_msg_midi1_paf_t;
74 
76 typedef struct _snd_ump_msg_midi1_cc {
77 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
78  uint8_t type:4;
79  uint8_t group:4;
80  uint8_t status:4;
81  uint8_t channel:4;
82  uint8_t index;
83  uint8_t data;
84 #else
85  uint8_t data;
86  uint8_t index;
87  uint8_t channel:4;
88  uint8_t status:4;
89  uint8_t group:4;
90  uint8_t type:4;
91 #endif
92 } __attribute((packed)) snd_ump_msg_midi1_cc_t;
93 
96 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
97  uint8_t type:4;
98  uint8_t group:4;
99  uint8_t status:4;
100  uint8_t channel:4;
101  uint8_t program;
102  uint8_t reserved;
103 #else
104  uint8_t reserved;
105  uint8_t program;
106  uint8_t channel:4;
107  uint8_t status:4;
108  uint8_t group:4;
109  uint8_t type:4;
110 #endif
111 } __attribute((packed)) snd_ump_msg_midi1_program_t;
112 
114 typedef struct _snd_ump_msg_midi1_caf {
115 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
116  uint8_t type:4;
117  uint8_t group:4;
118  uint8_t status:4;
119  uint8_t channel:4;
120  uint8_t data;
121  uint8_t reserved;
122 #else
123  uint8_t reserved;
124  uint8_t data;
125  uint8_t channel:4;
126  uint8_t status:4;
127  uint8_t group:4;
128  uint8_t type:4;
129 #endif
130 } __attribute((packed)) snd_ump_msg_midi1_caf_t;
131 
134 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
135  uint8_t type:4;
136  uint8_t group:4;
137  uint8_t status:4;
138  uint8_t channel:4;
139  uint8_t data_lsb;
140  uint8_t data_msb;
141 #else
142  uint8_t data_msb;
143  uint8_t data_lsb;
144  uint8_t channel:4;
145  uint8_t status:4;
146  uint8_t group:4;
147  uint8_t type:4;
148 #endif
149 } __attribute((packed)) snd_ump_msg_midi1_pitchbend_t;
150 
152 typedef struct snd_ump_msg_system {
153 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
154  uint8_t type:4;
155  uint8_t group:4;
156  uint8_t status;
157  uint8_t parm1;
158  uint8_t parm2;
159 #else
160  uint8_t parm2;
161  uint8_t parm1;
162  uint8_t status;
163  uint8_t group:4;
164  uint8_t type:4;
165 #endif
166 } __attribute((packed)) snd_ump_msg_system_t;
167 
169 typedef union _snd_ump_msg_midi1 {
170  snd_ump_msg_midi1_note_t note_on;
171  snd_ump_msg_midi1_note_t note_off;
172  snd_ump_msg_midi1_paf_t poly_pressure;
173  snd_ump_msg_midi1_cc_t control_change;
174  snd_ump_msg_midi1_program_t program_change;
175  snd_ump_msg_midi1_caf_t channel_pressure;
176  snd_ump_msg_midi1_pitchbend_t pitchbend;
177  snd_ump_msg_system_t system;
178  snd_ump_msg_hdr_t hdr;
179  uint32_t raw;
181 
183 enum {
188 };
189 
191 typedef struct _snd_ump_msg_midi2_note {
192 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
193  uint8_t type:4;
194  uint8_t group:4;
195  uint8_t status:4;
196  uint8_t channel:4;
197  uint8_t note;
198  uint8_t attr_type;
200  uint16_t velocity;
201  uint16_t attr_data;
202 #else
203  uint8_t attr_type;
204  uint8_t note;
205  uint8_t channel:4;
206  uint8_t status:4;
207  uint8_t group:4;
208  uint8_t type:4;
210  uint16_t attr_data;
211  uint16_t velocity;
212 #endif
213 } __attribute((packed)) snd_ump_msg_midi2_note_t;
214 
216 typedef struct _snd_ump_msg_midi2_paf {
217 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
218  uint8_t type:4;
219  uint8_t group:4;
220  uint8_t status:4;
221  uint8_t channel:4;
222  uint8_t note;
223  uint8_t reserved;
225  uint32_t data;
226 #else
227  uint8_t reserved;
228  uint8_t note;
229  uint8_t channel:4;
230  uint8_t status:4;
231  uint8_t group:4;
232  uint8_t type:4;
234  uint32_t data;
235 #endif
236 } __attribute((packed)) snd_ump_msg_midi2_paf_t;
237 
240 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
241  uint8_t type:4;
242  uint8_t group:4;
243  uint8_t status:4;
244  uint8_t channel:4;
245  uint8_t note;
246  uint8_t index;
248  uint32_t data;
249 #else
250  uint8_t index;
251  uint8_t note;
252  uint8_t channel:4;
253  uint8_t status:4;
254  uint8_t group:4;
255  uint8_t type:4;
257  uint32_t data;
258 #endif
259 } __attribute((packed)) snd_ump_msg_midi2_per_note_cc_t;
260 
262 enum {
265 };
266 
269 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
270  uint8_t type:4;
271  uint8_t group:4;
272  uint8_t status:4;
273  uint8_t channel:4;
274  uint8_t note;
275  uint8_t flags;
277  uint32_t reserved;
278 #else
279  uint8_t flags;
280  uint8_t note;
281  uint8_t channel:4;
282  uint8_t status:4;
283  uint8_t group:4;
284  uint8_t type:4;
286  uint32_t reserved;
287 #endif
288 } __attribute((packed)) snd_ump_msg_midi2_per_note_mgmt_t;
289 
291 typedef struct _snd_ump_msg_midi2_cc {
292 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
293  uint8_t type:4;
294  uint8_t group:4;
295  uint8_t status:4;
296  uint8_t channel:4;
297  uint8_t index;
298  uint8_t reserved;
300  uint32_t data;
301 #else
302  uint8_t reserved;
303  uint8_t index;
304  uint8_t channel:4;
305  uint8_t status:4;
306  uint8_t group:4;
307  uint8_t type:4;
309  uint32_t data;
310 #endif
311 } __attribute((packed)) snd_ump_msg_midi2_cc_t;
312 
314 typedef struct _snd_ump_msg_midi2_rpn {
315 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
316  uint8_t type:4;
317  uint8_t group:4;
318  uint8_t status:4;
319  uint8_t channel:4;
320  uint8_t bank;
321  uint8_t index;
323  uint32_t data;
324 #else
325  uint8_t index;
326  uint8_t bank;
327  uint8_t channel:4;
328  uint8_t status:4;
329  uint8_t group:4;
330  uint8_t type:4;
332  uint32_t data;
333 #endif
334 } __attribute((packed)) snd_ump_msg_midi2_rpn_t;
335 
338 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
339  uint8_t type:4;
340  uint8_t group:4;
341  uint8_t status:4;
342  uint8_t channel:4;
343  uint16_t reserved:15;
344  uint16_t bank_valid:1;
346  uint8_t program;
347  uint8_t reserved2;
348  uint8_t bank_msb;
349  uint8_t bank_lsb;
350 #else
351  uint16_t bank_valid:1;
352  uint16_t reserved:15;
353  uint8_t channel:4;
354  uint8_t status:4;
355  uint8_t group:4;
356  uint8_t type:4;
358  uint8_t bank_lsb;
359  uint8_t bank_msb;
360  uint8_t reserved2;
361  uint8_t program;
362 #endif
363 } __attribute((packed)) snd_ump_msg_midi2_program_t;
364 
366 typedef struct _snd_ump_msg_midi2_caf {
367 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
368  uint8_t type:4;
369  uint8_t group:4;
370  uint8_t status:4;
371  uint8_t channel:4;
372  uint16_t reserved;
374  uint32_t data;
375 #else
376  uint16_t reserved;
377  uint8_t channel:4;
378  uint8_t status:4;
379  uint8_t group:4;
380  uint8_t type:4;
382  uint32_t data;
383 #endif
384 } __attribute((packed)) snd_ump_msg_midi2_caf_t;
385 
388 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
389  uint8_t type:4;
390  uint8_t group:4;
391  uint8_t status:4;
392  uint8_t channel:4;
393  uint16_t reserved;
395  uint32_t data;
396 #else
397  uint16_t reserved;
398  uint8_t channel:4;
399  uint8_t status:4;
400  uint8_t group:4;
401  uint8_t type:4;
403  uint32_t data;
404 #endif
405 } __attribute((packed)) snd_ump_msg_midi2_pitchbend_t;
406 
409 #ifdef __BIG_ENDIAN_BITFIELD
410  uint8_t type:4;
411  uint8_t group:4;
412  uint8_t status:4;
413  uint8_t channel:4;
414  uint8_t note;
415  uint8_t reserved;
417  uint32_t data;
418 #else
419  uint8_t reserved;
420  uint8_t note;
421  uint8_t channel:4;
422  uint8_t status:4;
423  uint8_t group:4;
424  uint8_t type:4;
426  uint32_t data;
427 #endif
428 } __attribute((packed)) snd_ump_msg_midi2_per_note_pitchbend_t;
429 
431 typedef union _snd_ump_msg_midi2 {
432  snd_ump_msg_midi2_note_t note_on;
433  snd_ump_msg_midi2_note_t note_off;
434  snd_ump_msg_midi2_paf_t poly_pressure;
435  snd_ump_msg_midi2_per_note_cc_t per_note_acc;
436  snd_ump_msg_midi2_per_note_cc_t per_note_rcc;
437  snd_ump_msg_midi2_per_note_mgmt_t per_note_mgmt;
438  snd_ump_msg_midi2_cc_t control_change;
439  snd_ump_msg_midi2_rpn_t rpn;
440  snd_ump_msg_midi2_rpn_t nrpn;
441  snd_ump_msg_midi2_rpn_t relative_rpn;
442  snd_ump_msg_midi2_rpn_t relative_nrpn;
443  snd_ump_msg_midi2_program_t program_change;
444  snd_ump_msg_midi2_caf_t channel_pressure;
445  snd_ump_msg_midi2_pitchbend_t pitchbend;
446  snd_ump_msg_midi2_per_note_pitchbend_t per_note_pitchbend;
447  snd_ump_msg_hdr_t hdr;
448  uint32_t raw[2];
450 
452 typedef struct _snd_ump_msg_stream_gen {
453 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
454  uint16_t type:4;
455  uint16_t format:2;
456  uint16_t status:10;
457  uint16_t data1;
458  uint32_t data2;
459  uint32_t data3;
460  uint32_t data4;
461 #else
462  uint16_t data1;
463  uint16_t status:10;
464  uint16_t format:2;
465  uint16_t type:4;
466  uint32_t data2;
467  uint32_t data3;
468  uint32_t data4;
469 #endif
470 } __attribute((packed)) snd_ump_msg_stream_gen_t;
471 
473 typedef union _snd_ump_msg_stream {
474  snd_ump_msg_stream_gen_t gen;
475  snd_ump_msg_hdr_t hdr;
476  uint32_t raw[4];
478 
481 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
482  uint8_t type:4;
483  uint8_t group:4;
484  uint8_t format:2;
485  uint8_t addrs:2;
486  uint8_t channel:4;
487  uint8_t status_bank;
488  uint8_t status;
489  uint32_t data[3];
490 #else
491  uint8_t status;
492  uint8_t status_bank;
493  uint8_t channel:4;
494  uint8_t addrs:2;
495  uint8_t format:2;
496  uint8_t group:4;
497  uint8_t type:4;
498  uint32_t data[3];
499 #endif
500 } __attribute((packed)) snd_ump_msg_flex_data_meta_t;
501 
503 typedef struct _snd_ump_msg_set_tempo {
504 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
505  uint8_t type:4;
506  uint8_t group:4;
507  uint8_t format:2;
508  uint8_t addrs:2;
509  uint8_t channel:4;
510  uint8_t status_bank;
511  uint8_t status;
513  uint32_t tempo;
515  uint32_t reserved[2];
516 #else
517  uint8_t status;
518  uint8_t status_bank;
519  uint8_t channel:4;
520  uint8_t addrs:2;
521  uint8_t format:2;
522  uint8_t group:4;
523  uint8_t type:4;
525  uint32_t tempo;
527  uint32_t reserved[2];
528 #endif
529 } __attribute((packed)) snd_ump_msg_set_tempo_t;
530 
533 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
534  uint8_t type:4;
535  uint8_t group:4;
536  uint8_t format:2;
537  uint8_t addrs:2;
538  uint8_t channel:4;
539  uint8_t status_bank;
540  uint8_t status;
542  uint8_t numerator;
543  uint8_t denominator;
544  uint8_t num_notes;
545  uint8_t reserved1;
547  uint32_t reserved[2];
548 #else
549  uint8_t status;
550  uint8_t status_bank;
551  uint8_t channel:4;
552  uint8_t addrs:2;
553  uint8_t format:2;
554  uint8_t group:4;
555  uint8_t type:4;
557  uint8_t reserved1;
558  uint8_t num_notes;
559  uint8_t denominator;
560  uint8_t numerator;
562  uint32_t reserved[2];
563 #endif
564 } __attribute((packed)) snd_ump_msg_set_time_sig_t;
565 
568 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
569  uint8_t type:4;
570  uint8_t group:4;
571  uint8_t format:2;
572  uint8_t addrs:2;
573  uint8_t channel:4;
574  uint8_t status_bank;
575  uint8_t status;
577  uint8_t clocks_primary;
578  uint8_t bar_accent_1;
579  uint8_t bar_accent_2;
580  uint8_t bar_accent_3;
582  uint8_t subdivision_1;
583  uint8_t subdivision_2;
584  uint16_t reserved1;
586  uint32_t reserved2;
587 #else
588  uint8_t status;
589  uint8_t status_bank;
590  uint8_t channel:4;
591  uint8_t addrs:2;
592  uint8_t format:2;
593  uint8_t group:4;
594  uint8_t type:4;
596  uint8_t bar_accent_3;
597  uint8_t bar_accent_2;
598  uint8_t bar_accent_1;
599  uint8_t clocks_primary;
601  uint16_t reserved1;
602  uint8_t subdivision_2;
603  uint8_t subdivision_1;
605  uint32_t reserved2;
606 #endif
607 } __attribute((packed)) snd_ump_msg_set_metronome_t;
608 
610 typedef struct _snd_ump_msg_set_key_sig {
611 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
612  uint8_t type:4;
613  uint8_t group:4;
614  uint8_t format:2;
615  uint8_t addrs:2;
616  uint8_t channel:4;
617  uint8_t status_bank;
618  uint8_t status;
620  uint8_t sharps_flats:4;
621  uint8_t tonic_note:4;
622  uint8_t reserved1[3];
624  uint32_t reserved2[2];
625 #else
626  uint8_t status;
627  uint8_t status_bank;
628  uint8_t channel:4;
629  uint8_t addrs:2;
630  uint8_t format:2;
631  uint8_t group:4;
632  uint8_t type:4;
634  uint8_t reserved1[3];
635  uint8_t tonic_note:4;
636  uint8_t sharps_flats:4;
638  uint32_t reserved2[2];
639 #endif
640 } __attribute((packed)) snd_ump_msg_set_key_sig_t;
641 
644 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
645  uint8_t type:4;
646  uint8_t group:4;
647  uint8_t format:2;
648  uint8_t addrs:2;
649  uint8_t channel:4;
650  uint8_t status_bank;
651  uint8_t status;
653  uint8_t tonic_sharp:4;
654  uint8_t chord_tonic:4;
655  uint8_t chord_type;
656  uint8_t alter1_type:4;
657  uint8_t alter1_degree:4;
658  uint8_t alter2_type:4;
659  uint8_t alter2_degree:4;
661  uint8_t alter3_type:4;
662  uint8_t alter3_degree:4;
663  uint8_t alter4_type:4;
664  uint8_t alter4_degree:4;
665  uint16_t reserved;
667  uint8_t bass_sharp:4;
668  uint8_t bass_note:4;
669  uint8_t bass_type;
670  uint8_t bass_alter1_type:4;
671  uint8_t bass_alter1_degree:4;
672  uint8_t bass_alter2_type:4;
673  uint8_t bass_alter2_degree:4;
674 #else
675  uint8_t status;
676  uint8_t status_bank;
677  uint8_t channel:4;
678  uint8_t addrs:2;
679  uint8_t format:2;
680  uint8_t group:4;
681  uint8_t type:4;
683  uint8_t alter2_degree:4;
684  uint8_t alter2_type:4;
685  uint8_t alter1_degree:4;
686  uint8_t alter1_type:4;
687  uint8_t chord_type;
688  uint8_t chord_tonic:4;
689  uint8_t tonic_sharp:4;
691  uint16_t reserved;
692  uint8_t alter4_degree:4;
693  uint8_t alter4_type:4;
694  uint8_t alter3_degree:4;
695  uint8_t alter3_type:4;
697  uint8_t bass_alter2_degree:4;
698  uint8_t bass_alter2_type:4;
699  uint8_t bass_alter1_degree:4;
700  uint8_t bass_alter1_type:4;
701  uint8_t bass_type;
702  uint8_t bass_note:4;
703  uint8_t bass_sharp:4;
704 #endif
705 } __attribute((packed)) snd_ump_msg_set_chord_name_t;
706 
708 typedef union _snd_ump_msg_flex_data {
709  snd_ump_msg_flex_data_meta_t meta;
710  snd_ump_msg_flex_data_meta_t text;
711  snd_ump_msg_set_tempo_t set_tempo;
712  snd_ump_msg_set_time_sig_t set_time_sig;
713  snd_ump_msg_set_metronome_t set_metronome;
714  snd_ump_msg_set_key_sig_t set_key_sig;
715  snd_ump_msg_set_chord_name_t set_chord_name;
716  snd_ump_msg_hdr_t hdr;
717  uint32_t raw[4];
719 
721 typedef struct _snd_ump_msg_mixed_data_header {
722 #ifdef __BIG_ENDIAN_BITFIELD
723  uint8_t type:4;
724  uint8_t group:4;
725  uint8_t status:4;
726  uint8_t mds_id:4;
727  uint16_t bytes;
729  uint16_t chunks;
730  uint16_t chunk;
732  uint16_t manufacturer;
733  uint16_t device;
735  uint16_t sub_id_1;
736  uint16_t sub_id_2;
737 #else
738  uint16_t bytes;
739  uint8_t mds_id:4;
740  uint8_t status:4;
741  uint8_t group:4;
742  uint8_t type:4;
744  uint16_t chunk;
745  uint16_t chunks;
747  uint16_t device;
748  uint16_t manufacturer;
750  uint16_t sub_id_2;
751  uint16_t sub_id_1;
752 #endif
754 
756 typedef struct _snd_ump_msg_mixed_data_payload {
757 #ifdef __BIG_ENDIAN_BITFIELD
758  uint8_t type:4;
759  uint8_t group:4;
760  uint8_t status:4;
761  uint8_t mds_id:4;
762  uint16_t payload1;
764  uint32_t payloads[3];
765 #else
766  uint16_t payload1;
767  uint8_t mds_id:4;
768  uint8_t status:4;
769  uint8_t group:4;
770  uint8_t type:4;
772  uint32_t payloads[3];
773 #endif
775 
777 typedef union _snd_ump_msg_mixed_data {
780  uint32_t raw[4];
782 
784 typedef struct _snd_ump_msg_jr_clock {
785 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
786  uint8_t type:4;
787  uint8_t group:4;
788  uint8_t status:4;
789  uint8_t reserved:4;
790  uint16_t time;
791 #else
792  uint16_t time;
793  uint8_t reserved:4;
794  uint8_t status:4;
795  uint8_t group:4;
796  uint8_t type:4;
797 #endif
798 } __attribute((packed)) snd_ump_msg_jr_clock_t;
799 
801 typedef struct _snd_ump_msg_dctpq {
802 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
803  uint8_t type:4;
804  uint8_t group:4;
805  uint8_t status:4;
806  uint8_t reserved:4;
807  uint16_t ticks;
808 #else
809  uint16_t ticks;
810  uint8_t reserved:4;
811  uint8_t status:4;
812  uint8_t group:4;
813  uint8_t type:4;
814 #endif
815 } __attribute((packed)) snd_ump_msg_dctpq_t;
816 
818 typedef struct _snd_ump_msg_dc {
819 #ifdef SNDRV_BIG_ENDIAN_BITFIELD
820  uint32_t type:4;
821  uint32_t group:4;
822  uint32_t status:4;
823  uint32_t ticks:20;
824 #else
825  uint32_t ticks:20;
826  uint32_t status:4;
827  uint32_t group:4;
828  uint32_t type:4;
829 #endif
830 } __attribute((packed)) snd_ump_msg_dc_t;
831 
833 typedef union _snd_ump_msg_utility {
834  snd_ump_msg_jr_clock_t jr_clock;
835  snd_ump_msg_dctpq_t dctpq;
836  snd_ump_msg_dc_t dc;
837  snd_ump_msg_hdr_t hdr;
838  uint32_t raw;
840 
844 enum {
845  SND_UMP_MSG_TYPE_UTILITY = 0x00, /* Utility messages */
846  SND_UMP_MSG_TYPE_SYSTEM = 0x01, /* System messages */
847  SND_UMP_MSG_TYPE_MIDI1_CHANNEL_VOICE = 0x02, /* MIDI 1.0 messages */
848  SND_UMP_MSG_TYPE_DATA = 0x03, /* 7bit SysEx messages */
849  SND_UMP_MSG_TYPE_MIDI2_CHANNEL_VOICE = 0x04, /* MIDI 2.0 messages */
850  SND_UMP_MSG_TYPE_EXTENDED_DATA = 0x05, /* 8bit data message */
851  SND_UMP_MSG_TYPE_FLEX_DATA = 0x0d, /* Flexible data messages */
852  SND_UMP_MSG_TYPE_STREAM = 0x0f, /* Stream messages */
853 };
854 
858 enum {
859  SND_UMP_MSG_PER_NOTE_RCC = 0x0,
860  SND_UMP_MSG_PER_NOTE_ACC = 0x1,
861  SND_UMP_MSG_RPN = 0x2,
862  SND_UMP_MSG_NRPN = 0x3,
863  SND_UMP_MSG_RELATIVE_RPN = 0x4,
864  SND_UMP_MSG_RELATIVE_NRPN = 0x5,
865  SND_UMP_MSG_PER_NOTE_PITCHBEND = 0x6,
866  SND_UMP_MSG_NOTE_OFF = 0x8,
867  SND_UMP_MSG_NOTE_ON = 0x9,
868  SND_UMP_MSG_POLY_PRESSURE = 0xa,
869  SND_UMP_MSG_CONTROL_CHANGE = 0xb,
870  SND_UMP_MSG_PROGRAM_CHANGE = 0xc,
871  SND_UMP_MSG_CHANNEL_PRESSURE = 0xd,
872  SND_UMP_MSG_PITCHBEND = 0xe,
873  SND_UMP_MSG_PER_NOTE_MGMT = 0xf,
874 };
875 
879 enum {
880  SND_UMP_MSG_REALTIME = 0xf0, /* mask */
881  SND_UMP_MSG_SYSEX_START = 0xf0,
882  SND_UMP_MSG_MIDI_TIME_CODE = 0xf1,
883  SND_UMP_MSG_SONG_POSITION = 0xf2,
884  SND_UMP_MSG_SONG_SELECT = 0xf3,
885  SND_UMP_MSG_TUNE_REQUEST = 0xf6,
886  SND_UMP_MSG_SYSEX_END = 0xf7,
887  SND_UMP_MSG_TIMING_CLOCK = 0xf8,
888  SND_UMP_MSG_START = 0xfa,
889  SND_UMP_MSG_CONTINUE = 0xfb,
890  SND_UMP_MSG_STOP = 0xfc,
891  SND_UMP_MSG_ACTIVE_SENSING = 0xfe,
892  SND_UMP_MSG_RESET = 0xff,
893 };
894 
896 enum {
897  SND_UMP_SYSEX_STATUS_SINGLE = 0,
898  SND_UMP_SYSEX_STATUS_START = 1,
899  SND_UMP_SYSEX_STATUS_CONTINUE = 2,
900  SND_UMP_SYSEX_STATUS_END = 3,
901 };
902 
904 enum {
905  SND_UMP_MIXED_DATA_SET_STATUS_HEADER = 8,
906  SND_UMP_MIXED_DATA_SET_STATUS_PAYLOAD = 9,
907 };
908 
910 enum {
911  SND_UMP_UTILITY_MSG_STATUS_NOOP = 0x00,
912  SND_UMP_UTILITY_MSG_STATUS_JR_CLOCK = 0x01,
913  SND_UMP_UTILITY_MSG_STATUS_JR_TSTAMP = 0x02,
914  SND_UMP_UTILITY_MSG_STATUS_DCTPQ = 0x03,
915  SND_UMP_UTILITY_MSG_STATUS_DC = 0x04,
916 };
917 
919 enum {
920  SND_UMP_STREAM_MSG_STATUS_EP_DISCOVERY = 0x00,
921  SND_UMP_STREAM_MSG_STATUS_EP_INFO = 0x01,
922  SND_UMP_STREAM_MSG_STATUS_DEVICE_INFO = 0x02,
923  SND_UMP_STREAM_MSG_STATUS_EP_NAME = 0x03,
924  SND_UMP_STREAM_MSG_STATUS_PRODUCT_ID = 0x04,
925  SND_UMP_STREAM_MSG_STATUS_STREAM_CFG_REQUEST = 0x05,
926  SND_UMP_STREAM_MSG_STATUS_STREAM_CFG = 0x06,
927  SND_UMP_STREAM_MSG_STATUS_FB_DISCOVERY = 0x10,
928  SND_UMP_STREAM_MSG_STATUS_FB_INFO = 0x11,
929  SND_UMP_STREAM_MSG_STATUS_FB_NAME = 0x12,
930  SND_UMP_STREAM_MSG_STATUS_START_CLIP = 0x20,
931  SND_UMP_STREAM_MSG_STATUS_END_CLIP = 0x21,
932 };
933 
935 enum {
936  SND_UMP_STREAM_MSG_REQUEST_EP_INFO = (1U << 0),
937  SND_UMP_STREAM_MSG_REQUEST_DEVICE_INFO = (1U << 1),
938  SND_UMP_STREAM_MSG_REQUEST_EP_NAME = (1U << 2),
939  SND_UMP_STREAM_MSG_REQUEST_PRODUCT_ID = (1U << 3),
940  SND_UMP_STREAM_MSG_REQUEST_STREAM_CFG = (1U << 4),
941 };
942 
944 enum {
945  SND_UMP_STREAM_MSG_REQUEST_FB_INFO = (1U << 0),
946  SND_UMP_STREAM_MSG_REQUEST_FB_NAME = (1U << 1),
947 };
948 
950 enum {
951  SND_UMP_STREAM_MSG_EP_INFO_CAP_TXJR = (1U << 0), /* Sending JRTS */
952  SND_UMP_STREAM_MSG_EP_INFO_CAP_RXJR = (1U << 1), /* Receiving JRTS */
953  SND_UMP_STREAM_MSG_EP_INFO_CAP_MIDI1 = (1U << 8), /* MIDI 1.0 */
954  SND_UMP_STREAM_MSG_EP_INFO_CAP_MIDI2 = (1U << 9), /* MIDI 2.0 */
955 };
956 
958 enum {
959  SND_UMP_STREAM_MSG_FORMAT_SINGLE = 0,
960  SND_UMP_STREAM_MSG_FORMAT_START = 1,
961  SND_UMP_STREAM_MSG_FORMAT_CONTINUE = 2,
962  SND_UMP_STREAM_MSG_FORMAT_END = 3,
963 };
964 
966 enum {
967  SND_UMP_FLEX_DATA_MSG_FORMAT_SINGLE = 0,
968  SND_UMP_FLEX_DATA_MSG_FORMAT_START = 1,
969  SND_UMP_FLEX_DATA_MSG_FORMAT_CONTINUE = 2,
970  SND_UMP_FLEX_DATA_MSG_FORMAT_END = 3,
971 };
972 
974 enum {
975  SND_UMP_FLEX_DATA_MSG_ADDR_CHANNEL = 0,
976  SND_UMP_FLEX_DATA_MSG_ADDR_GROUP = 1,
977 };
978 
980 enum {
981  SND_UMP_FLEX_DATA_MSG_BANK_SETUP = 0,
982  SND_UMP_FLEX_DATA_MSG_BANK_METADATA = 1,
983  SND_UMP_FLEX_DATA_MSG_BANK_PERF_TEXT = 2,
984 };
985 
987 enum {
988  SND_UMP_FLEX_DATA_MSG_STATUS_SET_TEMPO = 0x00,
989  SND_UMP_FLEX_DATA_MSG_STATUS_SET_TIME_SIGNATURE = 0x01,
990  SND_UMP_FLEX_DATA_MSG_STATUS_SET_METRONOME = 0x02,
991  SND_UMP_FLEX_DATA_MSG_STATUS_SET_KEY_SIGNATURE = 0x05,
992  SND_UMP_FLEX_DATA_MSG_STATUS_SET_CHORD_NAME = 0x06,
993 };
994 
996 enum {
997  SND_UMP_FLEX_DATA_MSG_STATUS_PROJECT_NAME = 0x01,
998  SND_UMP_FLEX_DATA_MSG_STATUS_SONG_NAME = 0x02,
999  SND_UMP_FLEX_DATA_MSG_STATUS_MIDI_CLIP_NAME = 0x03,
1000  SND_UMP_FLEX_DATA_MSG_STATUS_COPYRIGHT_NOTICE = 0x04,
1001  SND_UMP_FLEX_DATA_MSG_STATUS_COMPOSER_NAME = 0x05,
1002  SND_UMP_FLEX_DATA_MSG_STATUS_LYRICIST_NAME = 0x06,
1003  SND_UMP_FLEX_DATA_MSG_STATUS_ARRANGER_NAME = 0x07,
1004  SND_UMP_FLEX_DATA_MSG_STATUS_PUBLISHER_NAME = 0x08,
1005  SND_UMP_FLEX_DATA_MSG_STATUS_PRIMARY_PERFORMER = 0x09,
1006  SND_UMP_FLEX_DATA_MSG_STATUS_ACCOMPANY_PERFORMAER = 0x0a,
1007  SND_UMP_FLEX_DATA_MSG_STATUS_RECORDING_DATE = 0x0b,
1008  SND_UMP_FLEX_DATA_MSG_STATUS_RECORDING_LOCATION = 0x0c,
1009 };
1010 
1012 enum {
1013  SND_UMP_FLEX_DATA_MSG_STATUS_LYRICS = 0x01,
1014  SND_UMP_FLEX_DATA_MSG_STATUS_LYRICS_LANGUAGE = 0x02,
1015  SND_UMP_FLEX_DATA_MSG_STATUS_RUBY = 0x03,
1016  SND_UMP_FLEX_DATA_MSG_STATUS_RUBY_LANGUAGE = 0x04,
1017 };
1018 
1022 static inline uint8_t snd_ump_msg_hdr_status(uint32_t ump)
1023 {
1024  return (ump >> 20) & 0x0f;
1025 }
1026 
1030 static inline uint8_t snd_ump_msg_hdr_channel(uint32_t ump)
1031 {
1032  return (ump >> 16) & 0x0f;
1033 }
1034 
1038 static inline uint8_t snd_ump_msg_hdr_type(uint32_t ump)
1039 {
1040  return (ump >> 28);
1041 }
1042 
1046 static inline int snd_ump_msg_type_is_groupless(uint8_t type)
1047 {
1048  return type == SND_UMP_MSG_TYPE_UTILITY || type == SND_UMP_MSG_TYPE_STREAM;
1049 }
1050 
1054 static inline uint8_t snd_ump_msg_hdr_group(uint32_t ump)
1055 {
1056  return (ump >> 24) & 0x0f;
1057 }
1058 
1062 static inline uint8_t snd_ump_msg_status(const uint32_t *ump)
1063 {
1064  return snd_ump_msg_hdr_status(*ump);
1065 }
1066 
1070 static inline uint8_t snd_ump_msg_channel(const uint32_t *ump)
1071 {
1072  return snd_ump_msg_hdr_channel(*ump);
1073 }
1074 
1078 static inline uint8_t snd_ump_msg_type(const uint32_t *ump)
1079 {
1080  return snd_ump_msg_hdr_type(*ump);
1081 }
1082 
1086 static inline uint8_t snd_ump_msg_group(const uint32_t *ump)
1087 {
1088  return snd_ump_msg_hdr_group(*ump);
1089 }
1090 
1094 static inline uint8_t snd_ump_sysex_msg_status(const uint32_t *ump)
1095 {
1096  return (*ump >> 20) & 0xf;
1097 }
1098 
1102 static inline uint8_t snd_ump_sysex_msg_length(const uint32_t *ump)
1103 {
1104  return (*ump >> 16) & 0xf;
1105 }
1106 
1110 static inline uint8_t snd_ump_get_byte(const uint32_t *ump, unsigned int offset)
1111 {
1112 #ifdef SNDRV_BIG_ENDIAN
1113  return ((const uint8_t *)ump)[offset];
1114 #else
1115  return ((const uint8_t *)ump)[(offset & ~3) | (3 - (offset & 3))];
1116 #endif
1117 }
1118 
1119 int snd_ump_msg_sysex_expand(const uint32_t *ump, uint8_t *buf, size_t maxlen,
1120  size_t *filled);
1121 int snd_ump_packet_length(unsigned int type);
1122 
1123 #ifdef __cplusplus
1124 }
1125 #endif
1126 
1127 #endif /* __ALSA_UMP_MSG_H */
Definition: ump_msg.h:818
uint32_t group
Definition: ump_msg.h:827
uint32_t status
Definition: ump_msg.h:826
uint32_t ticks
Definition: ump_msg.h:825
uint32_t type
Definition: ump_msg.h:828
Definition: ump_msg.h:801
uint8_t type
Definition: ump_msg.h:813
uint8_t reserved
Definition: ump_msg.h:810
uint8_t group
Definition: ump_msg.h:812
uint16_t ticks
Definition: ump_msg.h:809
uint8_t status
Definition: ump_msg.h:811
Definition: ump_msg.h:480
uint8_t group
Definition: ump_msg.h:496
uint8_t channel
Definition: ump_msg.h:493
uint8_t status
Definition: ump_msg.h:491
uint32_t data[3]
Definition: ump_msg.h:498
uint8_t type
Definition: ump_msg.h:497
uint8_t format
Definition: ump_msg.h:495
uint8_t addrs
Definition: ump_msg.h:494
uint8_t status_bank
Definition: ump_msg.h:492
Definition: ump_msg.h:19
uint8_t byte1
Definition: ump_msg.h:29
uint8_t type
Definition: ump_msg.h:33
uint8_t status
Definition: ump_msg.h:31
uint8_t channel
Definition: ump_msg.h:30
uint8_t byte2
Definition: ump_msg.h:28
uint8_t group
Definition: ump_msg.h:32
Definition: ump_msg.h:784
uint8_t status
Definition: ump_msg.h:794
uint8_t type
Definition: ump_msg.h:796
uint16_t time
Definition: ump_msg.h:792
uint8_t reserved
Definition: ump_msg.h:793
uint8_t group
Definition: ump_msg.h:795
Definition: ump_msg.h:114
uint8_t data
Definition: ump_msg.h:124
uint8_t type
Definition: ump_msg.h:128
uint8_t reserved
Definition: ump_msg.h:123
uint8_t channel
Definition: ump_msg.h:125
uint8_t status
Definition: ump_msg.h:126
uint8_t group
Definition: ump_msg.h:127
Definition: ump_msg.h:76
uint8_t channel
Definition: ump_msg.h:87
uint8_t data
Definition: ump_msg.h:85
uint8_t group
Definition: ump_msg.h:89
uint8_t type
Definition: ump_msg.h:90
uint8_t status
Definition: ump_msg.h:88
uint8_t index
Definition: ump_msg.h:86
Definition: ump_msg.h:38
uint8_t status
Definition: ump_msg.h:50
uint8_t velocity
Definition: ump_msg.h:47
uint8_t note
Definition: ump_msg.h:48
uint8_t channel
Definition: ump_msg.h:49
uint8_t type
Definition: ump_msg.h:52
uint8_t group
Definition: ump_msg.h:51
Definition: ump_msg.h:57
uint8_t type
Definition: ump_msg.h:71
uint8_t group
Definition: ump_msg.h:70
uint8_t data
Definition: ump_msg.h:66
uint8_t status
Definition: ump_msg.h:69
uint8_t channel
Definition: ump_msg.h:68
uint8_t note
Definition: ump_msg.h:67
Definition: ump_msg.h:133
uint8_t status
Definition: ump_msg.h:145
uint8_t channel
Definition: ump_msg.h:144
uint8_t group
Definition: ump_msg.h:146
uint8_t data_lsb
Definition: ump_msg.h:143
uint8_t type
Definition: ump_msg.h:147
uint8_t data_msb
Definition: ump_msg.h:142
Definition: ump_msg.h:95
uint8_t group
Definition: ump_msg.h:108
uint8_t program
Definition: ump_msg.h:105
uint8_t reserved
Definition: ump_msg.h:104
uint8_t type
Definition: ump_msg.h:109
uint8_t status
Definition: ump_msg.h:107
uint8_t channel
Definition: ump_msg.h:106
Definition: ump_msg.h:366
uint8_t type
Definition: ump_msg.h:380
uint32_t data
Definition: ump_msg.h:382
uint8_t status
Definition: ump_msg.h:378
uint16_t reserved
Definition: ump_msg.h:376
uint8_t group
Definition: ump_msg.h:379
uint8_t channel
Definition: ump_msg.h:377
Definition: ump_msg.h:291
uint8_t group
Definition: ump_msg.h:306
uint8_t type
Definition: ump_msg.h:307
uint8_t channel
Definition: ump_msg.h:304
uint8_t index
Definition: ump_msg.h:303
uint32_t data
Definition: ump_msg.h:309
uint8_t status
Definition: ump_msg.h:305
uint8_t reserved
Definition: ump_msg.h:302
Definition: ump_msg.h:191
uint8_t group
Definition: ump_msg.h:207
uint8_t status
Definition: ump_msg.h:206
uint8_t note
Definition: ump_msg.h:204
uint16_t velocity
Definition: ump_msg.h:211
uint8_t attr_type
Definition: ump_msg.h:203
uint8_t channel
Definition: ump_msg.h:205
uint16_t attr_data
Definition: ump_msg.h:210
uint8_t type
Definition: ump_msg.h:208
Definition: ump_msg.h:216
uint8_t group
Definition: ump_msg.h:231
uint32_t data
Definition: ump_msg.h:234
uint8_t channel
Definition: ump_msg.h:229
uint8_t reserved
Definition: ump_msg.h:227
uint8_t type
Definition: ump_msg.h:232
uint8_t note
Definition: ump_msg.h:228
uint8_t status
Definition: ump_msg.h:230
Definition: ump_msg.h:239
uint32_t data
Definition: ump_msg.h:257
uint8_t note
Definition: ump_msg.h:251
uint8_t channel
Definition: ump_msg.h:252
uint8_t status
Definition: ump_msg.h:253
uint8_t type
Definition: ump_msg.h:255
uint8_t index
Definition: ump_msg.h:250
uint8_t group
Definition: ump_msg.h:254
Definition: ump_msg.h:268
uint8_t note
Definition: ump_msg.h:280
uint8_t group
Definition: ump_msg.h:283
uint8_t status
Definition: ump_msg.h:282
uint8_t flags
Definition: ump_msg.h:279
uint8_t channel
Definition: ump_msg.h:281
uint32_t reserved
Definition: ump_msg.h:286
uint8_t type
Definition: ump_msg.h:284
Definition: ump_msg.h:408
uint8_t channel
Definition: ump_msg.h:421
uint8_t note
Definition: ump_msg.h:420
uint8_t type
Definition: ump_msg.h:424
uint8_t status
Definition: ump_msg.h:422
uint8_t reserved
Definition: ump_msg.h:419
uint32_t data
Definition: ump_msg.h:426
uint8_t group
Definition: ump_msg.h:423
Definition: ump_msg.h:387
uint8_t channel
Definition: ump_msg.h:398
uint8_t group
Definition: ump_msg.h:400
uint16_t reserved
Definition: ump_msg.h:397
uint8_t status
Definition: ump_msg.h:399
uint8_t type
Definition: ump_msg.h:401
uint32_t data
Definition: ump_msg.h:403
Definition: ump_msg.h:337
uint16_t reserved
Definition: ump_msg.h:352
uint8_t program
Definition: ump_msg.h:361
uint8_t group
Definition: ump_msg.h:355
uint8_t status
Definition: ump_msg.h:354
uint8_t channel
Definition: ump_msg.h:353
uint8_t bank_msb
Definition: ump_msg.h:359
uint8_t reserved2
Definition: ump_msg.h:360
uint16_t bank_valid
Definition: ump_msg.h:351
uint8_t bank_lsb
Definition: ump_msg.h:358
uint8_t type
Definition: ump_msg.h:356
Definition: ump_msg.h:314
uint8_t bank
Definition: ump_msg.h:326
uint8_t status
Definition: ump_msg.h:328
uint8_t type
Definition: ump_msg.h:330
uint8_t channel
Definition: ump_msg.h:327
uint32_t data
Definition: ump_msg.h:332
uint8_t index
Definition: ump_msg.h:325
uint8_t group
Definition: ump_msg.h:329
Definition: ump_msg.h:643
uint8_t alter4_type
Definition: ump_msg.h:693
uint8_t bass_sharp
Definition: ump_msg.h:703
uint8_t alter3_type
Definition: ump_msg.h:695
uint8_t tonic_sharp
Definition: ump_msg.h:689
uint8_t type
Definition: ump_msg.h:681
uint8_t alter4_degree
Definition: ump_msg.h:692
uint8_t bass_type
Definition: ump_msg.h:701
uint8_t alter3_degree
Definition: ump_msg.h:694
uint8_t alter1_degree
Definition: ump_msg.h:685
uint8_t bass_note
Definition: ump_msg.h:702
uint8_t bass_alter1_degree
Definition: ump_msg.h:699
uint8_t format
Definition: ump_msg.h:679
uint8_t addrs
Definition: ump_msg.h:678
uint8_t chord_tonic
Definition: ump_msg.h:688
uint8_t bass_alter2_degree
Definition: ump_msg.h:697
uint8_t alter1_type
Definition: ump_msg.h:686
uint8_t bass_alter2_type
Definition: ump_msg.h:698
uint16_t reserved
Definition: ump_msg.h:691
uint8_t channel
Definition: ump_msg.h:677
uint8_t status_bank
Definition: ump_msg.h:676
uint8_t chord_type
Definition: ump_msg.h:687
uint8_t alter2_degree
Definition: ump_msg.h:683
uint8_t alter2_type
Definition: ump_msg.h:684
uint8_t status
Definition: ump_msg.h:675
uint8_t group
Definition: ump_msg.h:680
uint8_t bass_alter1_type
Definition: ump_msg.h:700
Definition: ump_msg.h:610
uint8_t sharps_flats
Definition: ump_msg.h:636
uint8_t group
Definition: ump_msg.h:631
uint32_t reserved2[2]
Definition: ump_msg.h:638
uint8_t tonic_note
Definition: ump_msg.h:635
uint8_t reserved1[3]
Definition: ump_msg.h:634
uint8_t status
Definition: ump_msg.h:626
uint8_t status_bank
Definition: ump_msg.h:627
uint8_t channel
Definition: ump_msg.h:628
uint8_t format
Definition: ump_msg.h:630
uint8_t addrs
Definition: ump_msg.h:629
uint8_t type
Definition: ump_msg.h:632
Definition: ump_msg.h:567
uint8_t clocks_primary
Definition: ump_msg.h:599
uint16_t reserved1
Definition: ump_msg.h:601
uint8_t channel
Definition: ump_msg.h:590
uint8_t bar_accent_1
Definition: ump_msg.h:598
uint8_t status_bank
Definition: ump_msg.h:589
uint8_t group
Definition: ump_msg.h:593
uint8_t format
Definition: ump_msg.h:592
uint8_t type
Definition: ump_msg.h:594
uint8_t status
Definition: ump_msg.h:588
uint8_t bar_accent_2
Definition: ump_msg.h:597
uint8_t subdivision_1
Definition: ump_msg.h:603
uint8_t addrs
Definition: ump_msg.h:591
uint8_t subdivision_2
Definition: ump_msg.h:602
uint32_t reserved2
Definition: ump_msg.h:605
uint8_t bar_accent_3
Definition: ump_msg.h:596
Definition: ump_msg.h:503
uint8_t group
Definition: ump_msg.h:522
uint8_t format
Definition: ump_msg.h:521
uint8_t addrs
Definition: ump_msg.h:520
uint8_t status
Definition: ump_msg.h:517
uint8_t type
Definition: ump_msg.h:523
uint32_t tempo
Definition: ump_msg.h:525
uint8_t channel
Definition: ump_msg.h:519
uint32_t reserved[2]
Definition: ump_msg.h:527
uint8_t status_bank
Definition: ump_msg.h:518
Definition: ump_msg.h:532
uint8_t addrs
Definition: ump_msg.h:552
uint8_t channel
Definition: ump_msg.h:551
uint8_t format
Definition: ump_msg.h:553
uint8_t status
Definition: ump_msg.h:549
uint32_t reserved[2]
Definition: ump_msg.h:562
uint8_t numerator
Definition: ump_msg.h:560
uint8_t denominator
Definition: ump_msg.h:559
uint8_t type
Definition: ump_msg.h:555
uint8_t group
Definition: ump_msg.h:554
uint8_t reserved1
Definition: ump_msg.h:557
uint8_t status_bank
Definition: ump_msg.h:550
uint8_t num_notes
Definition: ump_msg.h:558
Definition: ump_msg.h:452
uint16_t data1
Definition: ump_msg.h:462
uint32_t data2
Definition: ump_msg.h:466
uint32_t data4
Definition: ump_msg.h:468
uint32_t data3
Definition: ump_msg.h:467
uint16_t type
Definition: ump_msg.h:465
uint16_t format
Definition: ump_msg.h:464
uint16_t status
Definition: ump_msg.h:463
Definition: ump_msg.h:721
uint16_t device
Definition: ump_msg.h:747
uint8_t type
Definition: ump_msg.h:742
uint16_t bytes
Definition: ump_msg.h:738
uint8_t status
Definition: ump_msg.h:740
uint16_t sub_id_2
Definition: ump_msg.h:750
uint16_t manufacturer
Definition: ump_msg.h:748
uint8_t group
Definition: ump_msg.h:741
uint16_t chunk
Definition: ump_msg.h:744
uint16_t sub_id_1
Definition: ump_msg.h:751
uint8_t mds_id
Definition: ump_msg.h:739
uint16_t chunks
Definition: ump_msg.h:745
Definition: ump_msg.h:756
uint8_t group
Definition: ump_msg.h:769
uint8_t mds_id
Definition: ump_msg.h:767
uint8_t type
Definition: ump_msg.h:770
uint16_t payload1
Definition: ump_msg.h:766
uint8_t status
Definition: ump_msg.h:768
Definition: ump_msg.h:152
uint8_t parm1
Definition: ump_msg.h:161
uint8_t type
Definition: ump_msg.h:164
uint8_t status
Definition: ump_msg.h:162
uint8_t parm2
Definition: ump_msg.h:160
uint8_t group
Definition: ump_msg.h:163
int snd_ump_msg_sysex_expand(const uint32_t *ump, uint8_t *buf, size_t maxlen, size_t *filled)
fill sysex byte from a UMP packet
Definition: ump.c:1063
@ SND_UMP_MIDI2_NOTE_ATTR_MANUFACTURER
Definition: ump_msg.h:185
@ SND_UMP_MIDI2_NOTE_ATTR_PROFILE
Definition: ump_msg.h:186
@ SND_UMP_MIDI2_NOTE_ATTR_NO_DATA
Definition: ump_msg.h:184
@ SND_UMP_MIDI2_NOTE_ATTR_PITCH79
Definition: ump_msg.h:187
uint8_t group
Definition: ump_msg.h:12
int snd_ump_packet_length(unsigned int type)
return the length of a UMP packet type
Definition: ump.c:1082
uint8_t type
Definition: ump_msg.h:13
uint8_t status
Definition: ump_msg.h:11
@ SND_UMP_MIDI2_PNMGMT_RESET_CONTROLLERS
Definition: ump_msg.h:263
@ SND_UMP_MIDI2_PNMGMT_DETACH_CONTROLLERS
Definition: ump_msg.h:264
enum @1 __attribute
Definition: ump_msg.h:708
snd_ump_msg_set_metronome_t set_metronome
Definition: ump_msg.h:713
snd_ump_msg_set_chord_name_t set_chord_name
Definition: ump_msg.h:715
snd_ump_msg_set_key_sig_t set_key_sig
Definition: ump_msg.h:714
snd_ump_msg_set_time_sig_t set_time_sig
Definition: ump_msg.h:712
snd_ump_msg_hdr_t hdr
Definition: ump_msg.h:716
snd_ump_msg_flex_data_meta_t meta
Definition: ump_msg.h:709
snd_ump_msg_flex_data_meta_t text
Definition: ump_msg.h:710
snd_ump_msg_set_tempo_t set_tempo
Definition: ump_msg.h:711
Definition: ump_msg.h:169
snd_ump_msg_midi1_pitchbend_t pitchbend
Definition: ump_msg.h:176
snd_ump_msg_midi1_program_t program_change
Definition: ump_msg.h:174
uint32_t raw
Definition: ump_msg.h:179
snd_ump_msg_midi1_cc_t control_change
Definition: ump_msg.h:173
snd_ump_msg_midi1_note_t note_on
Definition: ump_msg.h:170
snd_ump_msg_midi1_note_t note_off
Definition: ump_msg.h:171
snd_ump_msg_midi1_caf_t channel_pressure
Definition: ump_msg.h:175
snd_ump_msg_hdr_t hdr
Definition: ump_msg.h:178
snd_ump_msg_system_t system
Definition: ump_msg.h:177
snd_ump_msg_midi1_paf_t poly_pressure
Definition: ump_msg.h:172
Definition: ump_msg.h:431
snd_ump_msg_midi2_rpn_t relative_rpn
Definition: ump_msg.h:441
snd_ump_msg_midi2_paf_t poly_pressure
Definition: ump_msg.h:434
snd_ump_msg_midi2_note_t note_off
Definition: ump_msg.h:433
snd_ump_msg_midi2_program_t program_change
Definition: ump_msg.h:443
snd_ump_msg_midi2_rpn_t rpn
Definition: ump_msg.h:439
snd_ump_msg_midi2_per_note_mgmt_t per_note_mgmt
Definition: ump_msg.h:437
snd_ump_msg_midi2_pitchbend_t pitchbend
Definition: ump_msg.h:445
snd_ump_msg_midi2_cc_t control_change
Definition: ump_msg.h:438
snd_ump_msg_midi2_per_note_pitchbend_t per_note_pitchbend
Definition: ump_msg.h:446
snd_ump_msg_midi2_note_t note_on
Definition: ump_msg.h:432
snd_ump_msg_midi2_rpn_t nrpn
Definition: ump_msg.h:440
snd_ump_msg_midi2_per_note_cc_t per_note_acc
Definition: ump_msg.h:435
snd_ump_msg_hdr_t hdr
Definition: ump_msg.h:447
snd_ump_msg_midi2_caf_t channel_pressure
Definition: ump_msg.h:444
snd_ump_msg_midi2_per_note_cc_t per_note_rcc
Definition: ump_msg.h:436
snd_ump_msg_midi2_rpn_t relative_nrpn
Definition: ump_msg.h:442
Definition: ump_msg.h:777
snd_ump_msg_mixed_data_payload_t payload
Definition: ump_msg.h:779
snd_ump_msg_mixed_data_header_t header
Definition: ump_msg.h:778
Definition: ump_msg.h:473
snd_ump_msg_hdr_t hdr
Definition: ump_msg.h:475
snd_ump_msg_stream_gen_t gen
Definition: ump_msg.h:474
Definition: ump_msg.h:833
snd_ump_msg_dc_t dc
Definition: ump_msg.h:836
snd_ump_msg_jr_clock_t jr_clock
Definition: ump_msg.h:834
snd_ump_msg_dctpq_t dctpq
Definition: ump_msg.h:835
uint32_t raw
Definition: ump_msg.h:838
snd_ump_msg_hdr_t hdr
Definition: ump_msg.h:837