Added USB Device library sources
[fw/stlink] / example / stm32f4 / STM32_USB_Device_Library / Class / msc / inc / usbd_msc_scsi.h
1 /**
2   ******************************************************************************
3   * @file    usbd_msc_scsi.h
4   * @author  MCD Application Team
5   * @version V1.0.0
6   * @date    22-July-2011
7   * @brief   header for the usbd_msc_scsi.c file
8   ******************************************************************************
9   * @attention
10   *
11   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
12   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
13   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
14   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
15   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
16   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
17   *
18   * <h2><center>&copy; COPYRIGHT 2011 STMicroelectronics</center></h2>
19   ******************************************************************************
20   */ 
21
22 /* Define to prevent recursive inclusion -------------------------------------*/
23 #ifndef __USBD_MSC_SCSI_H
24 #define __USBD_MSC_SCSI_H
25
26 /* Includes ------------------------------------------------------------------*/
27 #include "usbd_def.h"
28
29 /** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
30   * @{
31   */
32   
33 /** @defgroup USBD_SCSI
34   * @brief header file for the storage disk file
35   * @{
36   */ 
37
38 /** @defgroup USBD_SCSI_Exported_Defines
39   * @{
40   */ 
41
42 #define SENSE_LIST_DEEPTH                          4
43
44 /* SCSI Commands */
45 #define SCSI_FORMAT_UNIT                            0x04
46 #define SCSI_INQUIRY                                0x12
47 #define SCSI_MODE_SELECT6                           0x15
48 #define SCSI_MODE_SELECT10                          0x55
49 #define SCSI_MODE_SENSE6                            0x1A
50 #define SCSI_MODE_SENSE10                           0x5A
51 #define SCSI_ALLOW_MEDIUM_REMOVAL                   0x1E
52 #define SCSI_READ6                                  0x08
53 #define SCSI_READ10                                 0x28
54 #define SCSI_READ12                                 0xA8
55 #define SCSI_READ16                                 0x88
56
57 #define SCSI_READ_CAPACITY10                        0x25
58 #define SCSI_READ_CAPACITY16                        0x9E
59
60 #define SCSI_REQUEST_SENSE                          0x03
61 #define SCSI_START_STOP_UNIT                        0x1B
62 #define SCSI_TEST_UNIT_READY                        0x00
63 #define SCSI_WRITE6                                 0x0A
64 #define SCSI_WRITE10                                0x2A
65 #define SCSI_WRITE12                                0xAA
66 #define SCSI_WRITE16                                0x8A
67
68 #define SCSI_VERIFY10                               0x2F
69 #define SCSI_VERIFY12                               0xAF
70 #define SCSI_VERIFY16                               0x8F
71
72 #define SCSI_SEND_DIAGNOSTIC                        0x1D
73 #define SCSI_READ_FORMAT_CAPACITIES                 0x23
74
75 #define NO_SENSE                                    0
76 #define RECOVERED_ERROR                             1
77 #define NOT_READY                                   2
78 #define MEDIUM_ERROR                                3
79 #define HARDWARE_ERROR                              4
80 #define ILLEGAL_REQUEST                             5
81 #define UNIT_ATTENTION                              6
82 #define DATA_PROTECT                                7
83 #define BLANK_CHECK                                 8
84 #define VENDOR_SPECIFIC                             9
85 #define COPY_ABORTED                               10
86 #define ABORTED_COMMAND                            11
87 #define VOLUME_OVERFLOW                            13
88 #define MISCOMPARE                                 14
89
90
91 #define INVALID_CDB                                 0x20
92 #define INVALID_FIELED_IN_COMMAND                   0x24
93 #define PARAMETER_LIST_LENGTH_ERROR                 0x1A
94 #define INVALID_FIELD_IN_PARAMETER_LIST             0x26
95 #define ADDRESS_OUT_OF_RANGE                        0x21
96 #define MEDIUM_NOT_PRESENT                          0x3A
97 #define MEDIUM_HAVE_CHANGED                         0x28
98 #define WRITE_PROTECTED                             0x27 
99 #define UNRECOVERED_READ_ERROR                      0x11
100 #define WRITE_FAULT                                 0x03 
101
102 #define READ_FORMAT_CAPACITY_DATA_LEN               0x0C
103 #define READ_CAPACITY10_DATA_LEN                    0x08
104 #define MODE_SENSE10_DATA_LEN                       0x08
105 #define MODE_SENSE6_DATA_LEN                        0x04
106 #define REQUEST_SENSE_DATA_LEN                      0x12
107 #define STANDARD_INQUIRY_DATA_LEN                   0x24
108 #define BLKVFY                                      0x04
109
110 extern  uint8_t Page00_Inquiry_Data[];
111 extern  uint8_t Standard_Inquiry_Data[];
112 extern  uint8_t Standard_Inquiry_Data2[];
113 extern  uint8_t Mode_Sense6_data[];
114 extern  uint8_t Mode_Sense10_data[];
115 extern  uint8_t Scsi_Sense_Data[];
116 extern  uint8_t ReadCapacity10_Data[];
117 extern  uint8_t ReadFormatCapacity_Data [];
118 /**
119   * @}
120   */ 
121
122
123 /** @defgroup USBD_SCSI_Exported_TypesDefinitions
124   * @{
125   */
126
127 typedef struct _SENSE_ITEM {                
128   char Skey;
129   union {
130     struct _ASCs {
131       char ASC;
132       char ASCQ;
133     }b;
134     unsigned int        ASC;
135     char *pData;
136   } w;
137 } SCSI_Sense_TypeDef; 
138 /**
139   * @}
140   */ 
141
142 /** @defgroup USBD_SCSI_Exported_Macros
143   * @{
144   */ 
145
146 /**
147   * @}
148   */ 
149
150 /** @defgroup USBD_SCSI_Exported_Variables
151   * @{
152   */ 
153 extern SCSI_Sense_TypeDef     SCSI_Sense [SENSE_LIST_DEEPTH]; 
154 extern uint8_t   SCSI_Sense_Head;
155 extern uint8_t   SCSI_Sense_Tail;
156
157 /**
158   * @}
159   */ 
160 /** @defgroup USBD_SCSI_Exported_FunctionsPrototype
161   * @{
162   */ 
163 int8_t SCSI_ProcessCmd(USB_OTG_CORE_HANDLE  *pdev,
164                            uint8_t lun, 
165                            uint8_t *cmd);
166
167 void   SCSI_SenseCode(uint8_t lun, 
168                     uint8_t sKey, 
169                     uint8_t ASC);
170
171 /**
172   * @}
173   */ 
174
175 #endif /* __USBD_MSC_SCSI_H */
176 /**
177   * @}
178   */ 
179
180 /**
181   * @}
182   */ 
183
184 /**
185 * @}
186 */ 
187
188 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
189