1 /** 2 ****************************************************************************** 3 * @file stm32f4xx_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) 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 STM32F4xx_HAL_HCD_H 22 #define STM32F4xx_HAL_HCD_H 23 24 #ifdef __cplusplus 25 extern "C" { 26 #endif 27 28 /* Includes ------------------------------------------------------------------*/ 29 #include "stm32f4xx_ll_usb.h" 30 31 #if defined (USB_OTG_FS) || defined (USB_OTG_HS) 32 /** @addtogroup STM32F4xx_HAL_Driver 33 * @{ 34 */ 35 36 /** @addtogroup HCD HCD 37 * @{ 38 */ 39 40 /* Exported types ------------------------------------------------------------*/ 41 /** @defgroup HCD_Exported_Types HCD Exported Types 42 * @{ 43 */ 44 45 /** @defgroup HCD_Exported_Types_Group1 HCD State Structure definition 46 * @{ 47 */ 48 typedef enum 49 { 50 HAL_HCD_STATE_RESET = 0x00, 51 HAL_HCD_STATE_READY = 0x01, 52 HAL_HCD_STATE_ERROR = 0x02, 53 HAL_HCD_STATE_BUSY = 0x03, 54 HAL_HCD_STATE_TIMEOUT = 0x04 55 } HCD_StateTypeDef; 56 57 typedef USB_OTG_GlobalTypeDef HCD_TypeDef; 58 typedef USB_OTG_CfgTypeDef HCD_InitTypeDef; 59 typedef USB_OTG_HCTypeDef HCD_HCTypeDef; 60 typedef USB_OTG_URBStateTypeDef HCD_URBStateTypeDef; 61 typedef USB_OTG_HCStateTypeDef HCD_HCStateTypeDef; 62 /** 63 * @} 64 */ 65 66 /** @defgroup HCD_Exported_Types_Group2 HCD Handle Structure definition 67 * @{ 68 */ 69 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 70 typedef struct __HCD_HandleTypeDef 71 #else 72 typedef struct 73 #endif /* USE_HAL_HCD_REGISTER_CALLBACKS */ 74 { 75 HCD_TypeDef *Instance; /*!< Register base address */ 76 HCD_InitTypeDef Init; /*!< HCD required parameters */ 77 HCD_HCTypeDef hc[16]; /*!< Host channels parameters */ 78 HAL_LockTypeDef Lock; /*!< HCD peripheral status */ 79 __IO HCD_StateTypeDef State; /*!< HCD communication state */ 80 __IO uint32_t ErrorCode; /*!< HCD Error code */ 81 void *pData; /*!< Pointer Stack Handler */ 82 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 83 void (* SOFCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD SOF callback */ 84 void (* ConnectCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Connect callback */ 85 void (* DisconnectCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Disconnect callback */ 86 void (* PortEnabledCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Port Enable callback */ 87 void (* PortDisabledCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Port Disable callback */ 88 void (* HC_NotifyURBChangeCallback)(struct __HCD_HandleTypeDef *hhcd, uint8_t chnum, 89 HCD_URBStateTypeDef urb_state); /*!< USB OTG HCD Host Channel Notify URB Change callback */ 90 91 void (* MspInitCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Msp Init callback */ 92 void (* MspDeInitCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Msp DeInit callback */ 93 #endif /* USE_HAL_HCD_REGISTER_CALLBACKS */ 94 } HCD_HandleTypeDef; 95 /** 96 * @} 97 */ 98 99 /** 100 * @} 101 */ 102 103 /* Exported constants --------------------------------------------------------*/ 104 /** @defgroup HCD_Exported_Constants HCD Exported Constants 105 * @{ 106 */ 107 108 /** @defgroup HCD_Speed HCD Speed 109 * @{ 110 */ 111 #define HCD_SPEED_HIGH USBH_HS_SPEED 112 #define HCD_SPEED_FULL USBH_FSLS_SPEED 113 #define HCD_SPEED_LOW USBH_FSLS_SPEED 114 /** 115 * @} 116 */ 117 118 /** @defgroup HCD_Device_Speed HCD Device Speed 119 * @{ 120 */ 121 #define HCD_DEVICE_SPEED_HIGH 0U 122 #define HCD_DEVICE_SPEED_FULL 1U 123 #define HCD_DEVICE_SPEED_LOW 2U 124 /** 125 * @} 126 */ 127 128 /** @defgroup HCD_PHY_Module HCD PHY Module 129 * @{ 130 */ 131 #define HCD_PHY_ULPI 1U 132 #define HCD_PHY_EMBEDDED 2U 133 /** 134 * @} 135 */ 136 137 /** @defgroup HCD_Error_Code_definition HCD Error Code definition 138 * @brief HCD Error Code definition 139 * @{ 140 */ 141 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 142 #define HAL_HCD_ERROR_INVALID_CALLBACK (0x00000010U) /*!< Invalid Callback error */ 143 #endif /* USE_HAL_HCD_REGISTER_CALLBACKS */ 144 145 /** 146 * @} 147 */ 148 149 /** 150 * @} 151 */ 152 153 /* Exported macro ------------------------------------------------------------*/ 154 /** @defgroup HCD_Exported_Macros HCD Exported Macros 155 * @brief macros to handle interrupts and specific clock configurations 156 * @{ 157 */ 158 #define __HAL_HCD_ENABLE(__HANDLE__) (void)USB_EnableGlobalInt ((__HANDLE__)->Instance) 159 #define __HAL_HCD_DISABLE(__HANDLE__) (void)USB_DisableGlobalInt ((__HANDLE__)->Instance) 160 161 #define __HAL_HCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((USB_ReadInterrupts((__HANDLE__)->Instance)\ 162 & (__INTERRUPT__)) == (__INTERRUPT__)) 163 #define __HAL_HCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->GINTSTS) = (__INTERRUPT__)) 164 #define __HAL_HCD_IS_INVALID_INTERRUPT(__HANDLE__) (USB_ReadInterrupts((__HANDLE__)->Instance) == 0U) 165 166 #define __HAL_HCD_CLEAR_HC_INT(chnum, __INTERRUPT__) (USBx_HC(chnum)->HCINT = (__INTERRUPT__)) 167 #define __HAL_HCD_MASK_HALT_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK &= ~USB_OTG_HCINTMSK_CHHM) 168 #define __HAL_HCD_UNMASK_HALT_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK |= USB_OTG_HCINTMSK_CHHM) 169 #define __HAL_HCD_MASK_ACK_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK &= ~USB_OTG_HCINTMSK_ACKM) 170 #define __HAL_HCD_UNMASK_ACK_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK |= USB_OTG_HCINTMSK_ACKM) 171 /** 172 * @} 173 */ 174 175 /* Exported functions --------------------------------------------------------*/ 176 /** @addtogroup HCD_Exported_Functions HCD Exported Functions 177 * @{ 178 */ 179 180 /** @defgroup HCD_Exported_Functions_Group1 Initialization and de-initialization functions 181 * @{ 182 */ 183 HAL_StatusTypeDef HAL_HCD_Init(HCD_HandleTypeDef *hhcd); 184 HAL_StatusTypeDef HAL_HCD_DeInit(HCD_HandleTypeDef *hhcd); 185 HAL_StatusTypeDef HAL_HCD_HC_Init(HCD_HandleTypeDef *hhcd, uint8_t ch_num, 186 uint8_t epnum, uint8_t dev_address, 187 uint8_t speed, uint8_t ep_type, uint16_t mps); 188 189 HAL_StatusTypeDef HAL_HCD_HC_Halt(HCD_HandleTypeDef *hhcd, uint8_t ch_num); 190 void HAL_HCD_MspInit(HCD_HandleTypeDef *hhcd); 191 void HAL_HCD_MspDeInit(HCD_HandleTypeDef *hhcd); 192 193 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 194 /** @defgroup HAL_HCD_Callback_ID_enumeration_definition HAL USB OTG HCD Callback ID enumeration definition 195 * @brief HAL USB OTG HCD Callback ID enumeration definition 196 * @{ 197 */ 198 typedef enum 199 { 200 HAL_HCD_SOF_CB_ID = 0x01, /*!< USB HCD SOF callback ID */ 201 HAL_HCD_CONNECT_CB_ID = 0x02, /*!< USB HCD Connect callback ID */ 202 HAL_HCD_DISCONNECT_CB_ID = 0x03, /*!< USB HCD Disconnect callback ID */ 203 HAL_HCD_PORT_ENABLED_CB_ID = 0x04, /*!< USB HCD Port Enable callback ID */ 204 HAL_HCD_PORT_DISABLED_CB_ID = 0x05, /*!< USB HCD Port Disable callback ID */ 205 206 HAL_HCD_MSPINIT_CB_ID = 0x06, /*!< USB HCD MspInit callback ID */ 207 HAL_HCD_MSPDEINIT_CB_ID = 0x07 /*!< USB HCD MspDeInit callback ID */ 208 209 } HAL_HCD_CallbackIDTypeDef; 210 /** 211 * @} 212 */ 213 214 /** @defgroup HAL_HCD_Callback_pointer_definition HAL USB OTG HCD Callback pointer definition 215 * @brief HAL USB OTG HCD Callback pointer definition 216 * @{ 217 */ 218 219 typedef void (*pHCD_CallbackTypeDef)(HCD_HandleTypeDef *hhcd); /*!< pointer to a common USB OTG HCD callback function */ 220 typedef void (*pHCD_HC_NotifyURBChangeCallbackTypeDef)(HCD_HandleTypeDef *hhcd, 221 uint8_t epnum, 222 HCD_URBStateTypeDef urb_state); /*!< pointer to USB OTG HCD host channel callback */ 223 /** 224 * @} 225 */ 226 227 HAL_StatusTypeDef HAL_HCD_RegisterCallback(HCD_HandleTypeDef *hhcd, 228 HAL_HCD_CallbackIDTypeDef CallbackID, 229 pHCD_CallbackTypeDef pCallback); 230 231 HAL_StatusTypeDef HAL_HCD_UnRegisterCallback(HCD_HandleTypeDef *hhcd, 232 HAL_HCD_CallbackIDTypeDef CallbackID); 233 234 HAL_StatusTypeDef HAL_HCD_RegisterHC_NotifyURBChangeCallback(HCD_HandleTypeDef *hhcd, 235 pHCD_HC_NotifyURBChangeCallbackTypeDef pCallback); 236 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, uint8_t ch_num, 248 uint8_t direction, uint8_t ep_type, 249 uint8_t token, uint8_t *pbuff, 250 uint16_t length, uint8_t do_ping); 251 252 /* Non-Blocking mode: Interrupt */ 253 void HAL_HCD_IRQHandler(HCD_HandleTypeDef *hhcd); 254 void HAL_HCD_WKUP_IRQHandler(HCD_HandleTypeDef *hhcd); 255 void HAL_HCD_SOF_Callback(HCD_HandleTypeDef *hhcd); 256 void HAL_HCD_Connect_Callback(HCD_HandleTypeDef *hhcd); 257 void HAL_HCD_Disconnect_Callback(HCD_HandleTypeDef *hhcd); 258 void HAL_HCD_PortEnabled_Callback(HCD_HandleTypeDef *hhcd); 259 void HAL_HCD_PortDisabled_Callback(HCD_HandleTypeDef *hhcd); 260 void HAL_HCD_HC_NotifyURBChange_Callback(HCD_HandleTypeDef *hhcd, uint8_t chnum, 261 HCD_URBStateTypeDef urb_state); 262 /** 263 * @} 264 */ 265 266 /* Peripheral Control functions **********************************************/ 267 /** @addtogroup HCD_Exported_Functions_Group3 Peripheral Control functions 268 * @{ 269 */ 270 HAL_StatusTypeDef HAL_HCD_ResetPort(HCD_HandleTypeDef *hhcd); 271 HAL_StatusTypeDef HAL_HCD_Start(HCD_HandleTypeDef *hhcd); 272 HAL_StatusTypeDef HAL_HCD_Stop(HCD_HandleTypeDef *hhcd); 273 /** 274 * @} 275 */ 276 277 /* Peripheral State functions ************************************************/ 278 /** @addtogroup HCD_Exported_Functions_Group4 Peripheral State functions 279 * @{ 280 */ 281 HCD_StateTypeDef HAL_HCD_GetState(HCD_HandleTypeDef *hhcd); 282 HCD_URBStateTypeDef HAL_HCD_HC_GetURBState(HCD_HandleTypeDef *hhcd, uint8_t chnum); 283 HCD_HCStateTypeDef HAL_HCD_HC_GetState(HCD_HandleTypeDef *hhcd, uint8_t chnum); 284 uint32_t HAL_HCD_HC_GetXferCount(HCD_HandleTypeDef *hhcd, uint8_t chnum); 285 uint32_t HAL_HCD_GetCurrentFrame(HCD_HandleTypeDef *hhcd); 286 uint32_t HAL_HCD_GetCurrentSpeed(HCD_HandleTypeDef *hhcd); 287 288 /** 289 * @} 290 */ 291 292 /** 293 * @} 294 */ 295 296 /* Private macros ------------------------------------------------------------*/ 297 /** @defgroup HCD_Private_Macros HCD Private Macros 298 * @{ 299 */ 300 /** 301 * @} 302 */ 303 /* Private functions prototypes ----------------------------------------------*/ 304 305 /** 306 * @} 307 */ 308 /** 309 * @} 310 */ 311 #endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ 312 313 #ifdef __cplusplus 314 } 315 #endif 316 317 #endif /* STM32F4xx_HAL_HCD_H */ 318 319 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ 320