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

# This file needs to be sourced first as it defines variables that are supposed
# to be available for all Nordic related options.
rsource "Kconfig.dt"

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"
