drivers: ieee802154: Make HW Radio Capabilities runtime

This commit introduces runtime query of the HW Capabilities of
the nRF IEEE 802.15.4 Radio Driver.

Signed-off-by: Czeslaw Makarski <Czeslaw.Makarski@nordicsemi.no>
This commit is contained in:
Czeslaw Makarski 2021-01-25 16:33:17 +01:00 committed by Anas Nashif
commit 9f56cc5531
2 changed files with 23 additions and 12 deletions

View file

@ -187,22 +187,27 @@ drop:
} }
} }
static void nrf5_get_capabilities_at_boot(void)
{
nrf_802154_capabilities_t caps = nrf_802154_capabilities_get();
nrf5_data.capabilities =
IEEE802154_HW_FCS |
IEEE802154_HW_PROMISC |
IEEE802154_HW_FILTER |
((caps & NRF_802154_CAPABILITY_CSMA) ? IEEE802154_HW_CSMA : 0UL) |
IEEE802154_HW_2_4_GHZ |
IEEE802154_HW_TX_RX_ACK |
IEEE802154_HW_ENERGY_SCAN |
((caps & NRF_802154_CAPABILITY_DELAYED_TX) ? IEEE802154_HW_TXTIME : 0UL) |
IEEE802154_HW_SLEEP_TO_TX;
}
/* Radio device API */ /* Radio device API */
static enum ieee802154_hw_caps nrf5_get_capabilities(const struct device *dev) static enum ieee802154_hw_caps nrf5_get_capabilities(const struct device *dev)
{ {
return IEEE802154_HW_FCS | return nrf5_data.capabilities;
IEEE802154_HW_FILTER |
#if !defined(CONFIG_NRF_802154_SL_OPENSOURCE)
IEEE802154_HW_CSMA |
#ifdef CONFIG_IEEE802154_NRF5_PKT_TXTIME
IEEE802154_HW_TXTIME |
#endif /* CONFIG_IEEE802154_NRF5_PKT_TXTIME */
#endif
IEEE802154_HW_2_4_GHZ |
IEEE802154_HW_TX_RX_ACK |
IEEE802154_HW_ENERGY_SCAN |
IEEE802154_HW_SLEEP_TO_TX;
} }
static int nrf5_cca(const struct device *dev) static int nrf5_cca(const struct device *dev)
@ -576,6 +581,7 @@ static void nrf5_iface_init(struct net_if *iface)
nrf5_radio->iface = iface; nrf5_radio->iface = iface;
ieee802154_init(iface); ieee802154_init(iface);
nrf5_get_capabilities_at_boot();
} }
static int nrf5_configure(const struct device *dev, static int nrf5_configure(const struct device *dev,

View file

@ -8,6 +8,8 @@
#ifndef ZEPHYR_DRIVERS_IEEE802154_IEEE802154_NRF5_H_ #ifndef ZEPHYR_DRIVERS_IEEE802154_IEEE802154_NRF5_H_
#define ZEPHYR_DRIVERS_IEEE802154_IEEE802154_NRF5_H_ #define ZEPHYR_DRIVERS_IEEE802154_IEEE802154_NRF5_H_
#include "ieee802154_radio.h"
#define NRF5_FCS_LENGTH (2) #define NRF5_FCS_LENGTH (2)
#define NRF5_PSDU_LENGTH (125) #define NRF5_PSDU_LENGTH (125)
#define NRF5_PHR_LENGTH (1) #define NRF5_PHR_LENGTH (1)
@ -78,6 +80,9 @@ struct nrf5_802154_data {
* Can be NULL if event notification is not needed. * Can be NULL if event notification is not needed.
*/ */
ieee802154_event_cb_t event_handler; ieee802154_event_cb_t event_handler;
/* Capabilities of the network interface. */
enum ieee802154_hw_caps capabilities;
}; };
#endif /* ZEPHYR_DRIVERS_IEEE802154_IEEE802154_NRF5_H_ */ #endif /* ZEPHYR_DRIVERS_IEEE802154_IEEE802154_NRF5_H_ */