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

menuconfig ZBUS
	bool "Zbus support"
	depends on MULTITHREADING
	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_CHANNEL_PUBLISH_STATS
	bool "Channel publishing statistics (Timestamp and count)"

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

if ZBUS_MSG_SUBSCRIBER

choice ZBUS_MSG_SUBSCRIBER_BUF_ALLOC
	prompt "ZBus msg_subscribers buffer allocation"
	default ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_DYNAMIC

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

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

endchoice

config ZBUS_MSG_SUBSCRIBER_NET_BUF_POOL_ISOLATION
	default n
	bool "Use isolated pools instead of only using the global pool."

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_BUF_ALLOC_STATIC

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

endif # ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_STATIC

endif # ZBUS_MSG_SUBSCRIBER

config ZBUS_RUNTIME_OBSERVERS
	bool "Runtime observers support."

config ZBUS_PRIORITY_BOOST
	bool "ZBus priority boost algorithm"
	default y
	help
	  ZBus implements the Highest Locker Protocol that relies on the observers’ thread priority
	  to determine a temporary publisher priority.

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.


config HEAP_MEM_POOL_ADD_SIZE_ZBUS
	int
	default 2048 if ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_DYNAMIC && !ZBUS_RUNTIME_OBSERVERS
	default 1024 if !ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_DYNAMIC && ZBUS_RUNTIME_OBSERVERS
	default 3072 if ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_DYNAMIC && ZBUS_RUNTIME_OBSERVERS


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

endif # ZBUS
