# SPDX-License-Identifier: Apache-2.0

config UART_NATIVE_POSIX
	bool "UART driver for native_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 native_posix was run, or into
	  one dedicated pseudoterminal for that UART.

if UART_NATIVE_POSIX

choice
	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_posix
	  backend which may use the calling 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_posix 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. This option should NOT be used in conjunction with
	  NATIVE_POSIX_STDIN_CONSOLE
	  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_posix 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
