27e96598d4b7638600b72fb89ede26f0f4300ce8
[fw/stlink] / example / stm32f4 / STM32_USB_HOST_Library / Class / MSC / inc / usbh_msc_bot.h
1 /**
2   ******************************************************************************
3   * @file    usbh_msc_bot.h
4   * @author  MCD Application Team
5   * @version V2.0.0
6   * @date    22-July-2011
7   * @brief   Header file for usbh_msc_bot.c
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  ----------------------------------------------*/
23 #ifndef __USBH_MSC_BOT_H__
24 #define __USBH_MSC_BOT_H__
25
26 /* Includes ------------------------------------------------------------------*/
27 #include "usbh_stdreq.h"
28
29
30 /** @addtogroup USBH_LIB
31   * @{
32   */
33
34 /** @addtogroup USBH_CLASS
35   * @{
36   */
37
38 /** @addtogroup USBH_MSC_CLASS
39   * @{
40   */
41   
42 /** @defgroup USBH_MSC_BOT
43   * @brief This file is the Header file for usbh_msc_core.c
44   * @{
45   */ 
46
47
48 /** @defgroup USBH_MSC_BOT_Exported_Types
49   * @{
50   */ 
51
52 typedef union _USBH_CBW_Block
53 {
54   struct __CBW
55   {
56     uint32_t CBWSignature;
57     uint32_t CBWTag;
58     uint32_t CBWTransferLength;
59     uint8_t CBWFlags;
60     uint8_t CBWLUN; 
61     uint8_t CBWLength;
62     uint8_t CBWCB[16];
63 }field;
64   uint8_t CBWArray[31];
65 }HostCBWPkt_TypeDef;
66
67 typedef enum
68 {
69   USBH_MSC_BOT_INIT_STATE = 0,                
70   USBH_MSC_BOT_RESET,                
71   USBH_MSC_GET_MAX_LUN,              
72   USBH_MSC_TEST_UNIT_READY,          
73   USBH_MSC_READ_CAPACITY10,
74   USBH_MSC_MODE_SENSE6,
75   USBH_MSC_REQUEST_SENSE,            
76   USBH_MSC_BOT_USB_TRANSFERS,        
77   USBH_MSC_DEFAULT_APPLI_STATE,  
78   USBH_MSC_CTRL_ERROR_STATE,
79   USBH_MSC_UNRECOVERED_STATE
80 }
81 MSCState;
82
83
84 typedef struct _BOTXfer
85 {
86 uint8_t MSCState;
87 uint8_t MSCStateBkp;
88 uint8_t MSCStateCurrent;
89 uint8_t CmdStateMachine;
90 uint8_t BOTState;
91 uint8_t BOTStateBkp;
92 uint8_t* pRxTxBuff;
93 uint16_t DataLength;
94 uint8_t BOTXferErrorCount;
95 uint8_t BOTXferStatus;
96 } USBH_BOTXfer_TypeDef;
97
98
99 typedef union _USBH_CSW_Block
100 {
101   struct __CSW
102   {
103     uint32_t CSWSignature;
104     uint32_t CSWTag;
105     uint32_t CSWDataResidue;
106     uint8_t  CSWStatus;
107   }field;
108   uint8_t CSWArray[13];
109 }HostCSWPkt_TypeDef;
110
111 /**
112   * @}
113   */ 
114
115
116
117 /** @defgroup USBH_MSC_BOT_Exported_Defines
118   * @{
119   */ 
120 #define USBH_MSC_SEND_CBW                 1
121 #define USBH_MSC_SENT_CBW                 2
122 #define USBH_MSC_BOT_DATAIN_STATE         3
123 #define USBH_MSC_BOT_DATAOUT_STATE        4
124 #define USBH_MSC_RECEIVE_CSW_STATE        5
125 #define USBH_MSC_DECODE_CSW               6
126 #define USBH_MSC_BOT_ERROR_IN             7
127 #define USBH_MSC_BOT_ERROR_OUT            8
128
129
130 #define USBH_MSC_BOT_CBW_SIGNATURE        0x43425355
131 #define USBH_MSC_BOT_CBW_TAG              0x20304050             
132 #define USBH_MSC_BOT_CSW_SIGNATURE        0x53425355           
133 #define USBH_MSC_CSW_DATA_LENGTH          0x000D
134 #define USBH_MSC_BOT_CBW_PACKET_LENGTH    31
135 #define USBH_MSC_CSW_LENGTH               13  
136 #define USBH_MSC_CSW_MAX_LENGTH           63     
137
138 /* CSW Status Definitions */
139 #define USBH_MSC_CSW_CMD_PASSED           0x00
140 #define USBH_MSC_CSW_CMD_FAILED           0x01
141 #define USBH_MSC_CSW_PHASE_ERROR          0x02
142
143 #define USBH_MSC_SEND_CSW_DISABLE         0
144 #define USBH_MSC_SEND_CSW_ENABLE          1
145
146 #define USBH_MSC_DIR_IN                   0
147 #define USBH_MSC_DIR_OUT                  1
148 #define USBH_MSC_BOTH_DIR                 2
149
150 //#define USBH_MSC_PAGE_LENGTH                 0x40
151 #define USBH_MSC_PAGE_LENGTH              512
152
153
154 #define CBW_CB_LENGTH                     16
155 #define CBW_LENGTH                        10
156 #define CBW_LENGTH_TEST_UNIT_READY         6
157
158 #define USB_REQ_BOT_RESET                0xFF
159 #define USB_REQ_GET_MAX_LUN              0xFE
160
161 #define MAX_BULK_STALL_COUNT_LIMIT       0x04   /* If STALL is seen on Bulk 
162                                          Endpoint continously, this means 
163                                          that device and Host has phase error
164                                          Hence a Reset is needed */
165
166 /**
167   * @}
168   */ 
169
170 /** @defgroup USBH_MSC_BOT_Exported_Macros
171   * @{
172   */ 
173 /**
174   * @}
175   */ 
176
177 /** @defgroup USBH_MSC_BOT_Exported_Variables
178   * @{
179   */ 
180 extern USBH_BOTXfer_TypeDef USBH_MSC_BOTXferParam;
181 extern HostCBWPkt_TypeDef USBH_MSC_CBWData;
182 extern HostCSWPkt_TypeDef USBH_MSC_CSWData;
183 /**
184   * @}
185   */ 
186
187 /** @defgroup USBH_MSC_BOT_Exported_FunctionsPrototype
188   * @{
189   */ 
190 void USBH_MSC_HandleBOTXfer(USB_OTG_CORE_HANDLE *pdev,
191                             USBH_HOST *phost);
192 uint8_t USBH_MSC_DecodeCSW(USB_OTG_CORE_HANDLE *pdev,
193                            USBH_HOST *phost);
194 void USBH_MSC_Init(USB_OTG_CORE_HANDLE *pdev);
195 USBH_Status USBH_MSC_BOT_Abort(USB_OTG_CORE_HANDLE *pdev, 
196                                USBH_HOST *phost,
197                                uint8_t direction);
198 /**
199   * @}
200   */ 
201
202 #endif  //__USBH_MSC_BOT_H__
203
204
205 /**
206   * @}
207   */ 
208
209 /**
210   * @}
211   */
212
213 /**
214   * @}
215   */ 
216
217 /**
218   * @}
219   */
220 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
221