|
|
|
@ -212,11 +212,8 @@ static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* const MSInterf |
|
|
|
|
*/ |
|
|
|
|
static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) |
|
|
|
|
{ |
|
|
|
|
uint32_t LastBlockAddressInLUN = (LUN_MEDIA_BLOCKS - 1); |
|
|
|
|
uint32_t MediaBlockSize = SECTOR_SIZE_BYTES; |
|
|
|
|
|
|
|
|
|
Endpoint_Write_Stream_BE(&LastBlockAddressInLUN, sizeof(LastBlockAddressInLUN), NULL); |
|
|
|
|
Endpoint_Write_Stream_BE(&MediaBlockSize, sizeof(MediaBlockSize), NULL); |
|
|
|
|
Endpoint_Write_32_BE(LUN_MEDIA_BLOCKS - 1); |
|
|
|
|
Endpoint_Write_32_BE(SECTOR_SIZE_BYTES); |
|
|
|
|
Endpoint_ClearIN(); |
|
|
|
|
|
|
|
|
|
/* Succeed the command and update the bytes transferred counter */ |
|
|
|
@ -237,7 +234,7 @@ static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* const MSInt |
|
|
|
|
static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo, |
|
|
|
|
const bool IsDataRead) |
|
|
|
|
{ |
|
|
|
|
uint32_t BlockAddress; |
|
|
|
|
uint16_t BlockAddress; |
|
|
|
|
uint16_t TotalBlocks; |
|
|
|
|
|
|
|
|
|
/* Load in the 32-bit block address (SCSI uses big-endian, so have to reverse the byte order) */ |
|
|
|
@ -259,9 +256,9 @@ static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* const MSInterfa |
|
|
|
|
|
|
|
|
|
/* Determine if the packet is a READ (10) or WRITE (10) command, call appropriate function */ |
|
|
|
|
if (IsDataRead == DATA_READ) |
|
|
|
|
VirtualFAT_ReadBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks); |
|
|
|
|
VirtualFAT_ReadBlocks(BlockAddress, TotalBlocks); |
|
|
|
|
else |
|
|
|
|
VirtualFAT_WriteBlocks(MSInterfaceInfo, BlockAddress, TotalBlocks); |
|
|
|
|
VirtualFAT_WriteBlocks(BlockAddress, TotalBlocks); |
|
|
|
|
|
|
|
|
|
/* Update the bytes transferred counter and succeed the command */ |
|
|
|
|
MSInterfaceInfo->State.CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * SECTOR_SIZE_BYTES); |
|
|
|
|