ALSA project - the C library reference

Loading...
Searching...
No Matches
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
103 typedef struct _snd_ump_msg_midi1_program {
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
141 typedef struct _snd_ump_msg_midi1_pitchbend {
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;
188} snd_ump_msg_midi1_t;
189
191 enum {
192 SND_UMP_MIDI2_NOTE_ATTR_NO_DATA = 0x00,
193 SND_UMP_MIDI2_NOTE_ATTR_MANUFACTURER = 0x01,
194 SND_UMP_MIDI2_NOTE_ATTR_PROFILE = 0x02,
195 SND_UMP_MIDI2_NOTE_ATTR_PITCH79 = 0x03,
196};
197
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
247 typedef struct _snd_ump_msg_midi2_per_note_cc {
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 {
271 SND_UMP_MIDI2_PNMGMT_RESET_CONTROLLERS = 0x01,
272 SND_UMP_MIDI2_PNMGMT_DETACH_CONTROLLERS = 0x02,
273};
274
276 typedef struct _snd_ump_msg_midi2_per_note_mgmt {
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
345 typedef struct _snd_ump_msg_midi2_program {
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
395 typedef struct _snd_ump_msg_midi2_pitchbend {
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
416 typedef struct _snd_ump_msg_midi2_per_note_pitchbend {
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];
457} snd_ump_msg_midi2_t;
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];
485} snd_ump_msg_stream_t;
486
488 typedef struct _snd_ump_msg_flex_data_meta {
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
540 typedef struct _snd_ump_msg_set_time_sig {
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
575 typedef struct _snd_ump_msg_set_metronome {
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
651 typedef struct _snd_ump_msg_set_chord_name {
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];
726} snd_ump_msg_flex_data_t;
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
761} snd_ump_msg_mixed_data_header_t;
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
782} snd_ump_msg_mixed_data_payload_t;
783
785 typedef union _snd_ump_msg_mixed_data {
786 snd_ump_msg_mixed_data_header_t header;
787 snd_ump_msg_mixed_data_payload_t payload;
788 uint32_t raw[4];
789} snd_ump_msg_mixed_data_t;
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;
847} snd_ump_msg_utility_t;
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 */
_snd_ump_msg_dc
Definition ump_msg.h:826
_snd_ump_msg_dc::group
uint32_t group
Definition ump_msg.h:829
_snd_ump_msg_dc::status
uint32_t status
Definition ump_msg.h:830
_snd_ump_msg_dc::ticks
uint32_t ticks
Definition ump_msg.h:831
_snd_ump_msg_dc::type
uint32_t type
Definition ump_msg.h:828
_snd_ump_msg_dctpq
Definition ump_msg.h:809
_snd_ump_msg_dctpq::type
uint8_t type
Definition ump_msg.h:811
_snd_ump_msg_dctpq::reserved
uint8_t reserved
Definition ump_msg.h:814
_snd_ump_msg_dctpq::group
uint8_t group
Definition ump_msg.h:812
_snd_ump_msg_dctpq::ticks
uint16_t ticks
Definition ump_msg.h:815
_snd_ump_msg_dctpq::status
uint8_t status
Definition ump_msg.h:813
_snd_ump_msg_flex_data_meta
Definition ump_msg.h:488
_snd_ump_msg_flex_data_meta::group
uint8_t group
Definition ump_msg.h:491
_snd_ump_msg_flex_data_meta::channel
uint8_t channel
Definition ump_msg.h:494
_snd_ump_msg_flex_data_meta::status
uint8_t status
Definition ump_msg.h:496
_snd_ump_msg_flex_data_meta::data
uint32_t data[3]
Definition ump_msg.h:497
_snd_ump_msg_flex_data_meta::type
uint8_t type
Definition ump_msg.h:490
_snd_ump_msg_flex_data_meta::format
uint8_t format
Definition ump_msg.h:492
_snd_ump_msg_flex_data_meta::addrs
uint8_t addrs
Definition ump_msg.h:493
_snd_ump_msg_flex_data_meta::status_bank
uint8_t status_bank
Definition ump_msg.h:495
_snd_ump_msg_hdr
Definition ump_msg.h:27
_snd_ump_msg_hdr::byte1
uint8_t byte1
Definition ump_msg.h:33
_snd_ump_msg_hdr::type
uint8_t type
Definition ump_msg.h:29
_snd_ump_msg_hdr::status
uint8_t status
Definition ump_msg.h:31
_snd_ump_msg_hdr::channel
uint8_t channel
Definition ump_msg.h:32
_snd_ump_msg_hdr::byte2
uint8_t byte2
Definition ump_msg.h:34
_snd_ump_msg_hdr::group
uint8_t group
Definition ump_msg.h:30
_snd_ump_msg_jr_clock
Definition ump_msg.h:792
_snd_ump_msg_jr_clock::status
uint8_t status
Definition ump_msg.h:796
_snd_ump_msg_jr_clock::type
uint8_t type
Definition ump_msg.h:794
_snd_ump_msg_jr_clock::time
uint16_t time
Definition ump_msg.h:798
_snd_ump_msg_jr_clock::reserved
uint8_t reserved
Definition ump_msg.h:797
_snd_ump_msg_jr_clock::group
uint8_t group
Definition ump_msg.h:795
_snd_ump_msg_midi1_caf
Definition ump_msg.h:122
_snd_ump_msg_midi1_caf::data
uint8_t data
Definition ump_msg.h:128
_snd_ump_msg_midi1_caf::type
uint8_t type
Definition ump_msg.h:124
_snd_ump_msg_midi1_caf::reserved
uint8_t reserved
Definition ump_msg.h:129
_snd_ump_msg_midi1_caf::channel
uint8_t channel
Definition ump_msg.h:127
_snd_ump_msg_midi1_caf::status
uint8_t status
Definition ump_msg.h:126
_snd_ump_msg_midi1_caf::group
uint8_t group
Definition ump_msg.h:125
_snd_ump_msg_midi1_cc
Definition ump_msg.h:84
_snd_ump_msg_midi1_cc::channel
uint8_t channel
Definition ump_msg.h:89
_snd_ump_msg_midi1_cc::data
uint8_t data
Definition ump_msg.h:91
_snd_ump_msg_midi1_cc::group
uint8_t group
Definition ump_msg.h:87
_snd_ump_msg_midi1_cc::type
uint8_t type
Definition ump_msg.h:86
_snd_ump_msg_midi1_cc::status
uint8_t status
Definition ump_msg.h:88
_snd_ump_msg_midi1_cc::index
uint8_t index
Definition ump_msg.h:90
_snd_ump_msg_midi1_note
Definition ump_msg.h:46
_snd_ump_msg_midi1_note::status
uint8_t status
Definition ump_msg.h:50
_snd_ump_msg_midi1_note::velocity
uint8_t velocity
Definition ump_msg.h:53
_snd_ump_msg_midi1_note::note
uint8_t note
Definition ump_msg.h:52
_snd_ump_msg_midi1_note::channel
uint8_t channel
Definition ump_msg.h:51
_snd_ump_msg_midi1_note::type
uint8_t type
Definition ump_msg.h:48
_snd_ump_msg_midi1_note::group
uint8_t group
Definition ump_msg.h:49
_snd_ump_msg_midi1_paf
Definition ump_msg.h:65
_snd_ump_msg_midi1_paf::type
uint8_t type
Definition ump_msg.h:67
_snd_ump_msg_midi1_paf::group
uint8_t group
Definition ump_msg.h:68
_snd_ump_msg_midi1_paf::data
uint8_t data
Definition ump_msg.h:72
_snd_ump_msg_midi1_paf::status
uint8_t status
Definition ump_msg.h:69
_snd_ump_msg_midi1_paf::channel
uint8_t channel
Definition ump_msg.h:70
_snd_ump_msg_midi1_paf::note
uint8_t note
Definition ump_msg.h:71
_snd_ump_msg_midi1_pitchbend
Definition ump_msg.h:141
_snd_ump_msg_midi1_pitchbend::status
uint8_t status
Definition ump_msg.h:145
_snd_ump_msg_midi1_pitchbend::channel
uint8_t channel
Definition ump_msg.h:146
_snd_ump_msg_midi1_pitchbend::group
uint8_t group
Definition ump_msg.h:144
_snd_ump_msg_midi1_pitchbend::data_lsb
uint8_t data_lsb
Definition ump_msg.h:147
_snd_ump_msg_midi1_pitchbend::type
uint8_t type
Definition ump_msg.h:143
_snd_ump_msg_midi1_pitchbend::data_msb
uint8_t data_msb
Definition ump_msg.h:148
_snd_ump_msg_midi1_program
Definition ump_msg.h:103
_snd_ump_msg_midi1_program::group
uint8_t group
Definition ump_msg.h:106
_snd_ump_msg_midi1_program::program
uint8_t program
Definition ump_msg.h:109
_snd_ump_msg_midi1_program::reserved
uint8_t reserved
Definition ump_msg.h:110
_snd_ump_msg_midi1_program::type
uint8_t type
Definition ump_msg.h:105
_snd_ump_msg_midi1_program::status
uint8_t status
Definition ump_msg.h:107
_snd_ump_msg_midi1_program::channel
uint8_t channel
Definition ump_msg.h:108
_snd_ump_msg_midi2_caf
Definition ump_msg.h:374
_snd_ump_msg_midi2_caf::type
uint8_t type
Definition ump_msg.h:376
_snd_ump_msg_midi2_caf::data
uint32_t data
Definition ump_msg.h:382
_snd_ump_msg_midi2_caf::status
uint8_t status
Definition ump_msg.h:378
_snd_ump_msg_midi2_caf::reserved
uint16_t reserved
Definition ump_msg.h:380
_snd_ump_msg_midi2_caf::group
uint8_t group
Definition ump_msg.h:377
_snd_ump_msg_midi2_caf::channel
uint8_t channel
Definition ump_msg.h:379
_snd_ump_msg_midi2_cc
Definition ump_msg.h:299
_snd_ump_msg_midi2_cc::group
uint8_t group
Definition ump_msg.h:302
_snd_ump_msg_midi2_cc::type
uint8_t type
Definition ump_msg.h:301
_snd_ump_msg_midi2_cc::channel
uint8_t channel
Definition ump_msg.h:304
_snd_ump_msg_midi2_cc::index
uint8_t index
Definition ump_msg.h:305
_snd_ump_msg_midi2_cc::data
uint32_t data
Definition ump_msg.h:308
_snd_ump_msg_midi2_cc::status
uint8_t status
Definition ump_msg.h:303
_snd_ump_msg_midi2_cc::reserved
uint8_t reserved
Definition ump_msg.h:306
_snd_ump_msg_midi2_note
Definition ump_msg.h:199
_snd_ump_msg_midi2_note::group
uint8_t group
Definition ump_msg.h:202
_snd_ump_msg_midi2_note::status
uint8_t status
Definition ump_msg.h:203
_snd_ump_msg_midi2_note::note
uint8_t note
Definition ump_msg.h:205
_snd_ump_msg_midi2_note::velocity
uint16_t velocity
Definition ump_msg.h:208
_snd_ump_msg_midi2_note::attr_type
uint8_t attr_type
Definition ump_msg.h:206
_snd_ump_msg_midi2_note::channel
uint8_t channel
Definition ump_msg.h:204
_snd_ump_msg_midi2_note::attr_data
uint16_t attr_data
Definition ump_msg.h:209
_snd_ump_msg_midi2_note::type
uint8_t type
Definition ump_msg.h:201
_snd_ump_msg_midi2_paf
Definition ump_msg.h:224
_snd_ump_msg_midi2_paf::group
uint8_t group
Definition ump_msg.h:227
_snd_ump_msg_midi2_paf::data
uint32_t data
Definition ump_msg.h:233
_snd_ump_msg_midi2_paf::channel
uint8_t channel
Definition ump_msg.h:229
_snd_ump_msg_midi2_paf::reserved
uint8_t reserved
Definition ump_msg.h:231
_snd_ump_msg_midi2_paf::type
uint8_t type
Definition ump_msg.h:226
_snd_ump_msg_midi2_paf::note
uint8_t note
Definition ump_msg.h:230
_snd_ump_msg_midi2_paf::status
uint8_t status
Definition ump_msg.h:228
_snd_ump_msg_midi2_per_note_cc
Definition ump_msg.h:247
_snd_ump_msg_midi2_per_note_cc::data
uint32_t data
Definition ump_msg.h:256
_snd_ump_msg_midi2_per_note_cc::note
uint8_t note
Definition ump_msg.h:253
_snd_ump_msg_midi2_per_note_cc::channel
uint8_t channel
Definition ump_msg.h:252
_snd_ump_msg_midi2_per_note_cc::status
uint8_t status
Definition ump_msg.h:251
_snd_ump_msg_midi2_per_note_cc::type
uint8_t type
Definition ump_msg.h:249
_snd_ump_msg_midi2_per_note_cc::index
uint8_t index
Definition ump_msg.h:254
_snd_ump_msg_midi2_per_note_cc::group
uint8_t group
Definition ump_msg.h:250
_snd_ump_msg_midi2_per_note_mgmt
Definition ump_msg.h:276
_snd_ump_msg_midi2_per_note_mgmt::note
uint8_t note
Definition ump_msg.h:282
_snd_ump_msg_midi2_per_note_mgmt::group
uint8_t group
Definition ump_msg.h:279
_snd_ump_msg_midi2_per_note_mgmt::status
uint8_t status
Definition ump_msg.h:280
_snd_ump_msg_midi2_per_note_mgmt::flags
uint8_t flags
Definition ump_msg.h:283
_snd_ump_msg_midi2_per_note_mgmt::channel
uint8_t channel
Definition ump_msg.h:281
_snd_ump_msg_midi2_per_note_mgmt::reserved
uint32_t reserved
Definition ump_msg.h:285
_snd_ump_msg_midi2_per_note_mgmt::type
uint8_t type
Definition ump_msg.h:278
_snd_ump_msg_midi2_per_note_pitchbend
Definition ump_msg.h:416
_snd_ump_msg_midi2_per_note_pitchbend::channel
uint8_t channel
Definition ump_msg.h:429
_snd_ump_msg_midi2_per_note_pitchbend::note
uint8_t note
Definition ump_msg.h:428
_snd_ump_msg_midi2_per_note_pitchbend::type
uint8_t type
Definition ump_msg.h:432
_snd_ump_msg_midi2_per_note_pitchbend::status
uint8_t status
Definition ump_msg.h:430
_snd_ump_msg_midi2_per_note_pitchbend::reserved
uint8_t reserved
Definition ump_msg.h:427
_snd_ump_msg_midi2_per_note_pitchbend::data
uint32_t data
Definition ump_msg.h:434
_snd_ump_msg_midi2_per_note_pitchbend::group
uint8_t group
Definition ump_msg.h:431
_snd_ump_msg_midi2_pitchbend
Definition ump_msg.h:395
_snd_ump_msg_midi2_pitchbend::channel
uint8_t channel
Definition ump_msg.h:400
_snd_ump_msg_midi2_pitchbend::group
uint8_t group
Definition ump_msg.h:398
_snd_ump_msg_midi2_pitchbend::reserved
uint16_t reserved
Definition ump_msg.h:401
_snd_ump_msg_midi2_pitchbend::status
uint8_t status
Definition ump_msg.h:399
_snd_ump_msg_midi2_pitchbend::type
uint8_t type
Definition ump_msg.h:397
_snd_ump_msg_midi2_pitchbend::data
uint32_t data
Definition ump_msg.h:403
_snd_ump_msg_midi2_program
Definition ump_msg.h:345
_snd_ump_msg_midi2_program::reserved
uint16_t reserved
Definition ump_msg.h:351
_snd_ump_msg_midi2_program::program
uint8_t program
Definition ump_msg.h:354
_snd_ump_msg_midi2_program::group
uint8_t group
Definition ump_msg.h:348
_snd_ump_msg_midi2_program::status
uint8_t status
Definition ump_msg.h:349
_snd_ump_msg_midi2_program::channel
uint8_t channel
Definition ump_msg.h:350
_snd_ump_msg_midi2_program::bank_msb
uint8_t bank_msb
Definition ump_msg.h:356
_snd_ump_msg_midi2_program::reserved2
uint8_t reserved2
Definition ump_msg.h:355
_snd_ump_msg_midi2_program::bank_valid
uint16_t bank_valid
Definition ump_msg.h:352
_snd_ump_msg_midi2_program::bank_lsb
uint8_t bank_lsb
Definition ump_msg.h:357
_snd_ump_msg_midi2_program::type
uint8_t type
Definition ump_msg.h:347
_snd_ump_msg_midi2_rpn
Definition ump_msg.h:322
_snd_ump_msg_midi2_rpn::bank
uint8_t bank
Definition ump_msg.h:328
_snd_ump_msg_midi2_rpn::status
uint8_t status
Definition ump_msg.h:326
_snd_ump_msg_midi2_rpn::type
uint8_t type
Definition ump_msg.h:324
_snd_ump_msg_midi2_rpn::channel
uint8_t channel
Definition ump_msg.h:327
_snd_ump_msg_midi2_rpn::data
uint32_t data
Definition ump_msg.h:331
_snd_ump_msg_midi2_rpn::index
uint8_t index
Definition ump_msg.h:329
_snd_ump_msg_midi2_rpn::group
uint8_t group
Definition ump_msg.h:325
_snd_ump_msg_set_chord_name
Definition ump_msg.h:651
_snd_ump_msg_set_chord_name::alter4_type
uint8_t alter4_type
Definition ump_msg.h:671
_snd_ump_msg_set_chord_name::bass_sharp
uint8_t bass_sharp
Definition ump_msg.h:675
_snd_ump_msg_set_chord_name::alter3_type
uint8_t alter3_type
Definition ump_msg.h:669
_snd_ump_msg_set_chord_name::tonic_sharp
uint8_t tonic_sharp
Definition ump_msg.h:661
_snd_ump_msg_set_chord_name::type
uint8_t type
Definition ump_msg.h:653
_snd_ump_msg_set_chord_name::alter4_degree
uint8_t alter4_degree
Definition ump_msg.h:672
_snd_ump_msg_set_chord_name::bass_type
uint8_t bass_type
Definition ump_msg.h:677
_snd_ump_msg_set_chord_name::alter3_degree
uint8_t alter3_degree
Definition ump_msg.h:670
_snd_ump_msg_set_chord_name::alter1_degree
uint8_t alter1_degree
Definition ump_msg.h:665
_snd_ump_msg_set_chord_name::bass_note
uint8_t bass_note
Definition ump_msg.h:676
_snd_ump_msg_set_chord_name::bass_alter1_degree
uint8_t bass_alter1_degree
Definition ump_msg.h:679
_snd_ump_msg_set_chord_name::format
uint8_t format
Definition ump_msg.h:655
_snd_ump_msg_set_chord_name::addrs
uint8_t addrs
Definition ump_msg.h:656
_snd_ump_msg_set_chord_name::chord_tonic
uint8_t chord_tonic
Definition ump_msg.h:662
_snd_ump_msg_set_chord_name::bass_alter2_degree
uint8_t bass_alter2_degree
Definition ump_msg.h:681
_snd_ump_msg_set_chord_name::alter1_type
uint8_t alter1_type
Definition ump_msg.h:664
_snd_ump_msg_set_chord_name::bass_alter2_type
uint8_t bass_alter2_type
Definition ump_msg.h:680
_snd_ump_msg_set_chord_name::reserved
uint16_t reserved
Definition ump_msg.h:673
_snd_ump_msg_set_chord_name::channel
uint8_t channel
Definition ump_msg.h:657
_snd_ump_msg_set_chord_name::status_bank
uint8_t status_bank
Definition ump_msg.h:658
_snd_ump_msg_set_chord_name::chord_type
uint8_t chord_type
Definition ump_msg.h:663
_snd_ump_msg_set_chord_name::alter2_degree
uint8_t alter2_degree
Definition ump_msg.h:667
_snd_ump_msg_set_chord_name::alter2_type
uint8_t alter2_type
Definition ump_msg.h:666
_snd_ump_msg_set_chord_name::status
uint8_t status
Definition ump_msg.h:659
_snd_ump_msg_set_chord_name::group
uint8_t group
Definition ump_msg.h:654
_snd_ump_msg_set_chord_name::bass_alter1_type
uint8_t bass_alter1_type
Definition ump_msg.h:678
_snd_ump_msg_set_key_sig
Definition ump_msg.h:618
_snd_ump_msg_set_key_sig::sharps_flats
uint8_t sharps_flats
Definition ump_msg.h:628
_snd_ump_msg_set_key_sig::group
uint8_t group
Definition ump_msg.h:621
_snd_ump_msg_set_key_sig::reserved2
uint32_t reserved2[2]
Definition ump_msg.h:632
_snd_ump_msg_set_key_sig::tonic_note
uint8_t tonic_note
Definition ump_msg.h:629
_snd_ump_msg_set_key_sig::reserved1
uint8_t reserved1[3]
Definition ump_msg.h:630
_snd_ump_msg_set_key_sig::status
uint8_t status
Definition ump_msg.h:626
_snd_ump_msg_set_key_sig::status_bank
uint8_t status_bank
Definition ump_msg.h:625
_snd_ump_msg_set_key_sig::channel
uint8_t channel
Definition ump_msg.h:624
_snd_ump_msg_set_key_sig::format
uint8_t format
Definition ump_msg.h:622
_snd_ump_msg_set_key_sig::addrs
uint8_t addrs
Definition ump_msg.h:623
_snd_ump_msg_set_key_sig::type
uint8_t type
Definition ump_msg.h:620
_snd_ump_msg_set_metronome
Definition ump_msg.h:575
_snd_ump_msg_set_metronome::clocks_primary
uint8_t clocks_primary
Definition ump_msg.h:585
_snd_ump_msg_set_metronome::reserved1
uint16_t reserved1
Definition ump_msg.h:592
_snd_ump_msg_set_metronome::channel
uint8_t channel
Definition ump_msg.h:581
_snd_ump_msg_set_metronome::bar_accent_1
uint8_t bar_accent_1
Definition ump_msg.h:586
_snd_ump_msg_set_metronome::status_bank
uint8_t status_bank
Definition ump_msg.h:582
_snd_ump_msg_set_metronome::group
uint8_t group
Definition ump_msg.h:578
_snd_ump_msg_set_metronome::format
uint8_t format
Definition ump_msg.h:579
_snd_ump_msg_set_metronome::type
uint8_t type
Definition ump_msg.h:577
_snd_ump_msg_set_metronome::status
uint8_t status
Definition ump_msg.h:583
_snd_ump_msg_set_metronome::bar_accent_2
uint8_t bar_accent_2
Definition ump_msg.h:587
_snd_ump_msg_set_metronome::subdivision_1
uint8_t subdivision_1
Definition ump_msg.h:590
_snd_ump_msg_set_metronome::addrs
uint8_t addrs
Definition ump_msg.h:580
_snd_ump_msg_set_metronome::subdivision_2
uint8_t subdivision_2
Definition ump_msg.h:591
_snd_ump_msg_set_metronome::reserved2
uint32_t reserved2
Definition ump_msg.h:594
_snd_ump_msg_set_metronome::bar_accent_3
uint8_t bar_accent_3
Definition ump_msg.h:588
_snd_ump_msg_set_tempo
Definition ump_msg.h:511
_snd_ump_msg_set_tempo::group
uint8_t group
Definition ump_msg.h:514
_snd_ump_msg_set_tempo::format
uint8_t format
Definition ump_msg.h:515
_snd_ump_msg_set_tempo::addrs
uint8_t addrs
Definition ump_msg.h:516
_snd_ump_msg_set_tempo::status
uint8_t status
Definition ump_msg.h:519
_snd_ump_msg_set_tempo::type
uint8_t type
Definition ump_msg.h:513
_snd_ump_msg_set_tempo::tempo
uint32_t tempo
Definition ump_msg.h:521
_snd_ump_msg_set_tempo::channel
uint8_t channel
Definition ump_msg.h:517
_snd_ump_msg_set_tempo::reserved
uint32_t reserved[2]
Definition ump_msg.h:523
_snd_ump_msg_set_tempo::status_bank
uint8_t status_bank
Definition ump_msg.h:518
_snd_ump_msg_set_time_sig
Definition ump_msg.h:540
_snd_ump_msg_set_time_sig::addrs
uint8_t addrs
Definition ump_msg.h:545
_snd_ump_msg_set_time_sig::channel
uint8_t channel
Definition ump_msg.h:546
_snd_ump_msg_set_time_sig::format
uint8_t format
Definition ump_msg.h:544
_snd_ump_msg_set_time_sig::status
uint8_t status
Definition ump_msg.h:548
_snd_ump_msg_set_time_sig::reserved
uint32_t reserved[2]
Definition ump_msg.h:555
_snd_ump_msg_set_time_sig::numerator
uint8_t numerator
Definition ump_msg.h:550
_snd_ump_msg_set_time_sig::denominator
uint8_t denominator
Definition ump_msg.h:551
_snd_ump_msg_set_time_sig::type
uint8_t type
Definition ump_msg.h:542
_snd_ump_msg_set_time_sig::group
uint8_t group
Definition ump_msg.h:543
_snd_ump_msg_set_time_sig::reserved1
uint8_t reserved1
Definition ump_msg.h:553
_snd_ump_msg_set_time_sig::status_bank
uint8_t status_bank
Definition ump_msg.h:547
_snd_ump_msg_set_time_sig::num_notes
uint8_t num_notes
Definition ump_msg.h:552
_snd_ump_msg_stream_gen
Definition ump_msg.h:460
_snd_ump_msg_stream_gen::data1
uint16_t data1
Definition ump_msg.h:465
_snd_ump_msg_stream_gen::data2
uint32_t data2
Definition ump_msg.h:466
_snd_ump_msg_stream_gen::data4
uint32_t data4
Definition ump_msg.h:468
_snd_ump_msg_stream_gen::data3
uint32_t data3
Definition ump_msg.h:467
_snd_ump_msg_stream_gen::type
uint16_t type
Definition ump_msg.h:462
_snd_ump_msg_stream_gen::format
uint16_t format
Definition ump_msg.h:463
_snd_ump_msg_stream_gen::status
uint16_t status
Definition ump_msg.h:464
snd_ump_msg_mixed_data_header_t
Definition ump_msg.h:729
snd_ump_msg_mixed_data_header_t::device
uint16_t device
Definition ump_msg.h:755
snd_ump_msg_mixed_data_header_t::type
uint8_t type
Definition ump_msg.h:750
snd_ump_msg_mixed_data_header_t::bytes
uint16_t bytes
Definition ump_msg.h:746
snd_ump_msg_mixed_data_header_t::status
uint8_t status
Definition ump_msg.h:748
snd_ump_msg_mixed_data_header_t::sub_id_2
uint16_t sub_id_2
Definition ump_msg.h:758
snd_ump_msg_mixed_data_header_t::manufacturer
uint16_t manufacturer
Definition ump_msg.h:756
snd_ump_msg_mixed_data_header_t::group
uint8_t group
Definition ump_msg.h:749
snd_ump_msg_mixed_data_header_t::chunk
uint16_t chunk
Definition ump_msg.h:752
snd_ump_msg_mixed_data_header_t::sub_id_1
uint16_t sub_id_1
Definition ump_msg.h:759
snd_ump_msg_mixed_data_header_t::mds_id
uint8_t mds_id
Definition ump_msg.h:747
snd_ump_msg_mixed_data_header_t::chunks
uint16_t chunks
Definition ump_msg.h:753
snd_ump_msg_mixed_data_payload_t
Definition ump_msg.h:764
snd_ump_msg_mixed_data_payload_t::group
uint8_t group
Definition ump_msg.h:777
snd_ump_msg_mixed_data_payload_t::mds_id
uint8_t mds_id
Definition ump_msg.h:775
snd_ump_msg_mixed_data_payload_t::type
uint8_t type
Definition ump_msg.h:778
snd_ump_msg_mixed_data_payload_t::payload1
uint16_t payload1
Definition ump_msg.h:774
snd_ump_msg_mixed_data_payload_t::status
uint8_t status
Definition ump_msg.h:776
snd_ump_msg_system
Definition ump_msg.h:160
snd_ump_msg_system::parm1
uint8_t parm1
Definition ump_msg.h:165
snd_ump_msg_system::type
uint8_t type
Definition ump_msg.h:162
snd_ump_msg_system::status
uint8_t status
Definition ump_msg.h:164
snd_ump_msg_system::parm2
uint8_t parm2
Definition ump_msg.h:166
snd_ump_msg_system::group
uint8_t group
Definition ump_msg.h:163
snd_ump_msg_sysex_expand
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
SND_UMP_MIDI2_NOTE_ATTR_MANUFACTURER
@ SND_UMP_MIDI2_NOTE_ATTR_MANUFACTURER
Definition ump_msg.h:193
SND_UMP_MIDI2_NOTE_ATTR_PROFILE
@ SND_UMP_MIDI2_NOTE_ATTR_PROFILE
Definition ump_msg.h:194
SND_UMP_MIDI2_NOTE_ATTR_NO_DATA
@ SND_UMP_MIDI2_NOTE_ATTR_NO_DATA
Definition ump_msg.h:192
SND_UMP_MIDI2_NOTE_ATTR_PITCH79
@ SND_UMP_MIDI2_NOTE_ATTR_PITCH79
Definition ump_msg.h:195
group
uint8_t group
Definition ump_msg.h:2
snd_ump_packet_length
int snd_ump_packet_length(unsigned int type)
return the length of a UMP packet type
Definition ump.c:1100
type
uint8_t type
Definition ump_msg.h:1
status
uint8_t status
Definition ump_msg.h:3
SND_UMP_MIDI2_PNMGMT_RESET_CONTROLLERS
@ SND_UMP_MIDI2_PNMGMT_RESET_CONTROLLERS
Definition ump_msg.h:271
SND_UMP_MIDI2_PNMGMT_DETACH_CONTROLLERS
@ SND_UMP_MIDI2_PNMGMT_DETACH_CONTROLLERS
Definition ump_msg.h:272
__attribute
enum @1 __attribute
snd_ump_msg_flex_data_t
Definition ump_msg.h:716
snd_ump_msg_flex_data_t::set_metronome
snd_ump_msg_set_metronome_t set_metronome
Definition ump_msg.h:721
snd_ump_msg_flex_data_t::set_chord_name
snd_ump_msg_set_chord_name_t set_chord_name
Definition ump_msg.h:723
snd_ump_msg_flex_data_t::set_key_sig
snd_ump_msg_set_key_sig_t set_key_sig
Definition ump_msg.h:722
snd_ump_msg_flex_data_t::set_time_sig
snd_ump_msg_set_time_sig_t set_time_sig
Definition ump_msg.h:720
snd_ump_msg_flex_data_t::hdr
snd_ump_msg_hdr_t hdr
Definition ump_msg.h:724
snd_ump_msg_flex_data_t::meta
snd_ump_msg_flex_data_meta_t meta
Definition ump_msg.h:717
snd_ump_msg_flex_data_t::text
snd_ump_msg_flex_data_meta_t text
Definition ump_msg.h:718
snd_ump_msg_flex_data_t::set_tempo
snd_ump_msg_set_tempo_t set_tempo
Definition ump_msg.h:719
snd_ump_msg_midi1_t
Definition ump_msg.h:177
snd_ump_msg_midi1_t::pitchbend
snd_ump_msg_midi1_pitchbend_t pitchbend
Definition ump_msg.h:184
snd_ump_msg_midi1_t::program_change
snd_ump_msg_midi1_program_t program_change
Definition ump_msg.h:182
snd_ump_msg_midi1_t::raw
uint32_t raw
Definition ump_msg.h:187
snd_ump_msg_midi1_t::control_change
snd_ump_msg_midi1_cc_t control_change
Definition ump_msg.h:181
snd_ump_msg_midi1_t::note_on
snd_ump_msg_midi1_note_t note_on
Definition ump_msg.h:178
snd_ump_msg_midi1_t::note_off
snd_ump_msg_midi1_note_t note_off
Definition ump_msg.h:179
snd_ump_msg_midi1_t::channel_pressure
snd_ump_msg_midi1_caf_t channel_pressure
Definition ump_msg.h:183
snd_ump_msg_midi1_t::hdr
snd_ump_msg_hdr_t hdr
Definition ump_msg.h:186
snd_ump_msg_midi1_t::system
snd_ump_msg_system_t system
Definition ump_msg.h:185
snd_ump_msg_midi1_t::poly_pressure
snd_ump_msg_midi1_paf_t poly_pressure
Definition ump_msg.h:180
snd_ump_msg_midi2_t
Definition ump_msg.h:439
snd_ump_msg_midi2_t::relative_rpn
snd_ump_msg_midi2_rpn_t relative_rpn
Definition ump_msg.h:449
snd_ump_msg_midi2_t::poly_pressure
snd_ump_msg_midi2_paf_t poly_pressure
Definition ump_msg.h:442
snd_ump_msg_midi2_t::note_off
snd_ump_msg_midi2_note_t note_off
Definition ump_msg.h:441
snd_ump_msg_midi2_t::program_change
snd_ump_msg_midi2_program_t program_change
Definition ump_msg.h:451
snd_ump_msg_midi2_t::rpn
snd_ump_msg_midi2_rpn_t rpn
Definition ump_msg.h:447
snd_ump_msg_midi2_t::per_note_mgmt
snd_ump_msg_midi2_per_note_mgmt_t per_note_mgmt
Definition ump_msg.h:445
snd_ump_msg_midi2_t::pitchbend
snd_ump_msg_midi2_pitchbend_t pitchbend
Definition ump_msg.h:453
snd_ump_msg_midi2_t::control_change
snd_ump_msg_midi2_cc_t control_change
Definition ump_msg.h:446
snd_ump_msg_midi2_t::per_note_pitchbend
snd_ump_msg_midi2_per_note_pitchbend_t per_note_pitchbend
Definition ump_msg.h:454
snd_ump_msg_midi2_t::note_on
snd_ump_msg_midi2_note_t note_on
Definition ump_msg.h:440
snd_ump_msg_midi2_t::nrpn
snd_ump_msg_midi2_rpn_t nrpn
Definition ump_msg.h:448
snd_ump_msg_midi2_t::per_note_acc
snd_ump_msg_midi2_per_note_cc_t per_note_acc
Definition ump_msg.h:443
snd_ump_msg_midi2_t::hdr
snd_ump_msg_hdr_t hdr
Definition ump_msg.h:455
snd_ump_msg_midi2_t::channel_pressure
snd_ump_msg_midi2_caf_t channel_pressure
Definition ump_msg.h:452
snd_ump_msg_midi2_t::per_note_rcc
snd_ump_msg_midi2_per_note_cc_t per_note_rcc
Definition ump_msg.h:444
snd_ump_msg_midi2_t::relative_nrpn
snd_ump_msg_midi2_rpn_t relative_nrpn
Definition ump_msg.h:450
snd_ump_msg_mixed_data_t
Definition ump_msg.h:785
snd_ump_msg_mixed_data_t::payload
snd_ump_msg_mixed_data_payload_t payload
Definition ump_msg.h:787
snd_ump_msg_mixed_data_t::header
snd_ump_msg_mixed_data_header_t header
Definition ump_msg.h:786
snd_ump_msg_stream_t
Definition ump_msg.h:481
snd_ump_msg_stream_t::hdr
snd_ump_msg_hdr_t hdr
Definition ump_msg.h:483
snd_ump_msg_stream_t::gen
snd_ump_msg_stream_gen_t gen
Definition ump_msg.h:482
snd_ump_msg_utility_t
Definition ump_msg.h:841
snd_ump_msg_utility_t::dc
snd_ump_msg_dc_t dc
Definition ump_msg.h:844
snd_ump_msg_utility_t::jr_clock
snd_ump_msg_jr_clock_t jr_clock
Definition ump_msg.h:842
snd_ump_msg_utility_t::dctpq
snd_ump_msg_dctpq_t dctpq
Definition ump_msg.h:843
snd_ump_msg_utility_t::raw
uint32_t raw
Definition ump_msg.h:846
snd_ump_msg_utility_t::hdr
snd_ump_msg_hdr_t hdr
Definition ump_msg.h:845