summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorhathach <[email protected]>2019-12-27 09:42:57 +0700
committerhathach <[email protected]>2019-12-27 09:42:57 +0700
commit89f3ad59da093823cd48e6ca1ae2e09bb3e9309a (patch)
tree619a4ca2cd67b98842a4773d1bbba094366c49c6 /src
parent76b2c2a0017b49f8f1ef95734aa24a5b8e7d3f59 (diff)
fix #247
Diffstat (limited to 'src')
-rw-r--r--src/portable/microchip/samd/dcd_samd.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/portable/microchip/samd/dcd_samd.c b/src/portable/microchip/samd/dcd_samd.c
index 5f904b313..148995520 100644
--- a/src/portable/microchip/samd/dcd_samd.c
+++ b/src/portable/microchip/samd/dcd_samd.c
@@ -42,8 +42,9 @@ static TU_ATTR_ALIGNED(4) uint8_t _setup_packet[8];
static inline void prepare_setup(void)
{
// Only make sure the EP0 OUT buffer is ready
- // SETUP token doesn't check any other parameters
sram_registers[0][0].ADDR.reg = (uint32_t) _setup_packet;
+ sram_registers[0][0].PCKSIZE.bit.MULTI_PACKET_SIZE = sizeof(_setup_packet);
+ sram_registers[0][0].PCKSIZE.bit.BYTE_COUNT = 0;
}
// Setup the control endpoint 0.
@@ -292,8 +293,7 @@ void maybe_transfer_complete(void) {
UsbDeviceDescBank* bank = &sram_registers[epnum][TUSB_DIR_IN];
uint16_t total_transfer_size = bank->PCKSIZE.bit.BYTE_COUNT;
- uint8_t ep_addr = epnum | TUSB_DIR_IN_MASK;
- dcd_event_xfer_complete(0, ep_addr, total_transfer_size, XFER_RESULT_SUCCESS, true);
+ dcd_event_xfer_complete(0, epnum | TUSB_DIR_IN_MASK, total_transfer_size, XFER_RESULT_SUCCESS, true);
ep->EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT1;
}
@@ -301,17 +301,16 @@ void maybe_transfer_complete(void) {
// Handle OUT completions
if ((epintflag & USB_DEVICE_EPINTFLAG_TRCPT0) != 0) {
+ UsbDeviceDescBank* bank = &sram_registers[epnum][TUSB_DIR_OUT];
+ uint16_t total_transfer_size = bank->PCKSIZE.bit.BYTE_COUNT;
+
// A SETUP token can occur immediately after an OUT packet
// so make sure we have a valid buffer for the control endpoint.
if (epnum == 0) {
prepare_setup();
}
- UsbDeviceDescBank* bank = &sram_registers[epnum][TUSB_DIR_OUT];
- uint16_t total_transfer_size = bank->PCKSIZE.bit.BYTE_COUNT;
-
- uint8_t ep_addr = epnum;
- dcd_event_xfer_complete(0, ep_addr, total_transfer_size, XFER_RESULT_SUCCESS, true);
+ dcd_event_xfer_complete(0, epnum, total_transfer_size, XFER_RESULT_SUCCESS, true);
ep->EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT0;
}