From 273851fea5be8cc133d50c2c6b6c7518e4fd28b4 Mon Sep 17 00:00:00 2001 From: Jerzy Kasenberg Date: Thu, 22 Aug 2024 10:55:12 +0200 Subject: [PATCH] tinyusb: Add support for USB selection Some MCU have more then one USB controller So far RHPORT0 was always used. Only one USB device can be configured in mynewt (host is not supported yet) Now application can decide which USB controller to use by specifying USBD_RHPORT: USB0 or USB1 Signed-off-by: Jerzy Kasenberg --- .../std_descriptors/include/tusb_config.h | 19 ++++++++++++++++++- .../std_descriptors/src/std_descriptors.c | 10 +++++----- hw/usb/tinyusb/syscfg.yml | 7 +++++++ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/hw/usb/tinyusb/std_descriptors/include/tusb_config.h b/hw/usb/tinyusb/std_descriptors/include/tusb_config.h index 26b25c7b07..eadf278c13 100755 --- a/hw/usb/tinyusb/std_descriptors/include/tusb_config.h +++ b/hw/usb/tinyusb/std_descriptors/include/tusb_config.h @@ -42,7 +42,24 @@ extern "C" { #error CFG_TUSB_MCU must be defined #endif -#define CFG_TUSB_RHPORT0_MODE ((OPT_MODE_DEVICE) | (CFG_TUSB_RHPORT0_SPEED)) +#if MYNEWT_VAL_CHOICE(USBD_RHPORT, USB0) +#undef CFG_TUSB_RHPORT0_MODE +#if MYNEWT_VAL(USBD_HIGH_SPEED) +#define CFG_TUSB_RHPORT0_MODE (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED) +#else +#define CFG_TUSB_RHPORT0_MODE (OPT_MODE_DEVICE | OPT_MODE_FULL_SPEED) +#endif +#define USBD_RHPORT_MODE CFG_TUSB_RHPORT0_MODE + +#elif MYNEWT_VAL_CHOICE(USBD_RHPORT, USB1) +#undef CFG_TUSB_RHPORT1_MODE +#if MYNEWT_VAL(USBD_HIGH_SPEED) +#define CFG_TUSB_RHPORT1_MODE (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED) +#else +#define CFG_TUSB_RHPORT1_MODE (OPT_MODE_DEVICE | OPT_MODE_FULL_SPEED) +#endif +#define USBD_RHPORT_MODE CFG_TUSB_RHPORT1_MODE +#endif #if MYNEWT_VAL(OS_SCHEDULING) #define CFG_TUSB_OS OPT_OS_MYNEWT diff --git a/hw/usb/tinyusb/std_descriptors/src/std_descriptors.c b/hw/usb/tinyusb/std_descriptors/src/std_descriptors.c index 6f3980acea..9981b754d0 100755 --- a/hw/usb/tinyusb/std_descriptors/src/std_descriptors.c +++ b/hw/usb/tinyusb/std_descriptors/src/std_descriptors.c @@ -310,32 +310,32 @@ const uint8_t desc_configuration[] = { #if CFG_TUD_BTH TUD_BTH_DESCRIPTOR(ITF_NUM_BTH, BTH_IF_STR_IX, USBD_BTH_EVENT_EP, USBD_BTH_EVENT_EP_SIZE, USBD_BTH_EVENT_EP_INTERVAL, USBD_BTH_DATA_IN_EP, USBD_BTH_DATA_OUT_EP, - (CFG_TUSB_RHPORT0_MODE & OPT_MODE_HIGH_SPEED) ? 512 : USBD_BTH_DATA_EP_SIZE, + (USBD_RHPORT_MODE & OPT_MODE_HIGH_SPEED) ? 512 : USBD_BTH_DATA_EP_SIZE, 0, 9, 17, 25, 33, 49), #endif #if CFG_CDC_CONSOLE TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_CONSOLE, CDC_CONSOLE_IF_STR_IX, USBD_CDC_CONSOLE_NOTIFY_EP, USBD_CDC_CONSOLE_NOTIFY_EP_SIZE, USBD_CDC_CONSOLE_DATA_OUT_EP, USBD_CDC_CONSOLE_DATA_IN_EP, - (CFG_TUSB_RHPORT0_MODE & OPT_MODE_HIGH_SPEED) ? 512 : USBD_CDC_CONSOLE_DATA_EP_SIZE), + (USBD_RHPORT_MODE & OPT_MODE_HIGH_SPEED) ? 512 : USBD_CDC_CONSOLE_DATA_EP_SIZE), #endif #if CFG_CDC_HCI TUD_CDC_DESCRIPTOR(ITF_NUM_CDC_HCI, CDC_HCI_IF_STR_IX, USBD_CDC_HCI_NOTIFY_EP, USBD_CDC_HCI_NOTIFY_EP_SIZE, USBD_CDC_HCI_DATA_OUT_EP, USBD_CDC_HCI_DATA_IN_EP, - (CFG_TUSB_RHPORT0_MODE & OPT_MODE_HIGH_SPEED) ? 512 : USBD_CDC_HCI_DATA_EP_SIZE), + (USBD_RHPORT_MODE & OPT_MODE_HIGH_SPEED) ? 512 : USBD_CDC_HCI_DATA_EP_SIZE), #endif #if CFG_CDC TUD_CDC_DESCRIPTOR(ITF_NUM_CDC, CDC_IF_STR_IX, USBD_CDC_NOTIFY_EP, USBD_CDC_NOTIFY_EP_SIZE, USBD_CDC_DATA_OUT_EP, USBD_CDC_DATA_IN_EP, - (CFG_TUSB_RHPORT0_MODE & OPT_MODE_HIGH_SPEED) ? 512 : USBD_CDC_DATA_EP_SIZE), + (USBD_RHPORT_MODE & OPT_MODE_HIGH_SPEED) ? 512 : USBD_CDC_DATA_EP_SIZE), #endif #if CFG_TUD_MSC /* TODO: MSC not handled yet */ TUD_MSC_DESCRIPTOR(ITF_NUM_MSC, MSC_IF_STR_IX, USBD_MSC_DATA_OUT_EP, USBD_MSC_DATA_IN_EP, - (CFG_TUSB_RHPORT0_MODE & OPT_MODE_HIGH_SPEED) ? 512 : 64), + (USBD_RHPORT_MODE & OPT_MODE_HIGH_SPEED) ? 512 : 64), #endif #if CFG_TUD_HID diff --git a/hw/usb/tinyusb/syscfg.yml b/hw/usb/tinyusb/syscfg.yml index d59ef2a862..9ccd8c5d64 100644 --- a/hw/usb/tinyusb/syscfg.yml +++ b/hw/usb/tinyusb/syscfg.yml @@ -53,3 +53,10 @@ syscfg.defs: description: > Enable USB high speed if device supports it. value: 0 + USBD_RHPORT: + description: + Selects which peripheral is used for USBD + value: USB0 + choices: + - USB0 + - USB1