diff options
| author | fauxpark <fauxpark@gmail.com> | 2019-11-05 18:04:58 +1100 |
|---|---|---|
| committer | Drashna Jaelre <drashna@live.com> | 2019-11-04 23:04:58 -0800 |
| commit | 1244d0e266dad4170ed0c63e68e00c74c87367b2 (patch) | |
| tree | 4d2fa17cb7b7b0d65bb9acf0a51c1d0f711e85d3 /tmk_core | |
| parent | 542cb0a8ce3f324c6bd46751d733daf86384a8f6 (diff) | |
| download | qmk_firmware-1244d0e266dad4170ed0c63e68e00c74c87367b2.tar.gz qmk_firmware-1244d0e266dad4170ed0c63e68e00c74c87367b2.zip | |
Un-clang-format usb_descriptor.h (#7216)
Preserves readability of the file, making it easier to understand and modify.
Diffstat (limited to 'tmk_core')
| -rw-r--r-- | tmk_core/protocol/usb_descriptor.c | 1048 |
1 files changed, 701 insertions, 347 deletions
diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c index e93ce87df..70032d69f 100644 --- a/tmk_core/protocol/usb_descriptor.c +++ b/tmk_core/protocol/usb_descriptor.c | |||
| @@ -40,6 +40,8 @@ | |||
| 40 | #include "report.h" | 40 | #include "report.h" |
| 41 | #include "usb_descriptor.h" | 41 | #include "usb_descriptor.h" |
| 42 | 42 | ||
| 43 | // clang-format off | ||
| 44 | |||
| 43 | /* | 45 | /* |
| 44 | * HID report descriptors | 46 | * HID report descriptors |
| 45 | */ | 47 | */ |
| @@ -49,46 +51,46 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { | |||
| 49 | #else | 51 | #else |
| 50 | const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = { | 52 | const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = { |
| 51 | #endif | 53 | #endif |
| 52 | HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop | 54 | HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop |
| 53 | HID_RI_USAGE(8, 0x06), // Keyboard | 55 | HID_RI_USAGE(8, 0x06), // Keyboard |
| 54 | HID_RI_COLLECTION(8, 0x01), // Application | 56 | HID_RI_COLLECTION(8, 0x01), // Application |
| 55 | #ifdef KEYBOARD_SHARED_EP | 57 | #ifdef KEYBOARD_SHARED_EP |
| 56 | HID_RI_REPORT_ID(8, REPORT_ID_KEYBOARD), | 58 | HID_RI_REPORT_ID(8, REPORT_ID_KEYBOARD), |
| 57 | #endif | 59 | #endif |
| 58 | // Modifiers (8 bits) | 60 | // Modifiers (8 bits) |
| 59 | HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad | 61 | HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad |
| 60 | HID_RI_USAGE_MINIMUM(8, 0xE0), // Keyboard Left Control | 62 | HID_RI_USAGE_MINIMUM(8, 0xE0), // Keyboard Left Control |
| 61 | HID_RI_USAGE_MAXIMUM(8, 0xE7), // Keyboard Right GUI | 63 | HID_RI_USAGE_MAXIMUM(8, 0xE7), // Keyboard Right GUI |
| 62 | HID_RI_LOGICAL_MINIMUM(8, 0x00), | 64 | HID_RI_LOGICAL_MINIMUM(8, 0x00), |
| 63 | HID_RI_LOGICAL_MAXIMUM(8, 0x01), | 65 | HID_RI_LOGICAL_MAXIMUM(8, 0x01), |
| 64 | HID_RI_REPORT_COUNT(8, 0x08), | 66 | HID_RI_REPORT_COUNT(8, 0x08), |
| 65 | HID_RI_REPORT_SIZE(8, 0x01), | 67 | HID_RI_REPORT_SIZE(8, 0x01), |
| 66 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), | 68 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), |
| 67 | // Reserved (1 byte) | 69 | // Reserved (1 byte) |
| 68 | HID_RI_REPORT_COUNT(8, 0x01), | 70 | HID_RI_REPORT_COUNT(8, 0x01), |
| 69 | HID_RI_REPORT_SIZE(8, 0x08), | 71 | HID_RI_REPORT_SIZE(8, 0x08), |
| 70 | HID_RI_INPUT(8, HID_IOF_CONSTANT), | 72 | HID_RI_INPUT(8, HID_IOF_CONSTANT), |
| 71 | // Keycodes (6 bytes) | 73 | // Keycodes (6 bytes) |
| 72 | HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad | 74 | HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad |
| 73 | HID_RI_USAGE_MINIMUM(8, 0x00), | 75 | HID_RI_USAGE_MINIMUM(8, 0x00), |
| 74 | HID_RI_USAGE_MAXIMUM(8, 0xFF), | 76 | HID_RI_USAGE_MAXIMUM(8, 0xFF), |
| 75 | HID_RI_LOGICAL_MINIMUM(8, 0x00), | 77 | HID_RI_LOGICAL_MINIMUM(8, 0x00), |
| 76 | HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), | 78 | HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), |
| 77 | HID_RI_REPORT_COUNT(8, 0x06), | 79 | HID_RI_REPORT_COUNT(8, 0x06), |
| 78 | HID_RI_REPORT_SIZE(8, 0x08), | 80 | HID_RI_REPORT_SIZE(8, 0x08), |
| 79 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), | 81 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), |
| 80 | 82 | ||
| 81 | // Status LEDs (5 bits) | 83 | // Status LEDs (5 bits) |
| 82 | HID_RI_USAGE_PAGE(8, 0x08), // LED | 84 | HID_RI_USAGE_PAGE(8, 0x08), // LED |
| 83 | HID_RI_USAGE_MINIMUM(8, 0x01), // Num Lock | 85 | HID_RI_USAGE_MINIMUM(8, 0x01), // Num Lock |
| 84 | HID_RI_USAGE_MAXIMUM(8, 0x05), // Kana | 86 | HID_RI_USAGE_MAXIMUM(8, 0x05), // Kana |
| 85 | HID_RI_REPORT_COUNT(8, 0x05), | 87 | HID_RI_REPORT_COUNT(8, 0x05), |
| 86 | HID_RI_REPORT_SIZE(8, 0x01), | 88 | HID_RI_REPORT_SIZE(8, 0x01), |
| 87 | HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), | 89 | HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), |
| 88 | // LED padding (3 bits) | 90 | // LED padding (3 bits) |
| 89 | HID_RI_REPORT_COUNT(8, 0x01), | 91 | HID_RI_REPORT_COUNT(8, 0x01), |
| 90 | HID_RI_REPORT_SIZE(8, 0x03), | 92 | HID_RI_REPORT_SIZE(8, 0x03), |
| 91 | HID_RI_OUTPUT(8, HID_IOF_CONSTANT), | 93 | HID_RI_OUTPUT(8, HID_IOF_CONSTANT), |
| 92 | HID_RI_END_COLLECTION(0), | 94 | HID_RI_END_COLLECTION(0), |
| 93 | #ifndef KEYBOARD_SHARED_EP | 95 | #ifndef KEYBOARD_SHARED_EP |
| 94 | }; | 96 | }; |
| @@ -101,54 +103,54 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM MouseReport[] = { | |||
| 101 | const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { | 103 | const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { |
| 102 | # define SHARED_REPORT_STARTED | 104 | # define SHARED_REPORT_STARTED |
| 103 | # endif | 105 | # endif |
| 104 | HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop | 106 | HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop |
| 105 | HID_RI_USAGE(8, 0x02), // Mouse | 107 | HID_RI_USAGE(8, 0x02), // Mouse |
| 106 | HID_RI_COLLECTION(8, 0x01), // Application | 108 | HID_RI_COLLECTION(8, 0x01), // Application |
| 107 | # ifdef MOUSE_SHARED_EP | 109 | # ifdef MOUSE_SHARED_EP |
| 108 | HID_RI_REPORT_ID(8, REPORT_ID_MOUSE), | 110 | HID_RI_REPORT_ID(8, REPORT_ID_MOUSE), |
| 109 | # endif | 111 | # endif |
| 110 | HID_RI_USAGE(8, 0x01), // Pointer | 112 | HID_RI_USAGE(8, 0x01), // Pointer |
| 111 | HID_RI_COLLECTION(8, 0x00), // Physical | 113 | HID_RI_COLLECTION(8, 0x00), // Physical |
| 112 | // Buttons (5 bits) | 114 | // Buttons (5 bits) |
| 113 | HID_RI_USAGE_PAGE(8, 0x09), // Button | 115 | HID_RI_USAGE_PAGE(8, 0x09), // Button |
| 114 | HID_RI_USAGE_MINIMUM(8, 0x01), // Button 1 | 116 | HID_RI_USAGE_MINIMUM(8, 0x01), // Button 1 |
| 115 | HID_RI_USAGE_MAXIMUM(8, 0x05), // Button 5 | 117 | HID_RI_USAGE_MAXIMUM(8, 0x05), // Button 5 |
| 116 | HID_RI_LOGICAL_MINIMUM(8, 0x00), | 118 | HID_RI_LOGICAL_MINIMUM(8, 0x00), |
| 117 | HID_RI_LOGICAL_MAXIMUM(8, 0x01), | 119 | HID_RI_LOGICAL_MAXIMUM(8, 0x01), |
| 118 | HID_RI_REPORT_COUNT(8, 0x05), | 120 | HID_RI_REPORT_COUNT(8, 0x05), |
| 119 | HID_RI_REPORT_SIZE(8, 0x01), | 121 | HID_RI_REPORT_SIZE(8, 0x01), |
| 120 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), | 122 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), |
| 121 | // Button padding (3 bits) | 123 | // Button padding (3 bits) |
| 122 | HID_RI_REPORT_COUNT(8, 0x01), | 124 | HID_RI_REPORT_COUNT(8, 0x01), |
| 123 | HID_RI_REPORT_SIZE(8, 0x03), | 125 | HID_RI_REPORT_SIZE(8, 0x03), |
| 124 | HID_RI_INPUT(8, HID_IOF_CONSTANT), | 126 | HID_RI_INPUT(8, HID_IOF_CONSTANT), |
| 125 | 127 | ||
| 126 | // X/Y position (2 bytes) | 128 | // X/Y position (2 bytes) |
| 127 | HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop | 129 | HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop |
| 128 | HID_RI_USAGE(8, 0x30), // X | 130 | HID_RI_USAGE(8, 0x30), // X |
| 129 | HID_RI_USAGE(8, 0x31), // Y | 131 | HID_RI_USAGE(8, 0x31), // Y |
| 130 | HID_RI_LOGICAL_MINIMUM(8, -127), | 132 | HID_RI_LOGICAL_MINIMUM(8, -127), |
| 131 | HID_RI_LOGICAL_MAXIMUM(8, 127), | 133 | HID_RI_LOGICAL_MAXIMUM(8, 127), |
| 132 | HID_RI_REPORT_COUNT(8, 0x02), | 134 | HID_RI_REPORT_COUNT(8, 0x02), |
| 133 | HID_RI_REPORT_SIZE(8, 0x08), | 135 | HID_RI_REPORT_SIZE(8, 0x08), |
| 134 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), | 136 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), |
| 135 | 137 | ||
| 136 | // Vertical wheel (1 byte) | 138 | // Vertical wheel (1 byte) |
| 137 | HID_RI_USAGE(8, 0x38), // Wheel | 139 | HID_RI_USAGE(8, 0x38), // Wheel |
| 138 | HID_RI_LOGICAL_MINIMUM(8, -127), | 140 | HID_RI_LOGICAL_MINIMUM(8, -127), |
| 139 | HID_RI_LOGICAL_MAXIMUM(8, 127), | 141 | HID_RI_LOGICAL_MAXIMUM(8, 127), |
| 140 | HID_RI_REPORT_COUNT(8, 0x01), | 142 | HID_RI_REPORT_COUNT(8, 0x01), |
| 141 | HID_RI_REPORT_SIZE(8, 0x08), | 143 | HID_RI_REPORT_SIZE(8, 0x08), |
| 142 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), | 144 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), |
| 143 | // Horizontal wheel (1 byte) | 145 | // Horizontal wheel (1 byte) |
| 144 | HID_RI_USAGE_PAGE(8, 0x0C), // Consumer | 146 | HID_RI_USAGE_PAGE(8, 0x0C), // Consumer |
| 145 | HID_RI_USAGE(16, 0x0238), // AC Pan | 147 | HID_RI_USAGE(16, 0x0238), // AC Pan |
| 146 | HID_RI_LOGICAL_MINIMUM(8, -127), | 148 | HID_RI_LOGICAL_MINIMUM(8, -127), |
| 147 | HID_RI_LOGICAL_MAXIMUM(8, 127), | 149 | HID_RI_LOGICAL_MAXIMUM(8, 127), |
| 148 | HID_RI_REPORT_COUNT(8, 0x01), | 150 | HID_RI_REPORT_COUNT(8, 0x01), |
| 149 | HID_RI_REPORT_SIZE(8, 0x08), | 151 | HID_RI_REPORT_SIZE(8, 0x08), |
| 150 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), | 152 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE), |
| 151 | HID_RI_END_COLLECTION(0), | 153 | HID_RI_END_COLLECTION(0), |
| 152 | HID_RI_END_COLLECTION(0), | 154 | HID_RI_END_COLLECTION(0), |
| 153 | # ifndef MOUSE_SHARED_EP | 155 | # ifndef MOUSE_SHARED_EP |
| 154 | }; | 156 | }; |
| @@ -160,68 +162,68 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { | |||
| 160 | #endif | 162 | #endif |
| 161 | 163 | ||
| 162 | #ifdef EXTRAKEY_ENABLE | 164 | #ifdef EXTRAKEY_ENABLE |
| 163 | HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop | 165 | HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop |
| 164 | HID_RI_USAGE(8, 0x80), // System Control | 166 | HID_RI_USAGE(8, 0x80), // System Control |
| 165 | HID_RI_COLLECTION(8, 0x01), // Application | 167 | HID_RI_COLLECTION(8, 0x01), // Application |
| 166 | HID_RI_REPORT_ID(8, REPORT_ID_SYSTEM), | 168 | HID_RI_REPORT_ID(8, REPORT_ID_SYSTEM), |
| 167 | HID_RI_USAGE_MINIMUM(16, 0x0081), // System Power Down | 169 | HID_RI_USAGE_MINIMUM(16, 0x0081), // System Power Down |
| 168 | HID_RI_USAGE_MAXIMUM(16, 0x0083), // System Wake Up | 170 | HID_RI_USAGE_MAXIMUM(16, 0x0083), // System Wake Up |
| 169 | HID_RI_LOGICAL_MINIMUM(16, 0x0001), | 171 | HID_RI_LOGICAL_MINIMUM(16, 0x0001), |
| 170 | HID_RI_LOGICAL_MAXIMUM(16, 0x0003), | 172 | HID_RI_LOGICAL_MAXIMUM(16, 0x0003), |
| 171 | HID_RI_REPORT_COUNT(8, 1), | 173 | HID_RI_REPORT_COUNT(8, 1), |
| 172 | HID_RI_REPORT_SIZE(8, 16), | 174 | HID_RI_REPORT_SIZE(8, 16), |
| 173 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), | 175 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), |
| 174 | HID_RI_END_COLLECTION(0), | 176 | HID_RI_END_COLLECTION(0), |
| 175 | 177 | ||
| 176 | HID_RI_USAGE_PAGE(8, 0x0C), // Consumer | 178 | HID_RI_USAGE_PAGE(8, 0x0C), // Consumer |
| 177 | HID_RI_USAGE(8, 0x01), // Consumer Control | 179 | HID_RI_USAGE(8, 0x01), // Consumer Control |
| 178 | HID_RI_COLLECTION(8, 0x01), // Application | 180 | HID_RI_COLLECTION(8, 0x01), // Application |
| 179 | HID_RI_REPORT_ID(8, REPORT_ID_CONSUMER), | 181 | HID_RI_REPORT_ID(8, REPORT_ID_CONSUMER), |
| 180 | HID_RI_USAGE_MINIMUM(16, 0x0001), // Consumer Control | 182 | HID_RI_USAGE_MINIMUM(16, 0x0001), // Consumer Control |
| 181 | HID_RI_USAGE_MAXIMUM(16, 0x029C), // AC Distribute Vertically | 183 | HID_RI_USAGE_MAXIMUM(16, 0x029C), // AC Distribute Vertically |
| 182 | HID_RI_LOGICAL_MINIMUM(16, 0x0001), | 184 | HID_RI_LOGICAL_MINIMUM(16, 0x0001), |
| 183 | HID_RI_LOGICAL_MAXIMUM(16, 0x029C), | 185 | HID_RI_LOGICAL_MAXIMUM(16, 0x029C), |
| 184 | HID_RI_REPORT_COUNT(8, 1), | 186 | HID_RI_REPORT_COUNT(8, 1), |
| 185 | HID_RI_REPORT_SIZE(8, 16), | 187 | HID_RI_REPORT_SIZE(8, 16), |
| 186 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), | 188 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_ARRAY | HID_IOF_ABSOLUTE), |
| 187 | HID_RI_END_COLLECTION(0), | 189 | HID_RI_END_COLLECTION(0), |
| 188 | #endif | 190 | #endif |
| 189 | 191 | ||
| 190 | #ifdef NKRO_ENABLE | 192 | #ifdef NKRO_ENABLE |
| 191 | HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop | 193 | HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop |
| 192 | HID_RI_USAGE(8, 0x06), // Keyboard | 194 | HID_RI_USAGE(8, 0x06), // Keyboard |
| 193 | HID_RI_COLLECTION(8, 0x01), // Application | 195 | HID_RI_COLLECTION(8, 0x01), // Application |
| 194 | HID_RI_REPORT_ID(8, REPORT_ID_NKRO), | 196 | HID_RI_REPORT_ID(8, REPORT_ID_NKRO), |
| 195 | // Modifiers (8 bits) | 197 | // Modifiers (8 bits) |
| 196 | HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad | 198 | HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad |
| 197 | HID_RI_USAGE_MINIMUM(8, 0xE0), // Keyboard Left Control | 199 | HID_RI_USAGE_MINIMUM(8, 0xE0), // Keyboard Left Control |
| 198 | HID_RI_USAGE_MAXIMUM(8, 0xE7), // Keyboard Right GUI | 200 | HID_RI_USAGE_MAXIMUM(8, 0xE7), // Keyboard Right GUI |
| 199 | HID_RI_LOGICAL_MINIMUM(8, 0x00), | 201 | HID_RI_LOGICAL_MINIMUM(8, 0x00), |
| 200 | HID_RI_LOGICAL_MAXIMUM(8, 0x01), | 202 | HID_RI_LOGICAL_MAXIMUM(8, 0x01), |
| 201 | HID_RI_REPORT_COUNT(8, 0x08), | 203 | HID_RI_REPORT_COUNT(8, 0x08), |
| 202 | HID_RI_REPORT_SIZE(8, 0x01), | 204 | HID_RI_REPORT_SIZE(8, 0x01), |
| 203 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), | 205 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), |
| 204 | // Keycodes | 206 | // Keycodes |
| 205 | HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad | 207 | HID_RI_USAGE_PAGE(8, 0x07), // Keyboard/Keypad |
| 206 | HID_RI_USAGE_MINIMUM(8, 0x00), | 208 | HID_RI_USAGE_MINIMUM(8, 0x00), |
| 207 | HID_RI_USAGE_MAXIMUM(8, KEYBOARD_REPORT_BITS * 8 - 1), | 209 | HID_RI_USAGE_MAXIMUM(8, KEYBOARD_REPORT_BITS * 8 - 1), |
| 208 | HID_RI_LOGICAL_MINIMUM(8, 0x00), | 210 | HID_RI_LOGICAL_MINIMUM(8, 0x00), |
| 209 | HID_RI_LOGICAL_MAXIMUM(8, 0x01), | 211 | HID_RI_LOGICAL_MAXIMUM(8, 0x01), |
| 210 | HID_RI_REPORT_COUNT(8, KEYBOARD_REPORT_BITS * 8), | 212 | HID_RI_REPORT_COUNT(8, KEYBOARD_REPORT_BITS * 8), |
| 211 | HID_RI_REPORT_SIZE(8, 0x01), | 213 | HID_RI_REPORT_SIZE(8, 0x01), |
| 212 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), | 214 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), |
| 213 | 215 | ||
| 214 | // Status LEDs (5 bits) | 216 | // Status LEDs (5 bits) |
| 215 | HID_RI_USAGE_PAGE(8, 0x08), // LED | 217 | HID_RI_USAGE_PAGE(8, 0x08), // LED |
| 216 | HID_RI_USAGE_MINIMUM(8, 0x01), // Num Lock | 218 | HID_RI_USAGE_MINIMUM(8, 0x01), // Num Lock |
| 217 | HID_RI_USAGE_MAXIMUM(8, 0x05), // Kana | 219 | HID_RI_USAGE_MAXIMUM(8, 0x05), // Kana |
| 218 | HID_RI_REPORT_COUNT(8, 0x05), | 220 | HID_RI_REPORT_COUNT(8, 0x05), |
| 219 | HID_RI_REPORT_SIZE(8, 0x01), | 221 | HID_RI_REPORT_SIZE(8, 0x01), |
| 220 | HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), | 222 | HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), |
| 221 | // LED padding (3 bits) | 223 | // LED padding (3 bits) |
| 222 | HID_RI_REPORT_COUNT(8, 0x01), | 224 | HID_RI_REPORT_COUNT(8, 0x01), |
| 223 | HID_RI_REPORT_SIZE(8, 0x03), | 225 | HID_RI_REPORT_SIZE(8, 0x03), |
| 224 | HID_RI_OUTPUT(8, HID_IOF_CONSTANT), | 226 | HID_RI_OUTPUT(8, HID_IOF_CONSTANT), |
| 225 | HID_RI_END_COLLECTION(0), | 227 | HID_RI_END_COLLECTION(0), |
| 226 | #endif | 228 | #endif |
| 227 | #ifdef SHARED_EP_ENABLE | 229 | #ifdef SHARED_EP_ENABLE |
| @@ -230,46 +232,48 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { | |||
| 230 | 232 | ||
| 231 | #ifdef RAW_ENABLE | 233 | #ifdef RAW_ENABLE |
| 232 | const USB_Descriptor_HIDReport_Datatype_t PROGMEM RawReport[] = { | 234 | const USB_Descriptor_HIDReport_Datatype_t PROGMEM RawReport[] = { |
| 233 | HID_RI_USAGE_PAGE(16, 0xFF60), // Vendor Defined | 235 | HID_RI_USAGE_PAGE(16, 0xFF60), // Vendor Defined |
| 234 | HID_RI_USAGE(8, 0x61), // Vendor Defined | 236 | HID_RI_USAGE(8, 0x61), // Vendor Defined |
| 235 | HID_RI_COLLECTION(8, 0x01), // Application | 237 | HID_RI_COLLECTION(8, 0x01), // Application |
| 236 | // Data to host | 238 | // Data to host |
| 237 | HID_RI_USAGE(8, 0x62), // Vendor Defined | 239 | HID_RI_USAGE(8, 0x62), // Vendor Defined |
| 238 | HID_RI_LOGICAL_MINIMUM(8, 0x00), | 240 | HID_RI_LOGICAL_MINIMUM(8, 0x00), |
| 239 | HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), | 241 | HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), |
| 240 | HID_RI_REPORT_COUNT(8, RAW_EPSIZE), | 242 | HID_RI_REPORT_COUNT(8, RAW_EPSIZE), |
| 241 | HID_RI_REPORT_SIZE(8, 0x08), | 243 | HID_RI_REPORT_SIZE(8, 0x08), |
| 242 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), | 244 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), |
| 243 | // Data from host | 245 | |
| 244 | HID_RI_USAGE(8, 0x63), // Vendor Defined | 246 | // Data from host |
| 245 | HID_RI_LOGICAL_MINIMUM(8, 0x00), | 247 | HID_RI_USAGE(8, 0x63), // Vendor Defined |
| 246 | HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), | 248 | HID_RI_LOGICAL_MINIMUM(8, 0x00), |
| 247 | HID_RI_REPORT_COUNT(8, RAW_EPSIZE), | 249 | HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), |
| 248 | HID_RI_REPORT_SIZE(8, 0x08), | 250 | HID_RI_REPORT_COUNT(8, RAW_EPSIZE), |
| 249 | HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), | 251 | HID_RI_REPORT_SIZE(8, 0x08), |
| 252 | HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), | ||
| 250 | HID_RI_END_COLLECTION(0), | 253 | HID_RI_END_COLLECTION(0), |
| 251 | }; | 254 | }; |
| 252 | #endif | 255 | #endif |
| 253 | 256 | ||
| 254 | #ifdef CONSOLE_ENABLE | 257 | #ifdef CONSOLE_ENABLE |
| 255 | const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] = { | 258 | const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] = { |
| 256 | HID_RI_USAGE_PAGE(16, 0xFF31), // Vendor Defined (PJRC Teensy compatible) | 259 | HID_RI_USAGE_PAGE(16, 0xFF31), // Vendor Defined (PJRC Teensy compatible) |
| 257 | HID_RI_USAGE(8, 0x74), // Vendor Defined (PJRC Teensy compatible) | 260 | HID_RI_USAGE(8, 0x74), // Vendor Defined (PJRC Teensy compatible) |
| 258 | HID_RI_COLLECTION(8, 0x01), // Application | 261 | HID_RI_COLLECTION(8, 0x01), // Application |
| 259 | // Data to host | 262 | // Data to host |
| 260 | HID_RI_USAGE(8, 0x75), // Vendor Defined | 263 | HID_RI_USAGE(8, 0x75), // Vendor Defined |
| 261 | HID_RI_LOGICAL_MINIMUM(8, 0x00), | 264 | HID_RI_LOGICAL_MINIMUM(8, 0x00), |
| 262 | HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), | 265 | HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), |
| 263 | HID_RI_REPORT_COUNT(8, CONSOLE_EPSIZE), | 266 | HID_RI_REPORT_COUNT(8, CONSOLE_EPSIZE), |
| 264 | HID_RI_REPORT_SIZE(8, 0x08), | 267 | HID_RI_REPORT_SIZE(8, 0x08), |
| 265 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), | 268 | HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE), |
| 266 | // Data from host | 269 | |
| 267 | HID_RI_USAGE(8, 0x76), // Vendor Defined | 270 | // Data from host |
| 268 | HID_RI_LOGICAL_MINIMUM(8, 0x00), | 271 | HID_RI_USAGE(8, 0x76), // Vendor Defined |
| 269 | HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), | 272 | HID_RI_LOGICAL_MINIMUM(8, 0x00), |
| 270 | HID_RI_REPORT_COUNT(8, CONSOLE_EPSIZE), | 273 | HID_RI_LOGICAL_MAXIMUM(16, 0x00FF), |
| 271 | HID_RI_REPORT_SIZE(8, 0x08), | 274 | HID_RI_REPORT_COUNT(8, CONSOLE_EPSIZE), |
| 272 | HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), | 275 | HID_RI_REPORT_SIZE(8, 0x08), |
| 276 | HID_RI_OUTPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE | HID_IOF_NON_VOLATILE), | ||
| 273 | HID_RI_END_COLLECTION(0), | 277 | HID_RI_END_COLLECTION(0), |
| 274 | }; | 278 | }; |
| 275 | #endif | 279 | #endif |
| @@ -277,26 +281,33 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] = { | |||
| 277 | /* | 281 | /* |
| 278 | * Device descriptor | 282 | * Device descriptor |
| 279 | */ | 283 | */ |
| 280 | const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = {.Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, | 284 | const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = { |
| 281 | .USBSpecification = VERSION_BCD(1, 1, 0), | 285 | .Header = { |
| 286 | .Size = sizeof(USB_Descriptor_Device_t), | ||
| 287 | .Type = DTYPE_Device | ||
| 288 | }, | ||
| 289 | .USBSpecification = VERSION_BCD(1, 1, 0), | ||
| 290 | |||
| 282 | #if VIRTSER_ENABLE | 291 | #if VIRTSER_ENABLE |
| 283 | .Class = USB_CSCP_IADDeviceClass, | 292 | .Class = USB_CSCP_IADDeviceClass, |
| 284 | .SubClass = USB_CSCP_IADDeviceSubclass, | 293 | .SubClass = USB_CSCP_IADDeviceSubclass, |
| 285 | .Protocol = USB_CSCP_IADDeviceProtocol, | 294 | .Protocol = USB_CSCP_IADDeviceProtocol, |
| 286 | #else | 295 | #else |
| 287 | .Class = USB_CSCP_NoDeviceClass, | 296 | .Class = USB_CSCP_NoDeviceClass, |
| 288 | .SubClass = USB_CSCP_NoDeviceSubclass, | 297 | .SubClass = USB_CSCP_NoDeviceSubclass, |
| 289 | .Protocol = USB_CSCP_NoDeviceProtocol, | 298 | .Protocol = USB_CSCP_NoDeviceProtocol, |
| 290 | #endif | 299 | #endif |
| 291 | .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, | 300 | |
| 292 | // Specified in config.h | 301 | .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, |
| 293 | .VendorID = VENDOR_ID, | 302 | // Specified in config.h |
| 294 | .ProductID = PRODUCT_ID, | 303 | .VendorID = VENDOR_ID, |
| 295 | .ReleaseNumber = DEVICE_VER, | 304 | .ProductID = PRODUCT_ID, |
| 296 | .ManufacturerStrIndex = 0x01, | 305 | .ReleaseNumber = DEVICE_VER, |
| 297 | .ProductStrIndex = 0x02, | 306 | .ManufacturerStrIndex = 0x01, |
| 298 | .SerialNumStrIndex = 0x03, | 307 | .ProductStrIndex = 0x02, |
| 299 | .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS}; | 308 | .SerialNumStrIndex = 0x03, |
| 309 | .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS | ||
| 310 | }; | ||
| 300 | 311 | ||
| 301 | #ifndef USB_MAX_POWER_CONSUMPTION | 312 | #ifndef USB_MAX_POWER_CONSUMPTION |
| 302 | # define USB_MAX_POWER_CONSUMPTION 500 | 313 | # define USB_MAX_POWER_CONSUMPTION 500 |
| @@ -309,197 +320,540 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = {.Header = {. | |||
| 309 | /* | 320 | /* |
| 310 | * Configuration descriptors | 321 | * Configuration descriptors |
| 311 | */ | 322 | */ |
| 312 | const USB_Descriptor_Configuration_t PROGMEM | 323 | const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = { |
| 313 | ConfigurationDescriptor = | 324 | .Config = { |
| 314 | { | 325 | .Header = { |
| 315 | .Config = {.Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), .TotalInterfaces = TOTAL_INTERFACES, .ConfigurationNumber = 1, .ConfigurationStrIndex = NO_DESCRIPTOR, .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_REMOTEWAKEUP), .MaxPowerConsumption = USB_CONFIG_POWER_MA(USB_MAX_POWER_CONSUMPTION)}, | 326 | .Size = sizeof(USB_Descriptor_Configuration_Header_t), |
| 316 | 327 | .Type = DTYPE_Configuration | |
| 328 | }, | ||
| 329 | .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), | ||
| 330 | .TotalInterfaces = TOTAL_INTERFACES, | ||
| 331 | .ConfigurationNumber = 1, | ||
| 332 | .ConfigurationStrIndex = NO_DESCRIPTOR, | ||
| 333 | .ConfigAttributes = (USB_CONFIG_ATTR_RESERVED | USB_CONFIG_ATTR_REMOTEWAKEUP), | ||
| 334 | .MaxPowerConsumption = USB_CONFIG_POWER_MA(USB_MAX_POWER_CONSUMPTION) | ||
| 335 | }, | ||
| 317 | #ifndef KEYBOARD_SHARED_EP | 336 | #ifndef KEYBOARD_SHARED_EP |
| 318 | /* | 337 | /* |
| 319 | * Keyboard | 338 | * Keyboard |
| 320 | */ | 339 | */ |
| 321 | .Keyboard_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, | 340 | .Keyboard_Interface = { |
| 322 | .InterfaceNumber = KEYBOARD_INTERFACE, | 341 | .Header = { |
| 323 | .AlternateSetting = 0x00, | 342 | .Size = sizeof(USB_Descriptor_Interface_t), |
| 324 | .TotalEndpoints = 1, | 343 | .Type = DTYPE_Interface |
| 325 | .Class = HID_CSCP_HIDClass, | 344 | }, |
| 326 | .SubClass = HID_CSCP_BootSubclass, | 345 | .InterfaceNumber = KEYBOARD_INTERFACE, |
| 327 | .Protocol = HID_CSCP_KeyboardBootProtocol, | 346 | .AlternateSetting = 0x00, |
| 328 | 347 | .TotalEndpoints = 1, | |
| 329 | .InterfaceStrIndex = NO_DESCRIPTOR}, | 348 | .Class = HID_CSCP_HIDClass, |
| 330 | .Keyboard_HID = {.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, .HIDSpec = VERSION_BCD(1, 1, 1), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = HID_DTYPE_Report, .HIDReportLength = sizeof(KeyboardReport)}, | 349 | .SubClass = HID_CSCP_BootSubclass, |
| 331 | .Keyboard_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | KEYBOARD_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = KEYBOARD_EPSIZE, .PollingIntervalMS = USB_POLLING_INTERVAL_MS}, | 350 | .Protocol = HID_CSCP_KeyboardBootProtocol, |
| 351 | .InterfaceStrIndex = NO_DESCRIPTOR | ||
| 352 | }, | ||
| 353 | .Keyboard_HID = { | ||
| 354 | .Header = { | ||
| 355 | .Size = sizeof(USB_HID_Descriptor_HID_t), | ||
| 356 | .Type = HID_DTYPE_HID | ||
| 357 | }, | ||
| 358 | .HIDSpec = VERSION_BCD(1, 1, 1), | ||
| 359 | .CountryCode = 0x00, | ||
| 360 | .TotalReportDescriptors = 1, | ||
| 361 | .HIDReportType = HID_DTYPE_Report, | ||
| 362 | .HIDReportLength = sizeof(KeyboardReport) | ||
| 363 | }, | ||
| 364 | .Keyboard_INEndpoint = { | ||
| 365 | .Header = { | ||
| 366 | .Size = sizeof(USB_Descriptor_Endpoint_t), | ||
| 367 | .Type = DTYPE_Endpoint | ||
| 368 | }, | ||
| 369 | .EndpointAddress = (ENDPOINT_DIR_IN | KEYBOARD_IN_EPNUM), | ||
| 370 | .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), | ||
| 371 | .EndpointSize = KEYBOARD_EPSIZE, | ||
| 372 | .PollingIntervalMS = USB_POLLING_INTERVAL_MS | ||
| 373 | }, | ||
| 332 | #endif | 374 | #endif |
| 333 | 375 | ||
| 334 | #ifdef RAW_ENABLE | 376 | #ifdef RAW_ENABLE |
| 335 | /* | 377 | /* |
| 336 | * Raw HID | 378 | * Raw HID |
| 337 | */ | 379 | */ |
| 338 | .Raw_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .InterfaceNumber = RAW_INTERFACE, .AlternateSetting = 0x00, .TotalEndpoints = 2, .Class = HID_CSCP_HIDClass, .SubClass = HID_CSCP_NonBootSubclass, .Protocol = HID_CSCP_NonBootProtocol, .InterfaceStrIndex = NO_DESCRIPTOR}, | 380 | .Raw_Interface = { |
| 339 | .Raw_HID = {.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, .HIDSpec = VERSION_BCD(1, 1, 1), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = HID_DTYPE_Report, .HIDReportLength = sizeof(RawReport)}, | 381 | .Header = { |
| 340 | .Raw_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | RAW_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = RAW_EPSIZE, .PollingIntervalMS = 0x01}, | 382 | .Size = sizeof(USB_Descriptor_Interface_t), |
| 341 | .Raw_OUTEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_OUT | RAW_OUT_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = RAW_EPSIZE, .PollingIntervalMS = 0x01}, | 383 | .Type = DTYPE_Interface |
| 384 | }, | ||
| 385 | .InterfaceNumber = RAW_INTERFACE, | ||
| 386 | .AlternateSetting = 0x00, | ||
| 387 | .TotalEndpoints = 2, | ||
| 388 | .Class = HID_CSCP_HIDClass, | ||
| 389 | .SubClass = HID_CSCP_NonBootSubclass, | ||
| 390 | .Protocol = HID_CSCP_NonBootProtocol, | ||
| 391 | .InterfaceStrIndex = NO_DESCRIPTOR | ||
| 392 | }, | ||
| 393 | .Raw_HID = { | ||
| 394 | .Header = { | ||
| 395 | .Size = sizeof(USB_HID_Descriptor_HID_t), | ||
| 396 | .Type = HID_DTYPE_HID | ||
| 397 | }, | ||
| 398 | .HIDSpec = VERSION_BCD(1, 1, 1), | ||
| 399 | .CountryCode = 0x00, | ||
| 400 | .TotalReportDescriptors = 1, | ||
| 401 | .HIDReportType = HID_DTYPE_Report, | ||
| 402 | .HIDReportLength = sizeof(RawReport) | ||
| 403 | }, | ||
| 404 | .Raw_INEndpoint = { | ||
| 405 | .Header = { | ||
| 406 | .Size = sizeof(USB_Descriptor_Endpoint_t), | ||
| 407 | .Type = DTYPE_Endpoint | ||
| 408 | }, | ||
| 409 | .EndpointAddress = (ENDPOINT_DIR_IN | RAW_IN_EPNUM), | ||
| 410 | .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), | ||
| 411 | .EndpointSize = RAW_EPSIZE, | ||
| 412 | .PollingIntervalMS = 0x01 | ||
| 413 | }, | ||
| 414 | .Raw_OUTEndpoint = { | ||
| 415 | .Header = { | ||
| 416 | .Size = sizeof(USB_Descriptor_Endpoint_t), | ||
| 417 | .Type = DTYPE_Endpoint | ||
| 418 | }, | ||
| 419 | .EndpointAddress = (ENDPOINT_DIR_OUT | RAW_OUT_EPNUM), | ||
| 420 | .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), | ||
| 421 | .EndpointSize = RAW_EPSIZE, | ||
| 422 | .PollingIntervalMS = 0x01 | ||
| 423 | }, | ||
| 342 | #endif | 424 | #endif |
| 343 | 425 | ||
| 344 | #if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) | 426 | #if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP) |
| 345 | /* | 427 | /* |
| 346 | * Mouse | 428 | * Mouse |
| 347 | */ | 429 | */ |
| 348 | .Mouse_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .InterfaceNumber = MOUSE_INTERFACE, .AlternateSetting = 0x00, .TotalEndpoints = 1, .Class = HID_CSCP_HIDClass, .SubClass = HID_CSCP_BootSubclass, .Protocol = HID_CSCP_MouseBootProtocol, .InterfaceStrIndex = NO_DESCRIPTOR}, | 430 | .Mouse_Interface = { |
| 349 | .Mouse_HID = {.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, .HIDSpec = VERSION_BCD(1, 1, 1), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = HID_DTYPE_Report, .HIDReportLength = sizeof(MouseReport)}, | 431 | .Header = { |
| 350 | .Mouse_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | MOUSE_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = MOUSE_EPSIZE, .PollingIntervalMS = USB_POLLING_INTERVAL_MS}, | 432 | .Size = sizeof(USB_Descriptor_Interface_t), |
| 433 | .Type = DTYPE_Interface | ||
| 434 | }, | ||
| 435 | .InterfaceNumber = MOUSE_INTERFACE, | ||
| 436 | .AlternateSetting = 0x00, | ||
| 437 | .TotalEndpoints = 1, | ||
| 438 | .Class = HID_CSCP_HIDClass, | ||
| 439 | .SubClass = HID_CSCP_BootSubclass, | ||
| 440 | .Protocol = HID_CSCP_MouseBootProtocol, | ||
| 441 | .InterfaceStrIndex = NO_DESCRIPTOR | ||
| 442 | }, | ||
| 443 | .Mouse_HID = { | ||
| 444 | .Header = { | ||
| 445 | .Size = sizeof(USB_HID_Descriptor_HID_t), | ||
| 446 | .Type = HID_DTYPE_HID | ||
| 447 | }, | ||
| 448 | .HIDSpec = VERSION_BCD(1, 1, 1), | ||
| 449 | .CountryCode = 0x00, | ||
| 450 | .TotalReportDescriptors = 1, | ||
| 451 | .HIDReportType = HID_DTYPE_Report, | ||
| 452 | .HIDReportLength = sizeof(MouseReport) | ||
| 453 | }, | ||
| 454 | .Mouse_INEndpoint = { | ||
| 455 | .Header = { | ||
| 456 | .Size = sizeof(USB_Descriptor_Endpoint_t), | ||
| 457 | .Type = DTYPE_Endpoint | ||
| 458 | }, | ||
| 459 | .EndpointAddress = (ENDPOINT_DIR_IN | MOUSE_IN_EPNUM), | ||
| 460 | .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), | ||
| 461 | .EndpointSize = MOUSE_EPSIZE, | ||
| 462 | .PollingIntervalMS = USB_POLLING_INTERVAL_MS | ||
| 463 | }, | ||
| 351 | #endif | 464 | #endif |
| 352 | 465 | ||
| 353 | #ifdef SHARED_EP_ENABLE | 466 | #ifdef SHARED_EP_ENABLE |
| 354 | /* | 467 | /* |
| 355 | * Shared | 468 | * Shared |
| 356 | */ | 469 | */ |
| 357 | .Shared_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, | 470 | .Shared_Interface = { |
| 358 | .InterfaceNumber = SHARED_INTERFACE, | 471 | .Header = { |
| 359 | .AlternateSetting = 0x00, | 472 | .Size = sizeof(USB_Descriptor_Interface_t), |
| 360 | .TotalEndpoints = 1, | 473 | .Type = DTYPE_Interface |
| 361 | .Class = HID_CSCP_HIDClass, | 474 | }, |
| 475 | .InterfaceNumber = SHARED_INTERFACE, | ||
| 476 | .AlternateSetting = 0x00, | ||
| 477 | .TotalEndpoints = 1, | ||
| 478 | .Class = HID_CSCP_HIDClass, | ||
| 362 | # ifdef KEYBOARD_SHARED_EP | 479 | # ifdef KEYBOARD_SHARED_EP |
| 363 | .SubClass = HID_CSCP_BootSubclass, | 480 | .SubClass = HID_CSCP_BootSubclass, |
| 364 | .Protocol = HID_CSCP_KeyboardBootProtocol, | 481 | .Protocol = HID_CSCP_KeyboardBootProtocol, |
| 365 | # else | 482 | # else |
| 366 | .SubClass = HID_CSCP_NonBootSubclass, | 483 | .SubClass = HID_CSCP_NonBootSubclass, |
| 367 | .Protocol = HID_CSCP_NonBootProtocol, | 484 | .Protocol = HID_CSCP_NonBootProtocol, |
| 368 | # endif | 485 | # endif |
| 369 | .InterfaceStrIndex = NO_DESCRIPTOR}, | 486 | .InterfaceStrIndex = NO_DESCRIPTOR |
| 370 | .Shared_HID = {.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, .HIDSpec = VERSION_BCD(1, 1, 1), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = HID_DTYPE_Report, .HIDReportLength = sizeof(SharedReport)}, | 487 | }, |
| 371 | .Shared_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | SHARED_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = SHARED_EPSIZE, .PollingIntervalMS = USB_POLLING_INTERVAL_MS}, | 488 | .Shared_HID = { |
| 489 | .Header = { | ||
| 490 | .Size = sizeof(USB_HID_Descriptor_HID_t), | ||
| 491 | .Type = HID_DTYPE_HID | ||
| 492 | }, | ||
| 493 | .HIDSpec = VERSION_BCD(1, 1, 1), | ||
| 494 | .CountryCode = 0x00, | ||
| 495 | .TotalReportDescriptors = 1, | ||
| 496 | .HIDReportType = HID_DTYPE_Report, | ||
| 497 | .HIDReportLength = sizeof(SharedReport) | ||
| 498 | }, | ||
| 499 | .Shared_INEndpoint = { | ||
| 500 | .Header = { | ||
| 501 | .Size = sizeof(USB_Descriptor_Endpoint_t), | ||
| 502 | .Type = DTYPE_Endpoint | ||
| 503 | }, | ||
| 504 | .EndpointAddress = (ENDPOINT_DIR_IN | SHARED_IN_EPNUM), | ||
| 505 | .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), | ||
| 506 | .EndpointSize = SHARED_EPSIZE, | ||
| 507 | .PollingIntervalMS = USB_POLLING_INTERVAL_MS | ||
| 508 | }, | ||
| 372 | #endif | 509 | #endif |
| 373 | 510 | ||
| 374 | #ifdef CONSOLE_ENABLE | 511 | #ifdef CONSOLE_ENABLE |
| 375 | /* | 512 | /* |
| 376 | * Console | 513 | * Console |
| 377 | */ | 514 | */ |
| 378 | .Console_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .InterfaceNumber = CONSOLE_INTERFACE, .AlternateSetting = 0x00, .TotalEndpoints = 2, .Class = HID_CSCP_HIDClass, .SubClass = HID_CSCP_NonBootSubclass, .Protocol = HID_CSCP_NonBootProtocol, .InterfaceStrIndex = NO_DESCRIPTOR}, | 515 | .Console_Interface = { |
| 379 | .Console_HID = {.Header = {.Size = sizeof(USB_HID_Descriptor_HID_t), .Type = HID_DTYPE_HID}, .HIDSpec = VERSION_BCD(1, 1, 1), .CountryCode = 0x00, .TotalReportDescriptors = 1, .HIDReportType = HID_DTYPE_Report, .HIDReportLength = sizeof(ConsoleReport)}, | 516 | .Header = { |
| 380 | .Console_INEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_IN | CONSOLE_IN_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = CONSOLE_EPSIZE, .PollingIntervalMS = 0x01}, | 517 | .Size = sizeof(USB_Descriptor_Interface_t), |
| 381 | .Console_OUTEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = (ENDPOINT_DIR_OUT | CONSOLE_OUT_EPNUM), .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = CONSOLE_EPSIZE, .PollingIntervalMS = 0x01}, | 518 | .Type = DTYPE_Interface |
| 519 | }, | ||
| 520 | .InterfaceNumber = CONSOLE_INTERFACE, | ||
| 521 | .AlternateSetting = 0x00, | ||
| 522 | .TotalEndpoints = 2, | ||
| 523 | .Class = HID_CSCP_HIDClass, | ||
| 524 | .SubClass = HID_CSCP_NonBootSubclass, | ||
| 525 | .Protocol = HID_CSCP_NonBootProtocol, | ||
| 526 | .InterfaceStrIndex = NO_DESCRIPTOR | ||
| 527 | }, | ||
| 528 | .Console_HID = { | ||
| 529 | .Header = { | ||
| 530 | .Size = sizeof(USB_HID_Descriptor_HID_t), | ||
| 531 | .Type = HID_DTYPE_HID | ||
| 532 | }, | ||
| 533 | .HIDSpec = VERSION_BCD(1, 1, 1), | ||
| 534 | .CountryCode = 0x00, | ||
| 535 | .TotalReportDescriptors = 1, | ||
| 536 | .HIDReportType = HID_DTYPE_Report, | ||
| 537 | .HIDReportLength = sizeof(ConsoleReport) | ||
| 538 | }, | ||
| 539 | .Console_INEndpoint = { | ||
| 540 | .Header = { | ||
| 541 | .Size = sizeof(USB_Descriptor_Endpoint_t), | ||
| 542 | .Type = DTYPE_Endpoint | ||
| 543 | }, | ||
| 544 | .EndpointAddress = (ENDPOINT_DIR_IN | CONSOLE_IN_EPNUM), | ||
| 545 | .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), | ||
| 546 | .EndpointSize = CONSOLE_EPSIZE, | ||
| 547 | .PollingIntervalMS = 0x01 | ||
| 548 | }, | ||
| 549 | .Console_OUTEndpoint = { | ||
| 550 | .Header = { | ||
| 551 | .Size = sizeof(USB_Descriptor_Endpoint_t), | ||
| 552 | .Type = DTYPE_Endpoint | ||
| 553 | }, | ||
| 554 | .EndpointAddress = (ENDPOINT_DIR_OUT | CONSOLE_OUT_EPNUM), | ||
| 555 | .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), | ||
| 556 | .EndpointSize = CONSOLE_EPSIZE, | ||
| 557 | .PollingIntervalMS = 0x01 | ||
| 558 | }, | ||
| 382 | #endif | 559 | #endif |
| 383 | 560 | ||
| 384 | #ifdef MIDI_ENABLE | 561 | #ifdef MIDI_ENABLE |
| 385 | /* | 562 | /* |
| 386 | * MIDI | 563 | * MIDI |
| 387 | */ | 564 | */ |
| 388 | .Audio_Interface_Association = | 565 | .Audio_Interface_Association = { |
| 389 | { | 566 | .Header = { |
| 390 | .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation}, | 567 | .Size = sizeof(USB_Descriptor_Interface_Association_t), |
| 391 | .FirstInterfaceIndex = AC_INTERFACE, | 568 | .Type = DTYPE_InterfaceAssociation |
| 392 | .TotalInterfaces = 2, | 569 | }, |
| 393 | .Class = AUDIO_CSCP_AudioClass, | 570 | .FirstInterfaceIndex = AC_INTERFACE, |
| 394 | .SubClass = AUDIO_CSCP_ControlSubclass, | 571 | .TotalInterfaces = 2, |
| 395 | .Protocol = AUDIO_CSCP_ControlProtocol, | 572 | .Class = AUDIO_CSCP_AudioClass, |
| 396 | .IADStrIndex = NO_DESCRIPTOR, | 573 | .SubClass = AUDIO_CSCP_ControlSubclass, |
| 397 | }, | 574 | .Protocol = AUDIO_CSCP_ControlProtocol, |
| 398 | .Audio_ControlInterface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, | 575 | .IADStrIndex = NO_DESCRIPTOR, |
| 399 | 576 | }, | |
| 400 | .InterfaceNumber = AC_INTERFACE, | 577 | .Audio_ControlInterface = { |
| 401 | .AlternateSetting = 0, | 578 | .Header = { |
| 402 | .TotalEndpoints = 0, | 579 | .Size = sizeof(USB_Descriptor_Interface_t), |
| 403 | .Class = AUDIO_CSCP_AudioClass, | 580 | .Type = DTYPE_Interface |
| 404 | .SubClass = AUDIO_CSCP_ControlSubclass, | 581 | }, |
| 405 | .Protocol = AUDIO_CSCP_ControlProtocol, | 582 | .InterfaceNumber = AC_INTERFACE, |
| 406 | .InterfaceStrIndex = NO_DESCRIPTOR}, | 583 | .AlternateSetting = 0, |
| 407 | .Audio_ControlInterface_SPC = | 584 | .TotalEndpoints = 0, |
| 408 | { | 585 | .Class = AUDIO_CSCP_AudioClass, |
| 409 | .Header = {.Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), .Type = AUDIO_DTYPE_CSInterface}, | 586 | .SubClass = AUDIO_CSCP_ControlSubclass, |
| 410 | .Subtype = AUDIO_DSUBTYPE_CSInterface_Header, | 587 | .Protocol = AUDIO_CSCP_ControlProtocol, |
| 411 | .ACSpecification = VERSION_BCD(1, 0, 0), | 588 | .InterfaceStrIndex = NO_DESCRIPTOR |
| 412 | .TotalLength = sizeof(USB_Audio_Descriptor_Interface_AC_t), | 589 | }, |
| 413 | .InCollection = 1, | 590 | .Audio_ControlInterface_SPC = { |
| 414 | .InterfaceNumber = AS_INTERFACE, | 591 | .Header = { |
| 415 | }, | 592 | .Size = sizeof(USB_Audio_Descriptor_Interface_AC_t), |
| 416 | .Audio_StreamInterface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, | 593 | .Type = AUDIO_DTYPE_CSInterface |
| 417 | 594 | }, | |
| 418 | .InterfaceNumber = AS_INTERFACE, | 595 | .Subtype = AUDIO_DSUBTYPE_CSInterface_Header, |
| 419 | .AlternateSetting = 0, | 596 | .ACSpecification = VERSION_BCD(1, 0, 0), |
| 420 | .TotalEndpoints = 2, | 597 | .TotalLength = sizeof(USB_Audio_Descriptor_Interface_AC_t), |
| 421 | .Class = AUDIO_CSCP_AudioClass, | 598 | .InCollection = 1, |
| 422 | .SubClass = AUDIO_CSCP_MIDIStreamingSubclass, | 599 | .InterfaceNumber = AS_INTERFACE, |
| 423 | .Protocol = AUDIO_CSCP_StreamingProtocol, | 600 | }, |
| 424 | .InterfaceStrIndex = NO_DESCRIPTOR}, | 601 | .Audio_StreamInterface = { |
| 425 | .Audio_StreamInterface_SPC = {.Header = {.Size = sizeof(USB_MIDI_Descriptor_AudioInterface_AS_t), .Type = AUDIO_DTYPE_CSInterface}, .Subtype = AUDIO_DSUBTYPE_CSInterface_General, .AudioSpecification = VERSION_BCD(1, 0, 0), .TotalLength = offsetof(USB_Descriptor_Configuration_t, MIDI_Out_Jack_Endpoint_SPC) + sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t) - offsetof(USB_Descriptor_Configuration_t, Audio_StreamInterface_SPC)}, | 602 | .Header = { |
| 426 | .MIDI_In_Jack_Emb = {.Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = AUDIO_DTYPE_CSInterface}, .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, .JackType = MIDI_JACKTYPE_Embedded, .JackID = 0x01, .JackStrIndex = NO_DESCRIPTOR}, | 603 | .Size = sizeof(USB_Descriptor_Interface_t), |
| 427 | .MIDI_In_Jack_Ext = {.Header = {.Size = sizeof(USB_MIDI_Descriptor_InputJack_t), .Type = AUDIO_DTYPE_CSInterface}, .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, .JackType = MIDI_JACKTYPE_External, .JackID = 0x02, .JackStrIndex = NO_DESCRIPTOR}, | 604 | .Type = DTYPE_Interface |
| 428 | .MIDI_Out_Jack_Emb = {.Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = AUDIO_DTYPE_CSInterface}, .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, .JackType = MIDI_JACKTYPE_Embedded, .JackID = 0x03, .NumberOfPins = 1, .SourceJackID = {0x02}, .SourcePinID = {0x01}, .JackStrIndex = NO_DESCRIPTOR}, | 605 | }, |
| 429 | .MIDI_Out_Jack_Ext = {.Header = {.Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), .Type = AUDIO_DTYPE_CSInterface}, .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, .JackType = MIDI_JACKTYPE_External, .JackID = 0x04, .NumberOfPins = 1, .SourceJackID = {0x01}, .SourcePinID = {0x01}, .JackStrIndex = NO_DESCRIPTOR}, | 606 | .InterfaceNumber = AS_INTERFACE, |
| 430 | .MIDI_In_Jack_Endpoint = {.Endpoint = {.Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, .EndpointAddress = MIDI_STREAM_OUT_EPADDR, .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = MIDI_STREAM_EPSIZE, .PollingIntervalMS = 0x05}, | 607 | .AlternateSetting = 0, |
| 431 | 608 | .TotalEndpoints = 2, | |
| 432 | .Refresh = 0, | 609 | .Class = AUDIO_CSCP_AudioClass, |
| 433 | .SyncEndpointNumber = 0}, | 610 | .SubClass = AUDIO_CSCP_MIDIStreamingSubclass, |
| 434 | .MIDI_In_Jack_Endpoint_SPC = {.Header = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = AUDIO_DTYPE_CSEndpoint}, .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, .TotalEmbeddedJacks = 0x01, .AssociatedJackID = {0x01}}, | 611 | .Protocol = AUDIO_CSCP_StreamingProtocol, |
| 435 | .MIDI_Out_Jack_Endpoint = {.Endpoint = {.Header = {.Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), .Type = DTYPE_Endpoint}, .EndpointAddress = MIDI_STREAM_IN_EPADDR, .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = MIDI_STREAM_EPSIZE, .PollingIntervalMS = 0x05}, | 612 | .InterfaceStrIndex = NO_DESCRIPTOR |
| 436 | 613 | }, | |
| 437 | .Refresh = 0, | 614 | .Audio_StreamInterface_SPC = { |
| 438 | .SyncEndpointNumber = 0}, | 615 | .Header = { |
| 439 | .MIDI_Out_Jack_Endpoint_SPC = {.Header = {.Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), .Type = AUDIO_DTYPE_CSEndpoint}, .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, .TotalEmbeddedJacks = 0x01, .AssociatedJackID = {0x03}}, | 616 | .Size = sizeof(USB_MIDI_Descriptor_AudioInterface_AS_t), |
| 617 | .Type = AUDIO_DTYPE_CSInterface | ||
| 618 | }, | ||
| 619 | .Subtype = AUDIO_DSUBTYPE_CSInterface_General, | ||
| 620 | .AudioSpecification = VERSION_BCD(1, 0, 0), | ||
| 621 | .TotalLength = offsetof(USB_Descriptor_Configuration_t, MIDI_Out_Jack_Endpoint_SPC) + sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t) - offsetof(USB_Descriptor_Configuration_t, Audio_StreamInterface_SPC) | ||
| 622 | }, | ||
| 623 | .MIDI_In_Jack_Emb = { | ||
| 624 | .Header = { | ||
| 625 | .Size = sizeof(USB_MIDI_Descriptor_InputJack_t), | ||
| 626 | .Type = AUDIO_DTYPE_CSInterface | ||
| 627 | }, | ||
| 628 | .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, | ||
| 629 | .JackType = MIDI_JACKTYPE_Embedded, | ||
| 630 | .JackID = 0x01, | ||
| 631 | .JackStrIndex = NO_DESCRIPTOR | ||
| 632 | }, | ||
| 633 | .MIDI_In_Jack_Ext = { | ||
| 634 | .Header = { | ||
| 635 | .Size = sizeof(USB_MIDI_Descriptor_InputJack_t), | ||
| 636 | .Type = AUDIO_DTYPE_CSInterface | ||
| 637 | }, | ||
| 638 | .Subtype = AUDIO_DSUBTYPE_CSInterface_InputTerminal, | ||
| 639 | .JackType = MIDI_JACKTYPE_External, | ||
| 640 | .JackID = 0x02, | ||
| 641 | .JackStrIndex = NO_DESCRIPTOR | ||
| 642 | }, | ||
| 643 | .MIDI_Out_Jack_Emb = { | ||
| 644 | .Header = { | ||
| 645 | .Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), | ||
| 646 | .Type = AUDIO_DTYPE_CSInterface | ||
| 647 | }, | ||
| 648 | .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, | ||
| 649 | .JackType = MIDI_JACKTYPE_Embedded, | ||
| 650 | .JackID = 0x03, | ||
| 651 | .NumberOfPins = 1, | ||
| 652 | .SourceJackID = {0x02}, | ||
| 653 | .SourcePinID = {0x01}, | ||
| 654 | .JackStrIndex = NO_DESCRIPTOR | ||
| 655 | }, | ||
| 656 | .MIDI_Out_Jack_Ext = { | ||
| 657 | .Header = { | ||
| 658 | .Size = sizeof(USB_MIDI_Descriptor_OutputJack_t), | ||
| 659 | .Type = AUDIO_DTYPE_CSInterface | ||
| 660 | }, | ||
| 661 | .Subtype = AUDIO_DSUBTYPE_CSInterface_OutputTerminal, | ||
| 662 | .JackType = MIDI_JACKTYPE_External, | ||
| 663 | .JackID = 0x04, | ||
| 664 | .NumberOfPins = 1, | ||
| 665 | .SourceJackID = {0x01}, | ||
| 666 | .SourcePinID = {0x01}, | ||
| 667 | .JackStrIndex = NO_DESCRIPTOR | ||
| 668 | }, | ||
| 669 | .MIDI_In_Jack_Endpoint = { | ||
| 670 | .Endpoint = { | ||
| 671 | .Header = { | ||
| 672 | .Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), | ||
| 673 | .Type = DTYPE_Endpoint | ||
| 674 | }, | ||
| 675 | .EndpointAddress = MIDI_STREAM_OUT_EPADDR, | ||
| 676 | .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), | ||
| 677 | .EndpointSize = MIDI_STREAM_EPSIZE, | ||
| 678 | .PollingIntervalMS = 0x05 | ||
| 679 | }, | ||
| 680 | .Refresh = 0, | ||
| 681 | .SyncEndpointNumber = 0 | ||
| 682 | }, | ||
| 683 | .MIDI_In_Jack_Endpoint_SPC = { | ||
| 684 | .Header = { | ||
| 685 | .Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), | ||
| 686 | .Type = AUDIO_DTYPE_CSEndpoint | ||
| 687 | }, | ||
| 688 | .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, | ||
| 689 | .TotalEmbeddedJacks = 0x01, | ||
| 690 | .AssociatedJackID = {0x01} | ||
| 691 | }, | ||
| 692 | .MIDI_Out_Jack_Endpoint = { | ||
| 693 | .Endpoint = { | ||
| 694 | .Header = { | ||
| 695 | .Size = sizeof(USB_Audio_Descriptor_StreamEndpoint_Std_t), | ||
| 696 | .Type = DTYPE_Endpoint | ||
| 697 | }, | ||
| 698 | .EndpointAddress = MIDI_STREAM_IN_EPADDR, | ||
| 699 | .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), | ||
| 700 | .EndpointSize = MIDI_STREAM_EPSIZE, | ||
| 701 | .PollingIntervalMS = 0x05 | ||
| 702 | }, | ||
| 703 | .Refresh = 0, | ||
| 704 | .SyncEndpointNumber = 0 | ||
| 705 | }, | ||
| 706 | .MIDI_Out_Jack_Endpoint_SPC = { | ||
| 707 | .Header = { | ||
| 708 | .Size = sizeof(USB_MIDI_Descriptor_Jack_Endpoint_t), | ||
| 709 | .Type = AUDIO_DTYPE_CSEndpoint | ||
| 710 | }, | ||
| 711 | .Subtype = AUDIO_DSUBTYPE_CSEndpoint_General, | ||
| 712 | .TotalEmbeddedJacks = 0x01, | ||
| 713 | .AssociatedJackID = {0x03} | ||
| 714 | }, | ||
| 440 | #endif | 715 | #endif |
| 441 | 716 | ||
| 442 | #ifdef VIRTSER_ENABLE | 717 | #ifdef VIRTSER_ENABLE |
| 443 | /* | 718 | /* |
| 444 | * Virtual Serial | 719 | * Virtual Serial |
| 445 | */ | 720 | */ |
| 446 | .CDC_Interface_Association = | 721 | .CDC_Interface_Association = { |
| 447 | { | 722 | .Header = { |
| 448 | .Header = {.Size = sizeof(USB_Descriptor_Interface_Association_t), .Type = DTYPE_InterfaceAssociation}, | 723 | .Size = sizeof(USB_Descriptor_Interface_Association_t), |
| 449 | .FirstInterfaceIndex = CCI_INTERFACE, | 724 | .Type = DTYPE_InterfaceAssociation |
| 450 | .TotalInterfaces = 2, | 725 | }, |
| 451 | .Class = CDC_CSCP_CDCClass, | 726 | .FirstInterfaceIndex = CCI_INTERFACE, |
| 452 | .SubClass = CDC_CSCP_ACMSubclass, | 727 | .TotalInterfaces = 2, |
| 453 | .Protocol = CDC_CSCP_ATCommandProtocol, | 728 | .Class = CDC_CSCP_CDCClass, |
| 454 | .IADStrIndex = NO_DESCRIPTOR, | 729 | .SubClass = CDC_CSCP_ACMSubclass, |
| 455 | }, | 730 | .Protocol = CDC_CSCP_ATCommandProtocol, |
| 456 | .CDC_CCI_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .InterfaceNumber = CCI_INTERFACE, .AlternateSetting = 0, .TotalEndpoints = 1, .Class = CDC_CSCP_CDCClass, .SubClass = CDC_CSCP_ACMSubclass, .Protocol = CDC_CSCP_ATCommandProtocol, .InterfaceStrIndex = NO_DESCRIPTOR}, | 731 | .IADStrIndex = NO_DESCRIPTOR, |
| 457 | .CDC_Functional_Header = | 732 | }, |
| 458 | { | 733 | .CDC_CCI_Interface = { |
| 459 | .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), .Type = CDC_DTYPE_CSInterface}, | 734 | .Header = { |
| 460 | .Subtype = 0x00, | 735 | .Size = sizeof(USB_Descriptor_Interface_t), |
| 461 | .CDCSpecification = VERSION_BCD(1, 1, 0), | 736 | .Type = DTYPE_Interface |
| 462 | }, | 737 | }, |
| 463 | .CDC_Functional_ACM = | 738 | .InterfaceNumber = CCI_INTERFACE, |
| 464 | { | 739 | .AlternateSetting = 0, |
| 465 | .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), .Type = CDC_DTYPE_CSInterface}, | 740 | .TotalEndpoints = 1, |
| 466 | .Subtype = 0x02, | 741 | .Class = CDC_CSCP_CDCClass, |
| 467 | .Capabilities = 0x02, | 742 | .SubClass = CDC_CSCP_ACMSubclass, |
| 468 | }, | 743 | .Protocol = CDC_CSCP_ATCommandProtocol, |
| 469 | .CDC_Functional_Union = | 744 | .InterfaceStrIndex = NO_DESCRIPTOR |
| 470 | { | 745 | }, |
| 471 | .Header = {.Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), .Type = CDC_DTYPE_CSInterface}, | 746 | .CDC_Functional_Header = { |
| 472 | .Subtype = 0x06, | 747 | .Header = { |
| 473 | .MasterInterfaceNumber = CCI_INTERFACE, | 748 | .Size = sizeof(USB_CDC_Descriptor_FunctionalHeader_t), |
| 474 | .SlaveInterfaceNumber = CDI_INTERFACE, | 749 | .Type = CDC_DTYPE_CSInterface |
| 475 | }, | 750 | }, |
| 476 | .CDC_NotificationEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = CDC_NOTIFICATION_EPADDR, .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = CDC_NOTIFICATION_EPSIZE, .PollingIntervalMS = 0xFF}, | 751 | .Subtype = 0x00, |
| 477 | .CDC_DCI_Interface = {.Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .InterfaceNumber = CDI_INTERFACE, .AlternateSetting = 0, .TotalEndpoints = 2, .Class = CDC_CSCP_CDCDataClass, .SubClass = CDC_CSCP_NoDataSubclass, .Protocol = CDC_CSCP_NoDataProtocol, .InterfaceStrIndex = NO_DESCRIPTOR}, | 752 | .CDCSpecification = VERSION_BCD(1, 1, 0), |
| 478 | .CDC_DataOutEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = CDC_OUT_EPADDR, .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = CDC_EPSIZE, .PollingIntervalMS = 0x05}, | 753 | }, |
| 479 | .CDC_DataInEndpoint = {.Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, .EndpointAddress = CDC_IN_EPADDR, .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = CDC_EPSIZE, .PollingIntervalMS = 0x05}, | 754 | .CDC_Functional_ACM = { |
| 755 | .Header = { | ||
| 756 | .Size = sizeof(USB_CDC_Descriptor_FunctionalACM_t), | ||
| 757 | .Type = CDC_DTYPE_CSInterface | ||
| 758 | }, | ||
| 759 | .Subtype = 0x02, | ||
| 760 | .Capabilities = 0x02, | ||
| 761 | }, | ||
| 762 | .CDC_Functional_Union = { | ||
| 763 | .Header = { | ||
| 764 | .Size = sizeof(USB_CDC_Descriptor_FunctionalUnion_t), | ||
| 765 | .Type = CDC_DTYPE_CSInterface | ||
| 766 | }, | ||
| 767 | .Subtype = 0x06, | ||
| 768 | .MasterInterfaceNumber = CCI_INTERFACE, | ||
| 769 | .SlaveInterfaceNumber = CDI_INTERFACE, | ||
| 770 | }, | ||
| 771 | .CDC_NotificationEndpoint = { | ||
| 772 | .Header = { | ||
| 773 | .Size = sizeof(USB_Descriptor_Endpoint_t), | ||
| 774 | .Type = DTYPE_Endpoint | ||
| 775 | }, | ||
| 776 | .EndpointAddress = CDC_NOTIFICATION_EPADDR, | ||
| 777 | .Attributes = (EP_TYPE_INTERRUPT | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), | ||
| 778 | .EndpointSize = CDC_NOTIFICATION_EPSIZE, | ||
| 779 | .PollingIntervalMS = 0xFF | ||
| 780 | }, | ||
| 781 | .CDC_DCI_Interface = { | ||
| 782 | .Header = { | ||
| 783 | .Size = sizeof(USB_Descriptor_Interface_t), | ||
| 784 | .Type = DTYPE_Interface | ||
| 785 | }, | ||
| 786 | .InterfaceNumber = CDI_INTERFACE, | ||
| 787 | .AlternateSetting = 0, | ||
| 788 | .TotalEndpoints = 2, | ||
| 789 | .Class = CDC_CSCP_CDCDataClass, | ||
| 790 | .SubClass = CDC_CSCP_NoDataSubclass, | ||
| 791 | .Protocol = CDC_CSCP_NoDataProtocol, | ||
| 792 | .InterfaceStrIndex = NO_DESCRIPTOR | ||
| 793 | }, | ||
| 794 | .CDC_DataOutEndpoint = { | ||
| 795 | .Header = { | ||
| 796 | .Size = sizeof(USB_Descriptor_Endpoint_t), | ||
| 797 | .Type = DTYPE_Endpoint | ||
| 798 | }, | ||
| 799 | .EndpointAddress = CDC_OUT_EPADDR, | ||
| 800 | .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), | ||
| 801 | .EndpointSize = CDC_EPSIZE, | ||
| 802 | .PollingIntervalMS = 0x05 | ||
| 803 | }, | ||
| 804 | .CDC_DataInEndpoint = { | ||
| 805 | .Header = { | ||
| 806 | .Size = sizeof(USB_Descriptor_Endpoint_t), | ||
| 807 | .Type = DTYPE_Endpoint | ||
| 808 | }, | ||
| 809 | .EndpointAddress = CDC_IN_EPADDR, | ||
| 810 | .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), | ||
| 811 | .EndpointSize = CDC_EPSIZE, | ||
| 812 | .PollingIntervalMS = 0x05 | ||
| 813 | }, | ||
| 480 | #endif | 814 | #endif |
| 481 | }; | 815 | }; |
| 482 | 816 | ||
| 483 | /* | 817 | /* |
| 484 | * String descriptors | 818 | * String descriptors |
| 485 | */ | 819 | */ |
| 486 | const USB_Descriptor_String_t PROGMEM LanguageString = {.Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String}, .UnicodeString = {LANGUAGE_ID_ENG}}; | 820 | const USB_Descriptor_String_t PROGMEM LanguageString = { |
| 821 | .Header = { | ||
| 822 | .Size = USB_STRING_LEN(1), | ||
| 823 | .Type = DTYPE_String | ||
| 824 | }, | ||
| 825 | .UnicodeString = {LANGUAGE_ID_ENG} | ||
| 826 | }; | ||
| 487 | 827 | ||
| 488 | const USB_Descriptor_String_t PROGMEM ManufacturerString = {.Header = {.Size = USB_STRING_LEN(sizeof(STR(MANUFACTURER)) - 1), // Subtract 1 for null terminator | 828 | const USB_Descriptor_String_t PROGMEM ManufacturerString = { |
| 489 | .Type = DTYPE_String}, | 829 | .Header = { |
| 490 | .UnicodeString = LSTR(MANUFACTURER)}; | 830 | .Size = USB_STRING_LEN(sizeof(STR(MANUFACTURER)) - 1), // Subtract 1 for null terminator |
| 831 | .Type = DTYPE_String | ||
| 832 | }, | ||
| 833 | .UnicodeString = LSTR(MANUFACTURER) | ||
| 834 | }; | ||
| 491 | 835 | ||
| 492 | const USB_Descriptor_String_t PROGMEM ProductString = {.Header = {.Size = USB_STRING_LEN(sizeof(STR(PRODUCT)) - 1), // Subtract 1 for null terminator | 836 | const USB_Descriptor_String_t PROGMEM ProductString = { |
| 493 | .Type = DTYPE_String}, | 837 | .Header = { |
| 494 | .UnicodeString = LSTR(PRODUCT)}; | 838 | .Size = USB_STRING_LEN(sizeof(STR(PRODUCT)) - 1), // Subtract 1 for null terminator |
| 839 | .Type = DTYPE_String | ||
| 840 | }, | ||
| 841 | .UnicodeString = LSTR(PRODUCT) | ||
| 842 | }; | ||
| 495 | 843 | ||
| 496 | #ifndef SERIAL_NUMBER | 844 | #ifndef SERIAL_NUMBER |
| 497 | # define SERIAL_NUMBER 0 | 845 | # define SERIAL_NUMBER 0 |
| 498 | #endif | 846 | #endif |
| 499 | 847 | ||
| 500 | const USB_Descriptor_String_t PROGMEM SerialNumberString = {.Header = {.Size = USB_STRING_LEN(sizeof(STR(SERIAL_NUMBER)) - 1), // Subtract 1 for null terminator | 848 | const USB_Descriptor_String_t PROGMEM SerialNumberString = { |
| 501 | .Type = DTYPE_String}, | 849 | .Header = { |
| 502 | .UnicodeString = LSTR(SERIAL_NUMBER)}; | 850 | .Size = USB_STRING_LEN(sizeof(STR(SERIAL_NUMBER)) - 1), // Subtract 1 for null terminator |
| 851 | .Type = DTYPE_String | ||
| 852 | }, | ||
| 853 | .UnicodeString = LSTR(SERIAL_NUMBER) | ||
| 854 | }; | ||
| 855 | |||
| 856 | // clang-format on | ||
| 503 | 857 | ||
| 504 | /** | 858 | /** |
| 505 | * This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors" | 859 | * This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors" |
