فهرست منبع

merge CFG_TUSB_RHPORT1_MODE into CFG_TUSB_RHPORT0_MODE

each port is 1 byte for easy maintenance
hathach 5 سال پیش
والد
کامیت
fad088719e

+ 18 - 7
examples/device/cdc_msc/src/tusb_config.h

@@ -34,19 +34,30 @@
 // COMMON CONFIGURATION
 // COMMON CONFIGURATION
 //--------------------------------------------------------------------
 //--------------------------------------------------------------------
 
 
-// defined by compiler flags for flexibility
+// defined by board.mk
 #ifndef CFG_TUSB_MCU
 #ifndef CFG_TUSB_MCU
   #error CFG_TUSB_MCU must be defined
   #error CFG_TUSB_MCU must be defined
 #endif
 #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
 #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
 // CFG_TUSB_DEBUG is defined by compiler in DEBUG build
 // #define CFG_TUSB_DEBUG           0
 // #define CFG_TUSB_DEBUG           0

+ 4 - 4
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
    * status feedback from the distribution switch. GPIO54 is used for VBUS sensing. 15Kohm pull-down
    * resistors are always active
    * resistors are always active
    */
    */
-#if CFG_TUSB_RHPORT0_MODE
+#if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE | OPT_MODE_HOST)
   Chip_USB0_Init();
   Chip_USB0_Init();
 
 
 //  // Reset controller
 //  // Reset controller
@@ -185,7 +185,7 @@ void board_init(void)
    * of VBUS can be read via U31.
    * of VBUS can be read via U31.
    * JP16 shall not be inserted.
    * 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();
   Chip_USB1_Init();
 
 
 //  // Reset controller
 //  // Reset controller
@@ -232,11 +232,11 @@ void USB0_IRQHandler(void)
 
 
 void USB1_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);
     tuh_isr(1);
   #endif
   #endif
 
 
-  #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
+  #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)
     tud_int_handler(1);
     tud_int_handler(1);
   #endif
   #endif
 }
 }

+ 4 - 4
hw/bsp/mcb1800/mcb1800.c

@@ -43,11 +43,11 @@ void USB0_IRQHandler(void)
 
 
 void USB1_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);
     tuh_isr(1);
   #endif
   #endif
 
 
-  #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
+  #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)
     tud_int_handler(1);
     tud_int_handler(1);
   #endif
   #endif
 }
 }
@@ -163,7 +163,7 @@ void board_init(void)
   };
   };
 
 
   // USB0
   // USB0
-#if CFG_TUSB_RHPORT0_MODE
+#if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE | OPT_MODE_HOST)
   Chip_USB0_Init();
   Chip_USB0_Init();
 
 
 //  // Reset controller
 //  // Reset controller
@@ -180,7 +180,7 @@ void board_init(void)
 #endif
 #endif
 
 
   // USB1
   // USB1
-#if CFG_TUSB_RHPORT1_MODE
+#if CFG_TUSB_RHPORT0_MODE & ((OPT_MODE_DEVICE | OPT_MODE_HOST) << 8)
   Chip_USB1_Init();
   Chip_USB1_Init();
 
 
 //  // Reset controller
 //  // Reset controller

+ 2 - 2
hw/bsp/mimxrt1050_evkb/mimxrt1050_evkb.c

@@ -134,11 +134,11 @@ void USB_OTG1_IRQHandler(void)
 
 
 void USB_OTG2_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);
     tuh_isr(1);
   #endif
   #endif
 
 
-  #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
+  #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)
     tud_int_handler(1);
     tud_int_handler(1);
   #endif
   #endif
 }
 }

+ 2 - 2
hw/bsp/mimxrt1060_evk/mimxrt1060_evk.c

@@ -134,11 +134,11 @@ void USB_OTG1_IRQHandler(void)
 
 
 void USB_OTG2_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);
     tuh_isr(1);
   #endif
   #endif
 
 
-  #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
+  #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)
     tud_int_handler(1);
     tud_int_handler(1);
   #endif
   #endif
 }
 }

+ 2 - 2
hw/bsp/mimxrt1064_evk/mimxrt1064_evk.c

@@ -134,11 +134,11 @@ void USB_OTG1_IRQHandler(void)
 
 
 void USB_OTG2_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);
     tuh_isr(1);
   #endif
   #endif
 
 
-  #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
+  #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)
     tud_int_handler(1);
     tud_int_handler(1);
   #endif
   #endif
 }
 }

+ 4 - 4
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
    * status feedback from the distribution switch. GPIO54 is used for VBUS sensing. 15Kohm pull-down
    * resistors are always active
    * resistors are always active
    */
    */
-#if CFG_TUSB_RHPORT0_MODE
+#if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE | OPT_MODE_HOST)
   Chip_USB0_Init();
   Chip_USB0_Init();
 
 
 //  // Reset controller
 //  // Reset controller
@@ -197,7 +197,7 @@ void board_init(void)
    * of VBUS can be read via U31.
    * of VBUS can be read via U31.
    * JP16 shall not be inserted.
    * 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();
   Chip_USB1_Init();
 
 
 //  // Reset controller
 //  // Reset controller
@@ -235,11 +235,11 @@ void USB0_IRQHandler(void)
 
 
 void USB1_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);
     tuh_isr(1);
   #endif
   #endif
 
 
-  #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
+  #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)
     tud_int_handler(1);
     tud_int_handler(1);
   #endif
   #endif
 }
 }

+ 2 - 2
hw/bsp/teensy_40/teensy40.c

@@ -135,11 +135,11 @@ void USB_OTG1_IRQHandler(void)
 
 
 void USB_OTG2_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);
     tuh_isr(1);
   #endif
   #endif
 
 
-  #if CFG_TUSB_RHPORT1_MODE & OPT_MODE_DEVICE
+  #if CFG_TUSB_RHPORT0_MODE & (OPT_MODE_DEVICE << 8)
     tud_int_handler(1);
     tud_int_handler(1);
   #endif
   #endif
 }
 }

+ 28 - 22
src/tusb_option.h

@@ -114,44 +114,50 @@
 /** \addtogroup group_configuration
 /** \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_NONE         0x00 ///< Disabled
 #define OPT_MODE_DEVICE       0x01 ///< Device Mode
 #define OPT_MODE_DEVICE       0x01 ///< Device Mode
 #define OPT_MODE_HOST         0x02 ///< Host 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
 #ifndef CFG_TUSB_RHPORT0_MODE
   #define CFG_TUSB_RHPORT0_MODE OPT_MODE_NONE
   #define CFG_TUSB_RHPORT0_MODE OPT_MODE_NONE
 #endif
 #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
 #endif
 
 
 // Which roothub port is configured as host
 // 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 )
 #define TUSB_OPT_HOST_ENABLED   ( TUH_OPT_RHPORT >= 0 )
 
 
 // Which roothub port is configured as device
 // 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
 #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
 #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
 #endif
 
 
 #define TUSB_OPT_DEVICE_ENABLED ( TUD_OPT_RHPORT >= 0 )
 #define TUSB_OPT_DEVICE_ENABLED ( TUD_OPT_RHPORT >= 0 )
@@ -168,15 +174,15 @@
 
 
 // place data in accessible RAM for usb controller
 // place data in accessible RAM for usb controller
 #ifndef CFG_TUSB_MEM_SECTION
 #ifndef CFG_TUSB_MEM_SECTION
-#define CFG_TUSB_MEM_SECTION
+  #define CFG_TUSB_MEM_SECTION
 #endif
 #endif
 
 
 #ifndef CFG_TUSB_MEM_ALIGN
 #ifndef CFG_TUSB_MEM_ALIGN
-#define CFG_TUSB_MEM_ALIGN        TU_ATTR_ALIGNED(4)
+  #define CFG_TUSB_MEM_ALIGN      TU_ATTR_ALIGNED(4)
 #endif
 #endif
 
 
 #ifndef CFG_TUSB_OS
 #ifndef CFG_TUSB_OS
-#define CFG_TUSB_OS               OPT_OS_NONE
+  #define CFG_TUSB_OS             OPT_OS_NONE
 #endif
 #endif
 
 
 //--------------------------------------------------------------------
 //--------------------------------------------------------------------
@@ -184,7 +190,7 @@
 //--------------------------------------------------------------------
 //--------------------------------------------------------------------
 
 
 #ifndef CFG_TUD_ENDPOINT0_SIZE
 #ifndef CFG_TUD_ENDPOINT0_SIZE
-  #define CFG_TUD_ENDPOINT0_SIZE   64
+  #define CFG_TUD_ENDPOINT0_SIZE  64
 #endif
 #endif
 
 
 #ifndef CFG_TUD_CDC
 #ifndef CFG_TUD_CDC