# 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 "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.

config NRF_802154_ENCRYPTION
	bool "nRF 802.15.4 AES-CCM* authentication & encryption"
	depends on !CRYPTO_NRF_ECB

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"
	select SENSOR if NRF_802154_TEMPERATURE_UPDATE
	select TEMP_NRF5 if NRF_802154_TEMPERATURE_UPDATE

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.

config NRF_802154_TEMPERATURE_UPDATE
	bool "nRF 802.15.4 temperature update"
	default y
	help
	  Enable temperature update for nRF 802.15.4 driver

config NRF_802154_TEMPERATURE_UPDATE_INIT_PRIO
	int "nRF52 IEEE 802.15.4 temperature update initialization priority"
	depends on NRF_802154_TEMPERATURE_UPDATE
	default 91
	help
	  Set the initialization priority of a temperature update for nRF 802.15.4 driver.

config NRF_802154_TEMPERATURE_UPDATE_PERIOD
	int "nRF 802.15.4 temperature update period in milliseconds"
	depends on NRF_802154_TEMPERATURE_UPDATE
	default 60000
	help
	  Period of a temperature update for nRF 802.15.4 driver in milliseconds

endif # NRF_802154_RADIO_DRIVER

config NRF_802154_SERIALIZATION
	bool
	select IPC_SERVICE
	select MBOX
	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 51
	help
	  Set the initialization priority number. Do not mess with it unless
	  you know what you are doing.

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.

endif

endmenu # NRF_802154_SER_HOST || NRF_802154_SER_RADIO

endmenu # HAS_NORDIC_DRIVERS

rsource "nrfx/Kconfig"
