From 1174949308bb7595e99fd5789ebf3466cf2ab123 Mon Sep 17 00:00:00 2001 From: hathach Date: Sun, 12 May 2019 15:38:15 +0700 Subject: change tud_descriptor_string_cb() to be consistent with other descriptor callback --- examples/device/cdc_msc_hid/src/usb_descriptors.c | 32 ++++++++++++++--------- 1 file changed, 19 insertions(+), 13 deletions(-) (limited to 'examples/device/cdc_msc_hid/src') diff --git a/examples/device/cdc_msc_hid/src/usb_descriptors.c b/examples/device/cdc_msc_hid/src/usb_descriptors.c index bb830ca27..73c8e7ce1 100644 --- a/examples/device/cdc_msc_hid/src/usb_descriptors.c +++ b/examples/device/cdc_msc_hid/src/usb_descriptors.c @@ -174,30 +174,36 @@ char const* string_desc_arr [] = "TinyUSB HID" // 6: HID }; -// Invoked when received GET_STRING_DESC request -// max_char is CFG_TUD_ENDOINT0_SIZE/2 -1, typically max_char = 31 if Endpoint0 size is 64 -// Return number of characters. Note usb string is in 16-bits unicode format -uint8_t tud_descriptor_string_cb(uint8_t index, uint16_t* desc, uint8_t max_char) +static uint16_t _desc_str[32]; + +// Invoked when received GET STRING DESCRIPTOR request +// Application return pointer to descriptor, whose contents must exist long enough for transfer to complete +uint16_t const* tud_descriptor_string_cb(uint8_t index) { + uint8_t chr_count; + if ( index == 0) { - memcpy(desc, string_desc_arr[0], 2); - return 1; + memcpy(&_desc_str[1], string_desc_arr[0], 2); + chr_count = 1; }else { - if ( !(index < sizeof(string_desc_arr)/sizeof(string_desc_arr[0])) ) return 0; + if ( !(index < sizeof(string_desc_arr)/sizeof(string_desc_arr[0])) ) return NULL; const char* str = string_desc_arr[index]; // Cap at max char - uint8_t count = strlen(str); - if ( count > max_char ) count = max_char; + chr_count = strlen(str); + if ( chr_count > 31 ) chr_count = 31; - for(uint8_t i=0; i