LoRaMAC  4.4.6
Documentation of the API
LoRaMacHeaderTypes.h
Go to the documentation of this file.
1 
37 #ifndef __LORAMAC_HEADER_TYPES_H__
38 #define __LORAMAC_HEADER_TYPES_H__
39 
40 #ifdef __cplusplus
41 extern "C"
42 {
43 #endif
44 
45 #include <stdint.h>
46 
48 #define LORAMAC_MHDR_FIELD_SIZE 1
49 
51 #define LORAMAC_JOIN_TYPE_FIELD_SIZE 1
52 
54 #define LORAMAC_JOIN_EUI_FIELD_SIZE 8
55 
57 #define LORAMAC_DEV_EUI_FIELD_SIZE 8
58 
60 #define LORAMAC_DEV_NONCE_FIELD_SIZE 2
61 
63 #define LORAMAC_JOIN_NONCE_FIELD_SIZE 3
64 
66 #define LORAMAC_RJCOUNT_0_FIELD_SIZE 2
67 
69 #define LORAMAC_RJCOUNT_1_FIELD_SIZE 2
70 
72 #define LORAMAC_NET_ID_FIELD_SIZE 3
73 
75 #define LORAMAC_DEV_ADDR_FIELD_SIZE 4
76 
78 #define LORAMAC_DL_SETTINGS_FIELD_SIZE 1
79 
81 #define LORAMAC_RX_DELAY_FIELD_SIZE 1
82 
84 #define LORAMAC_CF_LIST_FIELD_SIZE 16
85 
87 #define LORAMAC_FHDR_DEV_ADDR_FIELD_SIZE LORAMAC_DEV_ADDR_FIELD_SIZE
88 
90 #define LORAMAC_FHDR_F_CTRL_FIELD_SIZE 1
91 
93 #define LORAMAC_FHDR_F_CNT_FIELD_SIZE 2
94 
96 #define LORAMAC_FHDR_F_OPTS_MAX_FIELD_SIZE 15
97 
99 #define LORAMAC_F_PORT_FIELD_SIZE 1
100 
102 #define LORAMAC_MAC_PAYLOAD_FIELD_MAX_SIZE 242
103 
105 #define LORAMAC_MIC_FIELD_SIZE 4
106 
112 #define LORAMAC_JOIN_REQ_MSG_SIZE ( LORAMAC_MHDR_FIELD_SIZE + LORAMAC_JOIN_EUI_FIELD_SIZE + \
113  LORAMAC_DEV_EUI_FIELD_SIZE + LORAMAC_DEV_NONCE_FIELD_SIZE + \
114  LORAMAC_MIC_FIELD_SIZE )
115 
121 #define LORAMAC_RE_JOIN_1_MSG_SIZE ( LORAMAC_MHDR_FIELD_SIZE + LORAMAC_JOIN_TYPE_FIELD_SIZE + \
122  LORAMAC_JOIN_EUI_FIELD_SIZE + LORAMAC_DEV_EUI_FIELD_SIZE + \
123  LORAMAC_RJCOUNT_1_FIELD_SIZE + \
124  LORAMAC_MIC_FIELD_SIZE )
125 
131 #define LORAMAC_RE_JOIN_0_2_MSG_SIZE ( LORAMAC_MHDR_FIELD_SIZE + LORAMAC_JOIN_TYPE_FIELD_SIZE + \
132  LORAMAC_NET_ID_FIELD_SIZE + LORAMAC_DEV_EUI_FIELD_SIZE + \
133  LORAMAC_RJCOUNT_0_FIELD_SIZE + \
134  LORAMAC_MIC_FIELD_SIZE )
135 
141 #define LORAMAC_JOIN_ACCEPT_FRAME_MIN_SIZE ( LORAMAC_MHDR_FIELD_SIZE + LORAMAC_JOIN_NONCE_FIELD_SIZE + \
142  LORAMAC_NET_ID_FIELD_SIZE + LORAMAC_DEV_ADDR_FIELD_SIZE + \
143  LORAMAC_DL_SETTINGS_FIELD_SIZE + LORAMAC_RX_DELAY_FIELD_SIZE + \
144  LORAMAC_MIC_FIELD_SIZE )
145 
151 #define LORAMAC_JOIN_ACCEPT_FRAME_MAX_SIZE ( LORAMAC_MHDR_FIELD_SIZE + LORAMAC_JOIN_NONCE_FIELD_SIZE + \
152  LORAMAC_NET_ID_FIELD_SIZE + LORAMAC_DEV_ADDR_FIELD_SIZE + \
153  LORAMAC_DL_SETTINGS_FIELD_SIZE + LORAMAC_RX_DELAY_FIELD_SIZE + \
154  LORAMAC_CF_LIST_FIELD_SIZE + LORAMAC_MIC_FIELD_SIZE )
155 
160 #define JOIN_ACCEPT_MIC_COMPUTATION_OFFSET \
161  ( LORAMAC_MHDR_FIELD_SIZE + LORAMAC_JOIN_TYPE_FIELD_SIZE + LORAMAC_JOIN_EUI_FIELD_SIZE + \
162  LORAMAC_DEV_NONCE_FIELD_SIZE )
163 
173 #define LORAMAC_FRAME_PAYLOAD_OVERHEAD_SIZE ( LORAMAC_MHDR_FIELD_SIZE + ( LORAMAC_FHDR_DEV_ADDR_FIELD_SIZE + \
174  LORAMAC_FHDR_F_CTRL_FIELD_SIZE + LORAMAC_FHDR_F_CNT_FIELD_SIZE ) + \
175  LORAMAC_F_PORT_FIELD_SIZE + LORAMAC_MIC_FIELD_SIZE )
176 
182 #define LORAMAC_FRAME_PAYLOAD_MIN_SIZE ( LORAMAC_MHDR_FIELD_SIZE + ( LORAMAC_FHDR_DEV_ADDR_FIELD_SIZE + \
183  LORAMAC_FHDR_F_CTRL_FIELD_SIZE + LORAMAC_FHDR_F_CNT_FIELD_SIZE ) + \
184  LORAMAC_MIC_FIELD_SIZE )
185 
190 #define LORAMAC_FRAME_PAYLOAD_MAX_SIZE ( LORAMAC_MHDR_FIELD_SIZE + ( LORAMAC_FHDR_DEV_ADDR_FIELD_SIZE + \
191  LORAMAC_FHDR_F_CTRL_FIELD_SIZE + LORAMAC_FHDR_F_CNT_FIELD_SIZE ) + \
192  LORAMAC_F_PORT_FIELD_SIZE + LORAMAC_MAC_PAYLOAD_FIELD_MAX_SIZE + \
193  LORAMAC_MIC_FIELD_SIZE )
194 
200 typedef union uLoRaMacDLSettings
201 {
205  uint8_t Value;
210  {
214  uint8_t RX2DataRate : 4;
218  uint8_t RX1DRoffset : 3;
222  uint8_t OptNeg : 1;
223  }Bits;
225 
231 typedef union uLoRaMacHeader
232 {
236  uint8_t Value;
241  {
245  uint8_t Major : 2;
249  uint8_t RFU : 3;
253  uint8_t MType : 3;
254  }Bits;
256 
262 typedef union uLoRaMacFrameCtrl
263 {
267  uint8_t Value;
271  struct sCtrlBits
272  {
276  uint8_t FOptsLen : 4;
280  uint8_t FPending : 1;
284  uint8_t Ack : 1;
288  uint8_t AdrAckReq : 1;
292  uint8_t Adr : 1;
293  }Bits;
295 
301 typedef struct sLoRaMacFrameHeader
302 {
306  uint32_t DevAddr;
314  uint16_t FCnt;
320 
323 #ifdef __cplusplus
324 }
325 #endif
326 
327 #endif // __LORAMAC_HEADER_TYPES_H__
LoRaMacDLSettings_t::sDLSettingsBits::RX2DataRate
uint8_t RX2DataRate
Definition: LoRaMacHeaderTypes.h:214
LoRaMacHeader_t::sMacHeaderBits::RFU
uint8_t RFU
Definition: LoRaMacHeaderTypes.h:249
LoRaMacFrameCtrl_t::sCtrlBits::FOptsLen
uint8_t FOptsLen
Definition: LoRaMacHeaderTypes.h:276
LoRaMacHeader_t::sMacHeaderBits::Major
uint8_t Major
Definition: LoRaMacHeaderTypes.h:245
LoRaMacFrameCtrl_t::sCtrlBits::Ack
uint8_t Ack
Definition: LoRaMacHeaderTypes.h:284
LoRaMacDLSettings_t
Definition: LoRaMacHeaderTypes.h:200
LoRaMacFrameHeader_t::FCnt
uint16_t FCnt
Definition: LoRaMacHeaderTypes.h:314
LoRaMacFrameCtrl_t
Definition: LoRaMacHeaderTypes.h:262
LoRaMacHeader_t::sMacHeaderBits
Definition: LoRaMacHeaderTypes.h:240
LoRaMacDLSettings_t::Value
uint8_t Value
Definition: LoRaMacHeaderTypes.h:205
LoRaMacDLSettings_t::sDLSettingsBits::OptNeg
uint8_t OptNeg
Definition: LoRaMacHeaderTypes.h:222
LoRaMacFrameHeader_t
Definition: LoRaMacHeaderTypes.h:301
LoRaMacFrameCtrl_t::sCtrlBits::AdrAckReq
uint8_t AdrAckReq
Definition: LoRaMacHeaderTypes.h:288
LoRaMacFrameCtrl_t::sCtrlBits::FPending
uint8_t FPending
Definition: LoRaMacHeaderTypes.h:280
LoRaMacHeader_t
Definition: LoRaMacHeaderTypes.h:231
LoRaMacFrameHeader_t::DevAddr
uint32_t DevAddr
Definition: LoRaMacHeaderTypes.h:306
LoRaMacDLSettings_t::sDLSettingsBits::RX1DRoffset
uint8_t RX1DRoffset
Definition: LoRaMacHeaderTypes.h:218
LoRaMacDLSettings_t::sDLSettingsBits
Definition: LoRaMacHeaderTypes.h:209
LoRaMacFrameCtrl_t::sCtrlBits::Adr
uint8_t Adr
Definition: LoRaMacHeaderTypes.h:292
LoRaMacFrameCtrl_t::sCtrlBits
Definition: LoRaMacHeaderTypes.h:271
LoRaMacHeader_t::sMacHeaderBits::MType
uint8_t MType
Definition: LoRaMacHeaderTypes.h:253
LORAMAC_FHDR_F_OPTS_MAX_FIELD_SIZE
#define LORAMAC_FHDR_F_OPTS_MAX_FIELD_SIZE
Definition: LoRaMacHeaderTypes.h:96
LoRaMacFrameHeader_t::FCtrl
LoRaMacFrameCtrl_t FCtrl
Definition: LoRaMacHeaderTypes.h:310