summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/device/usbd.c7
-rw-r--r--src/device/usbd.h4
-rw-r--r--src/device/usbd_control.c12
-rw-r--r--src/device/usbd_pvt.h4
4 files changed, 9 insertions, 18 deletions
diff --git a/src/device/usbd.c b/src/device/usbd.c
index b79ccae2b..17914fb6c 100644
--- a/src/device/usbd.c
+++ b/src/device/usbd.c
@@ -104,7 +104,6 @@ static usbd_class_driver_t const usbd_class_drivers[] =
},
#endif
-
#if CFG_TUD_HID
{
.class_code = TUSB_CLASS_HID,
@@ -243,10 +242,12 @@ void tud_task (void)
switch ( event.event_id )
{
case DCD_EVENT_SETUP_RECEIVED:
- // Process control request, if failed control endpoint is stalled
+ // Process control request
if ( !process_control_request(event.rhport, &event.setup_received) )
{
- usbd_control_stall(event.rhport);
+ // Failed -> stall both control endpoint IN and OUT
+ dcd_edpt_stall(event.rhport, 0);
+ dcd_edpt_stall(event.rhport, 0 | TUSB_DIR_IN_MASK);
}
break;
diff --git a/src/device/usbd.h b/src/device/usbd.h
index e8f3f2bc8..614b4f311 100644
--- a/src/device/usbd.h
+++ b/src/device/usbd.h
@@ -74,10 +74,10 @@ void tud_task (void);
// APPLICATION CALLBACK (WEAK is optional)
//--------------------------------------------------------------------+
-/** Callback invoked when device is mounted (configured) */
+// Callback invoked when device is mounted (configured)
ATTR_WEAK void tud_mount_cb(void);
-/** Callback invoked when device is unmounted (bus reset/unplugged) */
+// Callback invoked when device is unmounted (bus reset/unplugged)
ATTR_WEAK void tud_umount_cb(void);
//void tud_device_suspended_cb(void);
diff --git a/src/device/usbd_control.c b/src/device/usbd_control.c
index 094d2fb44..d907aca3b 100644
--- a/src/device/usbd_control.c
+++ b/src/device/usbd_control.c
@@ -60,13 +60,6 @@ void usbd_control_reset (uint8_t rhport)
tu_varclr(&_control_state);
}
-void usbd_control_stall(uint8_t rhport)
-{
- // when stalling control endpoint both IN and OUt will be stalled
- dcd_edpt_stall(rhport, EDPT_CTRL_OUT);
- dcd_edpt_stall(rhport, EDPT_CTRL_IN);
-}
-
bool usbd_control_status(uint8_t rhport, tusb_control_request_t const * request)
{
// status direction is reversed to one in the setup packet
@@ -147,8 +140,9 @@ bool usbd_control_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t result
TU_ASSERT( usbd_control_status(rhport, &_control_state.request) );
}else
{
- // stall due to callback
- usbd_control_stall(rhport);
+ // Stall both IN and OUT control endpoint
+ dcd_edpt_stall(rhport, EDPT_CTRL_OUT);
+ dcd_edpt_stall(rhport, EDPT_CTRL_IN);
}
}
else
diff --git a/src/device/usbd_pvt.h b/src/device/usbd_pvt.h
index dee194f0f..dab67581f 100644
--- a/src/device/usbd_pvt.h
+++ b/src/device/usbd_pvt.h
@@ -49,10 +49,6 @@ bool usbd_control_xfer(uint8_t rhport, tusb_control_request_t const * request, v
// Send STATUS (zero length) packet
bool usbd_control_status(uint8_t rhport, tusb_control_request_t const * request);
-// Stall control endpoint (both IN and OUT) until new setup packet arrived
-void usbd_control_stall(uint8_t rhport);
-
-
void usbd_edpt_stall(uint8_t rhport, uint8_t ep_addr);
void usbd_edpt_clear_stall(uint8_t rhport, uint8_t ep_addr);
bool usbd_edpt_stalled(uint8_t rhport, uint8_t ep_addr);