Skip to content

Commit ac7c4ce

Browse files
authored
Merge pull request #887 from 3devo/usb-configuration
USB-related improvements
2 parents 02dbdad + 0e24dcb commit ac7c4ce

File tree

3 files changed

+75
-49
lines changed

3 files changed

+75
-49
lines changed

boards.txt

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ menu.upload_method=Upload method
1515

1616
Nucleo_144.name=Nucleo-144
1717

18-
Nucleo_144.build.vid=0x0483
1918
Nucleo_144.build.core=arduino
2019
Nucleo_144.build.board=Nucleo_144
2120
Nucleo_144.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -162,7 +161,6 @@ Nucleo_144.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
162161

163162
Nucleo_64.name=Nucleo-64
164163

165-
Nucleo_64.build.vid=0x0483
166164
Nucleo_64.build.core=arduino
167165
Nucleo_64.build.board=Nucleo_64
168166
Nucleo_64.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -423,7 +421,6 @@ Nucleo_64.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
423421

424422
Nucleo_32.name=Nucleo-32
425423

426-
Nucleo_32.build.vid=0x0483
427424
Nucleo_32.build.core=arduino
428425
Nucleo_32.build.board=Nucleo_32
429426
Nucleo_32.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -517,7 +514,6 @@ Nucleo_32.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
517514

518515
Disco.name=Discovery
519516

520-
Disco.build.vid=0x0483
521517
Disco.build.core=arduino
522518
Disco.build.board=Disco
523519
Disco.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -635,7 +631,6 @@ Disco.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
635631

636632
Eval.name=Eval
637633

638-
Eval.build.vid=0x0483
639634
Eval.build.core=arduino
640635
Eval.build.board=Eval
641636
Eval.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -668,7 +663,6 @@ Eval.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
668663

669664
STM32MP1.name=STM32MP1 series coprocessor
670665

671-
STM32MP1.build.vid=0x0483
672666
STM32MP1.build.core=arduino
673667
STM32MP1.build.board=STM32MP1
674668
STM32MP1.build.mcu=cortex-m4
@@ -756,7 +750,6 @@ GenF0.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
756750
# Generic F1
757751
GenF1.name=Generic STM32F1 series
758752

759-
GenF1.build.vid=0x0483
760753
GenF1.build.core=arduino
761754
GenF1.build.board=GenF1
762755
GenF1.build.mcu=cortex-m3
@@ -946,7 +939,6 @@ GenF1.menu.upload_method.dfuoMethod.build.bootloader_flags=-DBL_LEGACY_LEAF -DVE
946939

947940
GenF3.name=Generic STM32F3 series
948941

949-
GenF3.build.vid=0x0483
950942
GenF3.build.core=arduino
951943
GenF3.build.board=GenF3
952944
GenF3.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} {build.bootloader_flags}
@@ -988,7 +980,6 @@ GenF3.menu.upload_method.bmpMethod.upload.tool=bmp_upload
988980

989981
GenF4.name=Generic STM32F4 series
990982

991-
GenF4.build.vid=0x0483
992983
GenF4.build.core=arduino
993984
GenF4.build.board=GenF4
994985
GenF4.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} {build.bootloader_flags}
@@ -1175,7 +1166,6 @@ GenF4.menu.upload_method.hidMethod.build.bootloader_flags=-DBL_HID -DVECT_TAB_OF
11751166
# Generic L0
11761167
GenL0.name=Generic STM32L0 series
11771168

1178-
GenL0.build.vid=0x0483
11791169
GenL0.build.core=arduino
11801170
GenL0.build.board=GenL0
11811171
GenL0.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} -D__CORTEX_SC=0
@@ -1224,7 +1214,6 @@ GenL0.menu.upload_method.bmpMethod.upload.tool=bmp_upload
12241214

12251215
ESC_board.name=Electronic speed controllers
12261216

1227-
ESC_board.build.vid=0x0483
12281217
ESC_board.build.core=arduino
12291218
ESC_board.build.board=FCE_board
12301219
ESC_board.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -1261,7 +1250,6 @@ ESC_board.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
12611250

12621251
LoRa.name=LoRa boards
12631252

1264-
LoRa.build.vid=0x0483
12651253
LoRa.build.core=arduino
12661254
LoRa.build.board=LoRa
12671255
LoRa.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -1332,7 +1320,6 @@ LoRa.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
13321320

13331321
3dprinter.name=3D printer boards
13341322

1335-
3dprinter.build.vid=0x0483
13361323
3dprinter.build.core=arduino
13371324
3dprinter.build.board=3dprinter
13381325
3dprinter.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}
@@ -1348,8 +1335,6 @@ LoRa.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
13481335
3dprinter.menu.pnum.ARMED_V1.build.product_line=STM32F407xx
13491336
3dprinter.menu.pnum.ARMED_V1.build.variant=ARMED_V1
13501337
3dprinter.menu.pnum.ARMED_V1.build.cmsis_lib_gcc=arm_cortexM4lf_math
1351-
3dprinter.menu.pnum.ARMED_V1.build.vid=0x0483
1352-
3dprinter.menu.pnum.ARMED_V1.build.pid=0x5740
13531338

13541339
# REMRAM_V1 board
13551340
3dprinter.menu.pnum.REMRAM_V1=RemRam v1
@@ -1498,7 +1483,6 @@ LoRa.menu.upload_method.dfuMethod.upload.tool=stm32CubeProg
14981483

14991484
Genericflight.name=Generic flight controllers
15001485

1501-
Genericflight.build.vid=0x0483
15021486
Genericflight.build.core=arduino
15031487
Genericflight.build.board=Genericflight
15041488
Genericflight.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial} {build.bootloader_flags}
@@ -1583,7 +1567,6 @@ Genericflight.menu.upload_method.dfuoMethod.build.bootloader_flags=-DBL_LEGACY_L
15831567

15841568
Midatronics.name=Midatronics boards
15851569

1586-
Midatronics.build.vid=0x0483
15871570
Midatronics.build.core=arduino
15881571
Midatronics.build.board=Midatronics
15891572
Midatronics.build.extra_flags=-D{build.product_line} {build.enable_usb} {build.xSerial}

cores/arduino/stm32/usb/usbd_desc.c

Lines changed: 61 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -21,41 +21,75 @@
2121
#include "usbd_core.h"
2222
#include "usbd_desc.h"
2323
#include "utils.h"
24+
#include <variant.h>
2425

2526
/* Private typedef -----------------------------------------------------------*/
2627
/* Private define ------------------------------------------------------------*/
27-
#if USBD_VID == 0x2341
28+
29+
/* USB VID and PID: Either both or neither must be specified. If not
30+
* specified, default to the ST VID, with a PID assigned to HID or a PID
31+
* assigned to CDC devices. */
32+
#if !USBD_PID && !USBD_VID
33+
// Undef the default zero values
34+
#undef USBD_PID
35+
#undef USBD_VID
36+
// Define default values, based on the USB class used
37+
#define USBD_VID 0x0483
38+
#if defined(USBD_USE_HID_COMPOSITE)
39+
#define USBD_PID 0x5711
40+
#elif defined(USBD_USE_CDC)
41+
#define USBD_PID 0x5740
42+
#endif
43+
#endif /* !USBD_PID && !USBD_VID */
44+
45+
#if !USBD_VID || !USBD_PID
46+
#error "USB VID or PID not specified"
47+
#endif
48+
49+
/* Manufacturer string: Use the specified string if specified, guess
50+
based on VID otherwise */
51+
#if defined(USB_MANUFACTURER_STRING)
52+
#define USBD_MANUFACTURER_STRING USB_MANUFACTURER_STRING
53+
#elif USBD_VID == 0x2341
2854
#define USBD_MANUFACTURER_STRING "Arduino LLC"
2955
#elif USBD_VID == 0x2A03
3056
#define USBD_MANUFACTURER_STRING "Arduino srl"
3157
#elif USBD_VID == 0x0483
3258
#define USBD_MANUFACTURER_STRING "STMicroelectronics"
33-
#elif !defined(USB_MANUFACTURER)
34-
// Fall through to unknown if no manufacturer name was provided in a macro
35-
#define USBD_MANUFACTURER_STRING "Unknown"
3659
#else
37-
#define USBD_MANUFACTURER_STRING USB_MANUFACTURER
60+
#define USBD_MANUFACTURER_STRING "Unknown"
3861
#endif
62+
3963
#define USBD_LANGID_STRING 0x409 /* 1033 US.S English */
4064

65+
/* Product string: Use the specified string if specified, construct
66+
based on BOARD_NAME and class otherwise. */
67+
#if defined(USB_PRODUCT_STRING)
68+
#define USBD_CLASS_PRODUCT_HS_STRING USB_PRODUCT_STRING
69+
#define USBD_CLASS_PRODUCT_FS_STRING USB_PRODUCT_STRING
70+
#elif defined(USBD_USE_HID_COMPOSITE)
71+
#define USBD_CLASS_PRODUCT_HS_STRING CONCATS(BOARD_NAME, "HID in HS Mode")
72+
#define USBD_CLASS_PRODUCT_FS_STRING CONCATS(BOARD_NAME, "HID in FS Mode")
73+
#elif defined(USBD_USE_CDC)
74+
#define USBD_CLASS_PRODUCT_HS_STRING CONCATS(BOARD_NAME, "CDC in HS Mode")
75+
#define USBD_CLASS_PRODUCT_FS_STRING CONCATS(BOARD_NAME, "CDC in FS Mode")
76+
#else
77+
#define USBD_CLASS_PRODUCT_HS_STRING CONCATS(BOARD_NAME, "in HS Mode")
78+
#define USBD_CLASS_PRODUCT_FS_STRING CONCATS(BOARD_NAME, "in FS Mode")
79+
#endif
80+
4181
#ifdef USBD_USE_HID_COMPOSITE
42-
#define USBD_CLASS_PID 0x5711
43-
#define USBD_CLASS_PRODUCT_HS_STRING CONCATS(USB_PRODUCT, "HID in HS Mode")
44-
#define USBD_CLASS_PRODUCT_FS_STRING CONCATS(USB_PRODUCT, "HID in FS Mode")
45-
#define USBD_CLASS_CONFIGURATION_HS_STRING CONCATS(USB_PRODUCT, "HID Config")
46-
#define USBD_CLASS_INTERFACE_HS_STRING CONCATS(USB_PRODUCT, "HID Interface")
47-
#define USBD_CLASS_CONFIGURATION_FS_STRING CONCATS(USB_PRODUCT, "HID Config")
48-
#define USBD_CLASS_INTERFACE_FS_STRING CONCATS(USB_PRODUCT, "HID Interface")
82+
#define USBD_CLASS_CONFIGURATION_HS_STRING CONCATS(BOARD_NAME, "HID Config")
83+
#define USBD_CLASS_INTERFACE_HS_STRING CONCATS(BOARD_NAME, "HID Interface")
84+
#define USBD_CLASS_CONFIGURATION_FS_STRING CONCATS(BOARD_NAME, "HID Config")
85+
#define USBD_CLASS_INTERFACE_FS_STRING CONCATS(BOARD_NAME, "HID Interface")
4986
#endif /* USBD_USE_HID_COMPOSITE */
5087

5188
#ifdef USBD_USE_CDC
52-
#define USBD_CLASS_PID 0x5740
53-
#define USBD_CLASS_PRODUCT_HS_STRING CONCATS(USB_PRODUCT, "CDC in HS Mode")
54-
#define USBD_CLASS_PRODUCT_FS_STRING CONCATS(USB_PRODUCT, "CDC in FS Mode")
55-
#define USBD_CLASS_CONFIGURATION_HS_STRING CONCATS(USB_PRODUCT, "CDC Config")
56-
#define USBD_CLASS_INTERFACE_HS_STRING CONCATS(USB_PRODUCT, "CDC Interface")
57-
#define USBD_CLASS_CONFIGURATION_FS_STRING CONCATS(USB_PRODUCT, "CDC Config")
58-
#define USBD_CLASS_INTERFACE_FS_STRING CONCATS(USB_PRODUCT, "CDC Interface")
89+
#define USBD_CLASS_CONFIGURATION_HS_STRING CONCATS(BOARD_NAME, "CDC Config")
90+
#define USBD_CLASS_INTERFACE_HS_STRING CONCATS(BOARD_NAME, "CDC Interface")
91+
#define USBD_CLASS_CONFIGURATION_FS_STRING CONCATS(BOARD_NAME, "CDC Config")
92+
#define USBD_CLASS_INTERFACE_FS_STRING CONCATS(BOARD_NAME, "CDC Interface")
5993
#endif /* USBD_USE_CDC */
6094

6195
/* Private macro -------------------------------------------------------------*/
@@ -99,10 +133,10 @@ __ALIGN_BEGIN uint8_t USBD_Class_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END = {
99133
USB_MAX_EP0_SIZE, /* bMaxPacketSize */
100134
LOBYTE(USBD_VID), /* idVendor */
101135
HIBYTE(USBD_VID), /* idVendor */
102-
LOBYTE(USBD_CLASS_PID), /* idVendor */
103-
HIBYTE(USBD_CLASS_PID), /* idVendor */
104-
0x00, /* bcdDevice rel. 2.00 */
105-
0x02,
136+
LOBYTE(USBD_PID), /* idProduct */
137+
HIBYTE(USBD_PID), /* idProduct */
138+
0x00, /* bcdDevice rel. 0.00 */
139+
0x00,
106140
USBD_IDX_MFC_STR, /* Index of manufacturer string */
107141
USBD_IDX_PRODUCT_STR, /* Index of product string */
108142
USBD_IDX_SERIAL_STR, /* Index of serial number string */
@@ -123,10 +157,10 @@ __ALIGN_BEGIN uint8_t USBD_Class_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END = {
123157
USB_MAX_EP0_SIZE, /* bMaxPacketSize */
124158
LOBYTE(USBD_VID), /* idVendor */
125159
HIBYTE(USBD_VID), /* idVendor */
126-
LOBYTE(USBD_CLASS_PID), /* idVendor */
127-
HIBYTE(USBD_CLASS_PID), /* idVendor */
128-
0x00, /* bcdDevice rel. 2.00 */
129-
0x02,
160+
LOBYTE(USBD_PID), /* idProduct */
161+
HIBYTE(USBD_PID), /* idProduct */
162+
0x00, /* bcdDevice rel. 0.00 */
163+
0x00,
130164
USBD_IDX_MFC_STR, /* Index of manufacturer string */
131165
USBD_IDX_PRODUCT_STR, /* Index of product string */
132166
USBD_IDX_SERIAL_STR, /* Index of serial number string */

platform.txt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,20 @@ compiler.arm.cmsis.ldflags="-L{runtime.tools.CMSIS-5.5.1.path}/CMSIS/DSP/Lib/GCC
6969

7070
# USB Flags
7171
# ---------
72-
build.usb_flags=-DUSBCON {build.usb_speed} -DUSBD_VID={build.vid} '-DUSB_MANUFACTURER={build.usb_manufacturer}' '-DUSB_PRODUCT="{build.board}"' -DHAL_PCD_MODULE_ENABLED
73-
74-
# Default usb manufacturer will be replaced at compile time using
75-
# numeric vendor ID if available or by board's specific value.
76-
build.usb_manufacturer="Unknown"
72+
build.usb_flags=-DUSBCON {build.usb_speed} -DUSBD_VID={build.vid} -DUSBD_PID={build.pid} -DHAL_PCD_MODULE_ENABLED
73+
74+
# Specify defaults for vid/pid, since an empty value is impossible to
75+
# detect in the preprocessor, but a 0 can be checked for.
76+
# Boards should specify either both, or neither of these.
77+
build.vid=0
78+
build.pid=0
79+
80+
# To customize the USB manufacturer or product string, must add defines
81+
# for them, e.g.:
82+
# some_board.build.extra_flags='-DUSB_MANUFACTURER_STRING="My Company"' '-DUSB_PRODUCT_STRING="My Product"'
83+
# This cannot be done using build variables and specifying the -D
84+
# options here, since then the default would be a defined, but empty macro
85+
# that the preprocessor cannot detect.
7786

7887
# Build information's
7988
build.info.flags=-D{build.series} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DBOARD_NAME="{build.board}"

0 commit comments

Comments
 (0)