aboutsummaryrefslogtreecommitdiff
path: root/tmk_core
diff options
context:
space:
mode:
authorfauxpark <fauxpark@gmail.com>2019-11-05 18:04:58 +1100
committerDrashna Jaelre <drashna@live.com>2019-11-04 23:04:58 -0800
commit1244d0e266dad4170ed0c63e68e00c74c87367b2 (patch)
tree4d2fa17cb7b7b0d65bb9acf0a51c1d0f711e85d3 /tmk_core
parent542cb0a8ce3f324c6bd46751d733daf86384a8f6 (diff)
downloadqmk_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.c1048
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
50const USB_Descriptor_HIDReport_Datatype_t PROGMEM KeyboardReport[] = { 52const 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[] = {
101const USB_Descriptor_HIDReport_Datatype_t PROGMEM SharedReport[] = { 103const 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
232const USB_Descriptor_HIDReport_Datatype_t PROGMEM RawReport[] = { 234const 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
255const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] = { 258const 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 */
280const USB_Descriptor_Device_t PROGMEM DeviceDescriptor = {.Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, 284const 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 */
312const USB_Descriptor_Configuration_t PROGMEM 323const 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 */
486const USB_Descriptor_String_t PROGMEM LanguageString = {.Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String}, .UnicodeString = {LANGUAGE_ID_ENG}}; 820const 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
488const USB_Descriptor_String_t PROGMEM ManufacturerString = {.Header = {.Size = USB_STRING_LEN(sizeof(STR(MANUFACTURER)) - 1), // Subtract 1 for null terminator 828const 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
492const USB_Descriptor_String_t PROGMEM ProductString = {.Header = {.Size = USB_STRING_LEN(sizeof(STR(PRODUCT)) - 1), // Subtract 1 for null terminator 836const 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
500const USB_Descriptor_String_t PROGMEM SerialNumberString = {.Header = {.Size = USB_STRING_LEN(sizeof(STR(SERIAL_NUMBER)) - 1), // Subtract 1 for null terminator 848const 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"