# Copyright Runtime.io 2018. All rights reserved.
# Copyright Nordic Semiconductor ASA 2020-2022. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

# The Kconfig file is dedicated to UART transport of MCUmgr
# subsystem and provides Kconfig options to control aspects of
# the transport.
#
# Options defined in this file should be prefixed:
#  MCUMGR_TRANSPORT_UART_

menuconfig MCUMGR_TRANSPORT_UART
	bool "UART mcumgr SMP transport"
	depends on CONSOLE
	depends on BASE64
	select UART_MCUMGR
	help
	  Enables handling of SMP commands received over UART.  This is a
	  lightweight alternative to MCUMGR_TRANSPORT_SHELL.  It allows mcumgr
	  commands to be received over UART without requiring an additional
	  thread.

if MCUMGR_TRANSPORT_UART

if UART_ASYNC_API

menuconfig MCUMGR_TRANSPORT_UART_ASYNC
	bool "Use async UART API when available"
	help
	  The option enables use of UART async API when available for selected mcumgr uart port.

if MCUMGR_TRANSPORT_UART_ASYNC

config MCUMGR_TRANSPORT_UART_ASYNC_BUFS
	int "Number of async RX UART buffers"
	range 2 8
	default 2
	help
	  The asynchronous UART API requires registering RX buffers for received data; when the RX
	  reaches the end of a buffer, it will send event requesting next buffer, to be able to
	  receive data without stopping due to running out of buffer space.  At least two buffers
	  area required for smooth RX operation.

config MCUMGR_TRANSPORT_UART_ASYNC_BUF_SIZE
	int "Size of single async RX UART buffer"
	default 64
	help
	  The size of single buffer for asynchronous RX.

endif # MCUMGR_TRANSPORT_UART_ASYNC

endif # UART_ASYNC_API

config MCUMGR_TRANSPORT_UART_MTU
	int "UART SMP MTU"
	default 256
	help
	  Maximum size of SMP frames sent and received over UART, in bytes.
	  This value must satisfy the following relation:
	  MCUMGR_TRANSPORT_UART_MTU <= MCUMGR_TRANSPORT_NETBUF_SIZE + 2

endif # MCUMGR_TRANSPORT_UART
