summaryrefslogtreecommitdiff
path: root/src/tusb_option.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/tusb_option.h')
-rw-r--r--src/tusb_option.h439
1 files changed, 340 insertions, 99 deletions
diff --git a/src/tusb_option.h b/src/tusb_option.h
index cdaf074db..8d5527936 100644
--- a/src/tusb_option.h
+++ b/src/tusb_option.h
@@ -27,14 +27,22 @@
#ifndef _TUSB_OPTION_H_
#define _TUSB_OPTION_H_
+#include "common/tusb_compiler.h"
+
+// Version is release as major.minor.revision eg 1.0.0. though there could be notable APIs before a new release.
+// For notable API changes within a release, we increase the build number.
#define TUSB_VERSION_MAJOR 0
-#define TUSB_VERSION_MINOR 10
-#define TUSB_VERSION_REVISION 1
+#define TUSB_VERSION_MINOR 16
+#define TUSB_VERSION_REVISION 0
+#define TUSB_VERSION_BUILD 3
+
+#define TUSB_VERSION_NUMBER (TUSB_VERSION_MAJOR << 24 | TUSB_VERSION_MINOR << 16 | TUSB_VERSION_REVISION << 8 | TUSB_VERSION_BUILD)
#define TUSB_VERSION_STRING TU_STRING(TUSB_VERSION_MAJOR) "." TU_STRING(TUSB_VERSION_MINOR) "." TU_STRING(TUSB_VERSION_REVISION)
-/** \defgroup group_mcu Supported MCU
- * \ref CFG_TUSB_MCU must be defined to one of these
- * @{ */
+//--------------------------------------------------------------------+
+// Supported MCUs
+// CFG_TUSB_MCU must be defined to one of following value
+//--------------------------------------------------------------------+
#define OPT_MCU_NONE 0
@@ -47,9 +55,13 @@
#define OPT_MCU_LPC18XX 6 ///< NXP LPC18xx
#define OPT_MCU_LPC40XX 7 ///< NXP LPC40xx
#define OPT_MCU_LPC43XX 8 ///< NXP LPC43xx
-#define OPT_MCU_LPC51UXX 9 ///< NXP LPC51U6x
-#define OPT_MCU_LPC54XXX 10 ///< NXP LPC54xxx
-#define OPT_MCU_LPC55XX 11 ///< NXP LPC55xx
+#define OPT_MCU_LPC51 9 ///< NXP LPC51
+#define OPT_MCU_LPC51UXX OPT_MCU_LPC51 ///< NXP LPC51
+#define OPT_MCU_LPC54 10 ///< NXP LPC54
+#define OPT_MCU_LPC55 11 ///< NXP LPC55
+// legacy naming
+#define OPT_MCU_LPC54XXX OPT_MCU_LPC54
+#define OPT_MCU_LPC55XX OPT_MCU_LPC55
// NRF
#define OPT_MCU_NRF5X 100 ///< Nordic nRF5x series
@@ -61,30 +73,43 @@
#define OPT_MCU_SAME5X 203 ///< MicroChip SAM E5x
#define OPT_MCU_SAMD11 204 ///< MicroChip SAMD11
#define OPT_MCU_SAML22 205 ///< MicroChip SAML22
+#define OPT_MCU_SAML21 206 ///< MicroChip SAML21
+#define OPT_MCU_SAMX7X 207 ///< MicroChip SAME70, S70, V70, V71 family
// STM32
-#define OPT_MCU_STM32F0 300 ///< ST STM32F0
-#define OPT_MCU_STM32F1 301 ///< ST STM32F1
-#define OPT_MCU_STM32F2 302 ///< ST STM32F2
-#define OPT_MCU_STM32F3 303 ///< ST STM32F3
-#define OPT_MCU_STM32F4 304 ///< ST STM32F4
-#define OPT_MCU_STM32F7 305 ///< ST STM32F7
-#define OPT_MCU_STM32H7 306 ///< ST STM32H7
-#define OPT_MCU_STM32L0 307 ///< ST STM32L0
-#define OPT_MCU_STM32L1 308 ///< ST STM32L1
-#define OPT_MCU_STM32L4 309 ///< ST STM32L4
+#define OPT_MCU_STM32F0 300 ///< ST F0
+#define OPT_MCU_STM32F1 301 ///< ST F1
+#define OPT_MCU_STM32F2 302 ///< ST F2
+#define OPT_MCU_STM32F3 303 ///< ST F3
+#define OPT_MCU_STM32F4 304 ///< ST F4
+#define OPT_MCU_STM32F7 305 ///< ST F7
+#define OPT_MCU_STM32H7 306 ///< ST H7
+#define OPT_MCU_STM32L1 308 ///< ST L1
+#define OPT_MCU_STM32L0 307 ///< ST L0
+#define OPT_MCU_STM32L4 309 ///< ST L4
+#define OPT_MCU_STM32G0 310 ///< ST G0
+#define OPT_MCU_STM32G4 311 ///< ST G4
+#define OPT_MCU_STM32WB 312 ///< ST WB
+#define OPT_MCU_STM32U5 313 ///< ST U5
+#define OPT_MCU_STM32L5 314 ///< ST L5
+#define OPT_MCU_STM32H5 315 ///< ST H5
// Sony
#define OPT_MCU_CXD56 400 ///< SONY CXD56
-// TI MSP430
+// TI
#define OPT_MCU_MSP430x5xx 500 ///< TI MSP430x5xx
+#define OPT_MCU_MSP432E4 510 ///< TI MSP432E4xx
+#define OPT_MCU_TM4C123 511 ///< TI Tiva-C 123x
+#define OPT_MCU_TM4C129 512 ///< TI Tiva-C 129x
// ValentyUSB eptri
#define OPT_MCU_VALENTYUSB_EPTRI 600 ///< Fomu eptri config
// NXP iMX RT
-#define OPT_MCU_MIMXRT10XX 700 ///< NXP iMX RT10xx
+#define OPT_MCU_MIMXRT1XXX 700 ///< NXP iMX RT1xxx Series
+#define OPT_MCU_MIMXRT10XX OPT_MCU_MIMXRT1XXX ///< RT10xx
+#define OPT_MCU_MIMXRT11XX OPT_MCU_MIMXRT1XXX ///< RT11xx
// Nuvoton
#define OPT_MCU_NUC121 800
@@ -95,6 +120,10 @@
// Espressif
#define OPT_MCU_ESP32S2 900 ///< Espressif ESP32-S2
#define OPT_MCU_ESP32S3 901 ///< Espressif ESP32-S3
+#define OPT_MCU_ESP32 902 ///< Espressif ESP32 (for host max3421e)
+#define OPT_MCU_ESP32C3 903 ///< Espressif ESP32-C3
+#define OPT_MCU_ESP32C6 904 ///< Espressif ESP32-C6
+#define TUP_MCU_ESPRESSIF (CFG_TUSB_MCU >= 900 && CFG_TUSB_MCU < 1000) // check if Espressif MCU
// Dialog
#define OPT_MCU_DA1469X 1000 ///< Dialog Semiconductor DA1469x
@@ -103,28 +132,77 @@
#define OPT_MCU_RP2040 1100 ///< Raspberry Pi RP2040
// NXP Kinetis
-#define OPT_MCU_MKL25ZXX 1200 ///< NXP MKL25Zxx
+#define OPT_MCU_KINETIS_KL 1200 ///< NXP KL series
+#define OPT_MCU_KINETIS_K32L 1201 ///< NXP K32L series
+#define OPT_MCU_KINETIS_K32 1201 ///< Alias to K32L
+#define OPT_MCU_KINETIS_K 1202 ///< NXP K series
+
+#define OPT_MCU_MKL25ZXX 1200 ///< Alias to KL (obsolete)
+#define OPT_MCU_K32L2BXX 1201 ///< Alias to K32 (obsolete)
// Silabs
#define OPT_MCU_EFM32GG 1300 ///< Silabs EFM32GG
-#define OPT_MCU_EFM32GG11 1301 ///< Silabs EFM32GG11
-#define OPT_MCU_EFM32GG12 1302 ///< Silabs EFM32GG12
// Renesas RX
#define OPT_MCU_RX63X 1400 ///< Renesas RX63N/631
+#define OPT_MCU_RX65X 1401 ///< Renesas RX65N/RX651
+#define OPT_MCU_RX72N 1402 ///< Renesas RX72N
+#define OPT_MCU_RAXXX 1403 ///< Renesas RAxxx families
+
+// Mind Motion
+#define OPT_MCU_MM32F327X 1500 ///< Mind Motion MM32F327
+
+// GigaDevice
+#define OPT_MCU_GD32VF103 1600 ///< GigaDevice GD32VF103
+
+// Broadcom
+#define OPT_MCU_BCM2711 1700 ///< Broadcom BCM2711
+#define OPT_MCU_BCM2835 1701 ///< Broadcom BCM2835
+#define OPT_MCU_BCM2837 1702 ///< Broadcom BCM2837
+
+// Infineon
+#define OPT_MCU_XMC4000 1800 ///< Infineon XMC4000
+
+// PIC
+#define OPT_MCU_PIC32MZ 1900 ///< MicroChip PIC32MZ family
+#define OPT_MCU_PIC32MM 1901 ///< MicroChip PIC32MM family
+#define OPT_MCU_PIC32MX 1902 ///< MicroChip PIC32MX family
+#define OPT_MCU_PIC32MK 1903 ///< MicroChip PIC32MK family
+#define OPT_MCU_PIC24 1910 ///< MicroChip PIC24 family
+#define OPT_MCU_DSPIC33 1911 ///< MicroChip DSPIC33 family
+
+// BridgeTek
+#define OPT_MCU_FT90X 2000 ///< BridgeTek FT90x
+#define OPT_MCU_FT93X 2001 ///< BridgeTek FT93x
+
+// Allwinner
+#define OPT_MCU_F1C100S 2100 ///< Allwinner F1C100s family
+
+// WCH
+#define OPT_MCU_CH32V307 2200 ///< WCH CH32V307
+#define OPT_MCU_CH32F20X 2210 ///< WCH CH32F20x
-/** @} */
-/** \defgroup group_supported_os Supported RTOS
- * \ref CFG_TUSB_OS must be defined to one of these
- * @{ */
+// NXP LPC MCX
+#define OPT_MCU_MCXN9 2300 ///< NXP MCX N9 Series
+#define OPT_MCU_MCXA15 2301 ///< NXP MCX A15 Series
+
+// Check if configured MCU is one of listed
+// Apply _TU_CHECK_MCU with || as separator to list of input
+#define _TU_CHECK_MCU(_m) (CFG_TUSB_MCU == _m)
+#define TU_CHECK_MCU(...) (TU_ARGS_APPLY(_TU_CHECK_MCU, ||, __VA_ARGS__))
+
+//--------------------------------------------------------------------+
+// Supported OS
+//--------------------------------------------------------------------+
+
#define OPT_OS_NONE 1 ///< No RTOS
#define OPT_OS_FREERTOS 2 ///< FreeRTOS
#define OPT_OS_MYNEWT 3 ///< Mynewt OS
#define OPT_OS_CUSTOM 4 ///< Custom OS is implemented by application
#define OPT_OS_PICO 5 ///< Raspberry Pi Pico SDK
#define OPT_OS_RTTHREAD 6 ///< RT-Thread
-/** @} */
+#define OPT_OS_RTX4 7 ///< Keil RTX 4
// Allow to use command line to change the config name/location
#ifdef CFG_TUSB_CONFIG_FILE
@@ -133,57 +211,99 @@
#include "tusb_config.h"
#endif
-/** \addtogroup group_configuration
- * @{ */
-
+#include "common/tusb_mcu.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
+//------------- Roothub as Device -------------//
-#ifndef CFG_TUSB_RHPORT0_MODE
- #define CFG_TUSB_RHPORT0_MODE OPT_MODE_NONE
+#if defined(CFG_TUSB_RHPORT0_MODE) && ((CFG_TUSB_RHPORT0_MODE) & OPT_MODE_DEVICE)
+ #define TUD_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE)
+ #define TUD_OPT_RHPORT 0
+#elif defined(CFG_TUSB_RHPORT1_MODE) && ((CFG_TUSB_RHPORT1_MODE) & OPT_MODE_DEVICE)
+ #define TUD_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE)
+ #define TUD_OPT_RHPORT 1
+#else
+ #define TUD_RHPORT_MODE OPT_MODE_NONE
+#endif
+
+#ifndef CFG_TUD_ENABLED
+ // fallback to use CFG_TUSB_RHPORTx_MODE
+ #define CFG_TUD_ENABLED (TUD_RHPORT_MODE & OPT_MODE_DEVICE)
#endif
+#ifndef CFG_TUD_MAX_SPEED
+ // fallback to use CFG_TUSB_RHPORTx_MODE
+ #define CFG_TUD_MAX_SPEED (TUD_RHPORT_MODE & OPT_MODE_SPEED_MASK)
+#endif
+
+// For backward compatible
+#define TUSB_OPT_DEVICE_ENABLED CFG_TUD_ENABLED
+
+// highspeed support indicator
+#define TUD_OPT_HIGH_SPEED (CFG_TUD_MAX_SPEED ? (CFG_TUD_MAX_SPEED & OPT_MODE_HIGH_SPEED) : TUP_RHPORT_HIGHSPEED)
+
+//------------- Roothub as Host -------------//
-#ifndef CFG_TUSB_RHPORT1_MODE
- #define CFG_TUSB_RHPORT1_MODE OPT_MODE_NONE
+#if defined(CFG_TUSB_RHPORT0_MODE) && ((CFG_TUSB_RHPORT0_MODE) & OPT_MODE_HOST)
+ #define TUH_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE)
+ #define TUH_OPT_RHPORT 0
+#elif defined(CFG_TUSB_RHPORT1_MODE) && ((CFG_TUSB_RHPORT1_MODE) & OPT_MODE_HOST)
+ #define TUH_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE)
+ #define TUH_OPT_RHPORT 1
+#else
+ #define TUH_RHPORT_MODE OPT_MODE_NONE
+#endif
+
+#ifndef CFG_TUH_ENABLED
+ // fallback to use CFG_TUSB_RHPORTx_MODE
+ #define CFG_TUH_ENABLED (TUH_RHPORT_MODE & OPT_MODE_HOST)
#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 currently does not support same modes on more than 1 roothub port"
+#ifndef CFG_TUH_MAX_SPEED
+ // fallback to use CFG_TUSB_RHPORTx_MODE
+ #define CFG_TUH_MAX_SPEED (TUH_RHPORT_MODE & OPT_MODE_SPEED_MASK)
#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 TUSB_OPT_HOST_ENABLED ( TUH_OPT_RHPORT >= 0 )
+// For backward compatible
+#define TUSB_OPT_HOST_ENABLED CFG_TUH_ENABLED
+
+// highspeed support indicator
+#define TUH_OPT_HIGH_SPEED (CFG_TUH_MAX_SPEED ? (CFG_TUH_MAX_SPEED & OPT_MODE_HIGH_SPEED) : TUP_RHPORT_HIGHSPEED)
-// 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) )
-#if TUD_OPT_RHPORT == 0
-#define TUD_OPT_HIGH_SPEED ( (CFG_TUSB_RHPORT0_MODE) & OPT_MODE_HIGH_SPEED )
+//--------------------------------------------------------------------+
+// TODO move later
+//--------------------------------------------------------------------+
+
+// TUP_MCU_STRICT_ALIGN will overwrite TUP_ARCH_STRICT_ALIGN.
+// In case TUP_MCU_STRICT_ALIGN = 1 and TUP_ARCH_STRICT_ALIGN =0, we will not reply on compiler
+// to generate unaligned access code.
+// LPC_IP3511 Highspeed cannot access unaligned memory on USB_RAM
+#if TUD_OPT_HIGH_SPEED && TU_CHECK_MCU(OPT_MCU_LPC54XXX, OPT_MCU_LPC55XX)
+ #define TUP_MCU_STRICT_ALIGN 1
#else
-#define TUD_OPT_HIGH_SPEED ( (CFG_TUSB_RHPORT1_MODE) & OPT_MODE_HIGH_SPEED )
+ #define TUP_MCU_STRICT_ALIGN 0
#endif
-#define TUSB_OPT_DEVICE_ENABLED ( TUD_OPT_RHPORT >= 0 )
//--------------------------------------------------------------------+
-// COMMON OPTIONS
+// Common Options (Default)
//--------------------------------------------------------------------+
// Debug enable to print out error message
@@ -191,27 +311,68 @@
#define CFG_TUSB_DEBUG 0
#endif
-// place data in accessible RAM for usb controller
+// Level where CFG_TUSB_DEBUG must be at least for USBH is logged
+#ifndef CFG_TUH_LOG_LEVEL
+ #define CFG_TUH_LOG_LEVEL 2
+#endif
+
+// Level where CFG_TUSB_DEBUG must be at least for USBD is logged
+#ifndef CFG_TUD_LOG_LEVEL
+ #define CFG_TUD_LOG_LEVEL 2
+#endif
+
+// Memory section for placing buffer used for usb transferring. If MEM_SECTION is different for
+// host and device use: CFG_TUD_MEM_SECTION, CFG_TUH_MEM_SECTION instead
#ifndef CFG_TUSB_MEM_SECTION
#define CFG_TUSB_MEM_SECTION
#endif
+// Alignment requirement of buffer used for usb transferring. if MEM_ALIGN is different for
+// host and device controller use: CFG_TUD_MEM_ALIGN, CFG_TUH_MEM_ALIGN instead
#ifndef CFG_TUSB_MEM_ALIGN
#define CFG_TUSB_MEM_ALIGN TU_ATTR_ALIGNED(4)
#endif
+// OS selection
#ifndef CFG_TUSB_OS
#define CFG_TUSB_OS OPT_OS_NONE
#endif
+#ifndef CFG_TUSB_OS_INC_PATH
+ #define CFG_TUSB_OS_INC_PATH
+#endif
+
//--------------------------------------------------------------------
-// DEVICE OPTIONS
+// Device Options (Default)
//--------------------------------------------------------------------
+// Attribute to place data in accessible RAM for device controller (default: CFG_TUSB_MEM_SECTION)
+#ifndef CFG_TUD_MEM_SECTION
+ #define CFG_TUD_MEM_SECTION CFG_TUSB_MEM_SECTION
+#endif
+
+// Attribute to align memory for device controller (default: CFG_TUSB_MEM_ALIGN)
+#ifndef CFG_TUD_MEM_ALIGN
+ #define CFG_TUD_MEM_ALIGN CFG_TUSB_MEM_ALIGN
+#endif
+
#ifndef CFG_TUD_ENDPOINT0_SIZE
#define CFG_TUD_ENDPOINT0_SIZE 64
#endif
+#ifndef CFG_TUD_INTERFACE_MAX
+ #define CFG_TUD_INTERFACE_MAX 16
+#endif
+
+//------------- Device Class Driver -------------//
+#ifndef CFG_TUD_BTH
+ #define CFG_TUD_BTH 0
+#endif
+
+#if CFG_TUD_BTH && !defined(CFG_TUD_BTH_ISO_ALT_COUNT)
+#error CFG_TUD_BTH_ISO_ALT_COUNT must be defined to tell Bluetooth driver the number of ISO endpoints to use
+#endif
+
#ifndef CFG_TUD_CDC
#define CFG_TUD_CDC 0
#endif
@@ -228,6 +389,10 @@
#define CFG_TUD_AUDIO 0
#endif
+#ifndef CFG_TUD_VIDEO
+ #define CFG_TUD_VIDEO 0
+#endif
+
#ifndef CFG_TUD_MIDI
#define CFG_TUD_MIDI 0
#endif
@@ -244,66 +409,139 @@
#define CFG_TUD_DFU_RUNTIME 0
#endif
-#ifndef CFG_TUD_DFU_MODE
- #define CFG_TUD_DFU_MODE 0
-#endif
-
-#ifndef CFG_TUD_DFU_TRANSFER_BUFFER_SIZE
- #define CFG_TUD_DFU_TRANSFER_BUFFER_SIZE 64
+#ifndef CFG_TUD_DFU
+ #define CFG_TUD_DFU 0
#endif
-#ifndef CFG_TUD_NET
- #define CFG_TUD_NET 0
+#ifndef CFG_TUD_ECM_RNDIS
+ #ifdef CFG_TUD_NET
+ #warning "CFG_TUD_NET is renamed to CFG_TUD_ECM_RNDIS"
+ #define CFG_TUD_ECM_RNDIS CFG_TUD_NET
+ #else
+ #define CFG_TUD_ECM_RNDIS 0
+ #endif
#endif
-#ifndef CFG_TUD_BTH
- #define CFG_TUD_BTH 0
+#ifndef CFG_TUD_NCM
+ #define CFG_TUD_NCM 0
#endif
//--------------------------------------------------------------------
-// HOST OPTIONS
+// Host Options (Default)
//--------------------------------------------------------------------
-#if TUSB_OPT_HOST_ENABLED
- #ifndef CFG_TUSB_HOST_DEVICE_MAX
- #define CFG_TUSB_HOST_DEVICE_MAX 1
- #warning CFG_TUSB_HOST_DEVICE_MAX is not defined, default value is 1
+#if CFG_TUH_ENABLED
+ #ifndef CFG_TUH_DEVICE_MAX
+ #define CFG_TUH_DEVICE_MAX 1
#endif
- //------------- HUB CLASS -------------//
- #if CFG_TUH_HUB && (CFG_TUSB_HOST_DEVICE_MAX == 1)
- #error there is no benefit enable hub with max device is 1. Please disable hub or increase CFG_TUSB_HOST_DEVICE_MAX
+ #ifndef CFG_TUH_ENUMERATION_BUFSIZE
+ #define CFG_TUH_ENUMERATION_BUFSIZE 256
#endif
+#endif // CFG_TUH_ENABLED
- #ifndef CFG_TUH_ENUMERATION_BUFSZIE
- #define CFG_TUH_ENUMERATION_BUFSZIE 256
- #endif
+// Attribute to place data in accessible RAM for host controller (default: CFG_TUSB_MEM_SECTION)
+#ifndef CFG_TUH_MEM_SECTION
+ #define CFG_TUH_MEM_SECTION CFG_TUSB_MEM_SECTION
+#endif
- //------------- CLASS -------------//
-#endif // TUSB_OPT_HOST_ENABLED
+// Attribute to align memory for host controller
+#ifndef CFG_TUH_MEM_ALIGN
+ #define CFG_TUH_MEM_ALIGN CFG_TUSB_MEM_ALIGN
+#endif
-//--------------------------------------------------------------------+
-// Port Options
-// TUP for TinyUSB Port (can be renamed)
-//--------------------------------------------------------------------+
+//------------- CLASS -------------//
-// TUP_ARCH_STRICT_ALIGN if arch cannot access unaligned memory
+#ifndef CFG_TUH_HUB
+ #define CFG_TUH_HUB 0
+#endif
+#ifndef CFG_TUH_CDC
+ #define CFG_TUH_CDC 0
+#endif
-// ARMv7+ (M3-M7, M23-M33) can access unaligned memory
-#if (defined(__ARM_ARCH) && (__ARM_ARCH >= 7))
- #define TUP_ARCH_STRICT_ALIGN 0
-#else
- #define TUP_ARCH_STRICT_ALIGN 1
+#ifndef CFG_TUH_CDC_FTDI
+ // FTDI is not part of CDC class, only to re-use CDC driver API
+ #define CFG_TUH_CDC_FTDI 0
#endif
-// TUP_MCU_STRICT_ALIGN will overwrite TUP_ARCH_STRICT_ALIGN.
-// In case TUP_MCU_STRICT_ALIGN = 1 and TUP_ARCH_STRICT_ALIGN =0, we will not reply on compiler
-// to generate unaligned access code.
-// LPC_IP3511 Highspeed cannot access unaligned memory on USB_RAM
-#if TUD_OPT_HIGH_SPEED && (CFG_TUSB_MCU == OPT_MCU_LPC54XXX || CFG_TUSB_MCU == OPT_MCU_LPC55XX)
- #define TUP_MCU_STRICT_ALIGN 1
-#else
- #define TUP_MCU_STRICT_ALIGN 0
+#ifndef CFG_TUH_CDC_FTDI_VID_PID_LIST
+ // List of product IDs that can use the FTDI CDC driver. 0x0403 is FTDI's VID
+ #define CFG_TUH_CDC_FTDI_VID_PID_LIST \
+ {0x0403, 0x6001}, {0x0403, 0x6006}, {0x0403, 0x6010}, {0x0403, 0x6011}, \
+ {0x0403, 0x6014}, {0x0403, 0x6015}, {0x0403, 0x8372}, {0x0403, 0xFBFA}, \
+ {0x0403, 0xCD18}
+#endif
+
+#ifndef CFG_TUH_CDC_CP210X
+ // CP210X is not part of CDC class, only to re-use CDC driver API
+ #define CFG_TUH_CDC_CP210X 0
+#endif
+
+#ifndef CFG_TUH_CDC_CP210X_VID_PID_LIST
+ // List of product IDs that can use the CP210X CDC driver. 0x10C4 is Silicon Labs' VID
+ #define CFG_TUH_CDC_CP210X_VID_PID_LIST \
+ {0x10C4, 0xEA60}, {0x10C4, 0xEA70}
+#endif
+
+#ifndef CFG_TUH_CDC_CH34X
+ // CH34X is not part of CDC class, only to re-use CDC driver API
+ #define CFG_TUH_CDC_CH34X 0
+#endif
+
+#ifndef CFG_TUH_CDC_CH34X_VID_PID_LIST
+ // List of product IDs that can use the CH34X CDC driver
+ #define CFG_TUH_CDC_CH34X_VID_PID_LIST \
+ { 0x1a86, 0x5523 }, /* ch341 chip */ \
+ { 0x1a86, 0x7522 }, /* ch340k chip */ \
+ { 0x1a86, 0x7523 }, /* ch340 chip */ \
+ { 0x1a86, 0xe523 }, /* ch330 chip */ \
+ { 0x4348, 0x5523 }, /* ch340 custom chip */ \
+ { 0x2184, 0x0057 }, /* overtaken from Linux Kernel driver /drivers/usb/serial/ch341.c */ \
+ { 0x9986, 0x7523 } /* overtaken from Linux Kernel driver /drivers/usb/serial/ch341.c */
+#endif
+
+#ifndef CFG_TUH_HID
+ #define CFG_TUH_HID 0
+#endif
+
+#ifndef CFG_TUH_MIDI
+ #define CFG_TUH_MIDI 0
+#endif
+
+#ifndef CFG_TUH_MSC
+ #define CFG_TUH_MSC 0
+#endif
+
+#ifndef CFG_TUH_VENDOR
+ #define CFG_TUH_VENDOR 0
+#endif
+
+#ifndef CFG_TUH_API_EDPT_XFER
+ #define CFG_TUH_API_EDPT_XFER 0
+#endif
+
+// Enable PIO-USB software host controller
+#ifndef CFG_TUH_RPI_PIO_USB
+ #define CFG_TUH_RPI_PIO_USB 0
+#endif
+
+#ifndef CFG_TUD_RPI_PIO_USB
+ #define CFG_TUD_RPI_PIO_USB 0
+#endif
+
+// MAX3421 Host controller option
+#ifndef CFG_TUH_MAX3421
+ #define CFG_TUH_MAX3421 0
+#endif
+
+//--------------------------------------------------------------------+
+// TypeC Options (Default)
+//--------------------------------------------------------------------+
+
+#ifndef CFG_TUC_ENABLED
+#define CFG_TUC_ENABLED 0
+
+#define tuc_int_handler(_p)
#endif
//------------------------------------------------------------------
@@ -313,6 +551,9 @@
#error Control Endpoint Max Packet Size cannot be larger than 64
#endif
+// To avoid GCC compiler warnings when -pedantic option is used (strict ISO C)
+typedef int make_iso_compilers_happy;
+
#endif /* _TUSB_OPTION_H_ */
/** @} */