# 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"
	default n
	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]"
	default n
	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
	default n
	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
