loramac.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2017 Inria
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
22 #ifndef NET_LORAMAC_H
23 #define NET_LORAMAC_H
24 
25 #include <assert.h>
26 #include <stdint.h>
27 #include <stdlib.h>
28 
29 #include "modules.h"
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
45 #ifndef CONFIG_LORAMAC_DEV_EUI_DEFAULT
46 #define CONFIG_LORAMAC_DEV_EUI_DEFAULT "0000000000000000"
47 #endif
48 
54 #ifndef CONFIG_LORAMAC_JOIN_EUI_DEFAULT
55 #define CONFIG_LORAMAC_JOIN_EUI_DEFAULT "0000000000000000"
56 #endif
57 
63 #ifndef CONFIG_LORAMAC_APP_EUI_DEFAULT
64 #define CONFIG_LORAMAC_APP_EUI_DEFAULT "0000000000000000"
65 #endif
66 
72 #ifndef CONFIG_LORAMAC_APP_KEY_DEFAULT
73 #define CONFIG_LORAMAC_APP_KEY_DEFAULT "00000000000000000000000000000000"
74 #endif
75 
81 #ifndef CONFIG_LORAMAC_NWK_KEY_DEFAULT
82 #define CONFIG_LORAMAC_NWK_KEY_DEFAULT "00000000000000000000000000000000"
83 #endif
84 
90 #ifndef CONFIG_LORAMAC_APP_SKEY_DEFAULT
91 #define CONFIG_LORAMAC_APP_SKEY_DEFAULT "00000000000000000000000000000000"
92 #endif
93 
99 #ifndef CONFIG_LORAMAC_NWK_SKEY_DEFAULT
100 #define CONFIG_LORAMAC_NWK_SKEY_DEFAULT "00000000000000000000000000000000"
101 #endif
102 
108 #ifndef CONFIG_LORAMAC_FNWKSINT_KEY_DEFAULT
109 #define CONFIG_LORAMAC_FNWKSINT_KEY_DEFAULT "00000000000000000000000000000000"
110 #endif
111 
117 #ifndef CONFIG_LORAMAC_SNWKSINT_KEY_DEFAULT
118 #define CONFIG_LORAMAC_SNWKSINT_KEY_DEFAULT "00000000000000000000000000000000"
119 #endif
120 
126 #ifndef CONFIG_LORAMAC_NWKSENC_KEY_DEFAULT
127 #define CONFIG_LORAMAC_NWKSENC_KEY_DEFAULT "00000000000000000000000000000000"
128 #endif
129 
133 #ifndef CONFIG_LORAMAC_DEV_ADDR_DEFAULT
134 #define CONFIG_LORAMAC_DEV_ADDR_DEFAULT "00000000"
135 #endif
136 
140 #if !IS_ACTIVE(CONFIG_LORAMAC_REGION_EU_868) \
141  && !IS_ACTIVE(CONFIG_LORAMAC_REGION_IN_865)
142 #define CONFIG_LORAMAC_REGION_EU_868 1
143 #endif
144 
157 #if IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS_A)
158 #define CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS (LORAMAC_CLASS_A)
159 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS_B)
160 #define CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS (LORAMAC_CLASS_B)
161 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS_C)
162 #define CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS (LORAMAC_CLASS_C)
163 #endif
164 
165 #ifndef CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS
166 #define CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS (LORAMAC_CLASS_A)
167 #endif
168 
177 #ifndef CONFIG_LORAMAC_DEFAULT_NETID
178 #define CONFIG_LORAMAC_DEFAULT_NETID (1U)
179 #endif
180 
189 #ifdef DOXYGEN
190 #define CONFIG_LORAMAC_DEFAULT_PRIVATE_NETWORK
191 #endif
192 
202 #if IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_0)
203 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_0)
204 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_1)
205 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_1)
206 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_2)
207 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_2)
208 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_3)
209 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_3)
210 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_4)
211 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_4)
212 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_5)
213 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_5)
214 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_6)
215 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_6)
216 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_7)
217 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_7)
218 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_8)
219 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_8)
220 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_9)
221 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_9)
222 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_10)
223 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_10)
224 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_11)
225 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_11)
226 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_12)
227 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_12)
228 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_13)
229 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_13)
230 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_14)
231 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_14)
232 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_15)
233 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_15)
234 #endif
235 
236 #ifndef CONFIG_LORAMAC_DEFAULT_DR
237 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_0)
238 #endif
239 
246 #if IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_0)
247 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_0)
248 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_1)
249 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_1)
250 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_2)
251 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_2)
252 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_3)
253 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_3)
254 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_4)
255 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_4)
256 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_5)
257 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_5)
258 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_6)
259 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_6)
260 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_7)
261 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_7)
262 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_8)
263 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_8)
264 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_9)
265 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_9)
266 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_10)
267 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_10)
268 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_11)
269 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_11)
270 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_12)
271 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_12)
272 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_13)
273 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_13)
274 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_14)
275 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_14)
276 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_15)
277 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_15)
278 #endif
279 
280 #ifndef CONFIG_LORAMAC_DEFAULT_TX_POWER
281 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_1)
282 #endif
283 
293 #ifndef CONFIG_LORAMAC_DEFAULT_TX_PORT
294 #define CONFIG_LORAMAC_DEFAULT_TX_PORT (2U)
295 #endif
296 
305 #if IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_MODE_CNF)
306 #define CONFIG_LORAMAC_DEFAULT_TX_MODE (LORAMAC_TX_CNF)
307 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_MODE_UNCNF)
308 #define CONFIG_LORAMAC_DEFAULT_TX_MODE (LORAMAC_TX_UNCNF)
309 #endif
310 
311 #ifndef CONFIG_LORAMAC_DEFAULT_TX_MODE
312 #define CONFIG_LORAMAC_DEFAULT_TX_MODE (LORAMAC_TX_CNF)
313 #endif
314 
326 #ifndef CONFIG_LORAMAC_DEFAULT_REDUNDANCY
327 #define CONFIG_LORAMAC_DEFAULT_REDUNDANCY (0U)
328 #endif
329 
338 #ifdef DOXYGEN
339 #define CONFIG_LORAMAC_DEFAULT_ADR
340 #endif
341 
348 #ifndef CONFIG_LORAMAC_DEFAULT_RETX
349 #define CONFIG_LORAMAC_DEFAULT_RETX (5U)
350 #endif
351 
360 #ifndef CONFIG_LORAMAC_DEFAULT_LINKCHK
361 #define CONFIG_LORAMAC_DEFAULT_LINKCHK (0U)
362 #endif
363 
370 #ifndef CONFIG_LORAMAC_DEFAULT_RX1_DELAY
371 #define CONFIG_LORAMAC_DEFAULT_RX1_DELAY (1000U)
372 #endif
373 
380 #if IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_0)
381 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_0)
382 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_1)
383 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_1)
384 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_2)
385 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_2)
386 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_3)
387 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_3)
388 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_4)
389 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_4)
390 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_5)
391 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_5)
392 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_6)
393 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_6)
394 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_7)
395 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_7)
396 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_8)
397 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_8)
398 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_9)
399 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_9)
400 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_10)
401 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_10)
402 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_11)
403 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_11)
404 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_12)
405 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_12)
406 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_13)
407 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_13)
408 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_14)
409 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_14)
410 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_15)
411 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_15)
412 #endif
413 
414 #ifndef CONFIG_LORAMAC_DEFAULT_RX2_DR
415 #if IS_ACTIVE(CONFIG_LORAMAC_REGION_EU_868)
416 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_0)
417 #elif IS_ACTIVE(CONFIG_LORAMAC_REGION_IN_865)
418 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_2)
419 #endif
420 #endif
421 
425 #ifndef CONFIG_LORAMAC_DEFAULT_RX2_FREQ
426 #if IS_ACTIVE(CONFIG_LORAMAC_REGION_EU_868)
427 #define CONFIG_LORAMAC_DEFAULT_RX2_FREQ (869525000UL)
428 #elif IS_ACTIVE(CONFIG_LORAMAC_REGION_IN_865)
429 #define CONFIG_LORAMAC_DEFAULT_RX2_FREQ (866550000UL)
430 #endif
431 #endif
432 
443 #if IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_JOIN_PROCEDURE_OTAA)
444 #define CONFIG_LORAMAC_DEFAULT_JOIN_PROCEDURE (LORAMAC_JOIN_OTAA)
445 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_JOIN_PROCEDURE_ABP)
446 #define CONFIG_LORAMAC_DEFAULT_JOIN_PROCEDURE (LORAMAC_JOIN_ABP)
447 #endif
448 
449 #ifndef CONFIG_LORAMAC_DEFAULT_JOIN_PROCEDURE
450 #define CONFIG_LORAMAC_DEFAULT_JOIN_PROCEDURE (LORAMAC_JOIN_OTAA)
451 #endif
452 
460 #ifndef CONFIG_LORAMAC_DEFAULT_JOIN_DELAY1
461 #define CONFIG_LORAMAC_DEFAULT_JOIN_DELAY1 (5U)
462 #endif
463 
471 #ifndef CONFIG_LORAMAC_DEFAULT_JOIN_DELAY2
472 #define CONFIG_LORAMAC_DEFAULT_JOIN_DELAY2 (6U)
473 #endif
474 
481 #ifndef CONFIG_LORAMAC_DEFAULT_MAX_FCNT_GAP
482 #define CONFIG_LORAMAC_DEFAULT_MAX_FCNT_GAP (16384U)
483 #endif
484 
492 #ifndef CONFIG_LORAMAC_DEFAULT_SYSTEM_MAX_RX_ERROR
493 #define CONFIG_LORAMAC_DEFAULT_SYSTEM_MAX_RX_ERROR (50)
494 #endif
495 
504 #ifndef CONFIG_LORAMAC_DEFAULT_MIN_RX_SYMBOLS
505 #define CONFIG_LORAMAC_DEFAULT_MIN_RX_SYMBOLS (12)
506 #endif
516 #ifndef LORAMAC_DEFAULT_ADR_ACK_LIMIT
517 #define LORAMAC_DEFAULT_ADR_ACK_LIMIT (64U)
518 #endif
519 
525 #ifndef LORAMAC_DEFAULT_ADR_ACK_DELAY
526 #define LORAMAC_DEFAULT_ADR_ACK_DELAY (32U)
527 #endif
528 
534 #ifndef LORAMAC_DEFAULT_ADR_TIMEOUT
535 #define LORAMAC_DEFAULT_ADR_TIMEOUT (3U)
536 #endif
537 
541 #define LORAMAC_DEFAULT_RX2_DELAY (1000U + CONFIG_LORAMAC_DEFAULT_RX1_DELAY)
542 
550 #define LORAMAC_DEVEUI_LEN (8U)
551 
555 #define LORAMAC_DEVADDR_LEN (4U)
556 
560 #define LORAMAC_APPEUI_LEN (8U)
561 
565 #define LORAMAC_JOINEUI_LEN (8U)
566 
570 #define LORAMAC_APPKEY_LEN (16U)
571 
575 #define LORAMAC_NWKKEY_LEN (16U)
576 
580 #define LORAMAC_APPSKEY_LEN (16U)
581 
585 #define LORAMAC_NWKSKEY_LEN (16U)
586 
590 #define LORAMAC_FNWKSINTKEY_LEN (16U)
591 
595 #define LORAMAC_SNWKSINTKEY_LEN (16U)
596 
600 #define LORAMAC_NWKSENCKEY_LEN (16U)
601 
605 #define LORAMAC_JSINTKEY_LEN (16U)
606 
610 #define LORAMAC_JSENCKEY_LEN (16U)
611 
615 #define LORAMAC_JSINTKEY_LEN (16U)
616 
620 #define LORAMAC_PORT_MIN (1U)
621 
625 #define LORAMAC_PORT_MAX (223U)
626 
630 #define LORAMAC_APP_NONCE_LEN (3U)
631 
635 #define LORAMAC_JOIN_NONCE_LEN (3U)
636 
640 #define LORAMAC_NETWORK_ID_LEN (3U)
641 
647 #if defined(REGION_AU915) || defined(REGION_CN470) || defined(REGION_US915) || defined(REGION_US915_HYBRID) || defined(REGION_AS923)
648 #define LORAMAC_CHANNELS_MASK_LEN (6U)
649 #else
650 #define LORAMAC_CHANNELS_MASK_LEN (1U)
651 #endif
652 
663 typedef enum {
668 
672 typedef enum {
676 
680 typedef enum {
684 
691 typedef enum {
871 
878 typedef enum {
1062  typedef struct {
1063  uint32_t freq;
1064  uint8_t index;
1065  uint8_t bw;
1066  uint8_t dr_min;
1067  uint8_t dr_max;
1068  uint8_t dcycle;
1070 
1082 static inline uint32_t lora_time_on_air(size_t pkt_len, loramac_dr_idx_t dr, uint8_t cr)
1083 {
1084  assert(dr <= LORAMAC_DR_6);
1085  const uint8_t _K[6][4] = {
1086  { 0, 1, 5, 5 }, /* DR0 */
1087  { 0, 1, 4, 5 }, /* DR1 */
1088  { 1, 5, 5, 5 }, /* DR2 */
1089  { 1, 4, 5, 4 }, /* DR3 */
1090  { 1, 3, 4, 4 }, /* DR4 */
1091  { 1, 2, 4, 3 } /* DR5 */
1092  };
1093 
1094  uint32_t t_sym = 1 << (15 - dr);
1095  uint32_t t_preamble = (t_sym << 3) + (t_sym << 2) + (t_sym >> 2);
1096 
1097  uint8_t index = (dr < LORAMAC_DR_6) ? dr : LORAMAC_DR_5;
1098  uint8_t n0 = _K[index][0];
1099  uint32_t nb_symbols;
1100 
1101  uint8_t offset = _K[index][1];
1102 
1103  if (pkt_len < offset) {
1104  nb_symbols = 8 + n0 * (cr + 4);
1105  }
1106  else {
1107  uint8_t c1 = _K[index][2];
1108  uint8_t c2 = _K[index][3];
1109  uint8_t pos = (pkt_len - offset) % (c1 + c2);
1110  uint8_t cycle = (pkt_len - offset) / (c1 + c2);
1111  nb_symbols = 8 + (n0 + 2 * cycle + 1 + (pos > (c1 - 1))) * (cr + 4);
1112  }
1113 
1114  uint32_t t_payload = t_sym * nb_symbols;
1115 
1116  return t_preamble + t_payload;
1117 }
1118 
1119 #ifdef __cplusplus
1120 }
1121 #endif
1122 
1123 #endif /* NET_LORAMAC_H */
POSIX.1-2008 compliant version of the assert macro.
#define assert(cond)
abort the program if assertion is false
Definition: assert.h:136
loramac_join_mode_t
LoRaMAC network join procedure type.
Definition: loramac.h:672
loramac_tx_mode_t
LoRaMAC transmission mode.
Definition: loramac.h:680
loramac_dr_idx_t
LoRaMAC datarate indexes.
Definition: loramac.h:691
static uint32_t lora_time_on_air(size_t pkt_len, loramac_dr_idx_t dr, uint8_t cr)
Compute the time on air of a LoRa packet.
Definition: loramac.h:1082
loramac_class_t
Device class.
Definition: loramac.h:663
loramac_tx_pwr_idx_t
LoRaMAC transmission power indexes.
Definition: loramac.h:878
@ LORAMAC_JOIN_ABP
Activation by personnalization.
Definition: loramac.h:674
@ LORAMAC_JOIN_OTAA
Other-the-air activation.
Definition: loramac.h:673
@ LORAMAC_TX_CNF
Confirmable transmission mode.
Definition: loramac.h:681
@ LORAMAC_TX_UNCNF
Unconfirmable transmission mode.
Definition: loramac.h:682
@ LORAMAC_DR_14
Definition: loramac.h:858
@ LORAMAC_DR_3
Definition: loramac.h:737
@ LORAMAC_DR_8
Definition: loramac.h:792
@ LORAMAC_DR_2
Definition: loramac.h:726
@ LORAMAC_DR_1
Definition: loramac.h:715
@ LORAMAC_DR_9
Definition: loramac.h:803
@ LORAMAC_DR_11
Definition: loramac.h:825
@ LORAMAC_DR_6
Definition: loramac.h:770
@ LORAMAC_DR_15
Definition: loramac.h:869
@ LORAMAC_DR_4
Definition: loramac.h:748
@ LORAMAC_DR_12
Definition: loramac.h:836
@ LORAMAC_DR_13
Definition: loramac.h:847
@ LORAMAC_DR_7
Definition: loramac.h:781
@ LORAMAC_DR_10
Definition: loramac.h:814
@ LORAMAC_DR_5
Definition: loramac.h:759
@ LORAMAC_DR_0
Definition: loramac.h:704
@ LORAMAC_CLASS_C
Class C device.
Definition: loramac.h:666
@ LORAMAC_CLASS_B
Class B device.
Definition: loramac.h:665
@ LORAMAC_CLASS_A
Class A device.
Definition: loramac.h:664
@ LORAMAC_TX_PWR_6
Definition: loramac.h:957
@ LORAMAC_TX_PWR_15
Definition: loramac.h:1056
@ LORAMAC_TX_PWR_7
Definition: loramac.h:968
@ LORAMAC_TX_PWR_13
Definition: loramac.h:1034
@ LORAMAC_TX_PWR_2
Definition: loramac.h:913
@ LORAMAC_TX_PWR_1
Definition: loramac.h:902
@ LORAMAC_TX_PWR_11
Definition: loramac.h:1012
@ LORAMAC_TX_PWR_14
Definition: loramac.h:1045
@ LORAMAC_TX_PWR_3
Definition: loramac.h:924
@ LORAMAC_TX_PWR_9
Definition: loramac.h:990
@ LORAMAC_TX_PWR_0
Definition: loramac.h:889
@ LORAMAC_TX_PWR_10
Definition: loramac.h:1001
@ LORAMAC_TX_PWR_5
Definition: loramac.h:946
@ LORAMAC_TX_PWR_8
Definition: loramac.h:979
@ LORAMAC_TX_PWR_12
Definition: loramac.h:1023
@ LORAMAC_TX_PWR_4
Definition: loramac.h:935
Common macros and compiler attributes/pragmas configuration.
A LoRaMAC network channel.
Definition: loramac.h:1062
uint8_t dr_max
Maximum datarate index.
Definition: loramac.h:1067
uint8_t index
Channel index in defined list.
Definition: loramac.h:1064
uint8_t bw
Bandwidth index.
Definition: loramac.h:1065
uint8_t dcycle
Duty cycle to use on this channel (1 to 100)
Definition: loramac.h:1068
uint32_t freq
Center frequency in Hz.
Definition: loramac.h:1063
uint8_t dr_min
Minimum datarate index.
Definition: loramac.h:1066