- /* Type defines: */
- /** Type define for a Mass Storage class Command Block Wrapper, used to wrap SCSI
- * commands for transport over the USB bulk endpoints to the device.
- */
- typedef struct
- {
- uint32_t Signature; /**< Command block signature, always equal to CBW_SIGNATURE */
- uint32_t Tag; /**< Current CBW tag, to positively associate a CBW with a CSW (filled automatically) */
- uint32_t DataTransferLength; /**< Length of data to transfer, following the CBW */
- uint8_t Flags; /**< Block flags, equal to one of the COMMAND_DIRECTION_DATA_* macros */
- uint8_t LUN; /**< Logical Unit Number the CBW is addressed to in the device */
- uint8_t SCSICommandLength; /**< Length of the SCSI command in the CBW */
- uint8_t SCSICommandData[16]; /**< SCSI command to issue to the device */
- } CommandBlockWrapper_t;
-
- /** Type define for a Mass Storage class Command Status Wrapper, used to wrap SCSI
- * responses for transport over the USB bulk endpoints from the device.
- */
- typedef struct
- {
- uint32_t Signature; /**< Command status signature, always equal to CSW_SIGNATURE */
- uint32_t Tag; /**< Current CBW tag, to positively associate a CBW with a CSW */
- uint32_t DataTransferResidue; /**< Length of data not transferred */
- uint8_t Status; /**< Command status, a value from the MassStorageHost_CommandStatusCodes_t enum */
- } CommandStatusWrapper_t;
-
- /** Type define for a SCSI Sense structure. Structures of this type are filled out by the
- * device via the \ref MassStore_RequestSense() function, indicating the current sense data of the
- * device (giving explicit error codes for the last issued command). For details of the
- * structure contents, refer to the SCSI specifications.
- */
- typedef struct
- {
- uint8_t ResponseCode;
-
- uint8_t SegmentNumber;
-
- unsigned char SenseKey : 4;
- unsigned char Reserved : 1;
- unsigned char ILI : 1;
- unsigned char EOM : 1;
- unsigned char FileMark : 1;
-
- uint8_t Information[4];
- uint8_t AdditionalLength;
- uint8_t CmdSpecificInformation[4];
- uint8_t AdditionalSenseCode;
- uint8_t AdditionalSenseQualifier;
- uint8_t FieldReplaceableUnitCode;
- uint8_t SenseKeySpecific[3];
- } SCSI_Request_Sense_Response_t;
-
- /** Type define for a SCSI Inquiry structure. Structures of this type are filled out by the
- * device via the \ref MassStore_Inquiry() function, retrieving the attached device's information.
- * For details of the structure contents, refer to the SCSI specifications.
- */
- typedef struct
- {
- unsigned char DeviceType : 5;
- unsigned char PeripheralQualifier : 3;
-
- unsigned char Reserved : 7;
- unsigned char Removable : 1;
-
- uint8_t Version;
-
- unsigned char ResponseDataFormat : 4;
- unsigned char Reserved2 : 1;
- unsigned char NormACA : 1;
- unsigned char TrmTsk : 1;
- unsigned char AERC : 1;
-
- uint8_t AdditionalLength;
- uint8_t Reserved3[2];
-
- unsigned char SoftReset : 1;
- unsigned char CmdQue : 1;
- unsigned char Reserved4 : 1;
- unsigned char Linked : 1;
- unsigned char Sync : 1;
- unsigned char WideBus16Bit : 1;
- unsigned char WideBus32Bit : 1;
- unsigned char RelAddr : 1;
-
- uint8_t VendorID[8];
- uint8_t ProductID[16];
- uint8_t RevisionID[4];
- } SCSI_Inquiry_Response_t;
-
- /** SCSI capacity structure, to hold the total capacity of the device in both the number
- * of blocks in the current LUN, and the size of each block. This structure is filled by
- * the device when the \ref MassStore_ReadCapacity() function is called.
- */
- typedef struct
- {
- uint32_t Blocks; /**< Number of blocks in the addressed LUN of the device */
- uint32_t BlockSize; /**< Number of bytes in each block in the addressed LUN */
- } SCSI_Capacity_t;
-
- /* Enums: */
- /** CSW status return codes, indicating the overall status of the issued CBW. */
- enum MassStorageHost_CommandStatusCodes_t
- {
- Command_Pass = 0, /**< Command completed successfully */
- Command_Fail = 1, /**< Command failed to complete successfully */
- Phase_Error = 2 /**< Phase error while processing the issued command */
- };
-