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 Demonstrations/Src/usbd_desc.c
caoyuan9642 0:7cf972f622d3 4 * @author MCD Application Team
caoyuan9642 0:7cf972f622d3 5 * @brief This file provides the USBD descriptors and string formating method.
caoyuan9642 0:7cf972f622d3 6 ******************************************************************************
caoyuan9642 0:7cf972f622d3 7 * @attention
caoyuan9642 0:7cf972f622d3 8 *
caoyuan9642 0:7cf972f622d3 9 * <h2><center>&copy; Copyright (c) 2017 STMicroelectronics International N.V.
caoyuan9642 0:7cf972f622d3 10 * All rights reserved.</center></h2>
caoyuan9642 0:7cf972f622d3 11 *
caoyuan9642 0:7cf972f622d3 12 * Redistribution and use in source and binary forms, with or without
caoyuan9642 0:7cf972f622d3 13 * modification, are permitted, provided that the following conditions are met:
caoyuan9642 0:7cf972f622d3 14 *
caoyuan9642 0:7cf972f622d3 15 * 1. Redistribution of source code must retain the above copyright notice,
caoyuan9642 0:7cf972f622d3 16 * this list of conditions and the following disclaimer.
caoyuan9642 0:7cf972f622d3 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
caoyuan9642 0:7cf972f622d3 18 * this list of conditions and the following disclaimer in the documentation
caoyuan9642 0:7cf972f622d3 19 * and/or other materials provided with the distribution.
caoyuan9642 0:7cf972f622d3 20 * 3. Neither the name of STMicroelectronics nor the names of other
caoyuan9642 0:7cf972f622d3 21 * contributors to this software may be used to endorse or promote products
caoyuan9642 0:7cf972f622d3 22 * derived from this software without specific written permission.
caoyuan9642 0:7cf972f622d3 23 * 4. This software, including modifications and/or derivative works of this
caoyuan9642 0:7cf972f622d3 24 * software, must execute solely and exclusively on microcontroller or
caoyuan9642 0:7cf972f622d3 25 * microprocessor devices manufactured by or for STMicroelectronics.
caoyuan9642 0:7cf972f622d3 26 * 5. Redistribution and use of this software other than as permitted under
caoyuan9642 0:7cf972f622d3 27 * this license is void and will automatically terminate your rights under
caoyuan9642 0:7cf972f622d3 28 * this license.
caoyuan9642 0:7cf972f622d3 29 *
caoyuan9642 0:7cf972f622d3 30 * THIS SOFTWARE IS PROVIDED BY STMICROELECTRONICS AND CONTRIBUTORS "AS IS"
caoyuan9642 0:7cf972f622d3 31 * AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
caoyuan9642 0:7cf972f622d3 32 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
caoyuan9642 0:7cf972f622d3 33 * PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
caoyuan9642 0:7cf972f622d3 34 * RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
caoyuan9642 0:7cf972f622d3 35 * SHALL STMICROELECTRONICS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
caoyuan9642 0:7cf972f622d3 36 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
caoyuan9642 0:7cf972f622d3 37 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
caoyuan9642 0:7cf972f622d3 38 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
caoyuan9642 0:7cf972f622d3 39 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
caoyuan9642 0:7cf972f622d3 40 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
caoyuan9642 0:7cf972f622d3 41 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
caoyuan9642 0:7cf972f622d3 42 *
caoyuan9642 0:7cf972f622d3 43 ******************************************************************************
caoyuan9642 0:7cf972f622d3 44 */
caoyuan9642 0:7cf972f622d3 45
caoyuan9642 0:7cf972f622d3 46 /* Includes ------------------------------------------------------------------*/
caoyuan9642 0:7cf972f622d3 47 #include "usbd_core.h"
caoyuan9642 0:7cf972f622d3 48 #include "usbd_desc.h"
caoyuan9642 0:7cf972f622d3 49 #include "usbd_conf.h"
caoyuan9642 0:7cf972f622d3 50
caoyuan9642 0:7cf972f622d3 51 /** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
caoyuan9642 0:7cf972f622d3 52 * @{
caoyuan9642 0:7cf972f622d3 53 */
caoyuan9642 0:7cf972f622d3 54
caoyuan9642 0:7cf972f622d3 55
caoyuan9642 0:7cf972f622d3 56 /** @defgroup USBD_DESC
caoyuan9642 0:7cf972f622d3 57 * @brief USBD descriptors module
caoyuan9642 0:7cf972f622d3 58 * @{
caoyuan9642 0:7cf972f622d3 59 */
caoyuan9642 0:7cf972f622d3 60
caoyuan9642 0:7cf972f622d3 61 /** @defgroup USBD_DESC_Private_TypesDefinitions
caoyuan9642 0:7cf972f622d3 62 * @{
caoyuan9642 0:7cf972f622d3 63 */
caoyuan9642 0:7cf972f622d3 64 /**
caoyuan9642 0:7cf972f622d3 65 * @}
caoyuan9642 0:7cf972f622d3 66 */
caoyuan9642 0:7cf972f622d3 67
caoyuan9642 0:7cf972f622d3 68
caoyuan9642 0:7cf972f622d3 69 /** @defgroup USBD_DESC_Private_Defines
caoyuan9642 0:7cf972f622d3 70 * @{
caoyuan9642 0:7cf972f622d3 71 */
caoyuan9642 0:7cf972f622d3 72
caoyuan9642 0:7cf972f622d3 73 #define USBD_VID 0x0483
caoyuan9642 0:7cf972f622d3 74 #define USBD_PID 0x572B
caoyuan9642 0:7cf972f622d3 75
caoyuan9642 0:7cf972f622d3 76 #define USBD_LANGID_STRING 0x409
caoyuan9642 0:7cf972f622d3 77 #define USBD_MANUFACTURER_STRING "STMicroelectronics"
caoyuan9642 0:7cf972f622d3 78
caoyuan9642 0:7cf972f622d3 79
caoyuan9642 0:7cf972f622d3 80 #define USBD_PRODUCT_HS_STRING "CDC Virtual COM"
caoyuan9642 0:7cf972f622d3 81 #define USBD_SERIALNUMBER_HS_STRING "00000000001A"
caoyuan9642 0:7cf972f622d3 82 #define USBD_PRODUCT_FS_STRING "CDC Virtual COM"
caoyuan9642 0:7cf972f622d3 83 #define USBD_SERIALNUMBER_FS_STRING "00000000001B"
caoyuan9642 0:7cf972f622d3 84 #define USBD_CONFIGURATION_HS_STRING "CDC Config"
caoyuan9642 0:7cf972f622d3 85 #define USBD_INTERFACE_HS_STRING "CDC Interface"
caoyuan9642 0:7cf972f622d3 86 #define USBD_CONFIGURATION_FS_STRING "CDC Config"
caoyuan9642 0:7cf972f622d3 87 #define USBD_INTERFACE_FS_STRING "CDC Interface"
caoyuan9642 0:7cf972f622d3 88 /**
caoyuan9642 0:7cf972f622d3 89 * @}
caoyuan9642 0:7cf972f622d3 90 */
caoyuan9642 0:7cf972f622d3 91
caoyuan9642 0:7cf972f622d3 92
caoyuan9642 0:7cf972f622d3 93 /** @defgroup USBD_DESC_Private_Macros
caoyuan9642 0:7cf972f622d3 94 * @{
caoyuan9642 0:7cf972f622d3 95 */
caoyuan9642 0:7cf972f622d3 96 /**
caoyuan9642 0:7cf972f622d3 97 * @}
caoyuan9642 0:7cf972f622d3 98 */
caoyuan9642 0:7cf972f622d3 99
caoyuan9642 0:7cf972f622d3 100
caoyuan9642 0:7cf972f622d3 101 /** @defgroup USBD_DESC_Private_Variables
caoyuan9642 0:7cf972f622d3 102 * @{
caoyuan9642 0:7cf972f622d3 103 */
caoyuan9642 0:7cf972f622d3 104
caoyuan9642 0:7cf972f622d3 105 uint8_t * USBD_CDC_DeviceDescriptor( USBD_SpeedTypeDef speed , uint16_t *length);
caoyuan9642 0:7cf972f622d3 106 uint8_t * USBD_CDC_LangIDStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length);
caoyuan9642 0:7cf972f622d3 107 uint8_t * USBD_CDC_ManufacturerStrDescriptor ( USBD_SpeedTypeDef speed , uint16_t *length);
caoyuan9642 0:7cf972f622d3 108 uint8_t * USBD_CDC_ProductStrDescriptor ( USBD_SpeedTypeDef speed , uint16_t *length);
caoyuan9642 0:7cf972f622d3 109 uint8_t * USBD_CDC_SerialStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length);
caoyuan9642 0:7cf972f622d3 110 uint8_t * USBD_CDC_ConfigStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length);
caoyuan9642 0:7cf972f622d3 111 uint8_t * USBD_CDC_InterfaceStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length);
caoyuan9642 0:7cf972f622d3 112
caoyuan9642 0:7cf972f622d3 113 #ifdef USB_SUPPORT_USER_STRING_DESC
caoyuan9642 0:7cf972f622d3 114 uint8_t * USBD_CDC_USRStringDesc (USBD_SpeedTypeDef speed, uint8_t idx , uint16_t *length);
caoyuan9642 0:7cf972f622d3 115 #endif /* USB_SUPPORT_USER_STRING_DESC */
caoyuan9642 0:7cf972f622d3 116
caoyuan9642 0:7cf972f622d3 117
caoyuan9642 0:7cf972f622d3 118 USBD_DescriptorsTypeDef USB_Desc =
caoyuan9642 0:7cf972f622d3 119 {
caoyuan9642 0:7cf972f622d3 120 USBD_CDC_DeviceDescriptor,
caoyuan9642 0:7cf972f622d3 121 USBD_CDC_LangIDStrDescriptor,
caoyuan9642 0:7cf972f622d3 122 USBD_CDC_ManufacturerStrDescriptor,
caoyuan9642 0:7cf972f622d3 123 USBD_CDC_ProductStrDescriptor,
caoyuan9642 0:7cf972f622d3 124 USBD_CDC_SerialStrDescriptor,
caoyuan9642 0:7cf972f622d3 125 USBD_CDC_ConfigStrDescriptor,
caoyuan9642 0:7cf972f622d3 126 USBD_CDC_InterfaceStrDescriptor,
caoyuan9642 0:7cf972f622d3 127
caoyuan9642 0:7cf972f622d3 128 };
caoyuan9642 0:7cf972f622d3 129
caoyuan9642 0:7cf972f622d3 130 /* USB Standard Device Descriptor */
caoyuan9642 0:7cf972f622d3 131 #if defined ( __ICCARM__ ) /*!< IAR Compiler */
caoyuan9642 0:7cf972f622d3 132 #pragma data_alignment=4
caoyuan9642 0:7cf972f622d3 133 #endif
caoyuan9642 0:7cf972f622d3 134 __ALIGN_BEGIN uint8_t hUSBDDeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END =
caoyuan9642 0:7cf972f622d3 135 {
caoyuan9642 0:7cf972f622d3 136 0x12, /*bLength */
caoyuan9642 0:7cf972f622d3 137 USB_DESC_TYPE_DEVICE, /*bDescriptorType*/
caoyuan9642 0:7cf972f622d3 138 0x10, /*bcdUSB */
caoyuan9642 0:7cf972f622d3 139 0x01,
caoyuan9642 0:7cf972f622d3 140 0x00, /*bDeviceClass*/
caoyuan9642 0:7cf972f622d3 141 0x00, /*bDeviceSubClass*/
caoyuan9642 0:7cf972f622d3 142 0x00, /*bDeviceProtocol*/
caoyuan9642 0:7cf972f622d3 143 USB_MAX_EP0_SIZE, /*bMaxPacketSize*/
caoyuan9642 0:7cf972f622d3 144 LOBYTE(USBD_VID), /*idVendor*/
caoyuan9642 0:7cf972f622d3 145 HIBYTE(USBD_VID), /*idVendor*/
caoyuan9642 0:7cf972f622d3 146 LOBYTE(USBD_PID), /*idVendor*/
caoyuan9642 0:7cf972f622d3 147 HIBYTE(USBD_PID), /*idVendor*/
caoyuan9642 0:7cf972f622d3 148 0x00, /*bcdDevice rel. 1.00*/
caoyuan9642 0:7cf972f622d3 149 0x01,
caoyuan9642 0:7cf972f622d3 150 USBD_IDX_MFC_STR, /*Index of manufacturer string*/
caoyuan9642 0:7cf972f622d3 151 USBD_IDX_PRODUCT_STR, /*Index of product string*/
caoyuan9642 0:7cf972f622d3 152 USBD_IDX_SERIAL_STR, /*Index of serial number string*/
caoyuan9642 0:7cf972f622d3 153 USBD_MAX_NUM_CONFIGURATION /*bNumConfigurations*/
caoyuan9642 0:7cf972f622d3 154 } ; /* USB_DeviceDescriptor */
caoyuan9642 0:7cf972f622d3 155
caoyuan9642 0:7cf972f622d3 156 /* USB Standard Device Descriptor */
caoyuan9642 0:7cf972f622d3 157 #if defined ( __ICCARM__ ) /*!< IAR Compiler */
caoyuan9642 0:7cf972f622d3 158 #pragma data_alignment=4
caoyuan9642 0:7cf972f622d3 159 #endif
caoyuan9642 0:7cf972f622d3 160 __ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END =
caoyuan9642 0:7cf972f622d3 161 {
caoyuan9642 0:7cf972f622d3 162 USB_LEN_LANGID_STR_DESC,
caoyuan9642 0:7cf972f622d3 163 USB_DESC_TYPE_STRING,
caoyuan9642 0:7cf972f622d3 164 LOBYTE(USBD_LANGID_STRING),
caoyuan9642 0:7cf972f622d3 165 HIBYTE(USBD_LANGID_STRING),
caoyuan9642 0:7cf972f622d3 166 };
caoyuan9642 0:7cf972f622d3 167
caoyuan9642 0:7cf972f622d3 168 #if defined ( __ICCARM__ ) /*!< IAR Compiler */
caoyuan9642 0:7cf972f622d3 169 #pragma data_alignment=4
caoyuan9642 0:7cf972f622d3 170 #endif
caoyuan9642 0:7cf972f622d3 171 __ALIGN_BEGIN uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ] __ALIGN_END;
caoyuan9642 0:7cf972f622d3 172 /**
caoyuan9642 0:7cf972f622d3 173 * @}
caoyuan9642 0:7cf972f622d3 174 */
caoyuan9642 0:7cf972f622d3 175
caoyuan9642 0:7cf972f622d3 176
caoyuan9642 0:7cf972f622d3 177 /** @defgroup USBD_DESC_Private_FunctionPrototypes
caoyuan9642 0:7cf972f622d3 178 * @{
caoyuan9642 0:7cf972f622d3 179 */
caoyuan9642 0:7cf972f622d3 180 /**
caoyuan9642 0:7cf972f622d3 181 * @}
caoyuan9642 0:7cf972f622d3 182 */
caoyuan9642 0:7cf972f622d3 183
caoyuan9642 0:7cf972f622d3 184
caoyuan9642 0:7cf972f622d3 185 /** @defgroup USBD_DESC_Private_Functions
caoyuan9642 0:7cf972f622d3 186 * @{
caoyuan9642 0:7cf972f622d3 187 */
caoyuan9642 0:7cf972f622d3 188
caoyuan9642 0:7cf972f622d3 189 /**
caoyuan9642 0:7cf972f622d3 190 * @brief USBD_CDC_DeviceDescriptor
caoyuan9642 0:7cf972f622d3 191 * return the device descriptor
caoyuan9642 0:7cf972f622d3 192 * @param speed : current device speed
caoyuan9642 0:7cf972f622d3 193 * @param length : pointer to data length variable
caoyuan9642 0:7cf972f622d3 194 * @retval pointer to descriptor buffer
caoyuan9642 0:7cf972f622d3 195 */
caoyuan9642 0:7cf972f622d3 196 uint8_t * USBD_CDC_DeviceDescriptor( USBD_SpeedTypeDef speed , uint16_t *length)
caoyuan9642 0:7cf972f622d3 197 {
caoyuan9642 0:7cf972f622d3 198 *length = sizeof(hUSBDDeviceDesc);
caoyuan9642 0:7cf972f622d3 199 return hUSBDDeviceDesc;
caoyuan9642 0:7cf972f622d3 200 }
caoyuan9642 0:7cf972f622d3 201
caoyuan9642 0:7cf972f622d3 202 /**
caoyuan9642 0:7cf972f622d3 203 * @brief USBD_CDC_LangIDStrDescriptor
caoyuan9642 0:7cf972f622d3 204 * return the LangID string descriptor
caoyuan9642 0:7cf972f622d3 205 * @param speed : current device speed
caoyuan9642 0:7cf972f622d3 206 * @param length : pointer to data length variable
caoyuan9642 0:7cf972f622d3 207 * @retval pointer to descriptor buffer
caoyuan9642 0:7cf972f622d3 208 */
caoyuan9642 0:7cf972f622d3 209 uint8_t * USBD_CDC_LangIDStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length)
caoyuan9642 0:7cf972f622d3 210 {
caoyuan9642 0:7cf972f622d3 211 *length = sizeof(USBD_LangIDDesc);
caoyuan9642 0:7cf972f622d3 212 return USBD_LangIDDesc;
caoyuan9642 0:7cf972f622d3 213 }
caoyuan9642 0:7cf972f622d3 214
caoyuan9642 0:7cf972f622d3 215
caoyuan9642 0:7cf972f622d3 216 /**
caoyuan9642 0:7cf972f622d3 217 * @brief USBD_CDC_ProductStrDescriptor
caoyuan9642 0:7cf972f622d3 218 * return the product string descriptor
caoyuan9642 0:7cf972f622d3 219 * @param speed : current device speed
caoyuan9642 0:7cf972f622d3 220 * @param length : pointer to data length variable
caoyuan9642 0:7cf972f622d3 221 * @retval pointer to descriptor buffer
caoyuan9642 0:7cf972f622d3 222 */
caoyuan9642 0:7cf972f622d3 223 uint8_t * USBD_CDC_ProductStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length)
caoyuan9642 0:7cf972f622d3 224 {
caoyuan9642 0:7cf972f622d3 225 if(speed == 0)
caoyuan9642 0:7cf972f622d3 226 {
caoyuan9642 0:7cf972f622d3 227 USBD_GetString ((uint8_t *)USBD_PRODUCT_HS_STRING, USBD_StrDesc, length);
caoyuan9642 0:7cf972f622d3 228 }
caoyuan9642 0:7cf972f622d3 229 else
caoyuan9642 0:7cf972f622d3 230 {
caoyuan9642 0:7cf972f622d3 231 USBD_GetString ((uint8_t *)USBD_PRODUCT_FS_STRING, USBD_StrDesc, length);
caoyuan9642 0:7cf972f622d3 232 }
caoyuan9642 0:7cf972f622d3 233 return USBD_StrDesc;
caoyuan9642 0:7cf972f622d3 234 }
caoyuan9642 0:7cf972f622d3 235
caoyuan9642 0:7cf972f622d3 236 /**
caoyuan9642 0:7cf972f622d3 237 * @brief USBD_CDC_ManufacturerStrDescriptor
caoyuan9642 0:7cf972f622d3 238 * return the manufacturer string descriptor
caoyuan9642 0:7cf972f622d3 239 * @param speed : current device speed
caoyuan9642 0:7cf972f622d3 240 * @param length : pointer to data length variable
caoyuan9642 0:7cf972f622d3 241 * @retval pointer to descriptor buffer
caoyuan9642 0:7cf972f622d3 242 */
caoyuan9642 0:7cf972f622d3 243 uint8_t * USBD_CDC_ManufacturerStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length)
caoyuan9642 0:7cf972f622d3 244 {
caoyuan9642 0:7cf972f622d3 245 USBD_GetString ((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
caoyuan9642 0:7cf972f622d3 246 return USBD_StrDesc;
caoyuan9642 0:7cf972f622d3 247 }
caoyuan9642 0:7cf972f622d3 248
caoyuan9642 0:7cf972f622d3 249 /**
caoyuan9642 0:7cf972f622d3 250 * @brief USBD_CDC_SerialStrDescriptor
caoyuan9642 0:7cf972f622d3 251 * return the serial number string descriptor
caoyuan9642 0:7cf972f622d3 252 * @param speed : current device speed
caoyuan9642 0:7cf972f622d3 253 * @param length : pointer to data length variable
caoyuan9642 0:7cf972f622d3 254 * @retval pointer to descriptor buffer
caoyuan9642 0:7cf972f622d3 255 */
caoyuan9642 0:7cf972f622d3 256 uint8_t * USBD_CDC_SerialStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length)
caoyuan9642 0:7cf972f622d3 257 {
caoyuan9642 0:7cf972f622d3 258 if(speed == USBD_SPEED_HIGH)
caoyuan9642 0:7cf972f622d3 259 {
caoyuan9642 0:7cf972f622d3 260 USBD_GetString ((uint8_t *)USBD_SERIALNUMBER_HS_STRING, USBD_StrDesc, length);
caoyuan9642 0:7cf972f622d3 261 }
caoyuan9642 0:7cf972f622d3 262 else
caoyuan9642 0:7cf972f622d3 263 {
caoyuan9642 0:7cf972f622d3 264 USBD_GetString ((uint8_t *)USBD_SERIALNUMBER_FS_STRING, USBD_StrDesc, length);
caoyuan9642 0:7cf972f622d3 265 }
caoyuan9642 0:7cf972f622d3 266 return USBD_StrDesc;
caoyuan9642 0:7cf972f622d3 267 }
caoyuan9642 0:7cf972f622d3 268
caoyuan9642 0:7cf972f622d3 269 /**
caoyuan9642 0:7cf972f622d3 270 * @brief USBD_CDC_ConfigStrDescriptor
caoyuan9642 0:7cf972f622d3 271 * return the configuration string descriptor
caoyuan9642 0:7cf972f622d3 272 * @param speed : current device speed
caoyuan9642 0:7cf972f622d3 273 * @param length : pointer to data length variable
caoyuan9642 0:7cf972f622d3 274 * @retval pointer to descriptor buffer
caoyuan9642 0:7cf972f622d3 275 */
caoyuan9642 0:7cf972f622d3 276 uint8_t * USBD_CDC_ConfigStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length)
caoyuan9642 0:7cf972f622d3 277 {
caoyuan9642 0:7cf972f622d3 278 if(speed == USBD_SPEED_HIGH)
caoyuan9642 0:7cf972f622d3 279 {
caoyuan9642 0:7cf972f622d3 280 USBD_GetString ((uint8_t *)USBD_CONFIGURATION_HS_STRING, USBD_StrDesc, length);
caoyuan9642 0:7cf972f622d3 281 }
caoyuan9642 0:7cf972f622d3 282 else
caoyuan9642 0:7cf972f622d3 283 {
caoyuan9642 0:7cf972f622d3 284 USBD_GetString ((uint8_t *)USBD_CONFIGURATION_FS_STRING, USBD_StrDesc, length);
caoyuan9642 0:7cf972f622d3 285 }
caoyuan9642 0:7cf972f622d3 286 return USBD_StrDesc;
caoyuan9642 0:7cf972f622d3 287 }
caoyuan9642 0:7cf972f622d3 288
caoyuan9642 0:7cf972f622d3 289
caoyuan9642 0:7cf972f622d3 290 /**
caoyuan9642 0:7cf972f622d3 291 * @brief USBD_CDC_InterfaceStrDescriptor
caoyuan9642 0:7cf972f622d3 292 * return the interface string descriptor
caoyuan9642 0:7cf972f622d3 293 * @param speed : current device speed
caoyuan9642 0:7cf972f622d3 294 * @param length : pointer to data length variable
caoyuan9642 0:7cf972f622d3 295 * @retval pointer to descriptor buffer
caoyuan9642 0:7cf972f622d3 296 */
caoyuan9642 0:7cf972f622d3 297 uint8_t * USBD_CDC_InterfaceStrDescriptor( USBD_SpeedTypeDef speed , uint16_t *length)
caoyuan9642 0:7cf972f622d3 298 {
caoyuan9642 0:7cf972f622d3 299 if(speed == 0)
caoyuan9642 0:7cf972f622d3 300 {
caoyuan9642 0:7cf972f622d3 301 USBD_GetString ((uint8_t *)USBD_INTERFACE_HS_STRING, USBD_StrDesc, length);
caoyuan9642 0:7cf972f622d3 302 }
caoyuan9642 0:7cf972f622d3 303 else
caoyuan9642 0:7cf972f622d3 304 {
caoyuan9642 0:7cf972f622d3 305 USBD_GetString ((uint8_t *)USBD_INTERFACE_FS_STRING, USBD_StrDesc, length);
caoyuan9642 0:7cf972f622d3 306 }
caoyuan9642 0:7cf972f622d3 307 return USBD_StrDesc;
caoyuan9642 0:7cf972f622d3 308 }
caoyuan9642 0:7cf972f622d3 309
caoyuan9642 0:7cf972f622d3 310 /**
caoyuan9642 0:7cf972f622d3 311 * @}
caoyuan9642 0:7cf972f622d3 312 */
caoyuan9642 0:7cf972f622d3 313
caoyuan9642 0:7cf972f622d3 314
caoyuan9642 0:7cf972f622d3 315 /**
caoyuan9642 0:7cf972f622d3 316 * @}
caoyuan9642 0:7cf972f622d3 317 */
caoyuan9642 0:7cf972f622d3 318
caoyuan9642 0:7cf972f622d3 319
caoyuan9642 0:7cf972f622d3 320 /**
caoyuan9642 0:7cf972f622d3 321 * @}
caoyuan9642 0:7cf972f622d3 322 */
caoyuan9642 0:7cf972f622d3 323
caoyuan9642 0:7cf972f622d3 324 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
caoyuan9642 0:7cf972f622d3 325
caoyuan9642 0:7cf972f622d3 326