projects
/
pub
/
USBasp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Cleanups to the Device mode Mass Storage demo applications' SCSI routines.
[pub/USBasp.git]
/
Demos
/
Device
/
ClassDriver
/
MassStorage
/
Lib
/
SCSI.c
diff --git
a/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.c
b/Demos/Device/ClassDriver/MassStorage/Lib/SCSI.c
index
771773b
..
468a04a
100644
(file)
--- a/
Demos/Device/ClassDriver/MassStorage/Lib/SCSI.c
+++ b/
Demos/Device/ClassDriver/MassStorage/Lib/SCSI.c
@@
-88,34
+88,36
@@
SCSI_Request_Sense_Response_t SenseData =
*/
\r
bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
\r
{
\r
*/
\r
bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
\r
{
\r
- bool CommandSuccess = false;
\r
-
\r
+ /* Set initial sense data, before the requested command is processed */
\r
+ SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD,
\r
+ SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,
\r
+ SCSI_ASENSEQ_NO_QUALIFIER);
\r
+
\r
/* Run the appropriate SCSI command hander function based on the passed command */
\r
switch (MSInterfaceInfo->State.CommandBlock.SCSICommandData[0])
\r
{
\r
case SCSI_CMD_INQUIRY:
\r
/* Run the appropriate SCSI command hander function based on the passed command */
\r
switch (MSInterfaceInfo->State.CommandBlock.SCSICommandData[0])
\r
{
\r
case SCSI_CMD_INQUIRY:
\r
- CommandSuccess = SCSI_Command_Inquiry(MSInterfaceInfo);
\r
+ SCSI_Command_Inquiry(MSInterfaceInfo);
\r
break;
\r
case SCSI_CMD_REQUEST_SENSE:
\r
break;
\r
case SCSI_CMD_REQUEST_SENSE:
\r
-
CommandSuccess =
SCSI_Command_Request_Sense(MSInterfaceInfo);
\r
+ SCSI_Command_Request_Sense(MSInterfaceInfo);
\r
break;
\r
case SCSI_CMD_READ_CAPACITY_10:
\r
break;
\r
case SCSI_CMD_READ_CAPACITY_10:
\r
- CommandSuccess = SCSI_Command_Read_Capacity_10(MSInterfaceInfo);
\r
+ SCSI_Command_Read_Capacity_10(MSInterfaceInfo);
\r
break;
\r
case SCSI_CMD_SEND_DIAGNOSTIC:
\r
break;
\r
case SCSI_CMD_SEND_DIAGNOSTIC:
\r
-
CommandSuccess =
SCSI_Command_Send_Diagnostic(MSInterfaceInfo);
\r
+ SCSI_Command_Send_Diagnostic(MSInterfaceInfo);
\r
break;
\r
case SCSI_CMD_WRITE_10:
\r
break;
\r
case SCSI_CMD_WRITE_10:
\r
-
CommandSuccess =
SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_WRITE);
\r
+ SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_WRITE);
\r
break;
\r
case SCSI_CMD_READ_10:
\r
break;
\r
case SCSI_CMD_READ_10:
\r
-
CommandSuccess =
SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_READ);
\r
+ SCSI_Command_ReadWrite_10(MSInterfaceInfo, DATA_READ);
\r
break;
\r
case SCSI_CMD_TEST_UNIT_READY:
\r
case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL:
\r
case SCSI_CMD_VERIFY_10:
\r
/* These commands should just succeed, no handling required */
\r
break;
\r
case SCSI_CMD_TEST_UNIT_READY:
\r
case SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL:
\r
case SCSI_CMD_VERIFY_10:
\r
/* These commands should just succeed, no handling required */
\r
- CommandSuccess = true;
\r
MSInterfaceInfo->State.CommandBlock.DataTransferLength = 0;
\r
break;
\r
default:
\r
MSInterfaceInfo->State.CommandBlock.DataTransferLength = 0;
\r
break;
\r
default:
\r
@@
-126,27
+128,15
@@
bool SCSI_DecodeSCSICommand(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
break;
\r
}
\r
\r
break;
\r
}
\r
\r
- /* Check if command was successfully processed */
\r
- if (CommandSuccess)
\r
- {
\r
- SCSI_SET_SENSE(SCSI_SENSE_KEY_GOOD,
\r
- SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,
\r
- SCSI_ASENSEQ_NO_QUALIFIER);
\r
-
\r
- return true;
\r
- }
\r
-
\r
- return false;
\r
+ return (SenseData.SenseKey == SCSI_SENSE_KEY_GOOD);
\r
}
\r
\r
/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features
\r
* and capabilities to the host.
\r
*
\r
* \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with
\r
}
\r
\r
/** Command processing for an issued SCSI INQUIRY command. This command returns information about the device's features
\r
* and capabilities to the host.
\r
*
\r
* \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with
\r
- *
\r
- * \return Boolean true if the command completed successfully, false otherwise.
\r
*/
\r
*/
\r
-static
bool
SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
\r
+static
void
SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
\r
{
\r
uint16_t AllocationLength = (((uint16_t)MSInterfaceInfo->State.CommandBlock.SCSICommandData[3] << 8) |
\r
MSInterfaceInfo->State.CommandBlock.SCSICommandData[4]);
\r
{
\r
uint16_t AllocationLength = (((uint16_t)MSInterfaceInfo->State.CommandBlock.SCSICommandData[3] << 8) |
\r
MSInterfaceInfo->State.CommandBlock.SCSICommandData[4]);
\r
@@
-162,7
+152,7
@@
static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
SCSI_ASENSE_INVALID_FIELD_IN_CDB,
\r
SCSI_ASENSEQ_NO_QUALIFIER);
\r
\r
SCSI_ASENSE_INVALID_FIELD_IN_CDB,
\r
SCSI_ASENSEQ_NO_QUALIFIER);
\r
\r
- return
false
;
\r
+ return;
\r
}
\r
\r
Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NO_STREAM_CALLBACK);
\r
}
\r
\r
Endpoint_Write_Stream_LE(&InquiryData, BytesTransferred, NO_STREAM_CALLBACK);
\r
@@
-177,18
+167,14
@@
static bool SCSI_Command_Inquiry(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
\r
/* Succeed the command and update the bytes transferred counter */
\r
MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred;
\r
\r
/* Succeed the command and update the bytes transferred counter */
\r
MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred;
\r
-
\r
- return true;
\r
}
\r
\r
/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command,
\r
* including the error code and additional error information so that the host can determine why a command failed to complete.
\r
*
\r
* \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with
\r
}
\r
\r
/** Command processing for an issued SCSI REQUEST SENSE command. This command returns information about the last issued command,
\r
* including the error code and additional error information so that the host can determine why a command failed to complete.
\r
*
\r
* \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with
\r
- *
\r
- * \return Boolean true if the command completed successfully, false otherwise.
\r
*/
\r
*/
\r
-static
bool
SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
\r
+static
void
SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
\r
{
\r
uint8_t AllocationLength = MSInterfaceInfo->State.CommandBlock.SCSICommandData[4];
\r
uint8_t BytesTransferred = (AllocationLength < sizeof(SenseData))? AllocationLength : sizeof(SenseData);
\r
{
\r
uint8_t AllocationLength = MSInterfaceInfo->State.CommandBlock.SCSICommandData[4];
\r
uint8_t BytesTransferred = (AllocationLength < sizeof(SenseData))? AllocationLength : sizeof(SenseData);
\r
@@
-201,18
+187,14
@@
static bool SCSI_Command_Request_Sense(USB_ClassInfo_MS_Device_t* MSInterfaceInf
\r
/* Succeed the command and update the bytes transferred counter */
\r
MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred;
\r
\r
/* Succeed the command and update the bytes transferred counter */
\r
MSInterfaceInfo->State.CommandBlock.DataTransferLength -= BytesTransferred;
\r
-
\r
- return true;
\r
}
\r
\r
/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity
\r
* on the selected Logical Unit (drive), as a number of OS-sized blocks.
\r
*
\r
* \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with
\r
}
\r
\r
/** Command processing for an issued SCSI READ CAPACITY (10) command. This command returns information about the device's capacity
\r
* on the selected Logical Unit (drive), as a number of OS-sized blocks.
\r
*
\r
* \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with
\r
- *
\r
- * \return Boolean true if the command completed successfully, false otherwise.
\r
*/
\r
*/
\r
-static
bool
SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
\r
+static
void
SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
\r
{
\r
uint32_t LastBlockAddressInLUN = (LUN_MEDIA_BLOCKS - 1);
\r
uint32_t MediaBlockSize = VIRTUAL_MEMORY_BLOCK_SIZE;
\r
{
\r
uint32_t LastBlockAddressInLUN = (LUN_MEDIA_BLOCKS - 1);
\r
uint32_t MediaBlockSize = VIRTUAL_MEMORY_BLOCK_SIZE;
\r
@@
-223,8
+205,6
@@
static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* MSInterface
\r
/* Succeed the command and update the bytes transferred counter */
\r
MSInterfaceInfo->State.CommandBlock.DataTransferLength -= 8;
\r
\r
/* Succeed the command and update the bytes transferred counter */
\r
MSInterfaceInfo->State.CommandBlock.DataTransferLength -= 8;
\r
-
\r
- return true;
\r
}
\r
\r
/** Command processing for an issued SCSI SEND DIAGNOSTIC command. This command performs a quick check of the Dataflash ICs on the
\r
}
\r
\r
/** Command processing for an issued SCSI SEND DIAGNOSTIC command. This command performs a quick check of the Dataflash ICs on the
\r
@@
-232,10
+212,8
@@
static bool SCSI_Command_Read_Capacity_10(USB_ClassInfo_MS_Device_t* MSInterface
* supported.
\r
*
\r
* \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with
\r
* supported.
\r
*
\r
* \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with
\r
- *
\r
- * \return Boolean true if the command completed successfully, false otherwise.
\r
*/
\r
*/
\r
-static
bool
SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
\r
+static
void
SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_Device_t* MSInterfaceInfo)
\r
{
\r
/* Check to see if the SELF TEST bit is not set */
\r
if (!(MSInterfaceInfo->State.CommandBlock.SCSICommandData[1] & (1 << 2)))
\r
{
\r
/* Check to see if the SELF TEST bit is not set */
\r
if (!(MSInterfaceInfo->State.CommandBlock.SCSICommandData[1] & (1 << 2)))
\r
@@
-245,7
+223,7
@@
static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_Device_t* MSInterfaceI
SCSI_ASENSE_INVALID_FIELD_IN_CDB,
\r
SCSI_ASENSEQ_NO_QUALIFIER);
\r
\r
SCSI_ASENSE_INVALID_FIELD_IN_CDB,
\r
SCSI_ASENSEQ_NO_QUALIFIER);
\r
\r
- return
false
;
\r
+ return;
\r
}
\r
\r
/* Check to see if all attached Dataflash ICs are functional */
\r
}
\r
\r
/* Check to see if all attached Dataflash ICs are functional */
\r
@@
-256,13
+234,13
@@
static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_Device_t* MSInterfaceI
SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,
\r
SCSI_ASENSEQ_NO_QUALIFIER);
\r
\r
SCSI_ASENSE_NO_ADDITIONAL_INFORMATION,
\r
SCSI_ASENSEQ_NO_QUALIFIER);
\r
\r
- return
false
;
\r
+ return;
\r
}
\r
\r
/* Succeed the command and update the bytes transferred counter */
\r
MSInterfaceInfo->State.CommandBlock.DataTransferLength = 0;
\r
\r
}
\r
\r
/* Succeed the command and update the bytes transferred counter */
\r
MSInterfaceInfo->State.CommandBlock.DataTransferLength = 0;
\r
\r
- return
true
;
\r
+ return;
\r
}
\r
\r
/** Command processing for an issued SCSI READ (10) or WRITE (10) command. This command reads in the block start address
\r
}
\r
\r
/** Command processing for an issued SCSI READ (10) or WRITE (10) command. This command reads in the block start address
\r
@@
-271,10
+249,8
@@
static bool SCSI_Command_Send_Diagnostic(USB_ClassInfo_MS_Device_t* MSInterfaceI
*
\r
* \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with
\r
* \param[in] IsDataRead Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE)
\r
*
\r
* \param[in] MSInterfaceInfo Pointer to the Mass Storage class interface structure that the command is associated with
\r
* \param[in] IsDataRead Indicates if the command is a READ (10) command or WRITE (10) command (DATA_READ or DATA_WRITE)
\r
- *
\r
- * \return Boolean true if the command completed successfully, false otherwise.
\r
*/
\r
*/
\r
-static
bool
SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* MSInterfaceInfo, const bool IsDataRead)
\r
+static
void
SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* MSInterfaceInfo, const bool IsDataRead)
\r
{
\r
uint32_t BlockAddress;
\r
uint16_t TotalBlocks;
\r
{
\r
uint32_t BlockAddress;
\r
uint16_t TotalBlocks;
\r
@@
-297,7
+273,7
@@
static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* MSInterfaceInfo
SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE,
\r
SCSI_ASENSEQ_NO_QUALIFIER);
\r
\r
SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE,
\r
SCSI_ASENSEQ_NO_QUALIFIER);
\r
\r
- return
false
;
\r
+ return;
\r
}
\r
\r
#if (TOTAL_LUNS > 1)
\r
}
\r
\r
#if (TOTAL_LUNS > 1)
\r
@@
-314,5
+290,5
@@
static bool SCSI_Command_ReadWrite_10(USB_ClassInfo_MS_Device_t* MSInterfaceInfo
/* Update the bytes transferred counter and succeed the command */
\r
MSInterfaceInfo->State.CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE);
\r
\r
/* Update the bytes transferred counter and succeed the command */
\r
MSInterfaceInfo->State.CommandBlock.DataTransferLength -= ((uint32_t)TotalBlocks * VIRTUAL_MEMORY_BLOCK_SIZE);
\r
\r
- return
true
;
\r
+ return;
\r
}
\r
}
\r