summaryrefslogtreecommitdiff
path: root/src/device
diff options
context:
space:
mode:
authorHa Thach <[email protected]>2024-04-16 10:40:53 +0700
committerGitHub <[email protected]>2024-04-16 10:40:53 +0700
commitfcb2df8eb916fb14d53778361cdde173175d0a2d (patch)
tree6319e2fe570db412616debc53a0df9b7b7f171f4 /src/device
parent50738f2ab4cbb3d1c00db994279dec620b2870f0 (diff)
parent5dabef79eeb7d6ca271b2a09abddb700bc59ca03 (diff)
Merge pull request #1537 from pigrew/endpoint_halt
When clearing an endpoint stall, reset DTOG
Diffstat (limited to 'src/device')
-rw-r--r--src/device/usbd.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c
index 96982c30b..109c3462d 100644
--- a/src/device/usbd.c
+++ b/src/device/usbd.c
@@ -636,7 +636,7 @@ static bool invoke_class_control(uint8_t rhport, usbd_class_driver_t const * dri
}
// This handles the actual request and its response.
-// return false will cause its caller to stall control endpoint
+// Returns false if unable to complete the request, causing caller to stall control endpoints.
static bool process_control_request(uint8_t rhport, tusb_control_request_t const * p_request) {
usbd_control_set_complete_callback(NULL);
TU_ASSERT(p_request->bmRequestType_bit.type < TUSB_REQ_TYPE_INVALID);
@@ -1306,12 +1306,10 @@ void usbd_edpt_stall(uint8_t rhport, uint8_t ep_addr) {
uint8_t const dir = tu_edpt_dir(ep_addr);
// only stalled if currently cleared
- if (!_usbd_dev.ep_status[epnum][dir].stalled) {
- TU_LOG_USBD(" Stall EP %02X\r\n", ep_addr);
- dcd_edpt_stall(rhport, ep_addr);
- _usbd_dev.ep_status[epnum][dir].stalled = 1;
- _usbd_dev.ep_status[epnum][dir].busy = 1;
- }
+ TU_LOG_USBD(" Stall EP %02X\r\n", ep_addr);
+ dcd_edpt_stall(rhport, ep_addr);
+ _usbd_dev.ep_status[epnum][dir].stalled = 1;
+ _usbd_dev.ep_status[epnum][dir].busy = 1;
}
void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr) {
@@ -1321,12 +1319,10 @@ void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr) {
uint8_t const dir = tu_edpt_dir(ep_addr);
// only clear if currently stalled
- if (_usbd_dev.ep_status[epnum][dir].stalled) {
- TU_LOG_USBD(" Clear Stall EP %02X\r\n", ep_addr);
- dcd_edpt_clear_stall(rhport, ep_addr);
- _usbd_dev.ep_status[epnum][dir].stalled = 0;
- _usbd_dev.ep_status[epnum][dir].busy = 0;
- }
+ TU_LOG_USBD(" Clear Stall EP %02X\r\n", ep_addr);
+ dcd_edpt_clear_stall(rhport, ep_addr);
+ _usbd_dev.ep_status[epnum][dir].stalled = 0;
+ _usbd_dev.ep_status[epnum][dir].busy = 0;
}
bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr) {