summaryrefslogtreecommitdiff
path: root/tinyusb
diff options
context:
space:
mode:
authorhathach <[email protected]>2018-03-22 17:48:10 +0700
committerhathach <[email protected]>2018-03-22 17:48:10 +0700
commit0cb160468603a38284955316d84463995d3e2eff (patch)
tree905f0772d8e0afa8815e0f3511997f557ff91e61 /tinyusb
parent0fec2e5cc011eed45ec017bbc8cca90565e96074 (diff)
more msc driver improve
Diffstat (limited to 'tinyusb')
-rw-r--r--tinyusb/class/msc/msc_device.c21
1 files changed, 6 insertions, 15 deletions
diff --git a/tinyusb/class/msc/msc_device.c b/tinyusb/class/msc/msc_device.c
index 957cce5af..0fe69e861 100644
--- a/tinyusb/class/msc/msc_device.c
+++ b/tinyusb/class/msc/msc_device.c
@@ -161,16 +161,6 @@ tusb_error_t mscd_control_request_st(uint8_t port, tusb_control_request_t const
//--------------------------------------------------------------------+
// MSCD APPLICATION CALLBACK
//--------------------------------------------------------------------+
-static bool send_status(uint8_t port, mscd_interface_t* p_msc)
-{
- TU_ASSERT( tusb_dcd_edpt_xfer(port, p_msc->ep_in , (uint8_t*) &p_msc->csw, sizeof(msc_csw_t), false) );
-
- //------------- Queue the next CBW -------------//
- TU_ASSERT( tusb_dcd_edpt_xfer(port, p_msc->ep_out, (uint8_t*) &p_msc->cbw, sizeof(msc_cbw_t), true) );
-
- return true;
-}
-
tusb_error_t mscd_xfer_cb(uint8_t port, uint8_t ep_addr, tusb_event_t event, uint32_t xferred_bytes)
{
mscd_interface_t* const p_msc = &mscd_data;
@@ -183,10 +173,11 @@ tusb_error_t mscd_xfer_cb(uint8_t port, uint8_t ep_addr, tusb_event_t event, uin
{
//------------- new CBW received -------------//
case MSC_STAGE_CMD:
- TU_ASSERT( (ep_addr == p_msc->ep_out) &&
- event == TUSB_EVENT_XFER_COMPLETE &&
- xferred_bytes == sizeof(msc_cbw_t) &&
- p_cbw->signature == MSC_CBW_SIGNATURE, TUSB_ERROR_INVALID_PARA );
+ // Complete IN while waiting for CMD is usually Status of previous SCSI op, ignore it
+ if(ep_addr != p_msc->ep_out) return TUSB_ERROR_NONE;
+
+ TU_ASSERT( event == TUSB_EVENT_XFER_COMPLETE &&
+ xferred_bytes == sizeof(msc_cbw_t) && p_cbw->signature == MSC_CBW_SIGNATURE, TUSB_ERROR_INVALID_PARA );
p_csw->signature = MSC_CSW_SIGNATURE;
p_csw->tag = p_cbw->tag;
@@ -260,7 +251,7 @@ tusb_error_t mscd_xfer_cb(uint8_t port, uint8_t ep_addr, tusb_event_t event, uin
// Move to default CMD stage after sending status
p_msc->stage = MSC_STAGE_CMD;
- TU_ASSERT( tusb_dcd_edpt_xfer(port, p_msc->ep_in , (uint8_t*) &p_msc->csw, sizeof(msc_csw_t), false) );
+ TU_ASSERT( tusb_dcd_edpt_xfer(port, p_msc->ep_in , (uint8_t*) &p_msc->csw, sizeof(msc_csw_t), true) );
//------------- Queue the next CBW -------------//
TU_ASSERT( tusb_dcd_edpt_xfer(port, p_msc->ep_out, (uint8_t*) &p_msc->cbw, sizeof(msc_cbw_t), true) );