1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #ifndef __LINUX_USB_MIDI_H
20 #define __LINUX_USB_MIDI_H
21
22 #include <linux/types.h>
23
24
25 #define USB_MS_HEADER 0x01
26 #define USB_MS_MIDI_IN_JACK 0x02
27 #define USB_MS_MIDI_OUT_JACK 0x03
28 #define USB_MS_ELEMENT 0x04
29
30
31 #define USB_MS_GENERAL 0x01
32
33
34 #define USB_MS_EMBEDDED 0x01
35 #define USB_MS_EXTERNAL 0x02
36
37
38 struct usb_ms_header_descriptor {
39 __u8 bLength;
40 __u8 bDescriptorType;
41 __u8 bDescriptorSubtype;
42 __le16 bcdMSC;
43 __le16 wTotalLength;
44 } __attribute__ ((packed));
45
46 #define USB_DT_MS_HEADER_SIZE 7
47
48
49 struct usb_midi_in_jack_descriptor {
50 __u8 bLength;
51 __u8 bDescriptorType;
52 __u8 bDescriptorSubtype;
53 __u8 bJackType;
54 __u8 bJackID;
55 __u8 iJack;
56 } __attribute__ ((packed));
57
58 #define USB_DT_MIDI_IN_SIZE 6
59
60 struct usb_midi_source_pin {
61 __u8 baSourceID;
62 __u8 baSourcePin;
63 } __attribute__ ((packed));
64
65
66 struct usb_midi_out_jack_descriptor {
67 __u8 bLength;
68 __u8 bDescriptorType;
69 __u8 bDescriptorSubtype;
70 __u8 bJackType;
71 __u8 bJackID;
72 __u8 bNrInputPins;
73 struct usb_midi_source_pin pins[];
74
75 } __attribute__ ((packed));
76
77 #define USB_DT_MIDI_OUT_SIZE(p) (7 + 2 * (p))
78
79
80 #define DECLARE_USB_MIDI_OUT_JACK_DESCRIPTOR(p) \
81 struct usb_midi_out_jack_descriptor_##p { \
82 __u8 bLength; \
83 __u8 bDescriptorType; \
84 __u8 bDescriptorSubtype; \
85 __u8 bJackType; \
86 __u8 bJackID; \
87 __u8 bNrInputPins; \
88 struct usb_midi_source_pin pins[p]; \
89 __u8 iJack; \
90 } __attribute__ ((packed))
91
92
93 struct usb_ms_endpoint_descriptor {
94 __u8 bLength;
95 __u8 bDescriptorType;
96 __u8 bDescriptorSubtype;
97 __u8 bNumEmbMIDIJack;
98 __u8 baAssocJackID[];
99 } __attribute__ ((packed));
100
101 #define USB_DT_MS_ENDPOINT_SIZE(n) (4 + (n))
102
103
104 #define DECLARE_USB_MS_ENDPOINT_DESCRIPTOR(n) \
105 struct usb_ms_endpoint_descriptor_##n { \
106 __u8 bLength; \
107 __u8 bDescriptorType; \
108 __u8 bDescriptorSubtype; \
109 __u8 bNumEmbMIDIJack; \
110 __u8 baAssocJackID[n]; \
111 } __attribute__ ((packed))
112
113 #endif