Subversion Repositories DashDisplay

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
56 mjames 1
/**
2
  ******************************************************************************
3
  * @file    stm32l1xx_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 STM32L1xx_LL_USB_H
22
#define STM32L1xx_LL_USB_H
23
 
24
#ifdef __cplusplus
25
extern "C" {
26
#endif
27
 
28
/* Includes ------------------------------------------------------------------*/
29
#include "stm32l1xx_hal_def.h"
30
 
31
#if defined (USB)
32
/** @addtogroup STM32L1xx_HAL_Driver
33
  * @{
34
  */
35
 
36
/** @addtogroup USB_LL
37
  * @{
38
  */
39
 
40
/* Exported types ------------------------------------------------------------*/
41
 
42
/**
43
  * @brief  USB Mode definition
44
  */
45
 
46
 
47
 
48
typedef enum
49
{
50
  USB_DEVICE_MODE  = 0
51
} USB_ModeTypeDef;
52
 
53
/**
54
  * @brief  USB Initialization Structure definition
55
  */
56
typedef struct
57
{
58
  uint32_t dev_endpoints;           /*!< Device Endpoints number.
59
                                         This parameter depends on the used USB core.
60
                                         This parameter must be a number between Min_Data = 1 and Max_Data = 15 */
61
 
62
  uint32_t speed;                   /*!< USB Core speed.
63
                                         This parameter can be any value of @ref USB_Core_Speed                 */
64
 
65
  uint32_t ep0_mps;                 /*!< Set the Endpoint 0 Max Packet size.                                    */
66
 
67
  uint32_t phy_itface;              /*!< Select the used PHY interface.
68
                                         This parameter can be any value of @ref USB_Core_PHY                   */
69
 
70
  uint32_t Sof_enable;              /*!< Enable or disable the output of the SOF signal.                        */
71
 
72
  uint32_t low_power_enable;        /*!< Enable or disable Low Power mode                                       */
73
 
74
  uint32_t lpm_enable;              /*!< Enable or disable Battery charging.                                    */
75
 
76
  uint32_t battery_charging_enable; /*!< Enable or disable Battery charging.                                    */
77
} USB_CfgTypeDef;
78
 
79
typedef struct
80
{
81
  uint8_t   num;             /*!< Endpoint number
82
                                  This parameter must be a number between Min_Data = 1 and Max_Data = 15    */
83
 
84
  uint8_t   is_in;           /*!< Endpoint direction
85
                                  This parameter must be a number between Min_Data = 0 and Max_Data = 1     */
86
 
87
  uint8_t   is_stall;        /*!< Endpoint stall condition
88
                                  This parameter must be a number between Min_Data = 0 and Max_Data = 1     */
89
 
90
  uint8_t   type;            /*!< Endpoint type
91
                                  This parameter can be any value of @ref USB_EP_Type                       */
92
 
93
  uint8_t   data_pid_start;  /*!< Initial data PID
94
                                  This parameter must be a number between Min_Data = 0 and Max_Data = 1     */
95
 
96
  uint16_t  pmaadress;       /*!< PMA Address
97
                                  This parameter can be any value between Min_addr = 0 and Max_addr = 1K    */
98
 
99
  uint16_t  pmaaddr0;        /*!< PMA Address0
100
                                  This parameter can be any value between Min_addr = 0 and Max_addr = 1K    */
101
 
102
  uint16_t  pmaaddr1;        /*!< PMA Address1
103
                                  This parameter can be any value between Min_addr = 0 and Max_addr = 1K    */
104
 
105
  uint8_t   doublebuffer;    /*!< Double buffer enable
106
                                  This parameter can be 0 or 1                                              */
107
 
108
  uint16_t  tx_fifo_num;     /*!< This parameter is not required by USB Device FS peripheral, it is used
109
                                  only by USB OTG FS peripheral
110
                                  This parameter is added to ensure compatibility across USB peripherals    */
111
 
112
  uint32_t  maxpacket;       /*!< Endpoint Max packet size
113
                                  This parameter must be a number between Min_Data = 0 and Max_Data = 64KB  */
114
 
115
  uint8_t   *xfer_buff;      /*!< Pointer to transfer buffer                                                */
116
 
117
  uint32_t  xfer_len;        /*!< Current transfer length                                                   */
118
 
119
  uint32_t  xfer_count;      /*!< Partial transfer length in case of multi packet transfer                  */
120
 
121
  uint32_t  xfer_len_db;      /*!< double buffer transfer length used with bulk double buffer in           */
122
 
123
  uint8_t   xfer_fill_db;     /*!< double buffer Need to Fill new buffer  used with bulk_in                */
124
 
125
} USB_EPTypeDef;
126
 
127
 
128
/* Exported constants --------------------------------------------------------*/
129
 
130
/** @defgroup PCD_Exported_Constants PCD Exported Constants
131
  * @{
132
  */
133
 
134
 
135
/** @defgroup USB_LL_EP0_MPS USB Low Layer EP0 MPS
136
  * @{
137
  */
138
#define EP_MPS_64                         0U
139
#define EP_MPS_32                         1U
140
#define EP_MPS_16                         2U
141
#define EP_MPS_8                          3U
142
/**
143
  * @}
144
  */
145
 
146
/** @defgroup USB_LL_EP_Type USB Low Layer EP Type
147
  * @{
148
  */
149
#define EP_TYPE_CTRL                           0U
150
#define EP_TYPE_ISOC                           1U
151
#define EP_TYPE_BULK                           2U
152
#define EP_TYPE_INTR                           3U
153
#define EP_TYPE_MSK                            3U
154
/**
155
  * @}
156
  */
157
 
158
/** @defgroup USB_LL Device Speed
159
  * @{
160
  */
161
#define USBD_FS_SPEED                          2U
162
/**
163
  * @}
164
  */
165
 
166
#define BTABLE_ADDRESS                     0x000U
167
#define PMA_ACCESS                             2U
168
 
169
#define EP_ADDR_MSK                          0x7U
170
/**
171
  * @}
172
  */
173
 
174
/* Exported macro ------------------------------------------------------------*/
175
/**
176
  * @}
177
  */
178
 
179
/* Exported functions --------------------------------------------------------*/
180
/** @addtogroup USB_LL_Exported_Functions USB Low Layer Exported Functions
181
  * @{
182
  */
183
 
184
 
185
HAL_StatusTypeDef USB_CoreInit(USB_TypeDef *USBx, USB_CfgTypeDef cfg);
186
HAL_StatusTypeDef USB_DevInit(USB_TypeDef *USBx, USB_CfgTypeDef cfg);
187
HAL_StatusTypeDef USB_EnableGlobalInt(USB_TypeDef *USBx);
188
HAL_StatusTypeDef USB_DisableGlobalInt(USB_TypeDef *USBx);
189
HAL_StatusTypeDef USB_SetCurrentMode(USB_TypeDef *USBx, USB_ModeTypeDef mode);
190
HAL_StatusTypeDef USB_SetDevSpeed(USB_TypeDef *USBx, uint8_t speed);
191
HAL_StatusTypeDef USB_FlushRxFifo(USB_TypeDef *USBx);
192
HAL_StatusTypeDef USB_FlushTxFifo(USB_TypeDef *USBx, uint32_t num);
193
HAL_StatusTypeDef USB_ActivateEndpoint(USB_TypeDef *USBx, USB_EPTypeDef *ep);
194
HAL_StatusTypeDef USB_DeactivateEndpoint(USB_TypeDef *USBx, USB_EPTypeDef *ep);
195
HAL_StatusTypeDef USB_EPStartXfer(USB_TypeDef *USBx, USB_EPTypeDef *ep);
196
HAL_StatusTypeDef USB_WritePacket(USB_TypeDef *USBx, uint8_t *src, uint8_t ch_ep_num, uint16_t len);
197
void             *USB_ReadPacket(USB_TypeDef *USBx, uint8_t *dest, uint16_t len);
198
HAL_StatusTypeDef USB_EPSetStall(USB_TypeDef *USBx, USB_EPTypeDef *ep);
199
HAL_StatusTypeDef USB_EPClearStall(USB_TypeDef *USBx, USB_EPTypeDef *ep);
200
HAL_StatusTypeDef USB_SetDevAddress(USB_TypeDef *USBx, uint8_t address);
201
HAL_StatusTypeDef USB_DevConnect(USB_TypeDef *USBx);
202
HAL_StatusTypeDef USB_DevDisconnect(USB_TypeDef *USBx);
203
HAL_StatusTypeDef USB_StopDevice(USB_TypeDef *USBx);
204
HAL_StatusTypeDef USB_EP0_OutStart(USB_TypeDef *USBx, uint8_t *psetup);
205
uint32_t          USB_ReadInterrupts(USB_TypeDef *USBx);
206
uint32_t          USB_ReadDevAllOutEpInterrupt(USB_TypeDef *USBx);
207
uint32_t          USB_ReadDevOutEPInterrupt(USB_TypeDef *USBx, uint8_t epnum);
208
uint32_t          USB_ReadDevAllInEpInterrupt(USB_TypeDef *USBx);
209
uint32_t          USB_ReadDevInEPInterrupt(USB_TypeDef *USBx, uint8_t epnum);
210
void              USB_ClearInterrupts(USB_TypeDef *USBx, uint32_t interrupt);
211
 
212
HAL_StatusTypeDef USB_ActivateRemoteWakeup(USB_TypeDef *USBx);
213
HAL_StatusTypeDef USB_DeActivateRemoteWakeup(USB_TypeDef *USBx);
214
void USB_WritePMA(USB_TypeDef  *USBx, uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes);
215
void USB_ReadPMA(USB_TypeDef  *USBx, uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes);
216
 
217
/**
218
  * @}
219
  */
220
 
221
/**
222
  * @}
223
  */
224
 
225
/**
226
  * @}
227
  */
228
 
229
/**
230
  * @}
231
  */
232
#endif /* defined (USB) */
233
 
234
#ifdef __cplusplus
235
}
236
#endif
237
 
238
 
239
#endif /* STM32L1xx_LL_USB_H */
240
 
241
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/