1 /**
2   ******************************************************************************
3   * @file    stm32f1xx_ll_usb.h
4   * @author  MCD Application Team
5   * @brief   Header file of USB Low Layer HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
10   * All rights reserved.</center></h2>
11   *
12   * This software component is licensed by ST under BSD 3-Clause license,
13   * the "License"; You may not use this file except in compliance with the
14   * License. You may obtain a copy of the License at:
15   *                        opensource.org/licenses/BSD-3-Clause
16   *
17   ******************************************************************************
18   */
19 
20 /* Define to prevent recursive inclusion -------------------------------------*/
21 #ifndef STM32F1xx_LL_USB_H
22 #define STM32F1xx_LL_USB_H
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 /* Includes ------------------------------------------------------------------*/
29 #include "stm32f1xx_hal_def.h"
30 
31 #if defined (USB) || defined (USB_OTG_FS)
32 /** @addtogroup STM32F1xx_HAL_Driver
33   * @{
34   */
35 
36 /** @addtogroup USB_LL
37   * @{
38   */
39 
40 /* Exported types ------------------------------------------------------------*/
41 
42 /**
43   * @brief  USB Mode definition
44   */
45 #if defined (USB_OTG_FS)
46 
47 typedef enum
48 {
49   USB_DEVICE_MODE  = 0,
50   USB_HOST_MODE    = 1,
51   USB_DRD_MODE     = 2
52 } USB_ModeTypeDef;
53 
54 /**
55   * @brief  URB States definition
56   */
57 typedef enum
58 {
59   URB_IDLE = 0,
60   URB_DONE,
61   URB_NOTREADY,
62   URB_NYET,
63   URB_ERROR,
64   URB_STALL
65 } USB_OTG_URBStateTypeDef;
66 
67 /**
68   * @brief  Host channel States  definition
69   */
70 typedef enum
71 {
72   HC_IDLE = 0,
73   HC_XFRC,
74   HC_HALTED,
75   HC_NAK,
76   HC_NYET,
77   HC_STALL,
78   HC_XACTERR,
79   HC_BBLERR,
80   HC_DATATGLERR
81 } USB_OTG_HCStateTypeDef;
82 
83 /**
84   * @brief  USB Instance Initialization Structure definition
85   */
86 typedef struct
87 {
88   uint32_t dev_endpoints;           /*!< Device Endpoints number.
89                                          This parameter depends on the used USB core.
90                                          This parameter must be a number between Min_Data = 1 and Max_Data = 15 */
91 
92   uint32_t Host_channels;           /*!< Host Channels number.
93                                          This parameter Depends on the used USB core.
94                                          This parameter must be a number between Min_Data = 1 and Max_Data = 15 */
95 
96   uint32_t speed;                   /*!< USB Core speed.
97                                          This parameter can be any value of @ref PCD_Speed/HCD_Speed
98                                                                                  (HCD_SPEED_xxx, HCD_SPEED_xxx) */
99 
100   uint32_t dma_enable;              /*!< Enable or disable of the USB embedded DMA used only for OTG HS.        */
101 
102   uint32_t ep0_mps;                 /*!< Set the Endpoint 0 Max Packet size.                                    */
103 
104   uint32_t phy_itface;              /*!< Select the used PHY interface.
105                                          This parameter can be any value of @ref PCD_PHY_Module/HCD_PHY_Module  */
106 
107   uint32_t Sof_enable;              /*!< Enable or disable the output of the SOF signal.                        */
108 
109   uint32_t low_power_enable;        /*!< Enable or disable the low power mode.                                  */
110 
111   uint32_t lpm_enable;              /*!< Enable or disable Link Power Management.                               */
112 
113   uint32_t battery_charging_enable; /*!< Enable or disable Battery charging.                                    */
114 
115   uint32_t vbus_sensing_enable;     /*!< Enable or disable the VBUS Sensing feature.                            */
116 
117   uint32_t use_dedicated_ep1;       /*!< Enable or disable the use of the dedicated EP1 interrupt.              */
118 
119   uint32_t use_external_vbus;       /*!< Enable or disable the use of the external VBUS.                        */
120 
121 } USB_OTG_CfgTypeDef;
122 
123 typedef struct
124 {
125   uint8_t   num;                  /*!< Endpoint number
126                                        This parameter must be a number between Min_Data = 1 and Max_Data = 15   */
127 
128   uint8_t   is_in;                /*!< Endpoint direction
129                                        This parameter must be a number between Min_Data = 0 and Max_Data = 1    */
130 
131   uint8_t   is_stall;             /*!< Endpoint stall condition
132                                        This parameter must be a number between Min_Data = 0 and Max_Data = 1    */
133 
134   uint8_t   type;                 /*!< Endpoint type
135                                        This parameter can be any value of @ref USB_LL_EP_Type                   */
136 
137   uint8_t   data_pid_start;       /*!< Initial data PID
138                                        This parameter must be a number between Min_Data = 0 and Max_Data = 1    */
139 
140   uint8_t   even_odd_frame;       /*!< IFrame parity
141                                        This parameter must be a number between Min_Data = 0 and Max_Data = 1    */
142 
143   uint16_t  tx_fifo_num;          /*!< Transmission FIFO number
144                                        This parameter must be a number between Min_Data = 1 and Max_Data = 15   */
145 
146   uint32_t  maxpacket;            /*!< Endpoint Max packet size
147                                        This parameter must be a number between Min_Data = 0 and Max_Data = 64KB */
148 
149   uint8_t   *xfer_buff;           /*!< Pointer to transfer buffer                                               */
150 
151   uint32_t  dma_addr;             /*!< 32 bits aligned transfer buffer address                                  */
152 
153   uint32_t  xfer_len;             /*!< Current transfer length                                                  */
154 
155   uint32_t  xfer_count;           /*!< Partial transfer length in case of multi packet transfer                 */
156 } USB_OTG_EPTypeDef;
157 
158 typedef struct
159 {
160   uint8_t   dev_addr;           /*!< USB device address.
161                                      This parameter must be a number between Min_Data = 1 and Max_Data = 255    */
162 
163   uint8_t   ch_num;             /*!< Host channel number.
164                                      This parameter must be a number between Min_Data = 1 and Max_Data = 15     */
165 
166   uint8_t   ep_num;             /*!< Endpoint number.
167                                      This parameter must be a number between Min_Data = 1 and Max_Data = 15     */
168 
169   uint8_t   ep_is_in;           /*!< Endpoint direction
170                                      This parameter must be a number between Min_Data = 0 and Max_Data = 1      */
171 
172   uint8_t   speed;              /*!< USB Host Channel speed.
173                                      This parameter can be any value of @ref HCD_Device_Speed:
174                                                                              (HCD_DEVICE_SPEED_xxx)             */
175 
176   uint8_t   do_ping;            /*!< Enable or disable the use of the PING protocol for HS mode.                */
177 
178   uint8_t   process_ping;       /*!< Execute the PING protocol for HS mode.                                     */
179 
180   uint8_t   ep_type;            /*!< Endpoint Type.
181                                      This parameter can be any value of @ref USB_LL_EP_Type                     */
182 
183   uint16_t  max_packet;         /*!< Endpoint Max packet size.
184                                      This parameter must be a number between Min_Data = 0 and Max_Data = 64KB   */
185 
186   uint8_t   data_pid;           /*!< Initial data PID.
187                                      This parameter must be a number between Min_Data = 0 and Max_Data = 1      */
188 
189   uint8_t   *xfer_buff;         /*!< Pointer to transfer buffer.                                                */
190 
191   uint32_t  XferSize;             /*!< OTG Channel transfer size.                                                   */
192 
193   uint32_t  xfer_len;           /*!< Current transfer length.                                                   */
194 
195   uint32_t  xfer_count;         /*!< Partial transfer length in case of multi packet transfer.                  */
196 
197   uint8_t   toggle_in;          /*!< IN transfer current toggle flag.
198                                      This parameter must be a number between Min_Data = 0 and Max_Data = 1      */
199 
200   uint8_t   toggle_out;         /*!< OUT transfer current toggle flag
201                                      This parameter must be a number between Min_Data = 0 and Max_Data = 1      */
202 
203   uint32_t  dma_addr;           /*!< 32 bits aligned transfer buffer address.                                   */
204 
205   uint32_t  ErrCnt;             /*!< Host channel error count.                                                  */
206 
207   USB_OTG_URBStateTypeDef urb_state;  /*!< URB state.
208                                             This parameter can be any value of @ref USB_OTG_URBStateTypeDef */
209 
210   USB_OTG_HCStateTypeDef state;       /*!< Host Channel state.
211                                             This parameter can be any value of @ref USB_OTG_HCStateTypeDef  */
212 } USB_OTG_HCTypeDef;
213 #endif /* defined (USB_OTG_FS) */
214 
215 #if defined (USB)
216 
217 typedef enum
218 {
219   USB_DEVICE_MODE  = 0
220 } USB_ModeTypeDef;
221 
222 /**
223   * @brief  USB Initialization Structure definition
224   */
225 typedef struct
226 {
227   uint32_t dev_endpoints;           /*!< Device Endpoints number.
228                                          This parameter depends on the used USB core.
229                                          This parameter must be a number between Min_Data = 1 and Max_Data = 15 */
230 
231   uint32_t speed;                   /*!< USB Core speed.
232                                          This parameter can be any value of @ref PCD_Speed/HCD_Speed
233                                                                                  (HCD_SPEED_xxx, HCD_SPEED_xxx) */
234 
235   uint32_t ep0_mps;                 /*!< Set the Endpoint 0 Max Packet size.                                    */
236 
237   uint32_t phy_itface;              /*!< Select the used PHY interface.
238                                          This parameter can be any value of @ref PCD_PHY_Module/HCD_PHY_Module  */
239 
240   uint32_t Sof_enable;              /*!< Enable or disable the output of the SOF signal.                        */
241 
242   uint32_t low_power_enable;        /*!< Enable or disable Low Power mode                                       */
243 
244   uint32_t lpm_enable;              /*!< Enable or disable Battery charging.                                    */
245 
246   uint32_t battery_charging_enable; /*!< Enable or disable Battery charging.                                    */
247 } USB_CfgTypeDef;
248 
249 typedef struct
250 {
251   uint8_t   num;             /*!< Endpoint number
252                                   This parameter must be a number between Min_Data = 1 and Max_Data = 15    */
253 
254   uint8_t   is_in;           /*!< Endpoint direction
255                                   This parameter must be a number between Min_Data = 0 and Max_Data = 1     */
256 
257   uint8_t   is_stall;        /*!< Endpoint stall condition
258                                   This parameter must be a number between Min_Data = 0 and Max_Data = 1     */
259 
260   uint8_t   type;            /*!< Endpoint type
261                                   This parameter can be any value of @ref USB_EP_Type                       */
262 
263   uint8_t   data_pid_start;  /*!< Initial data PID
264                                   This parameter must be a number between Min_Data = 0 and Max_Data = 1     */
265 
266   uint16_t  pmaadress;       /*!< PMA Address
267                                   This parameter can be any value between Min_addr = 0 and Max_addr = 1K    */
268 
269   uint16_t  pmaaddr0;        /*!< PMA Address0
270                                   This parameter can be any value between Min_addr = 0 and Max_addr = 1K    */
271 
272   uint16_t  pmaaddr1;        /*!< PMA Address1
273                                   This parameter can be any value between Min_addr = 0 and Max_addr = 1K    */
274 
275   uint8_t   doublebuffer;    /*!< Double buffer enable
276                                   This parameter can be 0 or 1                                              */
277 
278   uint16_t  tx_fifo_num;     /*!< This parameter is not required by USB Device FS peripheral, it is used
279                                   only by USB OTG FS peripheral
280                                   This parameter is added to ensure compatibility across USB peripherals    */
281 
282   uint32_t  maxpacket;       /*!< Endpoint Max packet size
283                                   This parameter must be a number between Min_Data = 0 and Max_Data = 64KB  */
284 
285   uint8_t   *xfer_buff;      /*!< Pointer to transfer buffer                                                */
286 
287   uint32_t  xfer_len;        /*!< Current transfer length                                                   */
288 
289   uint32_t  xfer_count;      /*!< Partial transfer length in case of multi packet transfer                  */
290 
291   uint32_t  xfer_len_db;      /*!< double buffer transfer length used with bulk double buffer in           */
292 
293   uint8_t   xfer_fill_db;     /*!< double buffer Need to Fill new buffer  used with bulk_in                */
294 
295 } USB_EPTypeDef;
296 #endif /* defined (USB) */
297 
298 /* Exported constants --------------------------------------------------------*/
299 
300 /** @defgroup PCD_Exported_Constants PCD Exported Constants
301   * @{
302   */
303 
304 #if defined (USB_OTG_FS)
305 /** @defgroup USB_OTG_CORE VERSION ID
306   * @{
307   */
308 #define USB_OTG_CORE_ID_300A          0x4F54300AU
309 #define USB_OTG_CORE_ID_310A          0x4F54310AU
310 /**
311   * @}
312   */
313 
314 /** @defgroup USB_Core_Mode_ USB Core Mode
315   * @{
316   */
317 #define USB_OTG_MODE_DEVICE                    0U
318 #define USB_OTG_MODE_HOST                      1U
319 #define USB_OTG_MODE_DRD                       2U
320 /**
321   * @}
322   */
323 
324 /** @defgroup USB_LL Device Speed
325   * @{
326   */
327 #define USBD_FS_SPEED                          2U
328 #define USBH_FSLS_SPEED                        1U
329 /**
330   * @}
331   */
332 
333 /** @defgroup USB_LL_Core_Speed USB Low Layer Core Speed
334   * @{
335   */
336 #define USB_OTG_SPEED_FULL                     3U
337 /**
338   * @}
339   */
340 
341 /** @defgroup USB_LL_Core_PHY USB Low Layer Core PHY
342   * @{
343   */
344 #define USB_OTG_ULPI_PHY                       1U
345 #define USB_OTG_EMBEDDED_PHY                   2U
346 /**
347   * @}
348   */
349 
350 /** @defgroup USB_LL_Turnaround_Timeout Turnaround Timeout Value
351   * @{
352   */
353 #ifndef USBD_FS_TRDT_VALUE
354 #define USBD_FS_TRDT_VALUE                     5U
355 #define USBD_DEFAULT_TRDT_VALUE                9U
356 #endif /* USBD_HS_TRDT_VALUE */
357 /**
358   * @}
359   */
360 
361 /** @defgroup USB_LL_Core_MPS USB Low Layer Core MPS
362   * @{
363   */
364 #define USB_OTG_FS_MAX_PACKET_SIZE            64U
365 #define USB_OTG_MAX_EP0_SIZE                  64U
366 /**
367   * @}
368   */
369 
370 /** @defgroup USB_LL_Core_PHY_Frequency USB Low Layer Core PHY Frequency
371   * @{
372   */
373 #define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ     (0U << 1)
374 #define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ     (1U << 1)
375 #define DSTS_ENUMSPD_FS_PHY_48MHZ              (3U << 1)
376 /**
377   * @}
378   */
379 
380 /** @defgroup USB_LL_CORE_Frame_Interval USB Low Layer Core Frame Interval
381   * @{
382   */
383 #define DCFG_FRAME_INTERVAL_80                 0U
384 #define DCFG_FRAME_INTERVAL_85                 1U
385 #define DCFG_FRAME_INTERVAL_90                 2U
386 #define DCFG_FRAME_INTERVAL_95                 3U
387 /**
388   * @}
389   */
390 
391 /** @defgroup USB_LL_EP0_MPS USB Low Layer EP0 MPS
392   * @{
393   */
394 #define EP_MPS_64                        0U
395 #define EP_MPS_32                        1U
396 #define EP_MPS_16                        2U
397 #define EP_MPS_8                         3U
398 /**
399   * @}
400   */
401 
402 /** @defgroup USB_LL_EP_Speed USB Low Layer EP Speed
403   * @{
404   */
405 #define EP_SPEED_LOW                           0U
406 #define EP_SPEED_FULL                          1U
407 #define EP_SPEED_HIGH                          2U
408 /**
409   * @}
410   */
411 
412 /** @defgroup USB_LL_EP_Type USB Low Layer EP Type
413   * @{
414   */
415 #define EP_TYPE_CTRL                           0U
416 #define EP_TYPE_ISOC                           1U
417 #define EP_TYPE_BULK                           2U
418 #define EP_TYPE_INTR                           3U
419 #define EP_TYPE_MSK                            3U
420 /**
421   * @}
422   */
423 
424 /** @defgroup USB_LL_STS_Defines USB Low Layer STS Defines
425   * @{
426   */
427 #define STS_GOUT_NAK                           1U
428 #define STS_DATA_UPDT                          2U
429 #define STS_XFER_COMP                          3U
430 #define STS_SETUP_COMP                         4U
431 #define STS_SETUP_UPDT                         6U
432 /**
433   * @}
434   */
435 
436 /** @defgroup USB_LL_HCFG_SPEED_Defines USB Low Layer HCFG Speed Defines
437   * @{
438   */
439 #define HCFG_30_60_MHZ                         0U
440 #define HCFG_48_MHZ                            1U
441 #define HCFG_6_MHZ                             2U
442 /**
443   * @}
444   */
445 
446 /** @defgroup USB_LL_HPRT0_PRTSPD_SPEED_Defines USB Low Layer HPRT0 PRTSPD Speed Defines
447   * @{
448   */
449 #define HPRT0_PRTSPD_HIGH_SPEED                0U
450 #define HPRT0_PRTSPD_FULL_SPEED                1U
451 #define HPRT0_PRTSPD_LOW_SPEED                 2U
452 /**
453   * @}
454   */
455 
456 #define HCCHAR_CTRL                            0U
457 #define HCCHAR_ISOC                            1U
458 #define HCCHAR_BULK                            2U
459 #define HCCHAR_INTR                            3U
460 
461 #define HC_PID_DATA0                           0U
462 #define HC_PID_DATA2                           1U
463 #define HC_PID_DATA1                           2U
464 #define HC_PID_SETUP                           3U
465 
466 #define GRXSTS_PKTSTS_IN                       2U
467 #define GRXSTS_PKTSTS_IN_XFER_COMP             3U
468 #define GRXSTS_PKTSTS_DATA_TOGGLE_ERR          5U
469 #define GRXSTS_PKTSTS_CH_HALTED                7U
470 
471 #define USBx_PCGCCTL    *(__IO uint32_t *)((uint32_t)USBx_BASE + USB_OTG_PCGCCTL_BASE)
472 #define USBx_HPRT0      *(__IO uint32_t *)((uint32_t)USBx_BASE + USB_OTG_HOST_PORT_BASE)
473 
474 #define USBx_DEVICE     ((USB_OTG_DeviceTypeDef *)(USBx_BASE + USB_OTG_DEVICE_BASE))
475 #define USBx_INEP(i)    ((USB_OTG_INEndpointTypeDef *)(USBx_BASE\
476                                                        + USB_OTG_IN_ENDPOINT_BASE + ((i) * USB_OTG_EP_REG_SIZE)))
477 
478 #define USBx_OUTEP(i)   ((USB_OTG_OUTEndpointTypeDef *)(USBx_BASE\
479                                                         + USB_OTG_OUT_ENDPOINT_BASE + ((i) * USB_OTG_EP_REG_SIZE)))
480 
481 #define USBx_DFIFO(i)   *(__IO uint32_t *)(USBx_BASE + USB_OTG_FIFO_BASE + ((i) * USB_OTG_FIFO_SIZE))
482 
483 #define USBx_HOST       ((USB_OTG_HostTypeDef *)(USBx_BASE + USB_OTG_HOST_BASE))
484 #define USBx_HC(i)      ((USB_OTG_HostChannelTypeDef *)(USBx_BASE\
485                                                         + USB_OTG_HOST_CHANNEL_BASE\
486                                                         + ((i) * USB_OTG_HOST_CHANNEL_SIZE)))
487 
488 #endif /* defined (USB_OTG_FS) */
489 
490 #if defined (USB)
491 /** @defgroup USB_LL_EP0_MPS USB Low Layer EP0 MPS
492   * @{
493   */
494 #define EP_MPS_64                              0U
495 #define EP_MPS_32                              1U
496 #define EP_MPS_16                              2U
497 #define EP_MPS_8                               3U
498 /**
499   * @}
500   */
501 
502 /** @defgroup USB_LL_EP_Type USB Low Layer EP Type
503   * @{
504   */
505 #define EP_TYPE_CTRL                           0U
506 #define EP_TYPE_ISOC                           1U
507 #define EP_TYPE_BULK                           2U
508 #define EP_TYPE_INTR                           3U
509 #define EP_TYPE_MSK                            3U
510 /**
511   * @}
512   */
513 
514 /** @defgroup USB_LL Device Speed
515   * @{
516   */
517 #define USBD_FS_SPEED                          2U
518 /**
519   * @}
520   */
521 
522 #define BTABLE_ADDRESS                         0x000U
523 #define PMA_ACCESS                             2U
524 #endif /* defined (USB) */
525 #if defined (USB_OTG_FS)
526 #define EP_ADDR_MSK                            0xFU
527 #endif /* defined (USB_OTG_FS) */
528 #if defined (USB)
529 #define EP_ADDR_MSK                            0x7U
530 #endif /* defined (USB) */
531 /**
532   * @}
533   */
534 
535 /* Exported macro ------------------------------------------------------------*/
536 /** @defgroup USB_LL_Exported_Macros USB Low Layer Exported Macros
537   * @{
538   */
539 #if defined (USB_OTG_FS)
540 #define USB_MASK_INTERRUPT(__INSTANCE__, __INTERRUPT__)     ((__INSTANCE__)->GINTMSK &= ~(__INTERRUPT__))
541 #define USB_UNMASK_INTERRUPT(__INSTANCE__, __INTERRUPT__)   ((__INSTANCE__)->GINTMSK |= (__INTERRUPT__))
542 
543 #define CLEAR_IN_EP_INTR(__EPNUM__, __INTERRUPT__)          (USBx_INEP(__EPNUM__)->DIEPINT = (__INTERRUPT__))
544 #define CLEAR_OUT_EP_INTR(__EPNUM__, __INTERRUPT__)         (USBx_OUTEP(__EPNUM__)->DOEPINT = (__INTERRUPT__))
545 #endif /* defined (USB_OTG_FS) */
546 /**
547   * @}
548   */
549 
550 /* Exported functions --------------------------------------------------------*/
551 /** @addtogroup USB_LL_Exported_Functions USB Low Layer Exported Functions
552   * @{
553   */
554 #if defined (USB_OTG_FS)
555 HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg);
556 HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg);
557 HAL_StatusTypeDef USB_EnableGlobalInt(USB_OTG_GlobalTypeDef *USBx);
558 HAL_StatusTypeDef USB_DisableGlobalInt(USB_OTG_GlobalTypeDef *USBx);
559 HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx, uint32_t hclk, uint8_t speed);
560 HAL_StatusTypeDef USB_SetCurrentMode(USB_OTG_GlobalTypeDef *USBx, USB_ModeTypeDef mode);
561 HAL_StatusTypeDef USB_SetDevSpeed(USB_OTG_GlobalTypeDef *USBx, uint8_t speed);
562 HAL_StatusTypeDef USB_FlushRxFifo(USB_OTG_GlobalTypeDef *USBx);
563 HAL_StatusTypeDef USB_FlushTxFifo(USB_OTG_GlobalTypeDef *USBx, uint32_t num);
564 HAL_StatusTypeDef USB_ActivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep);
565 HAL_StatusTypeDef USB_DeactivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep);
566 HAL_StatusTypeDef USB_ActivateDedicatedEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep);
567 HAL_StatusTypeDef USB_DeactivateDedicatedEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep);
568 HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep);
569 HAL_StatusTypeDef USB_EP0StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep);
570 HAL_StatusTypeDef USB_WritePacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *src,
571                                   uint8_t ch_ep_num, uint16_t len);
572 
573 void             *USB_ReadPacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len);
574 HAL_StatusTypeDef USB_EPSetStall(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep);
575 HAL_StatusTypeDef USB_EPClearStall(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep);
576 HAL_StatusTypeDef USB_SetDevAddress(USB_OTG_GlobalTypeDef *USBx, uint8_t address);
577 HAL_StatusTypeDef USB_DevConnect(USB_OTG_GlobalTypeDef *USBx);
578 HAL_StatusTypeDef USB_DevDisconnect(USB_OTG_GlobalTypeDef *USBx);
579 HAL_StatusTypeDef USB_StopDevice(USB_OTG_GlobalTypeDef *USBx);
580 HAL_StatusTypeDef USB_ActivateSetup(USB_OTG_GlobalTypeDef *USBx);
581 HAL_StatusTypeDef USB_EP0_OutStart(USB_OTG_GlobalTypeDef *USBx, uint8_t *psetup);
582 uint8_t           USB_GetDevSpeed(USB_OTG_GlobalTypeDef *USBx);
583 uint32_t          USB_GetMode(USB_OTG_GlobalTypeDef *USBx);
584 uint32_t          USB_ReadInterrupts(USB_OTG_GlobalTypeDef *USBx);
585 uint32_t          USB_ReadDevAllOutEpInterrupt(USB_OTG_GlobalTypeDef *USBx);
586 uint32_t          USB_ReadDevOutEPInterrupt(USB_OTG_GlobalTypeDef *USBx, uint8_t epnum);
587 uint32_t          USB_ReadDevAllInEpInterrupt(USB_OTG_GlobalTypeDef *USBx);
588 uint32_t          USB_ReadDevInEPInterrupt(USB_OTG_GlobalTypeDef *USBx, uint8_t epnum);
589 void              USB_ClearInterrupts(USB_OTG_GlobalTypeDef *USBx, uint32_t interrupt);
590 
591 HAL_StatusTypeDef USB_HostInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg);
592 HAL_StatusTypeDef USB_InitFSLSPClkSel(USB_OTG_GlobalTypeDef *USBx, uint8_t freq);
593 HAL_StatusTypeDef USB_ResetPort(USB_OTG_GlobalTypeDef *USBx);
594 HAL_StatusTypeDef USB_DriveVbus(USB_OTG_GlobalTypeDef *USBx, uint8_t state);
595 uint32_t          USB_GetHostSpeed(USB_OTG_GlobalTypeDef *USBx);
596 uint32_t          USB_GetCurrentFrame(USB_OTG_GlobalTypeDef *USBx);
597 HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num,
598                               uint8_t epnum, uint8_t dev_address, uint8_t speed,
599                               uint8_t ep_type, uint16_t mps);
600 HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx,
601                                    USB_OTG_HCTypeDef *hc);
602 
603 uint32_t          USB_HC_ReadInterrupt(USB_OTG_GlobalTypeDef *USBx);
604 HAL_StatusTypeDef USB_HC_Halt(USB_OTG_GlobalTypeDef *USBx, uint8_t hc_num);
605 HAL_StatusTypeDef USB_DoPing(USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num);
606 HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx);
607 HAL_StatusTypeDef USB_ActivateRemoteWakeup(USB_OTG_GlobalTypeDef *USBx);
608 HAL_StatusTypeDef USB_DeActivateRemoteWakeup(USB_OTG_GlobalTypeDef *USBx);
609 #endif /* defined (USB_OTG_FS) */
610 
611 #if defined (USB)
612 HAL_StatusTypeDef USB_CoreInit(USB_TypeDef *USBx, USB_CfgTypeDef cfg);
613 HAL_StatusTypeDef USB_DevInit(USB_TypeDef *USBx, USB_CfgTypeDef cfg);
614 HAL_StatusTypeDef USB_EnableGlobalInt(USB_TypeDef *USBx);
615 HAL_StatusTypeDef USB_DisableGlobalInt(USB_TypeDef *USBx);
616 HAL_StatusTypeDef USB_SetCurrentMode(USB_TypeDef *USBx, USB_ModeTypeDef mode);
617 HAL_StatusTypeDef USB_SetDevSpeed(USB_TypeDef *USBx, uint8_t speed);
618 HAL_StatusTypeDef USB_FlushRxFifo(USB_TypeDef *USBx);
619 HAL_StatusTypeDef USB_FlushTxFifo(USB_TypeDef *USBx, uint32_t num);
620 
621 #if defined (HAL_PCD_MODULE_ENABLED)
622 HAL_StatusTypeDef USB_ActivateEndpoint(USB_TypeDef *USBx, USB_EPTypeDef *ep);
623 HAL_StatusTypeDef USB_DeactivateEndpoint(USB_TypeDef *USBx, USB_EPTypeDef *ep);
624 HAL_StatusTypeDef USB_EPStartXfer(USB_TypeDef *USBx, USB_EPTypeDef *ep);
625 HAL_StatusTypeDef USB_EPSetStall(USB_TypeDef *USBx, USB_EPTypeDef *ep);
626 HAL_StatusTypeDef USB_EPClearStall(USB_TypeDef *USBx, USB_EPTypeDef *ep);
627 #endif
628 
629 HAL_StatusTypeDef USB_SetDevAddress(USB_TypeDef *USBx, uint8_t address);
630 HAL_StatusTypeDef USB_DevConnect(USB_TypeDef *USBx);
631 HAL_StatusTypeDef USB_DevDisconnect(USB_TypeDef *USBx);
632 HAL_StatusTypeDef USB_StopDevice(USB_TypeDef *USBx);
633 HAL_StatusTypeDef USB_EP0_OutStart(USB_TypeDef *USBx, uint8_t *psetup);
634 HAL_StatusTypeDef USB_WritePacket(USB_TypeDef *USBx, uint8_t *src,
635                                   uint8_t ch_ep_num, uint16_t len);
636 
637 void             *USB_ReadPacket(USB_TypeDef *USBx, uint8_t *dest, uint16_t len);
638 
639 uint32_t          USB_ReadInterrupts(USB_TypeDef *USBx);
640 uint32_t          USB_ReadDevAllOutEpInterrupt(USB_TypeDef *USBx);
641 uint32_t          USB_ReadDevOutEPInterrupt(USB_TypeDef *USBx, uint8_t epnum);
642 uint32_t          USB_ReadDevAllInEpInterrupt(USB_TypeDef *USBx);
643 uint32_t          USB_ReadDevInEPInterrupt(USB_TypeDef *USBx, uint8_t epnum);
644 void              USB_ClearInterrupts(USB_TypeDef *USBx, uint32_t interrupt);
645 HAL_StatusTypeDef USB_ActivateRemoteWakeup(USB_TypeDef *USBx);
646 HAL_StatusTypeDef USB_DeActivateRemoteWakeup(USB_TypeDef *USBx);
647 
648 void              USB_WritePMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf,
649                                uint16_t wPMABufAddr, uint16_t wNBytes);
650 
651 void              USB_ReadPMA(USB_TypeDef *USBx, uint8_t *pbUsrBuf,
652                               uint16_t wPMABufAddr, uint16_t wNBytes);
653 #endif /* defined (USB) */
654 /**
655   * @}
656   */
657 
658 /**
659   * @}
660   */
661 
662 /**
663   * @}
664   */
665 
666 /**
667   * @}
668   */
669 #endif /* defined (USB) || defined (USB_OTG_FS) */
670 
671 #ifdef __cplusplus
672 }
673 #endif
674 
675 
676 #endif /* STM32F1xx_LL_USB_H */
677 
678 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
679