mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-01-17 05:32:45 +01:00
net/ieee802154/radio: use bitflags for capabilities
Signed-off-by: Jean Pierre Dudey <me@jeandudey.tech>
This commit is contained in:
parent
4bacc4f9b1
commit
243de6e501
@ -400,23 +400,6 @@ static int _off(ieee802154_dev_t *dev)
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
static bool _get_cap(ieee802154_dev_t *dev, ieee802154_rf_caps_t cap)
|
||||
{
|
||||
(void) dev;
|
||||
switch (cap) {
|
||||
case IEEE802154_CAP_24_GHZ:
|
||||
case IEEE802154_CAP_AUTO_CSMA:
|
||||
case IEEE802154_CAP_IRQ_CRC_ERROR:
|
||||
case IEEE802154_CAP_IRQ_TX_DONE:
|
||||
case IEEE802154_CAP_IRQ_CCA_DONE:
|
||||
case IEEE802154_CAP_IRQ_RX_START:
|
||||
case IEEE802154_CAP_IRQ_TX_START:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static int _set_hw_addr_filter(ieee802154_dev_t *dev, const network_uint16_t *short_addr,
|
||||
const eui64_t *ext_addr, const uint16_t *pan_id)
|
||||
{
|
||||
@ -536,6 +519,14 @@ static int _set_csma_params(ieee802154_dev_t *dev, const ieee802154_csma_be_t *b
|
||||
}
|
||||
|
||||
static const ieee802154_radio_ops_t cc2538_rf_ops = {
|
||||
.caps = IEEE802154_CAP_24_GHZ
|
||||
| IEEE802154_CAP_AUTO_CSMA
|
||||
| IEEE802154_CAP_IRQ_CRC_ERROR
|
||||
| IEEE802154_CAP_IRQ_TX_DONE
|
||||
| IEEE802154_CAP_IRQ_CCA_DONE
|
||||
| IEEE802154_CAP_IRQ_RX_START
|
||||
| IEEE802154_CAP_IRQ_TX_START,
|
||||
|
||||
.write = _write,
|
||||
.read = _read,
|
||||
.request_transmit = _request_transmit,
|
||||
@ -548,7 +539,6 @@ static const ieee802154_radio_ops_t cc2538_rf_ops = {
|
||||
.confirm_set_trx_state = _confirm_set_trx_state,
|
||||
.request_cca = _request_cca,
|
||||
.confirm_cca = _confirm_cca,
|
||||
.get_cap = _get_cap,
|
||||
.set_cca_threshold = _set_cca_threshold,
|
||||
.set_cca_mode = _set_cca_mode,
|
||||
.config_phy = _config_phy,
|
||||
|
@ -661,22 +661,6 @@ static int _off(ieee802154_dev_t *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool _get_cap(ieee802154_dev_t *dev, ieee802154_rf_caps_t cap)
|
||||
{
|
||||
(void) dev;
|
||||
switch (cap) {
|
||||
case IEEE802154_CAP_24_GHZ:
|
||||
case IEEE802154_CAP_IRQ_CRC_ERROR:
|
||||
case IEEE802154_CAP_IRQ_RX_START:
|
||||
case IEEE802154_CAP_IRQ_TX_START:
|
||||
case IEEE802154_CAP_IRQ_TX_DONE:
|
||||
case IEEE802154_CAP_IRQ_CCA_DONE:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
int _len(ieee802154_dev_t *dev)
|
||||
{
|
||||
(void) dev;
|
||||
@ -793,6 +777,13 @@ void nrf802154_setup(nrf802154_t *dev)
|
||||
}
|
||||
|
||||
static const ieee802154_radio_ops_t nrf802154_ops = {
|
||||
.caps = IEEE802154_CAP_24_GHZ
|
||||
| IEEE802154_CAP_IRQ_CRC_ERROR
|
||||
| IEEE802154_CAP_IRQ_RX_START
|
||||
| IEEE802154_CAP_IRQ_TX_START
|
||||
| IEEE802154_CAP_IRQ_TX_DONE
|
||||
| IEEE802154_CAP_IRQ_CCA_DONE,
|
||||
|
||||
.write = _write,
|
||||
.read = _read,
|
||||
.request_transmit = _request_transmit,
|
||||
@ -805,7 +796,6 @@ static const ieee802154_radio_ops_t nrf802154_ops = {
|
||||
.confirm_set_trx_state = _confirm_set_trx_state,
|
||||
.request_cca = _request_cca,
|
||||
.confirm_cca = _confirm_cca,
|
||||
.get_cap = _get_cap,
|
||||
.set_cca_threshold = set_cca_threshold,
|
||||
.set_cca_mode = _set_cca_mode,
|
||||
.config_phy = _config_phy,
|
||||
|
@ -29,6 +29,7 @@ extern "C" {
|
||||
#include <stdbool.h>
|
||||
#include "iolist.h"
|
||||
#include "sys/uio.h"
|
||||
#include "bitarithm.h"
|
||||
#include "byteorder.h"
|
||||
#include "net/eui64.h"
|
||||
|
||||
@ -59,7 +60,7 @@ typedef enum {
|
||||
* @note it's implicit that a radio supports @ref
|
||||
* IEEE802154_CAP_AUTO_CSMA if this cap is available
|
||||
*/
|
||||
IEEE802154_CAP_FRAME_RETRANS,
|
||||
IEEE802154_CAP_FRAME_RETRANS = BIT0,
|
||||
/**
|
||||
* @brief the device supports Auto CSMA-CA
|
||||
*
|
||||
@ -69,7 +70,7 @@ typedef enum {
|
||||
* ieee802154_radio_ops::confirm_transmit. If it fails, the device reports
|
||||
* @ref TX_STATUS_MEDIUM_BUSY.
|
||||
*/
|
||||
IEEE802154_CAP_AUTO_CSMA,
|
||||
IEEE802154_CAP_AUTO_CSMA = BIT1,
|
||||
/**
|
||||
* @brief the device support ACK timeout interrupt
|
||||
*
|
||||
@ -81,47 +82,47 @@ typedef enum {
|
||||
*
|
||||
* The ACK frame is not indicated to the upper layer.
|
||||
*/
|
||||
IEEE802154_CAP_IRQ_ACK_TIMEOUT,
|
||||
IEEE802154_CAP_IRQ_ACK_TIMEOUT = BIT2,
|
||||
/**
|
||||
* @brief the device supports the IEEE802.15.4 2.4 GHz band
|
||||
*
|
||||
* It's assumed that @ref IEEE802154_CAP_IRQ_TX_DONE is present.
|
||||
*/
|
||||
IEEE802154_CAP_24_GHZ,
|
||||
IEEE802154_CAP_24_GHZ = BIT3,
|
||||
/**
|
||||
* @brief the device support the IEEE802.15.4 Sub GHz band
|
||||
*/
|
||||
IEEE802154_CAP_SUB_GHZ,
|
||||
IEEE802154_CAP_SUB_GHZ = BIT4,
|
||||
/**
|
||||
* @brief the device reports reception off frames with invalid CRC.
|
||||
*/
|
||||
IEEE802154_CAP_IRQ_CRC_ERROR,
|
||||
IEEE802154_CAP_IRQ_CRC_ERROR = BIT5,
|
||||
/**
|
||||
* @brief the device reports when the transmission is done
|
||||
*/
|
||||
IEEE802154_CAP_IRQ_TX_DONE,
|
||||
IEEE802154_CAP_IRQ_TX_DONE = BIT6,
|
||||
/**
|
||||
* @brief the device reports the start of a frame (SFD) when received.
|
||||
*/
|
||||
IEEE802154_CAP_IRQ_RX_START,
|
||||
IEEE802154_CAP_IRQ_RX_START = BIT7,
|
||||
/**
|
||||
* @brief the device reports the start of a frame (SFD) was sent.
|
||||
*/
|
||||
IEEE802154_CAP_IRQ_TX_START,
|
||||
IEEE802154_CAP_IRQ_TX_START = BIT8,
|
||||
/**
|
||||
* @brief the device reports the end of the CCA procedure
|
||||
*/
|
||||
IEEE802154_CAP_IRQ_CCA_DONE,
|
||||
IEEE802154_CAP_IRQ_CCA_DONE = BIT9,
|
||||
/**
|
||||
* @brief the device provides the number of retransmissions
|
||||
*
|
||||
* It's assumed that @ref IEEE802154_CAP_FRAME_RETRANS is present.
|
||||
*/
|
||||
IEEE802154_CAP_FRAME_RETRANS_INFO,
|
||||
IEEE802154_CAP_FRAME_RETRANS_INFO = BIT10,
|
||||
/**
|
||||
* @brief the device retains all register values when off.
|
||||
*/
|
||||
IEEE802154_CAP_REG_RETENTION,
|
||||
IEEE802154_CAP_REG_RETENTION = BIT11,
|
||||
} ieee802154_rf_caps_t;
|
||||
|
||||
/**
|
||||
@ -382,6 +383,14 @@ typedef struct {
|
||||
* @brief Radio ops struct declaration
|
||||
*/
|
||||
struct ieee802154_radio_ops {
|
||||
/**
|
||||
* @brief Radio device capabilities
|
||||
*
|
||||
* This field contains bitflags of supported capabilities
|
||||
* (@ref ieee802154_rf_caps_t) by the device.
|
||||
*/
|
||||
const uint16_t caps;
|
||||
|
||||
/**
|
||||
* @brief Write a frame into the framebuffer.
|
||||
*
|
||||
@ -602,17 +611,6 @@ struct ieee802154_radio_ops {
|
||||
*/
|
||||
int (*confirm_cca)(ieee802154_dev_t *dev);
|
||||
|
||||
/**
|
||||
* @brief Get a cap from the radio
|
||||
*
|
||||
* @param[in] dev IEEE802.15.4 device descriptor
|
||||
* @param cap cap to be checked
|
||||
*
|
||||
* @return true if the radio supports the cap
|
||||
* @return false otherwise
|
||||
*/
|
||||
bool (*get_cap)(ieee802154_dev_t *dev, ieee802154_rf_caps_t cap);
|
||||
|
||||
/**
|
||||
* @brief Set the threshold for the Energy Detection (first mode of CCA)
|
||||
*
|
||||
@ -998,8 +996,8 @@ static inline int ieee802154_radio_confirm_cca(ieee802154_dev_t *dev)
|
||||
/**
|
||||
* @brief Check if the device supports ACK timeout
|
||||
*
|
||||
* Internally this function calls ieee802154_radio_ops::get_cap with @ref
|
||||
* IEEE802154_CAP_IRQ_ACK_TIMEOUT.
|
||||
* Internally this function reads ieee802154_radio_ops::caps and checks for
|
||||
* @ref IEEE802154_CAP_IRQ_ACK_TIMEOUT.
|
||||
*
|
||||
* @param[in] dev IEEE802.15.4 device descriptor
|
||||
*
|
||||
@ -1008,14 +1006,14 @@ static inline int ieee802154_radio_confirm_cca(ieee802154_dev_t *dev)
|
||||
*/
|
||||
static inline bool ieee802154_radio_has_irq_ack_timeout(ieee802154_dev_t *dev)
|
||||
{
|
||||
return dev->driver->get_cap(dev, IEEE802154_CAP_IRQ_ACK_TIMEOUT);
|
||||
return (dev->driver->caps & IEEE802154_CAP_IRQ_ACK_TIMEOUT);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if the device supports frame retransmissions (with CSMA-CA).
|
||||
*
|
||||
* Internally this function calls ieee802154_radio_ops::get_cap with @ref
|
||||
* IEEE802154_CAP_FRAME_RETRANS.
|
||||
* Internally this function reads ieee802154_radio_ops::caps and checks for
|
||||
* @ref IEEE802154_CAP_FRAME_RETRANS.
|
||||
*
|
||||
* @param[in] dev IEEE802.15.4 device descriptor
|
||||
*
|
||||
@ -1024,14 +1022,14 @@ static inline bool ieee802154_radio_has_irq_ack_timeout(ieee802154_dev_t *dev)
|
||||
*/
|
||||
static inline bool ieee802154_radio_has_frame_retrans(ieee802154_dev_t *dev)
|
||||
{
|
||||
return dev->driver->get_cap(dev, IEEE802154_CAP_FRAME_RETRANS);
|
||||
return (dev->driver->caps & IEEE802154_CAP_FRAME_RETRANS);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if the device supports Auto CSMA-CA for transmissions.
|
||||
*
|
||||
* Internally this function calls ieee802154_radio_ops::get_cap with @ref
|
||||
* IEEE802154_CAP_AUTO_CSMA.
|
||||
* Internally this function reads ieee802154_radio_ops::caps and checks for
|
||||
* @ref IEEE802154_CAP_AUTO_CSMA.
|
||||
*
|
||||
* @param[in] dev IEEE802.15.4 device descriptor
|
||||
*
|
||||
@ -1040,14 +1038,14 @@ static inline bool ieee802154_radio_has_frame_retrans(ieee802154_dev_t *dev)
|
||||
*/
|
||||
static inline bool ieee802154_radio_has_auto_csma(ieee802154_dev_t *dev)
|
||||
{
|
||||
return dev->driver->get_cap(dev, IEEE802154_CAP_AUTO_CSMA);
|
||||
return (dev->driver->caps & IEEE802154_CAP_AUTO_CSMA);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if the device supports the IEEE802.15.4 Sub-GHz band
|
||||
*
|
||||
* Internally this function calls ieee802154_radio_ops::get_cap with @ref
|
||||
* IEEE802154_CAP_SUB_GHZ.
|
||||
* Internally this function reads ieee802154_radio_ops::caps and checks for
|
||||
* @ref IEEE802154_CAP_SUB_GHZ.
|
||||
*
|
||||
* @param[in] dev IEEE802.15.4 device descriptor
|
||||
*
|
||||
@ -1056,14 +1054,14 @@ static inline bool ieee802154_radio_has_auto_csma(ieee802154_dev_t *dev)
|
||||
*/
|
||||
static inline bool ieee802154_radio_has_sub_ghz(ieee802154_dev_t *dev)
|
||||
{
|
||||
return dev->driver->get_cap(dev, IEEE802154_CAP_SUB_GHZ);
|
||||
return (dev->driver->caps & IEEE802154_CAP_SUB_GHZ);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if the device supports the IEEE802.15.4 2.4 GHz band
|
||||
*
|
||||
* Internally this function calls ieee802154_radio_ops::get_cap with @ref
|
||||
* IEEE802154_CAP_24_GHZ.
|
||||
* Internally this function reads ieee802154_radio_ops::caps and checks for
|
||||
* @ref IEEE802154_CAP_24_GHZ.
|
||||
*
|
||||
* @param[in] dev IEEE802.15.4 device descriptor
|
||||
*
|
||||
@ -1072,14 +1070,14 @@ static inline bool ieee802154_radio_has_sub_ghz(ieee802154_dev_t *dev)
|
||||
*/
|
||||
static inline bool ieee802154_radio_has_24_ghz(ieee802154_dev_t *dev)
|
||||
{
|
||||
return dev->driver->get_cap(dev, IEEE802154_CAP_24_GHZ);
|
||||
return (dev->driver->caps & IEEE802154_CAP_24_GHZ);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if the device supports TX done interrupt
|
||||
*
|
||||
* Internally this function calls ieee802154_radio_ops::get_cap with @ref
|
||||
* IEEE802154_CAP_IRQ_TX_DONE.
|
||||
* Internally this function reads ieee802154_radio_ops::caps and checks for
|
||||
* @ref IEEE802154_CAP_IRQ_TX_DONE.
|
||||
*
|
||||
* @param[in] dev IEEE802.15.4 device descriptor
|
||||
*
|
||||
@ -1088,14 +1086,14 @@ static inline bool ieee802154_radio_has_24_ghz(ieee802154_dev_t *dev)
|
||||
*/
|
||||
static inline bool ieee802154_radio_has_irq_tx_done(ieee802154_dev_t *dev)
|
||||
{
|
||||
return dev->driver->get_cap(dev, IEEE802154_CAP_IRQ_TX_DONE);
|
||||
return (dev->driver->caps & IEEE802154_CAP_IRQ_TX_DONE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if the device supports RX start interrupt
|
||||
*
|
||||
* Internally this function calls ieee802154_radio_ops::get_cap with @ref
|
||||
* IEEE802154_CAP_IRQ_RX_START.
|
||||
* Internally this function reads ieee802154_radio_ops::caps and checks for
|
||||
* @ref IEEE802154_CAP_IRQ_RX_START.
|
||||
*
|
||||
* @param[in] dev IEEE802.15.4 device descriptor
|
||||
*
|
||||
@ -1104,14 +1102,14 @@ static inline bool ieee802154_radio_has_irq_tx_done(ieee802154_dev_t *dev)
|
||||
*/
|
||||
static inline bool ieee802154_radio_has_irq_rx_start(ieee802154_dev_t *dev)
|
||||
{
|
||||
return dev->driver->get_cap(dev, IEEE802154_CAP_IRQ_RX_START);
|
||||
return (dev->driver->caps & IEEE802154_CAP_IRQ_RX_START);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if the device supports TX start interrupt
|
||||
*
|
||||
* Internally this function calls ieee802154_radio_ops::get_cap with @ref
|
||||
* IEEE802154_CAP_IRQ_TX_START.
|
||||
* Internally this function reads ieee802154_radio_ops::caps and checks for
|
||||
* @ref IEEE802154_CAP_IRQ_TX_START.
|
||||
*
|
||||
* @param[in] dev IEEE802.15.4 device descriptor
|
||||
*
|
||||
@ -1120,13 +1118,13 @@ static inline bool ieee802154_radio_has_irq_rx_start(ieee802154_dev_t *dev)
|
||||
*/
|
||||
static inline bool ieee802154_radio_has_irq_tx_start(ieee802154_dev_t *dev)
|
||||
{
|
||||
return dev->driver->get_cap(dev, IEEE802154_CAP_IRQ_TX_START);
|
||||
return (dev->driver->caps & IEEE802154_CAP_IRQ_TX_START);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if the device supports CCA done interrupt
|
||||
*
|
||||
* Internally this function calls ieee802154_radio_ops::get_cap with @ref
|
||||
* Internally this function reads ieee802154_radio_ops::caps with @ref
|
||||
* IEEE802154_CAP_IRQ_CCA_DONE.
|
||||
*
|
||||
* @param[in] dev IEEE802.15.4 device descriptor
|
||||
@ -1136,15 +1134,15 @@ static inline bool ieee802154_radio_has_irq_tx_start(ieee802154_dev_t *dev)
|
||||
*/
|
||||
static inline bool ieee802154_radio_has_irq_cca_done(ieee802154_dev_t *dev)
|
||||
{
|
||||
return dev->driver->get_cap(dev, IEEE802154_CAP_IRQ_CCA_DONE);
|
||||
return (dev->driver->caps & IEEE802154_CAP_IRQ_CCA_DONE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Check if the device reports the number of retransmissions of the last
|
||||
* TX procedure.
|
||||
*
|
||||
* Internally this function calls ieee802154_radio_ops::get_cap with @ref
|
||||
* IEEE802154_CAP_FRAME_RETRANS_INFO.
|
||||
* Internally this function reads ieee802154_radio_ops::caps and checks for
|
||||
* @ref IEEE802154_CAP_FRAME_RETRANS_INFO.
|
||||
*
|
||||
* @param[in] dev IEEE802.15.4 device descriptor
|
||||
*
|
||||
@ -1154,7 +1152,7 @@ static inline bool ieee802154_radio_has_irq_cca_done(ieee802154_dev_t *dev)
|
||||
static inline bool ieee802154_radio_has_frame_retrans_info(
|
||||
ieee802154_dev_t *dev)
|
||||
{
|
||||
return dev->driver->get_cap(dev, IEEE802154_CAP_FRAME_RETRANS_INFO);
|
||||
return (dev->driver->caps & IEEE802154_CAP_FRAME_RETRANS_INFO);
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user