Skip to content

Commit db7f4aa

Browse files
committed
stm32/usbdev: Make device descriptor callbacks take a state pointer.
1 parent dbff016 commit db7f4aa

3 files changed

Lines changed: 26 additions & 24 deletions

File tree

ports/stm32/usbd_desc.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ void USBD_SetVIDPIDRelease(uint16_t vid, uint16_t pid, uint16_t device_release_n
111111
* @param length: Pointer to data length variable
112112
* @retval Pointer to descriptor buffer
113113
*/
114-
STATIC uint8_t *USBD_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
114+
STATIC uint8_t *USBD_DeviceDescriptor(USBD_HandleTypeDef *pdev, uint16_t *length) {
115115
*length = sizeof(hUSBDDeviceDesc);
116116
return hUSBDDeviceDesc;
117117
}
@@ -122,7 +122,7 @@ STATIC uint8_t *USBD_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
122122
* @param length: Pointer to data length variable
123123
* @retval Pointer to descriptor buffer
124124
*/
125-
STATIC uint8_t *USBD_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
125+
STATIC uint8_t *USBD_LangIDStrDescriptor(USBD_HandleTypeDef *pdev, uint16_t *length) {
126126
*length = sizeof(USBD_LangIDDesc);
127127
return USBD_LangIDDesc;
128128
}
@@ -133,8 +133,8 @@ STATIC uint8_t *USBD_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *leng
133133
* @param length: Pointer to data length variable
134134
* @retval Pointer to descriptor buffer
135135
*/
136-
STATIC uint8_t *USBD_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
137-
if(speed == 0) {
136+
STATIC uint8_t *USBD_ProductStrDescriptor(USBD_HandleTypeDef *pdev, uint16_t *length) {
137+
if (pdev->dev_speed == USBD_SPEED_HIGH) {
138138
USBD_GetString((uint8_t *)USBD_PRODUCT_HS_STRING, USBD_StrDesc, length);
139139
} else {
140140
USBD_GetString((uint8_t *)USBD_PRODUCT_FS_STRING, USBD_StrDesc, length);
@@ -148,7 +148,7 @@ STATIC uint8_t *USBD_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *len
148148
* @param length: Pointer to data length variable
149149
* @retval Pointer to descriptor buffer
150150
*/
151-
STATIC uint8_t *USBD_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
151+
STATIC uint8_t *USBD_ManufacturerStrDescriptor(USBD_HandleTypeDef *pdev, uint16_t *length) {
152152
USBD_GetString((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
153153
return USBD_StrDesc;
154154
}
@@ -159,7 +159,7 @@ STATIC uint8_t *USBD_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t
159159
* @param length: Pointer to data length variable
160160
* @retval Pointer to descriptor buffer
161161
*/
162-
STATIC uint8_t *USBD_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
162+
STATIC uint8_t *USBD_SerialStrDescriptor(USBD_HandleTypeDef *pdev, uint16_t *length) {
163163
// This document: http://www.usb.org/developers/docs/devclass_docs/usbmassbulk_10.pdf
164164
// says that the serial number has to be at least 12 digits long and that
165165
// the last 12 digits need to be unique. It also stipulates that the valid
@@ -189,8 +189,8 @@ STATIC uint8_t *USBD_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *leng
189189
* @param length: Pointer to data length variable
190190
* @retval Pointer to descriptor buffer
191191
*/
192-
STATIC uint8_t *USBD_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
193-
if(speed == USBD_SPEED_HIGH) {
192+
STATIC uint8_t *USBD_ConfigStrDescriptor(USBD_HandleTypeDef *pdev, uint16_t *length) {
193+
if (pdev->dev_speed == USBD_SPEED_HIGH) {
194194
USBD_GetString((uint8_t *)USBD_CONFIGURATION_HS_STRING, USBD_StrDesc, length);
195195
} else {
196196
USBD_GetString((uint8_t *)USBD_CONFIGURATION_FS_STRING, USBD_StrDesc, length);
@@ -204,8 +204,8 @@ STATIC uint8_t *USBD_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *leng
204204
* @param length: Pointer to data length variable
205205
* @retval Pointer to descriptor buffer
206206
*/
207-
STATIC uint8_t *USBD_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length) {
208-
if(speed == 0) {
207+
STATIC uint8_t *USBD_InterfaceStrDescriptor(USBD_HandleTypeDef *pdev, uint16_t *length) {
208+
if (pdev->dev_speed == USBD_SPEED_HIGH) {
209209
USBD_GetString((uint8_t *)USBD_INTERFACE_HS_STRING, USBD_StrDesc, length);
210210
} else {
211211
USBD_GetString((uint8_t *)USBD_INTERFACE_FS_STRING, USBD_StrDesc, length);

ports/stm32/usbdev/core/inc/usbd_def.h

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,16 +193,18 @@ typedef enum {
193193
USBD_FAIL,
194194
}USBD_StatusTypeDef;
195195

196+
struct _USBD_HandleTypeDef;
197+
196198
/* USB Device descriptors structure */
197199
typedef struct
198200
{
199-
uint8_t *(*GetDeviceDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
200-
uint8_t *(*GetLangIDStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
201-
uint8_t *(*GetManufacturerStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
202-
uint8_t *(*GetProductStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
203-
uint8_t *(*GetSerialStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
204-
uint8_t *(*GetConfigurationStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
205-
uint8_t *(*GetInterfaceStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
201+
uint8_t *(*GetDeviceDescriptor)(struct _USBD_HandleTypeDef *pdev, uint16_t *length);
202+
uint8_t *(*GetLangIDStrDescriptor)(struct _USBD_HandleTypeDef *pdev, uint16_t *length);
203+
uint8_t *(*GetManufacturerStrDescriptor)(struct _USBD_HandleTypeDef *pdev, uint16_t *length);
204+
uint8_t *(*GetProductStrDescriptor)(struct _USBD_HandleTypeDef *pdev, uint16_t *length);
205+
uint8_t *(*GetSerialStrDescriptor)(struct _USBD_HandleTypeDef *pdev, uint16_t *length);
206+
uint8_t *(*GetConfigurationStrDescriptor)(struct _USBD_HandleTypeDef *pdev, uint16_t *length);
207+
uint8_t *(*GetInterfaceStrDescriptor)(struct _USBD_HandleTypeDef *pdev, uint16_t *length);
206208
} USBD_DescriptorsTypeDef;
207209

208210
/* USB Device handle structure */

ports/stm32/usbdev/core/src/usbd_ctlreq.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,7 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
330330
switch (req->wValue >> 8)
331331
{
332332
case USB_DESC_TYPE_DEVICE:
333-
pbuf = pdev->pDesc->GetDeviceDescriptor(pdev->dev_speed, &len);
333+
pbuf = pdev->pDesc->GetDeviceDescriptor(pdev, &len);
334334
break;
335335

336336
case USB_DESC_TYPE_CONFIGURATION:
@@ -350,27 +350,27 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
350350
switch ((uint8_t)(req->wValue))
351351
{
352352
case USBD_IDX_LANGID_STR:
353-
pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev->dev_speed, &len);
353+
pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev, &len);
354354
break;
355355

356356
case USBD_IDX_MFC_STR:
357-
pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev->dev_speed, &len);
357+
pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev, &len);
358358
break;
359359

360360
case USBD_IDX_PRODUCT_STR:
361-
pbuf = pdev->pDesc->GetProductStrDescriptor(pdev->dev_speed, &len);
361+
pbuf = pdev->pDesc->GetProductStrDescriptor(pdev, &len);
362362
break;
363363

364364
case USBD_IDX_SERIAL_STR:
365-
pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev->dev_speed, &len);
365+
pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev, &len);
366366
break;
367367

368368
case USBD_IDX_CONFIG_STR:
369-
pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev->dev_speed, &len);
369+
pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev, &len);
370370
break;
371371

372372
case USBD_IDX_INTERFACE_STR:
373-
pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev->dev_speed, &len);
373+
pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev, &len);
374374
break;
375375

376376
default:

0 commit comments

Comments
 (0)