@@ -159,7 +159,7 @@ static osal_queue_t _usbd_q;
159
159
//--------------------------------------------------------------------+
160
160
static void mark_interface_endpoint (uint8_t ep2drv [8 ][2 ], uint8_t const * p_desc , uint16_t desc_len , uint8_t driver_id );
161
161
static bool process_control_request (uint8_t rhport , tusb_control_request_t const * p_request );
162
- static bool process_set_config (uint8_t rhport );
162
+ static bool process_set_config (uint8_t rhport , uint8_t cfg_num );
163
163
static bool process_get_descriptor (uint8_t rhport , tusb_control_request_t const * p_request );
164
164
165
165
void usbd_control_reset (uint8_t rhport );
@@ -376,7 +376,7 @@ static bool process_control_request(uint8_t rhport, tusb_control_request_t const
376
376
dcd_set_config (rhport , cfg_num );
377
377
_usbd_dev .configured = cfg_num ? 1 : 0 ;
378
378
379
- TU_ASSERT ( process_set_config (rhport ) );
379
+ if ( cfg_num ) TU_ASSERT ( process_set_config (rhport , cfg_num ) );
380
380
usbd_control_status (rhport , p_request );
381
381
}
382
382
break ;
@@ -477,9 +477,9 @@ static bool process_control_request(uint8_t rhport, tusb_control_request_t const
477
477
478
478
// Process Set Configure Request
479
479
// This function parse configuration descriptor & open drivers accordingly
480
- static bool process_set_config (uint8_t rhport )
480
+ static bool process_set_config (uint8_t rhport , uint8_t cfg_num )
481
481
{
482
- tusb_desc_configuration_t const * desc_cfg = (tusb_desc_configuration_t const * ) tud_descriptor_configuration_cb ();
482
+ tusb_desc_configuration_t const * desc_cfg = (tusb_desc_configuration_t const * ) tud_descriptor_configuration_cb (cfg_num - 1 ); // index is cfg_num-1
483
483
TU_ASSERT (desc_cfg != NULL && desc_cfg -> bDescriptorType == TUSB_DESC_CONFIGURATION );
484
484
485
485
// Parse configuration descriptor
@@ -563,7 +563,7 @@ static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const
563
563
564
564
case TUSB_DESC_CONFIGURATION :
565
565
{
566
- tusb_desc_configuration_t const * desc_config = (tusb_desc_configuration_t const * ) tud_descriptor_configuration_cb ();
566
+ tusb_desc_configuration_t const * desc_config = (tusb_desc_configuration_t const * ) tud_descriptor_configuration_cb (desc_index );
567
567
return usbd_control_xfer (rhport , p_request , (void * ) desc_config , desc_config -> wTotalLength );
568
568
}
569
569
break ;
0 commit comments