diff options
| author | Koen De Vleeschauwer <kdv@kdvelectronics.eu> | 2020-06-27 12:23:38 +0200 |
|---|---|---|
| committer | Damien George <damien@micropython.org> | 2022-11-15 16:23:42 +1100 |
| commit | e7875829c2d3540c2a261a256442db747bfd34aa (patch) | |
| tree | 8cc9fb4beeae730b3a212431d2b22414f067cee4 | |
| parent | d9bca305e576a98192724c212c31413395d31cb4 (diff) | |
stm32/usbd_desc: Support USB strings on CDC interface descriptors.
A board can now name the CDC ports, eg:
#define MICROPY_HW_USB_CDC_NUM (3)
#define MICROPY_HW_USB_INTERFACE_CDC0_STRING "REPL"
#define MICROPY_HW_USB_INTERFACE_CDC1_STRING "GDB Server"
#define MICROPY_HW_USB_INTERFACE_CDC2_STRING "UART Port"
Signed-off-by: Damien George <damien@micropython.org>
| -rw-r--r-- | ports/stm32/usbd_desc.c | 18 | ||||
| -rw-r--r-- | ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c | 17 | ||||
| -rw-r--r-- | ports/stm32/usbdev/core/inc/usbd_def.h | 3 |
3 files changed, 38 insertions, 0 deletions
diff --git a/ports/stm32/usbd_desc.c b/ports/stm32/usbd_desc.c index fd50029fc..3f6b74b80 100644 --- a/ports/stm32/usbd_desc.c +++ b/ports/stm32/usbd_desc.c @@ -156,6 +156,24 @@ STATIC uint8_t *USBD_StrDescriptor(USBD_HandleTypeDef *pdev, uint8_t idx, uint16 } break; + #ifdef MICROPY_HW_USB_INTERFACE_CDC0_STRING + case USBD_IDX_INTERFACE_CDC0_STR: + str = MICROPY_HW_USB_INTERFACE_CDC0_STRING; + break; + #endif + + #ifdef MICROPY_HW_USB_INTERFACE_CDC1_STRING + case USBD_IDX_INTERFACE_CDC1_STR: + str = MICROPY_HW_USB_INTERFACE_CDC1_STRING; + break; + #endif + + #ifdef MICROPY_HW_USB_INTERFACE_CDC2_STRING + case USBD_IDX_INTERFACE_CDC2_STR: + str = MICROPY_HW_USB_INTERFACE_CDC2_STRING; + break; + #endif + default: // invalid string index return NULL; diff --git a/ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c b/ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c index 5e24730a0..3708c7558 100644 --- a/ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c +++ b/ports/stm32/usbdev/class/src/usbd_cdc_msc_hid.c @@ -438,6 +438,23 @@ static size_t make_cdc_desc(uint8_t *dest, int need_iad, uint8_t iface_num) { memcpy(dest, cdc_class_desc_data + 8, sizeof(cdc_class_desc_data) - 8); } dest[2] = iface_num; // bInterfaceNumber, main class + + #ifdef MICROPY_HW_USB_INTERFACE_CDC0_STRING + if (iface_num == CDC_IFACE_NUM_ALONE || iface_num == CDC_IFACE_NUM_WITH_MSC || iface_num == CDC_IFACE_NUM_WITH_HID) { + dest[8] = USBD_IDX_INTERFACE_CDC0_STR; // iInterface + } + #endif + #ifdef MICROPY_HW_USB_INTERFACE_CDC1_STRING + if (iface_num == CDC2_IFACE_NUM_WITH_CDC || iface_num == CDC2_IFACE_NUM_WITH_MSC) { + dest[8] = USBD_IDX_INTERFACE_CDC1_STR; // iInterface + } + #endif + #ifdef MICROPY_HW_USB_INTERFACE_CDC2_STRING + if (iface_num == CDC3_IFACE_NUM_WITH_CDC || iface_num == CDC3_IFACE_NUM_WITH_MSC) { + dest[8] = USBD_IDX_INTERFACE_CDC2_STR; // iInterface + } + #endif + dest[18] = iface_num + 1; // bDataInterface dest[26] = iface_num + 0; // bMasterInterface dest[27] = iface_num + 1; // bSlaveInterface diff --git a/ports/stm32/usbdev/core/inc/usbd_def.h b/ports/stm32/usbdev/core/inc/usbd_def.h index 44c8dd8d9..fb29d5705 100644 --- a/ports/stm32/usbdev/core/inc/usbd_def.h +++ b/ports/stm32/usbdev/core/inc/usbd_def.h @@ -66,6 +66,9 @@ #define USBD_IDX_SERIAL_STR 0x03 #define USBD_IDX_CONFIG_STR 0x04 #define USBD_IDX_INTERFACE_STR 0x05 +#define USBD_IDX_INTERFACE_CDC0_STR 0x06 +#define USBD_IDX_INTERFACE_CDC1_STR 0x07 +#define USBD_IDX_INTERFACE_CDC2_STR 0x08 #define USB_REQ_TYPE_STANDARD 0x00 #define USB_REQ_TYPE_CLASS 0x20 |
