summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2019-05-12 19:55:15 +0700
committerhathach <[email protected]>2019-05-12 19:55:15 +0700
commitf3a5ea65a9869b8d3bc305165b943922b50108f4 (patch)
treeffd5e6092f85c60be9693c70a30e26c63f57d1ad
parent1174949308bb7595e99fd5789ebf3466cf2ab123 (diff)
add index to tud_descriptor_configuration_cb()
-rw-r--r--examples/device/cdc_msc_hid/src/usb_descriptors.c4
-rw-r--r--examples/device/cdc_msc_hid_freertos/src/usb_descriptors.c3
-rw-r--r--examples/device/hid_generic_inout/src/usb_descriptors.c3
-rw-r--r--examples/device/msc_dual_lun/src/usb_descriptors.c3
-rw-r--r--src/device/usbd.c10
-rw-r--r--src/device/usbd.h2
6 files changed, 14 insertions, 11 deletions
diff --git a/examples/device/cdc_msc_hid/src/usb_descriptors.c b/examples/device/cdc_msc_hid/src/usb_descriptors.c
index 73c8e7ce1..f887571e5 100644
--- a/examples/device/cdc_msc_hid/src/usb_descriptors.c
+++ b/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
diff --git a/examples/device/cdc_msc_hid_freertos/src/usb_descriptors.c b/examples/device/cdc_msc_hid_freertos/src/usb_descriptors.c
index 92ce8c6ec..333d07ba4 100644
--- a/examples/device/cdc_msc_hid_freertos/src/usb_descriptors.c
+++ b/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;
}
diff --git a/examples/device/hid_generic_inout/src/usb_descriptors.c b/examples/device/hid_generic_inout/src/usb_descriptors.c
index fb4dd378c..a9f84b988 100644
--- a/examples/device/hid_generic_inout/src/usb_descriptors.c
+++ b/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;
}
diff --git a/examples/device/msc_dual_lun/src/usb_descriptors.c b/examples/device/msc_dual_lun/src/usb_descriptors.c
index 1ae000fd9..8cc63da64 100644
--- a/examples/device/msc_dual_lun/src/usb_descriptors.c
+++ b/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;
}
diff --git a/src/device/usbd.c b/src/device/usbd.c
index 1eda970a2..6e3a1e1ca 100644
--- a/src/device/usbd.c
+++ b/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;
diff --git a/src/device/usbd.h b/src/device/usbd.h
index 8193c4ce0..2e34b25ac 100644
--- a/src/device/usbd.h
+++ b/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