# 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.

module = TELNET_CONSOLE
module-str = telnet console
source "subsys/logging/Kconfig.template.log_config"

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
