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 
9 #pragma once
10 
24 #include <assert.h>
25 #include <stdint.h>
26 #include <stdlib.h>
27 
28 #include "modules.h"
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
44 #ifndef CONFIG_LORAMAC_DEV_EUI_DEFAULT
45 #define CONFIG_LORAMAC_DEV_EUI_DEFAULT "0000000000000000"
46 #endif
47 
53 #ifndef CONFIG_LORAMAC_JOIN_EUI_DEFAULT
54 #define CONFIG_LORAMAC_JOIN_EUI_DEFAULT "0000000000000000"
55 #endif
56 
62 #ifndef CONFIG_LORAMAC_APP_EUI_DEFAULT
63 #define CONFIG_LORAMAC_APP_EUI_DEFAULT "0000000000000000"
64 #endif
65 
71 #ifndef CONFIG_LORAMAC_APP_KEY_DEFAULT
72 #define CONFIG_LORAMAC_APP_KEY_DEFAULT "00000000000000000000000000000000"
73 #endif
74 
80 #ifndef CONFIG_LORAMAC_NWK_KEY_DEFAULT
81 #define CONFIG_LORAMAC_NWK_KEY_DEFAULT "00000000000000000000000000000000"
82 #endif
83 
89 #ifndef CONFIG_LORAMAC_APP_SKEY_DEFAULT
90 #define CONFIG_LORAMAC_APP_SKEY_DEFAULT "00000000000000000000000000000000"
91 #endif
92 
98 #ifndef CONFIG_LORAMAC_NWK_SKEY_DEFAULT
99 #define CONFIG_LORAMAC_NWK_SKEY_DEFAULT "00000000000000000000000000000000"
100 #endif
101 
107 #ifndef CONFIG_LORAMAC_FNWKSINT_KEY_DEFAULT
108 #define CONFIG_LORAMAC_FNWKSINT_KEY_DEFAULT "00000000000000000000000000000000"
109 #endif
110 
116 #ifndef CONFIG_LORAMAC_SNWKSINT_KEY_DEFAULT
117 #define CONFIG_LORAMAC_SNWKSINT_KEY_DEFAULT "00000000000000000000000000000000"
118 #endif
119 
125 #ifndef CONFIG_LORAMAC_NWKSENC_KEY_DEFAULT
126 #define CONFIG_LORAMAC_NWKSENC_KEY_DEFAULT "00000000000000000000000000000000"
127 #endif
128 
132 #ifndef CONFIG_LORAMAC_DEV_ADDR_DEFAULT
133 #define CONFIG_LORAMAC_DEV_ADDR_DEFAULT "00000000"
134 #endif
135 
139 #if !IS_ACTIVE(CONFIG_LORAMAC_REGION_EU_868) \
140  && !IS_ACTIVE(CONFIG_LORAMAC_REGION_IN_865)
141 #define CONFIG_LORAMAC_REGION_EU_868 1
142 #endif
143 
156 #if IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS_A)
157 #define CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS (LORAMAC_CLASS_A)
158 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS_B)
159 #define CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS (LORAMAC_CLASS_B)
160 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS_C)
161 #define CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS (LORAMAC_CLASS_C)
162 #endif
163 
164 #ifndef CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS
165 #define CONFIG_LORAMAC_DEFAULT_DEVICE_CLASS (LORAMAC_CLASS_A)
166 #endif
167 
176 #ifndef CONFIG_LORAMAC_DEFAULT_NETID
177 #define CONFIG_LORAMAC_DEFAULT_NETID (1U)
178 #endif
179 
188 #ifdef DOXYGEN
189 #define CONFIG_LORAMAC_DEFAULT_PRIVATE_NETWORK
190 #endif
191 
201 #if IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_0)
202 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_0)
203 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_1)
204 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_1)
205 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_2)
206 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_2)
207 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_3)
208 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_3)
209 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_4)
210 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_4)
211 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_5)
212 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_5)
213 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_6)
214 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_6)
215 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_7)
216 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_7)
217 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_8)
218 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_8)
219 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_9)
220 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_9)
221 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_10)
222 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_10)
223 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_11)
224 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_11)
225 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_12)
226 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_12)
227 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_13)
228 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_13)
229 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_14)
230 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_14)
231 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_DR_15)
232 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_15)
233 #endif
234 
235 #ifndef CONFIG_LORAMAC_DEFAULT_DR
236 #define CONFIG_LORAMAC_DEFAULT_DR (LORAMAC_DR_0)
237 #endif
238 
245 #if IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_0)
246 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_0)
247 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_1)
248 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_1)
249 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_2)
250 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_2)
251 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_3)
252 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_3)
253 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_4)
254 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_4)
255 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_5)
256 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_5)
257 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_6)
258 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_6)
259 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_7)
260 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_7)
261 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_8)
262 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_8)
263 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_9)
264 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_9)
265 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_10)
266 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_10)
267 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_11)
268 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_11)
269 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_12)
270 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_12)
271 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_13)
272 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_13)
273 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_14)
274 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_14)
275 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_POWER_15)
276 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_15)
277 #endif
278 
279 #ifndef CONFIG_LORAMAC_DEFAULT_TX_POWER
280 #define CONFIG_LORAMAC_DEFAULT_TX_POWER (LORAMAC_TX_PWR_1)
281 #endif
282 
292 #ifndef CONFIG_LORAMAC_DEFAULT_TX_PORT
293 #define CONFIG_LORAMAC_DEFAULT_TX_PORT (2U)
294 #endif
295 
304 #if IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_MODE_CNF)
305 #define CONFIG_LORAMAC_DEFAULT_TX_MODE (LORAMAC_TX_CNF)
306 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_TX_MODE_UNCNF)
307 #define CONFIG_LORAMAC_DEFAULT_TX_MODE (LORAMAC_TX_UNCNF)
308 #endif
309 
310 #ifndef CONFIG_LORAMAC_DEFAULT_TX_MODE
311 #define CONFIG_LORAMAC_DEFAULT_TX_MODE (LORAMAC_TX_CNF)
312 #endif
313 
325 #ifndef CONFIG_LORAMAC_DEFAULT_REDUNDANCY
326 #define CONFIG_LORAMAC_DEFAULT_REDUNDANCY (0U)
327 #endif
328 
337 #ifdef DOXYGEN
338 #define CONFIG_LORAMAC_DEFAULT_ADR
339 #endif
340 
347 #ifndef CONFIG_LORAMAC_DEFAULT_RETX
348 #define CONFIG_LORAMAC_DEFAULT_RETX (5U)
349 #endif
350 
359 #ifndef CONFIG_LORAMAC_DEFAULT_LINKCHK
360 #define CONFIG_LORAMAC_DEFAULT_LINKCHK (0U)
361 #endif
362 
369 #ifndef CONFIG_LORAMAC_DEFAULT_RX1_DELAY
370 #define CONFIG_LORAMAC_DEFAULT_RX1_DELAY (1000U)
371 #endif
372 
379 #if IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_0)
380 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_0)
381 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_1)
382 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_1)
383 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_2)
384 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_2)
385 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_3)
386 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_3)
387 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_4)
388 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_4)
389 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_5)
390 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_5)
391 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_6)
392 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_6)
393 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_7)
394 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_7)
395 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_8)
396 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_8)
397 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_9)
398 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_9)
399 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_10)
400 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_10)
401 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_11)
402 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_11)
403 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_12)
404 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_12)
405 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_13)
406 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_13)
407 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_14)
408 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_14)
409 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_RX2_DR_15)
410 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_15)
411 #endif
412 
413 #ifndef CONFIG_LORAMAC_DEFAULT_RX2_DR
414 #if IS_ACTIVE(CONFIG_LORAMAC_REGION_EU_868)
415 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_0)
416 #elif IS_ACTIVE(CONFIG_LORAMAC_REGION_IN_865)
417 #define CONFIG_LORAMAC_DEFAULT_RX2_DR (LORAMAC_DR_2)
418 #endif
419 #endif
420 
424 #ifndef CONFIG_LORAMAC_DEFAULT_RX2_FREQ
425 #if IS_ACTIVE(CONFIG_LORAMAC_REGION_EU_868)
426 #define CONFIG_LORAMAC_DEFAULT_RX2_FREQ (869525000UL)
427 #elif IS_ACTIVE(CONFIG_LORAMAC_REGION_IN_865)
428 #define CONFIG_LORAMAC_DEFAULT_RX2_FREQ (866550000UL)
429 #endif
430 #endif
431 
442 #if IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_JOIN_PROCEDURE_OTAA)
443 #define CONFIG_LORAMAC_DEFAULT_JOIN_PROCEDURE (LORAMAC_JOIN_OTAA)
444 #elif IS_ACTIVE(CONFIG_LORAMAC_DEFAULT_JOIN_PROCEDURE_ABP)
445 #define CONFIG_LORAMAC_DEFAULT_JOIN_PROCEDURE (LORAMAC_JOIN_ABP)
446 #endif
447 
448 #ifndef CONFIG_LORAMAC_DEFAULT_JOIN_PROCEDURE
449 #define CONFIG_LORAMAC_DEFAULT_JOIN_PROCEDURE (LORAMAC_JOIN_OTAA)
450 #endif
451 
459 #ifndef CONFIG_LORAMAC_DEFAULT_JOIN_DELAY1
460 #define CONFIG_LORAMAC_DEFAULT_JOIN_DELAY1 (5U)
461 #endif
462 
470 #ifndef CONFIG_LORAMAC_DEFAULT_JOIN_DELAY2
471 #define CONFIG_LORAMAC_DEFAULT_JOIN_DELAY2 (6U)
472 #endif
473 
480 #ifndef CONFIG_LORAMAC_DEFAULT_MAX_FCNT_GAP
481 #define CONFIG_LORAMAC_DEFAULT_MAX_FCNT_GAP (16384U)
482 #endif
483 
491 #ifndef CONFIG_LORAMAC_DEFAULT_SYSTEM_MAX_RX_ERROR
492 #define CONFIG_LORAMAC_DEFAULT_SYSTEM_MAX_RX_ERROR (50)
493 #endif
494 
503 #ifndef CONFIG_LORAMAC_DEFAULT_MIN_RX_SYMBOLS
504 #define CONFIG_LORAMAC_DEFAULT_MIN_RX_SYMBOLS (12)
505 #endif
515 #ifndef LORAMAC_DEFAULT_ADR_ACK_LIMIT
516 #define LORAMAC_DEFAULT_ADR_ACK_LIMIT (64U)
517 #endif
518 
524 #ifndef LORAMAC_DEFAULT_ADR_ACK_DELAY
525 #define LORAMAC_DEFAULT_ADR_ACK_DELAY (32U)
526 #endif
527 
533 #ifndef LORAMAC_DEFAULT_ADR_TIMEOUT
534 #define LORAMAC_DEFAULT_ADR_TIMEOUT (3U)
535 #endif
536 
540 #define LORAMAC_DEFAULT_RX2_DELAY (1000U + CONFIG_LORAMAC_DEFAULT_RX1_DELAY)
541 
549 #define LORAMAC_DEVEUI_LEN (8U)
550 
554 #define LORAMAC_DEVADDR_LEN (4U)
555 
559 #define LORAMAC_APPEUI_LEN (8U)
560 
564 #define LORAMAC_JOINEUI_LEN (8U)
565 
569 #define LORAMAC_APPKEY_LEN (16U)
570 
574 #define LORAMAC_NWKKEY_LEN (16U)
575 
579 #define LORAMAC_APPSKEY_LEN (16U)
580 
584 #define LORAMAC_NWKSKEY_LEN (16U)
585 
589 #define LORAMAC_FNWKSINTKEY_LEN (16U)
590 
594 #define LORAMAC_SNWKSINTKEY_LEN (16U)
595 
599 #define LORAMAC_NWKSENCKEY_LEN (16U)
600 
604 #define LORAMAC_JSINTKEY_LEN (16U)
605 
609 #define LORAMAC_JSENCKEY_LEN (16U)
610 
614 #define LORAMAC_JSINTKEY_LEN (16U)
615 
619 #define LORAMAC_PORT_MIN (1U)
620 
624 #define LORAMAC_PORT_MAX (223U)
625 
629 #define LORAMAC_APP_NONCE_LEN (3U)
630 
634 #define LORAMAC_JOIN_NONCE_LEN (3U)
635 
639 #define LORAMAC_NETWORK_ID_LEN (3U)
640 
646 #if defined(REGION_AU915) || defined(REGION_CN470) || defined(REGION_US915) || defined(REGION_US915_HYBRID) || defined(REGION_AS923)
647 #define LORAMAC_CHANNELS_MASK_LEN (6U)
648 #else
649 #define LORAMAC_CHANNELS_MASK_LEN (1U)
650 #endif
651 
662 typedef enum {
667 
671 typedef enum {
675 
679 typedef enum {
683 
690 typedef enum {
870 
877 typedef enum {
1061  typedef struct {
1062  uint32_t freq;
1063  uint8_t index;
1064  uint8_t bw;
1065  uint8_t dr_min;
1066  uint8_t dr_max;
1067  uint8_t dcycle;
1069 
1081 static inline uint32_t lora_time_on_air(size_t pkt_len, loramac_dr_idx_t dr, uint8_t cr)
1082 {
1083  assert(dr <= LORAMAC_DR_6);
1084  const uint8_t _K[6][4] = {
1085  { 0, 1, 5, 5 }, /* DR0 */
1086  { 0, 1, 4, 5 }, /* DR1 */
1087  { 1, 5, 5, 5 }, /* DR2 */
1088  { 1, 4, 5, 4 }, /* DR3 */
1089  { 1, 3, 4, 4 }, /* DR4 */
1090  { 1, 2, 4, 3 } /* DR5 */
1091  };
1092 
1093  uint32_t t_sym = 1 << (15 - dr);
1094  uint32_t t_preamble = (t_sym << 3) + (t_sym << 2) + (t_sym >> 2);
1095 
1096  uint8_t index = (dr < LORAMAC_DR_6) ? dr : LORAMAC_DR_5;
1097  uint8_t n0 = _K[index][0];
1098  uint32_t nb_symbols;
1099 
1100  uint8_t offset = _K[index][1];
1101 
1102  if (pkt_len < offset) {
1103  nb_symbols = 8 + n0 * (cr + 4);
1104  }
1105  else {
1106  uint8_t c1 = _K[index][2];
1107  uint8_t c2 = _K[index][3];
1108  uint8_t pos = (pkt_len - offset) % (c1 + c2);
1109  uint8_t cycle = (pkt_len - offset) / (c1 + c2);
1110  nb_symbols = 8 + (n0 + 2 * cycle + 1 + (pos > (c1 - 1))) * (cr + 4);
1111  }
1112 
1113  uint32_t t_payload = t_sym * nb_symbols;
1114 
1115  return t_preamble + t_payload;
1116 }
1117 
1118 #ifdef __cplusplus
1119 }
1120 #endif
1121 
POSIX.1-2008 compliant version of the assert macro.
#define assert(cond)
abort the program if assertion is false
Definition: assert.h:135
loramac_join_mode_t
LoRaMAC network join procedure type.
Definition: loramac.h:671
loramac_tx_mode_t
LoRaMAC transmission mode.
Definition: loramac.h:679
loramac_dr_idx_t
LoRaMAC datarate indexes.
Definition: loramac.h:690
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:1081
loramac_class_t
Device class.
Definition: loramac.h:662
loramac_tx_pwr_idx_t
LoRaMAC transmission power indexes.
Definition: loramac.h:877
@ LORAMAC_JOIN_ABP
Activation by personnalization.
Definition: loramac.h:673
@ LORAMAC_JOIN_OTAA
Other-the-air activation.
Definition: loramac.h:672
@ LORAMAC_TX_CNF
Confirmable transmission mode.
Definition: loramac.h:680
@ LORAMAC_TX_UNCNF
Unconfirmable transmission mode.
Definition: loramac.h:681
@ LORAMAC_DR_14
Definition: loramac.h:857
@ LORAMAC_DR_3
Definition: loramac.h:736
@ LORAMAC_DR_8
Definition: loramac.h:791
@ LORAMAC_DR_2
Definition: loramac.h:725
@ LORAMAC_DR_1
Definition: loramac.h:714
@ LORAMAC_DR_9
Definition: loramac.h:802
@ LORAMAC_DR_11
Definition: loramac.h:824
@ LORAMAC_DR_6
Definition: loramac.h:769
@ LORAMAC_DR_15
Definition: loramac.h:868
@ LORAMAC_DR_4
Definition: loramac.h:747
@ LORAMAC_DR_12
Definition: loramac.h:835
@ LORAMAC_DR_13
Definition: loramac.h:846
@ LORAMAC_DR_7
Definition: loramac.h:780
@ LORAMAC_DR_10
Definition: loramac.h:813
@ LORAMAC_DR_5
Definition: loramac.h:758
@ LORAMAC_DR_0
Definition: loramac.h:703
@ LORAMAC_CLASS_C
Class C device.
Definition: loramac.h:665
@ LORAMAC_CLASS_B
Class B device.
Definition: loramac.h:664
@ LORAMAC_CLASS_A
Class A device.
Definition: loramac.h:663
@ LORAMAC_TX_PWR_6
Definition: loramac.h:956
@ LORAMAC_TX_PWR_15
Definition: loramac.h:1055
@ LORAMAC_TX_PWR_7
Definition: loramac.h:967
@ LORAMAC_TX_PWR_13
Definition: loramac.h:1033
@ LORAMAC_TX_PWR_2
Definition: loramac.h:912
@ LORAMAC_TX_PWR_1
Definition: loramac.h:901
@ LORAMAC_TX_PWR_11
Definition: loramac.h:1011
@ LORAMAC_TX_PWR_14
Definition: loramac.h:1044
@ LORAMAC_TX_PWR_3
Definition: loramac.h:923
@ LORAMAC_TX_PWR_9
Definition: loramac.h:989
@ LORAMAC_TX_PWR_0
Definition: loramac.h:888
@ LORAMAC_TX_PWR_10
Definition: loramac.h:1000
@ LORAMAC_TX_PWR_5
Definition: loramac.h:945
@ LORAMAC_TX_PWR_8
Definition: loramac.h:978
@ LORAMAC_TX_PWR_12
Definition: loramac.h:1022
@ LORAMAC_TX_PWR_4
Definition: loramac.h:934
Common macros and compiler attributes/pragmas configuration.
A LoRaMAC network channel.
Definition: loramac.h:1061
uint8_t dr_max
Maximum datarate index.
Definition: loramac.h:1066
uint8_t index
Channel index in defined list.
Definition: loramac.h:1063
uint8_t bw
Bandwidth index.
Definition: loramac.h:1064
uint8_t dcycle
Duty cycle to use on this channel (1 to 100)
Definition: loramac.h:1067
uint32_t freq
Center frequency in Hz.
Definition: loramac.h:1062
uint8_t dr_min
Minimum datarate index.
Definition: loramac.h:1065