# 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
	select UART_MCUMGR
	select BASE64
	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
