summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2020-05-26 15:21:23 +0700
committerhathach <[email protected]>2020-05-26 15:21:23 +0700
commitfad088719e7cc4d1cab9216eb81567dd67af65f7 (patch)
treee1e9881af510f1c4006b36fb06cb909cf4541529
parent62a746bdc7dc677cabeba9ef6f1dd974de1c0791 (diff)
merge CFG_TUSB_RHPORT1_MODE into CFG_TUSB_RHPORT0_MODE
each port is 1 byte for easy maintenance
-rw-r--r--examples/device/cdc_msc/src/tusb_config.h25
-rw-r--r--hw/bsp/ea4357/ea4357.c8
-rw-r--r--hw/bsp/mcb1800/mcb1800.c8
-rw-r--r--hw/bsp/mimxrt1050_evkb/mimxrt1050_evkb.c4
-rw-r--r--hw/bsp/mimxrt1060_evk/mimxrt1060_evk.c4
-rw-r--r--hw/bsp/mimxrt1064_evk/mimxrt1064_evk.c4
-rw-r--r--hw/bsp/ngx4330/ngx4330.c8
-rw-r--r--hw/bsp/teensy_40/teensy40.c4
-rw-r--r--src/tusb_option.h50
9 files changed, 66 insertions, 49 deletions
diff --git a/examples/device/cdc_msc/src/tusb_config.h b/examples/device/cdc_msc/src/tusb_config.h
index 09e98b247..9beb9f6a2 100644
--- a/examples/device/cdc_msc/src/tusb_config.h
+++ b/examples/device/cdc_msc/src/tusb_config.h
@@ -34,19 +34,30 @@
// COMMON CONFIGURATION
//--------------------------------------------------------------------
-// defined by compiler flags for flexibility
+// defined by board.mk
#ifndef CFG_TUSB_MCU
#error CFG_TUSB_MCU must be defined
#endif
-#if CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \
- CFG_TUSB_MCU == OPT_MCU_NUC505 || CFG_TUSB_MCU == OPT_MCU_CXD56
- #define CFG_TUSB_RHPORT0_MODE (OPT_MODE_DEVICE | OPT_MODE_HIGH_SPEED)
-#else
- #define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE
+// RHPort number used for device can be defined by board.mk, default to port 0
+#ifndef BOARD_DEVICE_RHPORT_NUM
+ #define BOARD_DEVICE_RHPORT_NUM 0
#endif
-#define CFG_TUSB_OS OPT_OS_NONE
+// RHPort max operational speed can defined by board.mk
+// Default to Highspeed for MCU with internal HighSpeed PHY (can be port specific), otherwise FullSpeed
+#ifndef BOARD_DEVICE_RHPORT_SPEED
+ #if (CFG_TUSB_MCU == OPT_MCU_LPC18XX || CFG_TUSB_MCU == OPT_MCU_LPC43XX || CFG_TUSB_MCU == OPT_MCU_MIMXRT10XX || \
+ CFG_TUSB_MCU == OPT_MCU_NUC505 || CFG_TUSB_MCU == OPT_MCU_CXD56)
+ #define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_HIGH_SPEED
+ #else
+ #define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_FULL_SPEED
+ #endif
+#endif
+
+// Device mode with rhport and speed defined by board.mk
+#define CFG_TUSB_RHPORT0_MODE ((OPT_MODE_DEVICE | BOARD_DEVICE_RHPORT_SPEED) << (8*BOARD_DEVICE_RHPORT_NUM))
+#define CFG_TUSB_OS OPT_OS_NONE
// CFG_TUSB_DEBUG is defined by compiler in DEBUG build
// #define CFG_TUSB_DEBUG 0
diff --git a/hw/bsp/ea4357/ea4357.c b/hw/bsp/ea4357/ea4357.c
index b7e7f7a5c..04c4e60a6 100644
--- a/hw/bsp/ea4357/ea4357.c
+++ b/hw/bsp/ea4357/ea4357.c
@@ -149,7 +149,7 @@ void board_init(void)
* status feedback from the distribution switch. GPIO54 is used for VBUS sensing. 15Kohm pull-down
* resistors are always active
*/
-#if CFG_TUSB_RHPORT0_MODE
+#if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE | OPT_MODE_HOST)
Chip_USB0_Init();
// // Reset controller
@@ -185,7 +185,7 @@ void board_init(void)
* of VBUS can be read via U31.
* JP16 shall not be inserted.
*/
-#if CFG_TUSB_RHPORT1_MODE
+#if CFG_TUSB_RHPORT0_MODE & ((OPT_MODE_DEVICE | OPT_MODE_HOST) << 8)
Chip_USB1_Init();
// // Reset controller
@@ -232,11 +232,11 @@ void USB0_IRQHandler(void)
void USB1_IRQHandler(void)
{
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST
+ #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_HOST << 8)
tuh_isr(1);
#endif
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
+ #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)
tud_int_handler(1);
#endif
}
diff --git a/hw/bsp/mcb1800/mcb1800.c b/hw/bsp/mcb1800/mcb1800.c
index ae9f1b62f..6387f983e 100644
--- a/hw/bsp/mcb1800/mcb1800.c
+++ b/hw/bsp/mcb1800/mcb1800.c
@@ -43,11 +43,11 @@ void USB0_IRQHandler(void)
void USB1_IRQHandler(void)
{
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST
+ #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_HOST << 8)
tuh_isr(1);
#endif
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
+ #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)
tud_int_handler(1);
#endif
}
@@ -163,7 +163,7 @@ void board_init(void)
};
// USB0
-#if CFG_TUSB_RHPORT0_MODE
+#if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE | OPT_MODE_HOST)
Chip_USB0_Init();
// // Reset controller
@@ -180,7 +180,7 @@ void board_init(void)
#endif
// USB1
-#if CFG_TUSB_RHPORT1_MODE
+#if CFG_TUSB_RHPORT0_MODE & ((OPT_MODE_DEVICE | OPT_MODE_HOST) << 8)
Chip_USB1_Init();
// // Reset controller
diff --git a/hw/bsp/mimxrt1050_evkb/mimxrt1050_evkb.c b/hw/bsp/mimxrt1050_evkb/mimxrt1050_evkb.c
index be0ae3ea8..8dae7a0c2 100644
--- a/hw/bsp/mimxrt1050_evkb/mimxrt1050_evkb.c
+++ b/hw/bsp/mimxrt1050_evkb/mimxrt1050_evkb.c
@@ -134,11 +134,11 @@ void USB_OTG1_IRQHandler(void)
void USB_OTG2_IRQHandler(void)
{
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST
+ #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_HOST << 8)
tuh_isr(1);
#endif
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
+ #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)
tud_int_handler(1);
#endif
}
diff --git a/hw/bsp/mimxrt1060_evk/mimxrt1060_evk.c b/hw/bsp/mimxrt1060_evk/mimxrt1060_evk.c
index be0ae3ea8..8dae7a0c2 100644
--- a/hw/bsp/mimxrt1060_evk/mimxrt1060_evk.c
+++ b/hw/bsp/mimxrt1060_evk/mimxrt1060_evk.c
@@ -134,11 +134,11 @@ void USB_OTG1_IRQHandler(void)
void USB_OTG2_IRQHandler(void)
{
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST
+ #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_HOST << 8)
tuh_isr(1);
#endif
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
+ #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)
tud_int_handler(1);
#endif
}
diff --git a/hw/bsp/mimxrt1064_evk/mimxrt1064_evk.c b/hw/bsp/mimxrt1064_evk/mimxrt1064_evk.c
index be0ae3ea8..8dae7a0c2 100644
--- a/hw/bsp/mimxrt1064_evk/mimxrt1064_evk.c
+++ b/hw/bsp/mimxrt1064_evk/mimxrt1064_evk.c
@@ -134,11 +134,11 @@ void USB_OTG1_IRQHandler(void)
void USB_OTG2_IRQHandler(void)
{
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST
+ #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_HOST << 8)
tuh_isr(1);
#endif
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
+ #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)
tud_int_handler(1);
#endif
}
diff --git a/hw/bsp/ngx4330/ngx4330.c b/hw/bsp/ngx4330/ngx4330.c
index 5296ddcb3..85d11d6ad 100644
--- a/hw/bsp/ngx4330/ngx4330.c
+++ b/hw/bsp/ngx4330/ngx4330.c
@@ -161,7 +161,7 @@ void board_init(void)
* status feedback from the distribution switch. GPIO54 is used for VBUS sensing. 15Kohm pull-down
* resistors are always active
*/
-#if CFG_TUSB_RHPORT0_MODE
+#if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE | OPT_MODE_HOST)
Chip_USB0_Init();
// // Reset controller
@@ -197,7 +197,7 @@ void board_init(void)
* of VBUS can be read via U31.
* JP16 shall not be inserted.
*/
-#if CFG_TUSB_RHPORT1_MODE
+#if CFG_TUSB_RHPORT0_MODE & ((OPT_MODE_DEVICE | OPT_MODE_HOST) << 8)
Chip_USB1_Init();
// // Reset controller
@@ -235,11 +235,11 @@ void USB0_IRQHandler(void)
void USB1_IRQHandler(void)
{
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST
+ #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_HOST << 8)
tuh_isr(1);
#endif
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
+ #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)
tud_int_handler(1);
#endif
}
diff --git a/hw/bsp/teensy_40/teensy40.c b/hw/bsp/teensy_40/teensy40.c
index f45a98ef3..0ca86f602 100644
--- a/hw/bsp/teensy_40/teensy40.c
+++ b/hw/bsp/teensy_40/teensy40.c
@@ -135,11 +135,11 @@ void USB_OTG1_IRQHandler(void)
void USB_OTG2_IRQHandler(void)
{
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST
+ #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_HOST << 8)
tuh_isr(1);
#endif
- #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
+ #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)
tud_int_handler(1);
#endif
}
diff --git a/src/tusb_option.h b/src/tusb_option.h
index 9e6a2b532..472656424 100644
--- a/src/tusb_option.h
+++ b/src/tusb_option.h
@@ -114,44 +114,50 @@
/** \addtogroup group_configuration
* @{ */
+
//--------------------------------------------------------------------
-// CONTROLLER
-// Only 1 roothub port can be configured to be device and/or host.
-// tinyusb does not support dual devices or dual host configuration
+// RootHub Mode Configuration
+//
+// Each byte of the CFG_TUSB_RHPORTx_MODE contains operation mode for
+// a roothub port (device or host). Therefore each macro can have up to
+// 4 ports.
//--------------------------------------------------------------------
-/** \defgroup group_mode Controller Mode Selection
- * \brief CFG_TUSB_CONTROLLER_N_MODE must be defined with these
- * @{ */
+
+// Lower 4-bit is operational mode
#define OPT_MODE_NONE 0x00 ///< Disabled
#define OPT_MODE_DEVICE 0x01 ///< Device Mode
#define OPT_MODE_HOST 0x02 ///< Host Mode
-#define OPT_MODE_HIGH_SPEED 0x10 ///< High speed
-/** @} */
+
+// Higher 4-bit is max operational speed (corresponding to tusb_speed_t)
+#define OPT_MODE_FULL_SPEED 0x00 ///< Max Full Speed
+#define OPT_MODE_LOW_SPEED 0x10 ///< Max Low Speed
+#define OPT_MODE_HIGH_SPEED 0x20 ///< Max High Speed
+
#ifndef CFG_TUSB_RHPORT0_MODE
#define CFG_TUSB_RHPORT0_MODE OPT_MODE_NONE
#endif
-#ifndef CFG_TUSB_RHPORT1_MODE
- #define CFG_TUSB_RHPORT1_MODE OPT_MODE_NONE
-#endif
+//#ifndef CFG_TUSB_RHPORT1_MODE
+// #define CFG_TUSB_RHPORT1_MODE OPT_MODE_NONE
+//#endif
-#if ((CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST) && (CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST)) || \
- ((CFG_TUSB_RHPORT0_MODE & OPT_MODE_DEVICE) && (CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE))
- #error "tinyusb does not support same modes on more than 1 roothub port"
+#if ((CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST ) && (CFG_TUSB_RHPORT0_MODE & (OPT_MODE_HOST << 8)) ) || \
+ ((CFG_TUSB_RHPORT0_MODE & OPT_MODE_DEVICE) && (CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)) )
+ #error "TinyUSB currently does not support same modes on more than 1 roothub port"
#endif
// Which roothub port is configured as host
-#define TUH_OPT_RHPORT ( (CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST) ? 0 : ((CFG_TUSB_RHPORT1_MODE & OPT_MODE_HOST) ? 1 : -1) )
+#define TUH_OPT_RHPORT ( (CFG_TUSB_RHPORT0_MODE & OPT_MODE_HOST) ? 0 : ((CFG_TUSB_RHPORT0_MODE & (OPT_MODE_HOST << 8)) ? 1 : -1) )
#define TUSB_OPT_HOST_ENABLED ( TUH_OPT_RHPORT >= 0 )
// Which roothub port is configured as device
-#define TUD_OPT_RHPORT ( (CFG_TUSB_RHPORT0_MODE & OPT_MODE_DEVICE) ? 0 : ((CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE) ? 1 : -1) )
+#define TUD_OPT_RHPORT ( (CFG_TUSB_RHPORT0_MODE & OPT_MODE_DEVICE) ? 0 : ((CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)) ? 1 : -1) )
#if TUD_OPT_RHPORT == 0
-#define TUD_OPT_HIGH_SPEED ( CFG_TUSB_RHPORT0_MODE & OPT_MODE_HIGH_SPEED )
+ #define TUD_OPT_HIGH_SPEED ( CFG_TUSB_RHPORT0_MODE & OPT_MODE_HIGH_SPEED )
#else
-#define TUD_OPT_HIGH_SPEED ( CFG_TUSB_RHPORT1_MODE & OPT_MODE_HIGH_SPEED )
+ #define TUD_OPT_HIGH_SPEED ( CFG_TUSB_RHPORT0_MODE & (OPT_MODE_HIGH_SPEED << 8) )
#endif
#define TUSB_OPT_DEVICE_ENABLED ( TUD_OPT_RHPORT >= 0 )
@@ -168,15 +174,15 @@
// place data in accessible RAM for usb controller
#ifndef CFG_TUSB_MEM_SECTION
-#define CFG_TUSB_MEM_SECTION
+ #define CFG_TUSB_MEM_SECTION
#endif
#ifndef CFG_TUSB_MEM_ALIGN
-#define CFG_TUSB_MEM_ALIGN TU_ATTR_ALIGNED(4)
+ #define CFG_TUSB_MEM_ALIGN TU_ATTR_ALIGNED(4)
#endif
#ifndef CFG_TUSB_OS
-#define CFG_TUSB_OS OPT_OS_NONE
+ #define CFG_TUSB_OS OPT_OS_NONE
#endif
//--------------------------------------------------------------------
@@ -184,7 +190,7 @@
//--------------------------------------------------------------------
#ifndef CFG_TUD_ENDPOINT0_SIZE
- #define CFG_TUD_ENDPOINT0_SIZE 64
+ #define CFG_TUD_ENDPOINT0_SIZE 64
#endif
#ifndef CFG_TUD_CDC