From 3a891f9bfe0c864af6d7dee4714d939caf4a1d7e Mon Sep 17 00:00:00 2001 From: Russ Butler Date: Wed, 24 Apr 2019 11:12:40 -0500 Subject: [PATCH] Fix USB control transfers using small size Fix support for wMaxPacketSize values other than 64 for endpoint 0. --- usb/device/USBDevice/USBDevice.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/usb/device/USBDevice/USBDevice.cpp b/usb/device/USBDevice/USBDevice.cpp index 657ff7cc71..0ff2531f96 100644 --- a/usb/device/USBDevice/USBDevice.cpp +++ b/usb/device/USBDevice/USBDevice.cpp @@ -48,6 +48,7 @@ #define ENDPOINT_ENABLED (1 << 0) #define ENDPOINT_STALLED (1 << 1) +/* The maximum wMaxPacketSize for endpoint 0 */ #if defined(MAX_PACKET_SIZE_EP0) #undef MAX_PACKET_SIZE_EP0 #endif @@ -663,7 +664,7 @@ void USBDevice::_control_setup() /* Control transfer setup stage */ uint8_t buffer[MAX_PACKET_SIZE_EP0]; - _phy->ep0_setup_read_result(buffer, MAX_PACKET_SIZE_EP0); + _phy->ep0_setup_read_result(buffer, _max_packet_size_ep0); /* Initialise control transfer state */ _decode_setup_packet(buffer, &_transfer.setup); @@ -805,7 +806,7 @@ void USBDevice::_control_setup_continue() /* the end of this transfer */ if (_transfer.setup.wLength > _transfer.remaining) { /* Device wishes to transfer less than host requested */ - if ((_transfer.remaining % MAX_PACKET_SIZE_EP0) == 0) { + if ((_transfer.remaining % _max_packet_size_ep0) == 0) { /* Transfer is a multiple of EP0 max packet size */ _transfer.zlp = true; }