summaryrefslogtreecommitdiff
path: root/src/tusb_option.h
diff options
context:
space:
mode:
authorhathach <[email protected]>2022-02-25 13:00:05 +0700
committerhathach <[email protected]>2022-02-25 18:35:21 +0700
commita8af609dfef0f82ce22e6f0bf48146b4b2433633 (patch)
tree41e17ddb03ffa8574f34071ce6a74c76568b8260 /src/tusb_option.h
parent31aa077cb0b345464548b9cb2e2913227348a969 (diff)
auto detect max rhport speed based on mcu
Diffstat (limited to 'src/tusb_option.h')
-rw-r--r--src/tusb_option.h47
1 files changed, 29 insertions, 18 deletions
diff --git a/src/tusb_option.h b/src/tusb_option.h
index 714c6ed9e..5d104e31c 100644
--- a/src/tusb_option.h
+++ b/src/tusb_option.h
@@ -172,20 +172,24 @@
#include "tusb_config.h"
#endif
+#include "device/dcd_attr.h"
+
//--------------------------------------------------------------------
// RootHub Mode Configuration
// CFG_TUSB_RHPORTx_MODE contains operation mode and speed for that port
//--------------------------------------------------------------------
-// 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
+// Low byte is operational mode
+#define OPT_MODE_NONE 0x0000 ///< Disabled
+#define OPT_MODE_DEVICE 0x0001 ///< Device Mode
+#define OPT_MODE_HOST 0x0002 ///< Host Mode
-// 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
+// High byte is max operational speed (corresponding to tusb_speed_t)
+#define OPT_MODE_DEFAULT_SPEED 0x0000 ///< Default (max) speed supported by MCU
+#define OPT_MODE_LOW_SPEED 0x0100 ///< Low Speed
+#define OPT_MODE_FULL_SPEED 0x0200 ///< Full Speed
+#define OPT_MODE_HIGH_SPEED 0x0400 ///< High Speed
+#define OPT_MODE_SPEED_MASK 0xff00
#ifndef CFG_TUSB_RHPORT0_MODE
#define CFG_TUSB_RHPORT0_MODE OPT_MODE_NONE
@@ -200,20 +204,27 @@
#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 CFG_TUH_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) )
+//------------- Roothub as Device -------------//
-#if TUD_OPT_RHPORT == 0
-#define TUD_OPT_HIGH_SPEED ( (CFG_TUSB_RHPORT0_MODE) & OPT_MODE_HIGH_SPEED )
+#if (CFG_TUSB_RHPORT0_MODE) & OPT_MODE_DEVICE
+ #define TUD_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE)
+ #define TUD_OPT_RHPORT 0
+#elif (CFG_TUSB_RHPORT1_MODE) & OPT_MODE_DEVICE
+ #define TUD_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE)
+ #define TUD_OPT_RHPORT 1
#else
-#define TUD_OPT_HIGH_SPEED ( (CFG_TUSB_RHPORT1_MODE) & OPT_MODE_HIGH_SPEED )
+ #define TUD_RHPORT_MODE OPT_MODE_NONE
+ #define TUD_OPT_RHPORT -1
#endif
-#define CFG_TUD_ENABLED ( TUD_OPT_RHPORT >= 0 )
+#define CFG_TUD_ENABLED ( TUD_RHPORT_MODE & OPT_MODE_DEVICE )
+#define TUD_OPT_HIGH_SPEED ( (TUD_RHPORT_MODE & OPT_MODE_SPEED_MASK) ? (TUD_RHPORT_MODE & OPT_MODE_HIGH_SPEED) : (DCD_ATTR_RHPORT_HIGHSPEED & (1 << TUD_OPT_RHPORT)) )
+
+// CFG_TUD_SPEED OPT_MODE_HIGH_SPEED
+
+//------------- Roothub as Host -------------//
+#define TUH_OPT_RHPORT ( ((CFG_TUSB_RHPORT0_MODE) & OPT_MODE_HOST) ? 0 : (((CFG_TUSB_RHPORT1_MODE) & OPT_MODE_HOST) ? 1 : -1) )
+#define CFG_TUH_ENABLED ( TUH_OPT_RHPORT >= 0 )
// For backward compatible
#define TUSB_OPT_DEVICE_ENABLED CFG_TUD_ENABLED