/* * The MIT License (MIT) * * Copyright (c) 2019 Ha Thach (tinyusb.org) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * * This file is part of the TinyUSB stack. */ #ifndef _TUSB_OPTION_H_ #define _TUSB_OPTION_H_ #include "common/tusb_compiler.h" #define TUSB_VERSION_MAJOR 0 #define TUSB_VERSION_MINOR 13 #define TUSB_VERSION_REVISION 0 #define TUSB_VERSION_STRING TU_STRING(TUSB_VERSION_MAJOR) "." TU_STRING(TUSB_VERSION_MINOR) "." TU_STRING(TUSB_VERSION_REVISION) //--------------------------------------------------------------------+ // Supported MCUs // CFG_TUSB_MCU must be defined to one of following value //--------------------------------------------------------------------+ #define OPT_MCU_NONE 0 // LPC #define OPT_MCU_LPC11UXX 1 ///< NXP LPC11Uxx #define OPT_MCU_LPC13XX 2 ///< NXP LPC13xx #define OPT_MCU_LPC15XX 3 ///< NXP LPC15xx #define OPT_MCU_LPC175X_6X 4 ///< NXP LPC175x, LPC176x #define OPT_MCU_LPC177X_8X 5 ///< NXP LPC177x, LPC178x #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 // NRF #define OPT_MCU_NRF5X 100 ///< Nordic nRF5x series // SAM #define OPT_MCU_SAMD21 200 ///< MicroChip SAMD21 #define OPT_MCU_SAMD51 201 ///< MicroChip SAMD51 #define OPT_MCU_SAMG 202 ///< MicroChip SAMDG series #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 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 // Sony #define OPT_MCU_CXD56 400 ///< SONY CXD56 // 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 // Nuvoton #define OPT_MCU_NUC121 800 #define OPT_MCU_NUC126 801 #define OPT_MCU_NUC120 802 #define OPT_MCU_NUC505 803 // Espressif #define OPT_MCU_ESP32S2 900 ///< Espressif ESP32-S2 #define OPT_MCU_ESP32S3 901 ///< Espressif ESP32-S3 // Dialog #define OPT_MCU_DA1469X 1000 ///< Dialog Semiconductor DA1469x // Raspberry Pi #define OPT_MCU_RP2040 1100 ///< Raspberry Pi RP2040 // NXP Kinetis #define OPT_MCU_MKL25ZXX 1200 ///< NXP MKL25Zxx #define OPT_MCU_K32L2BXX 1201 ///< NXP K32L2Bxx // Silabs #define OPT_MCU_EFM32GG 1300 ///< Silabs EFM32GG // 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 // 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 // BridgeTek #define OPT_MCU_FT90X 2000 ///< BridgeTek FT90x #define OPT_MCU_FT93X 2001 ///< BridgeTek FT93x // Allwinner #define OPT_MCU_F1C100S 2100 ///< Allwinner F1C100s family // Helper to 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 #include CFG_TUSB_CONFIG_FILE #else #include "tusb_config.h" #endif //-------------------------------------------------------------------- // 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 // 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 #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" #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 ) // 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 ) #else #define TUD_OPT_HIGH_SPEED ( (CFG_TUSB_RHPORT1_MODE) & OPT_MODE_HIGH_SPEED ) #endif #define TUSB_OPT_DEVICE_ENABLED ( TUD_OPT_RHPORT >= 0 ) //--------------------------------------------------------------------+ // COMMON OPTIONS //--------------------------------------------------------------------+ // Debug enable to print out error message #ifndef CFG_TUSB_DEBUG #define CFG_TUSB_DEBUG 0 #endif // place data in accessible RAM for usb controller #ifndef CFG_TUSB_MEM_SECTION #define CFG_TUSB_MEM_SECTION #endif // alignment requirement of buffer used for endpoint transferring #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 //-------------------------------------------------------------------- #ifndef CFG_TUD_ENDPOINT0_SIZE #define CFG_TUD_ENDPOINT0_SIZE 64 #endif #ifndef CFG_TUD_CDC #define CFG_TUD_CDC 0 #endif #ifndef CFG_TUD_MSC #define CFG_TUD_MSC 0 #endif #ifndef CFG_TUD_HID #define CFG_TUD_HID 0 #endif #ifndef CFG_TUD_AUDIO #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 #ifndef CFG_TUD_VENDOR #define CFG_TUD_VENDOR 0 #endif #ifndef CFG_TUD_USBTMC #define CFG_TUD_USBTMC 0 #endif #ifndef CFG_TUD_DFU_RUNTIME #define CFG_TUD_DFU_RUNTIME 0 #endif #ifndef CFG_TUD_DFU #define CFG_TUD_DFU 0 #endif #ifndef CFG_TUD_BTH #define CFG_TUD_BTH 0 #endif #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_NCM #define CFG_TUD_NCM 0 #endif //-------------------------------------------------------------------- // HOST OPTIONS //-------------------------------------------------------------------- #if TUSB_OPT_HOST_ENABLED #ifndef CFG_TUH_DEVICE_MAX #define CFG_TUH_DEVICE_MAX 1 #endif #ifndef CFG_TUH_ENUMERATION_BUFSIZE #define CFG_TUH_ENUMERATION_BUFSIZE 256 #endif #endif // TUSB_OPT_HOST_ENABLED //------------- CLASS -------------// #ifndef CFG_TUH_HUB #define CFG_TUH_HUB 0 #endif #ifndef CFG_TUH_CDC #define CFG_TUH_CDC 0 #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 //--------------------------------------------------------------------+ // Port Specific // TUP stand for TinyUSB Port (can be renamed) //--------------------------------------------------------------------+ //------------- Unaligned Memory -------------// // 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 #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 #endif //------------------------------------------------------------------ // Configuration Validation //------------------------------------------------------------------ #if CFG_TUD_ENDPOINT0_SIZE > 64 #error Control Endpoint Max Packet Size cannot be larger than 64 #endif #endif /* _TUSB_OPTION_H_ */ /** @} */