# SPDX-License-Identifier: Apache-2.0

config UART_NATIVE_POSIX
	bool "UART driver for native_posix"
	select SERIAL_HAS_DRIVER
	depends on ARCH_POSIX
	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 "Enable 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
