Merge pull request #93 from zyp/master
[fw/stlink] / example / stm32f4 / STM32_USB_HOST_Library / Core / inc / usbh_core.h
1 /**
2   ******************************************************************************
3   * @file    usbh_core.h
4   * @author  MCD Application Team
5   * @version V2.0.0
6   * @date    22-July-2011
7   * @brief   Header file for usbh_core.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_CORE_H
24 #define __USBH_CORE_H
25
26 /* Includes ------------------------------------------------------------------*/
27 #include "usb_hcd.h"
28 #include "usbh_def.h"
29 #include "usbh_conf.h"
30
31 /** @addtogroup USBH_LIB
32   * @{
33   */
34
35 /** @addtogroup USBH_LIB_CORE
36 * @{
37 */
38   
39 /** @defgroup USBH_CORE
40   * @brief This file is the Header file for usbh_core.c
41   * @{
42   */ 
43
44
45 /** @defgroup USBH_CORE_Exported_Defines
46   * @{
47   */ 
48
49 #define MSC_CLASS                         0x08
50 #define HID_CLASS                         0x03
51 #define MSC_PROTOCOL                      0x50
52 #define CBI_PROTOCOL                      0x01
53
54
55 #define USBH_MAX_ERROR_COUNT                            2
56 #define USBH_DEVICE_ADDRESS_DEFAULT                     0
57 #define USBH_DEVICE_ADDRESS                             1
58
59
60 /**
61   * @}
62   */ 
63
64
65 /** @defgroup USBH_CORE_Exported_Types
66   * @{
67   */
68
69 typedef enum {
70   USBH_OK   = 0,
71   USBH_BUSY,
72   USBH_FAIL,
73   USBH_NOT_SUPPORTED,
74   USBH_UNRECOVERED_ERROR,
75   USBH_ERROR_SPEED_UNKNOWN,
76   USBH_APPLY_DEINIT
77 }USBH_Status;
78
79 /* Following states are used for gState */
80 typedef enum {
81   HOST_IDLE =0,
82   HOST_ISSUE_CORE_RESET,
83   HOST_DEV_ATTACHED,
84   HOST_DEV_DISCONNECTED,  
85   HOST_ISSUE_RESET,
86   HOST_DETECT_DEVICE_SPEED,
87   HOST_ENUMERATION,
88   HOST_CLASS_REQUEST,  
89   HOST_CLASS,
90   HOST_CTRL_XFER,
91   HOST_USR_INPUT,
92   HOST_SUSPENDED,
93   HOST_ERROR_STATE  
94 }HOST_State;  
95
96 /* Following states are used for EnumerationState */
97 typedef enum {
98   ENUM_IDLE = 0,
99   ENUM_GET_FULL_DEV_DESC,
100   ENUM_SET_ADDR,
101   ENUM_GET_CFG_DESC,
102   ENUM_GET_FULL_CFG_DESC,
103   ENUM_GET_MFC_STRING_DESC,
104   ENUM_GET_PRODUCT_STRING_DESC,
105   ENUM_GET_SERIALNUM_STRING_DESC,
106   ENUM_SET_CONFIGURATION,
107   ENUM_DEV_CONFIGURED
108 } ENUM_State;  
109
110
111
112 /* Following states are used for CtrlXferStateMachine */
113 typedef enum {
114   CTRL_IDLE =0,
115   CTRL_SETUP,
116   CTRL_SETUP_WAIT,
117   CTRL_DATA_IN,
118   CTRL_DATA_IN_WAIT,
119   CTRL_DATA_OUT,
120   CTRL_DATA_OUT_WAIT,
121   CTRL_STATUS_IN,
122   CTRL_STATUS_IN_WAIT,
123   CTRL_STATUS_OUT,
124   CTRL_STATUS_OUT_WAIT,
125   CTRL_ERROR
126 }
127 CTRL_State;  
128
129 typedef enum {
130   USBH_USR_NO_RESP   = 0,
131   USBH_USR_RESP_OK = 1,
132 }
133 USBH_USR_Status;
134
135 /* Following states are used for RequestState */
136 typedef enum {
137   CMD_IDLE =0,
138   CMD_SEND,
139   CMD_WAIT
140 } CMD_State;  
141
142
143
144 typedef struct _Ctrl
145 {
146   uint8_t               hc_num_in; 
147   uint8_t               hc_num_out; 
148   uint8_t               ep0size;  
149   uint8_t               *buff;
150   uint16_t              length;
151   uint8_t               errorcount;
152   uint16_t              timer;  
153   CTRL_STATUS           status;
154   USB_Setup_TypeDef     setup;
155   CTRL_State            state;  
156
157 } USBH_Ctrl_TypeDef;
158
159
160
161 typedef struct _DeviceProp
162 {
163   
164   uint8_t                           address;
165   uint8_t                           speed;
166   USBH_DevDesc_TypeDef              Dev_Desc;
167   USBH_CfgDesc_TypeDef              Cfg_Desc;  
168   USBH_InterfaceDesc_TypeDef        Itf_Desc[USBH_MAX_NUM_INTERFACES];
169   USBH_EpDesc_TypeDef               Ep_Desc[USBH_MAX_NUM_INTERFACES][USBH_MAX_NUM_ENDPOINTS];
170   USBH_HIDDesc_TypeDef              HID_Desc;
171   
172 }USBH_Device_TypeDef;
173
174 typedef struct _USBH_Class_cb
175 {
176   USBH_Status  (*Init)\
177     (USB_OTG_CORE_HANDLE *pdev , void *phost);
178   void         (*DeInit)\
179     (USB_OTG_CORE_HANDLE *pdev , void *phost);
180   USBH_Status  (*Requests)\
181     (USB_OTG_CORE_HANDLE *pdev , void *phost);  
182   USBH_Status  (*Machine)\
183     (USB_OTG_CORE_HANDLE *pdev , void *phost);     
184   
185 } USBH_Class_cb_TypeDef;
186
187
188 typedef struct _USBH_USR_PROP
189 {
190   void (*Init)(void);       /* HostLibInitialized */
191   void (*DeInit)(void);       /* HostLibInitialized */  
192   void (*DeviceAttached)(void);           /* DeviceAttached */
193   void (*ResetDevice)(void);
194   void (*DeviceDisconnected)(void); 
195   void (*OverCurrentDetected)(void);  
196   void (*DeviceSpeedDetected)(uint8_t DeviceSpeed);          /* DeviceSpeed */
197   void (*DeviceDescAvailable)(void *);    /* DeviceDescriptor is available */
198   void (*DeviceAddressAssigned)(void);  /* Address is assigned to USB Device */
199   void (*ConfigurationDescAvailable)(USBH_CfgDesc_TypeDef *,
200                                      USBH_InterfaceDesc_TypeDef *,
201                                      USBH_EpDesc_TypeDef *); 
202   /* Configuration Descriptor available */
203   void (*ManufacturerString)(void *);     /* ManufacturerString*/
204   void (*ProductString)(void *);          /* ProductString*/
205   void (*SerialNumString)(void *);        /* SerialNubString*/
206   void (*EnumerationDone)(void);           /* Enumeration finished */
207   USBH_USR_Status (*UserInput)(void);
208   int (*USBH_USR_MSC_Application) (void);
209   void (*USBH_USR_DeviceNotSupported)(void); /* Device is not supported*/
210   void (*UnrecoveredError)(void);
211
212 }
213 USBH_Usr_cb_TypeDef;
214
215 typedef struct _Host_TypeDef
216 {
217   HOST_State            gState;       /*  Host State Machine Value */
218   HOST_State            gStateBkp;    /* backup of previous State machine value */
219   ENUM_State            EnumState;    /* Enumeration state Machine */
220   CMD_State             RequestState;       
221   USBH_Ctrl_TypeDef     Control;
222   
223   USBH_Device_TypeDef   device_prop; 
224   
225   USBH_Class_cb_TypeDef               *class_cb;  
226   USBH_Usr_cb_TypeDef                 *usr_cb;
227
228   
229 } USBH_HOST, *pUSBH_HOST;
230
231 /**
232   * @}
233   */ 
234
235
236
237 /** @defgroup USBH_CORE_Exported_Macros
238   * @{
239   */ 
240
241 /**
242   * @}
243   */ 
244
245 /** @defgroup USBH_CORE_Exported_Variables
246   * @{
247   */ 
248
249 /**
250   * @}
251   */ 
252
253 /** @defgroup USBH_CORE_Exported_FunctionsPrototype
254   * @{
255   */ 
256 void USBH_Init(USB_OTG_CORE_HANDLE *pdev,
257                USB_OTG_CORE_ID_TypeDef coreID, 
258                USBH_HOST *phost,                    
259                USBH_Class_cb_TypeDef *class_cb, 
260                USBH_Usr_cb_TypeDef *usr_cb);
261                
262 USBH_Status USBH_DeInit(USB_OTG_CORE_HANDLE *pdev, 
263                         USBH_HOST *phost);
264 void USBH_Process(USB_OTG_CORE_HANDLE *pdev , 
265                   USBH_HOST *phost);
266 void USBH_ErrorHandle(USBH_HOST *phost, 
267                       USBH_Status errType);
268
269 /**
270   * @}
271   */ 
272
273 #endif /* __USBH_CORE_H */
274 /**
275   * @}
276   */ 
277
278 /**
279   * @}
280   */ 
281
282 /**
283 * @}
284 */ 
285
286 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
287
288
289