From ea894b1efe831bbf45c0b8bcf711a27cb8948acc Mon Sep 17 00:00:00 2001
From: Cristian Maglie <c.maglie@arduino.cc>
Date: Mon, 4 Jan 2016 18:54:22 +0100
Subject: [PATCH] Fixed USB sendStringDescriptor

---
 cores/arduino/USB/USBCore.cpp | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/cores/arduino/USB/USBCore.cpp b/cores/arduino/USB/USBCore.cpp
index cd356d57..4277bc4e 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;
-- 
GitLab