1 /** 2 ****************************************************************************** 3 * @file stm32f2xx_hal_hcd.h 4 * @author MCD Application Team 5 * @brief Header file of HCD 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 STM32F2xx_HAL_HCD_H 21 #define STM32F2xx_HAL_HCD_H 22 23 #ifdef __cplusplus 24 extern "C" { 25 #endif 26 27 /* Includes ------------------------------------------------------------------*/ 28 #include "stm32f2xx_ll_usb.h" 29 30 #if defined (USB_OTG_FS) || defined (USB_OTG_HS) 31 /** @addtogroup STM32F2xx_HAL_Driver 32 * @{ 33 */ 34 35 /** @addtogroup HCD HCD 36 * @{ 37 */ 38 39 /* Exported types ------------------------------------------------------------*/ 40 /** @defgroup HCD_Exported_Types HCD Exported Types 41 * @{ 42 */ 43 44 /** @defgroup HCD_Exported_Types_Group1 HCD State Structure definition 45 * @{ 46 */ 47 typedef enum 48 { 49 HAL_HCD_STATE_RESET = 0x00, 50 HAL_HCD_STATE_READY = 0x01, 51 HAL_HCD_STATE_ERROR = 0x02, 52 HAL_HCD_STATE_BUSY = 0x03, 53 HAL_HCD_STATE_TIMEOUT = 0x04 54 } HCD_StateTypeDef; 55 56 typedef USB_OTG_GlobalTypeDef HCD_TypeDef; 57 typedef USB_OTG_CfgTypeDef HCD_InitTypeDef; 58 typedef USB_OTG_HCTypeDef HCD_HCTypeDef; 59 typedef USB_OTG_URBStateTypeDef HCD_URBStateTypeDef; 60 typedef USB_OTG_HCStateTypeDef HCD_HCStateTypeDef; 61 /** 62 * @} 63 */ 64 65 /** @defgroup HCD_Exported_Types_Group2 HCD Handle Structure definition 66 * @{ 67 */ 68 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 69 typedef struct __HCD_HandleTypeDef 70 #else 71 typedef struct 72 #endif /* USE_HAL_HCD_REGISTER_CALLBACKS */ 73 { 74 HCD_TypeDef *Instance; /*!< Register base address */ 75 HCD_InitTypeDef Init; /*!< HCD required parameters */ 76 HCD_HCTypeDef hc[16]; /*!< Host channels parameters */ 77 HAL_LockTypeDef Lock; /*!< HCD peripheral status */ 78 __IO HCD_StateTypeDef State; /*!< HCD communication state */ 79 __IO uint32_t ErrorCode; /*!< HCD Error code */ 80 void *pData; /*!< Pointer Stack Handler */ 81 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 82 void (* SOFCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD SOF callback */ 83 void (* ConnectCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Connect callback */ 84 void (* DisconnectCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Disconnect callback */ 85 void (* PortEnabledCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Port Enable callback */ 86 void (* PortDisabledCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Port Disable callback */ 87 void (* HC_NotifyURBChangeCallback)(struct __HCD_HandleTypeDef *hhcd, uint8_t chnum, 88 HCD_URBStateTypeDef urb_state); /*!< USB OTG HCD Host Channel Notify URB Change callback */ 89 90 void (* MspInitCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Msp Init callback */ 91 void (* MspDeInitCallback)(struct __HCD_HandleTypeDef *hhcd); /*!< USB OTG HCD Msp DeInit callback */ 92 #endif /* USE_HAL_HCD_REGISTER_CALLBACKS */ 93 } HCD_HandleTypeDef; 94 /** 95 * @} 96 */ 97 98 /** 99 * @} 100 */ 101 102 /* Exported constants --------------------------------------------------------*/ 103 /** @defgroup HCD_Exported_Constants HCD Exported Constants 104 * @{ 105 */ 106 107 /** @defgroup HCD_Speed HCD Speed 108 * @{ 109 */ 110 #define HCD_SPEED_HIGH USBH_HS_SPEED 111 #define HCD_SPEED_FULL USBH_FSLS_SPEED 112 #define HCD_SPEED_LOW USBH_FSLS_SPEED 113 /** 114 * @} 115 */ 116 117 /** @defgroup HCD_Device_Speed HCD Device Speed 118 * @{ 119 */ 120 #define HCD_DEVICE_SPEED_HIGH 0U 121 #define HCD_DEVICE_SPEED_FULL 1U 122 #define HCD_DEVICE_SPEED_LOW 2U 123 /** 124 * @} 125 */ 126 127 /** @defgroup HCD_PHY_Module HCD PHY Module 128 * @{ 129 */ 130 #define HCD_PHY_ULPI 1U 131 #define HCD_PHY_EMBEDDED 2U 132 /** 133 * @} 134 */ 135 136 /** @defgroup HCD_Error_Code_definition HCD Error Code definition 137 * @brief HCD Error Code definition 138 * @{ 139 */ 140 #if (USE_HAL_HCD_REGISTER_CALLBACKS == 1U) 141 #define HAL_HCD_ERROR_INVALID_CALLBACK (0x00000010U) /*!< Invalid Callback error */ 142 #endif /* USE_HAL_HCD_REGISTER_CALLBACKS */ 143 144 /** 145 * @} 146 */ 147 148 /** 149 * @} 150 */ 151 152 /* Exported macro ------------------------------------------------------------*/ 153 /** @defgroup HCD_Exported_Macros HCD Exported Macros 154 * @brief macros to handle interrupts and specific clock configurations 155 * @{ 156 */ 157 #define __HAL_HCD_ENABLE(__HANDLE__) (void)USB_EnableGlobalInt ((__HANDLE__)->Instance) 158 #define __HAL_HCD_DISABLE(__HANDLE__) (void)USB_DisableGlobalInt ((__HANDLE__)->Instance) 159 160 #define __HAL_HCD_GET_FLAG(__HANDLE__, __INTERRUPT__) ((USB_ReadInterrupts((__HANDLE__)->Instance)\ 161 & (__INTERRUPT__)) == (__INTERRUPT__)) 162 163 #define __HAL_HCD_GET_CH_FLAG(__HANDLE__, __chnum__, __INTERRUPT__) \ 164 ((USB_ReadChInterrupts((__HANDLE__)->Instance, (__chnum__)) & (__INTERRUPT__)) == (__INTERRUPT__)) 165 166 #define __HAL_HCD_CLEAR_FLAG(__HANDLE__, __INTERRUPT__) (((__HANDLE__)->Instance->GINTSTS) = (__INTERRUPT__)) 167 #define __HAL_HCD_IS_INVALID_INTERRUPT(__HANDLE__) (USB_ReadInterrupts((__HANDLE__)->Instance) == 0U) 168 169 #define __HAL_HCD_CLEAR_HC_INT(chnum, __INTERRUPT__) (USBx_HC(chnum)->HCINT = (__INTERRUPT__)) 170 #define __HAL_HCD_MASK_HALT_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK &= ~USB_OTG_HCINTMSK_CHHM) 171 #define __HAL_HCD_UNMASK_HALT_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK |= USB_OTG_HCINTMSK_CHHM) 172 #define __HAL_HCD_MASK_ACK_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK &= ~USB_OTG_HCINTMSK_ACKM) 173 #define __HAL_HCD_UNMASK_ACK_HC_INT(chnum) (USBx_HC(chnum)->HCINTMSK |= USB_OTG_HCINTMSK_ACKM) 174 #define __HAL_HCD_SET_HC_CSPLT(chnum) (USBx_HC(chnum)->HCSPLT |= USB_OTG_HCSPLT_COMPLSPLT) 175 #define __HAL_HCD_CLEAR_HC_CSPLT(chnum) (USBx_HC(chnum)->HCSPLT &= ~USB_OTG_HCSPLT_COMPLSPLT) 176 #define __HAL_HCD_CLEAR_HC_SSPLT(chnum) (USBx_HC(chnum)->HCSPLT &= ~USB_OTG_HCSPLT_SPLITEN) 177 /** 178 * @} 179 */ 180 181 /* Exported functions --------------------------------------------------------*/ 182 /** @addtogroup HCD_Exported_Functions HCD Exported Functions 183 * @{ 184 */ 185 186 /** @defgroup HCD_Exported_Functions_Group1 Initialization and de-initialization functions 187 * @{ 188 */ 189 HAL_StatusTypeDef HAL_HCD_Init(HCD_HandleTypeDef *hhcd); 190 HAL_StatusTypeDef HAL_HCD_DeInit(HCD_HandleTypeDef *hhcd); 191 HAL_StatusTypeDef HAL_HCD_HC_Init(HCD_HandleTypeDef *hhcd, uint8_t ch_num, 192 uint8_t epnum, uint8_t dev_address, 193 uint8_t speed, uint8_t ep_type, 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, 234 HAL_HCD_CallbackIDTypeDef CallbackID, 235 pHCD_CallbackTypeDef pCallback); 236 237 HAL_StatusTypeDef HAL_HCD_UnRegisterCallback(HCD_HandleTypeDef *hhcd, 238 HAL_HCD_CallbackIDTypeDef CallbackID); 239 240 HAL_StatusTypeDef HAL_HCD_RegisterHC_NotifyURBChangeCallback(HCD_HandleTypeDef *hhcd, 241 pHCD_HC_NotifyURBChangeCallbackTypeDef pCallback); 242 243 HAL_StatusTypeDef HAL_HCD_UnRegisterHC_NotifyURBChangeCallback(HCD_HandleTypeDef *hhcd); 244 #endif /* USE_HAL_HCD_REGISTER_CALLBACKS */ 245 /** 246 * @} 247 */ 248 249 /* I/O operation functions ***************************************************/ 250 /** @addtogroup HCD_Exported_Functions_Group2 Input and Output operation functions 251 * @{ 252 */ 253 HAL_StatusTypeDef HAL_HCD_HC_SubmitRequest(HCD_HandleTypeDef *hhcd, uint8_t ch_num, 254 uint8_t direction, uint8_t ep_type, 255 uint8_t token, uint8_t *pbuff, 256 uint16_t length, uint8_t do_ping); 257 258 HAL_StatusTypeDef HAL_HCD_HC_SetHubInfo(HCD_HandleTypeDef *hhcd, uint8_t ch_num, 259 uint8_t addr, uint8_t PortNbr); 260 261 HAL_StatusTypeDef HAL_HCD_HC_ClearHubInfo(HCD_HandleTypeDef *hhcd, uint8_t ch_num); 262 263 /* Non-Blocking mode: Interrupt */ 264 void HAL_HCD_IRQHandler(HCD_HandleTypeDef *hhcd); 265 void HAL_HCD_WKUP_IRQHandler(HCD_HandleTypeDef *hhcd); 266 void HAL_HCD_SOF_Callback(HCD_HandleTypeDef *hhcd); 267 void HAL_HCD_Connect_Callback(HCD_HandleTypeDef *hhcd); 268 void HAL_HCD_Disconnect_Callback(HCD_HandleTypeDef *hhcd); 269 void HAL_HCD_PortEnabled_Callback(HCD_HandleTypeDef *hhcd); 270 void HAL_HCD_PortDisabled_Callback(HCD_HandleTypeDef *hhcd); 271 void HAL_HCD_HC_NotifyURBChange_Callback(HCD_HandleTypeDef *hhcd, uint8_t chnum, 272 HCD_URBStateTypeDef urb_state); 273 /** 274 * @} 275 */ 276 277 /* Peripheral Control functions **********************************************/ 278 /** @addtogroup HCD_Exported_Functions_Group3 Peripheral Control functions 279 * @{ 280 */ 281 HAL_StatusTypeDef HAL_HCD_ResetPort(HCD_HandleTypeDef *hhcd); 282 HAL_StatusTypeDef HAL_HCD_Start(HCD_HandleTypeDef *hhcd); 283 HAL_StatusTypeDef HAL_HCD_Stop(HCD_HandleTypeDef *hhcd); 284 /** 285 * @} 286 */ 287 288 /* Peripheral State functions ************************************************/ 289 /** @addtogroup HCD_Exported_Functions_Group4 Peripheral State functions 290 * @{ 291 */ 292 HCD_StateTypeDef HAL_HCD_GetState(HCD_HandleTypeDef const *hhcd); 293 HCD_URBStateTypeDef HAL_HCD_HC_GetURBState(HCD_HandleTypeDef const *hhcd, uint8_t chnum); 294 HCD_HCStateTypeDef HAL_HCD_HC_GetState(HCD_HandleTypeDef const *hhcd, uint8_t chnum); 295 uint32_t HAL_HCD_HC_GetXferCount(HCD_HandleTypeDef const *hhcd, uint8_t chnum); 296 uint32_t HAL_HCD_GetCurrentFrame(HCD_HandleTypeDef *hhcd); 297 uint32_t HAL_HCD_GetCurrentSpeed(HCD_HandleTypeDef *hhcd); 298 299 300 /** 301 * @} 302 */ 303 304 /* Private macros ------------------------------------------------------------*/ 305 /** @defgroup HCD_Private_Macros HCD Private Macros 306 * @{ 307 */ 308 /** 309 * @} 310 */ 311 /* Private functions prototypes ----------------------------------------------*/ 312 313 /** 314 * @} 315 */ 316 /** 317 * @} 318 */ 319 /** 320 * @} 321 */ 322 #endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */ 323 324 #ifdef __cplusplus 325 } 326 #endif 327 328 #endif /* STM32F2xx_HAL_HCD_H */ 329