rusEFI
The most advanced open source ECU
Loading...
Searching...
No Matches
usbd_desc.c
Go to the documentation of this file.
1/* USER CODE BEGIN Header */
2/**
3 ******************************************************************************
4 * @file : App/usbd_desc.c
5 * @version : v1.0_Cube
6 * @brief : This file implements the USB device descriptors.
7 ******************************************************************************
8 * @attention
9 *
10 * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
11 * All rights reserved.</center></h2>
12 *
13 * This software component is licensed by ST under Ultimate Liberty license
14 * SLA0044, the "License"; You may not use this file except in compliance with
15 * the License. You may obtain a copy of the License at:
16 * www.st.com/SLA0044
17 *
18 ******************************************************************************
19 */
20/* USER CODE END Header */
21
22/* Includes ------------------------------------------------------------------*/
23#include "usbd_core.h"
24#include "usbd_desc.h"
25#include "usbd_conf.h"
26
27/* USER CODE BEGIN INCLUDE */
28
29/* USER CODE END INCLUDE */
30
31/* Private typedef -----------------------------------------------------------*/
32/* Private define ------------------------------------------------------------*/
33/* Private macro -------------------------------------------------------------*/
34
35/* USER CODE BEGIN PV */
36/* Private variables ---------------------------------------------------------*/
37
38/* USER CODE END PV */
39
40/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
41 * @{
42 */
43
44/** @addtogroup USBD_DESC
45 * @{
46 */
47
48/** @defgroup USBD_DESC_Private_TypesDefinitions USBD_DESC_Private_TypesDefinitions
49 * @brief Private types.
50 * @{
51 */
52
53/* USER CODE BEGIN PRIVATE_TYPES */
54
55/* USER CODE END PRIVATE_TYPES */
56
57/**
58 * @}
59 */
60
61/** @defgroup USBD_DESC_Private_Defines USBD_DESC_Private_Defines
62 * @brief Private defines.
63 * @{
64 */
65
66#define USBD_VID 0x1d50
67#define USBD_LANGID_STRING 1033
68#define USBD_MANUFACTURER_STRING "OpenBLT User"
69#define USBD_PID_FS 0x60ac
70#define USBD_PRODUCT_STRING_FS "WinUSB Bulk Device"
71#define USBD_CONFIGURATION_STRING_FS "Default"
72#define USBD_INTERFACE_STRING_FS "WinUSB Bulk Interface"
73
74#define USB_SIZ_BOS_DESC 0x0C
75
76/* USER CODE BEGIN PRIVATE_DEFINES */
77
78/* USER CODE END PRIVATE_DEFINES */
79
80/**
81 * @}
82 */
83
84/* USER CODE BEGIN 0 */
85
86/* USER CODE END 0 */
87
88/** @defgroup USBD_DESC_Private_Macros USBD_DESC_Private_Macros
89 * @brief Private macros.
90 * @{
91 */
92
93/* USER CODE BEGIN PRIVATE_MACRO */
94
95/* USER CODE END PRIVATE_MACRO */
96
97/**
98 * @}
99 */
100
101/** @defgroup USBD_DESC_Private_FunctionPrototypes USBD_DESC_Private_FunctionPrototypes
102 * @brief Private functions declaration.
103 * @{
104 */
105
106static void Get_SerialNum(void);
107static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len);
108
109/**
110 * @}
111 */
112
113/** @defgroup USBD_DESC_Private_FunctionPrototypes USBD_DESC_Private_FunctionPrototypes
114 * @brief Private functions declaration for FS.
115 * @{
116 */
117
118uint8_t * USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
119uint8_t * USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
120uint8_t * USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
121uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
122uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
123uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
124uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
125#if (USBD_LPM_ENABLED == 1)
126uint8_t * USBD_FS_USR_BOSDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
127#endif /* (USBD_LPM_ENABLED == 1) */
128
129/**
130 * @}
131 */
132
133/** @defgroup USBD_DESC_Private_Variables USBD_DESC_Private_Variables
134 * @brief Private variables.
135 * @{
136 */
137
138USBD_DescriptorsTypeDef FS_Desc =
139{
147#if (USBD_LPM_ENABLED == 1)
149#endif /* (USBD_LPM_ENABLED == 1) */
150};
151
152#if defined ( __ICCARM__ ) /* IAR Compiler */
153 #pragma data_alignment=4
154#endif /* defined ( __ICCARM__ ) */
155/** USB standard device descriptor. */
156__ALIGN_BEGIN uint8_t USBD_FS_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END =
157{
158 0x12, /*bLength */
159 USB_DESC_TYPE_DEVICE, /*bDescriptorType*/
160 0x10, /*bcdUSB */
161 0x01,
162 0x00, /*bDeviceClass*/
163 0x00, /*bDeviceSubClass*/
164 0x00, /*bDeviceProtocol*/
165 USB_MAX_EP0_SIZE, /*bMaxPacketSize*/
166 LOBYTE(USBD_VID), /*idVendor*/
167 HIBYTE(USBD_VID), /*idVendor*/
168 LOBYTE(USBD_PID_FS), /*idProduct*/
169 HIBYTE(USBD_PID_FS), /*idProduct*/
170 0x00, /*bcdDevice rel. 2.00*/
171 0x01,
172 USBD_IDX_MFC_STR, /*Index of manufacturer string*/
173 USBD_IDX_PRODUCT_STR, /*Index of product string*/
174 USBD_IDX_SERIAL_STR, /*Index of serial number string*/
175 USBD_MAX_NUM_CONFIGURATION /*bNumConfigurations*/
176};
177
178/* USB_DeviceDescriptor */
179
180/**
181 * @}
182 */
183
184/** @defgroup USBD_DESC_Private_Variables USBD_DESC_Private_Variables
185 * @brief Private variables.
186 * @{
187 */
188
189#if defined ( __ICCARM__ ) /* IAR Compiler */
190 #pragma data_alignment=4
191#endif /* defined ( __ICCARM__ ) */
192
193/** USB lang indentifier descriptor. */
194__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END =
195{
196 USB_LEN_LANGID_STR_DESC,
197 USB_DESC_TYPE_STRING,
198 LOBYTE(USBD_LANGID_STRING),
199 HIBYTE(USBD_LANGID_STRING)
200};
201
202#if defined ( __ICCARM__ ) /* IAR Compiler */
203 #pragma data_alignment=4
204#endif /* defined ( __ICCARM__ ) */
205/* Internal string descriptor. */
206__ALIGN_BEGIN uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ] __ALIGN_END;
207
208#if defined ( __ICCARM__ ) /*!< IAR Compiler */
209 #pragma data_alignment=4
210#endif
211__ALIGN_BEGIN uint8_t USBD_StringSerial[USB_SIZ_STRING_SERIAL] __ALIGN_END = {
212 USB_SIZ_STRING_SERIAL,
213 USB_DESC_TYPE_STRING,
214};
215
216/**
217 * @}
218 */
219
220/** @defgroup USBD_DESC_Private_Functions USBD_DESC_Private_Functions
221 * @brief Private functions.
222 * @{
223 */
224
225/**
226 * @brief Return the device descriptor
227 * @param speed : Current device speed
228 * @param length : Pointer to data length variable
229 * @retval Pointer to descriptor buffer
230 */
231uint8_t * USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
232{
233 UNUSED(speed);
234 *length = sizeof(USBD_FS_DeviceDesc);
235 return USBD_FS_DeviceDesc;
236}
237
238/**
239 * @brief Return the LangID string descriptor
240 * @param speed : Current device speed
241 * @param length : Pointer to data length variable
242 * @retval Pointer to descriptor buffer
243 */
244uint8_t * USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
245{
246 UNUSED(speed);
247 *length = sizeof(USBD_LangIDDesc);
248 return USBD_LangIDDesc;
249}
250
251/**
252 * @brief Return the product string descriptor
253 * @param speed : Current device speed
254 * @param length : Pointer to data length variable
255 * @retval Pointer to descriptor buffer
256 */
257uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
258{
259 if(speed == 0)
260 {
261 USBD_GetString((uint8_t *)USBD_PRODUCT_STRING_FS, USBD_StrDesc, length);
262 }
263 else
264 {
265 USBD_GetString((uint8_t *)USBD_PRODUCT_STRING_FS, USBD_StrDesc, length);
266 }
267 return USBD_StrDesc;
268}
269
270/**
271 * @brief Return the manufacturer string descriptor
272 * @param speed : Current device speed
273 * @param length : Pointer to data length variable
274 * @retval Pointer to descriptor buffer
275 */
276uint8_t * USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
277{
278 UNUSED(speed);
279 USBD_GetString((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
280 return USBD_StrDesc;
281}
282
283/**
284 * @brief Return the serial number string descriptor
285 * @param speed : Current device speed
286 * @param length : Pointer to data length variable
287 * @retval Pointer to descriptor buffer
288 */
289uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
290{
291 UNUSED(speed);
292 *length = USB_SIZ_STRING_SERIAL;
293
294 /* Update the serial number string descriptor with the data from the unique
295 * ID */
297 /* USER CODE BEGIN USBD_FS_SerialStrDescriptor */
298
299 /* USER CODE END USBD_FS_SerialStrDescriptor */
300 return (uint8_t *) USBD_StringSerial;
301}
302
303/**
304 * @brief Return the configuration string descriptor
305 * @param speed : Current device speed
306 * @param length : Pointer to data length variable
307 * @retval Pointer to descriptor buffer
308 */
309uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
310{
311 if(speed == USBD_SPEED_HIGH)
312 {
313 USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length);
314 }
315 else
316 {
317 USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length);
318 }
319 return USBD_StrDesc;
320}
321
322/**
323 * @brief Return the interface string descriptor
324 * @param speed : Current device speed
325 * @param length : Pointer to data length variable
326 * @retval Pointer to descriptor buffer
327 */
328uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
329{
330 if(speed == 0)
331 {
332 USBD_GetString((uint8_t *)USBD_INTERFACE_STRING_FS, USBD_StrDesc, length);
333 }
334 else
335 {
336 USBD_GetString((uint8_t *)USBD_INTERFACE_STRING_FS, USBD_StrDesc, length);
337 }
338 return USBD_StrDesc;
339}
340
341/**
342 * @brief Create the serial number string descriptor
343 * @param None
344 * @retval None
345 */
346static void Get_SerialNum(void)
347{
348 uint32_t deviceserial0, deviceserial1, deviceserial2;
349
350 deviceserial0 = *(uint32_t *) DEVICE_ID1;
351 deviceserial1 = *(uint32_t *) DEVICE_ID2;
352 deviceserial2 = *(uint32_t *) DEVICE_ID3;
353
354 deviceserial0 += deviceserial2;
355
356 if (deviceserial0 != 0)
357 {
358 IntToUnicode(deviceserial0, &USBD_StringSerial[2], 8);
359 IntToUnicode(deviceserial1, &USBD_StringSerial[18], 4);
360 }
361}
362
363/**
364 * @brief Convert Hex 32Bits value into char
365 * @param value: value to convert
366 * @param pbuf: pointer to the buffer
367 * @param len: buffer length
368 * @retval None
369 */
370static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len)
371{
372 uint8_t idx = 0;
373
374 for (idx = 0; idx < len; idx++)
375 {
376 if (((value >> 28)) < 0xA)
377 {
378 pbuf[2 * idx] = (value >> 28) + '0';
379 }
380 else
381 {
382 pbuf[2 * idx] = (value >> 28) + 'A' - 10;
383 }
384
385 value = value << 4;
386
387 pbuf[2 * idx + 1] = 0;
388 }
389}
390/**
391 * @}
392 */
393
394/**
395 * @}
396 */
397
398/**
399 * @}
400 */
401
402/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
Return the product string descriptor.
Definition usbd_desc.c:257
uint8_t * USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
Return the device descriptor.
Definition usbd_desc.c:231
uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
Return the configuration string descriptor.
Definition usbd_desc.c:309
uint8_t * USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
Return the manufacturer string descriptor.
Definition usbd_desc.c:276
static void IntToUnicode(uint32_t value, uint8_t *pbuf, uint8_t len)
Convert Hex 32Bits value into char.
Definition usbd_desc.c:370
uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
Return the serial number string descriptor.
Definition usbd_desc.c:289
uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
Return the interface string descriptor.
Definition usbd_desc.c:328
uint8_t * USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
Return the LangID string descriptor.
Definition usbd_desc.c:244
uint8_t * USBD_FS_USR_BOSDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
static void Get_SerialNum(void)
Create the serial number string descriptor.
Definition usbd_desc.c:346
__ALIGN_BEGIN uint8_t USBD_FS_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END
Definition usbd_desc.c:156
USBD_DescriptorsTypeDef FS_Desc
Definition usbd_desc.c:138
UNUSED(samplingTimeSeconds)
: Header for usbd_conf.c file.
Header file for usbd_core.c file.
: Header for usbd_conf.c file.