discoverpixy
usbh_core.h
Go to the documentation of this file.
1 
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 
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 
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 
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 
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 
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 *,
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 }
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 
230 
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 
273 #endif /* __USBH_CORE_H */
274 
286 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
287 
288 
289 
USBH_Status USBH_DeInit(USB_OTG_CORE_HANDLE *pdev, USBH_HOST *phost)
USBH_DeInit Re-Initialize Host.
Definition: usbh_core.c:184
Host layer Header file.
Definition: usbh_def.h:268
void USBH_ErrorHandle(USBH_HOST *phost, USBH_Status errType)
USBH_ErrorHandle This function handles the Error on Host side.
Definition: usbh_core.c:363
Definition: usb_core.h:287
Definition: usbh_def.h:202
void USBH_Process(USB_OTG_CORE_HANDLE *pdev, USBH_HOST *phost)
USBH_Process USB Host core main state machine process.
Definition: usbh_core.c:210
Definition: usbh_def.h:225
Definition: usbh_core.h:144
Definition: usbh_core.h:161
Definition: usbh_def.h:180
Definition: usbh_def.h:239
Definition: usbh_def.h:252
Definition: usbh_core.h:215
Definitions used in the USB host library.
void USBH_Init(USB_OTG_CORE_HANDLE *pdev, USB_OTG_CORE_ID_TypeDef coreID, USBH_HOST *phost, USBH_Class_cb_TypeDef *class_cb, USBH_Usr_cb_TypeDef *usr_cb)
USBH_Init Host hardware and stack initializations.
Definition: usbh_core.c:142
Definition: usbh_core.h:188
Definition: usbh_core.h:174