# 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

# Workaround for not being able to have commas in macro arguments
DT_CHOSEN_Z_CONSOLE := zephyr,console

config UART_CONSOLE_ON_DEV_NAME
	string "Device Name of UART Device for UART Console"
	default "$(dt_chosen_label,$(DT_CHOSEN_Z_CONSOLE))" 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 95 if USB_UART_CONSOLE
	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 2048 if COVERAGE
	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 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.

# Workaround for not being able to have commas in macro arguments
DT_CHOSEN_Z_UART_PIPE := zephyr,uart-pipe

config UART_PIPE_ON_DEV_NAME
	string "Device Name of UART Device for pipe UART"
	default "$(dt_chosen_label,$(DT_CHOSEN_Z_UART_PIPE))" 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

# Workaround for not being able to have commas in macro arguments
DT_CHOSEN_Z_UART_PIPE := zephyr,uart-mcumgr

config UART_MCUMGR_ON_DEV_NAME
	string "Device Name of UART Device for mcumgr UART"
	default "$(dt_chosen_label,$(DT_CHOSEN_Z_UART_PIPE))" 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_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.

module = UART_CONSOLE
module-str = UART console
source "subsys/logging/Kconfig.template.log_config"

endif
