# Kconfig - console driver configuration options

#
# Copyright (c) 2017 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

menuconfig TELNET_CONSOLE
	bool "Enable a super basic telnet console service"
	select NETWORKING
	select NET_TCP
	help
	  This option enables telnet as a network console service. It is for
	  now a very basic implementation of the telnet protocol. Currently,
	  it is basically just a redirection of the Zephyr console through TCP.
	  It nicely works along with another console driver (like uart), twist
	  being that it will take over the output if only a successful
	  connection to its port is done.

if TELNET_CONSOLE

config TELNET_CONSOLE_PORT
	int "Telnet console port number"
	default 23
	help
	  This option is used to configure on which port telnet is going
	  to be bound.

config TELNET_CONSOLE_LINE_BUF_SIZE
	int "Telnet console line buffer size"
	default 64
	help
	  This option can be used to modify the size of the buffer storing
	  console output line, prior to sending it through the network.
	  Of course an output line can be longer than such size, it just
	  means sending it will start as soon as it reaches this size.
	  It really depends on what type of output is expected.
	  A lot of short lines: better reduce this value. On the contrary,
	  raise it.

config TELNET_CONSOLE_LINE_BUF_NUMBERS
	int "Telnet console line buffers"
	default 4
	help
	  This option can be used to modify the amount of line buffers the
	  driver can use. It really depends on how much output is meant to be
	  sent, depending on the system load etc. You can play on both
	  TELNET_CONSOLE_LINE_BUF_SIZE and this current option to get the
	  best possible buffer settings you need.

config TELNET_CONSOLE_SEND_TIMEOUT
	int "Telnet console line send timeout"
	default 100
	help
	  This option can be used to modify the duration of the timer that kick
	  in when a line buffer is not empty but did not yet meet the line feed.

config TELNET_CONSOLE_SEND_THRESHOLD
	int "Telnet console line send threshold"
	default 5
	help
	  This option can be used to modify the minimal amount of a line buffer
	  that can be sent by the telnet server when nothing has happened for
	  a little while (see TELNET_CONSOLE_SEND_TIMEOUT) and when the line
	  buffer did not meet the line feed yet.

config TELNET_CONSOLE_SUPPORT_COMMAND
	bool "Add support for telnet commands (IAC) [Experimental]"
	help
	  Current support is so limited it's not interesting to enable it.
	  However, if proven to be needed at some point, it will be possible
	  to extend such support.

config TELNET_CONSOLE_THREAD_STACK
	int "Telnet console inner thread stack size"
	default 1024
	help
	  This option helps to fine-tune telnet's inner thread stack size.

config TELNET_CONSOLE_PRIO
	int "Telnet console inner thread priority"
	default 7
	help
	  This option helps to fine-tune telnet's inner thread priority.

config SYS_LOG_TELNET_CONSOLE_LEVEL
	int "Telnet console log level"
	default 0
	depends on SYS_LOG
	help
	  Sets log level for telnet console (for telnet console dev only)

	  Levels are:

	  - 0 OFF, do not write

	  - 1 ERROR, only write SYS_LOG_ERR

	  - 2 WARNING, write SYS_LOG_WRN in addition to previous level

	  - 3 INFO, write SYS_LOG_INF in addition to previous levels

	  - 4 DEBUG, write SYS_LOG_DBG in addition to previous levels

config TELNET_CONSOLE_DEBUG_DEEP
	bool "Forward output to original console handler"
	depends on UART_CONSOLE
	help
	  For telnet developers only, this will forward each output to
	  original console handler. So if by chance telnet seems silent,
	  at least things will be printed to original handler, usually
	  UART console.

config TELNET_CONSOLE_INIT_PRIORITY
	int "Telnet console init priority"
	default 99
	help
	  Telnet console driver initialization priority. Note that Telnet works
	  on application level. Usually, you won't have to tweak this.

endif
