/* * 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"// Version is release as major.minor.revision eg 1.0.0#defineTUSB_VERSION_MAJOR0#defineTUSB_VERSION_MINOR17#defineTUSB_VERSION_REVISION0#defineTUSB_VERSION_NUMBER(TUSB_VERSION_MAJOR*10000+TUSB_VERSION_MINOR*100+TUSB_VERSION_REVISION)#defineTUSB_VERSION_STRINGTU_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//--------------------------------------------------------------------+#defineOPT_MCU_NONE0// LPC#defineOPT_MCU_LPC11UXX1///< NXP LPC11Uxx#defineOPT_MCU_LPC13XX2///< NXP LPC13xx#defineOPT_MCU_LPC15XX3///< NXP LPC15xx#defineOPT_MCU_LPC175X_6X4///< NXP LPC175x, LPC176x#defineOPT_MCU_LPC177X_8X5///< NXP LPC177x, LPC178x#defineOPT_MCU_LPC18XX6///< NXP LPC18xx#defineOPT_MCU_LPC40XX7///< NXP LPC40xx#defineOPT_MCU_LPC43XX8///< NXP LPC43xx#defineOPT_MCU_LPC519///< NXP LPC51#defineOPT_MCU_LPC51UXXOPT_MCU_LPC51///< NXP LPC51#defineOPT_MCU_LPC5410///< NXP LPC54#defineOPT_MCU_LPC5511///< NXP LPC55// legacy naming#defineOPT_MCU_LPC54XXXOPT_MCU_LPC54#defineOPT_MCU_LPC55XXOPT_MCU_LPC55// NRF#defineOPT_MCU_NRF5X100///< Nordic nRF5x series// SAM#defineOPT_MCU_SAMD21200///< MicroChip SAMD21#defineOPT_MCU_SAMD51201///< MicroChip SAMD51#defineOPT_MCU_SAMG202///< MicroChip SAMDG series#defineOPT_MCU_SAME5X203///< MicroChip SAM E5x#defineOPT_MCU_SAMD11204///< MicroChip SAMD11#defineOPT_MCU_SAML22205///< MicroChip SAML22#defineOPT_MCU_SAML21206///< MicroChip SAML21#defineOPT_MCU_SAMX7X207///< MicroChip SAME70, S70, V70, V71 family// STM32#defineOPT_MCU_STM32F0300///< ST F0#defineOPT_MCU_STM32F1301///< ST F1#defineOPT_MCU_STM32F2302///< ST F2#defineOPT_MCU_STM32F3303///< ST F3#defineOPT_MCU_STM32F4304///< ST F4#defineOPT_MCU_STM32F7305///< ST F7#defineOPT_MCU_STM32H7306///< ST H7#defineOPT_MCU_STM32L1308///< ST L1#defineOPT_MCU_STM32L0307///< ST L0#defineOPT_MCU_STM32L4309///< ST L4#defineOPT_MCU_STM32G0310///< ST G0#defineOPT_MCU_STM32G4311///< ST G4#defineOPT_MCU_STM32WB312///< ST WB#defineOPT_MCU_STM32U5313///< ST U5#defineOPT_MCU_STM32L5314///< ST L5#defineOPT_MCU_STM32H5315///< ST H5// Sony#defineOPT_MCU_CXD56400///< SONY CXD56// TI#defineOPT_MCU_MSP430x5xx500///< TI MSP430x5xx#defineOPT_MCU_MSP432E4510///< TI MSP432E4xx#defineOPT_MCU_TM4C123511///< TI Tiva-C 123x#defineOPT_MCU_TM4C129512///< TI Tiva-C 129x// ValentyUSB eptri#defineOPT_MCU_VALENTYUSB_EPTRI600///< Fomu eptri config// NXP iMX RT#defineOPT_MCU_MIMXRT1XXX700///< NXP iMX RT1xxx Series#defineOPT_MCU_MIMXRT10XXOPT_MCU_MIMXRT1XXX///< RT10xx#defineOPT_MCU_MIMXRT11XXOPT_MCU_MIMXRT1XXX///< RT11xx// Nuvoton#defineOPT_MCU_NUC121800#defineOPT_MCU_NUC126801#defineOPT_MCU_NUC120802#defineOPT_MCU_NUC505803// Espressif#defineOPT_MCU_ESP32S2900///< Espressif ESP32-S2#defineOPT_MCU_ESP32S3901///< Espressif ESP32-S3#defineOPT_MCU_ESP32902///< Espressif ESP32 (for host max3421e)#defineOPT_MCU_ESP32C3903///< Espressif ESP32-C3#defineOPT_MCU_ESP32C6904///< Espressif ESP32-C6#defineOPT_MCU_ESP32C2905///< Espressif ESP32-C2#defineOPT_MCU_ESP32H2906///< Espressif ESP32-H2#defineTUP_MCU_ESPRESSIF(CFG_TUSB_MCU>=900&&CFG_TUSB_MCU<1000)// check if Espressif MCU// Dialog#defineOPT_MCU_DA1469X1000///< Dialog Semiconductor DA1469x// Raspberry Pi#defineOPT_MCU_RP20401100///< Raspberry Pi RP2040// NXP Kinetis#defineOPT_MCU_KINETIS_KL1200///< NXP KL series#defineOPT_MCU_KINETIS_K32L1201///< NXP K32L series#defineOPT_MCU_KINETIS_K321201///< Alias to K32L#defineOPT_MCU_KINETIS_K1202///< NXP K series#defineOPT_MCU_MKL25ZXX1200///< Alias to KL (obsolete)#defineOPT_MCU_K32L2BXX1201///< Alias to K32 (obsolete)// Silabs#defineOPT_MCU_EFM32GG1300///< Silabs EFM32GG// Renesas RX#defineOPT_MCU_RX63X1400///< Renesas RX63N/631#defineOPT_MCU_RX65X1401///< Renesas RX65N/RX651#defineOPT_MCU_RX72N1402///< Renesas RX72N#defineOPT_MCU_RAXXX1403///< Renesas RAxxx families// Mind Motion#defineOPT_MCU_MM32F327X1500///< Mind Motion MM32F327// GigaDevice#defineOPT_MCU_GD32VF1031600///< GigaDevice GD32VF103// Broadcom#defineOPT_MCU_BCM27111700///< Broadcom BCM2711#defineOPT_MCU_BCM28351701///< Broadcom BCM2835#defineOPT_MCU_BCM28371702///< Broadcom BCM2837// Infineon#defineOPT_MCU_XMC40001800///< Infineon XMC4000// PIC#defineOPT_MCU_PIC32MZ1900///< MicroChip PIC32MZ family#defineOPT_MCU_PIC32MM1901///< MicroChip PIC32MM family#defineOPT_MCU_PIC32MX1902///< MicroChip PIC32MX family#defineOPT_MCU_PIC32MK1903///< MicroChip PIC32MK family#defineOPT_MCU_PIC241910///< MicroChip PIC24 family#defineOPT_MCU_DSPIC331911///< MicroChip DSPIC33 family// BridgeTek#defineOPT_MCU_FT90X2000///< BridgeTek FT90x#defineOPT_MCU_FT93X2001///< BridgeTek FT93x// Allwinner#defineOPT_MCU_F1C100S2100///< Allwinner F1C100s family// WCH#defineOPT_MCU_CH32V3072200///< WCH CH32V307#defineOPT_MCU_CH32F20X2210///< WCH CH32F20x#defineOPT_MCU_CH32V20X2220///< WCH CH32V20X#defineOPT_MCU_CH32V1032230///< WCH CH32V103// NXP LPC MCX#defineOPT_MCU_MCXN92300///< NXP MCX N9 Series#defineOPT_MCU_MCXA152301///< 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)#defineTU_CHECK_MCU(...)(TU_ARGS_APPLY(_TU_CHECK_MCU,||,__VA_ARGS__))//--------------------------------------------------------------------+// Supported OS//--------------------------------------------------------------------+#defineOPT_OS_NONE1///< No RTOS#defineOPT_OS_FREERTOS2///< FreeRTOS#defineOPT_OS_MYNEWT3///< Mynewt OS#defineOPT_OS_CUSTOM4///< Custom OS is implemented by application#defineOPT_OS_PICO5///< Raspberry Pi Pico SDK#defineOPT_OS_RTTHREAD6///< RT-Thread#defineOPT_OS_RTX47///< Keil RTX 4//--------------------------------------------------------------------+// Mode and Speed//--------------------------------------------------------------------+// Low byte is operational mode#defineOPT_MODE_NONE0x0000///< Disabled#defineOPT_MODE_DEVICE0x0001///< Device Mode#defineOPT_MODE_HOST0x0002///< Host Mode// High byte is max operational speed (corresponding to tusb_speed_t)#defineOPT_MODE_DEFAULT_SPEED0x0000///< Default (max) speed supported by MCU#defineOPT_MODE_LOW_SPEED0x0100///< Low Speed#defineOPT_MODE_FULL_SPEED0x0200///< Full Speed#defineOPT_MODE_HIGH_SPEED0x0400///< High Speed#defineOPT_MODE_SPEED_MASK0xff00117 defines//--------------------------------------------------------------------+// Include tusb_config.h and tusb_mcu.h//--------------------------------------------------------------------+// Allow to use command line to change the config name/location#ifdefCFG_TUSB_CONFIG_FILE#includeCFG_TUSB_CONFIG_FILE#else#include"tusb_config.h"#endif#include"common/tusb_mcu.h"//--------------------------------------------------------------------// RootHub Mode detection//--------------------------------------------------------------------//------------- Root hub as Device -------------//#ifdefined(CFG_TUSB_RHPORT0_MODE)&&((CFG_TUSB_RHPORT0_MODE)&OPT_MODE_DEVICE)#defineTUD_RHPORT_MODE(CFG_TUSB_RHPORT0_MODE)#defineTUD_OPT_RHPORT0/* ... */#elifdefined(CFG_TUSB_RHPORT1_MODE)&&((CFG_TUSB_RHPORT1_MODE)&OPT_MODE_DEVICE)#defineTUD_RHPORT_MODE(CFG_TUSB_RHPORT1_MODE)#defineTUD_OPT_RHPORT1/* ... */#else#defineTUD_RHPORT_MODEOPT_MODE_NONE#endif#ifndefCFG_TUD_ENABLED// fallback to use CFG_TUSB_RHPORTx_MODE#defineCFG_TUD_ENABLED(TUD_RHPORT_MODE&OPT_MODE_DEVICE)/* ... */#endif#ifndefCFG_TUD_MAX_SPEED// fallback to use CFG_TUSB_RHPORTx_MODE#defineCFG_TUD_MAX_SPEED(TUD_RHPORT_MODE&OPT_MODE_SPEED_MASK)/* ... */#endif// For backward compatible#defineTUSB_OPT_DEVICE_ENABLEDCFG_TUD_ENABLED// highspeed support indicator#defineTUD_OPT_HIGH_SPEED(CFG_TUD_MAX_SPEED?(CFG_TUD_MAX_SPEED&OPT_MODE_HIGH_SPEED):TUP_RHPORT_HIGHSPEED)Root hub as Device//------------- Root hub as Host -------------//#ifdefined(CFG_TUSB_RHPORT0_MODE)&&((CFG_TUSB_RHPORT0_MODE)&OPT_MODE_HOST)#defineTUH_RHPORT_MODE(CFG_TUSB_RHPORT0_MODE)#defineTUH_OPT_RHPORT0/* ... */#elifdefined(CFG_TUSB_RHPORT1_MODE)&&((CFG_TUSB_RHPORT1_MODE)&OPT_MODE_HOST)#defineTUH_RHPORT_MODE(CFG_TUSB_RHPORT1_MODE)#defineTUH_OPT_RHPORT1/* ... */#else#defineTUH_RHPORT_MODEOPT_MODE_NONE#endif#ifndefCFG_TUH_ENABLED// fallback to use CFG_TUSB_RHPORTx_MODE#defineCFG_TUH_ENABLED(TUH_RHPORT_MODE&OPT_MODE_HOST)/* ... */#endif#ifndefCFG_TUH_MAX_SPEED// fallback to use CFG_TUSB_RHPORTx_MODE#defineCFG_TUH_MAX_SPEED(TUH_RHPORT_MODE&OPT_MODE_SPEED_MASK)/* ... */#endif// For backward compatible#defineTUSB_OPT_HOST_ENABLEDCFG_TUH_ENABLED// highspeed support indicator#defineTUH_OPT_HIGH_SPEED(CFG_TUH_MAX_SPEED?(CFG_TUH_MAX_SPEED&OPT_MODE_HIGH_SPEED):TUP_RHPORT_HIGHSPEED)//--------------------------------------------------------------------+// 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#ifTUD_OPT_HIGH_SPEED&&TU_CHECK_MCU(OPT_MCU_LPC54XXX,OPT_MCU_LPC55XX)#defineTUP_MCU_STRICT_ALIGN1#else#defineTUP_MCU_STRICT_ALIGN0#endif//--------------------------------------------------------------------+// Common Options (Default)//--------------------------------------------------------------------+// Debug enable to print out error message#ifndefCFG_TUSB_DEBUG#defineCFG_TUSB_DEBUG0#endif// Level where CFG_TUSB_DEBUG must be at least for USBH is logged#ifndefCFG_TUH_LOG_LEVEL#defineCFG_TUH_LOG_LEVEL2#endif// Level where CFG_TUSB_DEBUG must be at least for USBD is logged#ifndefCFG_TUD_LOG_LEVEL#defineCFG_TUD_LOG_LEVEL2#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#ifndefCFG_TUSB_MEM_SECTION#defineCFG_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#ifndefCFG_TUSB_MEM_ALIGN#defineCFG_TUSB_MEM_ALIGNTU_ATTR_ALIGNED(4)#endif// OS selection#ifndefCFG_TUSB_OS#defineCFG_TUSB_OSOPT_OS_NONE#endif#ifndefCFG_TUSB_OS_INC_PATH#defineCFG_TUSB_OS_INC_PATH#endif//--------------------------------------------------------------------// Device Options (Default)//--------------------------------------------------------------------// Attribute to place data in accessible RAM for device controller (default: CFG_TUSB_MEM_SECTION)#ifndefCFG_TUD_MEM_SECTION#defineCFG_TUD_MEM_SECTIONCFG_TUSB_MEM_SECTION#endif// Attribute to align memory for device controller (default: CFG_TUSB_MEM_ALIGN)#ifndefCFG_TUD_MEM_ALIGN#defineCFG_TUD_MEM_ALIGNCFG_TUSB_MEM_ALIGN#endif#ifndefCFG_TUD_ENDPOINT0_SIZE#defineCFG_TUD_ENDPOINT0_SIZE64#endif#ifndefCFG_TUD_INTERFACE_MAX#defineCFG_TUD_INTERFACE_MAX16#endif// default to max hardware endpoint, but can be smaller to save RAM#ifndefCFG_TUD_ENDPPOINT_MAX#defineCFG_TUD_ENDPPOINT_MAXTUP_DCD_ENDPOINT_MAX#endif#ifCFG_TUD_ENDPPOINT_MAX>TUP_DCD_ENDPOINT_MAX#error"CFG_TUD_ENDPPOINT_MAX must be less than or equal to TUP_DCD_ENDPOINT_MAX"#endif// USB 2.0 7.1.20: compliance test mode support#ifndefCFG_TUD_TEST_MODE#defineCFG_TUD_TEST_MODE0#endifRoot hub as Host//------------- Device Class Driver -------------//#ifndefCFG_TUD_BTH#defineCFG_TUD_BTH0#endif#ifCFG_TUD_BTH&&!defined(CFG_TUD_BTH_ISO_ALT_COUNT)#errorCFG_TUD_BTH_ISO_ALT_COUNTmustbedefinedtotellBluetoothdriverthenumberofISOendpointstouse#endif#ifndefCFG_TUD_CDC#defineCFG_TUD_CDC0#endif#ifndefCFG_TUD_MSC#defineCFG_TUD_MSC0#endif#ifndefCFG_TUD_HID#defineCFG_TUD_HID0#endif#ifndefCFG_TUD_AUDIO#defineCFG_TUD_AUDIO0#endif#ifndefCFG_TUD_VIDEO#defineCFG_TUD_VIDEO0#endif#ifndefCFG_TUD_MIDI#defineCFG_TUD_MIDI0#endif#ifndefCFG_TUD_VENDOR#defineCFG_TUD_VENDOR0#endif#ifndefCFG_TUD_USBTMC#defineCFG_TUD_USBTMC0#endif#ifndefCFG_TUD_DFU_RUNTIME#defineCFG_TUD_DFU_RUNTIME0#endif#ifndefCFG_TUD_DFU#defineCFG_TUD_DFU0#endif#ifndefCFG_TUD_ECM_RNDIS#ifdefCFG_TUD_NET#warning"CFG_TUD_NET is renamed to CFG_TUD_ECM_RNDIS"#defineCFG_TUD_ECM_RNDISCFG_TUD_NET/* ... */#else#defineCFG_TUD_ECM_RNDIS0#endif/* ... */#endif#ifndefCFG_TUD_NCM#defineCFG_TUD_NCM0#endif//--------------------------------------------------------------------// Host Options (Default)//--------------------------------------------------------------------#ifCFG_TUH_ENABLED#ifndefCFG_TUH_DEVICE_MAX#defineCFG_TUH_DEVICE_MAX1#endif#ifndefCFG_TUH_ENUMERATION_BUFSIZE#defineCFG_TUH_ENUMERATION_BUFSIZE256#endif/* ... */#endif// CFG_TUH_ENABLED// Attribute to place data in accessible RAM for host controller (default: CFG_TUSB_MEM_SECTION)#ifndefCFG_TUH_MEM_SECTION#defineCFG_TUH_MEM_SECTIONCFG_TUSB_MEM_SECTION#endif// Attribute to align memory for host controller#ifndefCFG_TUH_MEM_ALIGN#defineCFG_TUH_MEM_ALIGNCFG_TUSB_MEM_ALIGN#endifDevice Class Driver//------------- CLASS -------------//#ifndefCFG_TUH_HUB#defineCFG_TUH_HUB0#endif#ifndefCFG_TUH_CDC#defineCFG_TUH_CDC0#endif// FTDI is not part of CDC class, only to re-use CDC driver API#ifndefCFG_TUH_CDC_FTDI#defineCFG_TUH_CDC_FTDI0#endif// List of product IDs that can use the FTDI CDC driver. 0x0403 is FTDI's VID#ifndefCFG_TUH_CDC_FTDI_VID_PID_LIST#defineCFG_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// CP210X is not part of CDC class, only to re-use CDC driver API#ifndefCFG_TUH_CDC_CP210X#defineCFG_TUH_CDC_CP210X0#endif// List of product IDs that can use the CP210X CDC driver. 0x10C4 is Silicon Labs' VID#ifndefCFG_TUH_CDC_CP210X_VID_PID_LIST#defineCFG_TUH_CDC_CP210X_VID_PID_LIST\{0x10C4,0xEA60},{0x10C4,0xEA70}.../* ... */#endif#ifndefCFG_TUH_CDC_CH34X// CH34X is not part of CDC class, only to re-use CDC driver API#defineCFG_TUH_CDC_CH34X0/* ... */#endif// List of product IDs that can use the CH34X CDC driver#ifndefCFG_TUH_CDC_CH34X_VID_PID_LIST#defineCFG_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#ifndefCFG_TUH_HID#defineCFG_TUH_HID0#endif#ifndefCFG_TUH_MIDI#defineCFG_TUH_MIDI0#endif#ifndefCFG_TUH_MSC#defineCFG_TUH_MSC0#endif#ifndefCFG_TUH_VENDOR#defineCFG_TUH_VENDOR0#endif#ifndefCFG_TUH_API_EDPT_XFER#defineCFG_TUH_API_EDPT_XFER0#endif// Enable PIO-USB software host controller#ifndefCFG_TUH_RPI_PIO_USB#defineCFG_TUH_RPI_PIO_USB0#endif#ifndefCFG_TUD_RPI_PIO_USB#defineCFG_TUD_RPI_PIO_USB0#endif// MAX3421 Host controller option#ifndefCFG_TUH_MAX3421#defineCFG_TUH_MAX34210#endif//--------------------------------------------------------------------+// TypeC Options (Default)//--------------------------------------------------------------------+#ifndefCFG_TUC_ENABLED#defineCFG_TUC_ENABLED0#definetuc_int_handler(_p)/* ... */#endif//------------------------------------------------------------------// Configuration Validation//------------------------------------------------------------------#ifCFG_TUD_ENDPOINT0_SIZE>64#errorControlEndpointMaxPacketSizecannotbelargerthan64#endif// To avoid GCC compiler warnings when -pedantic option is used (strict ISO C)typedefintmake_iso_compilers_happy;/* ... */#endif/* _TUSB_OPTION_H_ *//** @} */
Details
Show: from
Types: Columns:
All items filtered out
All items filtered out
This file uses the notable symbols shown below. Click anywhere in the file to view more details.