menu "TinyUSB Stack"
    visible if USB_OTG_SUPPORTED

    config TINYUSB
        bool "Use TinyUSB Stack"
        depends on USB_OTG_SUPPORTED
        default n
        help
            Enable TinyUSB stack support.
            Note that, esp-idf only uses the device stack provided by TinyUSB.

    if TINYUSB
        config TINYUSB_DEBUG_LEVEL
            int "TinyUSB log level (0-3)"
            default 0
            range 0 3
            help
                Specify verbosity of TinyUSB log output.

        menu "TinyUSB task configuration"
            config TINYUSB_NO_DEFAULT_TASK
                bool "Do not create a TinyUSB task"
                default n
                help
                    This option allows to not create the FreeRTOS task during the driver initialization.
                    User will have to handle TinyUSB events manually.

            config TINYUSB_TASK_PRIORITY
                int "TinyUSB task priority"
                default 5
                depends on !TINYUSB_NO_DEFAULT_TASK
                help
                    Set the priority of the default TinyUSB main task.

            config TINYUSB_TASK_STACK_SIZE
                int "TinyUSB task stack size (bytes)"
                default 4096
                depends on !TINYUSB_NO_DEFAULT_TASK
                help
                    Set the stack size of the default TinyUSB main task.
        endmenu

        menu "Descriptor configuration"
            config TINYUSB_DESC_USE_ESPRESSIF_VID
                bool "VID: Use Espressif's vendor ID"
                default y
                help
                    Enable this option, USB device will use Espressif's vendor ID as its VID.
                    This is helpful at product develop stage.

            config TINYUSB_DESC_CUSTOM_VID
                hex "VID: Custom vendor ID"
                default 0x1234
                depends on !TINYUSB_DESC_USE_ESPRESSIF_VID
                help
                    Custom Vendor ID.

            config TINYUSB_DESC_USE_DEFAULT_PID
                bool "PID: Use a default PID assigned to TinyUSB"
                default y
                help
                    Default TinyUSB PID assigning uses values 0x4000...0x4007.

            config TINYUSB_DESC_CUSTOM_PID
                hex "PID: Custom product ID"
                default 0x5678
                depends on !TINYUSB_DESC_USE_DEFAULT_PID
                help
                    Custom Product ID.

            config TINYUSB_DESC_BCD_DEVICE
                hex "bcdDevice"
                default 0x0100
                help
                    Version of the firmware of the USB device.

            config TINYUSB_DESC_MANUFACTURER_STRING
                string "Manufacturer name"
                default "Espressif Systems"
                help
                    Name of the manufacturer of the USB device.

            config TINYUSB_DESC_PRODUCT_STRING
                string "Product name"
                default "Espressif Device"
                help
                    Name of the USB device.

            config TINYUSB_DESC_SERIAL_STRING
                string "Serial string"
                default "123456"
                help
                    Serial number of the USB device.

            config TINYUSB_DESC_CDC_STRING
                depends on TINYUSB_CDC_ENABLED
                string "CDC Device String"
                default "Espressif CDC Device"
                help
                    Name of the CDC device.

            config TINYUSB_DESC_MSC_STRING
                depends on TINYUSB_MSC_ENABLED
                string "MSC Device String"
                default "Espressif MSC Device"
                help
                    Name of the MSC device.

            config TINYUSB_DESC_HID_STRING
                depends on TINYUSB_HID_ENABLED
                string "HID Device String"
                default "Espressif HID Device"
                help
                    Name of the HID device
        endmenu # "Descriptor configuration"

        menu "Massive Storage Class (MSC)"
            config TINYUSB_MSC_ENABLED
                bool "Enable TinyUSB MSC feature"
                default n
                help
                    Enable TinyUSB MSC feature.

            config TINYUSB_MSC_BUFSIZE
                depends on TINYUSB_MSC_ENABLED
                int "MSC FIFO size"
                default 512
                range 64 10000
                help
                    MSC FIFO size, in bytes.
        endmenu # "Massive Storage Class"

        menu "Communication Device Class (CDC)"
            config TINYUSB_CDC_ENABLED
                bool "Enable TinyUSB CDC feature"
                default n
                help
                    Enable TinyUSB CDC feature.

            config TINYUSB_CDC_RX_BUFSIZE
                depends on TINYUSB_CDC_ENABLED
                int "CDC FIFO size of RX channel"
                default 64
                range 64 10000
                help
                    CDC FIFO size of RX channel.

            config TINYUSB_CDC_TX_BUFSIZE
                depends on TINYUSB_CDC_ENABLED
                int "CDC FIFO size of TX channel"
                default 64
                help
                    CDC FIFO size of TX channel.
        endmenu # "Communication Device Class"
    endif # TINYUSB

endmenu # "TinyUSB Stack"
