ARMEBS4  revision-26.06.2015
usbh_core.h
1 #include "heivs/config.h"
2 #if (USE_STM32_USB_HOST_MODE || USE_STM32_USB_USE_DEVICE_MODE || USE_STM32_USB_OTG_MODE)
3 /**
4  ******************************************************************************
5  * @file usbh_core.h
6  * @author MCD Application Team
7  * @version V2.1.0
8  * @date 19-March-2012
9  * @brief Header file for usbh_core.c
10  ******************************************************************************
11  * @attention
12  *
13  * <h2><center>&copy; COPYRIGHT 2012 STMicroelectronics</center></h2>
14  *
15  * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
16  * You may not use this file except in compliance with the License.
17  * You may obtain a copy of the License at:
18  *
19  * http://www.st.com/software_license_agreement_liberty_v2
20  *
21  * Unless required by applicable law or agreed to in writing, software
22  * distributed under the License is distributed on an "AS IS" BASIS,
23  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24  * See the License for the specific language governing permissions and
25  * limitations under the License.
26  *
27  ******************************************************************************
28  */
29 
30 /* Define to prevent recursive ----------------------------------------------*/
31 #ifndef __USBH_CORE_H
32 #define __USBH_CORE_H
33 
34 /* Includes ------------------------------------------------------------------*/
35 #include "config/usb_conf.h"
36 #if defined(USE_HOST_MODE)
37 #include "stm32/usb/usb_hcd.h"
38 #include "stm32/usb/usbh_def.h"
39 
40 
41 
42 #include "config/usbh_conf.h"
43 
44 /** @addtogroup USBH_LIB
45  * @{
46  */
47 
48 /** @addtogroup USBH_LIB_CORE
49 * @{
50 */
51 
52 /** @defgroup USBH_CORE
53  * @brief This file is the Header file for usbh_core.c
54  * @{
55  */
56 
57 
58 /** @defgroup USBH_CORE_Exported_Defines
59  * @{
60  */
61 
62 #define MSC_CLASS 0x08
63 #define HID_CLASS 0x03
64 #define MSC_PROTOCOL 0x50
65 #define CBI_PROTOCOL 0x01
66 
67 
68 #define USBH_MAX_ERROR_COUNT 2
69 #define USBH_DEVICE_ADDRESS_DEFAULT 0
70 #define USBH_DEVICE_ADDRESS 1
71 
72 
73 /**
74  * @}
75  */
76 
77 
78 /** @defgroup USBH_CORE_Exported_Types
79  * @{
80  */
81 
82 typedef enum {
83  USBH_OK = 0,
84  USBH_BUSY,
85  USBH_FAIL,
86  USBH_NOT_SUPPORTED,
87  USBH_UNRECOVERED_ERROR,
88  USBH_ERROR_SPEED_UNKNOWN,
89  USBH_APPLY_DEINIT
90 }USBH_Status;
91 
92 /* Following states are used for gState */
93 typedef enum {
94  HOST_IDLE =0,
95  HOST_DEV_ATTACHED,
96  HOST_DEV_DISCONNECTED,
97  HOST_DETECT_DEVICE_SPEED,
98  HOST_ENUMERATION,
99  HOST_CLASS_REQUEST,
100  HOST_CLASS,
101  HOST_CTRL_XFER,
102  HOST_USR_INPUT,
103  HOST_SUSPENDED,
104  HOST_ERROR_STATE
105 }HOST_State;
106 
107 /* Following states are used for EnumerationState */
108 typedef enum {
109  ENUM_IDLE = 0,
110  ENUM_GET_FULL_DEV_DESC,
111  ENUM_SET_ADDR,
112  ENUM_GET_CFG_DESC,
113  ENUM_GET_FULL_CFG_DESC,
114  ENUM_GET_MFC_STRING_DESC,
115  ENUM_GET_PRODUCT_STRING_DESC,
116  ENUM_GET_SERIALNUM_STRING_DESC,
117  ENUM_SET_CONFIGURATION,
118  ENUM_DEV_CONFIGURED
119 } ENUM_State;
120 
121 
122 
123 /* Following states are used for CtrlXferStateMachine */
124 typedef enum {
125  CTRL_IDLE =0,
126  CTRL_SETUP,
127  CTRL_SETUP_WAIT,
128  CTRL_DATA_IN,
129  CTRL_DATA_IN_WAIT,
130  CTRL_DATA_OUT,
131  CTRL_DATA_OUT_WAIT,
132  CTRL_STATUS_IN,
133  CTRL_STATUS_IN_WAIT,
134  CTRL_STATUS_OUT,
135  CTRL_STATUS_OUT_WAIT,
136  CTRL_ERROR,
137  CTRL_STALLED,
138  CTRL_COMPLETE
139 }
140 CTRL_State;
141 
142 typedef enum {
143  USBH_USR_NO_RESP = 0,
144  USBH_USR_RESP_OK = 1,
145 }
146 USBH_USR_Status;
147 
148 /* Following states are used for RequestState */
149 typedef enum {
150  CMD_IDLE =0,
151  CMD_SEND,
152  CMD_WAIT
153 } CMD_State;
154 
155 
156 
157 typedef struct _Ctrl
158 {
159  uint8_t hc_num_in;
160  uint8_t hc_num_out;
161  uint8_t ep0size;
162  uint8_t *buff;
163  uint16_t length;
164  uint8_t errorcount;
165  uint16_t timer;
166  CTRL_STATUS status;
167  USB_Setup_TypeDef setup;
168  CTRL_State state;
169 
170 } USBH_Ctrl_TypeDef;
171 
172 
173 
174 typedef struct _DeviceProp
175 {
176 
177  uint8_t address;
178  uint8_t speed;
179  USBH_DevDesc_TypeDef Dev_Desc;
180  USBH_CfgDesc_TypeDef Cfg_Desc;
181  USBH_InterfaceDesc_TypeDef Itf_Desc[USBH_MAX_NUM_INTERFACES];
182  USBH_EpDesc_TypeDef Ep_Desc[USBH_MAX_NUM_INTERFACES][USBH_MAX_NUM_ENDPOINTS];
183  USBH_HIDDesc_TypeDef HID_Desc;
184 
185 }USBH_Device_TypeDef;
186 
187 typedef struct _USBH_Class_cb
188 {
189  USBH_Status (*Init)\
190  (USB_OTG_CORE_HANDLE *pdev , void *phost);
191  void (*DeInit)\
192  (USB_OTG_CORE_HANDLE *pdev , void *phost);
193  USBH_Status (*Requests)\
194  (USB_OTG_CORE_HANDLE *pdev , void *phost);
195  USBH_Status (*Machine)\
196  (USB_OTG_CORE_HANDLE *pdev , void *phost);
197 
198 } USBH_Class_cb_TypeDef;
199 
200 
201 typedef struct _USBH_USR_PROP
202 {
203  void (*Init)(void); /* HostLibInitialized */
204  void (*DeInit)(void); /* HostLibInitialized */
205  void (*DeviceAttached)(void); /* DeviceAttached */
206  void (*ResetDevice)(void);
207  void (*DeviceDisconnected)(void);
208  void (*OverCurrentDetected)(void);
209  void (*DeviceSpeedDetected)(uint8_t DeviceSpeed); /* DeviceSpeed */
210  void (*DeviceDescAvailable)(void *); /* DeviceDescriptor is available */
211  void (*DeviceAddressAssigned)(void); /* Address is assigned to USB Device */
212  void (*ConfigurationDescAvailable)(USBH_CfgDesc_TypeDef *,
213  USBH_InterfaceDesc_TypeDef *,
214  USBH_EpDesc_TypeDef *);
215  /* Configuration Descriptor available */
216  void (*ManufacturerString)(void *); /* ManufacturerString*/
217  void (*ProductString)(void *); /* ProductString*/
218  void (*SerialNumString)(void *); /* SerialNubString*/
219  void (*EnumerationDone)(void); /* Enumeration finished */
220  USBH_USR_Status (*UserInput)(void);
221  int (*UserApplication) (void);
222  void (*DeviceNotSupported)(void); /* Device is not supported*/
223  void (*UnrecoveredError)(void);
224 
225 }
226 USBH_Usr_cb_TypeDef;
227 
228 typedef struct _Host_TypeDef
229 {
230  HOST_State gState; /* Host State Machine Value */
231  HOST_State gStateBkp; /* backup of previous State machine value */
232  ENUM_State EnumState; /* Enumeration state Machine */
233  CMD_State RequestState;
234  USBH_Ctrl_TypeDef Control;
235 
236  USBH_Device_TypeDef device_prop;
237 
238  USBH_Class_cb_TypeDef *class_cb;
239  USBH_Usr_cb_TypeDef *usr_cb;
240 
241 
242 } USBH_HOST, *pUSBH_HOST;
243 
244 /**
245  * @}
246  */
247 
248 
249 
250 /** @defgroup USBH_CORE_Exported_Macros
251  * @{
252  */
253 
254 /**
255  * @}
256  */
257 
258 /** @defgroup USBH_CORE_Exported_Variables
259  * @{
260  */
261 
262 /**
263  * @}
264  */
265 
266 /** @defgroup USBH_CORE_Exported_FunctionsPrototype
267  * @{
268  */
269 
270 extern USBH_HOST USB_Host;
271 
272 void USBH_Init(USB_OTG_CORE_HANDLE *pdev,
273  USB_OTG_CORE_ID_TypeDef coreID,
274  USBH_HOST *phost,
275  USBH_Class_cb_TypeDef *class_cb,
276  USBH_Usr_cb_TypeDef *usr_cb);
277 
278 USBH_Status USBH_DeInit(USB_OTG_CORE_HANDLE *pdev,
279  USBH_HOST *phost);
280 void USBH_Process(USB_OTG_CORE_HANDLE *pdev ,
281  USBH_HOST *phost);
282 void USBH_ErrorHandle(USBH_HOST *phost,
283  USBH_Status errType);
284 
285 /**
286  * @}
287  */
288 
289 #endif /* __USBH_CORE_H */
290 /**
291  * @}
292  */
293 
294 /**
295  * @}
296  */
297 
298 /**
299 * @}
300 */
301 
302 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
303 #endif
304 #endif /* (USE_STM32_USB_HOST_MODE || USE_STM32_USB_USE_DEVICE_MODE || USE_STM32_USB_OTG_MODE) */
static struct audio_setup_t setup
Definition: audio_stm32.c:90
libheivs configuration file