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