# SPDX-License-Identifier: Apache-2.0

config UART_NATIVE_POSIX
	bool "UART driver for native_sim/posix"
	default y
	depends on DT_HAS_ZEPHYR_NATIVE_POSIX_UART_ENABLED
	select SERIAL_HAS_DRIVER
	help
	  This enables a UART driver for the POSIX ARCH with up to 2 UARTs.
	  For the first UART port, the driver can be configured
	  to either connect to the terminal from which the executable was run, or into
	  one dedicated pseudoterminal for that UART.

if UART_NATIVE_POSIX

choice NATIVE_UART_0
	prompt "Native UART Port 0 connection"
	default NATIVE_UART_0_ON_OWN_PTY

config NATIVE_UART_0_ON_OWN_PTY
	bool "Connect the UART to its own pseudo terminal"
	help
	  Connect this UART to its own pseudoterminal. This is the preferred
	  option for users who want to use Zephyr's shell.
	  Moreover this option does not conflict with any other native
	  backend which may use the invoking shell standard input/output.

config NATIVE_UART_0_ON_STDINOUT
	bool "Connect the UART to the invoking shell stdin/stdout"
	help
	  Connect this UART to the stdin & stdout of the calling shell/terminal
	  which invoked the native executable. This is good enough for
	  automated testing, or when feeding from a file/pipe.
	  Note that other, non UART messages, will also be printed to the
	  terminal.
	  It is strongly discouraged to try to use this option with the new
	  shell interactively, as the default terminal configuration is NOT
	  appropriate for interactive use.

endchoice

config UART_NATIVE_WAIT_PTS_READY_ENABLE
	bool "Support waiting for pseudo terminal client readiness"
	depends on NATIVE_UART_0_ON_OWN_PTY || UART_NATIVE_POSIX_PORT_1_ENABLE
	help
	  When this option is selected a new command line switch is provided:
	  ``--wait_uart``
	  When ``--wait_uart`` is used, writes to the UART will be held until a
	  client has connected to the slave side of the pseudoterminal.
	  Otherwise writes are sent irrespectively.

config UART_NATIVE_POSIX_PORT_1_ENABLE
	bool "Second UART port"
	help
	  Useful if you need to have another serial connection to host.
	  This is used for example in PPP (Point-to-Point Protocol)
	  implementation.

config NATIVE_UART_AUTOATTACH_DEFAULT_CMD
	string "Default command to attach the UART to a new terminal"
	default "xterm -e screen %s &"
	help
	  If the native executable is called with the --attach_uart
	  command line option, this will be the default command which will be
	  run to attach a new terminal to the 1st UART.
	  Note that this command must have one, and only one, '%s' as
	  placeholder for the pseudoterminal device name (e.g. /dev/pts/35)
	  This is only applicable if the UART_0 is configured to use its own
	  PTY with NATIVE_UART_0_ON_OWN_PTY.
	  The 2nd UART will not be affected by this option.
	  If you are using GNOME, then you can use this command string
	  'gnome-terminal -- screen %s'

endif # UART_NATIVE_POSIX
