31
31
#define CDC_TEMPLATE_CONFIG_DESC_SIZE (67)
32
32
#define CDC_MSC_TEMPLATE_CONFIG_DESC_SIZE (98)
33
33
#define CDC_HID_TEMPLATE_CONFIG_DESC_SIZE (100)
34
- #define CDC_HID_TEMPLATE_HID_DESC_OFFSET (CDC_HID_TEMPLATE_CONFIG_DESC_SIZE - 25 )
34
+ #define CDC_HID_TEMPLATE_HID_DESC_OFFSET (9 )
35
35
#define HID_DESC_OFFSET_SUBCLASS (6)
36
36
#define HID_DESC_OFFSET_PROTOCOL (7)
37
37
#define HID_DESC_OFFSET_SUBDESC (9)
@@ -128,6 +128,39 @@ static const uint8_t cdc_msc_template_config_desc[CDC_MSC_TEMPLATE_CONFIG_DESC_S
128
128
0x80 , // bmAttributes: bus powered; 0xc0 for self powered
129
129
0xfa , // bMaxPower: in units of 2mA
130
130
131
+ //==========================================================================
132
+ // MSC only has 1 interface so doesn't need an IAD
133
+
134
+ //--------------------------------------------------------------------------
135
+ // Interface Descriptor
136
+ 0x09 , // bLength: Interface Descriptor size
137
+ USB_DESC_TYPE_INTERFACE , // bDescriptorType: interface descriptor
138
+ MSC_IFACE_NUM_WITH_CDC , // bInterfaceNumber: Number of Interface
139
+ 0x00 , // bAlternateSetting: Alternate setting
140
+ 0x02 , // bNumEndpoints
141
+ 0x08 , // bInterfaceClass: MSC Class
142
+ 0x06 , // bInterfaceSubClass : SCSI transparent
143
+ 0x50 , // nInterfaceProtocol
144
+ 0x00 , // iInterface:
145
+
146
+ // Endpoint IN descriptor
147
+ 0x07 , // bLength: Endpoint descriptor length
148
+ USB_DESC_TYPE_ENDPOINT , // bDescriptorType: Endpoint descriptor type
149
+ MSC_IN_EP , // bEndpointAddress: IN, address 3
150
+ 0x02 , // bmAttributes: Bulk endpoint type
151
+ LOBYTE (MSC_MAX_PACKET ), // wMaxPacketSize
152
+ HIBYTE (MSC_MAX_PACKET ),
153
+ 0x00 , // bInterval: ignore for Bulk transfer
154
+
155
+ // Endpoint OUT descriptor
156
+ 0x07 , // bLength: Endpoint descriptor length
157
+ USB_DESC_TYPE_ENDPOINT , // bDescriptorType: Endpoint descriptor type
158
+ MSC_OUT_EP , // bEndpointAddress: OUT, address 3
159
+ 0x02 , // bmAttributes: Bulk endpoint type
160
+ LOBYTE (MSC_MAX_PACKET ), // wMaxPacketSize
161
+ HIBYTE (MSC_MAX_PACKET ),
162
+ 0x00 , // bInterval: ignore for Bulk transfer
163
+
131
164
//==========================================================================
132
165
// Interface Association for CDC VCP
133
166
0x08 , // bLength: 8 bytes
@@ -216,39 +249,6 @@ static const uint8_t cdc_msc_template_config_desc[CDC_MSC_TEMPLATE_CONFIG_DESC_S
216
249
LOBYTE (CDC_DATA_FS_MAX_PACKET_SIZE ),// wMaxPacketSize:
217
250
HIBYTE (CDC_DATA_FS_MAX_PACKET_SIZE ),
218
251
0x00 , // bInterval: ignore for Bulk transfer
219
-
220
- //==========================================================================
221
- // MSC only has 1 interface so doesn't need an IAD
222
-
223
- //--------------------------------------------------------------------------
224
- // Interface Descriptor
225
- 0x09 , // bLength: Interface Descriptor size
226
- USB_DESC_TYPE_INTERFACE , // bDescriptorType: interface descriptor
227
- MSC_IFACE_NUM_WITH_CDC , // bInterfaceNumber: Number of Interface
228
- 0x00 , // bAlternateSetting: Alternate setting
229
- 0x02 , // bNumEndpoints
230
- 0x08 , // bInterfaceClass: MSC Class
231
- 0x06 , // bInterfaceSubClass : SCSI transparent
232
- 0x50 , // nInterfaceProtocol
233
- 0x00 , // iInterface:
234
-
235
- // Endpoint IN descriptor
236
- 0x07 , // bLength: Endpoint descriptor length
237
- USB_DESC_TYPE_ENDPOINT , // bDescriptorType: Endpoint descriptor type
238
- MSC_IN_EP , // bEndpointAddress: IN, address 3
239
- 0x02 , // bmAttributes: Bulk endpoint type
240
- LOBYTE (MSC_MAX_PACKET ), // wMaxPacketSize
241
- HIBYTE (MSC_MAX_PACKET ),
242
- 0x00 , // bInterval: ignore for Bulk transfer
243
-
244
- // Endpoint OUT descriptor
245
- 0x07 , // bLength: Endpoint descriptor length
246
- USB_DESC_TYPE_ENDPOINT , // bDescriptorType: Endpoint descriptor type
247
- MSC_OUT_EP , // bEndpointAddress: OUT, address 3
248
- 0x02 , // bmAttributes: Bulk endpoint type
249
- LOBYTE (MSC_MAX_PACKET ), // wMaxPacketSize
250
- HIBYTE (MSC_MAX_PACKET ),
251
- 0x00 , // bInterval: ignore for Bulk transfer
252
252
};
253
253
254
254
// USB CDC HID device Configuration Descriptor
@@ -265,6 +265,41 @@ static const uint8_t cdc_hid_template_config_desc[CDC_HID_TEMPLATE_CONFIG_DESC_S
265
265
0x80 , // bmAttributes: bus powered; 0xc0 for self powered
266
266
0xfa , // bMaxPower: in units of 2mA
267
267
268
+ //==========================================================================
269
+ // HID only has 1 interface so doesn't need an IAD
270
+
271
+ //--------------------------------------------------------------------------
272
+ // Interface Descriptor
273
+ 0x09 , // bLength: Interface Descriptor size
274
+ USB_DESC_TYPE_INTERFACE , // bDescriptorType: interface descriptor
275
+ HID_IFACE_NUM_WITH_CDC , // bInterfaceNumber: Number of Interface
276
+ 0x00 , // bAlternateSetting: Alternate setting
277
+ 0x01 , // bNumEndpoints
278
+ 0x03 , // bInterfaceClass: HID Class
279
+ 0x01 , // bInterfaceSubClass: 0=no sub class, 1=boot
280
+ 0x02 , // nInterfaceProtocol: 0=none, 1=keyboard, 2=mouse
281
+ 0x00 , // iInterface:
282
+
283
+ // HID descriptor
284
+ 0x09 , // bLength: HID Descriptor size
285
+ HID_DESCRIPTOR_TYPE , // bDescriptorType: HID
286
+ 0x11 , // bcdHID: HID Class Spec release number
287
+ 0x01 ,
288
+ 0x00 , // bCountryCode: Hardware target country
289
+ 0x01 , // bNumDescriptors: Number of HID class descriptors to follow
290
+ 0x22 , // bDescriptorType
291
+ USBD_HID_MOUSE_REPORT_DESC_SIZE , // wItemLength: Total length of Report descriptor
292
+ 0x00 ,
293
+
294
+ // Endpoint IN descriptor
295
+ 0x07 , // bLength: Endpoint descriptor length
296
+ USB_DESC_TYPE_ENDPOINT , // bDescriptorType: Endpoint descriptor type
297
+ HID_IN_EP_WITH_CDC , // bEndpointAddress: IN
298
+ 0x03 , // bmAttributes: Interrupt endpoint type
299
+ LOBYTE (USBD_HID_MOUSE_MAX_PACKET ), // wMaxPacketSize
300
+ HIBYTE (USBD_HID_MOUSE_MAX_PACKET ),
301
+ 0x08 , // bInterval: Polling interval
302
+
268
303
//==========================================================================
269
304
// Interface Association for CDC VCP
270
305
0x08 , // bLength: 8 bytes
@@ -353,41 +388,6 @@ static const uint8_t cdc_hid_template_config_desc[CDC_HID_TEMPLATE_CONFIG_DESC_S
353
388
LOBYTE (CDC_DATA_FS_MAX_PACKET_SIZE ),// wMaxPacketSize:
354
389
HIBYTE (CDC_DATA_FS_MAX_PACKET_SIZE ),
355
390
0x00 , // bInterval: ignore for Bulk transfer
356
-
357
- //==========================================================================
358
- // HID only has 1 interface so doesn't need an IAD
359
-
360
- //--------------------------------------------------------------------------
361
- // Interface Descriptor
362
- 0x09 , // bLength: Interface Descriptor size
363
- USB_DESC_TYPE_INTERFACE , // bDescriptorType: interface descriptor
364
- HID_IFACE_NUM_WITH_CDC , // bInterfaceNumber: Number of Interface
365
- 0x00 , // bAlternateSetting: Alternate setting
366
- 0x01 , // bNumEndpoints
367
- 0x03 , // bInterfaceClass: HID Class
368
- 0x01 , // bInterfaceSubClass: 0=no sub class, 1=boot
369
- 0x02 , // nInterfaceProtocol: 0=none, 1=keyboard, 2=mouse
370
- 0x00 , // iInterface:
371
-
372
- // HID descriptor
373
- 0x09 , // bLength: HID Descriptor size
374
- HID_DESCRIPTOR_TYPE , // bDescriptorType: HID
375
- 0x11 , // bcdHID: HID Class Spec release number
376
- 0x01 ,
377
- 0x00 , // bCountryCode: Hardware target country
378
- 0x01 , // bNumDescriptors: Number of HID class descriptors to follow
379
- 0x22 , // bDescriptorType
380
- USBD_HID_MOUSE_REPORT_DESC_SIZE , // wItemLength: Total length of Report descriptor
381
- 0x00 ,
382
-
383
- // Endpoint IN descriptor
384
- 0x07 , // bLength: Endpoint descriptor length
385
- USB_DESC_TYPE_ENDPOINT , // bDescriptorType: Endpoint descriptor type
386
- HID_IN_EP_WITH_CDC , // bEndpointAddress: IN
387
- 0x03 , // bmAttributes: Interrupt endpoint type
388
- LOBYTE (USBD_HID_MOUSE_MAX_PACKET ), // wMaxPacketSize
389
- HIBYTE (USBD_HID_MOUSE_MAX_PACKET ),
390
- 0x08 , // bInterval: Polling interval
391
391
};
392
392
393
393
static const uint8_t cdc_template_config_desc [CDC_TEMPLATE_CONFIG_DESC_SIZE ] = {
0 commit comments