USB CDC library for MBED on STM32
usbd_conf.c@0:7cf972f622d3, 2018-09-09 (annotated)
- Committer:
- caoyuan9642
- Date:
- Sun Sep 09 19:03:18 2018 +0000
- Revision:
- 0:7cf972f622d3
usb
Who changed what in which revision?
User | Revision | Line number | New 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>© 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 |