ARMEBS4  revision-26.06.2015
usb_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 usb_core.h
6  * @author MCD Application Team
7  * @version V2.1.0
8  * @date 19-March-2012
9  * @brief Header of the Core Layer
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 inclusion -------------------------------------*/
31 #ifndef __USB_CORE_H__
32 #define __USB_CORE_H__
33 
34 /* Includes ------------------------------------------------------------------*/
35 #include "config/usb_conf.h"
36 #include "stm32/usb/usb_regs.h"
37 #include "stm32/usb/usb_defines.h"
38 
39 /** @addtogroup USB_OTG_DRIVER
40  * @{
41  */
42 
43 /** @defgroup USB_CORE
44  * @brief usb otg driver core layer
45  * @{
46  */
47 
48 
49 /** @defgroup USB_CORE_Exported_Defines
50  * @{
51  */
52 
53 #define USB_OTG_EP0_IDLE 0
54 #define USB_OTG_EP0_SETUP 1
55 #define USB_OTG_EP0_DATA_IN 2
56 #define USB_OTG_EP0_DATA_OUT 3
57 #define USB_OTG_EP0_STATUS_IN 4
58 #define USB_OTG_EP0_STATUS_OUT 5
59 #define USB_OTG_EP0_STALL 6
60 
61 #define USB_OTG_EP_TX_DIS 0x0000
62 #define USB_OTG_EP_TX_STALL 0x0010
63 #define USB_OTG_EP_TX_NAK 0x0020
64 #define USB_OTG_EP_TX_VALID 0x0030
65 
66 #define USB_OTG_EP_RX_DIS 0x0000
67 #define USB_OTG_EP_RX_STALL 0x1000
68 #define USB_OTG_EP_RX_NAK 0x2000
69 #define USB_OTG_EP_RX_VALID 0x3000
70 /**
71  * @}
72  */
73 #define MAX_DATA_LENGTH 0x200
74 
75 /** @defgroup USB_CORE_Exported_Types
76  * @{
77  */
78 
79 
80 typedef enum {
81  USB_OTG_OK = 0,
82  USB_OTG_FAIL
83 }USB_OTG_STS;
84 
85 typedef enum {
86  HC_IDLE = 0,
87  HC_XFRC,
88  HC_HALTED,
89  HC_NAK,
90  HC_NYET,
91  HC_STALL,
92  HC_XACTERR,
93  HC_BBLERR,
94  HC_DATATGLERR,
95 }HC_STATUS;
96 
97 typedef enum {
98  URB_IDLE = 0,
99  URB_DONE,
100  URB_NOTREADY,
101  URB_ERROR,
102  URB_STALL
103 }URB_STATE;
104 
105 typedef enum {
106  CTRL_START = 0,
107  CTRL_XFRC,
108  CTRL_HALTED,
109  CTRL_NAK,
110  CTRL_STALL,
111  CTRL_XACTERR,
112  CTRL_BBLERR,
113  CTRL_DATATGLERR,
114  CTRL_FAIL
115 }CTRL_STATUS;
116 
117 
118 typedef struct USB_OTG_hc
119 {
120  uint8_t dev_addr ;
121  uint8_t ep_num;
122  uint8_t ep_is_in;
123  uint8_t speed;
124  uint8_t do_ping;
125  uint8_t ep_type;
126  uint16_t max_packet;
127  uint8_t data_pid;
128  uint8_t *xfer_buff;
129  uint32_t xfer_len;
130  uint32_t xfer_count;
131  uint8_t toggle_in;
132  uint8_t toggle_out;
133  uint32_t dma_addr;
134 }
135 USB_OTG_HC , *PUSB_OTG_HC;
136 
137 typedef struct USB_OTG_ep
138 {
139  uint8_t num;
140  uint8_t is_in;
141  uint8_t is_stall;
142  uint8_t type;
143  uint8_t data_pid_start;
144  uint8_t even_odd_frame;
145  uint16_t tx_fifo_num;
146  uint32_t maxpacket;
147  /* transaction level variables*/
148  uint8_t *xfer_buff;
149  uint32_t dma_addr;
150  uint32_t xfer_len;
151  uint32_t xfer_count;
152  /* Transfer level variables*/
153  uint32_t rem_data_len;
154  uint32_t total_data_len;
155  uint32_t ctl_data_len;
156 
157 }
158 
159 USB_OTG_EP , *PUSB_OTG_EP;
160 
161 
162 
163 typedef struct USB_OTG_core_cfg
164 {
165  uint8_t host_channels;
166  uint8_t dev_endpoints;
167  uint8_t speed;
168  uint8_t dma_enable;
169  uint16_t mps;
170  uint16_t TotalFifoSize;
171  uint8_t phy_itface;
172  uint8_t Sof_output;
173  uint8_t low_power;
174  uint8_t coreID;
175 
176 }
177 USB_OTG_CORE_CFGS, *PUSB_OTG_CORE_CFGS;
178 
179 
180 
181 typedef struct usb_setup_req {
182 
183  uint8_t bmRequest;
184  uint8_t bRequest;
185  uint16_t wValue;
186  uint16_t wIndex;
187  uint16_t wLength;
188 } USB_SETUP_REQ;
189 
190 typedef struct _Device_TypeDef
191 {
192  uint8_t *(*GetDeviceDescriptor)( uint8_t speed , uint16_t *length);
193  uint8_t *(*GetLangIDStrDescriptor)( uint8_t speed , uint16_t *length);
194  uint8_t *(*GetManufacturerStrDescriptor)( uint8_t speed , uint16_t *length);
195  uint8_t *(*GetProductStrDescriptor)( uint8_t speed , uint16_t *length);
196  uint8_t *(*GetSerialStrDescriptor)( uint8_t speed , uint16_t *length);
197  uint8_t *(*GetConfigurationStrDescriptor)( uint8_t speed , uint16_t *length);
198  uint8_t *(*GetInterfaceStrDescriptor)( uint8_t speed , uint16_t *length);
199 } USBD_DEVICE, *pUSBD_DEVICE;
200 
201 //typedef struct USB_OTG_hPort
202 //{
203 // void (*Disconnect) (void *phost);
204 // void (*Connect) (void *phost);
205 // uint8_t ConnStatus;
206 // uint8_t DisconnStatus;
207 // uint8_t ConnHandled;
208 // uint8_t DisconnHandled;
209 //} USB_OTG_hPort_TypeDef;
210 
211 typedef struct _Device_cb
212 {
213  uint8_t (*Init) (void *pdev , uint8_t cfgidx);
214  uint8_t (*DeInit) (void *pdev , uint8_t cfgidx);
215  /* Control Endpoints*/
216  uint8_t (*Setup) (void *pdev , USB_SETUP_REQ *req);
217  uint8_t (*EP0_TxSent) (void *pdev );
218  uint8_t (*EP0_RxReady) (void *pdev );
219  /* Class Specific Endpoints*/
220  uint8_t (*DataIn) (void *pdev , uint8_t epnum);
221  uint8_t (*DataOut) (void *pdev , uint8_t epnum);
222  uint8_t (*SOF) (void *pdev);
223  uint8_t (*IsoINIncomplete) (void *pdev);
224  uint8_t (*IsoOUTIncomplete) (void *pdev);
225 
226  uint8_t *(*GetConfigDescriptor)( uint8_t speed , uint16_t *length);
227 #ifdef USB_OTG_HS_CORE
228  uint8_t *(*GetOtherConfigDescriptor)( uint8_t speed , uint16_t *length);
229 #endif
230 
231 #ifdef USB_SUPPORT_USER_STRING_DESC
232  uint8_t *(*GetUsrStrDescriptor)( uint8_t speed ,uint8_t index, uint16_t *length);
233 #endif
234 
235 } USBD_Class_cb_TypeDef;
236 
237 
238 
239 typedef struct _USBD_USR_PROP
240 {
241  void (*Init)(void);
242  void (*DeviceReset)(uint8_t speed);
243  void (*DeviceConfigured)(void);
244  void (*DeviceSuspended)(void);
245  void (*DeviceResumed)(void);
246 
247  void (*DeviceConnected)(void);
248  void (*DeviceDisconnected)(void);
249 
250 }
251 USBD_Usr_cb_TypeDef;
252 
253 typedef struct _DCD
254 {
255  uint8_t device_config;
256  uint8_t device_state;
257  uint8_t device_status;
258  uint8_t device_old_status;
259  uint8_t device_address;
260  uint8_t connection_status;
261  uint8_t test_mode;
262  uint32_t DevRemoteWakeup;
263  USB_OTG_EP in_ep [USB_OTG_MAX_TX_FIFOS];
264  USB_OTG_EP out_ep [USB_OTG_MAX_TX_FIFOS];
265  uint8_t setup_packet [8*3];
266  USBD_Class_cb_TypeDef *class_cb;
267  USBD_Usr_cb_TypeDef *usr_cb;
268  USBD_DEVICE *usr_device;
269  uint8_t *pConfig_descriptor;
270  }
271 DCD_DEV , *DCD_PDEV;
272 
273 
274 typedef struct _HCD
275 {
276  uint8_t Rx_Buffer [MAX_DATA_LENGTH];
277  __IO uint32_t ConnSts;
278  __IO uint32_t ErrCnt[USB_OTG_MAX_TX_FIFOS];
279  __IO uint32_t XferCnt[USB_OTG_MAX_TX_FIFOS];
280  __IO HC_STATUS HC_Status[USB_OTG_MAX_TX_FIFOS];
281  __IO URB_STATE URB_State[USB_OTG_MAX_TX_FIFOS];
282  USB_OTG_HC hc [USB_OTG_MAX_TX_FIFOS];
283  uint16_t channel [USB_OTG_MAX_TX_FIFOS];
284 // USB_OTG_hPort_TypeDef *port_cb;
285 }
286 HCD_DEV , *USB_OTG_USBH_PDEV;
287 
288 
289 typedef struct _OTG
290 {
291  uint8_t OTG_State;
292  uint8_t OTG_PrevState;
293  uint8_t OTG_Mode;
294 }
295 OTG_DEV , *USB_OTG_USBO_PDEV;
296 
297 typedef struct USB_OTG_handle
298 {
299  USB_OTG_CORE_CFGS cfg;
300  USB_OTG_CORE_REGS regs;
301 #ifdef USE_DEVICE_MODE
302  DCD_DEV dev;
303 #endif
304 #ifdef USE_HOST_MODE
305  HCD_DEV host;
306 #endif
307 #ifdef USE_OTG_MODE
308  OTG_DEV otg;
309 #endif
310 }
311 USB_OTG_CORE_HANDLE , *PUSB_OTG_CORE_HANDLE;
312 
313 /**
314  * @}
315  */
316 
317 
318 /** @defgroup USB_CORE_Exported_Macros
319  * @{
320  */
321 
322 /**
323  * @}
324  */
325 
326 /** @defgroup USB_CORE_Exported_Variables
327  * @{
328  */
329 /**
330  * @}
331  */
332 
333 /** @defgroup USB_CORE_Exported_FunctionsPrototype
334  * @{
335  */
336 
337 
338 USB_OTG_STS USB_OTG_CoreInit (USB_OTG_CORE_HANDLE *pdev);
339 USB_OTG_STS USB_OTG_SelectCore (USB_OTG_CORE_HANDLE *pdev,
340  USB_OTG_CORE_ID_TypeDef coreID);
341 USB_OTG_STS USB_OTG_EnableGlobalInt (USB_OTG_CORE_HANDLE *pdev);
342 USB_OTG_STS USB_OTG_DisableGlobalInt(USB_OTG_CORE_HANDLE *pdev);
343 void* USB_OTG_ReadPacket (USB_OTG_CORE_HANDLE *pdev ,
344  uint8_t *dest,
345  uint16_t len);
346 USB_OTG_STS USB_OTG_WritePacket (USB_OTG_CORE_HANDLE *pdev ,
347  uint8_t *src,
348  uint8_t ch_ep_num,
349  uint16_t len);
350 USB_OTG_STS USB_OTG_FlushTxFifo (USB_OTG_CORE_HANDLE *pdev , uint32_t num);
351 USB_OTG_STS USB_OTG_FlushRxFifo (USB_OTG_CORE_HANDLE *pdev);
352 
353 uint32_t USB_OTG_ReadCoreItr (USB_OTG_CORE_HANDLE *pdev);
354 uint32_t USB_OTG_ReadOtgItr (USB_OTG_CORE_HANDLE *pdev);
355 uint8_t USB_OTG_IsHostMode (USB_OTG_CORE_HANDLE *pdev);
356 uint8_t USB_OTG_IsDeviceMode (USB_OTG_CORE_HANDLE *pdev);
357 uint32_t USB_OTG_GetMode (USB_OTG_CORE_HANDLE *pdev);
358 USB_OTG_STS USB_OTG_PhyInit (USB_OTG_CORE_HANDLE *pdev);
359 USB_OTG_STS USB_OTG_SetCurrentMode (USB_OTG_CORE_HANDLE *pdev,
360  uint8_t mode);
361 
362 /*********************** HOST APIs ********************************************/
363 #ifdef USE_HOST_MODE
364 USB_OTG_STS USB_OTG_CoreInitHost (USB_OTG_CORE_HANDLE *pdev);
365 USB_OTG_STS USB_OTG_EnableHostInt (USB_OTG_CORE_HANDLE *pdev);
366 USB_OTG_STS USB_OTG_HC_Init (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num);
367 USB_OTG_STS USB_OTG_HC_Halt (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num);
368 USB_OTG_STS USB_OTG_HC_StartXfer (USB_OTG_CORE_HANDLE *pdev, uint8_t hc_num);
369 USB_OTG_STS USB_OTG_HC_DoPing (USB_OTG_CORE_HANDLE *pdev , uint8_t hc_num);
370 uint32_t USB_OTG_ReadHostAllChannels_intr (USB_OTG_CORE_HANDLE *pdev);
371 uint32_t USB_OTG_ResetPort (USB_OTG_CORE_HANDLE *pdev);
372 uint32_t USB_OTG_ReadHPRT0 (USB_OTG_CORE_HANDLE *pdev);
373 void USB_OTG_DriveVbus (USB_OTG_CORE_HANDLE *pdev, uint8_t state);
374 void USB_OTG_InitFSLSPClkSel (USB_OTG_CORE_HANDLE *pdev ,uint8_t freq);
375 uint8_t USB_OTG_IsEvenFrame (USB_OTG_CORE_HANDLE *pdev) ;
376 void USB_OTG_StopHost (USB_OTG_CORE_HANDLE *pdev);
377 #endif
378 /********************* DEVICE APIs ********************************************/
379 #ifdef USE_DEVICE_MODE
380 USB_OTG_STS USB_OTG_CoreInitDev (USB_OTG_CORE_HANDLE *pdev);
381 USB_OTG_STS USB_OTG_EnableDevInt (USB_OTG_CORE_HANDLE *pdev);
382 uint32_t USB_OTG_ReadDevAllInEPItr (USB_OTG_CORE_HANDLE *pdev);
383 enum USB_OTG_SPEED USB_OTG_GetDeviceSpeed (USB_OTG_CORE_HANDLE *pdev);
384 USB_OTG_STS USB_OTG_EP0Activate (USB_OTG_CORE_HANDLE *pdev);
385 USB_OTG_STS USB_OTG_EPActivate (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
386 USB_OTG_STS USB_OTG_EPDeactivate(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
387 USB_OTG_STS USB_OTG_EPStartXfer (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
388 USB_OTG_STS USB_OTG_EP0StartXfer(USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
389 USB_OTG_STS USB_OTG_EPSetStall (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
390 USB_OTG_STS USB_OTG_EPClearStall (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep);
391 uint32_t USB_OTG_ReadDevAllOutEp_itr (USB_OTG_CORE_HANDLE *pdev);
392 uint32_t USB_OTG_ReadDevOutEP_itr (USB_OTG_CORE_HANDLE *pdev , uint8_t epnum);
393 uint32_t USB_OTG_ReadDevAllInEPItr (USB_OTG_CORE_HANDLE *pdev);
394 void USB_OTG_InitDevSpeed (USB_OTG_CORE_HANDLE *pdev , uint8_t speed);
395 uint8_t USBH_IsEvenFrame (USB_OTG_CORE_HANDLE *pdev);
396 void USB_OTG_EP0_OutStart(USB_OTG_CORE_HANDLE *pdev);
397 void USB_OTG_ActiveRemoteWakeup(USB_OTG_CORE_HANDLE *pdev);
398 void USB_OTG_UngateClock(USB_OTG_CORE_HANDLE *pdev);
399 void USB_OTG_StopDevice(USB_OTG_CORE_HANDLE *pdev);
400 void USB_OTG_SetEPStatus (USB_OTG_CORE_HANDLE *pdev , USB_OTG_EP *ep , uint32_t Status);
401 uint32_t USB_OTG_GetEPStatus(USB_OTG_CORE_HANDLE *pdev ,USB_OTG_EP *ep);
402 #endif
403 /**
404  * @}
405  */
406 
407 extern USB_OTG_CORE_HANDLE USB_OTG_Core;
408 
409 #endif /* __USB_CORE_H__ */
410 
411 
412 /**
413  * @}
414  */
415 
416 /**
417  * @}
418  */
419 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
420 #endif /* (USE_STM32_USB_HOST_MODE || USE_STM32_USB_USE_DEVICE_MODE || USE_STM32_USB_OTG_MODE) */
libheivs configuration file