21#ifndef NET_IEEE802154_H
22#define NET_IEEE802154_H
39#define IEEE802154_SFD (0xa7)
45#define IEEE802154_SHORT_ADDRESS_LEN (2U)
46#define IEEE802154_LONG_ADDRESS_LEN (8U)
55#define IEEE802154_MAX_HDR_LEN (23U)
56#define IEEE802154_MIN_FRAME_LEN (IEEE802154_FCF_LEN + sizeof(uint8_t))
58#define IEEE802154_FCF_LEN (2U)
59#define IEEE802154_FCS_LEN (2U)
61#define IEEE802154_FCF_TYPE_MASK (0x07)
62#define IEEE802154_FCF_TYPE_BEACON (0x00)
63#define IEEE802154_FCF_TYPE_DATA (0x01)
64#define IEEE802154_FCF_TYPE_ACK (0x02)
65#define IEEE802154_FCF_TYPE_MACCMD (0x03)
67#define IEEE802154_FCF_SECURITY_EN (0x08)
68#define IEEE802154_FCF_FRAME_PEND (0x10)
69#define IEEE802154_FCF_ACK_REQ (0x20)
70#define IEEE802154_FCF_PAN_COMP (0x40)
72#define IEEE802154_FCF_DST_ADDR_MASK (0x0c)
73#define IEEE802154_FCF_DST_ADDR_VOID (0x00)
74#define IEEE802154_FCF_DST_ADDR_RESV (0x04)
75#define IEEE802154_FCF_DST_ADDR_SHORT (0x08)
76#define IEEE802154_FCF_DST_ADDR_LONG (0x0c)
78#define IEEE802154_FCF_VERS_MASK (0x30)
79#define IEEE802154_FCF_VERS_V0 (0x00)
80#define IEEE802154_FCF_VERS_V1 (0x10)
82#define IEEE802154_FCF_SRC_ADDR_MASK (0xc0)
83#define IEEE802154_FCF_SRC_ADDR_VOID (0x00)
84#define IEEE802154_FCF_SRC_ADDR_RESV (0x40)
85#define IEEE802154_FCF_SRC_ADDR_SHORT (0x80)
86#define IEEE802154_FCF_SRC_ADDR_LONG (0xc0)
93#define IEEE802154_CHANNEL_MIN_SUBGHZ (0U)
94#define IEEE802154_CHANNEL_MAX_SUBGHZ (10U)
95#define IEEE802154_CHANNEL_MIN (11U)
96#define IEEE802154_CHANNEL_MAX (26U)
99#define IEEE802154_FRAME_LEN_MAX (127U)
100#define IEEE802154G_FRAME_LEN_MAX (2047U)
101#define IEEE802154_ACK_FRAME_LEN (5U)
106#define IEEE802154_LIFS_SYMS (40U)
111#define IEEE802154_SIFS_SYMS (12U)
116#define IEEE802154_SIFS_MAX_FRAME_SIZE (18U)
121#define IEEE802154_ACK_TIMEOUT_SYMS (54)
126#define IEEE802154_MR_OFDM_SYMBOL_TIME_US (120)
133#define IEEE802154_MR_FSK_SYMBOL_TIME_US (20)
140#define IEEE802154_RADIO_RSSI_OFFSET (-174)
142#define IEEE802154_PHY_MR_FSK_PHR_LEN (2)
143#define IEEE802154_PHY_MR_FSK_2FSK_SFD_LEN (2)
153#define IEEE802154_PHY_MR_FSK_2FSK_CODED_SFD_0 (0x6F4E)
154#define IEEE802154_PHY_MR_FSK_2FSK_CODED_SFD_1 (0x632D)
155#define IEEE802154_PHY_MR_FSK_2FSK_UNCODED_SFD_0 (0x90E4)
156#define IEEE802154_PHY_MR_FSK_2FSK_UNCODED_SFD_1 (0x7A0E)
165#define IEEE802154G_ATURNAROUNDTIME_US (1 * US_PER_MS)
171#define IEEE802154_ATURNAROUNDTIME_IN_SYMBOLS (12)
180#define IEEE802154_CCA_DURATION_IN_SYMBOLS (8)
261#define IEEE802154_ADDR_BCAST { 0xff, 0xff }
266#define IEEE802154_ADDR_BCAST_LEN (IEEE802154_SHORT_ADDRESS_LEN)
283#if IS_ACTIVE(CONFIG_IEEE802154_DEFAULT_PHY_BPSK)
284#define CONFIG_IEEE802154_DEFAULT_PHY_MODE IEEE802154_PHY_BPSK
285#elif IS_ACTIVE(CONFIG_IEEE802154_DEFAULT_PHY_ASK)
286#define CONFIG_IEEE802154_DEFAULT_PHY_MODE IEEE802154_PHY_ASK
287#elif IS_ACTIVE(CONFIG_IEEE802154_DEFAULT_PHY_OQPSK)
288#define CONFIG_IEEE802154_DEFAULT_PHY_MODE IEEE802154_PHY_OQPSK
289#elif IS_ACTIVE(CONFIG_IEEE802154_DEFAULT_PHY_MR_OQPSK)
290#define CONFIG_IEEE802154_DEFAULT_PHY_MODE IEEE802154_PHY_MR_OQPSK
291#elif IS_ACTIVE(CONFIG_IEEE802154_DEFAULT_PHY_MR_OFDM)
292#define CONFIG_IEEE802154_DEFAULT_PHY_MODE IEEE802154_PHY_MR_OFDM
293#elif IS_ACTIVE(CONFIG_IEEE802154_DEFAULT_PHY_MR_FSK)
294#define CONFIG_IEEE802154_DEFAULT_PHY_MODE IEEE802154_PHY_MR_FSK
297#ifndef CONFIG_IEEE802154_DEFAULT_PHY_MODE
298#define CONFIG_IEEE802154_DEFAULT_PHY_MODE IEEE802154_PHY_OQPSK
304#ifndef CONFIG_IEEE802154_DEFAULT_SUBGHZ_CHANNEL
305#define CONFIG_IEEE802154_DEFAULT_SUBGHZ_CHANNEL (5U)
311#ifndef CONFIG_IEEE802154_DEFAULT_CHANNEL
312#define CONFIG_IEEE802154_DEFAULT_CHANNEL (26U)
318#ifndef CONFIG_IEEE802154_DEFAULT_SUBGHZ_PAGE
319#define CONFIG_IEEE802154_DEFAULT_SUBGHZ_PAGE (2U)
325#ifndef CONFIG_IEEE802154_MR_OQPSK_DEFAULT_CHIPS
326#define CONFIG_IEEE802154_MR_OQPSK_DEFAULT_CHIPS IEEE802154_MR_OQPSK_CHIPS_1000
332#ifndef CONFIG_IEEE802154_MR_OQPSK_DEFAULT_RATE
333#define CONFIG_IEEE802154_MR_OQPSK_DEFAULT_RATE (2U)
339#ifndef CONFIG_IEEE802154_MR_OFDM_DEFAULT_OPTION
340#define CONFIG_IEEE802154_MR_OFDM_DEFAULT_OPTION (2U)
346#ifndef CONFIG_IEEE802154_MR_OFDM_DEFAULT_SCHEME
347#define CONFIG_IEEE802154_MR_OFDM_DEFAULT_SCHEME (2U)
353#ifndef CONFIG_IEEE802154_MR_FSK_DEFAULT_SRATE
354#define CONFIG_IEEE802154_MR_FSK_DEFAULT_SRATE IEEE802154_MR_FSK_SRATE_200K
360#ifndef CONFIG_IEEE802154_MR_FSK_DEFAULT_MOD_IDX
361#define CONFIG_IEEE802154_MR_FSK_DEFAULT_MOD_IDX (64U)
367#ifndef CONFIG_IEEE802154_MR_FSK_DEFAULT_MOD_ORD
368#define CONFIG_IEEE802154_MR_FSK_DEFAULT_MOD_ORD (2U)
374#ifndef CONFIG_IEEE802154_MR_FSK_DEFAULT_FEC
375#define CONFIG_IEEE802154_MR_FSK_DEFAULT_FEC IEEE802154_FEC_NONE
381#ifndef CONFIG_IEEE802154_DEFAULT_PANID
382#define CONFIG_IEEE802154_DEFAULT_PANID (0x0023U)
388#ifndef IEEE802154_PANID_BCAST
389#define IEEE802154_PANID_BCAST { 0xff, 0xff }
395#ifndef CONFIG_IEEE802154_DEFAULT_TXPOWER
396#define CONFIG_IEEE802154_DEFAULT_TXPOWER (0)
403#ifndef CONFIG_IEEE802154_DEFAULT_CSMA_CA_MIN_BE
404#define CONFIG_IEEE802154_DEFAULT_CSMA_CA_MIN_BE (3U)
410#ifndef CONFIG_IEEE802154_DEFAULT_CSMA_CA_RETRIES
411#define CONFIG_IEEE802154_DEFAULT_CSMA_CA_RETRIES (4U)
417#ifndef CONFIG_IEEE802154_DEFAULT_CSMA_CA_MAX_BE
418#define CONFIG_IEEE802154_DEFAULT_CSMA_CA_MAX_BE (5U)
424#ifndef CONFIG_IEEE802154_CCA_THRESH_DEFAULT
425#define CONFIG_IEEE802154_CCA_THRESH_DEFAULT (-70)
431#ifndef CONFIG_IEEE802154_DEFAULT_MAX_FRAME_RETRANS
432#define CONFIG_IEEE802154_DEFAULT_MAX_FRAME_RETRANS (4U)
439#define CONFIG_IEEE802154_AUTO_ACK_DISABLE 0
445#ifndef CONFIG_IEEE802154_DEFAULT_ACK_REQ
446#define CONFIG_IEEE802154_DEFAULT_ACK_REQ 1
454#ifndef CONFIG_IEEE802154_DSME_CAP_REDUCTION
455#define CONFIG_IEEE802154_DSME_CAP_REDUCTION 0
467#ifndef CONFIG_IEEE802154_DSME_MAC_RESPONSE_WAIT_TIME
468#define CONFIG_IEEE802154_DSME_MAC_RESPONSE_WAIT_TIME (244U)
479#ifndef CONFIG_IEEE802154_DSME_SCAN_DURATION
480#define CONFIG_IEEE802154_DSME_SCAN_DURATION (4U)
494#ifndef CONFIG_IEEE802154_DSME_SUPERFRAME_ORDER
495#define CONFIG_IEEE802154_DSME_SUPERFRAME_ORDER (3U)
507#ifndef CONFIG_IEEE802154_DSME_MULTISUPERFRAME_ORDER
508#define CONFIG_IEEE802154_DSME_MULTISUPERFRAME_ORDER (3U)
520#ifndef CONFIG_IEEE802154_DSME_BEACON_ORDER
521#define CONFIG_IEEE802154_DSME_BEACON_ORDER (3U)
535#define CONFIG_IEEE802154_DSME_STATIC_GTS 0
546#ifndef CONFIG_IEEE802154_DSME_GTS_EXPIRATION
547#define CONFIG_IEEE802154_DSME_GTS_EXPIRATION (16U)
555#ifndef CONFIG_IEEE802154_DSME_MIN_COORD_LQI
556#define CONFIG_IEEE802154_DSME_MIN_COORD_LQI (100U)
603 const uint8_t *dst,
size_t dst_len,
605 uint8_t flags, uint8_t seq);
708 eui64->
uint8[0] = addr[i++] ^ 0x02;
709 eui64->
uint8[1] = addr[i++];
710 eui64->
uint8[2] = addr[i++];
711 eui64->
uint8[3] = addr[i++];
712 eui64->
uint8[4] = addr[i++];
713 eui64->
uint8[5] = addr[i++];
714 eui64->
uint8[6] = addr[i++];
715 eui64->
uint8[7] = addr[i++];
719 eui64->
uint8[0] = addr[i++] ^ 0x02;
720 eui64->
uint8[1] = addr[i++];
725 eui64->
uint8[3] = 0xff;
726 eui64->
uint8[4] = 0xfe;
728 eui64->
uint8[6] = addr[i++];
729 eui64->
uint8[7] = addr[i++];
776 const int max = min + (UINT8_MAX - 1);
778 int val = dbm <= min ? min : (dbm >= max ? max : dbm);
Functions to work with different byte orders.
EUI-64 data type definition.
Common macros and compiler attributes/pragmas configuration.
Utility header providing time unit defines.
A 16 bit integer in big endian aka network byte order.
Data type to represent an EUI-64.
uint8_t uint8[8]
split into 8 8-bit words.
A 16 bit integer in little endian.