USB CDC library for MBED on STM32

Dependents:   PushToGo-F429

Committer:
caoyuan9642
Date:
Sun Sep 09 19:03:18 2018 +0000
Revision:
0:7cf972f622d3
usb

Who changed what in which revision?

UserRevisionLine numberNew contents of line
caoyuan9642 0:7cf972f622d3 1 /**
caoyuan9642 0:7cf972f622d3 2 ******************************************************************************
caoyuan9642 0:7cf972f622d3 3 * @file usbd_conf_template.c
caoyuan9642 0:7cf972f622d3 4 * @author MCD Application Team
caoyuan9642 0:7cf972f622d3 5 * @version V2.4.2
caoyuan9642 0:7cf972f622d3 6 * @date 11-December-2015
caoyuan9642 0:7cf972f622d3 7 * @brief USB Device configuration and interface file
caoyuan9642 0:7cf972f622d3 8 * This template should be copied to the user folder, renamed and customized
caoyuan9642 0:7cf972f622d3 9 * following user needs.
caoyuan9642 0:7cf972f622d3 10 ******************************************************************************
caoyuan9642 0:7cf972f622d3 11 * @attention
caoyuan9642 0:7cf972f622d3 12 *
caoyuan9642 0:7cf972f622d3 13 * <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2>
caoyuan9642 0:7cf972f622d3 14 *
caoyuan9642 0:7cf972f622d3 15 * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
caoyuan9642 0:7cf972f622d3 16 * You may not use this file except in compliance with the License.
caoyuan9642 0:7cf972f622d3 17 * You may obtain a copy of the License at:
caoyuan9642 0:7cf972f622d3 18 *
caoyuan9642 0:7cf972f622d3 19 * http://www.st.com/software_license_agreement_liberty_v2
caoyuan9642 0:7cf972f622d3 20 *
caoyuan9642 0:7cf972f622d3 21 * Unless required by applicable law or agreed to in writing, software
caoyuan9642 0:7cf972f622d3 22 * distributed under the License is distributed on an "AS IS" BASIS,
caoyuan9642 0:7cf972f622d3 23 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
caoyuan9642 0:7cf972f622d3 24 * See the License for the specific language governing permissions and
caoyuan9642 0:7cf972f622d3 25 * limitations under the License.
caoyuan9642 0:7cf972f622d3 26 *
caoyuan9642 0:7cf972f622d3 27 ******************************************************************************
caoyuan9642 0:7cf972f622d3 28 */
caoyuan9642 0:7cf972f622d3 29
caoyuan9642 0:7cf972f622d3 30 /* Includes ------------------------------------------------------------------*/
caoyuan9642 0:7cf972f622d3 31 #include "usbd_core.h"
caoyuan9642 0:7cf972f622d3 32 #include "stm32f4xx_hal.h"
caoyuan9642 0:7cf972f622d3 33 #include "pinmap.h"
caoyuan9642 0:7cf972f622d3 34 /* Private typedef -----------------------------------------------------------*/
caoyuan9642 0:7cf972f622d3 35 /* Private define ------------------------------------------------------------*/
caoyuan9642 0:7cf972f622d3 36 /* Private macro -------------------------------------------------------------*/
caoyuan9642 0:7cf972f622d3 37 /* Private variables ---------------------------------------------------------*/
caoyuan9642 0:7cf972f622d3 38 /* Private function prototypes -----------------------------------------------*/
caoyuan9642 0:7cf972f622d3 39 /* Private functions ---------------------------------------------------------*/
caoyuan9642 0:7cf972f622d3 40 PCD_HandleTypeDef hpcd;
caoyuan9642 0:7cf972f622d3 41 void HAL_PCD_MspInit(PCD_HandleTypeDef *hpcd)
caoyuan9642 0:7cf972f622d3 42 {
caoyuan9642 0:7cf972f622d3 43 pin_function(PB_14,
caoyuan9642 0:7cf972f622d3 44 STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_OTG_HS_FS)); // DM
caoyuan9642 0:7cf972f622d3 45 pin_function(PB_15,
caoyuan9642 0:7cf972f622d3 46 STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF12_OTG_HS_FS)); // DP
caoyuan9642 0:7cf972f622d3 47 pin_function(PB_13,
caoyuan9642 0:7cf972f622d3 48 STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, GPIO_AF12_OTG_HS_FS)); // VBUS
caoyuan9642 0:7cf972f622d3 49 __HAL_RCC_USB_OTG_HS_CLK_ENABLE()
caoyuan9642 0:7cf972f622d3 50 ;
caoyuan9642 0:7cf972f622d3 51
caoyuan9642 0:7cf972f622d3 52 NVIC_SetPriority(OTG_HS_IRQn, 1);
caoyuan9642 0:7cf972f622d3 53 }
caoyuan9642 0:7cf972f622d3 54
caoyuan9642 0:7cf972f622d3 55 /**
caoyuan9642 0:7cf972f622d3 56 * @brief DeInitializes the PCD MSP.
caoyuan9642 0:7cf972f622d3 57 * @param hpcd: PCD handle
caoyuan9642 0:7cf972f622d3 58 * @retval None
caoyuan9642 0:7cf972f622d3 59 */
caoyuan9642 0:7cf972f622d3 60 void HAL_PCD_MspDeInit(PCD_HandleTypeDef *hpcd)
caoyuan9642 0:7cf972f622d3 61 {
caoyuan9642 0:7cf972f622d3 62 /* Disable USB FS Clocks */
caoyuan9642 0:7cf972f622d3 63 __HAL_RCC_USB_OTG_HS_CLK_ENABLE()
caoyuan9642 0:7cf972f622d3 64 ;
caoyuan9642 0:7cf972f622d3 65 }
caoyuan9642 0:7cf972f622d3 66
caoyuan9642 0:7cf972f622d3 67 /*******************************************************************************
caoyuan9642 0:7cf972f622d3 68 LL Driver Callbacks (PCD -> USB Device Library)
caoyuan9642 0:7cf972f622d3 69 *******************************************************************************/
caoyuan9642 0:7cf972f622d3 70
caoyuan9642 0:7cf972f622d3 71 /**
caoyuan9642 0:7cf972f622d3 72 * @brief SOF callback.
caoyuan9642 0:7cf972f622d3 73 * @param hpcd: PCD handle
caoyuan9642 0:7cf972f622d3 74 * @retval None
caoyuan9642 0:7cf972f622d3 75 */
caoyuan9642 0:7cf972f622d3 76 void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
caoyuan9642 0:7cf972f622d3 77 {
caoyuan9642 0:7cf972f622d3 78 USBD_LL_SetupStage(hpcd->pData, (uint8_t *) hpcd->Setup);
caoyuan9642 0:7cf972f622d3 79 }
caoyuan9642 0:7cf972f622d3 80
caoyuan9642 0:7cf972f622d3 81 /**
caoyuan9642 0:7cf972f622d3 82 * @brief SOF callback.
caoyuan9642 0:7cf972f622d3 83 * @param hpcd: PCD handle
caoyuan9642 0:7cf972f622d3 84 * @retval None
caoyuan9642 0:7cf972f622d3 85 */
caoyuan9642 0:7cf972f622d3 86 void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
caoyuan9642 0:7cf972f622d3 87 {
caoyuan9642 0:7cf972f622d3 88 USBD_LL_DataOutStage(hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff);
caoyuan9642 0:7cf972f622d3 89 }
caoyuan9642 0:7cf972f622d3 90
caoyuan9642 0:7cf972f622d3 91 /**
caoyuan9642 0:7cf972f622d3 92 * @brief SOF callback.
caoyuan9642 0:7cf972f622d3 93 * @param hpcd: PCD handle
caoyuan9642 0:7cf972f622d3 94 * @retval None
caoyuan9642 0:7cf972f622d3 95 */
caoyuan9642 0:7cf972f622d3 96 void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
caoyuan9642 0:7cf972f622d3 97 {
caoyuan9642 0:7cf972f622d3 98 USBD_LL_DataInStage(hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff);
caoyuan9642 0:7cf972f622d3 99 }
caoyuan9642 0:7cf972f622d3 100
caoyuan9642 0:7cf972f622d3 101 /**
caoyuan9642 0:7cf972f622d3 102 * @brief SOF callback.
caoyuan9642 0:7cf972f622d3 103 * @param hpcd: PCD handle
caoyuan9642 0:7cf972f622d3 104 * @retval None
caoyuan9642 0:7cf972f622d3 105 */
caoyuan9642 0:7cf972f622d3 106 void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
caoyuan9642 0:7cf972f622d3 107 {
caoyuan9642 0:7cf972f622d3 108 USBD_LL_SOF(hpcd->pData);
caoyuan9642 0:7cf972f622d3 109 }
caoyuan9642 0:7cf972f622d3 110
caoyuan9642 0:7cf972f622d3 111 /**
caoyuan9642 0:7cf972f622d3 112 * @brief SOF callback.
caoyuan9642 0:7cf972f622d3 113 * @param hpcd: PCD handle
caoyuan9642 0:7cf972f622d3 114 * @retval None
caoyuan9642 0:7cf972f622d3 115 */
caoyuan9642 0:7cf972f622d3 116 void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
caoyuan9642 0:7cf972f622d3 117 {
caoyuan9642 0:7cf972f622d3 118 USBD_SpeedTypeDef speed = USBD_SPEED_FULL;
caoyuan9642 0:7cf972f622d3 119
caoyuan9642 0:7cf972f622d3 120 /*Set USB Current Speed*/
caoyuan9642 0:7cf972f622d3 121 switch (hpcd->Init.speed)
caoyuan9642 0:7cf972f622d3 122 {
caoyuan9642 0:7cf972f622d3 123 case PCD_SPEED_HIGH:
caoyuan9642 0:7cf972f622d3 124 speed = USBD_SPEED_HIGH;
caoyuan9642 0:7cf972f622d3 125 break;
caoyuan9642 0:7cf972f622d3 126
caoyuan9642 0:7cf972f622d3 127 case PCD_SPEED_FULL:
caoyuan9642 0:7cf972f622d3 128 speed = USBD_SPEED_FULL;
caoyuan9642 0:7cf972f622d3 129 break;
caoyuan9642 0:7cf972f622d3 130
caoyuan9642 0:7cf972f622d3 131 default:
caoyuan9642 0:7cf972f622d3 132 speed = USBD_SPEED_FULL;
caoyuan9642 0:7cf972f622d3 133 break;
caoyuan9642 0:7cf972f622d3 134 }
caoyuan9642 0:7cf972f622d3 135 USBD_LL_SetSpeed(hpcd->pData, speed);
caoyuan9642 0:7cf972f622d3 136
caoyuan9642 0:7cf972f622d3 137 /*Reset Device*/
caoyuan9642 0:7cf972f622d3 138 USBD_LL_Reset(hpcd->pData);
caoyuan9642 0:7cf972f622d3 139 }
caoyuan9642 0:7cf972f622d3 140
caoyuan9642 0:7cf972f622d3 141 /**
caoyuan9642 0:7cf972f622d3 142 * @brief SOF callback.
caoyuan9642 0:7cf972f622d3 143 * @param hpcd: PCD handle
caoyuan9642 0:7cf972f622d3 144 * @retval None
caoyuan9642 0:7cf972f622d3 145 */
caoyuan9642 0:7cf972f622d3 146 void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
caoyuan9642 0:7cf972f622d3 147 {
caoyuan9642 0:7cf972f622d3 148 USBD_LL_Suspend(hpcd->pData);
caoyuan9642 0:7cf972f622d3 149 }
caoyuan9642 0:7cf972f622d3 150
caoyuan9642 0:7cf972f622d3 151 /**
caoyuan9642 0:7cf972f622d3 152 * @brief SOF callback.
caoyuan9642 0:7cf972f622d3 153 * @param hpcd: PCD handle
caoyuan9642 0:7cf972f622d3 154 * @retval None
caoyuan9642 0:7cf972f622d3 155 */
caoyuan9642 0:7cf972f622d3 156 void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
caoyuan9642 0:7cf972f622d3 157 {
caoyuan9642 0:7cf972f622d3 158 USBD_LL_Resume(hpcd->pData);
caoyuan9642 0:7cf972f622d3 159 }
caoyuan9642 0:7cf972f622d3 160
caoyuan9642 0:7cf972f622d3 161 /**
caoyuan9642 0:7cf972f622d3 162 * @brief SOF callback.
caoyuan9642 0:7cf972f622d3 163 * @param hpcd: PCD handle
caoyuan9642 0:7cf972f622d3 164 * @retval None
caoyuan9642 0:7cf972f622d3 165 */
caoyuan9642 0:7cf972f622d3 166 void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
caoyuan9642 0:7cf972f622d3 167 {
caoyuan9642 0:7cf972f622d3 168 USBD_LL_IsoOUTIncomplete(hpcd->pData, epnum);
caoyuan9642 0:7cf972f622d3 169 }
caoyuan9642 0:7cf972f622d3 170
caoyuan9642 0:7cf972f622d3 171 /**
caoyuan9642 0:7cf972f622d3 172 * @brief SOF callback.
caoyuan9642 0:7cf972f622d3 173 * @param hpcd: PCD handle
caoyuan9642 0:7cf972f622d3 174 * @retval None
caoyuan9642 0:7cf972f622d3 175 */
caoyuan9642 0:7cf972f622d3 176 void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
caoyuan9642 0:7cf972f622d3 177 {
caoyuan9642 0:7cf972f622d3 178 USBD_LL_IsoINIncomplete(hpcd->pData, epnum);
caoyuan9642 0:7cf972f622d3 179 }
caoyuan9642 0:7cf972f622d3 180
caoyuan9642 0:7cf972f622d3 181 /**
caoyuan9642 0:7cf972f622d3 182 * @brief SOF callback.
caoyuan9642 0:7cf972f622d3 183 * @param hpcd: PCD handle
caoyuan9642 0:7cf972f622d3 184 * @retval None
caoyuan9642 0:7cf972f622d3 185 */
caoyuan9642 0:7cf972f622d3 186 void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
caoyuan9642 0:7cf972f622d3 187 {
caoyuan9642 0:7cf972f622d3 188 USBD_LL_DevConnected(hpcd->pData);
caoyuan9642 0:7cf972f622d3 189 }
caoyuan9642 0:7cf972f622d3 190
caoyuan9642 0:7cf972f622d3 191 /**
caoyuan9642 0:7cf972f622d3 192 * @brief SOF callback.
caoyuan9642 0:7cf972f622d3 193 * @param hpcd: PCD handle
caoyuan9642 0:7cf972f622d3 194 * @retval None
caoyuan9642 0:7cf972f622d3 195 */
caoyuan9642 0:7cf972f622d3 196 void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
caoyuan9642 0:7cf972f622d3 197 {
caoyuan9642 0:7cf972f622d3 198 USBD_LL_DevDisconnected(hpcd->pData);
caoyuan9642 0:7cf972f622d3 199 }
caoyuan9642 0:7cf972f622d3 200
caoyuan9642 0:7cf972f622d3 201 /**
caoyuan9642 0:7cf972f622d3 202 * @brief Initializes the Low Level portion of the Device driver.
caoyuan9642 0:7cf972f622d3 203 * @param pdev: Device handle
caoyuan9642 0:7cf972f622d3 204 * @retval USBD Status
caoyuan9642 0:7cf972f622d3 205 */
caoyuan9642 0:7cf972f622d3 206 USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev)
caoyuan9642 0:7cf972f622d3 207 {
caoyuan9642 0:7cf972f622d3 208 /*Set LL Driver parameters */
caoyuan9642 0:7cf972f622d3 209 hpcd.Instance = USB_OTG_HS;
caoyuan9642 0:7cf972f622d3 210 hpcd.Init.dev_endpoints = 4;
caoyuan9642 0:7cf972f622d3 211 hpcd.Init.use_dedicated_ep1 = 0;
caoyuan9642 0:7cf972f622d3 212 hpcd.Init.ep0_mps = 0x40;
caoyuan9642 0:7cf972f622d3 213 hpcd.Init.dma_enable = 0;
caoyuan9642 0:7cf972f622d3 214 hpcd.Init.low_power_enable = 0;
caoyuan9642 0:7cf972f622d3 215 hpcd.Init.phy_itface = PCD_PHY_EMBEDDED;
caoyuan9642 0:7cf972f622d3 216 hpcd.Init.Sof_enable = 0;
caoyuan9642 0:7cf972f622d3 217 hpcd.Init.speed = PCD_SPEED_HIGH;
caoyuan9642 0:7cf972f622d3 218 hpcd.Init.vbus_sensing_enable = 1;
caoyuan9642 0:7cf972f622d3 219 /* Link The driver to the stack */
caoyuan9642 0:7cf972f622d3 220 hpcd.pData = pdev;
caoyuan9642 0:7cf972f622d3 221 pdev->pData = &hpcd;
caoyuan9642 0:7cf972f622d3 222 /*Initialize LL Driver */
caoyuan9642 0:7cf972f622d3 223 HAL_PCD_Init(&hpcd);
caoyuan9642 0:7cf972f622d3 224
caoyuan9642 0:7cf972f622d3 225 HAL_PCDEx_SetRxFiFo(&hpcd, 0x80);
caoyuan9642 0:7cf972f622d3 226 HAL_PCDEx_SetTxFiFo(&hpcd, 0, 0x40);
caoyuan9642 0:7cf972f622d3 227 HAL_PCDEx_SetTxFiFo(&hpcd, 1, 0x80);
caoyuan9642 0:7cf972f622d3 228 HAL_PCDEx_SetTxFiFo(&hpcd, 2, 0x80);
caoyuan9642 0:7cf972f622d3 229 HAL_PCDEx_SetTxFiFo(&hpcd, 3, 0x80);
caoyuan9642 0:7cf972f622d3 230 return USBD_OK;
caoyuan9642 0:7cf972f622d3 231 }
caoyuan9642 0:7cf972f622d3 232
caoyuan9642 0:7cf972f622d3 233 /**
caoyuan9642 0:7cf972f622d3 234 * @brief De-Initializes the Low Level portion of the Device driver.
caoyuan9642 0:7cf972f622d3 235 * @param pdev: Device handle
caoyuan9642 0:7cf972f622d3 236 * @retval USBD Status
caoyuan9642 0:7cf972f622d3 237 */
caoyuan9642 0:7cf972f622d3 238 USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev)
caoyuan9642 0:7cf972f622d3 239 {
caoyuan9642 0:7cf972f622d3 240 HAL_PCD_DeInit(pdev->pData);
caoyuan9642 0:7cf972f622d3 241 return USBD_OK;
caoyuan9642 0:7cf972f622d3 242 }
caoyuan9642 0:7cf972f622d3 243
caoyuan9642 0:7cf972f622d3 244 /**
caoyuan9642 0:7cf972f622d3 245 * @brief Starts the Low Level portion of the Device driver.
caoyuan9642 0:7cf972f622d3 246 * @param pdev: Device handle
caoyuan9642 0:7cf972f622d3 247 * @retval USBD Status
caoyuan9642 0:7cf972f622d3 248 */
caoyuan9642 0:7cf972f622d3 249 USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev)
caoyuan9642 0:7cf972f622d3 250 {
caoyuan9642 0:7cf972f622d3 251 HAL_PCD_Start(pdev->pData);
caoyuan9642 0:7cf972f622d3 252 NVIC_EnableIRQ(OTG_HS_IRQn);
caoyuan9642 0:7cf972f622d3 253 return USBD_OK;
caoyuan9642 0:7cf972f622d3 254 }
caoyuan9642 0:7cf972f622d3 255
caoyuan9642 0:7cf972f622d3 256 /**
caoyuan9642 0:7cf972f622d3 257 * @brief Stops the Low Level portion of the Device driver.
caoyuan9642 0:7cf972f622d3 258 * @param pdev: Device handle
caoyuan9642 0:7cf972f622d3 259 * @retval USBD Status
caoyuan9642 0:7cf972f622d3 260 */
caoyuan9642 0:7cf972f622d3 261 USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev)
caoyuan9642 0:7cf972f622d3 262 {
caoyuan9642 0:7cf972f622d3 263 HAL_PCD_Stop(pdev->pData);
caoyuan9642 0:7cf972f622d3 264 NVIC_DisableIRQ(OTG_HS_IRQn);
caoyuan9642 0:7cf972f622d3 265 return USBD_OK;
caoyuan9642 0:7cf972f622d3 266 }
caoyuan9642 0:7cf972f622d3 267
caoyuan9642 0:7cf972f622d3 268 /**
caoyuan9642 0:7cf972f622d3 269 * @brief Opens an endpoint of the Low Level Driver.
caoyuan9642 0:7cf972f622d3 270 * @param pdev: Device handle
caoyuan9642 0:7cf972f622d3 271 * @param ep_addr: Endpoint Number
caoyuan9642 0:7cf972f622d3 272 * @param ep_type: Endpoint Type
caoyuan9642 0:7cf972f622d3 273 * @param ep_mps: Endpoint Max Packet Size
caoyuan9642 0:7cf972f622d3 274 * @retval USBD Status
caoyuan9642 0:7cf972f622d3 275 */
caoyuan9642 0:7cf972f622d3 276 USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
caoyuan9642 0:7cf972f622d3 277 uint8_t ep_type, uint16_t ep_mps)
caoyuan9642 0:7cf972f622d3 278 {
caoyuan9642 0:7cf972f622d3 279 HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type);
caoyuan9642 0:7cf972f622d3 280 return USBD_OK;
caoyuan9642 0:7cf972f622d3 281 }
caoyuan9642 0:7cf972f622d3 282
caoyuan9642 0:7cf972f622d3 283 /**
caoyuan9642 0:7cf972f622d3 284 * @brief Closes an endpoint of the Low Level Driver.
caoyuan9642 0:7cf972f622d3 285 * @param pdev: Device handle
caoyuan9642 0:7cf972f622d3 286 * @param ep_addr: Endpoint Number
caoyuan9642 0:7cf972f622d3 287 * @retval USBD Status
caoyuan9642 0:7cf972f622d3 288 */
caoyuan9642 0:7cf972f622d3 289 USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
caoyuan9642 0:7cf972f622d3 290 {
caoyuan9642 0:7cf972f622d3 291 HAL_PCD_EP_Close(pdev->pData, ep_addr);
caoyuan9642 0:7cf972f622d3 292 return USBD_OK;
caoyuan9642 0:7cf972f622d3 293 }
caoyuan9642 0:7cf972f622d3 294
caoyuan9642 0:7cf972f622d3 295 /**
caoyuan9642 0:7cf972f622d3 296 * @brief Flushes an endpoint of the Low Level Driver.
caoyuan9642 0:7cf972f622d3 297 * @param pdev: Device handle
caoyuan9642 0:7cf972f622d3 298 * @param ep_addr: Endpoint Number
caoyuan9642 0:7cf972f622d3 299 * @retval USBD Status
caoyuan9642 0:7cf972f622d3 300 */
caoyuan9642 0:7cf972f622d3 301 USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
caoyuan9642 0:7cf972f622d3 302 {
caoyuan9642 0:7cf972f622d3 303 HAL_PCD_EP_Flush(pdev->pData, ep_addr);
caoyuan9642 0:7cf972f622d3 304 return USBD_OK;
caoyuan9642 0:7cf972f622d3 305 }
caoyuan9642 0:7cf972f622d3 306
caoyuan9642 0:7cf972f622d3 307 /**
caoyuan9642 0:7cf972f622d3 308 * @brief Sets a Stall condition on an endpoint of the Low Level Driver.
caoyuan9642 0:7cf972f622d3 309 * @param pdev: Device handle
caoyuan9642 0:7cf972f622d3 310 * @param ep_addr: Endpoint Number
caoyuan9642 0:7cf972f622d3 311 * @retval USBD Status
caoyuan9642 0:7cf972f622d3 312 */
caoyuan9642 0:7cf972f622d3 313 USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
caoyuan9642 0:7cf972f622d3 314 {
caoyuan9642 0:7cf972f622d3 315 HAL_PCD_EP_SetStall(pdev->pData, ep_addr);
caoyuan9642 0:7cf972f622d3 316 return USBD_OK;
caoyuan9642 0:7cf972f622d3 317 }
caoyuan9642 0:7cf972f622d3 318
caoyuan9642 0:7cf972f622d3 319 /**
caoyuan9642 0:7cf972f622d3 320 * @brief Clears a Stall condition on an endpoint of the Low Level Driver.
caoyuan9642 0:7cf972f622d3 321 * @param pdev: Device handle
caoyuan9642 0:7cf972f622d3 322 * @param ep_addr: Endpoint Number
caoyuan9642 0:7cf972f622d3 323 * @retval USBD Status
caoyuan9642 0:7cf972f622d3 324 */
caoyuan9642 0:7cf972f622d3 325 USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev,
caoyuan9642 0:7cf972f622d3 326 uint8_t ep_addr)
caoyuan9642 0:7cf972f622d3 327 {
caoyuan9642 0:7cf972f622d3 328 HAL_PCD_EP_ClrStall(pdev->pData, ep_addr);
caoyuan9642 0:7cf972f622d3 329 return USBD_OK;
caoyuan9642 0:7cf972f622d3 330 }
caoyuan9642 0:7cf972f622d3 331
caoyuan9642 0:7cf972f622d3 332 /**
caoyuan9642 0:7cf972f622d3 333 * @brief Returns Stall condition.
caoyuan9642 0:7cf972f622d3 334 * @param pdev: Device handle
caoyuan9642 0:7cf972f622d3 335 * @param ep_addr: Endpoint Number
caoyuan9642 0:7cf972f622d3 336 * @retval Stall (1: Yes, 0: No)
caoyuan9642 0:7cf972f622d3 337 */
caoyuan9642 0:7cf972f622d3 338 uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
caoyuan9642 0:7cf972f622d3 339 {
caoyuan9642 0:7cf972f622d3 340 PCD_HandleTypeDef *hpcd = pdev->pData;
caoyuan9642 0:7cf972f622d3 341
caoyuan9642 0:7cf972f622d3 342 if ((ep_addr & 0x80) == 0x80)
caoyuan9642 0:7cf972f622d3 343 {
caoyuan9642 0:7cf972f622d3 344 return hpcd->IN_ep[ep_addr & 0x7F].is_stall;
caoyuan9642 0:7cf972f622d3 345 }
caoyuan9642 0:7cf972f622d3 346 else
caoyuan9642 0:7cf972f622d3 347 {
caoyuan9642 0:7cf972f622d3 348 return hpcd->OUT_ep[ep_addr & 0x7F].is_stall;
caoyuan9642 0:7cf972f622d3 349 }
caoyuan9642 0:7cf972f622d3 350 return 0;
caoyuan9642 0:7cf972f622d3 351 }
caoyuan9642 0:7cf972f622d3 352
caoyuan9642 0:7cf972f622d3 353 /**
caoyuan9642 0:7cf972f622d3 354 * @brief Assigns a USB address to the device.
caoyuan9642 0:7cf972f622d3 355 * @param pdev: Device handle
caoyuan9642 0:7cf972f622d3 356 * @param ep_addr: Endpoint Number
caoyuan9642 0:7cf972f622d3 357 * @retval USBD Status
caoyuan9642 0:7cf972f622d3 358 */
caoyuan9642 0:7cf972f622d3 359 USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev,
caoyuan9642 0:7cf972f622d3 360 uint8_t dev_addr)
caoyuan9642 0:7cf972f622d3 361 {
caoyuan9642 0:7cf972f622d3 362 HAL_PCD_SetAddress(pdev->pData, dev_addr);
caoyuan9642 0:7cf972f622d3 363 return USBD_OK;
caoyuan9642 0:7cf972f622d3 364 }
caoyuan9642 0:7cf972f622d3 365
caoyuan9642 0:7cf972f622d3 366 /**
caoyuan9642 0:7cf972f622d3 367 * @brief Transmits data over an endpoint.
caoyuan9642 0:7cf972f622d3 368 * @param pdev: Device handle
caoyuan9642 0:7cf972f622d3 369 * @param ep_addr: Endpoint Number
caoyuan9642 0:7cf972f622d3 370 * @param pbuf: Pointer to data to be sent
caoyuan9642 0:7cf972f622d3 371 * @param size: Data size
caoyuan9642 0:7cf972f622d3 372 * @retval USBD Status
caoyuan9642 0:7cf972f622d3 373 */
caoyuan9642 0:7cf972f622d3 374 USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
caoyuan9642 0:7cf972f622d3 375 uint8_t *pbuf, uint16_t size)
caoyuan9642 0:7cf972f622d3 376 {
caoyuan9642 0:7cf972f622d3 377 HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size);
caoyuan9642 0:7cf972f622d3 378 return USBD_OK;
caoyuan9642 0:7cf972f622d3 379 }
caoyuan9642 0:7cf972f622d3 380
caoyuan9642 0:7cf972f622d3 381 /**
caoyuan9642 0:7cf972f622d3 382 * @brief Prepares an endpoint for reception.
caoyuan9642 0:7cf972f622d3 383 * @param pdev: Device handle
caoyuan9642 0:7cf972f622d3 384 * @param ep_addr: Endpoint Number
caoyuan9642 0:7cf972f622d3 385 * @param pbuf: Pointer to data to be received
caoyuan9642 0:7cf972f622d3 386 * @param size: Data size
caoyuan9642 0:7cf972f622d3 387 * @retval USBD Status
caoyuan9642 0:7cf972f622d3 388 */
caoyuan9642 0:7cf972f622d3 389 USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev,
caoyuan9642 0:7cf972f622d3 390 uint8_t ep_addr, uint8_t *pbuf, uint16_t size)
caoyuan9642 0:7cf972f622d3 391 {
caoyuan9642 0:7cf972f622d3 392 HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size);
caoyuan9642 0:7cf972f622d3 393 return USBD_OK;
caoyuan9642 0:7cf972f622d3 394 }
caoyuan9642 0:7cf972f622d3 395
caoyuan9642 0:7cf972f622d3 396 /**
caoyuan9642 0:7cf972f622d3 397 * @brief Returns the last transferred packet size.
caoyuan9642 0:7cf972f622d3 398 * @param pdev: Device handle
caoyuan9642 0:7cf972f622d3 399 * @param ep_addr: Endpoint Number
caoyuan9642 0:7cf972f622d3 400 * @retval Recived Data Size
caoyuan9642 0:7cf972f622d3 401 */
caoyuan9642 0:7cf972f622d3 402 uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
caoyuan9642 0:7cf972f622d3 403 {
caoyuan9642 0:7cf972f622d3 404 return HAL_PCD_EP_GetRxCount(pdev->pData, ep_addr);
caoyuan9642 0:7cf972f622d3 405 }
caoyuan9642 0:7cf972f622d3 406
caoyuan9642 0:7cf972f622d3 407 /**
caoyuan9642 0:7cf972f622d3 408 * @brief Delays routine for the USB Device Library.
caoyuan9642 0:7cf972f622d3 409 * @param Delay: Delay in ms
caoyuan9642 0:7cf972f622d3 410 * @retval None
caoyuan9642 0:7cf972f622d3 411 */
caoyuan9642 0:7cf972f622d3 412 void USBD_LL_Delay(uint32_t Delay)
caoyuan9642 0:7cf972f622d3 413 {
caoyuan9642 0:7cf972f622d3 414 HAL_Delay(Delay);
caoyuan9642 0:7cf972f622d3 415 }
caoyuan9642 0:7cf972f622d3 416
caoyuan9642 0:7cf972f622d3 417 void OTG_HS_IRQHandler(void)
caoyuan9642 0:7cf972f622d3 418 {
caoyuan9642 0:7cf972f622d3 419 HAL_PCD_IRQHandler(&hpcd);
caoyuan9642 0:7cf972f622d3 420 }
caoyuan9642 0:7cf972f622d3 421 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
caoyuan9642 0:7cf972f622d3 422
caoyuan9642 0:7cf972f622d3 423