# 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"
	depends on NETWORKING
	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_DRV_NAME
	string "nRF52 IEEE 802.15.4 Driver's name"
	default "IEEE802154_nrf5"
	help
	  This option sets the driver name

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_FCS_IN_LENGTH
	bool "Include FCS field in the overall packet length"
	default y if IEEE802154_RAW_MODE || NET_L2_OPENTHREAD
	help
	  Some 802.15.4 L2 implementations expect that FCS length is included in
	  the overall packet length while others not. Allow to configure this
	  behavior, based on the selected upper layer.

config IEEE802154_NRF5_DELAY_TRX_ACC
	int "Clock accuracy for delayed operations"
	default CLOCK_CONTROL_NRF_ACCURACY if CLOCK_CONTROL_NRF_ACCURACY < 255
	default 255
	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.

endif
