diff options
| author | hathach <[email protected]> | 2018-03-22 17:48:10 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2018-03-22 17:48:10 +0700 |
| commit | 0cb160468603a38284955316d84463995d3e2eff (patch) | |
| tree | 905f0772d8e0afa8815e0f3511997f557ff91e61 /tinyusb | |
| parent | 0fec2e5cc011eed45ec017bbc8cca90565e96074 (diff) | |
more msc driver improve
Diffstat (limited to 'tinyusb')
| -rw-r--r-- | tinyusb/class/msc/msc_device.c | 21 |
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) );
|
