discoverpixy
usb_core.h
Go to the documentation of this file.
1 
22 /* Define to prevent recursive inclusion -------------------------------------*/
23 #ifndef __USB_CORE_H__
24 #define __USB_CORE_H__
25 
26 /* Includes ------------------------------------------------------------------*/
27 #include "usb_conf.h"
28 #include "usb_regs.h"
29 #include "usb_defines.h"
30 
31 
46 #define USB_OTG_EP0_IDLE 0
47 #define USB_OTG_EP0_SETUP 1
48 #define USB_OTG_EP0_DATA_IN 2
49 #define USB_OTG_EP0_DATA_OUT 3
50 #define USB_OTG_EP0_STATUS_IN 4
51 #define USB_OTG_EP0_STATUS_OUT 5
52 #define USB_OTG_EP0_STALL 6
53 
54 #define USB_OTG_EP_TX_DIS 0x0000
55 #define USB_OTG_EP_TX_STALL 0x0010
56 #define USB_OTG_EP_TX_NAK 0x0020
57 #define USB_OTG_EP_TX_VALID 0x0030
58 
59 #define USB_OTG_EP_RX_DIS 0x0000
60 #define USB_OTG_EP_RX_STALL 0x1000
61 #define USB_OTG_EP_RX_NAK 0x2000
62 #define USB_OTG_EP_RX_VALID 0x3000
63 
66 #define MAX_DATA_LENGTH 0xFF
67 
73 typedef enum {
74  USB_OTG_OK = 0,
75  USB_OTG_FAIL
76 }USB_OTG_STS;
77 
78 typedef enum {
79  HC_IDLE = 0,
80  HC_XFRC,
81  HC_HALTED,
82  HC_NAK,
83  HC_NYET,
84  HC_STALL,
85  HC_XACTERR,
86  HC_BBLERR,
87  HC_DATATGLERR,
88 }HC_STATUS;
89 
90 typedef enum {
91  URB_IDLE = 0,
92  URB_DONE,
93  URB_NOTREADY,
94  URB_ERROR,
95  URB_STALL
96 }URB_STATE;
97 
98 typedef enum {
99  CTRL_START = 0,
100  CTRL_XFRC,
101  CTRL_HALTED,
102  CTRL_NAK,
103  CTRL_STALL,
104  CTRL_XACTERR,
105  CTRL_BBLERR,
106  CTRL_DATATGLERR,
107  CTRL_FAIL
108 }CTRL_STATUS;
109 
110 
111 typedef struct USB_OTG_hc
112 {
113  uint8_t dev_addr ;
114  uint8_t ep_num;
115  uint8_t ep_is_in;
116  uint8_t speed;
117  uint8_t do_ping;
118  uint8_t ep_type;
119  uint16_t max_packet;
120  uint8_t data_pid;
121  uint8_t *xfer_buff;
122  uint32_t xfer_len;
123  uint32_t xfer_count;
124  uint8_t toggle_in;
125  uint8_t toggle_out;
126  uint32_t dma_addr;
127 }
129 
130 typedef struct USB_OTG_ep
131 {
132  uint8_t num;
133  uint8_t is_in;
134  uint8_t is_stall;
135  uint8_t type;
136  uint8_t data_pid_start;
137  uint8_t even_odd_frame;
138  uint16_t tx_fifo_num;
139  uint32_t maxpacket;
140  /* transaction level variables*/
141  uint8_t *xfer_buff;
142  uint32_t dma_addr;
143  uint32_t xfer_len;
144  uint32_t xfer_count;
145  /* Transfer level variables*/
146  uint32_t rem_data_len;
147  uint32_t total_data_len;
148  uint32_t ctl_data_len;
149 
150 }
151 
153 
154 
155 
156 typedef struct USB_OTG_core_cfg
157 {
158  uint8_t host_channels;
159  uint8_t dev_endpoints;
160  uint8_t speed;
161  uint8_t dma_enable;
162  uint16_t mps;
163  uint16_t TotalFifoSize;
164  uint8_t phy_itface;
165  uint8_t Sof_output;
166  uint8_t low_power;
167  uint8_t coreID;
168 
169 }
171 
172 
173 
174 typedef struct usb_setup_req {
175 
176  uint8_t bmRequest;
177  uint8_t bRequest;
178  uint16_t wValue;
179  uint16_t wIndex;
180  uint16_t wLength;
181 } USB_SETUP_REQ;
182 
183 typedef struct _Device_TypeDef
184 {
185  uint8_t *(*GetDeviceDescriptor)( uint8_t speed , uint16_t *length);
186  uint8_t *(*GetLangIDStrDescriptor)( uint8_t speed , uint16_t *length);
187  uint8_t *(*GetManufacturerStrDescriptor)( uint8_t speed , uint16_t *length);
188  uint8_t *(*GetProductStrDescriptor)( uint8_t speed , uint16_t *length);
189  uint8_t *(*GetSerialStrDescriptor)( uint8_t speed , uint16_t *length);
190  uint8_t *(*GetConfigurationStrDescriptor)( uint8_t speed , uint16_t *length);
191  uint8_t *(*GetInterfaceStrDescriptor)( uint8_t speed , uint16_t *length);
193 
194 typedef struct USB_OTG_hPort
195 {
196  void (*Disconnect) (void *phost);
197  void (*Connect) (void *phost);
198  uint8_t ConnStatus;
199  uint8_t DisconnStatus;
200  uint8_t ConnHandled;
201  uint8_t DisconnHandled;
203 
204 typedef struct _Device_cb
205 {
206  uint8_t (*Init) (void *pdev , uint8_t cfgidx);
207  uint8_t (*DeInit) (void *pdev , uint8_t cfgidx);
208  /* Control Endpoints*/
209  uint8_t (*Setup) (void *pdev , USB_SETUP_REQ *req);
210  uint8_t (*EP0_TxSent) (void *pdev );
211  uint8_t (*EP0_RxReady) (void *pdev );
212  /* Class Specific Endpoints*/
213  uint8_t (*DataIn) (void *pdev , uint8_t epnum);
214  uint8_t (*DataOut) (void *pdev , uint8_t epnum);
215  uint8_t (*SOF) (void *pdev);
216  uint8_t (*IsoINIncomplete) (void *pdev);
217  uint8_t (*IsoOUTIncomplete) (void *pdev);
218 
219  uint8_t *(*GetConfigDescriptor)( uint8_t speed , uint16_t *length);
220 #ifdef USB_OTG_HS_CORE
221  uint8_t *(*GetOtherConfigDescriptor)( uint8_t speed , uint16_t *length);
222 #endif
223 
224 #ifdef USB_SUPPORT_USER_STRING_DESC
225  uint8_t *(*GetUsrStrDescriptor)( uint8_t speed ,uint8_t index, uint16_t *length);
226 #endif
227 
229 
230 
231 
232 typedef struct _USBD_USR_PROP
233 {
234  void (*Init)(void);
235  void (*DeviceReset)(uint8_t speed);
236  void (*DeviceConfigured)(void);
237  void (*DeviceSuspended)(void);
238  void (*DeviceResumed)(void);
239 
240  void (*DeviceConnected)(void);
241  void (*DeviceDisconnected)(void);
242 
243 }
245 
246 typedef struct _DCD
247 {
248  uint8_t device_config;
249  uint8_t device_state;
250  uint8_t device_status;
251  uint8_t device_address;
252  uint32_t DevRemoteWakeup;
253  USB_OTG_EP in_ep [USB_OTG_MAX_TX_FIFOS];
254  USB_OTG_EP out_ep [USB_OTG_MAX_TX_FIFOS];
255  uint8_t setup_packet [8*3];
256  USBD_Class_cb_TypeDef *class_cb;
257  USBD_Usr_cb_TypeDef *usr_cb;
258  USBD_DEVICE *usr_device;
259  uint8_t *pConfig_descriptor;
260  }
261 DCD_DEV , *DCD_PDEV;
262 
263 
264 typedef struct _HCD
265 {
266  uint8_t Rx_Buffer [MAX_DATA_LENGTH];
267  __IO uint32_t ConnSts;
268  __IO uint32_t ErrCnt[USB_OTG_MAX_TX_FIFOS];
269  __IO uint32_t XferCnt[USB_OTG_MAX_TX_FIFOS];
270  __IO HC_STATUS HC_Status[USB_OTG_MAX_TX_FIFOS];
271  __IO URB_STATE URB_State[USB_OTG_MAX_TX_FIFOS];
272  USB_OTG_HC hc [USB_OTG_MAX_TX_FIFOS];
273  uint16_t channel [USB_OTG_MAX_TX_FIFOS];
274  USB_OTG_hPort_TypeDef *port_cb;
275 }
277 
278 
279 typedef struct _OTG
280 {
281  uint8_t OTG_State;
282  uint8_t OTG_PrevState;
283  uint8_t OTG_Mode;
284 }
286 
287 typedef struct USB_OTG_handle
288 {
289  USB_OTG_CORE_CFGS cfg;
290  USB_OTG_CORE_REGS regs;
291 #ifdef USE_DEVICE_MODE
292  DCD_DEV dev;
293 #endif
294 #ifdef USE_HOST_MODE
295  HCD_DEV host;
296 #endif
297 #ifdef USE_OTG_MODE
298  OTG_DEV otg;
299 #endif
300 }
302 
328 USB_OTG_STS USB_OTG_CoreInit (USB_OTG_CORE_HANDLE *pdev);
329 USB_OTG_STS USB_OTG_SelectCore (USB_OTG_CORE_HANDLE *pdev,
330  USB_OTG_CORE_ID_TypeDef coreID);
331 USB_OTG_STS USB_OTG_EnableGlobalInt (USB_OTG_CORE_HANDLE *pdev);
334  uint8_t *dest,
335  uint16_t len);
336 USB_OTG_STS USB_OTG_WritePacket (USB_OTG_CORE_HANDLE *pdev ,
337  uint8_t *src,
338  uint8_t ch_ep_num,
339  uint16_t len);
340 USB_OTG_STS USB_OTG_FlushTxFifo (USB_OTG_CORE_HANDLE *pdev , uint32_t num);
341 USB_OTG_STS USB_OTG_FlushRxFifo (USB_OTG_CORE_HANDLE *pdev);
342 
344 uint32_t USB_OTG_ReadOtgItr (USB_OTG_CORE_HANDLE *pdev);
347 uint32_t USB_OTG_GetMode (USB_OTG_CORE_HANDLE *pdev);
348 USB_OTG_STS USB_OTG_PhyInit (USB_OTG_CORE_HANDLE *pdev);
350  uint8_t mode);
351 
352 /*********************** HOST APIs ********************************************/
353 #ifdef USE_HOST_MODE
354 USB_OTG_STS USB_OTG_CoreInitHost (USB_OTG_CORE_HANDLE *pdev);
355 USB_OTG_STS USB_OTG_EnableHostInt (USB_OTG_CORE_HANDLE *pdev);
356 USB_OTG_STS USB_OTG_HC_Init (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num);
357 USB_OTG_STS USB_OTG_HC_Halt (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num);
358 USB_OTG_STS USB_OTG_HC_StartXfer (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num);
359 USB_OTG_STS USB_OTG_HC_DoPing (USB_OTG_CORE_HANDLE *pdev , uint8_t hc_num);
360 uint32_t USB_OTG_ReadHostAllChannels_intr (USB_OTG_CORE_HANDLE *pdev);
361 uint32_t USB_OTG_ResetPort (USB_OTG_CORE_HANDLE *pdev);
362 uint32_t USB_OTG_ReadHPRT0 (USB_OTG_CORE_HANDLE *pdev);
363 void USB_OTG_DriveVbus (USB_OTG_CORE_HANDLE *pdev, uint8_t state);
364 void USB_OTG_InitFSLSPClkSel (USB_OTG_CORE_HANDLE *pdev ,uint8_t freq);
365 uint8_t USB_OTG_IsEvenFrame (USB_OTG_CORE_HANDLE *pdev) ;
366 void USB_OTG_StopHost (USB_OTG_CORE_HANDLE *pdev);
367 #endif
368 /********************* DEVICE APIs ********************************************/
369 #ifdef USE_DEVICE_MODE
370 USB_OTG_STS USB_OTG_CoreInitDev (USB_OTG_CORE_HANDLE *pdev);
371 USB_OTG_STS USB_OTG_EnableDevInt (USB_OTG_CORE_HANDLE *pdev);
372 uint32_t USB_OTG_ReadDevAllInEPItr (USB_OTG_CORE_HANDLE *pdev);
373 enum USB_OTG_SPEED USB_OTG_GetDeviceSpeed (USB_OTG_CORE_HANDLE *pdev);
374 USB_OTG_STS USB_OTG_EP0Activate (USB_OTG_CORE_HANDLE *pdev);
375 USB_OTG_STS USB_OTG_EPActivate (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
376 USB_OTG_STS USB_OTG_EPDeactivate(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
377 USB_OTG_STS USB_OTG_EPStartXfer (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
378 USB_OTG_STS USB_OTG_EP0StartXfer(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
379 USB_OTG_STS USB_OTG_EPSetStall (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
380 USB_OTG_STS USB_OTG_EPClearStall (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
381 uint32_t USB_OTG_ReadDevAllOutEp_itr (USB_OTG_CORE_HANDLE *pdev);
382 uint32_t USB_OTG_ReadDevOutEP_itr (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum);
383 uint32_t USB_OTG_ReadDevAllInEPItr (USB_OTG_CORE_HANDLE *pdev);
384 void USB_OTG_InitDevSpeed (USB_OTG_CORE_HANDLE *pdev , uint8_t speed);
385 uint8_t USBH_IsEvenFrame (USB_OTG_CORE_HANDLE *pdev);
386 void USB_OTG_EP0_OutStart(USB_OTG_CORE_HANDLE *pdev);
387 void USB_OTG_ActiveRemoteWakeup(USB_OTG_CORE_HANDLE *pdev);
388 void USB_OTG_UngateClock(USB_OTG_CORE_HANDLE *pdev);
389 void USB_OTG_StopDevice(USB_OTG_CORE_HANDLE *pdev);
390 void USB_OTG_SetEPStatus (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep , uint32_t Status);
391 uint32_t USB_OTG_GetEPStatus(USB_OTG_CORE_HANDLE *pdev ,USB_OTG_EP *ep);
392 #endif
393 
397 #endif /* __USB_CORE_H__ */
398 
399 
407 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
408 
uint8_t USB_OTG_IsHostMode(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_IsHostMode : Check if it is host mode.
Definition: usb_core.c:610
uint8_t USB_OTG_IsDeviceMode(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_IsDeviceMode : Check if it is device mode.
Definition: usb_core.c:599
Definition: usb_core.h:174
USB_OTG_STS USB_OTG_DisableGlobalInt(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_DisableGlobalInt Enables the controller's Global Int in the AHB Config reg.
Definition: usb_core.c:481
Definition: usb_core.h:194
#define __IO
Definition: core_cm4.h:222
Definition: usb_core.h:232
USB_OTG_STS USB_OTG_SelectCore(USB_OTG_CORE_HANDLE *pdev, USB_OTG_CORE_ID_TypeDef coreID)
USB_OTG_SelectCore Initialize core registers address.
Definition: usb_core.c:216
Definition: usb_core.h:287
Definition: usb_core.h:279
Definition: usb_core.h:183
USB_OTG_STS USB_OTG_CoreInit(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_CoreInit Initializes the USB_OTG controller registers and prepares the core device mode or ho...
Definition: usb_core.c:322
hardware registers
uint32_t USB_OTG_ReadOtgItr(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_ReadOtgItr : returns the USB_OTG Interrupt register.
Definition: usb_core.c:635
uint32_t USB_OTG_ReadCoreItr(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_ReadCoreItr : returns the Core Interrupt register.
Definition: usb_core.c:621
Definition: usb_core.h:246
void * USB_OTG_ReadPacket(USB_OTG_CORE_HANDLE *pdev, uint8_t *dest, uint16_t len)
USB_OTG_ReadPacket : Reads a packet from the Rx FIFO.
Definition: usb_core.c:192
USB_OTG_STS USB_OTG_WritePacket(USB_OTG_CORE_HANDLE *pdev, uint8_t *src, uint8_t ch_ep_num, uint16_t len)
USB_OTG_WritePacket : Writes a packet into the Tx FIFO associated with the EP.
Definition: usb_core.c:163
USB_OTG_STS USB_OTG_EnableGlobalInt(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_EnableGlobalInt Enables the controller's Global Int in the AHB Config reg.
Definition: usb_core.c:463
Definition: usb_core.h:156
USB_OTG_STS USB_OTG_FlushTxFifo(USB_OTG_CORE_HANDLE *pdev, uint32_t num)
USB_OTG_FlushTxFifo : Flush a Tx FIFO.
Definition: usb_core.c:498
Definition: usb_regs.h:217
Definition: usb_core.h:130
Header of the Core Layer.
Definition: usb_core.h:111
USB_OTG_STS USB_OTG_SetCurrentMode(USB_OTG_CORE_HANDLE *pdev, uint8_t mode)
USB_OTG_SetCurrentMode : Set ID line.
Definition: usb_core.c:558
USB_OTG_STS USB_OTG_FlushRxFifo(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_FlushRxFifo : Flush a Rx FIFO.
Definition: usb_core.c:528
Definition: usb_core.h:264
uint32_t USB_OTG_GetMode(USB_OTG_CORE_HANDLE *pdev)
USB_OTG_GetMode : Get current mode.
Definition: usb_core.c:588
Definition: usb_core.h:204