2 #if (USE_STM32_USB_HOST_MODE || USE_STM32_USB_USE_DEVICE_MODE || USE_STM32_USB_OTG_MODE)
31 #ifndef __USB_CORE_H__
32 #define __USB_CORE_H__
35 #include "config/usb_conf.h"
36 #include "stm32/usb/usb_regs.h"
37 #include "stm32/usb/usb_defines.h"
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
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
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
73 #define MAX_DATA_LENGTH 0x200
118 typedef struct USB_OTG_hc
135 USB_OTG_HC , *PUSB_OTG_HC;
137 typedef struct USB_OTG_ep
143 uint8_t data_pid_start;
144 uint8_t even_odd_frame;
145 uint16_t tx_fifo_num;
153 uint32_t rem_data_len;
154 uint32_t total_data_len;
155 uint32_t ctl_data_len;
159 USB_OTG_EP , *PUSB_OTG_EP;
163 typedef struct USB_OTG_core_cfg
165 uint8_t host_channels;
166 uint8_t dev_endpoints;
170 uint16_t TotalFifoSize;
177 USB_OTG_CORE_CFGS, *PUSB_OTG_CORE_CFGS;
181 typedef struct usb_setup_req {
190 typedef struct _Device_TypeDef
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;
211 typedef struct _Device_cb
213 uint8_t (*Init) (
void *pdev , uint8_t cfgidx);
214 uint8_t (*DeInit) (
void *pdev , uint8_t cfgidx);
216 uint8_t (*Setup) (
void *pdev , USB_SETUP_REQ *req);
217 uint8_t (*EP0_TxSent) (
void *pdev );
218 uint8_t (*EP0_RxReady) (
void *pdev );
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);
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);
231 #ifdef USB_SUPPORT_USER_STRING_DESC
232 uint8_t *(*GetUsrStrDescriptor)( uint8_t speed ,uint8_t index, uint16_t *length);
235 } USBD_Class_cb_TypeDef;
239 typedef struct _USBD_USR_PROP
242 void (*DeviceReset)(uint8_t speed);
243 void (*DeviceConfigured)(void);
244 void (*DeviceSuspended)(void);
245 void (*DeviceResumed)(void);
247 void (*DeviceConnected)(void);
248 void (*DeviceDisconnected)(void);
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;
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;
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];
286 HCD_DEV , *USB_OTG_USBH_PDEV;
292 uint8_t OTG_PrevState;
295 OTG_DEV , *USB_OTG_USBO_PDEV;
297 typedef struct USB_OTG_handle
299 USB_OTG_CORE_CFGS cfg;
300 USB_OTG_CORE_REGS regs;
301 #ifdef USE_DEVICE_MODE
311 USB_OTG_CORE_HANDLE , *PUSB_OTG_CORE_HANDLE;
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 ,
346 USB_OTG_STS USB_OTG_WritePacket (USB_OTG_CORE_HANDLE *pdev ,
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);
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,
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);
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);
407 extern USB_OTG_CORE_HANDLE USB_OTG_Core;
libheivs configuration file