Add more const-ness to the stream endpoint/pipe functions where possible.
[pub/USBasp.git] / LUFA / Drivers / USB / Class / Common / MassStorage.h
index e869333..761141b 100644 (file)
@@ -1,13 +1,13 @@
 /*
              LUFA Library
 /*
              LUFA Library
-     Copyright (C) Dean Camera, 2010.
+     Copyright (C) Dean Camera, 2011.
 
   dean [at] fourwalledcubicle [dot] com
 
   dean [at] fourwalledcubicle [dot] com
-      www.fourwalledcubicle.com
+           www.lufa-lib.org
 */
 
 /*
 */
 
 /*
-  Copyright 2010  Dean Camera (dean [at] fourwalledcubicle [dot] com)
+  Copyright 2011  Dean Camera (dean [at] fourwalledcubicle [dot] com)
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
 
   Permission to use, copy, modify, distribute, and sell this
   software and its documentation for any purpose is hereby granted
@@ -40,7 +40,7 @@
 /** \ingroup Group_USBClassMS
  *  @defgroup Group_USBClassMSCommon  Common Class Definitions
  *
 /** \ingroup Group_USBClassMS
  *  @defgroup Group_USBClassMSCommon  Common Class Definitions
  *
- *  \section Module Description
+ *  \section Sec_ModDescription Module Description
  *  Constants, Types and Enum definitions that are common to both Device and Host modes for the USB
  *  Mass Storage Class.
  *
  *  Constants, Types and Enum definitions that are common to both Device and Host modes for the USB
  *  Mass Storage Class.
  *
@@ -78,6 +78,8 @@
                /** 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_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_IN                         (1 << 7)
 
+               /** \name SCSI Commands*/
+               //@{
                /** SCSI Command Code for an INQUIRY command. */
                #define SCSI_CMD_INQUIRY                               0x12
 
                /** SCSI Command Code for an INQUIRY command. */
                #define SCSI_CMD_INQUIRY                               0x12
 
 
                /** SCSI Command Code for a MODE SENSE (10) command. */
                #define SCSI_CMD_MODE_SENSE_10                         0x5A
 
                /** SCSI Command Code for a MODE SENSE (10) command. */
                #define SCSI_CMD_MODE_SENSE_10                         0x5A
-
+               //@}
+               
+               /** \name SCSI Sense Key Values */
+               //@{
                /** SCSI Sense Code to indicate no error has occurred. */
                #define SCSI_SENSE_KEY_GOOD                            0x00
 
                /** SCSI Sense Code to indicate no error has occurred. */
                #define SCSI_SENSE_KEY_GOOD                            0x00
 
 
                /** SCSI Sense Code to indicate that the source data did not match the data read from 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_MISCOMPARE                      0x0E
-
+               //@}
+               
+               /** \name SCSI Additional Sense Codes */
+               //@{
                /** SCSI Additional Sense Code to indicate no additional sense information is available. */
                #define SCSI_ASENSE_NO_ADDITIONAL_INFORMATION          0x00
 
                /** SCSI Additional Sense Code to indicate no additional sense information is available. */
                #define SCSI_ASENSE_NO_ADDITIONAL_INFORMATION          0x00
 
 
                /** SCSI Additional Sense Code to indicate that no removable medium is inserted into the device. */
                #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_MEDIUM_NOT_PRESENT                 0x3A
-
+               //@}
+               
+               /** \name SCSI Additional Sense Key Code Qualifiers */
+               //@{
                /** SCSI Additional Sense Qualifier Code to indicate no additional sense qualifier information is available. */
                #define SCSI_ASENSEQ_NO_QUALIFIER                      0x00
 
                /** SCSI Additional Sense Qualifier Code to indicate no additional sense qualifier information is available. */
                #define SCSI_ASENSEQ_NO_QUALIFIER                      0x00
 
 
                /** SCSI Additional Sense Qualifier Code to indicate that an operation is currently in progress. */
                #define SCSI_ASENSEQ_OPERATION_IN_PROGRESS             0x07
 
                /** SCSI Additional Sense Qualifier Code to indicate that an operation is currently in progress. */
                #define SCSI_ASENSEQ_OPERATION_IN_PROGRESS             0x07
-
+               //@}
+               
        /* Enums: */
        /* Enums: */
+               /** Enum for possible Class, Subclass and Protocol values of device and interface descriptors relating to the Mass
+                *  Storage device class.
+                */
+               enum MS_Descriptor_ClassSubclassProtocol_t
+               {
+                       MS_CSCP_MassStorageClass          = 0x08, /**< Descriptor Class value indicating that the device or interface
+                                                                  *   belongs to the Mass Storage class.
+                                                                  */
+                       MS_CSCP_SCSITransparentSubclass   = 0x06, /**< 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 = 0x50, /**< Descriptor Protocol value indicating that the device or interface
+                                                                  *   belongs to the Bulk Only Transport protocol of the Mass Storage class.
+                                                                  */
+               };
+       
                /** Enum for the Mass Storage class specific control requests that can be issued by the USB bus host. */
                enum MS_ClassRequests_t
                {
                /** Enum for the Mass Storage class specific control requests that can be issued by the USB bus host. */
                enum MS_ClassRequests_t
                {
-                       MS_REQ_GetMaxLUN        = 0xFE, /**< Mass Storage class-specific request to retrieve the total number of Logical
-                                                        *   Units (drives) in the SCSI device.
-                                                        */
-                       MS_REQ_MassStorageReset = 0xFF, /**< Mass Storage class-specific request to reset the Mass Storage interface,
-                                                        *   ready for the next command.
-                                                    */
+                       MS_REQ_GetMaxLUN                  = 0xFE, /**< Mass Storage class-specific request to retrieve the total number of Logical
+                                                                  *   Units (drives) in the SCSI device.
+                                                                  */
+                       MS_REQ_MassStorageReset           = 0xFF, /**< 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. */
                enum MS_CommandStatusCodes_t
                {
                };
 
                /** Enum for the possible command status wrapper return status codes. */
                enum MS_CommandStatusCodes_t
                {
-                       MS_SCSI_COMMAND_Pass        = 0, /**< Command completed with no error */
-                       MS_SCSI_COMMAND_Fail        = 1, /**< Command failed to complete - host may check the exact error via a
-                                                         *   SCSI REQUEST SENSE command.
-                                                         */
-                       MS_SCSI_COMMAND_PhaseError  = 2, /**< Command failed due to being invalid in the current phase. */
+                       MS_SCSI_COMMAND_Pass              = 0, /**< Command completed with no error */
+                       MS_SCSI_COMMAND_Fail              = 1, /**< Command failed to complete - host may check the exact error via a
+                                                               *   SCSI REQUEST SENSE command.
+                                                               */
+                       MS_SCSI_COMMAND_PhaseError        = 2, /**< Command failed due to being invalid in the current phase. */
                };
 
        /* Type Defines: */
                };
 
        /* Type Defines: */
                 *  Type define for a Command Block Wrapper, used in the Mass Storage Bulk-Only Transport protocol. */
                typedef struct
                {
                 *  Type define for a Command Block Wrapper, used in the Mass Storage Bulk-Only Transport protocol. */
                typedef struct
                {
-                       uint32_t Signature; /**< Command block signature, must be CBW_SIGNATURE to indicate a valid Command Block. */
+                       uint32_t Signature; /**< Command block signature, must be \ref MS_CBW_SIGNATURE to indicate a valid Command Block. */
                        uint32_t Tag; /**< Unique command ID value, to associate a command block wrapper with its command status wrapper. */
                        uint32_t DataTransferLength; /**< Length of the optional data portion of the issued command, in bytes. */
                        uint8_t  Flags; /**< Command block flags, indicating command data direction. */
                        uint32_t Tag; /**< Unique command ID value, to associate a command block wrapper with its command status wrapper. */
                        uint32_t DataTransferLength; /**< Length of the optional data portion of the issued command, in bytes. */
                        uint8_t  Flags; /**< Command block flags, indicating command data direction. */
                 */
                typedef struct
                {
                 */
                typedef struct
                {
-                       uint32_t Signature; /**< Status block signature, must be CSW_SIGNATURE to indicate a valid Command Status. */
+                       uint32_t Signature; /**< Status block signature, must be \ref MS_CSW_SIGNATURE to indicate a valid Command Status. */
                        uint32_t Tag; /**< Unique command ID value, to associate a command block wrapper with its command status wrapper. */
                        uint32_t DataTransferResidue; /**< Number of bytes of data not processed in the SCSI command. */
                        uint8_t  Status; /**< Status code of the issued command - a value from the \ref MS_CommandStatusCodes_t enum. */
                        uint32_t Tag; /**< Unique command ID value, to associate a command block wrapper with its command status wrapper. */
                        uint32_t DataTransferResidue; /**< Number of bytes of data not processed in the SCSI command. */
                        uint8_t  Status; /**< Status code of the issued command - a value from the \ref MS_CommandStatusCodes_t enum. */