summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/device/usbd.c18
-rw-r--r--src/device/usbd.h8
2 files changed, 16 insertions, 10 deletions
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;