From 6d036d885eb4a265b36fbf8231eb05e8e450d78d Mon Sep 17 00:00:00 2001 From: Jose Alamos Date: Tue, 30 Apr 2019 20:18:35 +0200 Subject: [PATCH 1/6] netdev_ieee802154: add ieee802154 radio capabilities --- drivers/include/net/netdev/ieee802154.h | 76 +++++++++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git a/drivers/include/net/netdev/ieee802154.h b/drivers/include/net/netdev/ieee802154.h index e47483213fed..b4431fb4cede 100644 --- a/drivers/include/net/netdev/ieee802154.h +++ b/drivers/include/net/netdev/ieee802154.h @@ -20,6 +20,7 @@ #ifndef NET_NETDEV_IEEE802154_H #define NET_NETDEV_IEEE802154_H +#include #include "net/ieee802154.h" #include "net/gnrc/nettype.h" #include "net/netopt.h" @@ -78,6 +79,66 @@ typedef enum { * with the multiplexed preamble */ } netdev_ieee802154_cca_mode_t; +/** + * @name IEEE 802.15.4 radio caps + * @brief Flags that indicate IEEE 802.15.4 capabilities on transceivers + * + * @{ + */ + +/** + * @brief Transceiver calculates FCS on transmission + */ +#define NETDEV_IEEE802154_CAPS_TX_CHECKSUM (1<<0) + +/** + * @brief Transceiver supports CSMA + */ +#define NETDEV_IEEE802154_CAPS_CSMA (1<<1) + +/** + * @brief Transceiver supports energy scan + */ +#define NETDEV_IEEE802154_CAPS_ENERGY_SCAN (1<<2) + +/** + * @brief Transceiver supports automatic retransmission of frames (with CSMA) + */ +#define NETDEV_IEEE802154_CAPS_FRAME_RETRIES (1<<3) + +/** + * @brief Transceiver handles ACK automatically + */ +#define NETDEV_IEEE802154_CAPS_AUTO_ACK (1<<4) + +/** + * @brief Transceiver removes FCS on received packet + */ +#define NETDEV_IEEE802154_CAPS_RX_OMIT_CHECKSUM (1<<5) + +/** + * @brief Transceiver drops packet on bad checksum + */ +#define NETDEV_IEEE802154_CAPS_RX_DROP_BAD_CHECKSUM (1<<6) + +/** + * @brief Transceiver supports address filtering + */ +#define NETDEV_IEEE802154_CAPS_ADDRESS_FILTER (1<<7) + +/** + * @brief Transceiver supports promiscuous mode + */ +#define NETDEV_IEEE802154_CAPS_PROMISCUOUS (1<<8) +/** + * @} + */ + +/** + * @brief IEEE 802.15.4 transceiver capabilites type definition + */ +typedef uint16_t netdev_ieee802154_trx_caps_t; + /** * @brief Extended structure to hold IEEE 802.15.4 driver state * @@ -115,6 +176,7 @@ typedef struct { uint8_t page; /**< channel page */ uint16_t flags; /**< flags as defined above */ int16_t txpower; /**< tx power in dBm */ + netdev_ieee802154_trx_caps_t caps; /**< radio capabilities flags */ /** @} */ } netdev_ieee802154_t; @@ -133,6 +195,20 @@ typedef struct netdev_radio_rx_info netdev_ieee802154_rx_info_t; */ void netdev_ieee802154_reset(netdev_ieee802154_t *dev); +/** + * @brief Check if the IEEE802.15.4 radio supports a given capability + * + * @param[in] netdev IEEE802.15.4 device descriptor + * @param[in] cap Capability to be checked + * + * @return true if the radio supports the given cap. + * @return false otherwise + */ +static inline bool netdev_ieee802154_has_cap(netdev_ieee802154_t *netdev, + netdev_ieee802154_trx_caps_t cap) +{ + return netdev->caps & cap; +} /** * @brief Fallback function for netdev IEEE 802.15.4 devices' _get function From 422312a3e7a6a08e67afbecfa786644cabbb0cb8 Mon Sep 17 00:00:00 2001 From: Jose Alamos Date: Tue, 30 Apr 2019 20:19:29 +0200 Subject: [PATCH 2/6] nrf802154: declare radio capabilities --- cpu/nrf52/radio/nrf802154/nrf802154.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cpu/nrf52/radio/nrf802154/nrf802154.c b/cpu/nrf52/radio/nrf802154/nrf802154.c index 1fb7b96e6260..9038fcbb6897 100644 --- a/cpu/nrf52/radio/nrf802154/nrf802154.c +++ b/cpu/nrf52/radio/nrf802154/nrf802154.c @@ -194,6 +194,9 @@ static void _timer_cb(void *arg, int chan) static int _init(netdev_t *dev) { (void)dev; + /* fill transceiver capabilities */ + netdev_ieee802154_t *ieee802154_dev = (netdev_ieee802154_t*) dev; + ieee802154_dev->caps = NETDEV_IEEE802154_CAPS_TX_CHECKSUM; int result = timer_init(NRF802154_TIMER, TIMER_FREQ, _timer_cb, NULL); assert(result >= 0); From e5dfc7da784a2cba16972aef4a069521912d372c Mon Sep 17 00:00:00 2001 From: Jose Alamos Date: Tue, 30 Apr 2019 20:19:53 +0200 Subject: [PATCH 3/6] at86rf2xx: declare radio capabilities --- drivers/at86rf2xx/at86rf2xx_netdev.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/at86rf2xx/at86rf2xx_netdev.c b/drivers/at86rf2xx/at86rf2xx_netdev.c index c988ac72ba0c..1fe6a133e682 100644 --- a/drivers/at86rf2xx/at86rf2xx_netdev.c +++ b/drivers/at86rf2xx/at86rf2xx_netdev.c @@ -71,6 +71,15 @@ static int _init(netdev_t *netdev) { at86rf2xx_t *dev = (at86rf2xx_t *)netdev; + /* fill transceiver capabilities */ + netdev_ieee802154_t *ieee802154_dev = (netdev_ieee802154_t*) netdev; + ieee802154_dev->caps = NETDEV_IEEE802154_CAPS_TX_CHECKSUM | + NETDEV_IEEE802154_CAPS_CSMA | + NETDEV_IEEE802154_CAPS_FRAME_RETRIES | + NETDEV_IEEE802154_CAPS_ADDRESS_FILTER | + NETDEV_IEEE802154_CAPS_AUTO_ACK | + NETDEV_IEEE802154_CAPS_PROMISCUOUS; + /* initialize GPIOs */ spi_init_cs(dev->params.spi, dev->params.cs_pin); gpio_init(dev->params.sleep_pin, GPIO_OUT); From 6a0df61384dafb89b326e68bd8b00d6f2f518c85 Mon Sep 17 00:00:00 2001 From: Jose Alamos Date: Tue, 30 Apr 2019 20:20:12 +0200 Subject: [PATCH 4/6] cc2420: declare radio capabilities --- drivers/cc2420/cc2420_netdev.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/cc2420/cc2420_netdev.c b/drivers/cc2420/cc2420_netdev.c index 66612b8c24cb..a3fe6e5a9c15 100644 --- a/drivers/cc2420/cc2420_netdev.c +++ b/drivers/cc2420/cc2420_netdev.c @@ -100,6 +100,13 @@ static int _init(netdev_t *netdev) { cc2420_t *dev = (cc2420_t *)netdev; + /* fill transceiver capabilities */ + netdev_ieee802154_t *ieee802154_dev = (netdev_ieee802154_t*) netdev; + ieee802154_dev->caps = NETDEV_IEEE802154_CAPS_TX_CHECKSUM | + NETDEV_IEEE802154_CAPS_CSMA | + NETDEV_IEEE802154_CAPS_ADDRESS_FILTER | + NETDEV_IEEE802154_CAPS_AUTO_ACK | + NETDEV_IEEE802154_CAPS_PROMISCUOUS; uint16_t reg; /* initialize power and reset pins -> put the device into reset state */ From 2241a3d683e2bf128330d936e1e2d8aca47375f4 Mon Sep 17 00:00:00 2001 From: Jose Alamos Date: Tue, 30 Apr 2019 20:20:34 +0200 Subject: [PATCH 5/6] k22xrf: declare radio capabilities --- drivers/kw2xrf/kw2xrf_netdev.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/kw2xrf/kw2xrf_netdev.c b/drivers/kw2xrf/kw2xrf_netdev.c index 9e66836c5691..e6d00ec990a9 100644 --- a/drivers/kw2xrf/kw2xrf_netdev.c +++ b/drivers/kw2xrf/kw2xrf_netdev.c @@ -73,6 +73,14 @@ static int _init(netdev_t *netdev) { kw2xrf_t *dev = (kw2xrf_t *)netdev; + /* fill transceiver capabilities */ + netdev_ieee802154_t *ieee802154_dev = (netdev_ieee802154_t*) netdev; + ieee802154_dev->caps = NETDEV_IEEE802154_CAPS_TX_CHECKSUM | + NETDEV_IEEE802154_CAPS_CSMA | + NETDEV_IEEE802154_CAPS_ADDRESS_FILTER | + NETDEV_IEEE802154_CAPS_AUTO_ACK | + NETDEV_IEEE802154_CAPS_PROMISCUOUS; + dev->thread = (thread_t *)thread_get(thread_getpid()); /* initialize SPI and GPIOs */ From 505cee4020fca9c2617ad247266b12ae8826fa1d Mon Sep 17 00:00:00 2001 From: Jose Alamos Date: Tue, 30 Apr 2019 20:20:58 +0200 Subject: [PATCH 6/6] mrf24j40: declare radio capabilities --- drivers/mrf24j40/mrf24j40_netdev.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/mrf24j40/mrf24j40_netdev.c b/drivers/mrf24j40/mrf24j40_netdev.c index 7c8045bebbfa..9d5aca6f96d6 100644 --- a/drivers/mrf24j40/mrf24j40_netdev.c +++ b/drivers/mrf24j40/mrf24j40_netdev.c @@ -51,6 +51,15 @@ static int _init(netdev_t *netdev) { mrf24j40_t *dev = (mrf24j40_t *)netdev; + /* fill transceiver capabilities */ + netdev_ieee802154_t *ieee802154_dev = (netdev_ieee802154_t*) netdev; + ieee802154_dev->caps = NETDEV_IEEE802154_CAPS_TX_CHECKSUM | + NETDEV_IEEE802154_CAPS_CSMA | + NETDEV_IEEE802154_CAPS_FRAME_RETRIES | + NETDEV_IEEE802154_CAPS_ADDRESS_FILTER | + NETDEV_IEEE802154_CAPS_AUTO_ACK | + NETDEV_IEEE802154_CAPS_PROMISCUOUS; + /* initialize GPIOs */ spi_init_cs(dev->params.spi, dev->params.cs_pin); gpio_init(dev->params.reset_pin, GPIO_OUT);