From 0cb160468603a38284955316d84463995d3e2eff Mon Sep 17 00:00:00 2001 From: hathach Date: Thu, 22 Mar 2018 17:48:10 +0700 Subject: [PATCH] more msc driver improve --- tinyusb/class/msc/msc_device.c | 21 ++++++--------------- 1 file 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) );