# Copyright (c) 2020 PHYTEC Messtechnik GmbH
# SPDX-License-Identifier: Apache-2.0

menuconfig MODBUS
	bool "Modbus support"
	select CRC

if MODBUS

config MODBUS_BUFFER_SIZE
	int "Modbus buffer size"
	default 256
	range 64 256
	help
	  Modbus buffer size.

choice
	prompt "Supported node roles"
	default MODBUS_ROLE_CLIENT_SERVER
	help
	  Specify the type of supported node roles.

config MODBUS_ROLE_CLIENT
	bool "Client support"

config MODBUS_ROLE_SERVER
	bool "Server support"

config MODBUS_ROLE_CLIENT_SERVER
	bool "Client and server support"

endchoice

config MODBUS_SERVER
	bool
	default y if MODBUS_ROLE_SERVER || MODBUS_ROLE_CLIENT_SERVER

config MODBUS_CLIENT
	bool
	default y if MODBUS_ROLE_CLIENT || MODBUS_ROLE_CLIENT_SERVER

config MODBUS_SERIAL
	bool "Modbus over serial line support"
	default y
	depends on SERIAL && SERIAL_HAS_DRIVER
	depends on DT_HAS_ZEPHYR_MODBUS_SERIAL_ENABLED
	select UART_USE_RUNTIME_CONFIGURE
	help
	  Enable Modbus over serial line support.

config MODBUS_ASCII_MODE
	depends on MODBUS_SERIAL
	bool "Modbus transmission mode ASCII"
	help
	  Enable ASCII transmission mode.

config MODBUS_RAW_ADU
	bool "Modbus raw ADU support"
	help
	  Enable Modbus raw ADU support.

config MODBUS_NUMOF_RAW_ADU
	int "Number of raw ADU instances"
	depends on MODBUS_RAW_ADU
	range 1 4
	help
	  Number of raw ADU instances.

config MODBUS_FP_EXTENSIONS
	bool "Floating-Point extensions"
	default y
	help
	  Enable Floating-Point extensions

config MODBUS_FC08_DIAGNOSTIC
	bool "FC08 Diagnostic support"
	depends on MODBUS_SERVER
	default y
	help
	  Enable function code 08 Diagnostic support

module = MODBUS
module-str = Modbus Support
module-help = Sets log level for Modbus support
source "subsys/logging/Kconfig.template.log_config"

endif
