# Copyright (c) 2022 Rodrigo Peixoto <rodrigopex@gmail.com>
# SPDX-License-Identifier: Apache-2.0

menuconfig ZBUS
	bool "Zbus support"
	help
	  Enables support for Zephyr message bus.

if ZBUS

config ZBUS_CHANNELS_SYS_INIT_PRIORITY
	default 5
	int "The priority used during the SYS_INIT procedure."

config ZBUS_CHANNEL_NAME
	bool "Channel name field"

config ZBUS_OBSERVER_NAME
	bool "Observer name field"

config ZBUS_MSG_SUBSCRIBER
	select NET_BUF
	bool "Message subscribers will receive all messages in sequence."

if ZBUS_MSG_SUBSCRIBER

choice
	prompt "ZBus msg_subscribers buffer allocation"

config ZBUS_MSG_SUBSCRIBER_NET_BUF_DYNAMIC
	bool "Use heap to allocate msg_subscriber buffers data"

config ZBUS_MSG_SUBSCRIBER_NET_BUF_STATIC
	bool "Use fixed data size for msg_subscriber buffers pool"

endchoice

config ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_SIZE
	default 16
	int "The count of net_buf available to be used simutaneously."

if ZBUS_MSG_SUBSCRIBER_NET_BUF_STATIC

config ZBUS_MSG_SUBSCRIBER_NET_BUF_STATIC_DATA_SIZE
	int "The size of the biggest message used with ZBus."

endif # ZBUS_MSG_SUBSCRIBER_NET_BUF_STATIC

endif # ZBUS_MSG_SUBSCRIBER

config ZBUS_RUNTIME_OBSERVERS
	bool "Runtime observers support."
	default n

config ZBUS_ASSERT_MOCK
	bool "Zbus assert mock for test purposes."
	help
	  This configuration enables the developer to change the _ZBUS_ASSERT behavior. When this configuration is
	  enabled, _ZBUS_ASSERT returns -EFAULT instead of assert. It makes it more straightforward to test invalid
	  parameters.


module = ZBUS
module-str = zbus
source "subsys/logging/Kconfig.template.log_config"

endif # ZBUS
