# Copyright (c) 2016 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

config HAS_SEGGER_RTT
	bool

config USE_SEGGER_RTT
	bool "Enable SEGGER RTT libraries."
	depends on HAS_SEGGER_RTT
	help
	  Enable Segger J-Link RTT libraries for platforms that support it.
	  Selection of this option enables use of RTT for various subsystems.
	  Note that by enabling this option, RTT buffers consume more RAM.

if USE_SEGGER_RTT

config SEGGER_SYSTEMVIEW
	bool "Segger SystemView support"
	select RTT_CONSOLE
	select THREAD_MONITOR
	select THREAD_STACK_INFO
	select TRACING

config SEGGER_SYSTEMVIEW_BOOT_ENABLE
	bool "Start logging SystemView events on system start"
	depends on SEGGER_SYSTEMVIEW

config SEGGER_SYSVIEW_RTT_BUFFER_SIZE
	int "Buffer size for SystemView RTT"
	depends on SEGGER_SYSTEMVIEW
	default 4096

config SEGGER_RTT_MAX_NUM_UP_BUFFERS
	int "Maximum number of up-buffers"
	default 3

config SEGGER_RTT_MAX_NUM_DOWN_BUFFERS
	int "Maximum number of down-buffers"
	default 3

config SEGGER_RTT_BUFFER_SIZE_UP
	int "Size of the buffer for terminal output of target, up to host"
	default 1024

config SEGGER_RTT_BUFFER_SIZE_DOWN
	int "Size of the buffer for terminal input of target, from host"
	default 16

config SEGGER_RTT_PRINTF_BUFFER_SIZE
	int "Size of buffer for RTT printf to bulk-send chars via RTT"
	default 64

choice
	prompt "Mode for pre-initialized terminal channel (buffer 0)"
	default SEGGER_RTT_MODE_NO_BLOCK_SKIP

config SEGGER_RTT_MODE_NO_BLOCK_SKIP
	bool "Skip. Do not block, output nothing."

config SEGGER_RTT_MODE_NO_BLOCK_TRIM
	bool "Trim: Do not block, output as much as fits."

config SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL
	bool "Block: Wait until there is space in the buffer."

endchoice

config SEGGER_RTT_MODE
	int 
	default 2 if SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL
	default 1 if SEGGER_RTT_MODE_NO_BLOCK_TRIM
	default 0

config SEGGER_RTT_MEMCPY_USE_BYTELOOP
	bool "Use a simple byte-loop instead of standard memcpy"

endif
