LUFA Library  120730
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Common Class Definitions

Data Structures

struct  MS_CommandBlockWrapper_t
 Mass Storage Class Command Block Wrapper. More...
struct  MS_CommandStatusWrapper_t
 Mass Storage Class Command Status Wrapper. More...
struct  SCSI_Request_Sense_Response_t
 Mass Storage Class SCSI Sense Structure. More...
struct  SCSI_Inquiry_Response_t
 Mass Storage Class SCSI Inquiry Structure. More...

Macros

#define MS_CBW_SIGNATURE   0x43425355UL
#define MS_CSW_SIGNATURE   0x53425355UL
#define MS_COMMAND_DIR_DATA_OUT   (0 << 7)
#define MS_COMMAND_DIR_DATA_IN   (1 << 7)

Enumerations

enum  MS_Descriptor_ClassSubclassProtocol_t {
  MS_CSCP_MassStorageClass = 0x08,
  MS_CSCP_SCSITransparentSubclass = 0x06,
  MS_CSCP_BulkOnlyTransportProtocol = 0x50
}
enum  MS_ClassRequests_t {
  MS_REQ_GetMaxLUN = 0xFE,
  MS_REQ_MassStorageReset = 0xFF
}
enum  MS_CommandStatusCodes_t {
  MS_SCSI_COMMAND_Pass = 0,
  MS_SCSI_COMMAND_Fail = 1,
  MS_SCSI_COMMAND_PhaseError = 2
}

SCSI Commands

#define SCSI_CMD_INQUIRY   0x12
#define SCSI_CMD_REQUEST_SENSE   0x03
#define SCSI_CMD_TEST_UNIT_READY   0x00
#define SCSI_CMD_READ_CAPACITY_10   0x25
#define SCSI_CMD_SEND_DIAGNOSTIC   0x1D
#define SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL   0x1E
#define SCSI_CMD_WRITE_10   0x2A
#define SCSI_CMD_READ_10   0x28
#define SCSI_CMD_WRITE_6   0x0A
#define SCSI_CMD_READ_6   0x08
#define SCSI_CMD_VERIFY_10   0x2F
#define SCSI_CMD_MODE_SENSE_6   0x1A
#define SCSI_CMD_MODE_SENSE_10   0x5A

SCSI Sense Key Values

#define SCSI_SENSE_KEY_GOOD   0x00
#define SCSI_SENSE_KEY_RECOVERED_ERROR   0x01
#define SCSI_SENSE_KEY_NOT_READY   0x02
#define SCSI_SENSE_KEY_MEDIUM_ERROR   0x03
#define SCSI_SENSE_KEY_HARDWARE_ERROR   0x04
#define SCSI_SENSE_KEY_ILLEGAL_REQUEST   0x05
#define SCSI_SENSE_KEY_UNIT_ATTENTION   0x06
#define SCSI_SENSE_KEY_DATA_PROTECT   0x07
#define SCSI_SENSE_KEY_BLANK_CHECK   0x08
#define SCSI_SENSE_KEY_VENDOR_SPECIFIC   0x09
#define SCSI_SENSE_KEY_COPY_ABORTED   0x0A
#define SCSI_SENSE_KEY_ABORTED_COMMAND   0x0B
#define SCSI_SENSE_KEY_VOLUME_OVERFLOW   0x0D
#define SCSI_SENSE_KEY_MISCOMPARE   0x0E

SCSI Additional Sense Codes

#define SCSI_ASENSE_NO_ADDITIONAL_INFORMATION   0x00
#define SCSI_ASENSE_LOGICAL_UNIT_NOT_READY   0x04
#define SCSI_ASENSE_INVALID_FIELD_IN_CDB   0x24
#define SCSI_ASENSE_NOT_READY_TO_READY_CHANGE   0x28
#define SCSI_ASENSE_WRITE_PROTECTED   0x27
#define SCSI_ASENSE_FORMAT_ERROR   0x31
#define SCSI_ASENSE_INVALID_COMMAND   0x20
#define SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE   0x21
#define SCSI_ASENSE_MEDIUM_NOT_PRESENT   0x3A

SCSI Additional Sense Key Code Qualifiers

#define SCSI_ASENSEQ_NO_QUALIFIER   0x00
#define SCSI_ASENSEQ_FORMAT_COMMAND_FAILED   0x01
#define SCSI_ASENSEQ_INITIALIZING_COMMAND_REQUIRED   0x02
#define SCSI_ASENSEQ_OPERATION_IN_PROGRESS   0x07

Detailed Description

Module Description

Constants, Types and Enum definitions that are common to both Device and Host modes for the USB Mass Storage Class.

Macro Definition Documentation

#define MS_CBW_SIGNATURE   0x43425355UL

Magic signature for a Command Block Wrapper used in the Mass Storage Bulk-Only transport protocol.

#define MS_COMMAND_DIR_DATA_IN   (1 << 7)

Mask for a Command Block Wrapper's flags attribute to specify a command with data sent from device-to-host.

#define MS_COMMAND_DIR_DATA_OUT   (0 << 7)

Mask for a Command Block Wrapper's flags attribute to specify a command with data sent from host-to-device.

#define MS_CSW_SIGNATURE   0x53425355UL

Magic signature for a Command Status Wrapper used in the Mass Storage Bulk-Only transport protocol.

#define SCSI_ASENSE_FORMAT_ERROR   0x31

SCSI Additional Sense Code to indicate an error whilst formatting the device medium.

#define SCSI_ASENSE_INVALID_COMMAND   0x20

SCSI Additional Sense Code to indicate an invalid command was issued.

#define SCSI_ASENSE_INVALID_FIELD_IN_CDB   0x24

SCSI Additional Sense Code to indicate an invalid field was encountered while processing the issued command.

#define SCSI_ASENSE_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE   0x21

SCSI Additional Sense Code to indicate a write to a block out outside of the medium's range was issued.

#define SCSI_ASENSE_LOGICAL_UNIT_NOT_READY   0x04

SCSI Additional Sense Code to indicate that the logical unit (LUN) addressed is not ready.

#define SCSI_ASENSE_MEDIUM_NOT_PRESENT   0x3A

SCSI Additional Sense Code to indicate that no removable medium is inserted into the device.

#define SCSI_ASENSE_NO_ADDITIONAL_INFORMATION   0x00

SCSI Additional Sense Code to indicate no additional sense information is available.

#define SCSI_ASENSE_NOT_READY_TO_READY_CHANGE   0x28

SCSI Additional Sense Code to indicate that a medium that was previously indicated as not ready has now become ready for use.

#define SCSI_ASENSE_WRITE_PROTECTED   0x27

SCSI Additional Sense Code to indicate that an attempt to write to a protected area was made.

#define SCSI_ASENSEQ_FORMAT_COMMAND_FAILED   0x01

SCSI Additional Sense Qualifier Code to indicate that a medium format command failed to complete.

#define SCSI_ASENSEQ_INITIALIZING_COMMAND_REQUIRED   0x02

SCSI Additional Sense Qualifier Code to indicate that an initializing command must be issued before the issued command can be executed.

#define SCSI_ASENSEQ_NO_QUALIFIER   0x00

SCSI Additional Sense Qualifier Code to indicate no additional sense qualifier information is available.

#define SCSI_ASENSEQ_OPERATION_IN_PROGRESS   0x07

SCSI Additional Sense Qualifier Code to indicate that an operation is currently in progress.

#define SCSI_CMD_INQUIRY   0x12

SCSI Command Code for an INQUIRY command.

#define SCSI_CMD_MODE_SENSE_10   0x5A

SCSI Command Code for a MODE SENSE (10) command.

#define SCSI_CMD_MODE_SENSE_6   0x1A

SCSI Command Code for a MODE SENSE (6) command.

#define SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL   0x1E

SCSI Command Code for a PREVENT ALLOW MEDIUM REMOVAL command.

#define SCSI_CMD_READ_10   0x28

SCSI Command Code for a READ (10) command.

#define SCSI_CMD_READ_6   0x08

SCSI Command Code for a READ (6) command.

#define SCSI_CMD_READ_CAPACITY_10   0x25

SCSI Command Code for a READ CAPACITY (10) command.

#define SCSI_CMD_REQUEST_SENSE   0x03

SCSI Command Code for a REQUEST SENSE command.

#define SCSI_CMD_SEND_DIAGNOSTIC   0x1D

SCSI Command Code for a SEND DIAGNOSTIC command.

#define SCSI_CMD_TEST_UNIT_READY   0x00

SCSI Command Code for a TEST UNIT READY command.

#define SCSI_CMD_VERIFY_10   0x2F

SCSI Command Code for a VERIFY (10) command.

#define SCSI_CMD_WRITE_10   0x2A

SCSI Command Code for a WRITE (10) command.

#define SCSI_CMD_WRITE_6   0x0A

SCSI Command Code for a WRITE (6) command.

#define SCSI_SENSE_KEY_ABORTED_COMMAND   0x0B

SCSI Sense Code to indicate that the device has aborted the issued command.

#define SCSI_SENSE_KEY_BLANK_CHECK   0x08

SCSI Sense Code to indicate an error while trying to write to a write-once medium.

#define SCSI_SENSE_KEY_COPY_ABORTED   0x0A

SCSI Sense Code to indicate that an EXTENDED COPY command has aborted due to an error.

#define SCSI_SENSE_KEY_DATA_PROTECT   0x07

SCSI Sense Code to indicate that a write attempt on a protected block has been made.

#define SCSI_SENSE_KEY_GOOD   0x00

SCSI Sense Code to indicate no error has occurred.

#define SCSI_SENSE_KEY_HARDWARE_ERROR   0x04

SCSI Sense Code to indicate a hardware error has occurred.

#define SCSI_SENSE_KEY_ILLEGAL_REQUEST   0x05

SCSI Sense Code to indicate that an illegal request has been issued.

#define SCSI_SENSE_KEY_MEDIUM_ERROR   0x03

SCSI Sense Code to indicate an error whilst accessing the medium.

#define SCSI_SENSE_KEY_MISCOMPARE   0x0E

SCSI Sense Code to indicate that the source data did not match the data read from the medium.

#define SCSI_SENSE_KEY_NOT_READY   0x02

SCSI Sense Code to indicate that the device is not ready for a new command.

#define SCSI_SENSE_KEY_RECOVERED_ERROR   0x01

SCSI Sense Code to indicate that the device has recovered from an error.

#define SCSI_SENSE_KEY_UNIT_ATTENTION   0x06

SCSI Sense Code to indicate that the unit requires attention from the host to indicate a reset event, medium removal or other condition.

#define SCSI_SENSE_KEY_VENDOR_SPECIFIC   0x09

SCSI Sense Code to indicate a vendor specific error has occurred.

#define SCSI_SENSE_KEY_VOLUME_OVERFLOW   0x0D

SCSI Sense Code to indicate an attempt to write past the end of a partition has been made.

Enumeration Type Documentation

Enum for the Mass Storage class specific control requests that can be issued by the USB bus host.

Enumerator:
MS_REQ_GetMaxLUN 

Mass Storage class-specific request to retrieve the total number of Logical Units (drives) in the SCSI device.

MS_REQ_MassStorageReset 

Mass Storage class-specific request to reset the Mass Storage interface, ready for the next command.

Enum for the possible command status wrapper return status codes.

Enumerator:
MS_SCSI_COMMAND_Pass 

Command completed with no error

MS_SCSI_COMMAND_Fail 

Command failed to complete - host may check the exact error via a SCSI REQUEST SENSE command.

MS_SCSI_COMMAND_PhaseError 

Command failed due to being invalid in the current phase.

Enum for possible Class, Subclass and Protocol values of device and interface descriptors relating to the Mass Storage device class.

Enumerator:
MS_CSCP_MassStorageClass 

Descriptor Class value indicating that the device or interface belongs to the Mass Storage class.

MS_CSCP_SCSITransparentSubclass 

Descriptor Subclass value indicating that the device or interface belongs to the SCSI Transparent Command Set subclass of the Mass storage class.

MS_CSCP_BulkOnlyTransportProtocol 

Descriptor Protocol value indicating that the device or interface belongs to the Bulk Only Transport protocol of the Mass Storage class.