diff options
| author | hathach <[email protected]> | 2018-07-23 16:12:14 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2018-07-23 16:12:14 +0700 |
| commit | 262be103e0478fc70fcc4e392c5ad1ad60bc074b (patch) | |
| tree | 765fd70f974feaf30e7f357a7316130c5aaea0c6 | |
| parent | 2bff2a7d9751313bee07605f3db7982fa025a317 (diff) | |
add descriptor string count for tud_desc_set_t
| -rw-r--r-- | examples/device/nrf52840/src/tusb_descriptors.c | 4 | ||||
| -rw-r--r-- | src/device/usbd.c | 18 | ||||
| -rw-r--r-- | src/device/usbd.h | 8 |
3 files changed, 19 insertions, 11 deletions
diff --git a/examples/device/nrf52840/src/tusb_descriptors.c b/examples/device/nrf52840/src/tusb_descriptors.c index b9d4332ee..7dc3642aa 100644 --- a/examples/device/nrf52840/src/tusb_descriptors.c +++ b/examples/device/nrf52840/src/tusb_descriptors.c @@ -85,7 +85,9 @@ tud_desc_set_t tud_desc_set = { .device = NULL, .config = NULL, - .string_arr = (uint8_t const **) string_desc_arr, + + .string_arr = (uint8_t const **) string_desc_arr, + .string_count = sizeof(string_desc_arr)/sizeof(string_desc_arr[0]), .hid_report = { diff --git a/src/device/usbd.c b/src/device/usbd.c index 0319ec8fd..7ae2f44c5 100644 --- a/src/device/usbd.c +++ b/src/device/usbd.c @@ -315,7 +315,7 @@ static void usbd_reset(uint8_t rhport) extern tusb_desc_device_t const _desc_auto_device;
extern uint8_t const * const _desc_auto_config;
- tud_desc_set.device = &_desc_auto_device;
+ tud_desc_set.device = (uint8_t const*) &_desc_auto_device;
tud_desc_set.config = _desc_auto_config;
#if CFG_TUD_HID_BOOT_PROTOCOL
@@ -509,13 +509,17 @@ static uint16_t get_descriptor(uint8_t rhport, tusb_control_request_t const * co break;
case TUSB_DESC_STRING:
- // windows sometimes ask for string at index 238 !!!
- if ( !(desc_index < 100) ) return 0;
-
- desc_data = tud_desc_set.string_arr[desc_index];
- VERIFY( desc_data != NULL, 0 );
+ if ( desc_index < tud_desc_set.string_count )
+ {
+ desc_data = tud_desc_set.string_arr[desc_index];
+ VERIFY( desc_data != NULL, 0 );
- len = desc_data[0]; // first byte of descriptor is its size
+ len = desc_data[0]; // first byte of descriptor is its size
+ }else
+ {
+ // out of range
+ return 0;
+ }
break;
case TUSB_DESC_DEVICE_QUALIFIER:
diff --git a/src/device/usbd.h b/src/device/usbd.h index c2b05f8ff..8413aa15e 100644 --- a/src/device/usbd.h +++ b/src/device/usbd.h @@ -59,9 +59,11 @@ /// \brief Descriptor pointer collector to all the needed.
typedef struct {
- void const * device; ///< pointer to device descriptor \ref tusb_desc_device_t
- uint8_t const * config; ///< pointer to the whole configuration descriptor, starting by \ref tusb_desc_configuration_t
- uint8_t const** string_arr; ///< a array of pointers to string descriptors
+ uint8_t const * device; ///< pointer to device descriptor \ref tusb_desc_device_t
+ uint8_t const * config; ///< pointer to the whole configuration descriptor, starting by \ref tusb_desc_configuration_t
+
+ uint8_t const** string_arr; ///< a array of pointers to string descriptors
+ uint16_t string_count;
struct {
uint8_t const* composite;
|
