radio.h
1 /*
2  * SPDX-FileCopyrightText: 2020 HAW Hamburg
3  * SPDX-License-Identifier: LGPL-2.1-only
4  */
5 
6 #pragma once
7 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 #include <stdbool.h>
26 #include "iolist.h"
27 #include "sys/uio.h"
28 #include "bitarithm.h"
29 #include "byteorder.h"
30 #include "net/eui64.h"
31 #include "net/ieee802154.h"
32 #include "errno.h"
33 
38 
44 typedef enum {
165 
169 #define IEEE802154_RF_CAPS_PHY_MASK \
170  (IEEE802154_CAP_PHY_BPSK \
171  | IEEE802154_CAP_PHY_ASK \
172  | IEEE802154_CAP_PHY_OQPSK \
173  | IEEE802154_CAP_PHY_MR_OQPSK \
174  | IEEE802154_CAP_PHY_MR_OFDM \
175  | IEEE802154_CAP_PHY_MR_FSK) \
176 
180 typedef enum {
214 
221 typedef enum {
228 
241 
250 
272 
289 
293 typedef enum {
330 
334 typedef enum {
340 
344 typedef enum {
370 
374 typedef struct {
375  uint8_t min;
376  uint8_t max;
378 
382 typedef struct {
389  uint8_t rssi;
390  uint8_t lqi;
392 
396 typedef struct {
398  int8_t retrans;
400 
404 typedef struct ieee802154_dev ieee802154_dev_t;
405 
412 typedef void (*ieee802154_cb_t)(ieee802154_dev_t *dev,
413  ieee802154_trx_ev_t status);
414 
426  void *priv;
431 };
432 
436 typedef enum {
454 
458 typedef struct {
460  uint16_t channel;
461  uint8_t page;
462  int8_t pow;
464 
468 typedef struct {
471  uint8_t rate_mode;
473 
477 typedef struct {
479  uint8_t option;
480  uint8_t scheme;
482 
486 typedef struct {
489  uint8_t mod_ord;
490  uint8_t mod_idx;
493 
497 typedef enum {
514 
515  /* add more as needed (e.g Energy Scanning, transmit slotted ACK) */
517 
528  const uint32_t caps;
529 
542  int (*write)(ieee802154_dev_t *dev, const iolist_t *psdu);
543 
557  int (*len)(ieee802154_dev_t *dev);
558 
582  int (*read)(ieee802154_dev_t *dev, void *buf, size_t size, ieee802154_rx_info_t *info);
595  int (*off)(ieee802154_dev_t *dev);
596 
611 
639 
655  int (*request_op)(ieee802154_dev_t *dev, ieee802154_hal_op_t op, void *ctx);
656 
671  int (*confirm_op)(ieee802154_dev_t *dev, ieee802154_hal_op_t op, void *ctx);
672 
684  int (*set_cca_threshold)(ieee802154_dev_t *dev, int8_t threshold);
685 
701 
722 
737  int (*set_frame_retrans)(ieee802154_dev_t *dev, uint8_t retrans);
738 
758  int8_t retries);
759 
772 
785 
801  int (*config_addr_filter)(ieee802154_dev_t *dev, ieee802154_af_cmd_t cmd, const void *value);
802 
822  const void *value);
823 };
824 
834 static inline bool ieee802154_radio_has_capability(ieee802154_dev_t *dev, uint32_t cap)
835 {
836  return (dev->driver->caps & cap) == cap;
837 }
838 
847 static inline int ieee802154_radio_write(ieee802154_dev_t *dev, const iolist_t *psdu)
848 {
849  return dev->driver->write(dev, psdu);
850 }
851 
872 {
873  return dev->driver->request_op(dev, IEEE802154_HAL_OP_TRANSMIT, NULL);
874 }
875 
902  ieee802154_tx_info_t *info)
903 {
904  return dev->driver->confirm_op(dev, IEEE802154_HAL_OP_TRANSMIT, info);
905 }
906 
914 static inline int ieee802154_radio_len(ieee802154_dev_t *dev)
915 {
916  return dev->driver->len(dev);
917 }
918 
931  void *buf,
932  size_t size,
933  ieee802154_rx_info_t *info)
934 {
935  return dev->driver->read(dev, buf, size, info);
936 }
937 
947  int8_t threshold)
948 {
949  return dev->driver->set_cca_threshold(dev, threshold);
950 }
951 
962 {
963  return dev->driver->set_cca_mode(dev, mode);
964 }
965 
977  const ieee802154_phy_conf_t *conf)
978 {
979  return dev->driver->config_phy(dev, conf);
980 }
981 
995  const void *value)
996 {
997  return dev->driver->config_src_addr_match(dev, cmd, value);
998 }
999 
1010 {
1011  return dev->driver->off(dev);
1012 }
1013 
1026  ieee802154_af_cmd_t cmd,
1027  const void* value)
1028 {
1029  return dev->driver->config_addr_filter(dev, cmd, value);
1030 }
1031 
1044 {
1045  return dev->driver->set_frame_filter_mode(dev, mode);
1046 }
1047 
1060 {
1061  if (dev->driver->get_frame_filter_mode) {
1062  return dev->driver->get_frame_filter_mode(dev, mode);
1063  }
1064  return -ENOTSUP;
1065 }
1066 
1080  uint8_t retrans)
1081 {
1082  return dev->driver->set_frame_retrans(dev, retrans);
1083 }
1084 
1100  const ieee802154_csma_be_t *bd,
1101  int8_t retries)
1102 {
1103  return dev->driver->set_csma_params(dev, bd, retries);
1104 }
1105 
1114 {
1115  return dev->driver->request_on(dev);
1116 }
1117 
1126 {
1127  return dev->driver->confirm_on(dev);
1128 }
1129 
1153 static inline int ieee802154_radio_request_set_idle(ieee802154_dev_t *dev, bool force)
1154 {
1155  return dev->driver->request_op(dev, IEEE802154_HAL_OP_SET_IDLE, &force);
1156 }
1157 
1172 {
1173  return dev->driver->confirm_op(dev, IEEE802154_HAL_OP_SET_IDLE, NULL);
1174 }
1175 
1197 {
1198  return dev->driver->request_op(dev, IEEE802154_HAL_OP_SET_RX, NULL);
1199 }
1200 
1215 {
1216  return dev->driver->confirm_op(dev, IEEE802154_HAL_OP_SET_RX, NULL);
1217 }
1218 
1236 static inline int ieee802154_radio_set_idle(ieee802154_dev_t *dev, bool force)
1237 {
1238  int res = ieee802154_radio_request_set_idle(dev, force);
1239  if (res < 0) {
1240  return res;
1241  }
1242  while (ieee802154_radio_confirm_set_idle(dev) == -EAGAIN) {}
1243 
1244  return 0;
1245 }
1246 
1263 {
1264  int res = ieee802154_radio_request_set_rx(dev);
1265  if (res < 0) {
1266  return res;
1267  }
1268  while (ieee802154_radio_confirm_set_rx(dev) == -EAGAIN) {}
1269 
1270  return 0;
1271 }
1272 
1290 {
1291  return dev->driver->request_op(dev, IEEE802154_HAL_OP_CCA, NULL);
1292 }
1293 
1317 {
1318  bool clear;
1319  int res = dev->driver->confirm_op(dev, IEEE802154_HAL_OP_CCA, &clear);
1320  if (res < 0) {
1321  return res;
1322  }
1323  return clear;
1324 }
1325 
1343 {
1344  int res = ieee802154_radio_request_cca(dev);
1345  if (res < 0) {
1346  return res;
1347  }
1348  while ((res = ieee802154_radio_confirm_cca(dev)) == -EAGAIN) {}
1349 
1350  return res;
1351 }
1352 
1365 {
1366  return (dev->driver->caps & IEEE802154_CAP_IRQ_ACK_TIMEOUT);
1367 }
1368 
1381 {
1382  return (dev->driver->caps & IEEE802154_CAP_FRAME_RETRANS);
1383 }
1384 
1397 {
1398  return (dev->driver->caps & IEEE802154_CAP_AUTO_CSMA);
1399 }
1400 
1413 {
1414  return (dev->driver->caps & IEEE802154_CAP_SUB_GHZ);
1415 }
1416 
1429 {
1430  return (dev->driver->caps & IEEE802154_CAP_24_GHZ);
1431 }
1432 
1445 {
1446  return (dev->driver->caps & IEEE802154_CAP_IRQ_TX_DONE);
1447 }
1448 
1461 {
1462  return (dev->driver->caps & IEEE802154_CAP_IRQ_RX_START);
1463 }
1464 
1477 {
1478  return (dev->driver->caps & IEEE802154_CAP_IRQ_TX_START);
1479 }
1480 
1493 {
1494  return (dev->driver->caps & IEEE802154_CAP_IRQ_CCA_DONE);
1495 }
1496 
1510  ieee802154_dev_t *dev)
1511 {
1513 }
1514 
1527 {
1528  return (dev->driver->caps & IEEE802154_CAP_PHY_BPSK);
1529 }
1530 
1543 {
1544  return (dev->driver->caps & IEEE802154_CAP_PHY_ASK);
1545 }
1546 
1559 {
1560  return (dev->driver->caps & IEEE802154_CAP_PHY_OQPSK);
1561 }
1562 
1575 {
1576  return (dev->driver->caps & IEEE802154_CAP_PHY_MR_OQPSK);
1577 }
1578 
1591 {
1592  return (dev->driver->caps & IEEE802154_CAP_PHY_MR_OFDM);
1593 }
1594 
1607 {
1608  return (dev->driver->caps & IEEE802154_CAP_PHY_MR_FSK);
1609 }
1610 
1622 {
1623  return (dev->driver->caps & IEEE802154_RF_CAPS_PHY_MASK);
1624 }
1625 
1636 static inline uint32_t ieee802154_phy_mode_to_cap(
1637  ieee802154_phy_mode_t phy_mode)
1638 {
1639  switch (phy_mode) {
1640  case IEEE802154_PHY_BPSK:
1641  return IEEE802154_CAP_PHY_BPSK;
1642  case IEEE802154_PHY_ASK:
1643  return IEEE802154_CAP_PHY_ASK;
1644  case IEEE802154_PHY_OQPSK:
1645  return IEEE802154_CAP_PHY_OQPSK;
1650  case IEEE802154_PHY_MR_FSK:
1652 
1654  default:
1655  break;
1656  }
1657 
1658  return 0;
1659 }
1660 
1673 {
1674  switch (cap) {
1676  return IEEE802154_PHY_BPSK;
1678  return IEEE802154_PHY_ASK;
1680  return IEEE802154_PHY_OQPSK;
1682  return IEEE802154_PHY_MR_OQPSK;
1684  return IEEE802154_PHY_MR_OFDM;
1686  return IEEE802154_PHY_MR_FSK;
1687 
1688  default:
1689  break;
1690  }
1691 
1692  return IEEE802154_PHY_DISABLED;
1693 }
1694 
1695 #ifdef __cplusplus
1696 }
1697 #endif
1698 
Helper functions for bit arithmetic.
#define BIT8
Bit 8 set define.
Definition: bitarithm.h:63
#define BIT17
Bit 17 set define.
Definition: bitarithm.h:76
#define BIT11
Bit 11 set define.
Definition: bitarithm.h:68
#define BIT9
Bit 9 set define.
Definition: bitarithm.h:64
#define BIT14
Bit 14 set define.
Definition: bitarithm.h:71
#define BIT18
Bit 18 set define.
Definition: bitarithm.h:77
#define BIT1
Bit 1 set define.
Definition: bitarithm.h:56
#define BIT16
Bit 16 set define.
Definition: bitarithm.h:75
#define BIT10
Bit 10 set define.
Definition: bitarithm.h:67
#define BIT3
Bit 3 set define.
Definition: bitarithm.h:58
#define BIT13
Bit 13 set define.
Definition: bitarithm.h:70
#define BIT2
Bit 2 set define.
Definition: bitarithm.h:57
#define BIT19
Bit 19 set define.
Definition: bitarithm.h:78
#define BIT7
Bit 7 set define.
Definition: bitarithm.h:62
#define BIT4
Bit 4 set define.
Definition: bitarithm.h:59
#define BIT12
Bit 12 set define.
Definition: bitarithm.h:69
#define BIT6
Bit 6 set define.
Definition: bitarithm.h:61
#define BIT0
Bit 0 set define.
Definition: bitarithm.h:55
#define BIT15
Bit 15 set define.
Definition: bitarithm.h:72
#define BIT5
Bit 5 set define.
Definition: bitarithm.h:60
Functions to work with different byte orders.
EUI-64 data type definition.
#define ENOTSUP
Not supported (may be the same value as [EOPNOTSUPP]).
Definition: errno.h:129
#define EAGAIN
Resource unavailable, try again (may be the same value as [EWOULDBLOCK]).
Definition: errno.h:74
static int ieee802154_radio_confirm_on(ieee802154_dev_t *dev)
Shortcut to ieee802154_radio_ops::confirm_on.
Definition: radio.h:1125
static int ieee802154_radio_cca(ieee802154_dev_t *dev)
Perform a Clear Channel Assessment (blocking)
Definition: radio.h:1342
static bool ieee802154_radio_has_irq_tx_done(ieee802154_dev_t *dev)
Check if the device supports TX done interrupt.
Definition: radio.h:1444
static bool ieee802154_radio_has_capability(ieee802154_dev_t *dev, uint32_t cap)
Check if the device has a specific capability.
Definition: radio.h:834
static bool ieee802154_radio_has_phy_ask(ieee802154_dev_t *dev)
Check if the device supports the ASK PHY mode.
Definition: radio.h:1542
static int ieee802154_radio_set_idle(ieee802154_dev_t *dev, bool force)
Set transceiver state to IDLE (blocking)
Definition: radio.h:1236
static int ieee802154_radio_config_src_address_match(ieee802154_dev_t *dev, ieee802154_src_match_t cmd, const void *value)
Shortcut to ieee802154_radio_ops::config_src_addr_match.
Definition: radio.h:993
static int ieee802154_radio_read(ieee802154_dev_t *dev, void *buf, size_t size, ieee802154_rx_info_t *info)
Shortcut to ieee802154_radio_ops::read.
Definition: radio.h:930
ieee802154_cca_mode_t
IEEE802.15.4 CCA modes.
Definition: radio.h:436
static int ieee802154_radio_config_phy(ieee802154_dev_t *dev, const ieee802154_phy_conf_t *conf)
Shortcut to ieee802154_radio_ops::config_phy.
Definition: radio.h:976
static int ieee802154_radio_confirm_cca(ieee802154_dev_t *dev)
Shortcut to ieee802154_radio_confirm_cca.
Definition: radio.h:1316
static int ieee802154_radio_set_csma_params(ieee802154_dev_t *dev, const ieee802154_csma_be_t *bd, int8_t retries)
Shortcut to ieee802154_radio_ops::set_csma_params.
Definition: radio.h:1099
static int ieee802154_radio_confirm_transmit(ieee802154_dev_t *dev, ieee802154_tx_info_t *info)
Confirmation function for ieee802154_radio_request_transmit This function must be called to finish th...
Definition: radio.h:901
static ieee802154_phy_mode_t ieee802154_cap_to_phy_mode(uint32_t cap)
Convert a ieee802154_rf_caps_t to a ieee802154_phy_mode_t value.
Definition: radio.h:1672
static int ieee802154_radio_confirm_set_idle(ieee802154_dev_t *dev)
Confirmation function for ieee802154_radio_request_set_idle.
Definition: radio.h:1171
static bool ieee802154_radio_has_24_ghz(ieee802154_dev_t *dev)
Check if the device supports the IEEE802.15.4 2.4 GHz band.
Definition: radio.h:1428
static int ieee802154_radio_set_cca_mode(ieee802154_dev_t *dev, ieee802154_cca_mode_t mode)
Shortcut to ieee802154_radio_ops::set_cca_mode.
Definition: radio.h:960
ieee802154_src_match_t
Source Address Match commands.
Definition: radio.h:293
static int ieee802154_radio_request_set_idle(ieee802154_dev_t *dev, bool force)
Request the transceiver state to IDLE.
Definition: radio.h:1153
ieee802154_rf_caps_t
IEEE802.15.4 Radio capabilities.
Definition: radio.h:44
static int ieee802154_radio_off(ieee802154_dev_t *dev)
Shortcut to ieee802154_radio_ops::off.
Definition: radio.h:1009
static bool ieee802154_radio_has_irq_ack_timeout(ieee802154_dev_t *dev)
Check if the device supports ACK timeout.
Definition: radio.h:1364
static bool ieee802154_radio_has_irq_rx_start(ieee802154_dev_t *dev)
Check if the device supports RX start interrupt.
Definition: radio.h:1460
static bool ieee802154_radio_has_phy_bpsk(ieee802154_dev_t *dev)
Check if the device supports the BPSK PHY mode.
Definition: radio.h:1526
static int ieee802154_radio_request_cca(ieee802154_dev_t *dev)
Request Stand-Alone Clear Channel Assessment.
Definition: radio.h:1289
static bool ieee802154_radio_has_phy_mr_fsk(ieee802154_dev_t *dev)
Check if the device supports the MR-FSK PHY mode.
Definition: radio.h:1606
static bool ieee802154_radio_has_phy_mr_oqpsk(ieee802154_dev_t *dev)
Check if the device supports the MR-O-QPSK PHY mode.
Definition: radio.h:1574
ieee802154_trx_ev_t
IEEE802.15.4 Radio HAL events.
Definition: radio.h:221
static bool ieee802154_radio_has_frame_retrans_info(ieee802154_dev_t *dev)
Check if the device reports the number of retransmissions of the last TX procedure.
Definition: radio.h:1509
ieee802154_hal_op_t
IEEE 802.15.4 radio operations.
Definition: radio.h:497
static bool ieee802154_radio_has_phy_oqpsk(ieee802154_dev_t *dev)
Check if the device supports the O-QPSK PHY mode.
Definition: radio.h:1558
static bool ieee802154_radio_has_sub_ghz(ieee802154_dev_t *dev)
Check if the device supports the IEEE802.15.4 Sub-GHz band.
Definition: radio.h:1412
static int ieee802154_radio_request_transmit(ieee802154_dev_t *dev)
Transmit a preloaded frame.
Definition: radio.h:871
static bool ieee802154_radio_has_irq_tx_start(ieee802154_dev_t *dev)
Check if the device supports TX start interrupt.
Definition: radio.h:1476
static bool ieee802154_radio_has_irq_cca_done(ieee802154_dev_t *dev)
Check if the device supports CCA done interrupt.
Definition: radio.h:1492
ieee802154_tx_status_t
Transmission status.
Definition: radio.h:180
static int ieee802154_radio_len(ieee802154_dev_t *dev)
Shortcut to ieee802154_radio_ops::len.
Definition: radio.h:914
#define IEEE802154_RF_CAPS_PHY_MASK
Bit-mask for PHY modes capabilities.
Definition: radio.h:169
static int ieee802154_radio_request_on(ieee802154_dev_t *dev)
Shortcut to ieee802154_radio_ops::request_on.
Definition: radio.h:1113
ieee802154_af_cmd_t
Address filter command.
Definition: radio.h:334
static int ieee802154_radio_set_frame_filter_mode(ieee802154_dev_t *dev, ieee802154_filter_mode_t mode)
Shortcut to ieee802154_radio_ops::set_frame_filter_mode.
Definition: radio.h:1042
static int ieee802154_radio_set_rx(ieee802154_dev_t *dev)
Set transceiver state to RX (blocking)
Definition: radio.h:1262
static int ieee802154_radio_write(ieee802154_dev_t *dev, const iolist_t *psdu)
Shortcut to ieee802154_radio_ops::write.
Definition: radio.h:847
static int ieee802154_radio_set_cca_threshold(ieee802154_dev_t *dev, int8_t threshold)
Shortcut to ieee802154_radio_ops::set_cca_threshold.
Definition: radio.h:946
static uint32_t ieee802154_radio_get_phy_modes(ieee802154_dev_t *dev)
Get supported PHY modes of the device.
Definition: radio.h:1621
static int ieee802154_radio_config_addr_filter(ieee802154_dev_t *dev, ieee802154_af_cmd_t cmd, const void *value)
Shortcut to ieee802154_radio_ops::config_addr_filter.
Definition: radio.h:1025
void(* ieee802154_cb_t)(ieee802154_dev_t *dev, ieee802154_trx_ev_t status)
Prototype of the IEEE802.15.4 device event callback.
Definition: radio.h:412
static uint32_t ieee802154_phy_mode_to_cap(ieee802154_phy_mode_t phy_mode)
Convert a ieee802154_phy_mode_t to a ieee802154_rf_caps_t value.
Definition: radio.h:1636
ieee802154_filter_mode_t
Frame Filter mode.
Definition: radio.h:344
static int ieee802154_radio_set_frame_retrans(ieee802154_dev_t *dev, uint8_t retrans)
Shortcut to ieee802154_radio_ops::set_frame_retrans.
Definition: radio.h:1079
static int ieee802154_radio_get_frame_filter_mode(ieee802154_dev_t *dev, ieee802154_filter_mode_t *mode)
Shortcut to ieee802154_radio_ops::get_frame_filter_mode.
Definition: radio.h:1058
static bool ieee802154_radio_has_phy_mr_ofdm(ieee802154_dev_t *dev)
Check if the device supports the MR-OFDM PHY mode.
Definition: radio.h:1590
static bool ieee802154_radio_has_auto_csma(ieee802154_dev_t *dev)
Check if the device supports Auto CSMA-CA for transmissions.
Definition: radio.h:1396
static int ieee802154_radio_confirm_set_rx(ieee802154_dev_t *dev)
Confirmation function for ieee802154_radio_request_set_rx.
Definition: radio.h:1214
static bool ieee802154_radio_has_frame_retrans(ieee802154_dev_t *dev)
Check if the device supports frame retransmissions (with CSMA-CA).
Definition: radio.h:1380
static int ieee802154_radio_request_set_rx(ieee802154_dev_t *dev)
Request the transceiver state to RX.
Definition: radio.h:1196
@ IEEE802154_CCA_MODE_ED_THRESHOLD
CCA using first mode (energy detection)
Definition: radio.h:440
@ IEEE802154_CCA_MODE_ED_THRESH_OR_CS
CCA using third mode (energy detection OR carrier sensing)
Definition: radio.h:452
@ IEEE802154_CCA_MODE_ED_THRESH_AND_CS
CCA using third mode (energy detection AND carrier sensing)
Definition: radio.h:448
@ IEEE802154_CCA_MODE_CARRIER_SENSING
CCA using second mode (carrier sensing)
Definition: radio.h:444
@ IEEE802154_SRC_MATCH_EXT_CLEAR
Clear extended address from entry.
Definition: radio.h:328
@ IEEE802154_SRC_MATCH_EN
Enable or disable source address match.
Definition: radio.h:302
@ IEEE802154_SRC_MATCH_EXT_ADD
Add a extended address to entry.
Definition: radio.h:321
@ IEEE802154_SRC_MATCH_SHORT_ADD
Add a short address to entry.
Definition: radio.h:309
@ IEEE802154_SRC_MATCH_SHORT_CLEAR
Clear short address from entry.
Definition: radio.h:315
@ IEEE802154_CAP_PHY_BPSK
Binary Phase Shift Keying PHY mode.
Definition: radio.h:134
@ IEEE802154_CAP_FRAME_RETRANS_INFO
the device provides the number of retransmissions
Definition: radio.h:126
@ IEEE802154_CAP_FRAME_RETRANS
the device supports frame retransmissions with CSMA-CA
Definition: radio.h:61
@ IEEE802154_CAP_IRQ_RX_START
the device reports the start of a frame (SFD) when received.
Definition: radio.h:112
@ IEEE802154_CAP_IRQ_ACK_TIMEOUT
the device support ACK timeout interrupt
Definition: radio.h:90
@ IEEE802154_CAP_IRQ_TX_DONE
the device reports when the transmission is done
Definition: radio.h:108
@ IEEE802154_CAP_SRC_ADDR_MATCH
the device supports source address match table.
Definition: radio.h:163
@ IEEE802154_CAP_PHY_OQPSK
Offset Quadrature Phase-Shift Keying.
Definition: radio.h:142
@ IEEE802154_CAP_PHY_MR_OQPSK
Multi-Rate Offset Quadrature Phase-Shift Keying PHY mode.
Definition: radio.h:146
@ IEEE802154_CAP_REG_RETENTION
the device retains all register values when off.
Definition: radio.h:130
@ IEEE802154_CAP_PHY_MR_FSK
Multi-Rate Frequency Shift Keying PHY mode.
Definition: radio.h:154
@ IEEE802154_CAP_PHY_ASK
Amplitude-Shift Keying PHY mode.
Definition: radio.h:138
@ IEEE802154_CAP_AUTO_CSMA
the device supports Auto CSMA-CA
Definition: radio.h:71
@ IEEE802154_CAP_IRQ_CRC_ERROR
the device reports reception off frames with invalid CRC.
Definition: radio.h:104
@ IEEE802154_CAP_SUB_GHZ
the device support the IEEE802.15.4 Sub GHz band
Definition: radio.h:100
@ IEEE802154_CAP_IRQ_TX_START
the device reports the start of a frame (SFD) was sent.
Definition: radio.h:116
@ IEEE802154_CAP_IRQ_CCA_DONE
the device reports the end of the CCA procedure
Definition: radio.h:120
@ IEEE802154_CAP_AUTO_ACK
the device supports automatic ACK frame transmission
Definition: radio.h:78
@ IEEE802154_CAP_24_GHZ
the device supports the IEEE802.15.4 2.4 GHz band
Definition: radio.h:96
@ IEEE802154_CAP_PHY_MR_OFDM
Multi-Rate Orthogonal Frequency-Division Multiplexing PHY mode.
Definition: radio.h:150
@ IEEE802154_RADIO_INDICATION_CRC_ERROR
the transceiver received a frame with an invalid crc.
Definition: radio.h:240
@ IEEE802154_RADIO_INDICATION_TX_START
the transceiver sent out a valid SFD
Definition: radio.h:249
@ IEEE802154_RADIO_CONFIRM_CCA
the CCA procedure finished
Definition: radio.h:287
@ IEEE802154_RADIO_INDICATION_RX_START
the transceiver detected a valid SFD
Definition: radio.h:227
@ IEEE802154_RADIO_INDICATION_RX_DONE
the transceiver received a frame and lies in the internal framebuffer.
Definition: radio.h:271
@ IEEE802154_RADIO_CONFIRM_TX_DONE
the transceiver either finished sending a frame, the retransmission procedure or the channel activity...
Definition: radio.h:281
@ IEEE802154_HAL_OP_TRANSMIT
Transmission of a preloaded frame.
Definition: radio.h:501
@ IEEE802154_HAL_OP_CCA
Request Clear Channel Assessment.
Definition: radio.h:513
@ IEEE802154_HAL_OP_SET_IDLE
Set the transceiver state to IDLE (RX off).
Definition: radio.h:509
@ IEEE802154_HAL_OP_SET_RX
Set the transceiver state to RX.
Definition: radio.h:505
@ TX_STATUS_FRAME_PENDING
the transceiver received a valid ACK with the frame pending bit
Definition: radio.h:201
@ TX_STATUS_SUCCESS
the transceiver successfully sent a frame.
Definition: radio.h:194
@ TX_STATUS_MEDIUM_BUSY
the CSMA-CA algorithm or CCA failed to measure a clear channel
Definition: radio.h:212
@ TX_STATUS_NO_ACK
the transceiver ran out of retransmission
Definition: radio.h:208
@ IEEE802154_AF_PAN_COORD
Set device as PAN coordinator (bool)
Definition: radio.h:338
@ IEEE802154_AF_EXT_ADDR
Set extended IEEE 802.15.4 address (eui64_t)
Definition: radio.h:336
@ IEEE802154_AF_SHORT_ADDR
Set short IEEE 802.15.4 address (network_uint16_t)
Definition: radio.h:335
@ IEEE802154_AF_PANID
Set PAN ID (uint16_t)
Definition: radio.h:337
@ IEEE802154_FILTER_SNIFFER
accept all frames, regardless of FCS
Definition: radio.h:368
@ IEEE802154_FILTER_ACCEPT
accept all valid frames that match address filter configuration
Definition: radio.h:348
@ IEEE802154_FILTER_ACK_ONLY
accept only ACK frames
Definition: radio.h:356
@ IEEE802154_FILTER_PROMISC
accept all valid frames
Definition: radio.h:362
ieee802154_mr_oqpsk_chips_t
802.15.4 MR-OQPSK chip rates
Definition: ieee802154.h:228
ieee802154_mr_fsk_srate_t
802.15.4 MR-FSK symbol rates
Definition: ieee802154.h:216
ieee802154_phy_mode_t
802.15.4 PHY modes
Definition: ieee802154.h:192
ieee802154_mr_fsk_fec_t
802.15.4 forward error correction schemes
Definition: ieee802154.h:207
@ IEEE802154_PHY_BPSK
Binary Phase Shift Keying.
Definition: ieee802154.h:194
@ IEEE802154_PHY_MR_OFDM
Multi-Rate Orthogonal Frequency-Division Multiplexing.
Definition: ieee802154.h:198
@ IEEE802154_PHY_OQPSK
Offset Quadrature Phase-Shift Keying.
Definition: ieee802154.h:196
@ IEEE802154_PHY_ASK
Amplitude-Shift Keying.
Definition: ieee802154.h:195
@ IEEE802154_PHY_MR_FSK
Multi-Rate Frequency Shift Keying.
Definition: ieee802154.h:199
@ IEEE802154_PHY_DISABLED
PHY disabled, no mode selected.
Definition: ieee802154.h:193
@ IEEE802154_PHY_MR_OQPSK
Multi-Rate Offset Quadrature Phase-Shift Keying.
Definition: ieee802154.h:197
iolist scatter / gather IO
CSMA-CA exponential backoff parameters.
Definition: radio.h:374
uint8_t max
maximum value of the exponential backoff
Definition: radio.h:376
uint8_t min
minimum value of the exponential backoff
Definition: radio.h:375
the IEEE802.15.4 device descriptor
Definition: radio.h:418
const ieee802154_radio_ops_t * driver
pointer to the operations of the device
Definition: radio.h:422
ieee802154_cb_t cb
the event callback of the device
Definition: radio.h:430
void * priv
pointer to the private descriptor of the device
Definition: radio.h:426
extension for IEEE 802.15.4g MR-FSK PHY
Definition: radio.h:486
uint8_t mod_idx
modulation index
Definition: radio.h:490
ieee802154_mr_fsk_srate_t srate
symbol rate
Definition: radio.h:488
ieee802154_phy_conf_t super
common settings
Definition: radio.h:487
uint8_t mod_ord
modulation order, 2 or 4
Definition: radio.h:489
ieee802154_mr_fsk_fec_t fec
forward error correction
Definition: radio.h:491
extension for IEEE 802.15.4g MR-ODFM PHY
Definition: radio.h:477
uint8_t option
OFDM Option.
Definition: radio.h:479
uint8_t scheme
Modulation & Coding Scheme.
Definition: radio.h:480
ieee802154_phy_conf_t super
common settings
Definition: radio.h:478
extension for IEEE 802.15.4g MR-OQPSK PHY
Definition: radio.h:468
uint8_t rate_mode
rate mode
Definition: radio.h:471
ieee802154_mr_oqpsk_chips_t chips
chip rate
Definition: radio.h:470
ieee802154_phy_conf_t super
common settings
Definition: radio.h:469
Holder of the PHY configuration.
Definition: radio.h:458
uint8_t page
IEEE802.15.4 channel page.
Definition: radio.h:461
uint16_t channel
IEEE802.15.4 channel number.
Definition: radio.h:460
int8_t pow
TX power in dBm.
Definition: radio.h:462
ieee802154_phy_mode_t phy_mode
IEEE802.15.4 PHY mode.
Definition: radio.h:459
Radio ops struct declaration.
Definition: radio.h:521
int(* set_cca_mode)(ieee802154_dev_t *dev, ieee802154_cca_mode_t mode)
Set CCA mode.
Definition: radio.h:700
const uint32_t caps
Radio device capabilities.
Definition: radio.h:528
int(* request_op)(ieee802154_dev_t *dev, ieee802154_hal_op_t op, void *ctx)
Request a radio operation.
Definition: radio.h:655
int(* confirm_on)(ieee802154_dev_t *dev)
Confirmation function for ieee802154_radio_ops::request_on.
Definition: radio.h:638
int(* set_cca_threshold)(ieee802154_dev_t *dev, int8_t threshold)
Set the threshold for the Energy Detection (first mode of CCA)
Definition: radio.h:684
int(* set_csma_params)(ieee802154_dev_t *dev, const ieee802154_csma_be_t *bd, int8_t retries)
Set the CSMA-CA parameters.
Definition: radio.h:757
int(* config_src_addr_match)(ieee802154_dev_t *dev, ieee802154_src_match_t cmd, const void *value)
Set the source address match configuration.
Definition: radio.h:821
int(* config_phy)(ieee802154_dev_t *dev, const ieee802154_phy_conf_t *conf)
Set IEEE802.15.4 PHY configuration (channel, TX power)
Definition: radio.h:721
int(* off)(ieee802154_dev_t *dev)
Turn off the device.
Definition: radio.h:595
int(* write)(ieee802154_dev_t *dev, const iolist_t *psdu)
Write a frame into the framebuffer.
Definition: radio.h:542
int(* len)(ieee802154_dev_t *dev)
Get the length of the received PSDU frame.
Definition: radio.h:557
int(* set_frame_filter_mode)(ieee802154_dev_t *dev, ieee802154_filter_mode_t mode)
Set the frame filter mode.
Definition: radio.h:771
int(* get_frame_filter_mode)(ieee802154_dev_t *dev, ieee802154_filter_mode_t *mode)
Get the frame filter mode.
Definition: radio.h:784
int(* read)(ieee802154_dev_t *dev, void *buf, size_t size, ieee802154_rx_info_t *info)
Read a frame from the internal framebuffer.
Definition: radio.h:582
int(* request_on)(ieee802154_dev_t *dev)
Request to turn on the device.
Definition: radio.h:610
int(* confirm_op)(ieee802154_dev_t *dev, ieee802154_hal_op_t op, void *ctx)
Confirmation function for ieee802154_radio_ops::request_op.
Definition: radio.h:671
int(* set_frame_retrans)(ieee802154_dev_t *dev, uint8_t retrans)
Set number of frame retransmissions.
Definition: radio.h:737
int(* config_addr_filter)(ieee802154_dev_t *dev, ieee802154_af_cmd_t cmd, const void *value)
Configure the address filter.
Definition: radio.h:801
RX information associated to a frame.
Definition: radio.h:382
uint8_t rssi
RSSI of the received frame.
Definition: radio.h:389
uint8_t lqi
LQI of the received frame.
Definition: radio.h:390
TX information of the last transmitted frame.
Definition: radio.h:396
int8_t retrans
number of frame retransmissions of the last TX
Definition: radio.h:398
ieee802154_tx_status_t status
status of the last transmission
Definition: radio.h:397
iolist structure definition
Definition: iolist.h:35
IEEE 802.15.4 header definitions.
libc header for scatter/gather I/O