#ifndef _TUSB_OPTION_H_
#define _TUSB_OPTION_H_
#include "common/tusb_compiler.h"
#define TUSB_VERSION_MAJOR 0
#define TUSB_VERSION_MINOR 12
#define TUSB_VERSION_REVISION 0
#define TUSB_VERSION_STRING TU_STRING(TUSB_VERSION_MAJOR) "." TU_STRING(TUSB_VERSION_MINOR) "." TU_STRING(TUSB_VERSION_REVISION)
#define OPT_MCU_NONE 0
#define OPT_MCU_LPC11UXX 1
#define OPT_MCU_LPC13XX 2
#define OPT_MCU_LPC15XX 3
#define OPT_MCU_LPC175X_6X 4
#define OPT_MCU_LPC177X_8X 5
#define OPT_MCU_LPC18XX 6
#define OPT_MCU_LPC40XX 7
#define OPT_MCU_LPC43XX 8
#define OPT_MCU_LPC51UXX 9
#define OPT_MCU_LPC54XXX 10
#define OPT_MCU_LPC55XX 11
#define OPT_MCU_NRF5X 100
#define OPT_MCU_SAMD21 200
#define OPT_MCU_SAMD51 201
#define OPT_MCU_SAMG 202
#define OPT_MCU_SAME5X 203
#define OPT_MCU_SAMD11 204
#define OPT_MCU_SAML22 205
#define OPT_MCU_SAML21 206
#define OPT_MCU_SAMX7X 207
#define OPT_MCU_STM32F0 300
#define OPT_MCU_STM32F1 301
#define OPT_MCU_STM32F2 302
#define OPT_MCU_STM32F3 303
#define OPT_MCU_STM32F4 304
#define OPT_MCU_STM32F7 305
#define OPT_MCU_STM32H7 306
#define OPT_MCU_STM32L1 308
#define OPT_MCU_STM32L0 307
#define OPT_MCU_STM32L4 309
#define OPT_MCU_STM32G0 310
#define OPT_MCU_STM32G4 311
#define OPT_MCU_CXD56 400
#define OPT_MCU_MSP430x5xx 500
#define OPT_MCU_MSP432E4 510
#define OPT_MCU_TM4C123 511
#define OPT_MCU_TM4C129 512
#define OPT_MCU_VALENTYUSB_EPTRI 600
#define OPT_MCU_MIMXRT10XX 700
#define OPT_MCU_NUC121 800
#define OPT_MCU_NUC126 801
#define OPT_MCU_NUC120 802
#define OPT_MCU_NUC505 803
#define OPT_MCU_ESP32S2 900
#define OPT_MCU_ESP32S3 901
#define OPT_MCU_DA1469X 1000
#define OPT_MCU_RP2040 1100
#define OPT_MCU_MKL25ZXX 1200
#define OPT_MCU_K32L2BXX 1201
#define OPT_MCU_EFM32GG 1300
#define OPT_MCU_RX63X 1400
#define OPT_MCU_RX65X 1401
#define OPT_MCU_RX72N 1402
#define OPT_MCU_MM32F327X 1500
#define OPT_MCU_GD32VF103 1600
#define OPT_MCU_BCM2711 1700
#define OPT_MCU_BCM2835 1701
#define OPT_MCU_BCM2837 1702
#define OPT_MCU_XMC4000 1800
#define OPT_MCU_PIC32MZ 1900
#define OPT_MCU_FT90X 2000
#define OPT_MCU_FT93X 2001
#define OPT_MCU_F1C100S 2100
#define _TU_CHECK_MCU(_m) (CFG_TUSB_MCU == _m)
#define TU_CHECK_MCU(...) (TU_ARGS_APPLY(_TU_CHECK_MCU, ||, __VA_ARGS__))
#define OPT_OS_NONE 1
#define OPT_OS_FREERTOS 2
#define OPT_OS_MYNEWT 3
#define OPT_OS_CUSTOM 4
#define OPT_OS_PICO 5
#define OPT_OS_RTTHREAD 6
#define OPT_OS_RTX4 7
#ifdef CFG_TUSB_CONFIG_FILE
#include CFG_TUSB_CONFIG_FILE
#else
#include "tusb_config.h"
#endif
#define OPT_MODE_NONE 0x00
#define OPT_MODE_DEVICE 0x01
#define OPT_MODE_HOST 0x02
#define OPT_MODE_FULL_SPEED 0x00
#define OPT_MODE_LOW_SPEED 0x10
#define OPT_MODE_HIGH_SPEED 0x20
#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
#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 )
#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 )
#ifndef CFG_TUSB_DEBUG
#define CFG_TUSB_DEBUG 0
#endif
#ifndef CFG_TUSB_MEM_SECTION
#define CFG_TUSB_MEM_SECTION
#endif
#ifndef CFG_TUSB_MEM_ALIGN
#define CFG_TUSB_MEM_ALIGN TU_ATTR_ALIGNED(4)
#endif
#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
#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
#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
#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
#if (defined(__ARM_ARCH) && (__ARM_ARCH >= 7))
#define TUP_ARCH_STRICT_ALIGN 0
#else
#define TUP_ARCH_STRICT_ALIGN 1
#endif
#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
#if CFG_TUD_ENDPOINT0_SIZE > 64
#error Control Endpoint Max Packet Size cannot be larger than 64
#endif
#endif