27#ifndef _TUSB_OPTION_H_
28#define _TUSB_OPTION_H_
33#define TUSB_VERSION_MAJOR 0
34#define TUSB_VERSION_MINOR 17
35#define TUSB_VERSION_REVISION 0
37#define TUSB_VERSION_NUMBER (TUSB_VERSION_MAJOR * 10000 + TUSB_VERSION_MINOR * 100 + TUSB_VERSION_REVISION)
38#define TUSB_VERSION_STRING TU_STRING(TUSB_VERSION_MAJOR) "." TU_STRING(TUSB_VERSION_MINOR) "." TU_STRING(TUSB_VERSION_REVISION)
48#define OPT_MCU_LPC11UXX 1
49#define OPT_MCU_LPC13XX 2
50#define OPT_MCU_LPC15XX 3
51#define OPT_MCU_LPC175X_6X 4
52#define OPT_MCU_LPC177X_8X 5
53#define OPT_MCU_LPC18XX 6
54#define OPT_MCU_LPC40XX 7
55#define OPT_MCU_LPC43XX 8
56#define OPT_MCU_LPC51 9
57#define OPT_MCU_LPC51UXX OPT_MCU_LPC51
58#define OPT_MCU_LPC54 10
59#define OPT_MCU_LPC55 11
61#define OPT_MCU_LPC54XXX OPT_MCU_LPC54
62#define OPT_MCU_LPC55XX OPT_MCU_LPC55
65#define OPT_MCU_NRF5X 100
68#define OPT_MCU_SAMD21 200
69#define OPT_MCU_SAMD51 201
70#define OPT_MCU_SAMG 202
71#define OPT_MCU_SAME5X 203
72#define OPT_MCU_SAMD11 204
73#define OPT_MCU_SAML22 205
74#define OPT_MCU_SAML21 206
75#define OPT_MCU_SAMX7X 207
78#define OPT_MCU_STM32F0 300
79#define OPT_MCU_STM32F1 301
80#define OPT_MCU_STM32F2 302
81#define OPT_MCU_STM32F3 303
82#define OPT_MCU_STM32F4 304
83#define OPT_MCU_STM32F7 305
84#define OPT_MCU_STM32H7 306
85#define OPT_MCU_STM32L1 308
86#define OPT_MCU_STM32L0 307
87#define OPT_MCU_STM32L4 309
88#define OPT_MCU_STM32G0 310
89#define OPT_MCU_STM32G4 311
90#define OPT_MCU_STM32WB 312
91#define OPT_MCU_STM32U5 313
92#define OPT_MCU_STM32L5 314
93#define OPT_MCU_STM32H5 315
94#define OPT_MCU_STM32U0 316
95#define OPT_MCU_STM32H7RS 317
98#define OPT_MCU_CXD56 400
101#define OPT_MCU_MSP430x5xx 500
102#define OPT_MCU_MSP432E4 510
103#define OPT_MCU_TM4C123 511
104#define OPT_MCU_TM4C129 512
107#define OPT_MCU_VALENTYUSB_EPTRI 600
110#define OPT_MCU_MIMXRT1XXX 700
111#define OPT_MCU_MIMXRT10XX OPT_MCU_MIMXRT1XXX
112#define OPT_MCU_MIMXRT11XX OPT_MCU_MIMXRT1XXX
115#define OPT_MCU_NUC121 800
116#define OPT_MCU_NUC126 801
117#define OPT_MCU_NUC120 802
118#define OPT_MCU_NUC505 803
121#define OPT_MCU_ESP32S2 900
122#define OPT_MCU_ESP32S3 901
123#define OPT_MCU_ESP32 902
124#define OPT_MCU_ESP32C3 903
125#define OPT_MCU_ESP32C6 904
126#define OPT_MCU_ESP32C2 905
127#define OPT_MCU_ESP32H2 906
128#define OPT_MCU_ESP32P4 907
129#define TUSB_MCU_VENDOR_ESPRESSIF (CFG_TUSB_MCU >= 900 && CFG_TUSB_MCU < 1000)
130#define TUP_MCU_ESPRESSIF TUSB_MCU_VENDOR_ESPRESSIF
133#define OPT_MCU_DA1469X 1000
136#define OPT_MCU_RP2040 1100
139#define OPT_MCU_KINETIS_KL 1200
140#define OPT_MCU_KINETIS_K32L 1201
141#define OPT_MCU_KINETIS_K32 1201
142#define OPT_MCU_KINETIS_K 1202
144#define OPT_MCU_MKL25ZXX 1200
145#define OPT_MCU_K32L2BXX 1201
148#define OPT_MCU_EFM32GG 1300
151#define OPT_MCU_RX63X 1400
152#define OPT_MCU_RX65X 1401
153#define OPT_MCU_RX72N 1402
154#define OPT_MCU_RAXXX 1403
157#define OPT_MCU_MM32F327X 1500
160#define OPT_MCU_GD32VF103 1600
163#define OPT_MCU_BCM2711 1700
164#define OPT_MCU_BCM2835 1701
165#define OPT_MCU_BCM2837 1702
168#define OPT_MCU_XMC4000 1800
171#define OPT_MCU_PIC32MZ 1900
172#define OPT_MCU_PIC32MM 1901
173#define OPT_MCU_PIC32MX 1902
174#define OPT_MCU_PIC32MK 1903
175#define OPT_MCU_PIC24 1910
176#define OPT_MCU_DSPIC33 1911
179#define OPT_MCU_FT90X 2000
180#define OPT_MCU_FT93X 2001
183#define OPT_MCU_F1C100S 2100
186#define OPT_MCU_CH32V307 2200
187#define OPT_MCU_CH32F20X 2210
188#define OPT_MCU_CH32V20X 2220
189#define OPT_MCU_CH32V103 2230
192#define OPT_MCU_MCXN9 2300
193#define OPT_MCU_MCXA15 2301
196#define OPT_MCU_MAX32690 2400
197#define OPT_MCU_MAX32666 2401
198#define OPT_MCU_MAX32650 2402
199#define OPT_MCU_MAX78002 2403
203#define _TU_CHECK_MCU(_m) (CFG_TUSB_MCU == _m)
204#define TU_CHECK_MCU(...) (TU_ARGS_APPLY(_TU_CHECK_MCU, ||, __VA_ARGS__))
211#define OPT_OS_FREERTOS 2
212#define OPT_OS_MYNEWT 3
213#define OPT_OS_CUSTOM 4
215#define OPT_OS_RTTHREAD 6
223#define OPT_MODE_NONE 0x0000
224#define OPT_MODE_DEVICE 0x0001
225#define OPT_MODE_HOST 0x0002
228#define OPT_MODE_DEFAULT_SPEED 0x0000
229#define OPT_MODE_LOW_SPEED 0x0100
230#define OPT_MODE_FULL_SPEED 0x0200
231#define OPT_MODE_HIGH_SPEED 0x0400
232#define OPT_MODE_SPEED_MASK 0xff00
239#ifdef CFG_TUSB_CONFIG_FILE
240 #include CFG_TUSB_CONFIG_FILE
242 #include "tusb_config.h"
256#ifndef CFG_TUD_DWC2_DMA
257 #define CFG_TUD_DWC2_DMA 0
261#ifndef CFG_TUH_DWC2_SLAVE_ENABLE
262 #ifndef CFG_TUH_DWC2_SLAVE_ENABLE_DEFAULT
263 #define CFG_TUH_DWC2_SLAVE_ENABLE_DEFAULT 1
265 #define CFG_TUH_DWC2_SLAVE_ENABLE CFG_TUH_DWC2_SLAVE_ENABLE_DEFAULT
269#ifndef CFG_TUH_DWC2_DMA_ENABLE
270 #ifndef CFG_TUH_DWC2_DMA_ENABLE_DEFAULT
271 #define CFG_TUH_DWC2_DMA_ENABLE_DEFAULT 1
273 #define CFG_TUH_DWC2_DMA_ENABLE CFG_TUH_DWC2_DMA_ENABLE_DEFAULT
277#ifndef CFG_TUH_RPI_PIO_USB
278 #define CFG_TUH_RPI_PIO_USB 0
281#ifndef CFG_TUD_RPI_PIO_USB
282 #define CFG_TUD_RPI_PIO_USB 0
286#ifndef CFG_TUH_MAX3421
287 #define CFG_TUH_MAX3421 0
297#if defined(CFG_TUSB_RHPORT0_MODE) && ((CFG_TUSB_RHPORT0_MODE) & OPT_MODE_DEVICE)
298 #define TUD_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE)
299 #define TUD_OPT_RHPORT 0
300#elif defined(CFG_TUSB_RHPORT1_MODE) && ((CFG_TUSB_RHPORT1_MODE) & OPT_MODE_DEVICE)
301 #define TUD_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE)
302 #define TUD_OPT_RHPORT 1
304 #define TUD_RHPORT_MODE OPT_MODE_NONE
307#ifndef CFG_TUD_ENABLED
309 #define CFG_TUD_ENABLED (TUD_RHPORT_MODE & OPT_MODE_DEVICE)
312#ifndef CFG_TUD_MAX_SPEED
314 #define CFG_TUD_MAX_SPEED (TUD_RHPORT_MODE & OPT_MODE_SPEED_MASK)
318#define TUSB_OPT_DEVICE_ENABLED CFG_TUD_ENABLED
321#define TUD_OPT_HIGH_SPEED (CFG_TUD_MAX_SPEED ? (CFG_TUD_MAX_SPEED & OPT_MODE_HIGH_SPEED) : TUP_RHPORT_HIGHSPEED)
325#if defined(CFG_TUSB_RHPORT0_MODE) && ((CFG_TUSB_RHPORT0_MODE) & OPT_MODE_HOST)
326 #define TUH_RHPORT_MODE (CFG_TUSB_RHPORT0_MODE)
327 #define TUH_OPT_RHPORT 0
328#elif defined(CFG_TUSB_RHPORT1_MODE) && ((CFG_TUSB_RHPORT1_MODE) & OPT_MODE_HOST)
329 #define TUH_RHPORT_MODE (CFG_TUSB_RHPORT1_MODE)
330 #define TUH_OPT_RHPORT 1
332 #define TUH_RHPORT_MODE OPT_MODE_NONE
335#ifndef CFG_TUH_ENABLED
337 #define CFG_TUH_ENABLED (TUH_RHPORT_MODE & OPT_MODE_HOST)
340#ifndef CFG_TUH_MAX_SPEED
342 #define CFG_TUH_MAX_SPEED (TUH_RHPORT_MODE & OPT_MODE_SPEED_MASK)
346#define TUSB_OPT_HOST_ENABLED CFG_TUH_ENABLED
349#define TUH_OPT_HIGH_SPEED (CFG_TUH_MAX_SPEED ? (CFG_TUH_MAX_SPEED & OPT_MODE_HIGH_SPEED) : TUP_RHPORT_HIGHSPEED)
360#if TUD_OPT_HIGH_SPEED && TU_CHECK_MCU(OPT_MCU_LPC54XXX, OPT_MCU_LPC55XX)
361 #define TUP_MCU_STRICT_ALIGN 1
363 #define TUP_MCU_STRICT_ALIGN 0
372#ifndef CFG_TUSB_DEBUG
373 #define CFG_TUSB_DEBUG 0
377#ifndef CFG_TUH_LOG_LEVEL
378 #define CFG_TUH_LOG_LEVEL 2
382#ifndef CFG_TUD_LOG_LEVEL
383 #define CFG_TUD_LOG_LEVEL 2
388#ifndef CFG_TUSB_MEM_SECTION
389 #define CFG_TUSB_MEM_SECTION
394#ifndef CFG_TUSB_MEM_ALIGN
395 #define CFG_TUSB_MEM_ALIGN TU_ATTR_ALIGNED(4)
400 #define CFG_TUSB_OS OPT_OS_NONE
403#ifndef CFG_TUSB_OS_INC_PATH
404 #define CFG_TUSB_OS_INC_PATH
412#ifndef CFG_TUD_MEM_SECTION
413 #define CFG_TUD_MEM_SECTION CFG_TUSB_MEM_SECTION
417#ifndef CFG_TUD_MEM_ALIGN
418 #define CFG_TUD_MEM_ALIGN CFG_TUSB_MEM_ALIGN
421#ifndef CFG_TUD_ENDPOINT0_SIZE
422 #define CFG_TUD_ENDPOINT0_SIZE 64
425#ifndef CFG_TUD_INTERFACE_MAX
426 #define CFG_TUD_INTERFACE_MAX 16
430#ifndef CFG_TUD_ENDPPOINT_MAX
431 #define CFG_TUD_ENDPPOINT_MAX TUP_DCD_ENDPOINT_MAX
434#if CFG_TUD_ENDPPOINT_MAX > TUP_DCD_ENDPOINT_MAX
435 #error "CFG_TUD_ENDPPOINT_MAX must be less than or equal to TUP_DCD_ENDPOINT_MAX"
439#ifndef CFG_TUD_TEST_MODE
440 #define CFG_TUD_TEST_MODE 0
445 #define CFG_TUD_BTH 0
448#if CFG_TUD_BTH && !defined(CFG_TUD_BTH_ISO_ALT_COUNT)
449#error CFG_TUD_BTH_ISO_ALT_COUNT must be defined to tell Bluetooth driver the number of ISO endpoints to use
453 #define CFG_TUD_CDC 0
457 #define CFG_TUD_MSC 0
461 #define CFG_TUD_HID 0
465 #define CFG_TUD_AUDIO 0
469 #define CFG_TUD_VIDEO 0
473 #define CFG_TUD_MIDI 0
476#ifndef CFG_TUD_VENDOR
477 #define CFG_TUD_VENDOR 0
480#ifndef CFG_TUD_USBTMC
481 #define CFG_TUD_USBTMC 0
484#ifndef CFG_TUD_DFU_RUNTIME
485 #define CFG_TUD_DFU_RUNTIME 0
489 #define CFG_TUD_DFU 0
492#ifndef CFG_TUD_ECM_RNDIS
494 #warning "CFG_TUD_NET is renamed to CFG_TUD_ECM_RNDIS"
495 #define CFG_TUD_ECM_RNDIS CFG_TUD_NET
497 #define CFG_TUD_ECM_RNDIS 0
502 #define CFG_TUD_NCM 0
509 #ifndef CFG_TUH_DEVICE_MAX
510 #define CFG_TUH_DEVICE_MAX 1
513 #ifndef CFG_TUH_ENUMERATION_BUFSIZE
514 #define CFG_TUH_ENUMERATION_BUFSIZE 256
519#ifndef CFG_TUH_MEM_SECTION
520 #define CFG_TUH_MEM_SECTION CFG_TUSB_MEM_SECTION
524#ifndef CFG_TUH_MEM_ALIGN
525 #define CFG_TUH_MEM_ALIGN CFG_TUSB_MEM_ALIGN
531 #define CFG_TUH_HUB 0
535 #define CFG_TUH_CDC 0
539#ifndef CFG_TUH_CDC_FTDI
540 #define CFG_TUH_CDC_FTDI 0
544#ifndef CFG_TUH_CDC_FTDI_VID_PID_LIST
545 #define CFG_TUH_CDC_FTDI_VID_PID_LIST \
546 {0x0403, 0x6001}, {0x0403, 0x6006}, {0x0403, 0x6010}, {0x0403, 0x6011}, \
547 {0x0403, 0x6014}, {0x0403, 0x6015}, {0x0403, 0x8372}, {0x0403, 0xFBFA}, \
552#ifndef CFG_TUH_CDC_CP210X
553 #define CFG_TUH_CDC_CP210X 0
557#ifndef CFG_TUH_CDC_CP210X_VID_PID_LIST
558 #define CFG_TUH_CDC_CP210X_VID_PID_LIST \
559 {0x10C4, 0xEA60}, {0x10C4, 0xEA70}
562#ifndef CFG_TUH_CDC_CH34X
564 #define CFG_TUH_CDC_CH34X 0
568#ifndef CFG_TUH_CDC_CH34X_VID_PID_LIST
569 #define CFG_TUH_CDC_CH34X_VID_PID_LIST \
570 { 0x1a86, 0x5523 }, \
571 { 0x1a86, 0x7522 }, \
572 { 0x1a86, 0x7523 }, \
573 { 0x1a86, 0xe523 }, \
574 { 0x4348, 0x5523 }, \
575 { 0x2184, 0x0057 }, \
580 #define CFG_TUH_HID 0
584 #define CFG_TUH_MIDI 0
588 #define CFG_TUH_MSC 0
591#ifndef CFG_TUH_VENDOR
592 #define CFG_TUH_VENDOR 0
595#ifndef CFG_TUH_API_EDPT_XFER
596 #define CFG_TUH_API_EDPT_XFER 0
603#ifndef CFG_TUC_ENABLED
604#define CFG_TUC_ENABLED 0
606#define tuc_int_handler(_p)
612#if CFG_TUD_ENDPOINT0_SIZE > 64
613 #error Control Endpoint Max Packet Size cannot be larger than 64
int make_iso_compilers_happy