# Nordic Semiconductor nRF5 802.15.4 configuration options

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

menuconfig IEEE802154_NRF5
	bool "nRF52 series IEEE 802.15.4 Driver"
	default y
	depends on DT_HAS_NORDIC_NRF_IEEE802154_ENABLED
	select NRF_802154_RADIO_DRIVER if HAS_HW_NRF_RADIO_IEEE802154
	select NRF_802154_SER_HOST if !HAS_HW_NRF_RADIO_IEEE802154

if IEEE802154_NRF5

config IEEE802154_NRF5_RX_STACK_SIZE
	int "Driver's internal RX thread stack size"
	default 800
	help
	  This option sets the driver's stack size for its internal RX thread.
	  The default value should be sufficient, but in case it proves to be
	  a too little one, this option makes it easy to play with the size.

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

config IEEE802154_NRF5_EXT_IRQ_MGMT
	bool
	help
	  The driver may manage radio IRQs by itself, or use an external
	  radio IRQ provider. When radio IRQs are managed by an external
	  provider, the driver shall not configure radio IRQs.

	  Enable this option when external radio IRQ provider is enabled in
	  the system. One example of external radio IRQ provider could be
	  a radio arbiter used in dynamic multiprotocol applications.

config IEEE802154_NRF5_UICR_EUI64_ENABLE
	bool "Support usage of EUI64 value stored in UICR registers"
	depends on !IEEE802154_VENDOR_OUI_ENABLE
	depends on SOC_SERIES_NRF52X || SOC_SERIES_NRF53X
	help
	  This option enables setting custom vendor EUI64 value
	  stored in User information configuration registers (UICR).
	  Notice that this disables the default setting of EUI64
	  value from Factory information configuration registers
	  (FICR).

if IEEE802154_NRF5_UICR_EUI64_ENABLE

config IEEE802154_NRF5_UICR_EUI64_REG
	int "UICR base register for the EUI64 value"
	range 0 30 if SOC_SERIES_NRF52X
	range 0 190 if SOC_SERIES_NRF53X
	default 0
	help
	  Base of the two consecutive registers from the UICR customer
	  section in which custom EUI64 is stored.

endif # IEEE802154_NRF5_UICR_EUI64_ENABLE

config IEEE802154_NRF5_DELAY_TRX_ACC
	int "Clock accuracy for delayed operations"
	default CLOCK_CONTROL_NRF_ACCURACY if (CLOCK_CONTROL_NRF && (CLOCK_CONTROL_NRF_ACCURACY < $(UINT8_MAX)))
	default $(UINT8_MAX)
	help
	  Accuracy of the clock used for scheduling radio delayed operations (delayed transmission
	  or delayed reception), in ppm.

config IEEE802154_NRF5_LOG_RX_FAILURES
	bool "Frame reception failures logging"
	help
	  There are few cases where the frame reception failure can happen because of
	  internal cause. These cases are reported forward by general code error.

	  This options enables logging the reason of frame reception failure.
	  It can be helpful for the network traffic analyze but it generates also
	  a lot of log records in a stress environment.

config IEEE802154_NRF5_MULTIPLE_CCA
	bool "Support for multiple CCA attempts before transmission"
	help
	  When this option is enabled the OpenThread capability
	  IEEE802154_OPENTHREAD_HW_MULTIPLE_CCA is supported by the ieee802154_nrf5.

config IEEE802154_NRF5_CST_ENDPOINT
	bool "Support for OpenThread CST Endpoint extension in the ieee802154_nrf5."
	default y if OPENTHREAD_WAKEUP_COORDINATOR
	help
	  Enable support for OpenThread CST (Coordinated Sampled Transmitter) Endpoint
	  with CST IE injection as an extension to ieee802154_nrf5 driver.
	  When this option is enabled, the ieee802154_nrf5 driver supports the
	  IEEE802154_OPENTHREAD_HW_CST capability.

endif
