diff --git a/cores/arduino/USB/USBCore.cpp b/cores/arduino/USB/USBCore.cpp index cd356d5781be11f7b93934e0e9e38956316393ba..4277bc4e394ab77580a2d93dd92998826a8b83ab 100644 --- a/cores/arduino/USB/USBCore.cpp +++ b/cores/arduino/USB/USBCore.cpp @@ -90,18 +90,18 @@ bool USBDeviceClass::sendStringDescriptor(const uint8_t *string, uint8_t maxlen) if (maxlen < 2) return false; - uint16_t buff[maxlen/2]; - int l = 1; + uint8_t buffer[maxlen]; + buffer[0] = 0x03; + buffer[1] = strlen(string) * 2 + 2; - maxlen -= 2; - while (*string && maxlen>0) - { - buff[l++] = (uint8_t)(*string++); - maxlen -= 2; + uint8_t i; + for (i = 2; i < maxlen && *string; i++) { + buffer[i++] = *string++; + if (i == maxlen) break; + buffer[i] = 0; } - buff[0] = (3<<8) | (l*2); - return USBDevice.sendControl((uint8_t*)buff, l*2); + return USBDevice.sendControl(buffer, i); } bool _dry_run = false;