Subversion Repositories DashDisplay

Rev

Rev 61 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
77 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
  * Copyright (c) 2016 STMicroelectronics.
10
  * All rights reserved.
11
  *
12
  * This software is licensed under terms that can be found in the LICENSE file
13
  * in the root directory of this software component.
14
  * If no LICENSE file comes with this software, it is provided AS-IS.
15
  *
16
  ******************************************************************************
17
  */
18
 
19
/* Define to prevent recursive inclusion -------------------------------------*/
20
#ifndef STM32L1xx_LL_USB_H
21
#define STM32L1xx_LL_USB_H
22
 
23
#ifdef __cplusplus
24
extern "C" {
25
#endif /* __cplusplus */
26
 
27
/* Includes ------------------------------------------------------------------*/
28
#include "stm32l1xx_hal_def.h"
29
 
30
#if defined (USB)
31
/** @addtogroup STM32L1xx_HAL_Driver
32
  * @{
33
  */
34
 
35
/** @addtogroup USB_LL
36
  * @{
37
  */
38
 
39
/* Exported types ------------------------------------------------------------*/
40
 
41
/**
42
  * @brief  USB Mode definition
43
  */
44
 
45
typedef enum
46
{
47
  USB_DEVICE_MODE = 0
48
} USB_ModeTypeDef;
49
 
50
 
51
/**
52
  * @brief  USB Instance Initialization Structure definition
53
  */
54
typedef struct
55
{
56
  uint32_t dev_endpoints;           /*!< Device Endpoints number.
57
                                         This parameter depends on the used USB core.
58
                                         This parameter must be a number between Min_Data = 1 and Max_Data = 15 */
59
 
60
  uint32_t speed;                   /*!< USB Core speed.
61
                                         This parameter can be any value of @ref PCD_Speed/HCD_Speed
62
                                                                                 (HCD_SPEED_xxx, HCD_SPEED_xxx) */
63
 
64
  uint32_t ep0_mps;                 /*!< Set the Endpoint 0 Max Packet size.                                    */
65
 
66
  uint32_t phy_itface;              /*!< Select the used PHY interface.
67
                                         This parameter can be any value of @ref PCD_PHY_Module/HCD_PHY_Module  */
68
 
69
  uint32_t Sof_enable;              /*!< Enable or disable the output of the SOF signal.                        */
70
 
71
  uint32_t low_power_enable;        /*!< Enable or disable the low Power Mode.                                  */
72
 
73
  uint32_t lpm_enable;              /*!< Enable or disable Link Power Management.                               */
74
 
75
  uint32_t battery_charging_enable; /*!< Enable or disable Battery charging.                                    */
76
} USB_CfgTypeDef;
77
 
78
typedef struct
79
{
80
  uint8_t   num;                  /*!< Endpoint number
81
                                       This parameter must be a number between Min_Data = 1 and Max_Data = 15   */
82
 
83
  uint8_t   is_in;                /*!< Endpoint direction
84
                                       This parameter must be a number between Min_Data = 0 and Max_Data = 1    */
85
 
86
  uint8_t   is_stall;             /*!< Endpoint stall condition
87
                                       This parameter must be a number between Min_Data = 0 and Max_Data = 1    */
88
 
89
  uint8_t   type;                 /*!< Endpoint type
90
                                       This parameter can be any value of @ref USB_LL_EP_Type                   */
91
 
92
  uint8_t   data_pid_start;       /*!< Initial data PID
93
                                       This parameter must be a number between Min_Data = 0 and Max_Data = 1    */
94
 
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
 
109
  uint32_t  maxpacket;            /*!< Endpoint Max packet size
110
                                       This parameter must be a number between Min_Data = 0 and Max_Data = 64KB */
111
 
112
  uint8_t   *xfer_buff;           /*!< Pointer to transfer buffer                                               */
113
 
114
  uint32_t  xfer_len;             /*!< Current transfer length                                                  */
115
 
116
  uint32_t  xfer_count;           /*!< Partial transfer length in case of multi packet transfer                 */
117
 
118
  uint32_t  xfer_len_db;          /*!< double buffer transfer length used with bulk double buffer in            */
119
 
120
  uint8_t   xfer_fill_db;         /*!< double buffer Need to Fill new buffer  used with bulk_in                 */
121
} USB_EPTypeDef;
122
 
123
/* Exported constants --------------------------------------------------------*/
124
 
125
/** @defgroup PCD_Exported_Constants PCD Exported Constants
126
  * @{
127
  */
128
/** @defgroup USB_LL_EP0_MPS USB Low Layer EP0 MPS
129
  * @{
130
  */
131
#define EP_MPS_64                              0U
132
#define EP_MPS_32                              1U
133
#define EP_MPS_16                              2U
134
#define EP_MPS_8                               3U
135
/**
136
  * @}
137
  */
138
 
139
/** @defgroup USB_LL_EP_Type USB Low Layer EP Type
140
  * @{
141
  */
142
#define EP_TYPE_CTRL                           0U
143
#define EP_TYPE_ISOC                           1U
144
#define EP_TYPE_BULK                           2U
145
#define EP_TYPE_INTR                           3U
146
#define EP_TYPE_MSK                            3U
147
/**
148
  * @}
149
  */
150
 
151
/** @defgroup USB_LL Device Speed
152
  * @{
153
  */
154
#define USBD_FS_SPEED                          2U
155
/**
156
  * @}
157
  */
158
 
159
 
160
#define BTABLE_ADDRESS                         0x000U
161
#define PMA_ACCESS                             2U
162
 
163
#ifndef USB_EP_RX_STRX
164
#define USB_EP_RX_STRX                         (0x3U << 12)
165
#endif /* USB_EP_RX_STRX */
166
 
167
#define EP_ADDR_MSK                            0x7U
168
 
169
#ifndef USE_USB_DOUBLE_BUFFER
170
#define USE_USB_DOUBLE_BUFFER                  1U
171
#endif /* USE_USB_DOUBLE_BUFFER */
172
 
173
 
174
/**
175
  * @}
176
  */
177
 
178
/* Exported macro ------------------------------------------------------------*/
179
/**
180
  * @}
181
  */
182
 
183
/* Exported functions --------------------------------------------------------*/
184
/** @addtogroup USB_LL_Exported_Functions USB Low Layer Exported Functions
185
  * @{
186
  */
187
 
188
 
189
HAL_StatusTypeDef USB_CoreInit(USB_TypeDef *USBx, USB_CfgTypeDef cfg);
190
HAL_StatusTypeDef USB_DevInit(USB_TypeDef *USBx, USB_CfgTypeDef cfg);
191
HAL_StatusTypeDef USB_EnableGlobalInt(USB_TypeDef *USBx);
192
HAL_StatusTypeDef USB_DisableGlobalInt(USB_TypeDef *USBx);
193
HAL_StatusTypeDef USB_SetCurrentMode(USB_TypeDef *USBx, USB_ModeTypeDef mode);
194
 
195
HAL_StatusTypeDef USB_FlushRxFifo(USB_TypeDef const *USBx);
196
HAL_StatusTypeDef USB_FlushTxFifo(USB_TypeDef const *USBx, uint32_t num);
197
 
198
#if defined (HAL_PCD_MODULE_ENABLED)
199
HAL_StatusTypeDef USB_ActivateEndpoint(USB_TypeDef *USBx, USB_EPTypeDef *ep);
200
HAL_StatusTypeDef USB_DeactivateEndpoint(USB_TypeDef *USBx, USB_EPTypeDef *ep);
201
HAL_StatusTypeDef USB_EPStartXfer(USB_TypeDef *USBx, USB_EPTypeDef *ep);
202
HAL_StatusTypeDef USB_EPSetStall(USB_TypeDef *USBx, USB_EPTypeDef *ep);
203
HAL_StatusTypeDef USB_EPClearStall(USB_TypeDef *USBx, USB_EPTypeDef *ep);
204
HAL_StatusTypeDef USB_EPStopXfer(USB_TypeDef *USBx, USB_EPTypeDef *ep);
205
#endif /* defined (HAL_PCD_MODULE_ENABLED) */
206
 
207
HAL_StatusTypeDef USB_SetDevAddress(USB_TypeDef *USBx, uint8_t address);
208
HAL_StatusTypeDef USB_DevConnect(USB_TypeDef *USBx);
209
HAL_StatusTypeDef USB_DevDisconnect(USB_TypeDef *USBx);
210
HAL_StatusTypeDef USB_StopDevice(USB_TypeDef *USBx);
211
uint32_t          USB_ReadInterrupts(USB_TypeDef const *USBx);
212
HAL_StatusTypeDef USB_ActivateRemoteWakeup(USB_TypeDef *USBx);
213
HAL_StatusTypeDef USB_DeActivateRemoteWakeup(USB_TypeDef *USBx);
214
 
215
void              USB_WritePMA(USB_TypeDef const *USBx, uint8_t *pbUsrBuf,
216
                               uint16_t wPMABufAddr, uint16_t wNBytes);
217
 
218
void              USB_ReadPMA(USB_TypeDef const *USBx, uint8_t *pbUsrBuf,
219
                              uint16_t wPMABufAddr, uint16_t wNBytes);
220
 
221
/**
222
  * @}
223
  */
224
 
225
/**
226
  * @}
227
  */
228
 
229
/**
230
  * @}
231
  */
232
 
233
/**
234
  * @}
235
  */
236
#endif /* defined (USB) */
237
 
238
#ifdef __cplusplus
239
}
240
#endif /* __cplusplus */
241
 
242
 
243
#endif /* STM32L1xx_LL_USB_H */