# Kconfig - console driver configuration options

#
# Copyright (c) 2014-2015 Wind River Systems, Inc.
# Copyright (c) 2016 Cadence Design Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#

# Setting shared by different subsystems
config UART_CONSOLE_ON_DEV_NAME
	string "Device Name of UART Device for UART Console"
	default "$(dt_str_val,DT_UART_CONSOLE_ON_DEV_NAME)" if HAS_DTS
	default "UART_0"
	depends on (UART_CONSOLE || CONSOLE_SUBSYS)
	help
	  This option specifies the name of UART device to be used for
	  UART console.

menuconfig CONSOLE
	bool "Console drivers"

if CONSOLE

config CONSOLE_INPUT_MAX_LINE_LEN
	int "Console maximum input line length"
	default 128
	help
	  This option can be used to modify the maximum length a console input
	  can be.

config CONSOLE_HAS_DRIVER
	bool
	help
	  This is an option to be enabled by console drivers to signal
	  that some kind of console exists.

config CONSOLE_HANDLER
	bool "Enable console input handler"
	depends on UART_CONSOLE
	select UART_INTERRUPT_DRIVEN
	help
	  This option enables console input handler allowing to write simple
	  interaction between serial console and the OS.

config UART_CONSOLE
	bool "Use UART for console"
	depends on SERIAL && SERIAL_HAS_DRIVER
	select CONSOLE_HAS_DRIVER
	help
	  Enable this option to use one UART for console. Make sure
	  CONFIG_UART_CONSOLE_ON_DEV_NAME is also set correctly.

config UART_CONSOLE_INIT_PRIORITY
	int "Init priority"
	default 60
	depends on UART_CONSOLE
	help
	  Device driver initialization priority.
	  Console has to be initialized after the UART driver
	  it uses.

config UART_CONSOLE_DEBUG_SERVER_HOOKS
	bool "Debug server hooks in debug console"
	depends on UART_CONSOLE
	help
	  This option allows a debug server agent such as GDB to take over the
	  handling of traffic that goes through the console logic. The debug
	  server looks at characters received and decides to handle them itself if
	  they are some sort of control characters, or let the regular console
	  code handle them if they are of no special significance to it.

config UART_CONSOLE_MCUMGR
	bool "Enable UART console mcumgr passthrough"
	depends on UART_CONSOLE
	help
	  Enables the UART console to receive mcumgr frames for image upgrade
	  and device management.  When enabled, the UART console does not
	  process mcumgr frames, but it hands them up to a higher level module
	  (e.g., the shell).  If unset, incoming mcumgr frames are dropped.

config USB_UART_CONSOLE
	bool "Use USB port for console outputs"
	select UART_CONSOLE
	select USB_CDC_ACM
	help
	  Enable this option to use the USB UART for console output. The output
	  can be viewed from the USB host via /dev/ttyACM* port. Note that console
	  inputs from the USB UART are not functional yet. Also since the USB
	  layer currently doesn't support multiple interfaces, this shouldn't be
	  selected in conjunction with, say, USB Mass Storage.

config USB_UART_DTR_WAIT
	bool "Wait on DTR control signal"
	depends on USB_UART_CONSOLE
	help
	  Enable this option to use flow control on the console. The uart console
	  waits until the DTR is asserted by the host.
	  Note: Disabling this might lead to missing console prints.

config RAM_CONSOLE
	bool "Use RAM console"
	select CONSOLE_HAS_DRIVER
	help
	  Emit console messages to a RAM buffer "ram_console" which can
	  be examined at runtime with a debugger. Useful in board bring-up
	  if there aren't any working serial drivers.

config RAM_CONSOLE_BUFFER_SIZE
	int "Ram Console buffer size"
	default 1024
	depends on RAM_CONSOLE
	help
	  Size of the RAM console buffer. Messages will wrap around if the
	  length is exceeded.

config RTT_CONSOLE
	bool "Use RTT console"
	depends on USE_SEGGER_RTT
	select CONSOLE_HAS_DRIVER
	help
	  Emit console messages to a RAM buffer that is then read by the
	  Segger J-Link software and displayed on a computer in real-time.
	  Requires support for Segger J-Link on the companion IC onboard.

if RTT_CONSOLE

config RTT_TX_RETRY_CNT
	int "Number of TX retries"
	default 2
	help
	  Number of TX retries before dropping the byte and assuming that
	  RTT session is inactive.

config RTT_TX_RETRY_DELAY_MS
	int "Delay between TX retries in milliseconds"
	default 2
	help
	  Sleep period between TX retry attempts. During RTT session, host pulls data
	  periodically. Period starts from 1-2 milliseconds and can be increased
	  if traffic on RTT increases (also from host to device). In case of
	  heavy traffic data can be lost and it may be necessary to increase
	  delay or number of retries.

config RTT_TX_RETRY_IN_INTERRUPT
	bool "Busy wait in the interrupt context for TX retry"
	help
	  If enabled RTT console will busy wait between TX retries when console
	  assumes that RTT session is active. In case of heavy traffic data can
	  be lost and it may be necessary to increase delay or number of
	  retries.

endif

config IPM_CONSOLE_SENDER
	bool "Inter-processor Mailbox console sender"
	select CONSOLE_HAS_DRIVER
	help
	  Enable the sending side of IPM console

config IPM_CONSOLE_RECEIVER
	bool "Inter-processor Mailbox console receiver"
	select RING_BUFFER
	help
	  Enable the receiving side of IPM console

config IPM_CONSOLE_STACK_SIZE
	int "Stack size for IPM console receiver thread"
	depends on IPM_CONSOLE_RECEIVER
	default 512
	help
	  Each instance of the IPM console receiver driver creates a worker
	  thread to print out incoming messages from the remote CPU. Specify the
	  stack size for these threads here.

config IPM_CONSOLE_INIT_PRIORITY
	int "IPM console init priority"
	default 60
	depends on IPM_CONSOLE_SENDER || IPM_CONSOLE_RECEIVER
	help
	  Device driver initialization priority.
	  Console has to be initialized after the IPM subsystem
	  it uses.

config	UART_PIPE
	bool "Enable pipe UART driver"
	select UART_INTERRUPT_DRIVEN
	help
	  Enable pipe UART driver. This driver allows application to communicate
	  over UART with custom defined protocol. Driver doesn't inspect received
	  data (as contrary to console UART driver) and all aspects of received
	  protocol data are handled by application provided callback.

config UART_PIPE_ON_DEV_NAME
	string "Device Name of UART Device for pipe UART"
	default "$(dt_str_val,DT_UART_PIPE_ON_DEV_NAME)" if HAS_DTS
	default "UART_0"
	depends on UART_PIPE
	help
	  This option specifies the name of UART device to be used
	  for pipe UART.

config UART_MCUMGR
	bool "Enable mcumgr UART driver"
	select UART_INTERRUPT_DRIVEN
	help
	  Enable the mcumgr UART driver. This driver allows the application to
	  communicate over UART using the mcumgr protocol for image upgrade and
	  device management. The driver doesn't inspect received data (as
	  contrary to console UART driver) and all aspects of received protocol
	  data are handled by an application provided callback.

if UART_MCUMGR

config UART_MCUMGR_ON_DEV_NAME
	string "Device Name of UART Device for mcumgr UART"
	default "$(dt_str_val,DT_UART_MCUMGR_ON_DEV_NAME)" if HAS_DTS
	default "UART_0"
	help
	  This option specifies the name of UART device to be used
	  for mcumgr UART.

config UART_MCUMGR_RX_BUF_SIZE
	int "Size of receive buffer for mcumgr fragments received over UART, in bytes"
	default 128
	help
	  Specifies the size of the mcumgr UART receive buffer, in bytes. This
	  value must be large enough to accommodate any line sent by an mcumgr
	  client.

config UART_MCUMGR_RX_BUF_COUNT
	int "Number of receive buffers for mcumgr fragments received over UART"
	default 2
	help
	  Specifies the number of the mcumgr UART receive buffers.  Receive
	  buffers hold received mcumgr fragments prior to reassembly.  This
	  setting's value must satisfy the following relation:
	  UART_MCUMGR_RX_BUF_COUNT * UART_MCUMGR_RX_BUF_SIZE >=
	  MCUMGR_SMP_UART_MTU

endif # UART_MCUMGR

config XTENSA_SIM_CONSOLE
	bool "Use Xtensa simulator console"
	depends on SIMULATOR_XTENSA
	select CONSOLE_HAS_DRIVER
	default y
	help
	  Use simulator console to print messages.

config NATIVE_POSIX_CONSOLE
	bool "Use the host terminal for console"
	depends on ARCH_POSIX
	select CONSOLE_HAS_DRIVER
	help
	  Use the host terminal (where the native_posix binary was launched) for the
	  Zephyr console

config NATIVE_POSIX_STDIN_CONSOLE
	bool "Use the host terminal stdin"
	depends on NATIVE_POSIX_CONSOLE
	help
	  No current use. Kept only as there is plans to start using these
	  drivers with the shell

config NATIVE_STDIN_POLL_PERIOD
	int "Polling period for stdin"
	depends on NATIVE_POSIX_STDIN_CONSOLE
	default 20
	help
	  In ms, polling period for stdin

config NATIVE_STDIN_PRIO
	int "Priority of the stdin polling thread"
	depends on NATIVE_POSIX_STDIN_CONSOLE
	default 4
	help
	  Priority of the native stdin polling thread

config NATIVE_POSIX_STDOUT_CONSOLE
	bool "Print to the host terminal stdout"
	depends on NATIVE_POSIX_CONSOLE
	default y
	help
	  Zephyr's printk messages will be directed to the host terminal stdout.

config XTENSA_CONSOLE_INIT_PRIORITY
	int "Init priority"
	default 60
	depends on XTENSA_SIM_CONSOLE
	help
	  Device driver initialization priority.

config NATIVE_POSIX_CONSOLE_INIT_PRIORITY
	int "Init priority"
	default 60
	depends on NATIVE_POSIX_CONSOLE
	help
	  Device driver initialization priority.

source "drivers/console/Kconfig.telnet"
endif
