diff options
Diffstat (limited to 'Demos/Device/LowLevel/MassStorage')
-rw-r--r-- | Demos/Device/LowLevel/MassStorage/Lib/SCSI.c | 12 | ||||
-rw-r--r-- | Demos/Device/LowLevel/MassStorage/MassStorage.c | 63 |
2 files changed, 33 insertions, 42 deletions
diff --git a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c index 9073aa34b..0400cc2c6 100644 --- a/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c +++ b/Demos/Device/LowLevel/MassStorage/Lib/SCSI.c @@ -166,12 +166,10 @@ static bool SCSI_Command_Inquiry(void) } /* Write the INQUIRY data to the endpoint */ - Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, StreamCallback_AbortOnMassStoreReset); - - uint8_t PadBytes[AllocationLength - BytesTransferred]; + Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NULL); /* Pad out remaining bytes with 0x00 */ - Endpoint_Write_Stream_LE(&PadBytes, sizeof(PadBytes), StreamCallback_AbortOnMassStoreReset); + Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL); /* Finalize the stream transfer to send the last packet */ Endpoint_ClearIN(); @@ -193,12 +191,10 @@ static bool SCSI_Command_Request_Sense(void) uint8_t BytesTransferred = (AllocationLength < sizeof(SenseData))? AllocationLength : sizeof(SenseData); /* Send the SENSE data - this indicates to the host the status of the last command */ - Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, StreamCallback_AbortOnMassStoreReset); - - uint8_t PadBytes[AllocationLength - BytesTransferred]; + Endpoint_Write_Stream_LE(&SenseData, BytesTransferred, NULL); /* Pad out remaining bytes with 0x00 */ - Endpoint_Write_Stream_LE(&PadBytes, sizeof(PadBytes), StreamCallback_AbortOnMassStoreReset); + Endpoint_Null_Stream((AllocationLength - BytesTransferred), NULL); /* Finalize the stream transfer to send the last packet */ Endpoint_ClearIN(); diff --git a/Demos/Device/LowLevel/MassStorage/MassStorage.c b/Demos/Device/LowLevel/MassStorage/MassStorage.c index fe8a3f7a0..cbfef0fbf 100644 --- a/Demos/Device/LowLevel/MassStorage/MassStorage.c +++ b/Demos/Device/LowLevel/MassStorage/MassStorage.c @@ -221,6 +221,8 @@ void MassStorage_Task(void) */ static bool ReadInCommandBlock(void) { + uint16_t BytesTransferred; + /* Select the Data Out endpoint */ Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPNUM); @@ -229,12 +231,14 @@ static bool ReadInCommandBlock(void) return false; /* Read in command block header */ - Endpoint_Read_Stream_LE(&CommandBlock, (sizeof(CommandBlock) - sizeof(CommandBlock.SCSICommandData)), - StreamCallback_AbortOnMassStoreReset); - - /* Check if the current command is being aborted by the host */ - if (IsMassStoreReset) - return false; + BytesTransferred = 0; + while (Endpoint_Read_Stream_LE(&CommandBlock, (sizeof(CommandBlock) - sizeof(CommandBlock.SCSICommandData)), + &BytesTransferred) == ENDPOINT_RWSTREAM_IncompleteTransfer) + { + /* Check if the current command is being aborted by the host */ + if (IsMassStoreReset) + return false; + } /* Verify the command block - abort if invalid */ if ((CommandBlock.Signature != MS_CBW_SIGNATURE) || @@ -252,13 +256,14 @@ static bool ReadInCommandBlock(void) } /* Read in command block command data */ - Endpoint_Read_Stream_LE(&CommandBlock.SCSICommandData, - CommandBlock.SCSICommandLength, - StreamCallback_AbortOnMassStoreReset); - - /* Check if the current command is being aborted by the host */ - if (IsMassStoreReset) - return false; + BytesTransferred = 0; + while (Endpoint_Read_Stream_LE(&CommandBlock.SCSICommandData, CommandBlock.SCSICommandLength, + &BytesTransferred) == ENDPOINT_RWSTREAM_IncompleteTransfer) + { + /* Check if the current command is being aborted by the host */ + if (IsMassStoreReset) + return false; + } /* Finalize the stream transfer to send the last packet */ Endpoint_ClearOUT(); @@ -271,6 +276,8 @@ static bool ReadInCommandBlock(void) */ static void ReturnCommandStatus(void) { + uint16_t BytesTransferred; + /* Select the Data Out endpoint */ Endpoint_SelectEndpoint(MASS_STORAGE_OUT_EPNUM); @@ -294,27 +301,15 @@ static void ReturnCommandStatus(void) } /* Write the CSW to the endpoint */ - Endpoint_Write_Stream_LE(&CommandStatus, sizeof(CommandStatus), - StreamCallback_AbortOnMassStoreReset); - - /* Check if the current command is being aborted by the host */ - if (IsMassStoreReset) - return; - + BytesTransferred = 0; + while (Endpoint_Write_Stream_LE(&CommandStatus, sizeof(CommandStatus), + &BytesTransferred) == ENDPOINT_RWSTREAM_IncompleteTransfer) + { + /* Check if the current command is being aborted by the host */ + if (IsMassStoreReset) + return; + } + /* Finalize the stream transfer to send the last packet */ Endpoint_ClearIN(); } - -/** Stream callback function for the Endpoint stream read and write functions. This callback will abort the current stream transfer - * if a Mass Storage Reset request has been issued to the control endpoint. - */ -uint8_t StreamCallback_AbortOnMassStoreReset(void) -{ - /* Abort if a Mass Storage reset command was received */ - if (IsMassStoreReset) - return STREAMCALLBACK_Abort; - - /* Continue with the current stream operation */ - return STREAMCALLBACK_Continue; -} - |