@@ -159,7 +159,7 @@ static osal_queue_t _usbd_q;
159159//--------------------------------------------------------------------+
160160static void mark_interface_endpoint (uint8_t ep2drv [8 ][2 ], uint8_t const * p_desc , uint16_t desc_len , uint8_t driver_id );
161161static 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 );
163163static bool process_get_descriptor (uint8_t rhport , tusb_control_request_t const * p_request );
164164
165165void usbd_control_reset (uint8_t rhport );
@@ -376,7 +376,7 @@ static bool process_control_request(uint8_t rhport, tusb_control_request_t const
376376 dcd_set_config (rhport , cfg_num );
377377 _usbd_dev .configured = cfg_num ? 1 : 0 ;
378378
379- TU_ASSERT ( process_set_config (rhport ) );
379+ if ( cfg_num ) TU_ASSERT ( process_set_config (rhport , cfg_num ) );
380380 usbd_control_status (rhport , p_request );
381381 }
382382 break ;
@@ -477,9 +477,9 @@ static bool process_control_request(uint8_t rhport, tusb_control_request_t const
477477
478478// Process Set Configure Request
479479// 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 )
481481{
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
483483 TU_ASSERT (desc_cfg != NULL && desc_cfg -> bDescriptorType == TUSB_DESC_CONFIGURATION );
484484
485485 // Parse configuration descriptor
@@ -563,7 +563,7 @@ static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const
563563
564564 case TUSB_DESC_CONFIGURATION :
565565 {
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 );
567567 return usbd_control_xfer (rhport , p_request , (void * ) desc_config , desc_config -> wTotalLength );
568568 }
569569 break ;
0 commit comments