summaryrefslogtreecommitdiff
path: root/src/device
diff options
context:
space:
mode:
authorhathach <[email protected]>2019-11-04 11:21:57 +0700
committerhathach <[email protected]>2019-11-04 11:21:57 +0700
commit44ad683bd6151fd297404bc59f2f7f2ccf792aab (patch)
tree2b6a6e2b75d3af0c562c892ff0274e7f1648b9fc /src/device
parent68a53e05fc49bfa46c7cfb1c8e598519d90ec39c (diff)
fix tud_control_status() didn't update request
Diffstat (limited to 'src/device')
-rw-r--r--src/device/usbd_control.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/device/usbd_control.c b/src/device/usbd_control.c
index 80648fd75..967864138 100644
--- a/src/device/usbd_control.c
+++ b/src/device/usbd_control.c
@@ -58,12 +58,22 @@ CFG_TUSB_MEM_SECTION CFG_TUSB_MEM_ALIGN static uint8_t _usbd_ctrl_buf[CFG_TUD_EN
// Application API
//--------------------------------------------------------------------+
-bool tud_control_status(uint8_t rhport, tusb_control_request_t const * request)
+static inline bool _status_stage_xact(uint8_t rhport, tusb_control_request_t const * request)
{
// status direction is reversed to one in the setup packet
return dcd_edpt_xfer(rhport, request->bmRequestType_bit.direction ? EDPT_CTRL_OUT : EDPT_CTRL_IN, NULL, 0);
}
+bool tud_control_status(uint8_t rhport, tusb_control_request_t const * request)
+{
+ _ctrl_xfer.request = (*request);
+ _ctrl_xfer.buffer = NULL;
+ _ctrl_xfer.total_xferred = 0;
+ _ctrl_xfer.data_len = 0;
+
+ return _status_stage_xact(rhport, request);
+}
+
// Transfer an transaction in Data Stage
// Each transaction has up to Endpoint0's max packet size.
// This function can also transfer an zero-length packet
@@ -98,7 +108,7 @@ bool tud_control_xfer(uint8_t rhport, tusb_control_request_t const * request, vo
}else
{
// Status stage
- TU_ASSERT( tud_control_status(rhport, request) );
+ TU_ASSERT( _status_stage_xact(rhport, request) );
}
return true;
@@ -158,7 +168,7 @@ bool usbd_control_xfer_cb (uint8_t rhport, uint8_t ep_addr, xfer_result_t result
if ( is_ok )
{
// Send status
- TU_ASSERT( tud_control_status(rhport, &_ctrl_xfer.request) );
+ TU_ASSERT( _status_stage_xact(rhport, &_ctrl_xfer.request) );
}else
{
// Stall both IN and OUT control endpoint