summaryrefslogtreecommitdiff
path: root/src/portable
diff options
context:
space:
mode:
authorhathach <[email protected]>2019-11-28 13:48:55 +0700
committerhathach <[email protected]>2019-11-28 13:48:55 +0700
commite9725dcdbe8dcb56f7eeedd5671bf0f4c3fe72a2 (patch)
tree9c6c2d860f395027cb07d16a07052d172aa06ae6 /src/portable
parentd7558e8a0f12c685f2690c985e5f75df0777065b (diff)
use dcd_edpt0_status_complete() to prepare for setup packet for samd21/samd51
Diffstat (limited to 'src/portable')
-rw-r--r--src/portable/microchip/samd21/dcd_samd21.c11
-rw-r--r--src/portable/microchip/samd51/dcd_samd51.c8
2 files changed, 6 insertions, 13 deletions
diff --git a/src/portable/microchip/samd21/dcd_samd21.c b/src/portable/microchip/samd21/dcd_samd21.c
index 3ffaabf09..828b47018 100644
--- a/src/portable/microchip/samd21/dcd_samd21.c
+++ b/src/portable/microchip/samd21/dcd_samd21.c
@@ -133,13 +133,14 @@ void dcd_remote_wakeup(uint8_t rhport)
// May help DCD to prepare for next control transfer, this API is optional.
void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const * request)
{
- (void) rhport;
-
if (request->bRequest == TUSB_REQ_SET_ADDRESS)
{
uint8_t const dev_addr = (uint8_t) request->wValue;
USB->DEVICE.DADD.reg = USB_DEVICE_DADD_DADD(dev_addr) | USB_DEVICE_DADD_ADDEN;
}
+
+ // Just finished status stage, prepare for next setup packet
+ dcd_edpt_xfer(rhport, 0x00, _setup_packet, sizeof(_setup_packet));
}
@@ -295,12 +296,6 @@ void maybe_transfer_complete(void) {
uint8_t ep_addr = epnum;
dcd_event_xfer_complete(0, ep_addr, total_transfer_size, XFER_RESULT_SUCCESS, true);
}
-
- // Just finished status stage (total size = 0), prepare for next setup packet
- // TODO could cause issue with actual zero length data used by class such as DFU
- if (epnum == 0 && total_transfer_size == 0) {
- dcd_edpt_xfer(0, 0, _setup_packet, sizeof(_setup_packet));
- }
}
}
diff --git a/src/portable/microchip/samd51/dcd_samd51.c b/src/portable/microchip/samd51/dcd_samd51.c
index 1af247702..abf89c32e 100644
--- a/src/portable/microchip/samd51/dcd_samd51.c
+++ b/src/portable/microchip/samd51/dcd_samd51.c
@@ -146,6 +146,9 @@ void dcd_edpt0_status_complete(uint8_t rhport, tusb_control_request_t const * re
uint8_t const dev_addr = (uint8_t) request->wValue;
USB->DEVICE.DADD.reg = USB_DEVICE_DADD_DADD(dev_addr) | USB_DEVICE_DADD_ADDEN;
}
+
+ // Just finished status stage, prepare for next setup packet
+ dcd_edpt_xfer(rhport, 0x00, _setup_packet, sizeof(_setup_packet));
}
bool dcd_edpt_open (uint8_t rhport, tusb_desc_endpoint_t const * desc_edpt)
@@ -347,11 +350,6 @@ void transfer_complete(uint8_t direction) {
}
dcd_event_xfer_complete(0, ep_addr, total_transfer_size, XFER_RESULT_SUCCESS, true);
- // just finished status stage (total size = 0), prepare for next setup packet
- if (epnum == 0 && total_transfer_size == 0) {
- dcd_edpt_xfer(0, 0, _setup_packet, sizeof(_setup_packet));
- }
-
if (direction == TUSB_DIR_IN) {
ep->EPINTFLAG.reg = USB_DEVICE_EPINTFLAG_TRCPT1;
} else {