Loading...
Searching...
No Matches
radio.h
1/*
2 * Copyright (C) 2020 HAW Hamburg
3 *
4 * This file is subject to the terms and conditions of the GNU Lesser General
5 * Public License v2.1. See the file LICENSE in the top level directory for more
6 * details.
7 */
8
9#pragma once
10
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28#include <stdbool.h>
29#include "iolist.h"
30#include "sys/uio.h"
31#include "bitarithm.h"
32#include "byteorder.h"
33#include "net/eui64.h"
34#include "net/ieee802154.h"
35#include "errno.h"
36
41
161
165#define IEEE802154_RF_CAPS_PHY_MASK \
166 (IEEE802154_CAP_PHY_BPSK \
167 | IEEE802154_CAP_PHY_ASK \
168 | IEEE802154_CAP_PHY_OQPSK \
169 | IEEE802154_CAP_PHY_MR_OQPSK \
170 | IEEE802154_CAP_PHY_MR_OFDM \
171 | IEEE802154_CAP_PHY_MR_FSK) \
172
173
210
285
326
336
366
370typedef struct {
371 uint8_t min;
372 uint8_t max;
374
378typedef struct {
385 uint8_t rssi;
386 uint8_t lqi;
388
396
401
409 ieee802154_trx_ev_t status);
410
428
450
454typedef struct {
456 uint16_t channel;
457 uint8_t page;
458 int8_t pow;
460
469
478
489
493typedef enum {
510
511 /* add more as needed (e.g Energy Scanning, transmit slotted ACK) */
513
524 const uint32_t caps;
525
538 int (*write)(ieee802154_dev_t *dev, const iolist_t *psdu);
539
553 int (*len)(ieee802154_dev_t *dev);
554
578 int (*read)(ieee802154_dev_t *dev, void *buf, size_t size, ieee802154_rx_info_t *info);
591 int (*off)(ieee802154_dev_t *dev);
592
607
635
652
668
680 int (*set_cca_threshold)(ieee802154_dev_t *dev, int8_t threshold);
681
697
718
733 int (*set_frame_retrans)(ieee802154_dev_t *dev, uint8_t retrans);
734
754 int8_t retries);
755
768
784 int (*config_addr_filter)(ieee802154_dev_t *dev, ieee802154_af_cmd_t cmd, const void *value);
785
805 const void *value);
806};
807
816static inline int ieee802154_radio_write(ieee802154_dev_t *dev, const iolist_t *psdu)
817{
818 return dev->driver->write(dev, psdu);
819}
820
841{
842 return dev->driver->request_op(dev, IEEE802154_HAL_OP_TRANSMIT, NULL);
843}
844
872{
873 return dev->driver->confirm_op(dev, IEEE802154_HAL_OP_TRANSMIT, info);
874}
875
884{
885 return dev->driver->len(dev);
886}
887
900 void *buf,
901 size_t size,
903{
904 return dev->driver->read(dev, buf, size, info);
905}
906
916 int8_t threshold)
917{
918 return dev->driver->set_cca_threshold(dev, threshold);
919}
920
931{
932 return dev->driver->set_cca_mode(dev, mode);
933}
934
946 const ieee802154_phy_conf_t *conf)
947{
948 return dev->driver->config_phy(dev, conf);
949}
950
964 const void *value)
965{
966 return dev->driver->config_src_addr_match(dev, cmd, value);
967}
968
979{
980 return dev->driver->off(dev);
981}
982
996 const void* value)
997{
998 return dev->driver->config_addr_filter(dev, cmd, value);
999}
1000
1013{
1014 return dev->driver->set_frame_filter_mode(dev, mode);
1015}
1016
1030 uint8_t retrans)
1031{
1032 return dev->driver->set_frame_retrans(dev, retrans);
1033}
1034
1050 const ieee802154_csma_be_t *bd,
1051 int8_t retries)
1052{
1053 return dev->driver->set_csma_params(dev, bd, retries);
1054}
1055
1064{
1065 return dev->driver->request_on(dev);
1066}
1067
1076{
1077 return dev->driver->confirm_on(dev);
1078}
1079
1103static inline int ieee802154_radio_request_set_idle(ieee802154_dev_t *dev, bool force)
1104{
1105 return dev->driver->request_op(dev, IEEE802154_HAL_OP_SET_IDLE, &force);
1106}
1107
1122{
1123 return dev->driver->confirm_op(dev, IEEE802154_HAL_OP_SET_IDLE, NULL);
1124}
1125
1147{
1148 return dev->driver->request_op(dev, IEEE802154_HAL_OP_SET_RX, NULL);
1149}
1150
1165{
1166 return dev->driver->confirm_op(dev, IEEE802154_HAL_OP_SET_RX, NULL);
1167}
1168
1186static inline int ieee802154_radio_set_idle(ieee802154_dev_t *dev, bool force)
1187{
1188 int res = ieee802154_radio_request_set_idle(dev, force);
1189 if (res < 0) {
1190 return res;
1191 }
1192 while (ieee802154_radio_confirm_set_idle(dev) == -EAGAIN) {}
1193
1194 return 0;
1195}
1196
1213{
1214 int res = ieee802154_radio_request_set_rx(dev);
1215 if (res < 0) {
1216 return res;
1217 }
1218 while (ieee802154_radio_confirm_set_rx(dev) == -EAGAIN) {}
1219
1220 return 0;
1221}
1222
1240{
1241 return dev->driver->request_op(dev, IEEE802154_HAL_OP_CCA, NULL);
1242}
1243
1267{
1268 bool clear;
1269 int res = dev->driver->confirm_op(dev, IEEE802154_HAL_OP_CCA, &clear);
1270 if (res < 0) {
1271 return res;
1272 }
1273 return clear;
1274}
1275
1293{
1294 int res = ieee802154_radio_request_cca(dev);
1295 if (res < 0) {
1296 return res;
1297 }
1298 while ((res = ieee802154_radio_confirm_cca(dev)) == -EAGAIN) {}
1299
1300 return res;
1301}
1302
1315{
1317}
1318
1331{
1332 return (dev->driver->caps & IEEE802154_CAP_FRAME_RETRANS);
1333}
1334
1347{
1348 return (dev->driver->caps & IEEE802154_CAP_AUTO_CSMA);
1349}
1350
1363{
1364 return (dev->driver->caps & IEEE802154_CAP_SUB_GHZ);
1365}
1366
1379{
1380 return (dev->driver->caps & IEEE802154_CAP_24_GHZ);
1381}
1382
1395{
1396 return (dev->driver->caps & IEEE802154_CAP_IRQ_TX_DONE);
1397}
1398
1411{
1412 return (dev->driver->caps & IEEE802154_CAP_IRQ_RX_START);
1413}
1414
1427{
1428 return (dev->driver->caps & IEEE802154_CAP_IRQ_TX_START);
1429}
1430
1443{
1444 return (dev->driver->caps & IEEE802154_CAP_IRQ_CCA_DONE);
1445}
1446
1460 ieee802154_dev_t *dev)
1461{
1463}
1464
1477{
1478 return (dev->driver->caps & IEEE802154_CAP_PHY_BPSK);
1479}
1480
1493{
1494 return (dev->driver->caps & IEEE802154_CAP_PHY_ASK);
1495}
1496
1509{
1510 return (dev->driver->caps & IEEE802154_CAP_PHY_OQPSK);
1511}
1512
1525{
1526 return (dev->driver->caps & IEEE802154_CAP_PHY_MR_OQPSK);
1527}
1528
1541{
1542 return (dev->driver->caps & IEEE802154_CAP_PHY_MR_OFDM);
1543}
1544
1557{
1558 return (dev->driver->caps & IEEE802154_CAP_PHY_MR_FSK);
1559}
1560
1572{
1573 return (dev->driver->caps & IEEE802154_RF_CAPS_PHY_MASK);
1574}
1575
1586static inline uint32_t ieee802154_phy_mode_to_cap(
1587 ieee802154_phy_mode_t phy_mode)
1588{
1589 switch (phy_mode) {
1592 case IEEE802154_PHY_ASK:
1602
1604 default:
1605 break;
1606 }
1607
1608 return 0;
1609}
1610
1623{
1624 switch (cap) {
1626 return IEEE802154_PHY_BPSK;
1628 return IEEE802154_PHY_ASK;
1630 return IEEE802154_PHY_OQPSK;
1636 return IEEE802154_PHY_MR_FSK;
1637
1638 default:
1639 break;
1640 }
1641
1643}
1644
1645#ifdef __cplusplus
1646}
1647#endif
1648
Helper functions for bit arithmetic.
#define BIT8
Bit 8 set define.
Definition bitarithm.h:66
#define BIT17
Bit 17 set define.
Definition bitarithm.h:79
#define BIT11
Bit 11 set define.
Definition bitarithm.h:71
#define BIT9
Bit 9 set define.
Definition bitarithm.h:67
#define BIT14
Bit 14 set define.
Definition bitarithm.h:74
#define BIT18
Bit 18 set define.
Definition bitarithm.h:80
#define BIT1
Bit 1 set define.
Definition bitarithm.h:59
#define BIT16
Bit 16 set define.
Definition bitarithm.h:78
#define BIT10
Bit 10 set define.
Definition bitarithm.h:70
#define BIT3
Bit 3 set define.
Definition bitarithm.h:61
#define BIT13
Bit 13 set define.
Definition bitarithm.h:73
#define BIT2
Bit 2 set define.
Definition bitarithm.h:60
#define BIT7
Bit 7 set define.
Definition bitarithm.h:65
#define BIT4
Bit 4 set define.
Definition bitarithm.h:62
#define BIT12
Bit 12 set define.
Definition bitarithm.h:72
#define BIT6
Bit 6 set define.
Definition bitarithm.h:64
#define BIT0
Bit 0 set define.
Definition bitarithm.h:58
#define BIT15
Bit 15 set define.
Definition bitarithm.h:75
#define BIT5
Bit 5 set define.
Definition bitarithm.h:63
Functions to work with different byte orders.
EUI-64 data type definition.
#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:1075
static int ieee802154_radio_cca(ieee802154_dev_t *dev)
Perform a Clear Channel Assessment (blocking)
Definition radio.h:1292
static bool ieee802154_radio_has_irq_tx_done(ieee802154_dev_t *dev)
Check if the device supports TX done interrupt.
Definition radio.h:1394
static bool ieee802154_radio_has_phy_ask(ieee802154_dev_t *dev)
Check if the device supports the ASK PHY mode.
Definition radio.h:1492
static int ieee802154_radio_set_idle(ieee802154_dev_t *dev, bool force)
Set transceiver state to IDLE (blocking)
Definition radio.h:1186
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:962
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:899
ieee802154_cca_mode_t
IEEE802.15.4 CCA modes.
Definition radio.h:432
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:945
static int ieee802154_radio_confirm_cca(ieee802154_dev_t *dev)
Shortcut to ieee802154_radio_confirm_cca.
Definition radio.h:1266
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:1049
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:870
struct ieee802154_radio_ops ieee802154_radio_ops_t
Forward declaration of the radio ops structure.
Definition radio.h:40
struct ieee802154_dev ieee802154_dev_t
Forward declaration of the IEEE802.15.4 device descriptor.
Definition radio.h:400
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:1622
static int ieee802154_radio_confirm_set_idle(ieee802154_dev_t *dev)
Confirmation function for ieee802154_radio_request_set_idle.
Definition radio.h:1121
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:1378
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:929
ieee802154_src_match_t
Source Address Match commands.
Definition radio.h:289
static int ieee802154_radio_request_set_idle(ieee802154_dev_t *dev, bool force)
Request the transceiver state to IDLE.
Definition radio.h:1103
ieee802154_rf_caps_t
IEEE802.15.4 Radio capabilities.
Definition radio.h:47
static int ieee802154_radio_off(ieee802154_dev_t *dev)
Shortcut to ieee802154_radio_ops::off.
Definition radio.h:978
static bool ieee802154_radio_has_irq_ack_timeout(ieee802154_dev_t *dev)
Check if the device supports ACK timeout.
Definition radio.h:1314
static bool ieee802154_radio_has_irq_rx_start(ieee802154_dev_t *dev)
Check if the device supports RX start interrupt.
Definition radio.h:1410
static bool ieee802154_radio_has_phy_bpsk(ieee802154_dev_t *dev)
Check if the device supports the BPSK PHY mode.
Definition radio.h:1476
static int ieee802154_radio_request_cca(ieee802154_dev_t *dev)
Request Stand-Alone Clear Channel Assessment.
Definition radio.h:1239
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:1556
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:1524
ieee802154_trx_ev_t
IEEE802.15.4 Radio HAL events.
Definition radio.h:217
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:1459
ieee802154_hal_op_t
IEEE 802.15.4 radio operations.
Definition radio.h:493
static bool ieee802154_radio_has_phy_oqpsk(ieee802154_dev_t *dev)
Check if the device supports the O-QPSK PHY mode.
Definition radio.h:1508
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:1362
static int ieee802154_radio_request_transmit(ieee802154_dev_t *dev)
Transmit a preloaded frame.
Definition radio.h:840
static bool ieee802154_radio_has_irq_tx_start(ieee802154_dev_t *dev)
Check if the device supports TX start interrupt.
Definition radio.h:1426
static bool ieee802154_radio_has_irq_cca_done(ieee802154_dev_t *dev)
Check if the device supports CCA done interrupt.
Definition radio.h:1442
ieee802154_tx_status_t
Transmission status.
Definition radio.h:176
static int ieee802154_radio_len(ieee802154_dev_t *dev)
Shortcut to ieee802154_radio_ops::len.
Definition radio.h:883
#define IEEE802154_RF_CAPS_PHY_MASK
Bit-mask for PHY modes capabilities.
Definition radio.h:165
static int ieee802154_radio_request_on(ieee802154_dev_t *dev)
Shortcut to ieee802154_radio_ops::request_on.
Definition radio.h:1063
ieee802154_af_cmd_t
Address filter command.
Definition radio.h:330
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:1011
static int ieee802154_radio_set_rx(ieee802154_dev_t *dev)
Set transceiver state to RX (blocking)
Definition radio.h:1212
static int ieee802154_radio_write(ieee802154_dev_t *dev, const iolist_t *psdu)
Shortcut to ieee802154_radio_ops::write.
Definition radio.h:816
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:915
static uint32_t ieee802154_radio_get_phy_modes(ieee802154_dev_t *dev)
Get supported PHY modes of the device.
Definition radio.h:1571
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:994
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:408
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:1586
ieee802154_filter_mode_t
Frame Filter mode.
Definition radio.h:340
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:1029
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:1540
static bool ieee802154_radio_has_auto_csma(ieee802154_dev_t *dev)
Check if the device supports Auto CSMA-CA for transmissions.
Definition radio.h:1346
static int ieee802154_radio_confirm_set_rx(ieee802154_dev_t *dev)
Confirmation function for ieee802154_radio_request_set_rx.
Definition radio.h:1164
static bool ieee802154_radio_has_frame_retrans(ieee802154_dev_t *dev)
Check if the device supports frame retransmissions (with CSMA-CA).
Definition radio.h:1330
static int ieee802154_radio_request_set_rx(ieee802154_dev_t *dev)
Request the transceiver state to RX.
Definition radio.h:1146
@ IEEE802154_CCA_MODE_ED_THRESHOLD
CCA using first mode (energy detection)
Definition radio.h:436
@ IEEE802154_CCA_MODE_ED_THRESH_OR_CS
CCA using third mode (energy detection OR carrier sensing)
Definition radio.h:448
@ IEEE802154_CCA_MODE_ED_THRESH_AND_CS
CCA using third mode (energy detection AND carrier sensing)
Definition radio.h:444
@ IEEE802154_CCA_MODE_CARRIER_SENSING
CCA using second mode (carrier sensing)
Definition radio.h:440
@ IEEE802154_SRC_MATCH_EXT_CLEAR
Clear extended address from entry.
Definition radio.h:324
@ IEEE802154_SRC_MATCH_EN
Enable or disable source address match.
Definition radio.h:298
@ IEEE802154_SRC_MATCH_EXT_ADD
Add a extended address to entry.
Definition radio.h:317
@ IEEE802154_SRC_MATCH_SHORT_ADD
Add a short address to entry.
Definition radio.h:305
@ IEEE802154_SRC_MATCH_SHORT_CLEAR
Clear short address from entry.
Definition radio.h:311
@ IEEE802154_CAP_PHY_BPSK
Binary Phase Shift Keying PHY mode.
Definition radio.h:130
@ IEEE802154_CAP_FRAME_RETRANS_INFO
the device provides the number of retransmissions
Definition radio.h:122
@ IEEE802154_CAP_FRAME_RETRANS
the device supports frame retransmissions with CSMA-CA
Definition radio.h:64
@ IEEE802154_CAP_IRQ_RX_START
the device reports the start of a frame (SFD) when received.
Definition radio.h:108
@ IEEE802154_CAP_IRQ_ACK_TIMEOUT
the device support ACK timeout interrupt
Definition radio.h:86
@ IEEE802154_CAP_IRQ_TX_DONE
the device reports when the transmission is done
Definition radio.h:104
@ IEEE802154_CAP_SRC_ADDR_MATCH
the device supports source address match table.
Definition radio.h:159
@ IEEE802154_CAP_PHY_OQPSK
Offset Quadrature Phase-Shift Keying.
Definition radio.h:138
@ IEEE802154_CAP_PHY_MR_OQPSK
Multi-Rate Offset Quadrature Phase-Shift Keying PHY mode.
Definition radio.h:142
@ IEEE802154_CAP_REG_RETENTION
the device retains all register values when off.
Definition radio.h:126
@ IEEE802154_CAP_PHY_MR_FSK
Multi-Rate Frequency Shift Keying PHY mode.
Definition radio.h:150
@ IEEE802154_CAP_PHY_ASK
Amplitude-Shift Keying PHY mode.
Definition radio.h:134
@ IEEE802154_CAP_AUTO_CSMA
the device supports Auto CSMA-CA
Definition radio.h:74
@ IEEE802154_CAP_IRQ_CRC_ERROR
the device reports reception off frames with invalid CRC.
Definition radio.h:100
@ IEEE802154_CAP_SUB_GHZ
the device support the IEEE802.15.4 Sub GHz band
Definition radio.h:96
@ IEEE802154_CAP_IRQ_TX_START
the device reports the start of a frame (SFD) was sent.
Definition radio.h:112
@ IEEE802154_CAP_IRQ_CCA_DONE
the device reports the end of the CCA procedure
Definition radio.h:116
@ IEEE802154_CAP_24_GHZ
the device supports the IEEE802.15.4 2.4 GHz band
Definition radio.h:92
@ IEEE802154_CAP_PHY_MR_OFDM
Multi-Rate Orthogonal Frequency-Division Multiplexing PHY mode.
Definition radio.h:146
@ IEEE802154_RADIO_INDICATION_CRC_ERROR
the transceiver received a frame with an invalid crc.
Definition radio.h:236
@ IEEE802154_RADIO_INDICATION_TX_START
the transceiver sent out a valid SFD
Definition radio.h:245
@ IEEE802154_RADIO_CONFIRM_CCA
the CCA procedure finished
Definition radio.h:283
@ IEEE802154_RADIO_INDICATION_RX_START
the transceiver detected a valid SFD
Definition radio.h:223
@ IEEE802154_RADIO_INDICATION_RX_DONE
the transceiver received a frame and lies in the internal framebuffer.
Definition radio.h:267
@ IEEE802154_RADIO_CONFIRM_TX_DONE
the transceiver either finished sending a frame, the retransmission procedure or the channel activity...
Definition radio.h:277
@ IEEE802154_HAL_OP_TRANSMIT
Transmission of a preloaded frame.
Definition radio.h:497
@ IEEE802154_HAL_OP_CCA
Request Clear Channel Assessment.
Definition radio.h:509
@ IEEE802154_HAL_OP_SET_IDLE
Set the transceiver state to IDLE (RX off).
Definition radio.h:505
@ IEEE802154_HAL_OP_SET_RX
Set the transceiver state to RX.
Definition radio.h:501
@ TX_STATUS_FRAME_PENDING
the transceiver received a valid ACK with the frame pending bit
Definition radio.h:197
@ TX_STATUS_SUCCESS
the transceiver successfully sent a frame.
Definition radio.h:190
@ TX_STATUS_MEDIUM_BUSY
the CSMA-CA algorithm or CCA failed to measure a clear channel
Definition radio.h:208
@ TX_STATUS_NO_ACK
the transceiver ran out of retransmission
Definition radio.h:204
@ IEEE802154_AF_PAN_COORD
Set device as PAN coordinator (bool)
Definition radio.h:334
@ IEEE802154_AF_EXT_ADDR
Set extended IEEE 802.15.4 address (eui64_t)
Definition radio.h:332
@ IEEE802154_AF_SHORT_ADDR
Set short IEEE 802.15.4 address (network_uint16_t)
Definition radio.h:331
@ IEEE802154_AF_PANID
Set PAN ID (uint16_t)
Definition radio.h:333
@ IEEE802154_FILTER_SNIFFER
accept all frames, regardless of FCS
Definition radio.h:364
@ IEEE802154_FILTER_ACCEPT
accept all valid frames that match address filter configuration
Definition radio.h:344
@ IEEE802154_FILTER_ACK_ONLY
accept only ACK frames
Definition radio.h:352
@ IEEE802154_FILTER_PROMISC
accept all valid frames
Definition radio.h:358
ieee802154_mr_oqpsk_chips_t
802.15.4 MR-OQPSK chip rates
Definition ieee802154.h:231
ieee802154_mr_fsk_srate_t
802.15.4 MR-FSK symbol rates
Definition ieee802154.h:219
ieee802154_phy_mode_t
802.15.4 PHY modes
Definition ieee802154.h:195
ieee802154_mr_fsk_fec_t
802.15.4 forward error correction schemes
Definition ieee802154.h:210
@ IEEE802154_PHY_BPSK
Binary Phase Shift Keying.
Definition ieee802154.h:197
@ IEEE802154_PHY_MR_OFDM
Multi-Rate Orthogonal Frequency-Division Multiplexing.
Definition ieee802154.h:201
@ IEEE802154_PHY_OQPSK
Offset Quadrature Phase-Shift Keying.
Definition ieee802154.h:199
@ IEEE802154_PHY_ASK
Amplitude-Shift Keying.
Definition ieee802154.h:198
@ IEEE802154_PHY_MR_FSK
Multi-Rate Frequency Shift Keying.
Definition ieee802154.h:202
@ IEEE802154_PHY_DISABLED
PHY disabled, no mode selected.
Definition ieee802154.h:196
@ IEEE802154_PHY_MR_OQPSK
Multi-Rate Offset Quadrature Phase-Shift Keying.
Definition ieee802154.h:200
struct iolist iolist_t
iolist forward declaration
Definition iolist.h:33
iolist scatter / gather IO
CSMA-CA exponential backoff parameters.
Definition radio.h:370
uint8_t max
maximum value of the exponential backoff
Definition radio.h:372
uint8_t min
minimum value of the exponential backoff
Definition radio.h:371
the IEEE802.15.4 device descriptor
Definition radio.h:414
const ieee802154_radio_ops_t * driver
pointer to the operations of the device
Definition radio.h:418
ieee802154_cb_t cb
the event callback of the device
Definition radio.h:426
void * priv
pointer to the private descriptor of the device
Definition radio.h:422
extension for IEEE 802.15.4g MR-FSK PHY
Definition radio.h:482
uint8_t mod_idx
modulation index
Definition radio.h:486
ieee802154_mr_fsk_srate_t srate
symbol rate
Definition radio.h:484
ieee802154_phy_conf_t super
common settings
Definition radio.h:483
uint8_t mod_ord
modulation order, 2 or 4
Definition radio.h:485
ieee802154_mr_fsk_fec_t fec
forward error correction
Definition radio.h:487
extension for IEEE 802.15.4g MR-ODFM PHY
Definition radio.h:473
uint8_t option
OFDM Option.
Definition radio.h:475
uint8_t scheme
Modulation & Coding Scheme.
Definition radio.h:476
ieee802154_phy_conf_t super
common settings
Definition radio.h:474
extension for IEEE 802.15.4g MR-OQPSK PHY
Definition radio.h:464
uint8_t rate_mode
rate mode
Definition radio.h:467
ieee802154_mr_oqpsk_chips_t chips
chip rate
Definition radio.h:466
ieee802154_phy_conf_t super
common settings
Definition radio.h:465
Holder of the PHY configuration.
Definition radio.h:454
uint8_t page
IEEE802.15.4 channel page.
Definition radio.h:457
uint16_t channel
IEEE802.15.4 channel number.
Definition radio.h:456
int8_t pow
TX power in dBm.
Definition radio.h:458
ieee802154_phy_mode_t phy_mode
IEEE802.15.4 PHY mode.
Definition radio.h:455
Radio ops struct declaration.
Definition radio.h:517
int(* set_cca_mode)(ieee802154_dev_t *dev, ieee802154_cca_mode_t mode)
Set CCA mode.
Definition radio.h:696
const uint32_t caps
Radio device capabilities.
Definition radio.h:524
int(* request_op)(ieee802154_dev_t *dev, ieee802154_hal_op_t op, void *ctx)
Request a radio operation.
Definition radio.h:651
int(* confirm_on)(ieee802154_dev_t *dev)
Confirmation function for ieee802154_radio_ops::request_on.
Definition radio.h:634
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:680
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:753
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:804
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:717
int(* off)(ieee802154_dev_t *dev)
Turn off the device.
Definition radio.h:591
int(* write)(ieee802154_dev_t *dev, const iolist_t *psdu)
Write a frame into the framebuffer.
Definition radio.h:538
int(* len)(ieee802154_dev_t *dev)
Get the length of the received PSDU frame.
Definition radio.h:553
int(* set_frame_filter_mode)(ieee802154_dev_t *dev, ieee802154_filter_mode_t mode)
Set the frame filter moder.
Definition radio.h:767
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:578
int(* request_on)(ieee802154_dev_t *dev)
Request to turn on the device.
Definition radio.h:606
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:667
int(* set_frame_retrans)(ieee802154_dev_t *dev, uint8_t retrans)
Set number of frame retransmissions.
Definition radio.h:733
int(* config_addr_filter)(ieee802154_dev_t *dev, ieee802154_af_cmd_t cmd, const void *value)
Configure the address filter.
Definition radio.h:784
RX information associated to a frame.
Definition radio.h:378
uint8_t rssi
RSSI of the received frame.
Definition radio.h:385
uint8_t lqi
LQI of the received frame.
Definition radio.h:386
TX information of the last transmitted frame.
Definition radio.h:392
int8_t retrans
number of frame retransmissions of the last TX
Definition radio.h:394
ieee802154_tx_status_t status
status of the last transmission
Definition radio.h:393
IEEE 802.15.4 header definitions.
libc header for scatter/gather I/O