Просмотр исходного кода

add index to tud_descriptor_configuration_cb()

hathach 6 лет назад
Родитель
Сommit
f3a5ea65a9

+ 2 - 2
examples/device/cdc_msc_hid/src/usb_descriptors.c

@@ -155,11 +155,11 @@ uint8_t const * tud_descriptor_device_cb(void)
 // Invoked when received GET CONFIGURATION DESCRIPTOR
 // Application return pointer to descriptor
 // Descriptor contents must exist long enough for transfer to complete
-uint8_t const * tud_descriptor_configuration_cb(void)
+uint8_t const * tud_descriptor_configuration_cb(uint8_t index)
 {
+  (void) index; // for multiple configurations
   return desc_configuration;
 }
-
 //------------- String Descriptors -------------//
 
 // array of pointer to string descriptors

+ 2 - 1
examples/device/cdc_msc_hid_freertos/src/usb_descriptors.c

@@ -155,8 +155,9 @@ uint8_t const * tud_descriptor_device_cb(void)
 // Invoked when received GET CONFIGURATION DESCRIPTOR
 // Application return pointer to descriptor
 // Descriptor contents must exist long enough for transfer to complete
-uint8_t const * tud_descriptor_configuration_cb(void)
+uint8_t const * tud_descriptor_configuration_cb(uint8_t index)
 {
+  (void) index; // for multiple configurations
   return desc_configuration;
 }
 

+ 2 - 1
examples/device/hid_generic_inout/src/usb_descriptors.c

@@ -99,8 +99,9 @@ uint8_t const * tud_descriptor_device_cb(void)
 // Invoked when received GET CONFIGURATION DESCRIPTOR
 // Application return pointer to descriptor
 // Descriptor contents must exist long enough for transfer to complete
-uint8_t const * tud_descriptor_configuration_cb(void)
+uint8_t const * tud_descriptor_configuration_cb(uint8_t index)
 {
+  (void) index; // for multiple configurations
   return desc_configuration;
 }
 

+ 2 - 1
examples/device/msc_dual_lun/src/usb_descriptors.c

@@ -92,8 +92,9 @@ uint8_t const * tud_descriptor_device_cb(void)
 // Invoked when received GET CONFIGURATION DESCRIPTOR
 // Application return pointer to descriptor
 // Descriptor contents must exist long enough for transfer to complete
-uint8_t const * tud_descriptor_configuration_cb(void)
+uint8_t const * tud_descriptor_configuration_cb(uint8_t index)
 {
+  (void) index; // for multiple configurations
   return desc_configuration;
 }
 

+ 5 - 5
src/device/usbd.c

@@ -159,7 +159,7 @@ static osal_queue_t _usbd_q;
 //--------------------------------------------------------------------+
 static void mark_interface_endpoint(uint8_t ep2drv[8][2], uint8_t const* p_desc, uint16_t desc_len, uint8_t driver_id);
 static bool process_control_request(uint8_t rhport, tusb_control_request_t const * p_request);
-static bool process_set_config(uint8_t rhport);
+static bool process_set_config(uint8_t rhport, uint8_t cfg_num);
 static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const * p_request);
 
 void usbd_control_reset (uint8_t rhport);
@@ -376,7 +376,7 @@ static bool process_control_request(uint8_t rhport, tusb_control_request_t const
           dcd_set_config(rhport, cfg_num);
           _usbd_dev.configured = cfg_num ? 1 : 0;
 
-          TU_ASSERT( process_set_config(rhport) );
+          if ( cfg_num ) TU_ASSERT( process_set_config(rhport, cfg_num) );
           usbd_control_status(rhport, p_request);
         }
         break;
@@ -477,9 +477,9 @@ static bool process_control_request(uint8_t rhport, tusb_control_request_t const
 
 // Process Set Configure Request
 // This function parse configuration descriptor & open drivers accordingly
-static bool process_set_config(uint8_t rhport)
+static bool process_set_config(uint8_t rhport, uint8_t cfg_num)
 {
-  tusb_desc_configuration_t const * desc_cfg = (tusb_desc_configuration_t const *) tud_descriptor_configuration_cb();
+  tusb_desc_configuration_t const * desc_cfg = (tusb_desc_configuration_t const *) tud_descriptor_configuration_cb(cfg_num-1); // index is cfg_num-1
   TU_ASSERT(desc_cfg != NULL && desc_cfg->bDescriptorType == TUSB_DESC_CONFIGURATION);
 
   // Parse configuration descriptor
@@ -563,7 +563,7 @@ static bool process_get_descriptor(uint8_t rhport, tusb_control_request_t const
 
     case TUSB_DESC_CONFIGURATION:
     {
-      tusb_desc_configuration_t const* desc_config = (tusb_desc_configuration_t const*) tud_descriptor_configuration_cb();
+      tusb_desc_configuration_t const* desc_config = (tusb_desc_configuration_t const*) tud_descriptor_configuration_cb(desc_index);
       return usbd_control_xfer(rhport, p_request, (void*) desc_config, desc_config->wTotalLength);
     }
     break;

+ 1 - 1
src/device/usbd.h

@@ -69,7 +69,7 @@ uint8_t const * tud_descriptor_device_cb(void);
 
 // Invoked when received GET CONFIGURATION DESCRIPTOR request
 // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete
-uint8_t const * tud_descriptor_configuration_cb(void);
+uint8_t const * tud_descriptor_configuration_cb(uint8_t index);
 
 // Invoked when received GET STRING DESCRIPTOR request
 // Application return pointer to descriptor, whose contents must exist long enough for transfer to complete