فهرست منبع

more msc driver improve

hathach 8 سال پیش
والد
کامیت
0cb1604686
1فایلهای تغییر یافته به همراه6 افزوده شده و 15 حذف شده
  1. 6 15
      tinyusb/class/msc/msc_device.c

+ 6 - 15
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) );