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_ioreq.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 This file provides the IO requests APIs for control endpoints.
caoyuan9642 0:7cf972f622d3 8 ******************************************************************************
caoyuan9642 0:7cf972f622d3 9 * @attention
caoyuan9642 0:7cf972f622d3 10 *
caoyuan9642 0:7cf972f622d3 11 * <h2><center>&copy; COPYRIGHT 2015 STMicroelectronics</center></h2>
caoyuan9642 0:7cf972f622d3 12 *
caoyuan9642 0:7cf972f622d3 13 * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
caoyuan9642 0:7cf972f622d3 14 * You may not use this file except in compliance with the License.
caoyuan9642 0:7cf972f622d3 15 * You may obtain a copy of the License at:
caoyuan9642 0:7cf972f622d3 16 *
caoyuan9642 0:7cf972f622d3 17 * http://www.st.com/software_license_agreement_liberty_v2
caoyuan9642 0:7cf972f622d3 18 *
caoyuan9642 0:7cf972f622d3 19 * Unless required by applicable law or agreed to in writing, software
caoyuan9642 0:7cf972f622d3 20 * distributed under the License is distributed on an "AS IS" BASIS,
caoyuan9642 0:7cf972f622d3 21 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
caoyuan9642 0:7cf972f622d3 22 * See the License for the specific language governing permissions and
caoyuan9642 0:7cf972f622d3 23 * limitations under the License.
caoyuan9642 0:7cf972f622d3 24 *
caoyuan9642 0:7cf972f622d3 25 ******************************************************************************
caoyuan9642 0:7cf972f622d3 26 */
caoyuan9642 0:7cf972f622d3 27
caoyuan9642 0:7cf972f622d3 28 /* Includes ------------------------------------------------------------------*/
caoyuan9642 0:7cf972f622d3 29 #include "usbd_ioreq.h"
caoyuan9642 0:7cf972f622d3 30
caoyuan9642 0:7cf972f622d3 31 /** @addtogroup STM32_USB_DEVICE_LIBRARY
caoyuan9642 0:7cf972f622d3 32 * @{
caoyuan9642 0:7cf972f622d3 33 */
caoyuan9642 0:7cf972f622d3 34
caoyuan9642 0:7cf972f622d3 35
caoyuan9642 0:7cf972f622d3 36 /** @defgroup USBD_IOREQ
caoyuan9642 0:7cf972f622d3 37 * @brief control I/O requests module
caoyuan9642 0:7cf972f622d3 38 * @{
caoyuan9642 0:7cf972f622d3 39 */
caoyuan9642 0:7cf972f622d3 40
caoyuan9642 0:7cf972f622d3 41 /** @defgroup USBD_IOREQ_Private_TypesDefinitions
caoyuan9642 0:7cf972f622d3 42 * @{
caoyuan9642 0:7cf972f622d3 43 */
caoyuan9642 0:7cf972f622d3 44 /**
caoyuan9642 0:7cf972f622d3 45 * @}
caoyuan9642 0:7cf972f622d3 46 */
caoyuan9642 0:7cf972f622d3 47
caoyuan9642 0:7cf972f622d3 48
caoyuan9642 0:7cf972f622d3 49 /** @defgroup USBD_IOREQ_Private_Defines
caoyuan9642 0:7cf972f622d3 50 * @{
caoyuan9642 0:7cf972f622d3 51 */
caoyuan9642 0:7cf972f622d3 52
caoyuan9642 0:7cf972f622d3 53 /**
caoyuan9642 0:7cf972f622d3 54 * @}
caoyuan9642 0:7cf972f622d3 55 */
caoyuan9642 0:7cf972f622d3 56
caoyuan9642 0:7cf972f622d3 57
caoyuan9642 0:7cf972f622d3 58 /** @defgroup USBD_IOREQ_Private_Macros
caoyuan9642 0:7cf972f622d3 59 * @{
caoyuan9642 0:7cf972f622d3 60 */
caoyuan9642 0:7cf972f622d3 61 /**
caoyuan9642 0:7cf972f622d3 62 * @}
caoyuan9642 0:7cf972f622d3 63 */
caoyuan9642 0:7cf972f622d3 64
caoyuan9642 0:7cf972f622d3 65
caoyuan9642 0:7cf972f622d3 66 /** @defgroup USBD_IOREQ_Private_Variables
caoyuan9642 0:7cf972f622d3 67 * @{
caoyuan9642 0:7cf972f622d3 68 */
caoyuan9642 0:7cf972f622d3 69
caoyuan9642 0:7cf972f622d3 70 /**
caoyuan9642 0:7cf972f622d3 71 * @}
caoyuan9642 0:7cf972f622d3 72 */
caoyuan9642 0:7cf972f622d3 73
caoyuan9642 0:7cf972f622d3 74
caoyuan9642 0:7cf972f622d3 75 /** @defgroup USBD_IOREQ_Private_FunctionPrototypes
caoyuan9642 0:7cf972f622d3 76 * @{
caoyuan9642 0:7cf972f622d3 77 */
caoyuan9642 0:7cf972f622d3 78 /**
caoyuan9642 0:7cf972f622d3 79 * @}
caoyuan9642 0:7cf972f622d3 80 */
caoyuan9642 0:7cf972f622d3 81
caoyuan9642 0:7cf972f622d3 82
caoyuan9642 0:7cf972f622d3 83 /** @defgroup USBD_IOREQ_Private_Functions
caoyuan9642 0:7cf972f622d3 84 * @{
caoyuan9642 0:7cf972f622d3 85 */
caoyuan9642 0:7cf972f622d3 86
caoyuan9642 0:7cf972f622d3 87 /**
caoyuan9642 0:7cf972f622d3 88 * @brief USBD_CtlSendData
caoyuan9642 0:7cf972f622d3 89 * send data on the ctl pipe
caoyuan9642 0:7cf972f622d3 90 * @param pdev: device instance
caoyuan9642 0:7cf972f622d3 91 * @param buff: pointer to data buffer
caoyuan9642 0:7cf972f622d3 92 * @param len: length of data to be sent
caoyuan9642 0:7cf972f622d3 93 * @retval status
caoyuan9642 0:7cf972f622d3 94 */
caoyuan9642 0:7cf972f622d3 95 USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev,
caoyuan9642 0:7cf972f622d3 96 uint8_t *pbuf,
caoyuan9642 0:7cf972f622d3 97 uint16_t len)
caoyuan9642 0:7cf972f622d3 98 {
caoyuan9642 0:7cf972f622d3 99 /* Set EP0 State */
caoyuan9642 0:7cf972f622d3 100 pdev->ep0_state = USBD_EP0_DATA_IN;
caoyuan9642 0:7cf972f622d3 101 pdev->ep_in[0].total_length = len;
caoyuan9642 0:7cf972f622d3 102 pdev->ep_in[0].rem_length = len;
caoyuan9642 0:7cf972f622d3 103 /* Start the transfer */
caoyuan9642 0:7cf972f622d3 104 USBD_LL_Transmit (pdev, 0x00, pbuf, len);
caoyuan9642 0:7cf972f622d3 105
caoyuan9642 0:7cf972f622d3 106 return USBD_OK;
caoyuan9642 0:7cf972f622d3 107 }
caoyuan9642 0:7cf972f622d3 108
caoyuan9642 0:7cf972f622d3 109 /**
caoyuan9642 0:7cf972f622d3 110 * @brief USBD_CtlContinueSendData
caoyuan9642 0:7cf972f622d3 111 * continue sending data on the ctl pipe
caoyuan9642 0:7cf972f622d3 112 * @param pdev: device instance
caoyuan9642 0:7cf972f622d3 113 * @param buff: pointer to data buffer
caoyuan9642 0:7cf972f622d3 114 * @param len: length of data to be sent
caoyuan9642 0:7cf972f622d3 115 * @retval status
caoyuan9642 0:7cf972f622d3 116 */
caoyuan9642 0:7cf972f622d3 117 USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
caoyuan9642 0:7cf972f622d3 118 uint8_t *pbuf,
caoyuan9642 0:7cf972f622d3 119 uint16_t len)
caoyuan9642 0:7cf972f622d3 120 {
caoyuan9642 0:7cf972f622d3 121 /* Start the next transfer */
caoyuan9642 0:7cf972f622d3 122 USBD_LL_Transmit (pdev, 0x00, pbuf, len);
caoyuan9642 0:7cf972f622d3 123
caoyuan9642 0:7cf972f622d3 124 return USBD_OK;
caoyuan9642 0:7cf972f622d3 125 }
caoyuan9642 0:7cf972f622d3 126
caoyuan9642 0:7cf972f622d3 127 /**
caoyuan9642 0:7cf972f622d3 128 * @brief USBD_CtlPrepareRx
caoyuan9642 0:7cf972f622d3 129 * receive data on the ctl pipe
caoyuan9642 0:7cf972f622d3 130 * @param pdev: device instance
caoyuan9642 0:7cf972f622d3 131 * @param buff: pointer to data buffer
caoyuan9642 0:7cf972f622d3 132 * @param len: length of data to be received
caoyuan9642 0:7cf972f622d3 133 * @retval status
caoyuan9642 0:7cf972f622d3 134 */
caoyuan9642 0:7cf972f622d3 135 USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev,
caoyuan9642 0:7cf972f622d3 136 uint8_t *pbuf,
caoyuan9642 0:7cf972f622d3 137 uint16_t len)
caoyuan9642 0:7cf972f622d3 138 {
caoyuan9642 0:7cf972f622d3 139 /* Set EP0 State */
caoyuan9642 0:7cf972f622d3 140 pdev->ep0_state = USBD_EP0_DATA_OUT;
caoyuan9642 0:7cf972f622d3 141 pdev->ep_out[0].total_length = len;
caoyuan9642 0:7cf972f622d3 142 pdev->ep_out[0].rem_length = len;
caoyuan9642 0:7cf972f622d3 143 /* Start the transfer */
caoyuan9642 0:7cf972f622d3 144 USBD_LL_PrepareReceive (pdev,
caoyuan9642 0:7cf972f622d3 145 0,
caoyuan9642 0:7cf972f622d3 146 pbuf,
caoyuan9642 0:7cf972f622d3 147 len);
caoyuan9642 0:7cf972f622d3 148
caoyuan9642 0:7cf972f622d3 149 return USBD_OK;
caoyuan9642 0:7cf972f622d3 150 }
caoyuan9642 0:7cf972f622d3 151
caoyuan9642 0:7cf972f622d3 152 /**
caoyuan9642 0:7cf972f622d3 153 * @brief USBD_CtlContinueRx
caoyuan9642 0:7cf972f622d3 154 * continue receive data on the ctl pipe
caoyuan9642 0:7cf972f622d3 155 * @param pdev: device instance
caoyuan9642 0:7cf972f622d3 156 * @param buff: pointer to data buffer
caoyuan9642 0:7cf972f622d3 157 * @param len: length of data to be received
caoyuan9642 0:7cf972f622d3 158 * @retval status
caoyuan9642 0:7cf972f622d3 159 */
caoyuan9642 0:7cf972f622d3 160 USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev,
caoyuan9642 0:7cf972f622d3 161 uint8_t *pbuf,
caoyuan9642 0:7cf972f622d3 162 uint16_t len)
caoyuan9642 0:7cf972f622d3 163 {
caoyuan9642 0:7cf972f622d3 164
caoyuan9642 0:7cf972f622d3 165 USBD_LL_PrepareReceive (pdev,
caoyuan9642 0:7cf972f622d3 166 0,
caoyuan9642 0:7cf972f622d3 167 pbuf,
caoyuan9642 0:7cf972f622d3 168 len);
caoyuan9642 0:7cf972f622d3 169 return USBD_OK;
caoyuan9642 0:7cf972f622d3 170 }
caoyuan9642 0:7cf972f622d3 171 /**
caoyuan9642 0:7cf972f622d3 172 * @brief USBD_CtlSendStatus
caoyuan9642 0:7cf972f622d3 173 * send zero lzngth packet on the ctl pipe
caoyuan9642 0:7cf972f622d3 174 * @param pdev: device instance
caoyuan9642 0:7cf972f622d3 175 * @retval status
caoyuan9642 0:7cf972f622d3 176 */
caoyuan9642 0:7cf972f622d3 177 USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev)
caoyuan9642 0:7cf972f622d3 178 {
caoyuan9642 0:7cf972f622d3 179
caoyuan9642 0:7cf972f622d3 180 /* Set EP0 State */
caoyuan9642 0:7cf972f622d3 181 pdev->ep0_state = USBD_EP0_STATUS_IN;
caoyuan9642 0:7cf972f622d3 182
caoyuan9642 0:7cf972f622d3 183 /* Start the transfer */
caoyuan9642 0:7cf972f622d3 184 USBD_LL_Transmit (pdev, 0x00, NULL, 0);
caoyuan9642 0:7cf972f622d3 185
caoyuan9642 0:7cf972f622d3 186 return USBD_OK;
caoyuan9642 0:7cf972f622d3 187 }
caoyuan9642 0:7cf972f622d3 188
caoyuan9642 0:7cf972f622d3 189 /**
caoyuan9642 0:7cf972f622d3 190 * @brief USBD_CtlReceiveStatus
caoyuan9642 0:7cf972f622d3 191 * receive zero lzngth packet on the ctl pipe
caoyuan9642 0:7cf972f622d3 192 * @param pdev: device instance
caoyuan9642 0:7cf972f622d3 193 * @retval status
caoyuan9642 0:7cf972f622d3 194 */
caoyuan9642 0:7cf972f622d3 195 USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
caoyuan9642 0:7cf972f622d3 196 {
caoyuan9642 0:7cf972f622d3 197 /* Set EP0 State */
caoyuan9642 0:7cf972f622d3 198 pdev->ep0_state = USBD_EP0_STATUS_OUT;
caoyuan9642 0:7cf972f622d3 199
caoyuan9642 0:7cf972f622d3 200 /* Start the transfer */
caoyuan9642 0:7cf972f622d3 201 USBD_LL_PrepareReceive ( pdev,
caoyuan9642 0:7cf972f622d3 202 0,
caoyuan9642 0:7cf972f622d3 203 NULL,
caoyuan9642 0:7cf972f622d3 204 0);
caoyuan9642 0:7cf972f622d3 205
caoyuan9642 0:7cf972f622d3 206 return USBD_OK;
caoyuan9642 0:7cf972f622d3 207 }
caoyuan9642 0:7cf972f622d3 208
caoyuan9642 0:7cf972f622d3 209
caoyuan9642 0:7cf972f622d3 210 /**
caoyuan9642 0:7cf972f622d3 211 * @brief USBD_GetRxCount
caoyuan9642 0:7cf972f622d3 212 * returns the received data length
caoyuan9642 0:7cf972f622d3 213 * @param pdev: device instance
caoyuan9642 0:7cf972f622d3 214 * @param ep_addr: endpoint address
caoyuan9642 0:7cf972f622d3 215 * @retval Rx Data blength
caoyuan9642 0:7cf972f622d3 216 */
caoyuan9642 0:7cf972f622d3 217 uint16_t USBD_GetRxCount (USBD_HandleTypeDef *pdev , uint8_t ep_addr)
caoyuan9642 0:7cf972f622d3 218 {
caoyuan9642 0:7cf972f622d3 219 return USBD_LL_GetRxDataSize(pdev, ep_addr);
caoyuan9642 0:7cf972f622d3 220 }
caoyuan9642 0:7cf972f622d3 221
caoyuan9642 0:7cf972f622d3 222 /**
caoyuan9642 0:7cf972f622d3 223 * @}
caoyuan9642 0:7cf972f622d3 224 */
caoyuan9642 0:7cf972f622d3 225
caoyuan9642 0:7cf972f622d3 226
caoyuan9642 0:7cf972f622d3 227 /**
caoyuan9642 0:7cf972f622d3 228 * @}
caoyuan9642 0:7cf972f622d3 229 */
caoyuan9642 0:7cf972f622d3 230
caoyuan9642 0:7cf972f622d3 231
caoyuan9642 0:7cf972f622d3 232 /**
caoyuan9642 0:7cf972f622d3 233 * @}
caoyuan9642 0:7cf972f622d3 234 */
caoyuan9642 0:7cf972f622d3 235
caoyuan9642 0:7cf972f622d3 236 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
caoyuan9642 0:7cf972f622d3 237