IEEE 802.15.4 header definitions and utility functions. More...
IEEE 802.15.4 header definitions and utility functions.
Modules | |
IEEE802.15.4 compile configurations | |
Files | |
file | ieee802154.h |
IEEE 802.15.4 header definitions. | |
Macros | |
#define | IEEE802154_SFD (0xa7) |
Default start frame delimiter. | |
#define | IEEE802154_FRAME_LEN_MAX (127U) |
maximum 802.15.4 frame length | |
#define | IEEE802154G_FRAME_LEN_MAX (2047U) |
maximum 802.15.4g-2012 frame length | |
#define | IEEE802154_ACK_FRAME_LEN (5U) |
ACK frame length. | |
#define | IEEE802154_LIFS_SYMS (40U) |
Number of symbols to wait during Long Inter Frame Spacing. | |
#define | IEEE802154_SIFS_SYMS (12U) |
Number of symbols to wait during Short Inter Frame Spacing. | |
#define | IEEE802154_SIFS_MAX_FRAME_SIZE (18U) |
Maximum frame size to consider a frame as short. | |
#define | IEEE802154_ACK_TIMEOUT_SYMS (54) |
ACK Timeout period in symbols. | |
#define | IEEE802154_MR_OFDM_SYMBOL_TIME_US (120) |
Symbol time for IEEE 802.15.4 MR-OFDM in µs. | |
#define | IEEE802154_MR_FSK_SYMBOL_TIME_US (20) |
Symbol time for IEEE 802.15.4 MR-FSK in µs. More... | |
#define | IEEE802154_RADIO_RSSI_OFFSET (-174) |
value of measured power when RSSI is zero. More... | |
#define | IEEE802154_PHY_MR_FSK_PHR_LEN (2) |
MR-FSK PHY header length. | |
#define | IEEE802154_PHY_MR_FSK_2FSK_SFD_LEN (2) |
MR-FSK SFD length on Filtered 2-FSK. | |
#define | IEEE802154G_ATURNAROUNDTIME_US (1 * US_PER_MS) |
For the SUN PHYs, the value is 1 ms expressed in symbol periods, rounded up to the next integer number of symbol periods using the ceiling() function. More... | |
#define | IEEE802154_ATURNAROUNDTIME_IN_SYMBOLS (12) |
IEEE Std 802.15.4-2020 Table 11-1—PHY constants: The value is 12 for all other PHYs. | |
#define | IEEE802154_SYMBOL_TIME_US (16) |
O-QPSK Symbol time for 2.4 GHz: More... | |
#define | IEEE802154_CCA_DURATION_IN_SYMBOLS (8) |
IEEE Std 802.15.4-2020 Table 11-1—PHY constants: For all other PHYs¹, the duration of 8 symbol periods. More... | |
#define | CONFIG_IEEE802154_DEFAULT_CSMA_CA_MIN_BE (3U) |
IEEE802.15.4 default value for minimum backoff exponent. | |
#define | CONFIG_IEEE802154_DEFAULT_CSMA_CA_RETRIES (4U) |
IEEE802.15.4 default value for maximum number of CSMA-CA retries. | |
#define | CONFIG_IEEE802154_DEFAULT_CSMA_CA_MAX_BE (5U) |
IEEE802.15.4 default value for maximum backoff exponent. | |
#define | CONFIG_IEEE802154_CCA_THRESH_DEFAULT (-70) |
IEEE802.15.4 default value for CCA threshold (in dBm) | |
#define | CONFIG_IEEE802154_DEFAULT_MAX_FRAME_RETRANS (4U) |
IEEE802.15.4 default value for maximum frame retries. | |
#define | CONFIG_IEEE802154_AUTO_ACK_DISABLE 0 |
Disable Auto ACK support. | |
#define | CONFIG_IEEE802154_DEFAULT_ACK_REQ 1 |
Request ACKs by default. | |
#define | CONFIG_IEEE802154_DSME_CAP_REDUCTION 0 |
Enable DSME CAP reduction. More... | |
#define | CONFIG_IEEE802154_DSME_MAC_RESPONSE_WAIT_TIME (244U) |
Set the maximum DSME MAC response wait time. More... | |
#define | CONFIG_IEEE802154_DSME_SCAN_DURATION (4U) |
Set the scan duration. More... | |
#define | CONFIG_IEEE802154_DSME_SUPERFRAME_ORDER (3U) |
Set IEEE 802.15.4 DSME Superframe Order (SO) The SO sets the slot duration to 60 * symbol_time_us * 2^SO usecs. More... | |
#define | CONFIG_IEEE802154_DSME_MULTISUPERFRAME_ORDER (3U) |
Set IEEE 802.15.4 DSME Multisuperframe Order (MO) More... | |
#define | CONFIG_IEEE802154_DSME_BEACON_ORDER (3U) |
Set IEEE 802.15.4 DSME Beacon Order (BO) More... | |
#define | CONFIG_IEEE802154_DSME_STATIC_GTS 0 |
Use static GTS allocation. More... | |
#define | CONFIG_IEEE802154_DSME_GTS_EXPIRATION (16U) |
Set expiration time of DSME GTS slot. More... | |
#define | CONFIG_IEEE802154_DSME_MIN_COORD_LQI (100U) |
Set the minimum LQI to consider a beacon from a coordinator valid. More... | |
Enumerations | |
enum | ieee802154_phy_mode_t { IEEE802154_PHY_DISABLED , IEEE802154_PHY_BPSK , IEEE802154_PHY_ASK , IEEE802154_PHY_OQPSK , IEEE802154_PHY_MR_OQPSK , IEEE802154_PHY_MR_OFDM , IEEE802154_PHY_MR_FSK , IEEE802154_PHY_NO_OP } |
802.15.4 PHY modes More... | |
enum | ieee802154_mr_fsk_fec_t { IEEE802154_FEC_NONE , IEEE802154_FEC_NRNSC , IEEE802154_FEC_RSC } |
802.15.4 forward error correction schemes More... | |
enum | ieee802154_mr_fsk_srate_t { IEEE802154_MR_FSK_SRATE_50K , IEEE802154_MR_FSK_SRATE_100K , IEEE802154_MR_FSK_SRATE_150K , IEEE802154_MR_FSK_SRATE_200K , IEEE802154_MR_FSK_SRATE_300K , IEEE802154_MR_FSK_SRATE_400K } |
802.15.4 MR-FSK symbol rates More... | |
enum | ieee802154_mr_oqpsk_chips_t { IEEE802154_MR_OQPSK_CHIPS_100 , IEEE802154_MR_OQPSK_CHIPS_200 , IEEE802154_MR_OQPSK_CHIPS_1000 , IEEE802154_MR_OQPSK_CHIPS_2000 } |
802.15.4 MR-OQPSK chip rates More... | |
Functions | |
static uint8_t | ieee802154_mr_fsk_plen (ieee802154_mr_fsk_srate_t srate) |
Get the minimum preamble length for a given symbol rate. More... | |
size_t | ieee802154_set_frame_hdr (uint8_t *buf, const uint8_t *src, size_t src_len, const uint8_t *dst, size_t dst_len, le_uint16_t src_pan, le_uint16_t dst_pan, uint8_t flags, uint8_t seq) |
Initializes an IEEE 802.15.4 MAC frame header in buf . More... | |
size_t | ieee802154_get_frame_hdr_len (const uint8_t *mhr) |
Get length of MAC header. More... | |
int | ieee802154_get_src (const uint8_t *mhr, uint8_t *src, le_uint16_t *src_pan) |
Gets source address from MAC header. More... | |
int | ieee802154_get_dst (const uint8_t *mhr, uint8_t *dst, le_uint16_t *dst_pan) |
Gets destination address from MAC header. More... | |
int | ieee802154_dst_filter (const uint8_t *mhr, uint16_t pan, network_uint16_t short_addr, const eui64_t *ext_addr) |
Check whether a frame pass the IEEE 802.15.4 frame filter. More... | |
static uint8_t | ieee802154_get_seq (const uint8_t *mhr) |
Gets sequence number from MAC header. More... | |
static eui64_t * | ieee802154_get_iid (eui64_t *eui64, const uint8_t *addr, size_t addr_len) |
Generates an IPv6 interface identifier from an IEEE 802.15.4 address. More... | |
static int16_t | ieee802154_rssi_to_dbm (uint8_t rssi) |
Convert from RSSI scale to dBm. More... | |
static uint8_t | ieee802154_dbm_to_rssi (int16_t dbm) |
Convert from dBm scale to RSSI. More... | |
const uint8_t | ieee802154_addr_bcast [IEEE802154_ADDR_BCAST_LEN] |
Broadcast address. | |
#define | IEEE802154_ADDR_BCAST { 0xff, 0xff } |
Special address definitions. More... | |
#define | IEEE802154_ADDR_BCAST_LEN (IEEE802154_SHORT_ADDRESS_LEN) |
Length in byte of IEEE802154_ADDR_BCAST. | |
#define | IEEE802154_SHORT_ADDRESS_LEN (2U) |
IEEE 802.15.4 address lengths. More... | |
#define | IEEE802154_LONG_ADDRESS_LEN (8U) |
long address (EUI-64) | |
#define | IEEE802154_MAX_HDR_LEN (23U) |
IEEE802.15.4 FCF field definitions. | |
#define | IEEE802154_MIN_FRAME_LEN (IEEE802154_FCF_LEN + sizeof(uint8_t)) |
#define | IEEE802154_FCF_LEN (2U) |
#define | IEEE802154_FCS_LEN (2U) |
#define | IEEE802154_FCF_TYPE_MASK (0x07) |
#define | IEEE802154_FCF_TYPE_BEACON (0x00) |
#define | IEEE802154_FCF_TYPE_DATA (0x01) |
#define | IEEE802154_FCF_TYPE_ACK (0x02) |
#define | IEEE802154_FCF_TYPE_MACCMD (0x03) |
#define | IEEE802154_FCF_SECURITY_EN (0x08) |
enable security | |
#define | IEEE802154_FCF_FRAME_PEND (0x10) |
follow-up frame is pending | |
#define | IEEE802154_FCF_ACK_REQ (0x20) |
acknowledgement requested from receiver | |
#define | IEEE802154_FCF_PAN_COMP (0x40) |
compress source PAN ID | |
#define | IEEE802154_FCF_DST_ADDR_MASK (0x0c) |
#define | IEEE802154_FCF_DST_ADDR_VOID (0x00) |
no destination address | |
#define | IEEE802154_FCF_DST_ADDR_RESV (0x04) |
reserved address mode | |
#define | IEEE802154_FCF_DST_ADDR_SHORT (0x08) |
destination address length is 2 | |
#define | IEEE802154_FCF_DST_ADDR_LONG (0x0c) |
destination address length is 8 | |
#define | IEEE802154_FCF_VERS_MASK (0x30) |
#define | IEEE802154_FCF_VERS_V0 (0x00) |
#define | IEEE802154_FCF_VERS_V1 (0x10) |
#define | IEEE802154_FCF_SRC_ADDR_MASK (0xc0) |
#define | IEEE802154_FCF_SRC_ADDR_VOID (0x00) |
no source address | |
#define | IEEE802154_FCF_SRC_ADDR_RESV (0x40) |
reserved address mode | |
#define | IEEE802154_FCF_SRC_ADDR_SHORT (0x80) |
source address length is 2 | |
#define | IEEE802154_FCF_SRC_ADDR_LONG (0xc0) |
source address length is 8 | |
#define | IEEE802154_CHANNEL_MIN_SUBGHZ (0U) |
Channel ranges. More... | |
#define | IEEE802154_CHANNEL_MAX_SUBGHZ (10U) |
Maximum channel for sub-GHz band. | |
#define | IEEE802154_CHANNEL_MIN (11U) |
Minimum channel for 2.4 GHz band. | |
#define | IEEE802154_CHANNEL_MAX (26U) |
Maximum channel for 2.4 GHz band. | |
#define | IEEE802154_PHY_MR_FSK_2FSK_CODED_SFD_0 (0x6F4E) |
For the MR-FSK PHY, the SFD value when PHR + PSDU are coded/uncoded and with phyMRFSKSFD = 0 or 1 respectively. More... | |
#define | IEEE802154_PHY_MR_FSK_2FSK_CODED_SFD_1 (0x632D) |
#define | IEEE802154_PHY_MR_FSK_2FSK_UNCODED_SFD_0 (0x90E4) |
#define | IEEE802154_PHY_MR_FSK_2FSK_UNCODED_SFD_1 (0x7A0E) |
#define CONFIG_IEEE802154_DSME_BEACON_ORDER (3U) |
Set IEEE 802.15.4 DSME Beacon Order (BO)
The BO sets the beacon interval to 2^(BO-SO)
superframes.
Definition at line 532 of file ieee802154.h.
#define CONFIG_IEEE802154_DSME_CAP_REDUCTION 0 |
Enable DSME CAP reduction.
Definition at line 466 of file ieee802154.h.
#define CONFIG_IEEE802154_DSME_GTS_EXPIRATION (16U) |
Set expiration time of DSME GTS slot.
Sets the expiration time of DSME GTS slot (in number of idle slots). If DSME detects no activity, it will deallocate the GTS slot.
Definition at line 558 of file ieee802154.h.
#define CONFIG_IEEE802154_DSME_MAC_RESPONSE_WAIT_TIME (244U) |
Set the maximum DSME MAC response wait time.
This configuration sets the maximum wait times for MAC commands (association, DSME GTS allocation, etc). The unit is "base superframe duration" (60 * symbol_time_us).
Definition at line 479 of file ieee802154.h.
#define CONFIG_IEEE802154_DSME_MIN_COORD_LQI (100U) |
Set the minimum LQI to consider a beacon from a coordinator valid.
Definition at line 567 of file ieee802154.h.
#define CONFIG_IEEE802154_DSME_MULTISUPERFRAME_ORDER (3U) |
Set IEEE 802.15.4 DSME Multisuperframe Order (MO)
The MO sets the number of superframes per multisuperframe to 2^(MO-SO)
.
Definition at line 519 of file ieee802154.h.
#define CONFIG_IEEE802154_DSME_SCAN_DURATION (4U) |
Set the scan duration.
Set the scan duration for each channel to 60 * symbol_time_us * (2^scanDuration + 1)
Definition at line 491 of file ieee802154.h.
#define CONFIG_IEEE802154_DSME_STATIC_GTS 0 |
Use static GTS allocation.
When set, the MAC implementation will not use scheduling functions. This requires that the upper layer allocates slots manually using NETOPT_GTS_ALLOC.
Definition at line 546 of file ieee802154.h.
#define CONFIG_IEEE802154_DSME_SUPERFRAME_ORDER (3U) |
Set IEEE 802.15.4 DSME Superframe Order (SO) The SO sets the slot duration to 60 * symbol_time_us * 2^SO
usecs.
E.g for O-QPSK an SO=3 renders a slot duration of 60 * 16 * 8
= 7.6 ms and a superframe duration of 122.88 ms.
Settings this value to 3 allows to transmit full IEEE 802.15.4 O-QPSK frames (127 bytes).
Definition at line 506 of file ieee802154.h.
#define IEEE802154_ADDR_BCAST { 0xff, 0xff } |
Special address definitions.
Static initializer for broadcast address
Definition at line 272 of file ieee802154.h.
#define IEEE802154_CCA_DURATION_IN_SYMBOLS (8) |
IEEE Std 802.15.4-2020 Table 11-1—PHY constants: For all other PHYs¹, the duration of 8 symbol periods.
[1] all but MR-O-QPSK
Definition at line 191 of file ieee802154.h.
#define IEEE802154_CHANNEL_MIN_SUBGHZ (0U) |
#define IEEE802154_MR_FSK_SYMBOL_TIME_US (20) |
Symbol time for IEEE 802.15.4 MR-FSK in µs.
symbol time is always 20 µs for MR-FSK (table 0, pg. 7)
Definition at line 133 of file ieee802154.h.
#define IEEE802154_PHY_MR_FSK_2FSK_CODED_SFD_0 (0x6F4E) |
For the MR-FSK PHY, the SFD value when PHR + PSDU are coded/uncoded and with phyMRFSKSFD = 0 or 1 respectively.
802.15.4g, Table 131 (p. 51)
Definition at line 153 of file ieee802154.h.
#define IEEE802154_RADIO_RSSI_OFFSET (-174) |
value of measured power when RSSI is zero.
This value is defined in the IEEE 802.15.4 standard
Definition at line 140 of file ieee802154.h.
#define IEEE802154_SHORT_ADDRESS_LEN (2U) |
#define IEEE802154_SYMBOL_TIME_US (16) |
O-QPSK Symbol time for 2.4 GHz:
IEEE Std 802.15.4-2006 6.5.2.3: Each data symbol shall be mapped into a 32-chip PN sequence 6.5.2.4: Chip rate is nominally 2.0 Mchip/s on the 2.4 GHz O-QPSK band
-> 32 Chip/symbol / 2MChip/s = 16 µs/symbol
Definition at line 182 of file ieee802154.h.
#define IEEE802154G_ATURNAROUNDTIME_US (1 * US_PER_MS) |
For the SUN PHYs, the value is 1 ms expressed in symbol periods, rounded up to the next integer number of symbol periods using the ceiling() function.
802.15.4g, Table 70 (p. 43)
Definition at line 165 of file ieee802154.h.
802.15.4 forward error correction schemes
Enumerator | |
---|---|
IEEE802154_FEC_NONE | no forward error correction |
IEEE802154_FEC_NRNSC | non-recursive and non-systematic code |
IEEE802154_FEC_RSC | recursive and systematic code |
Definition at line 211 of file ieee802154.h.
802.15.4 MR-FSK symbol rates
Definition at line 220 of file ieee802154.h.
802.15.4 MR-OQPSK chip rates
Enumerator | |
---|---|
IEEE802154_MR_OQPSK_CHIPS_100 | 100 kChip/s |
IEEE802154_MR_OQPSK_CHIPS_200 | 200 kChip/s |
IEEE802154_MR_OQPSK_CHIPS_1000 | 1000 kChip/s |
IEEE802154_MR_OQPSK_CHIPS_2000 | 2000 kChip/s |
Definition at line 232 of file ieee802154.h.
802.15.4 PHY modes
Definition at line 196 of file ieee802154.h.
|
inlinestatic |
Convert from dBm scale to RSSI.
The RSSI calculation is based on the IEEE 802.15.4 2020 specification and it's represented as one octet of integer.
RSSI equal to zero maps to -174 dBm and has the same scale as dBm (1 RSSI step == 1 dBm). Therefore an RSSI value of 254 maps to +80 dBm.
[in] | dbm | RF power in dBm scale. |
Definition at line 784 of file ieee802154.h.
int ieee802154_dst_filter | ( | const uint8_t * | mhr, |
uint16_t | pan, | ||
network_uint16_t | short_addr, | ||
const eui64_t * | ext_addr | ||
) |
Check whether a frame pass the IEEE 802.15.4 frame filter.
A frame passes the frame filter only if:
[in] | mhr | MAC header (PSDU) |
[in] | pan | PAN ID of the frame filter. |
[in] | short_addr | Short Address of the frame filter. |
[in] | ext_addr | Extended Address of the frame filter. |
int ieee802154_get_dst | ( | const uint8_t * | mhr, |
uint8_t * | dst, | ||
le_uint16_t * | dst_pan | ||
) |
Gets destination address from MAC header.
dst
!= NULL) && (dst_pan
!= NULL)[in] | mhr | MAC header. |
[out] | dst | Destination address in network byte order in MAC header. |
[out] | dst_pan | Destination PAN in little-endian byte order in MAC header. |
mhr
contains unexpected flags. size_t ieee802154_get_frame_hdr_len | ( | const uint8_t * | mhr | ) |
Get length of MAC header.
[in] | mhr | MAC header. |
|
inlinestatic |
Generates an IPv6 interface identifier from an IEEE 802.15.4 address.
eui64
!= NULL) && (addr
!= NULL) [out] | eui64 | The resulting EUI-64. |
[in] | addr | An IEEE 802.15.4 address. |
[in] | addr_len | The length of addr . Must be 2 (short address), 4 (PAN ID + short address), or 8 (long address). |
eui64
on success. addr_len
was of illegal length. Definition at line 710 of file ieee802154.h.
|
inlinestatic |
Gets sequence number from MAC header.
mhr
> 3[in] | mhr | MAC header. |
mhr
. Definition at line 686 of file ieee802154.h.
int ieee802154_get_src | ( | const uint8_t * | mhr, |
uint8_t * | src, | ||
le_uint16_t * | src_pan | ||
) |
Gets source address from MAC header.
src
!= NULL) && (src_pan
!= NULL)[in] | mhr | MAC header. |
[out] | src | Source address in network byte order in MAC header. |
[out] | src_pan | Source PAN little-endian byte order in MAC header. |
mhr
contains unexpected flags.
|
inlinestatic |
Get the minimum preamble length for a given symbol rate.
From IEEE 802.15.4g Table 6-64
[in] | srate | symbol rate |
Definition at line 247 of file ieee802154.h.
|
inlinestatic |
Convert from RSSI scale to dBm.
The RSSI calculation is based on the IEEE 802.15.4 2020 specification and it's represented as one octet of integer.
RSSI equal to zero maps to -174 dBm and has the same scale as dBm (1 RSSI step == 1 dBm). Therefore an RSSI value of 254 maps to +80 dBm.
[in] | rssi | RF power in RSSI scale |
Definition at line 766 of file ieee802154.h.
size_t ieee802154_set_frame_hdr | ( | uint8_t * | buf, |
const uint8_t * | src, | ||
size_t | src_len, | ||
const uint8_t * | dst, | ||
size_t | dst_len, | ||
le_uint16_t | src_pan, | ||
le_uint16_t | dst_pan, | ||
uint8_t | flags, | ||
uint8_t | seq | ||
) |
Initializes an IEEE 802.15.4 MAC frame header in buf
.
buf
.If dst
is NULL the IEEE802154_FCF_ACK_REQ will be unset to prevent flooding the network.
[out] | buf | Target memory for frame header. |
[in] | src | Source address for frame in network byteorder. May be NULL if IEEE802154_FCF_SRC_ADDR_VOID is set in flags . |
[in] | src_len | Length of src . Legal values are:
|
[in] | dst | Destination address for frame in network byteorder. May be NULL if IEEE802154_FCF_SRC_ADDR_VOID is set in flags . |
[in] | dst_len | Length of dst . Legal values are:
|
[in] | src_pan | Source PAN ID in little-endian. May be 0 if IEEE802154_FCF_PAN_COMP is set in flags . Otherwise, it will be ignored, when IEEE802154_FCF_PAN_COMP is set. |
[in] | dst_pan | Destination PAN ID in little-endian. |
[in] | flags | Flags for the frame. These are interchangeable with the first byte of the IEEE 802.15.4 FCF. This means that it encompasses the type values, IEEE802154_FCF_SECURITY_EN, IEEE802154_FCF_FRAME_PEND, and IEEE802154_FCF_ACK_REQ. |
[in] | seq | Sequence number for frame. |
The version field in the FCF will be set implicitly to version 1.