Skip to content

Commit

Permalink
tinyusb: Add support for USB selection
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
kasjer committed Aug 22, 2024
1 parent de5b4c3 commit 273851f
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 6 deletions.
19 changes: 18 additions & 1 deletion hw/usb/tinyusb/std_descriptors/include/tusb_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 5 additions & 5 deletions hw/usb/tinyusb/std_descriptors/src/std_descriptors.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 7 additions & 0 deletions hw/usb/tinyusb/syscfg.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 273851f

Please sign in to comment.