1 /** 2 ****************************************************************************** 3 * @file stm32l4xx_hal_hcd.h 4 * @author MCD Application Team 5 * @brief Header file of HCD HAL module. 6 ****************************************************************************** 7 * @attention 8 * 9 * <h2><center>© COPYRIGHT(c) 2017 STMicroelectronics</center></h2> 10 * 11 * Redistribution and use in source and binary forms, with or without modification, 12 * are permitted provided that the following conditions are met: 13 * 1. Redistributions of source code must retain the above copyright notice, 14 * this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright notice, 16 * this list of conditions and the following disclaimer in the documentation 17 * and/or other materials provided with the distribution. 18 * 3. Neither the name of STMicroelectronics nor the names of its contributors 19 * may be used to endorse or promote products derived from this software 20 * without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 23 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 25 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 28 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 30 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 * 33 ****************************************************************************** 34 */ 35 36 /* Define to prevent recursive inclusion -------------------------------------*/ 37 #ifndef __STM32L4xx_HAL_HCD_H 38 #define __STM32L4xx_HAL_HCD_H 39 40 #ifdef __cplusplus 41 extern "C" { 42 #endif 43 44 /* Includes ------------------------------------------------------------------*/ 45 #include "stm32l4xx_ll_usb.h" 46 47 #if defined (USB_OTG_FS) || defined (USB_OTG_HS) 48 49 /** @addtogroup STM32L4xx_HAL_Driver 50 * @{ 51 */ 52 53 /** @addtogroup HCD 54 * @{ 55 */ 56 57 /* Exported types ------------------------------------------------------------*/ 58 /** @defgroup HCD_Exported_Types HCD Exported Types 59 * @{ 60 */ 61 62 /** @defgroup HCD_Exported_Types_Group1 HCD State Structure definition 63 * @{ 64 */ 65 typedef enum 66 { 67 HAL_HCD_STATE_RESET = 0x00, 68 HAL_HCD_STATE_READY = 0x01, 69 HAL_HCD_STATE_ERROR = 0x02, 70 HAL_HCD_STATE_BUSY = 0x03, 71 HAL_HCD_STATE_TIMEOUT = 0x04 72 } HCD_StateTypeDef; 73 74 typedef USB_OTG_GlobalTypeDef HCD_TypeDef; 75 typedef USB_OTG_CfgTypeDef HCD_InitTypeDef; 76 typedef USB_OTG_HCTypeDef HCD_HCTypeDef; 77 typedef USB_OTG_URBStateTypeDef HCD_URBStateTypeDef; 78 typedef USB_OTG_HCStateTypeDef HCD_HCStateTypeDef; 79 /** 80 * @} 81 */ 82 83 /** @defgroup HCD_Exported_Types_Group2 HCD Handle Structure definition 84 * @{ 85 */ 86 typedef struct __HCD_HandleTypeDef 87 { 88 HCD_TypeDef *Instance; /*!< Register base address */ 89 HCD_InitTypeDef Init; /*!< HCD required parameters */ 90 HCD_HCTypeDef hc[16]; /*!< Host channels parameters */ 91 HAL_LockTypeDef Lock; /*!< HCD peripheral status */ 92 __IO HCD_StateTypeDef State; /*!< HCD communication state */ 93 __IO uint32_t ErrorCode; /*!< HCD Error code */ 94 void *pData; /*!< Pointer Stack Handler */ 95 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 96 void (* SOFCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD SOF callback */ 97 void (* ConnectCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Connect callback */ 98 void (* DisconnectCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Disconnect callback */ 99 void (* PortEnabledCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Port Enable callback */ 100 void (* PortDisabledCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Port Disable callback */ 101 void (* HC_NotifyURBChangeCallback)(struct __HCD_HandleTypeDef *hhcd, uint8_t chnum, 102 HCD_URBStateTypeDef urb_state); /*!< USB OTG HCD Host Channel Notify URB Change callback */ 103 104 void (* MspInitCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Msp Init callback */ 105 void (* MspDeInitCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Msp DeInit callback */ 106 #endif /* USE_HAL_HCD_REGISTER_CALLBACKS */ 107 } HCD_HandleTypeDef; 108 /** 109 * @} 110 */ 111 112 /** 113 * @} 114 */ 115 116 /* Exported constants --------------------------------------------------------*/ 117 /** @defgroup HCD_Exported_Constants HCD Exported Constants 118 * @{ 119 */ 120 121 /** @defgroup HCD_Speed HCD Speed 122 * @{ 123 */ 124 #define HCD_SPEED_HIGH 0U 125 #define HCD_SPEED_LOW 2U 126 #define HCD_SPEED_FULL 3U 127 /** 128 * @} 129 */ 130 131 /** @defgroup HCD_PHY_Module HCD PHY Module 132 * @{ 133 */ 134 #define HCD_PHY_ULPI 1U 135 #define HCD_PHY_EMBEDDED 2U 136 /** 137 * @} 138 */ 139 140 /** @defgroup HCD_Error_Code_definition HCD Error Code definition 141 * @brief HCD Error Code definition 142 * @{ 143 */ 144 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 145 #define HAL_HCD_ERROR_INVALID_CALLBACK (0x00000010U) /*!< Invalid Callback error */ 146 #endif /* USE_HAL_HCD_REGISTER_CALLBACKS */ 147 148 /** 149 * @} 150 */ 151 152 /** 153 * @} 154 */ 155 156 /* Exported macro ------------------------------------------------------------*/ 157 /** @defgroup HCD_Exported_Macros HCD Exported Macros 158 * @brief macros to handle interrupts and specific clock configurations 159 * @{ 160 */ 161 #define __HAL_HCD_ENABLE(__HANDLE__) (void)USB_EnableGlobalInt ((__HANDLE__)->Instance) 162 #define __HAL_HCD_DISABLE(__HANDLE__) (void)USB_DisableGlobalInt ((__HANDLE__)->Instance) 163 164 #define __HAL_HCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((USB_ReadInterrupts((__HANDLE__)->Instance) & (__INTERRUPT__)) == (__INTERRUPT__)) 165 #define __HAL_HCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->GINTSTS) = (__INTERRUPT__)) 166 #define __HAL_HCD_IS_INVALID_INTERRUPT(__HANDLE__) (USB_ReadInterrupts((__HANDLE__)->Instance) == 0U) 167 168 #define __HAL_HCD_CLEAR_HC_INT(chnum, __INTERRUPT__) (USBx_HC(chnum)->HCINT = (__INTERRUPT__)) 169 #define __HAL_HCD_MASK_HALT_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK &= ~USB_OTG_HCINTMSK_CHHM) 170 #define __HAL_HCD_UNMASK_HALT_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK |= USB_OTG_HCINTMSK_CHHM) 171 #define __HAL_HCD_MASK_ACK_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK &= ~USB_OTG_HCINTMSK_ACKM) 172 #define __HAL_HCD_UNMASK_ACK_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK |= USB_OTG_HCINTMSK_ACKM) 173 /** 174 * @} 175 */ 176 177 /* Exported functions --------------------------------------------------------*/ 178 /** @addtogroup HCD_Exported_Functions HCD Exported Functions 179 * @{ 180 */ 181 182 /** @defgroup HCD_Exported_Functions_Group1 Initialization and de-initialization functions 183 * @{ 184 */ 185 HAL_StatusTypeDef HAL_HCD_Init(HCD_HandleTypeDef *hhcd); 186 HAL_StatusTypeDef HAL_HCD_DeInit(HCD_HandleTypeDef *hhcd); 187 HAL_StatusTypeDef HAL_HCD_HC_Init(HCD_HandleTypeDef *hhcd, 188 uint8_t ch_num, 189 uint8_t epnum, 190 uint8_t dev_address, 191 uint8_t speed, 192 uint8_t ep_type, 193 uint16_t mps); 194 195 HAL_StatusTypeDef HAL_HCD_HC_Halt(HCD_HandleTypeDef *hhcd, uint8_t ch_num); 196 void HAL_HCD_MspInit(HCD_HandleTypeDef *hhcd); 197 void HAL_HCD_MspDeInit(HCD_HandleTypeDef *hhcd); 198 199 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 200 /** @defgroup HAL_HCD_Callback_ID_enumeration_definition HAL USB OTG HCD Callback ID enumeration definition 201 * @brief HAL USB OTG HCD Callback ID enumeration definition 202 * @{ 203 */ 204 typedef enum 205 { 206 HAL_HCD_SOF_CB_ID = 0x01, /*!< USB HCD SOF callback ID */ 207 HAL_HCD_CONNECT_CB_ID = 0x02, /*!< USB HCD Connect callback ID */ 208 HAL_HCD_DISCONNECT_CB_ID = 0x03, /*!< USB HCD Disconnect callback ID */ 209 HAL_HCD_PORT_ENABLED_CB_ID = 0x04, /*!< USB HCD Port Enable callback ID */ 210 HAL_HCD_PORT_DISABLED_CB_ID = 0x05, /*!< USB HCD Port Disable callback ID */ 211 212 HAL_HCD_MSPINIT_CB_ID = 0x06, /*!< USB HCD MspInit callback ID */ 213 HAL_HCD_MSPDEINIT_CB_ID = 0x07 /*!< USB HCD MspDeInit callback ID */ 214 215 } HAL_HCD_CallbackIDTypeDef; 216 /** 217 * @} 218 */ 219 220 /** @defgroup HAL_HCD_Callback_pointer_definition HAL USB OTG HCD Callback pointer definition 221 * @brief HAL USB OTG HCD Callback pointer definition 222 * @{ 223 */ 224 225 typedef void (*pHCD_CallbackTypeDef)(HCD_HandleTypeDef *hhcd); /*!< pointer to a common USB OTG HCD callback function */ 226 typedef void (*pHCD_HC_NotifyURBChangeCallbackTypeDef)(HCD_HandleTypeDef *hhcd, 227 uint8_t epnum, 228 HCD_URBStateTypeDef urb_state); /*!< pointer to USB OTG HCD host channel callback */ 229 /** 230 * @} 231 */ 232 233 HAL_StatusTypeDef HAL_HCD_RegisterCallback(HCD_HandleTypeDef *hhcd, HAL_HCD_CallbackIDTypeDef CallbackID, pHCD_CallbackTypeDef pCallback); 234 HAL_StatusTypeDef HAL_HCD_UnRegisterCallback(HCD_HandleTypeDef *hhcd, HAL_HCD_CallbackIDTypeDef CallbackID); 235 236 HAL_StatusTypeDef HAL_HCD_RegisterHC_NotifyURBChangeCallback(HCD_HandleTypeDef *hhcd, pHCD_HC_NotifyURBChangeCallbackTypeDef pCallback); 237 HAL_StatusTypeDef HAL_HCD_UnRegisterHC_NotifyURBChangeCallback(HCD_HandleTypeDef *hhcd); 238 #endif /* USE_HAL_HCD_REGISTER_CALLBACKS */ 239 /** 240 * @} 241 */ 242 243 /* I/O operation functions ***************************************************/ 244 /** @addtogroup HCD_Exported_Functions_Group2 Input and Output operation functions 245 * @{ 246 */ 247 HAL_StatusTypeDef HAL_HCD_HC_SubmitRequest(HCD_HandleTypeDef *hhcd, 248 uint8_t pipe, 249 uint8_t direction, 250 uint8_t ep_type, 251 uint8_t token, 252 uint8_t *pbuff, 253 uint16_t length, 254 uint8_t do_ping); 255 256 /* Non-Blocking mode: Interrupt */ 257 void HAL_HCD_IRQHandler(HCD_HandleTypeDef *hhcd); 258 void HAL_HCD_SOF_Callback(HCD_HandleTypeDef *hhcd); 259 void HAL_HCD_Connect_Callback(HCD_HandleTypeDef *hhcd); 260 void HAL_HCD_Disconnect_Callback(HCD_HandleTypeDef *hhcd); 261 void HAL_HCD_PortEnabled_Callback(HCD_HandleTypeDef *hhcd); 262 void HAL_HCD_PortDisabled_Callback(HCD_HandleTypeDef *hhcd); 263 void HAL_HCD_HC_NotifyURBChange_Callback(HCD_HandleTypeDef *hhcd, 264 uint8_t chnum, 265 HCD_URBStateTypeDef urb_state); 266 /** 267 * @} 268 */ 269 270 /* Peripheral Control functions **********************************************/ 271 /** @addtogroup HCD_Exported_Functions_Group3 Peripheral Control functions 272 * @{ 273 */ 274 HAL_StatusTypeDef HAL_HCD_ResetPort(HCD_HandleTypeDef *hhcd); 275 HAL_StatusTypeDef HAL_HCD_Start(HCD_HandleTypeDef *hhcd); 276 HAL_StatusTypeDef HAL_HCD_Stop(HCD_HandleTypeDef *hhcd); 277 /** 278 * @} 279 */ 280 281 /* Peripheral State functions ************************************************/ 282 /** @addtogroup HCD_Exported_Functions_Group4 Peripheral State functions 283 * @{ 284 */ 285 HCD_StateTypeDef HAL_HCD_GetState(HCD_HandleTypeDef *hhcd); 286 HCD_URBStateTypeDef HAL_HCD_HC_GetURBState(HCD_HandleTypeDef *hhcd, uint8_t chnum); 287 uint32_t HAL_HCD_HC_GetXferCount(HCD_HandleTypeDef *hhcd, uint8_t chnum); 288 HCD_HCStateTypeDef HAL_HCD_HC_GetState(HCD_HandleTypeDef *hhcd, uint8_t chnum); 289 uint32_t HAL_HCD_GetCurrentFrame(HCD_HandleTypeDef *hhcd); 290 uint32_t HAL_HCD_GetCurrentSpeed(HCD_HandleTypeDef *hhcd); 291 /** 292 * @} 293 */ 294 295 /** 296 * @} 297 */ 298 299 /* Private macros ------------------------------------------------------------*/ 300 /** @defgroup HCD_Private_Macros HCD Private Macros 301 * @{ 302 */ 303 304 /** 305 * @} 306 */ 307 308 /* Private functions prototypes ----------------------------------------------*/ 309 /** @defgroup HCD_Private_Functions_Prototypes HCD Private Functions Prototypes 310 * @{ 311 */ 312 313 /** 314 * @} 315 */ 316 317 /* Private functions ---------------------------------------------------------*/ 318 /** @defgroup HCD_Private_Functions HCD Private Functions 319 * @{ 320 */ 321 322 /** 323 * @} 324 */ 325 326 /** 327 * @} 328 */ 329 330 /** 331 * @} 332 */ 333 334 #endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ 335 336 #ifdef __cplusplus 337 } 338 #endif 339 340 #endif /* __STM32L4xx_HAL_HCD_H */ 341 342 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 343