GD32F1x0: USB/GD32_USB_Device_Driver/inc/usb_core.h Source File

GD32F1x0

usb_core.h
Go to the documentation of this file.
1 
11 /* Define to prevent recursive inclusion -------------------------------------*/
12 #ifndef __GD32F1X0_USB_CORE_H
13 #define __GD32F1X0_USB_CORE_H
14 
15 /* Includes ------------------------------------------------------------------*/
16 #include "usb_buf.h"
17 #include "usbd_def.h"
18 
38 #define IER_MASK (CTLR_STIE | USB_INTR_PMOU | USB_INTR_ERR | USB_INTR_WKUP | USB_INTR_SPS | \
39  USB_INTR_SOF | USB_INTR_ESOF | CTLR_RSTIE)
40 
44 #define USB_EPTYPE_CONTROL 0
45 #define USB_EPTYPE_ISOC 1
46 #define USB_EPTYPE_BULK 2
47 #define USB_EPTYPE_INT 3
48 
52 #define USB_SNG_BUFTYPE 0
53 #define USB_DBL_BUFTYPE 1
54 
58 #define USB_CTRL_IDLE 0
59 #define USB_CTRL_SETUP 1
60 #define USB_CTRL_DATA_IN 2
61 #define USB_CTRL_DATA_OUT 3
62 #define USB_CTRL_STATUS_IN 4
63 #define USB_CTRL_STATUS_OUT 5
64 
68 #define USB_EP0_MAX_SIZE 64
69 
73 #define USB_STATUS_UNCONNECTED 0
74 #define USB_STATUS_DEFAULT 1
75 #define USB_STATUS_ADDRESSED 2
76 #define USB_STATUS_CONFIGURED 3
77 #define USB_STATUS_SUSPENDED 4
78 #define USB_STATUS_CONNECTED 5
79 
91 typedef enum
92 {
93  USB_OK = 0,
94  USB_FAIL,
95 }
97 
101 typedef struct USB_ep
102 {
103  /* Basic parameters */
104  uint8_t is_stall;
105  uint8_t is_dblbuf;
106  uint16_t bufaddress;
107  uint16_t buf0addr;
108  uint16_t buf1addr;
109  uint32_t maxpacket;
110  /* Transaction level parameters */
111  uint8_t *xfer_buf;
112  uint32_t xfer_len;
113  uint32_t xfer_count;
114  /* Just for endpoint0 */
115  uint32_t ctrl_count;
116 }
117 USB_EP;
118 
122 typedef struct usb_device_req
123 {
124  uint8_t bmRequestType;
125  uint8_t bRequest;
126  uint16_t wValue;
127  uint16_t wIndex;
128  uint16_t wLength;
129 }
131 
135 typedef struct _Device_Desc_cb
136 {
137  uint8_t *(*GetDeviceDescriptor) (uint8_t USBSpeed, uint16_t *len);
138 #ifdef LPM_ENABLED
139  uint8_t *(*GetBOSDescriptor) (uint8_t USBSpeed, uint16_t *len);
140 #endif
141  uint8_t *(*GetLangIDStrDescriptor) (uint8_t USBSpeed, uint16_t *len);
142  uint8_t *(*GetManufacturerStrDescriptor) (uint8_t USBSpeed, uint16_t *len);
143  uint8_t *(*GetProductStrDescriptor) (uint8_t USBSpeed, uint16_t *len);
144  uint8_t *(*GetSerialStrDescriptor) (uint8_t USBSpeed, uint16_t *len);
145  uint8_t *(*GetConfigurationStrDescriptor) (uint8_t USBSpeed, uint16_t *len);
146  uint8_t *(*GetInterfaceStrDescriptor) (uint8_t USBSpeed, uint16_t *len);
147 }
149 
153 typedef struct _Device_Class_cb
154 {
155  uint8_t (*Init) (void *pudev, uint8_t ConfigIndex);
156  uint8_t (*DeInit) (void *pudev, uint8_t ConfigIndex);
157  /* Control endpoints handle */
158  uint8_t (*GetClassDescriptor) (void *pudev, USB_DEVICE_REQ *req);
159  uint8_t (*ClassReqHandle) (void *pudev, USB_DEVICE_REQ *req);
160  uint8_t (*GetInterface) (void *pudev, USB_DEVICE_REQ *req);
161  uint8_t (*SetInterface) (void *pudev, USB_DEVICE_REQ *req);
162  uint8_t (*EP0_TxSent) (void *pudev);
163  uint8_t (*EP0_RxReady) (void *pudev);
164  /* Class specific endpoints handle */
165  uint8_t (*DataIn) (void *pudev, uint8_t EpID);
166  uint8_t (*DataOut) (void *pudev, uint8_t EpID);
167  uint8_t (*SOF) (void *pudev);
168  uint8_t *(*GetConfigDescriptor)(uint8_t USBSpeed, uint16_t *len);
169 #ifdef USB_SUPPORT_USER_STRING_DESC
170  uint8_t *(*GetUsrStrDescriptor)(uint8_t USBSpeed, uint8_t index, uint16_t *len);
171 #endif
172  uint8_t (*ClearFeature) (void *pudev, USB_DEVICE_REQ *req);
173 }
175 
179 typedef struct _USBD_USER_cb
180 {
181  void (*DeviceInit) (void);
182  void (*DeviceReset) (uint8_t USBSpeed);
183  void (*DeviceConfigured) (void);
184  void (*DeviceSuspended) (void);
185  void (*DeviceResumed) (void);
186 }
188 
192 typedef struct _UCD
193 {
194  /* Basic parameters */
195  uint8_t speed;
196  uint8_t device_cur_config;
197  uint8_t device_cur_state;
198  uint8_t device_cur_status;
199  uint8_t device_old_status;
200  uint8_t DevRemoteWakeup;
201  uint8_t setup_packet[8];
202  /* Device endpoints */
203  USB_EP in_ep[EP_COUNT];
204  USB_EP out_ep[EP_COUNT];
205  /* Device handle callback class */
206  USBD_Class_cb_TypeDef *class_cb;
207  USBD_User_cb_TypeDef *user_cb;
208  USBD_Desc_cb_TypeDef *desc_cb;
209 }
210 UCD_DEV, *UCD_PDEV;
211 
212 typedef struct USB_Device_handle
213 {
214  UCD_DEV dev;
215 }
217 
225 void DR_Init (void);
226 void DR_StopDevice (void);
227 
228 void USB_EP_SetAddress (USB_CORE_HANDLE *pudev, uint8_t Addr);
229 void USB_EP_BufConfig (USB_CORE_HANDLE *pudev, uint8_t EpAddr, uint8_t EpKind, uint32_t BufAddr);
230 void USB_EP_Init (USB_CORE_HANDLE *pudev, uint8_t EpAddr, uint8_t EpType, uint16_t EpMps);
231 void USB_EP_DeInit (USB_CORE_HANDLE *pudev, uint8_t EpAddr);
232 void USB_EP_Tx (USB_CORE_HANDLE *pudev, uint8_t EpAddr, uint8_t *pbuf, uint16_t BufLen);
233 void USB_EP_Rx (USB_CORE_HANDLE *pudev, uint8_t EpAddr, uint8_t *pbuf, uint16_t BufLen);
234 void USB_EP_Stall (USB_CORE_HANDLE *pudev, uint8_t EpID);
235 void USB_EP_ClrStall (USB_CORE_HANDLE *pudev, uint8_t EpID);
236 
237 uint8_t USB_EP_GetStatus (USB_CORE_HANDLE *pudev, uint8_t EpID);
238 
239 uint8_t USB_CtlTx (USB_CORE_HANDLE *pudev, uint8_t *pbuf, uint16_t Len);
240 uint8_t USB_CtlContinueTx (USB_CORE_HANDLE *pudev, uint8_t *pbuf, uint16_t Len);
241 uint8_t USB_CtlRx (USB_CORE_HANDLE *pudev, uint8_t *pbuf, uint16_t Len);
242 uint8_t USB_CtlContinueRx (USB_CORE_HANDLE *pudev, uint8_t *pbuf, uint16_t Len);
243 uint8_t USB_CtlTransmitStatus (USB_CORE_HANDLE *pudev);
244 uint8_t USB_CtlReceiveStatus (USB_CORE_HANDLE *pudev);
245 
246 uint16_t USB_GetRxCount (USB_CORE_HANDLE *pudev, uint8_t EpID);
247 
252 #endif /* __GD32F1X0_USB_CORE_H */
253 
266 /************************ (C) COPYRIGHT 2014 GIGADEVICE *****END OF FILE****/
USB device class callback type define.
Definition: usb_core.h:153
void DR_StopDevice(void)
Device register configure when stop device.
Definition: usb_core.c:76
void USB_EP_Tx(USB_CORE_HANDLE *pudev, uint8_t EpAddr, uint8_t *pbuf, uint16_t BufLen)
Endpoint prepare to transmit data.
Definition: usb_core.c:376
uint8_t USB_CtlReceiveStatus(USB_CORE_HANDLE *pudev)
Receive status stage on the control pipe.
Definition: usb_core.c:623
struct usb_device_req USB_DEVICE_REQ
USB standard device request struct.
struct _UCD UCD_DEV
USB core driver type define.
void USB_EP_SetAddress(USB_CORE_HANDLE *pudev, uint8_t Addr)
Set USB device and endpoints address.
Definition: usb_core.c:501
USB_Status
USB operation status.
Definition: usb_core.h:91
USB endpoint struct.
Definition: usb_core.h:101
USB device descriptor callback type define.
Definition: usb_core.h:135
void USB_EP_DeInit(USB_CORE_HANDLE *pudev, uint8_t EpAddr)
Configure the endpoint when it is disabled.
Definition: usb_core.c:275
uint16_t USB_GetRxCount(USB_CORE_HANDLE *pudev, uint8_t EpID)
Get the received data length.
Definition: usb_core.c:640
void USB_EP_Init(USB_CORE_HANDLE *pudev, uint8_t EpAddr, uint8_t EpType, uint16_t EpMps)
Endpoint initialization.
Definition: usb_core.c:169
void USB_EP_ClrStall(USB_CORE_HANDLE *pudev, uint8_t EpID)
Clear endpoint stalled status.
Definition: usb_core.c:473
uint8_t USB_CtlTransmitStatus(USB_CORE_HANDLE *pudev)
Transmit status stage on the control pipe.
Definition: usb_core.c:609
struct USB_ep USB_EP
USB endpoint struct.
USB core driver type define.
Definition: usb_core.h:192
uint8_t USB_CtlRx(USB_CORE_HANDLE *pudev, uint8_t *pbuf, uint16_t Len)
Receive data on the control pipe.
Definition: usb_core.c:577
uint8_t USB_CtlTx(USB_CORE_HANDLE *pudev, uint8_t *pbuf, uint16_t Len)
Transmit data on the control pipe.
Definition: usb_core.c:543
void USB_EP_Stall(USB_CORE_HANDLE *pudev, uint8_t EpID)
Set an endpoint to STALL status.
Definition: usb_core.c:438
struct _USBD_USER_cb USBD_User_cb_TypeDef
USB user callback type define.
USB buffer interface functions prototypes.
struct _Device_Class_cb USBD_Class_cb_TypeDef
USB device class callback type define.
uint8_t USB_CtlContinueTx(USB_CORE_HANDLE *pudev, uint8_t *pbuf, uint16_t Len)
Continue transmitting data on the control pipe.
Definition: usb_core.c:561
struct _Device_Desc_cb USBD_Desc_cb_TypeDef
USB device descriptor callback type define.
void DR_Init(void)
Device register initialization.
Definition: usb_core.c:44
uint8_t USB_EP_GetStatus(USB_CORE_HANDLE *pudev, uint8_t EpID)
Get the endpoint status.
Definition: usb_core.c:524
USB user callback type define.
Definition: usb_core.h:179
void USB_EP_BufConfig(USB_CORE_HANDLE *pudev, uint8_t EpAddr, uint8_t EpKind, uint32_t BufAddr)
Configure buffer for endpoint.
Definition: usb_core.c:107
uint8_t USB_CtlContinueRx(USB_CORE_HANDLE *pudev, uint8_t *pbuf, uint16_t Len)
Continue receive data on the contrl pipe.
Definition: usb_core.c:595
USB standard device request struct.
Definition: usb_core.h:122
General defines for the usb device library.
void USB_EP_Rx(USB_CORE_HANDLE *pudev, uint8_t EpAddr, uint8_t *pbuf, uint16_t BufLen)
Endpoint prepare to receive data.
Definition: usb_core.c:336
Generated by   doxygen 1.8.10