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 */
0 commit comments