diff --git a/cores/arduino/USB/USBCore.cpp b/cores/arduino/USB/USBCore.cpp index e7652016..b6333001 100644 --- a/cores/arduino/USB/USBCore.cpp +++ b/cores/arduino/USB/USBCore.cpp @@ -109,6 +109,7 @@ static const unsigned char test_packet_buffer[] = { volatile uint32_t _usbConfiguration = 0; volatile uint32_t _usbInitialized = 0; uint32_t _usbSetInterface = 0; +uint32_t _usbAlternateSetting = 0; uint32_t _cdcComposite = 0; //================================================================== @@ -229,6 +230,11 @@ int USBD_SendControl(uint8_t flags __attribute__ ((unused)), const void* d, uint if (_cmark < _cend) { + if (_cmark + len > _cend) + { + len = _cend - _cmark; + length = len; + } while (len > 0) { sent = UDD_Send(EP0, data + pos, len); @@ -795,8 +801,9 @@ static void USB_ISR(void) } else if (SET_INTERFACE == r) { - _usbSetInterface = setup.wValueL; - TRACE_CORE(puts(">>> EP0 Int: SET_INTERFACE\r\n");) + _usbSetInterface = setup.wIndex; + _usbAlternateSetting = setup.wValueL; + TRACE_CORE(printf(">>> EP0 Int: SET_INTERFACE interface=%d alternateSetting=%d\r\n",_usbSetInterface, _usbAlternateSetting);) } } else