@@ -96,7 +96,7 @@ typedef struct {
96
96
//------------- device -------------//
97
97
volatile uint8_t state ; // device state, value from enum tusbh_device_state_t
98
98
99
- uint8_t itf2drv [16 ]; // map interface number to driver (0xff is invalid)
99
+ uint8_t itf2drv [8 ]; // map interface number to driver (0xff is invalid)
100
100
uint8_t ep2drv [CFG_TUH_ENDPOINT_MAX ][2 ]; // map endpoint to driver ( 0xff is invalid )
101
101
102
102
struct TU_ATTR_PACKED
@@ -253,6 +253,34 @@ bool tuh_vid_pid_get(uint8_t dev_addr, uint16_t* vid, uint16_t* pid)
253
253
return true;
254
254
}
255
255
256
+
257
+ bool tuh_descriptor_get (uint8_t daddr , uint8_t type , uint8_t index ,
258
+ void * buffer , uint16_t len , tuh_control_complete_cb_t complete_cb )
259
+ {
260
+ tusb_control_request_t const request =
261
+ {
262
+ .bmRequestType_bit =
263
+ {
264
+ .recipient = TUSB_REQ_RCPT_DEVICE ,
265
+ .type = TUSB_REQ_TYPE_STANDARD ,
266
+ .direction = TUSB_DIR_IN
267
+ },
268
+ .bRequest = TUSB_REQ_GET_DESCRIPTOR ,
269
+ .wValue = tu_htole16 ( TU_U16 (type , index ) ),
270
+ .wIndex = 0 ,
271
+ .wLength = len
272
+ };
273
+
274
+ TU_ASSERT ( tuh_control_xfer (daddr , & request , buffer , complete_cb ) );
275
+
276
+ return true;
277
+ }
278
+
279
+ bool tuh_descriptor_device_get (uint8_t daddr , void * buffer , uint16_t len , tuh_control_complete_cb_t complete_cb )
280
+ {
281
+ return tuh_descriptor_get (daddr , TUSB_DESC_DEVICE , 0 , buffer , len , complete_cb );
282
+ }
283
+
256
284
uint8_t tuh_i_manufacturer_get (uint8_t dev_addr ) {
257
285
TU_VERIFY (tuh_mounted (dev_addr ));
258
286
usbh_device_t const * dev = get_device (dev_addr );
@@ -338,7 +366,6 @@ bool tuh_init(uint8_t rhport)
338
366
if (_usbh_initialized ) return _usbh_initialized ;
339
367
340
368
TU_LOG2 ("USBH init\r\n" );
341
-
342
369
TU_LOG2_INT (sizeof (usbh_device_t ));
343
370
344
371
tu_memclr (_usbh_devices , sizeof (_usbh_devices ));
@@ -785,23 +812,10 @@ static bool enum_request_addr0_device_desc(void)
785
812
uint8_t const addr0 = 0 ;
786
813
TU_ASSERT ( usbh_edpt_control_open (addr0 , 8 ) );
787
814
788
- //------------- Get first 8 bytes of device descriptor to get Control Endpoint Size -------------//
815
+ // Get first 8 bytes of device descriptor for Control Endpoint size
789
816
TU_LOG2 ("Get 8 byte of Device Descriptor\r\n" );
790
- tusb_control_request_t const request =
791
- {
792
- .bmRequestType_bit =
793
- {
794
- .recipient = TUSB_REQ_RCPT_DEVICE ,
795
- .type = TUSB_REQ_TYPE_STANDARD ,
796
- .direction = TUSB_DIR_IN
797
- },
798
- .bRequest = TUSB_REQ_GET_DESCRIPTOR ,
799
- .wValue = TUSB_DESC_DEVICE << 8 ,
800
- .wIndex = 0 ,
801
- .wLength = 8
802
- };
803
- TU_ASSERT ( tuh_control_xfer (addr0 , & request , _usbh_ctrl_buf , enum_get_addr0_device_desc_complete ) );
804
817
818
+ TU_ASSERT (tuh_descriptor_device_get (addr0 , _usbh_ctrl_buf , 8 , enum_get_addr0_device_desc_complete ));
805
819
return true;
806
820
}
807
821
@@ -909,22 +923,8 @@ static bool enum_set_address_complete(uint8_t dev_addr, tusb_control_request_t c
909
923
910
924
// Get full device descriptor
911
925
TU_LOG2 ("Get Device Descriptor\r\n" );
912
- tusb_control_request_t const new_request =
913
- {
914
- .bmRequestType_bit =
915
- {
916
- .recipient = TUSB_REQ_RCPT_DEVICE ,
917
- .type = TUSB_REQ_TYPE_STANDARD ,
918
- .direction = TUSB_DIR_IN
919
- },
920
- .bRequest = TUSB_REQ_GET_DESCRIPTOR ,
921
- .wValue = TUSB_DESC_DEVICE << 8 ,
922
- .wIndex = 0 ,
923
- .wLength = sizeof (tusb_desc_device_t )
924
- };
925
-
926
- TU_ASSERT (tuh_control_xfer (new_addr , & new_request , _usbh_ctrl_buf , enum_get_device_desc_complete ));
927
926
927
+ TU_ASSERT (tuh_descriptor_device_get (new_addr , _usbh_ctrl_buf , sizeof (tusb_desc_device_t ), enum_get_device_desc_complete ));
928
928
return true;
929
929
}
930
930
0 commit comments