menu "Application Level Tracing"

    choice APPTRACE_DESTINATION1
        prompt "Data Destination 1"
        default APPTRACE_DEST_NONE
        help
            Select destination for application trace: JTAG or none (to disable).

        config APPTRACE_DEST_JTAG
            bool "JTAG"
            select APPTRACE_DEST_TRAX if IDF_TARGET_ARCH_XTENSA
            select APPTRACE_MEMBUFS_APPTRACE_PROTO_ENABLE
            select APPTRACE_ENABLE

        config APPTRACE_DEST_NONE
            bool "None"
    endchoice

    config APPTRACE_DEST_UART
        bool

    config APPTRACE_DEST_UART_NOUSB
        bool

    choice APPTRACE_DESTINATION2
        prompt "Data Destination 2"
        default APPTRACE_DEST_UART_NONE
        help
            Select destination for application trace: UART(XX) or none (to disable).

        config APPTRACE_DEST_UART0
            bool "UART0"
            select APPTRACE_ENABLE
            select APPTRACE_DEST_UART
            select APPTRACE_DEST_UART_NOUSB
            depends on (ESP_CONSOLE_UART_NUM !=0)

        config APPTRACE_DEST_UART1
            bool "UART1"
            select APPTRACE_ENABLE
            select APPTRACE_DEST_UART
            select APPTRACE_DEST_UART_NOUSB
            depends on (ESP_CONSOLE_UART_NUM !=1)

        config APPTRACE_DEST_UART2
            bool "UART2"
            select APPTRACE_ENABLE
            select APPTRACE_DEST_UART
            select APPTRACE_DEST_UART_NOUSB
            depends on (ESP_CONSOLE_UART_NUM !=2) && (SOC_UART_NUM > 2)

        config APPTRACE_DEST_USB_CDC
            bool "USB_CDC"
            select APPTRACE_ENABLE
            select APPTRACE_DEST_UART
            depends on !ESP_CONSOLE_USB_CDC && (IDF_TARGET_ESP32C3 || IDF_TARGET_ESP32S3) && !USB_ENABLED

        config APPTRACE_DEST_UART_NONE
            bool "None"
    endchoice

    config APPTRACE_UART_TX_GPIO
        int "UART TX on GPIO#"
        depends on APPTRACE_DEST_UART_NOUSB
        range 0 46
        default 12 if IDF_TARGET_ESP32
        default 12 if IDF_TARGET_ESP32C3
        default 12
        help
            This GPIO is used for UART TX pin.

    config APPTRACE_UART_RX_GPIO
        int "UART RX on GPIO#"
        depends on APPTRACE_DEST_UART_NOUSB
        range 0 46
        default 13 if IDF_TARGET_ESP32
        default 13 if IDF_TARGET_ESP32C3
        default 13
        help
            This GPIO is used for UART RX pin.

    config APPTRACE_UART_BAUDRATE
        int
        prompt "UART baud rate" if APPTRACE_DEST_UART
        depends on APPTRACE_DEST_UART
        default 1000000
        range 1200 8000000
        range 1200 1000000
        help
            This baud rate is used for UART.

            The app's maximum baud rate depends on the UART clock source. If Power Management is disabled,
            the UART clock source is the APB clock and all baud rates in the available range will be sufficiently
            accurate. If Power Management is enabled, REF_TICK clock source is used so the baud rate is divided
            from 1MHz. Baud rates above 1Mbps are not possible and values between 500Kbps and 1Mbps may not be
            accurate.

    config APPTRACE_UART_RX_BUFF_SIZE
        int
        prompt "UART RX ring buffer size" if APPTRACE_DEST_UART
        depends on APPTRACE_DEST_UART
        default 128
        range 64 32768
        help
            Size of the UART input ring buffer.
            This size related to the baudrate, system tick frequency and amount of data to transfer.
            The data placed to this buffer before sent out to the interface.

    config APPTRACE_UART_TX_BUFF_SIZE
        int
        prompt "UART TX ring buffer size" if APPTRACE_DEST_UART
        depends on APPTRACE_DEST_UART
        default 4096
        range 2048 32768
        help
            Size of the UART output ring buffer.
            This size related to the baudrate, system tick frequency and amount of data to transfer.

    config APPTRACE_UART_TX_MSG_SIZE
        int
        prompt "UART TX message size" if APPTRACE_DEST_UART
        depends on APPTRACE_DEST_UART
        default 128
        range 64 32768
        help
            Maximum size of the single message to transfer.

    config APPTRACE_UART_TASK_PRIO
        int
        prompt "UART Task Priority" if APPTRACE_DEST_UART
        default 1
        range 1 32
        help
            UART task priority. In case of high events rate,
            this parameter could be changed up to (configMAX_PRIORITIES-1).

    config APPTRACE_DEST_TRAX
        bool
        depends on IDF_TARGET_ARCH_XTENSA && !ESP32_TRAX && !ESP32S2_TRAX && !ESP32S3_TRAX
        select ESP32_MEMMAP_TRACEMEM
        select ESP32S2_MEMMAP_TRACEMEM
        select ESP32S3_MEMMAP_TRACEMEM
        select ESP32_MEMMAP_TRACEMEM_TWOBANKS
        select ESP32S2_MEMMAP_TRACEMEM_TWOBANKS
        select ESP32S3_MEMMAP_TRACEMEM_TWOBANKS
        default n
        help
            Enables/disable TRAX tracing HW.

    config APPTRACE_MEMBUFS_APPTRACE_PROTO_ENABLE
        bool
        default n
        help
            Enables/disable swapping memory buffers tracing protocol.

    config APPTRACE_ENABLE
        bool
        default n
        help
            Enables/disable application tracing module.

    config APPTRACE_LOCK_ENABLE
        bool
        default !APPTRACE_SV_ENABLE
        help
            Enables/disable application tracing module internal sync lock.

    config APPTRACE_ONPANIC_HOST_FLUSH_TMO
        int "Timeout for flushing last trace data to host on panic"
        depends on APPTRACE_ENABLE
        range -1 5000
        default -1
        help
            Timeout for flushing last trace data to host in case of panic. In ms.
            Use -1 to disable timeout and wait forever.

    config APPTRACE_POSTMORTEM_FLUSH_THRESH
        int "Threshold for flushing last trace data to host on panic"
        depends on APPTRACE_ENABLE
        range 0 16384
        default 0
        help
            Threshold for flushing last trace data to host on panic in post-mortem mode.
            This is minimal amount of data needed to perform flush. In bytes.

    config APPTRACE_BUF_SIZE
        int "Size of the apptrace buffer"
        depends on APPTRACE_MEMBUFS_APPTRACE_PROTO_ENABLE && !APPTRACE_DEST_TRAX
        default 16384
        help
            Size of the memory buffer for trace data in bytes.

    config APPTRACE_PENDING_DATA_SIZE_MAX
        int "Size of the pending data buffer"
        depends on APPTRACE_MEMBUFS_APPTRACE_PROTO_ENABLE
        default 0
        help
            Size of the buffer for events in bytes. It is useful for buffering events from
            the time critical code (scheduler, ISRs etc). If this parameter is 0 then
            events will be discarded when main HW buffer is full.

    menu "FreeRTOS SystemView Tracing"
        depends on APPTRACE_ENABLE
        config APPTRACE_SV_ENABLE
            bool "SystemView Tracing Enable"
            depends on APPTRACE_ENABLE
            default n
            help
                Enables supporrt for SEGGER SystemView tracing functionality.

        choice APPTRACE_SV_DEST
            prompt "SystemView destination"
            depends on APPTRACE_SV_ENABLE
            default APPTRACE_SV_DEST_JTAG
            help
                SystemView witt transfer data trough defined interface.

            config APPTRACE_SV_DEST_JTAG
                bool "Data destination JTAG"
                depends on  !PM_ENABLE && !APPTRACE_DEST_NONE
                help
                    Send SEGGER SystemView events through JTAG interface.

            config APPTRACE_SV_DEST_UART
                bool "Data destination UART"
                depends on APPTRACE_DEST_UART
                help
                    Send SEGGER SystemView events through UART interface.

        endchoice

        choice APPTRACE_SV_CPU
            prompt "CPU to trace"
            depends on APPTRACE_SV_DEST_UART && !FREERTOS_UNICORE
            default APPTRACE_SV_DEST_CPU_0
            help
                Define the CPU to trace by SystemView.

            config APPTRACE_SV_DEST_CPU_0
                bool "CPU0"
                help
                    Send SEGGER SystemView events for Pro CPU.

            config APPTRACE_SV_DEST_CPU_1
                bool "CPU1"
                help
                    Send SEGGER SystemView events for App CPU.

        endchoice


        choice APPTRACE_SV_TS_SOURCE
            prompt "Timer to use as timestamp source"
            depends on APPTRACE_SV_ENABLE
            default APPTRACE_SV_TS_SOURCE_CCOUNT if FREERTOS_UNICORE && !PM_ENABLE && !IDF_TARGET_ESP32C3
            default APPTRACE_SV_TS_SOURCE_GPTIMER if !FREERTOS_UNICORE && !PM_ENABLE && !IDF_TARGET_ESP32C3
            default APPTRACE_SV_TS_SOURCE_ESP_TIMER if PM_ENABLE || IDF_TARGET_ESP32C3
            help
                SystemView needs to use a hardware timer as the source of timestamps
                when tracing. This option selects the timer for it.

            config APPTRACE_SV_TS_SOURCE_CCOUNT
                bool "CPU cycle counter (CCOUNT)"
                depends on FREERTOS_UNICORE && !PM_ENABLE && !IDF_TARGET_ESP32C3

            config APPTRACE_SV_TS_SOURCE_GPTIMER
                bool "General Purpose Timer (Timer Group)"
                depends on !PM_ENABLE && !IDF_TARGET_ESP32C3

            config APPTRACE_SV_TS_SOURCE_ESP_TIMER
                bool "esp_timer high resolution timer"

        endchoice

        config APPTRACE_SV_MAX_TASKS
            int "Maximum supported tasks"
            depends on APPTRACE_SV_ENABLE
            range 1 64
            default 16
            help
                Configures maximum supported tasks in sysview debug

        config APPTRACE_SV_BUF_WAIT_TMO
            int "Trace buffer wait timeout"
            depends on APPTRACE_SV_ENABLE
            default 500
            help
                Configures timeout (in us) to wait for free space in trace buffer.
                Set to -1 to wait forever and avoid lost events.

        config APPTRACE_SV_EVT_OVERFLOW_ENABLE
            bool "Trace Buffer Overflow Event"
            depends on APPTRACE_SV_ENABLE
            default y
            help
                Enables "Trace Buffer Overflow" event.

        config APPTRACE_SV_EVT_ISR_ENTER_ENABLE
            bool "ISR Enter Event"
            depends on APPTRACE_SV_ENABLE
            default y
            help
                Enables "ISR Enter" event.

        config APPTRACE_SV_EVT_ISR_EXIT_ENABLE
            bool "ISR Exit Event"
            depends on APPTRACE_SV_ENABLE
            default y
            help
                Enables "ISR Exit" event.

        config APPTRACE_SV_EVT_ISR_TO_SCHED_ENABLE
            bool "ISR Exit to Scheduler Event"
            depends on APPTRACE_SV_ENABLE
            default y
            help
                Enables "ISR to Scheduler" event.

        config APPTRACE_SV_EVT_TASK_START_EXEC_ENABLE
            bool "Task Start Execution Event"
            depends on APPTRACE_SV_ENABLE
            default y
            help
                Enables "Task Start Execution" event.

        config APPTRACE_SV_EVT_TASK_STOP_EXEC_ENABLE
            bool "Task Stop Execution Event"
            depends on APPTRACE_SV_ENABLE
            default y
            help
                Enables "Task Stop Execution" event.

        config APPTRACE_SV_EVT_TASK_START_READY_ENABLE
            bool "Task Start Ready State Event"
            depends on APPTRACE_SV_ENABLE
            default y
            help
                Enables "Task Start Ready State" event.

        config APPTRACE_SV_EVT_TASK_STOP_READY_ENABLE
            bool "Task Stop Ready State Event"
            depends on APPTRACE_SV_ENABLE
            default y
            help
                Enables "Task Stop Ready State" event.

        config APPTRACE_SV_EVT_TASK_CREATE_ENABLE
            bool "Task Create Event"
            depends on APPTRACE_SV_ENABLE
            default y
            help
                Enables "Task Create" event.

        config APPTRACE_SV_EVT_TASK_TERMINATE_ENABLE
            bool "Task Terminate Event"
            depends on APPTRACE_SV_ENABLE
            default y
            help
                Enables "Task Terminate" event.

        config APPTRACE_SV_EVT_IDLE_ENABLE
            bool "System Idle Event"
            depends on APPTRACE_SV_ENABLE
            default y
            help
                Enables "System Idle" event.

        config APPTRACE_SV_EVT_TIMER_ENTER_ENABLE
            bool "Timer Enter Event"
            depends on APPTRACE_SV_ENABLE
            default y
            help
                Enables "Timer Enter" event.

        config APPTRACE_SV_EVT_TIMER_EXIT_ENABLE
            bool "Timer Exit Event"
            depends on APPTRACE_SV_ENABLE
            default y
            help
                Enables "Timer Exit" event.

    endmenu

    config APPTRACE_GCOV_ENABLE
        bool "GCOV to Host Enable"
        depends on APPTRACE_ENABLE && !APPTRACE_SV_ENABLE
        select ESP_DEBUG_STUBS_ENABLE
        default n
        help
            Enables support for GCOV data transfer to host.

    config APPTRACE_GCOV_DUMP_TASK_STACK_SIZE
        int "Gcov dump task stack size"
        depends on APPTRACE_GCOV_ENABLE
        default 2048
        help
            Configures stack size of Gcov dump task

endmenu