# Copyright (c) 2023 Trackunit Corporation
# SPDX-License-Identifier: Apache-2.0

config MODEM_BACKEND_TTY
	bool "Modem TTY backend module"
	select MODEM_PIPE
	depends on ARCH_POSIX

config MODEM_BACKEND_UART
	bool "Modem UART backend module"
	select MODEM_PIPE
	select RING_BUFFER
	depends on UART_INTERRUPT_DRIVEN || UART_ASYNC_API

if MODEM_BACKEND_UART

config MODEM_BACKEND_UART_ISR
	bool "Modem UART backend module interrupt driven implementation"
	default y if UART_INTERRUPT_DRIVEN

config MODEM_BACKEND_UART_ASYNC
	bool "Modem UART backend module async implementation"
	default y if UART_ASYNC_API

if MODEM_BACKEND_UART_ISR

config MODEM_BACKEND_UART_ISR_RECEIVE_IDLE_TIMEOUT_MS
	int "Modem ISR UART delay between first byte received and RECEIVE_READY pipe event"
	default 20
	help
	  This defines the delay, in milliseconds, that the backend waits
	  when receiving a byte before sending the RECEIVE_READY pipe event.
	  The backend will anyway send the event before this delay if buffer space runs out.
	  A good value is ~90% the time it takes to fill half the receive buffer.
	  It can be calculated as follows:
	  (<UART receive_buf_size> / 2) / (<UART baud rate> / <UART bits per byte>) * <ms per sec>
	  By default (for the modem_cellular driver): (512 / 2) / (115200 / 10) * 1000 = 22,222 => 20

endif

if MODEM_BACKEND_UART_ASYNC

config MODEM_BACKEND_UART_ASYNC_TRANSMIT_TIMEOUT_MS
	int "Modem async UART transmit timeout in milliseconds"
	default 1000

config MODEM_BACKEND_UART_ASYNC_RECEIVE_IDLE_TIMEOUT_MS
	int "Modem async UART receive idle timeout in milliseconds"
	default 30

config MODEM_BACKEND_UART_ASYNC_HWFC
	bool "Hardware flow control (HWFC) for the modem async UART backend"
	select EXPERIMENTAL

if MODEM_BACKEND_UART_ASYNC_HWFC

config MODEM_BACKEND_UART_ASYNC_HWFC_BUFFER_COUNT
	int "Modem async UART HWFC buffer count"
	range 2 4
	default 3

endif # MODEM_BACKEND_UART_ASYNC_HWFC

endif # MODEM_BACKEND_UART_ASYNC

endif # MODEM_BACKEND_UART
