Browse Source

Merge pull request #37 from hathach/develop

mscd: send scsi status before invoke read10/write10/scsi complete callback
hathach 7 years ago
parent
commit
55874813f8
2 changed files with 9 additions and 6 deletions
  1. 2 0
      src/class/msc/msc.h
  2. 7 6
      src/class/msc/msc_device.c

+ 2 - 0
src/class/msc/msc.h

@@ -284,8 +284,10 @@ typedef struct ATTR_PACKED
 {
   uint8_t data_len;
   uint8_t medium_type;
+
   uint8_t reserved : 7;
   bool write_protected : 1;
+
   uint8_t block_descriptor_len;
 } scsi_mode_sense6_resp_t;
 

+ 7 - 6
src/class/msc/msc_device.c

@@ -525,6 +525,12 @@ bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t
     }
     else
     {
+      // Move to default CMD stage when sending status
+      p_msc->stage = MSC_STAGE_CMD;
+
+      // Send SCSI Status
+      TU_ASSERT( dcd_edpt_xfer(rhport, p_msc->ep_in , (uint8_t*) &p_msc->csw, sizeof(msc_csw_t)) );
+
       // Invoke complete callback if defined
       if ( SCSI_CMD_READ_10 == p_cbw->command[0])
       {
@@ -539,12 +545,7 @@ bool mscd_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t event, uint32_t
         if ( tud_msc_scsi_complete_cb ) tud_msc_scsi_complete_cb(p_cbw->lun, p_cbw->command);
       }
 
-      // Move to default CMD stage after sending status
-      p_msc->stage         = MSC_STAGE_CMD;
-
-      TU_ASSERT( dcd_edpt_xfer(rhport, p_msc->ep_in , (uint8_t*) &p_msc->csw, sizeof(msc_csw_t)) );
-
-      //------------- Queue the next CBW -------------//
+      // Queue for the next CBW
       TU_ASSERT( dcd_edpt_xfer(rhport, p_msc->ep_out, (uint8_t*) &p_msc->cbw, sizeof(msc_cbw_t)) );
     }
   }