# Copyright (c) 2016-2021 Nordic Semiconductor ASA
# SPDX-License-Identifier: Apache-2.0

config ZEPHYR_HAL_NORDIC_MODULE
	bool

config HAS_NORDIC_DRIVERS
	bool

menu "Nordic drivers"
	depends on HAS_NORDIC_DRIVERS

choice NRF_802154_SOURCE
	prompt "Source of the IEEE 802.15.4 radio driver"

config NRF_802154_SOURCE_HAL_NORDIC
	bool "Open source"

endchoice

menuconfig NRF_802154_RADIO_DRIVER
	bool "Enable nRF IEEE 802.15.4 radio driver"
	depends on HAS_HW_NRF_RADIO_IEEE802154
	select DYNAMIC_INTERRUPTS
	select ENTROPY_GENERATOR
	select NRF_HW_TIMER1_RESERVED
	help
	  This option enables nRF IEEE 802.15.4 radio driver in Zephyr. Note,
	  that beside the radio peripheral itself, this drivers occupies several
	  other peripherals. A complete list can be found in the hal_nordic
	  repository, within drivers/nrf_radio_802154/nrf_802154_peripherals.h
	  file. As the nRF IEEE 802.15.4 radio driver defines IRQ configuration
	  abstraction layer API and its Zephyr-specific implementation uses dynamic
	  interrupts, the DYNAMIC_INTERRUPTS switch is selected unconditionally.

if NRF_802154_RADIO_DRIVER

config NRF_802154_MULTIPROTOCOL_SUPPORT
	bool
	help
	  In dynamic multiprotocol applications, access to the radio peripheral
	  must be distributed by an arbiter. To support this arbitration
	  in the driver, this option must be enabled. Otherwise, the driver
	  assumes that access to the radio peripheral is granted indefinitely.

choice NRF_802154_CCA_MODE
	prompt "nRF IEEE 802.15.4 CCA mode"
	default NRF_802154_CCA_MODE_ED
	help
	  CCA mode

config NRF_802154_CCA_MODE_ED
	bool "Energy Above Threshold"

config NRF_802154_CCA_MODE_CARRIER
	bool "Carrier Seen"

config NRF_802154_CCA_MODE_CARRIER_AND_ED
	bool "Energy Above Threshold AND Carrier Seen"

config NRF_802154_CCA_MODE_CARRIER_OR_ED
	bool "Energy Above Threshold OR Carrier Seen"

endchoice

choice NRF_802154_SL_TYPE
	prompt "nRF IEEE 802.15.4 Service Layer Type"

config NRF_802154_SL_OPENSOURCE
	bool "Open source"

endchoice

config NRF_802154_CCA_ED_THRESHOLD
	int "nRF IEEE 802.15.4 CCA Energy Detection threshold"
	default 45
	help
	  If energy detected in a given channel is above the value then the
	  channel is deemed busy. The unit is defined as per 802.15.4-2006 spec.

config NRF_802154_CCA_CORR_THRESHOLD
	int "nRF IEEE 802.15.4 CCA Correlator threshold"
	default 45

config NRF_802154_CCA_CORR_LIMIT
	int "nRF IEEE 802.15.4 CCA Correlator limit"
	default 2
	help
	  Limit for occurrences above correlator threshold. When not equal to
	  zero the correlator based signal detect is enabled.

config NRF_802154_PENDING_SHORT_ADDRESSES
	int "nRF 802.15.4 pending short addresses"
	default 16
	help
	  Number of slots containing short addresses of nodes for which pending data is stored

config NRF_802154_PENDING_EXTENDED_ADDRESSES
	int "nRF 802.15.4 pending extended addresses"
	default 16
	help
	  Number of slots containing extended addresses of nodes for which pending data is stored

config NRF_802154_RX_BUFFERS
	int "nRF 802.15.4 receive buffers"
	default 16
	help
	  Number of buffers in nRF 802.15.4 driver receive queue. If this value is modified,
	  its serialization host counterpart must be set to the exact same value.

endif # NRF_802154_RADIO_DRIVER

config NRF_802154_SERIALIZATION
	bool
	select RPMSG_SERVICE
	help
	  This helper symbol indicates that the nRF 802.15.4 serialization is available.

config NRF_802154_SER_HOST
	bool "nRF IEEE 802.15.4 Driver serialization host"
	depends on !NRF_802154_RADIO_DRIVER
	depends on !HAS_HW_NRF_RADIO_IEEE802154
	select IEEE802154_NRF5_EXT_IRQ_MGMT if IEEE802154_NRF5
	select NRF_802154_SERIALIZATION
	help
	  Enable serialization of nRF IEEE 802.15.4 Driver. This option is to be
	  used if radio is not available in the core, but radio services are
	  provided by a serialization backend.

menuconfig NRF_802154_SER_RADIO
	bool "nRF IEEE 802.15.4 Driver serialization radio"
	depends on HAS_HW_NRF_RADIO_IEEE802154
	depends on !IEEE802154_NRF5
	select NRF_802154_RADIO_DRIVER
	select NRF_802154_SERIALIZATION
	help
	  Enable serialization of nRF IEEE 802.15.4 Driver. This option is to be
	  used if radio is available in the core to provide radio services over
	  a serialization backend.

if NRF_802154_SER_RADIO

config NRF_802154_SER_RADIO_INIT_PRIO
	int "nRF52 IEEE 802.15.4 serialization initialization priority"
	default 47
	help
	  Set the initialization priority number. Do not mess with it unless
	  you know what you are doing.

choice RPMSG_SERVICE_MODE
	default RPMSG_SERVICE_MODE_REMOTE
endchoice

endif

menu "nRF 802.15.4 serialization"
	depends on NRF_802154_SER_HOST || NRF_802154_SER_RADIO

config NRF_802154_SER_LOG
	bool "802.15.4 serialization logs"
	default n
	help
	  This option enable debug logs of 802.15.4 serialization module.

config NRF_802154_SER_DEFAULT_RESPONSE_TIMEOUT
	int "Default Spinel serialization response timeout in milliseconds"
	default 500
	help
	  This option specifies default timeout of spinel status response
	  in milliseconds.

if NRF_802154_SER_HOST

config NRF_802154_RX_BUFFERS
	int "nRF 802.15.4 receive buffers"
	default 16
	help
	  Number of buffers in nRF 802.15.4 driver serialization host's receive queue.
	  If this value is modified, its remote counterpart must be set to the exact same value.

choice RPMSG_SERVICE_MODE
	default RPMSG_SERVICE_MODE_MASTER
endchoice

endif

endmenu # NRF_802154_SER_HOST || NRF_802154_SER_RADIO

endmenu # HAS_NORDIC_DRIVERS

rsource "nrfx/Kconfig"
