RUI3 (RAK Unified Interface 3) - RAK4631
RAKLorawan.h
Go to the documentation of this file.
1 #ifndef __RAK_LORAWAN_H__
2 #define __RAK_LORAWAN_H__
3 
4 #ifdef SUPPORT_LORA
5 
6 #include <cstdint>
7 #include "WString.h"
8 #include <cstring>
9 
10 #include "udrv_errno.h"
11 #include "service_lora.h"
12 #include "service_lora_test.h"
13 #include "service_lora_p2p.h"
14 #include "service_lora_multicast.h"
15 #include "service_battery.h"
16 #include "service_lora_arssi.h"
17 
18 using namespace std;
19 
27 typedef enum
28 {
42 
46 typedef enum
47 {
51 
55 typedef enum
56 {
61 
65 typedef enum
66 {
70 
74 typedef enum
75 {
80 
86 {
105 
106 
110 typedef struct
111 {
112  uint8_t McDevclass;
113  uint32_t McAddress;
114  uint8_t McAppSKey[16];
115  uint8_t McNwkSKey[16];
116  uint32_t McFrequency;
117  int8_t McDatarate;
118  uint16_t McPeriodicity;
119  int8_t McGroupID;
120  uint8_t entry;
122 
126 typedef struct
127 {
128  uint32_t chan;
129  uint16_t mask;
130  int8_t rssi;
132 
136 {
137 
138 public:
139  RAKLorawan();
140 
191  bool join();
192  bool join(uint8_t join_start, uint8_t auto_join, uint8_t auto_join_period, uint8_t auto_join_cnt);
193 
256  bool send(uint8_t length, uint8_t *payload, uint8_t fport, bool confirm, uint8_t retry);
257  bool send(uint8_t length, uint8_t *payload, uint8_t fport, bool confirm);
258  bool send(uint8_t length, uint8_t *payload, uint8_t fport);
259 
264  class rety
265  {
266  public:
291  uint8_t get();
292 
322  bool set(uint8_t value);
323  };
324 
384  bool lpsend(uint8_t port, bool ack, uint8_t *payload, int length);
385 
398  bool usend(uint8_t port, bool confirm, uint8_t retry, uint8_t *payload, uint8_t length);
399 
478  bool registerRecvCallback(service_lora_recv_cb callback);
479 
558  bool registerJoinCallback(service_lora_join_cb callback);
559 
638  bool registerSendCallback(service_lora_send_cb callback);
639 
707  bool registerPRecvCallback(service_lora_p2p_recv_cb_type callback);
708 
776  bool registerPSendCallback(service_lora_p2p_send_cb_type callback);
854  bool registerPSendCADCallback(service_lora_p2p_send_CAD_cb_type callback);
855 
860  class appeui
861  {
862  public:
910  bool get(uint8_t *buf, uint32_t len);
911 
958  bool set(uint8_t *buf, uint32_t len);
959  };
960 
965  class appkey
966  {
967  public:
1014  bool get(uint8_t *buf, uint32_t len);
1015 
1062  bool set(uint8_t *buf, uint32_t len);
1063  };
1064 
1069  class appskey
1070  {
1071  public:
1118  bool get(uint8_t *buf, uint32_t len);
1119 
1167  bool set(uint8_t *buf, uint32_t len);
1168  };
1169 
1174  class daddr
1175  {
1176  public:
1224  bool get(uint8_t *buf, uint32_t len);
1225 
1272  bool set(uint8_t *buf, uint32_t len);
1273  };
1274 
1279  class deui
1280  {
1281  public:
1328  bool get(uint8_t *buf, uint32_t len);
1329 
1376  bool set(uint8_t *buf, uint32_t len);
1377  };
1378 
1383  class netid
1384  {
1385  public:
1446  bool get(uint8_t *buf, uint32_t len);
1447  };
1448 
1453  class nwkskey
1454  {
1455  public:
1503  bool get(uint8_t *buf, uint32_t len);
1504 
1551  bool set(uint8_t *buf, uint32_t len);
1552  };
1553 
1558  class cfm
1559  {
1560  public:
1587  bool get();
1588 
1616  bool set(bool value);
1617  };
1618 
1623  class cfs
1624  {
1625  public:
1683  bool get();
1684  };
1685 
1690  class njm
1691  {
1692  public:
1719  bool get();
1720 
1750  bool set(bool value);
1751  };
1752 
1757  class njs
1758  {
1759  public:
1804  bool get();
1805  };
1806 
1812  class adr
1813  {
1814  public:
1841  bool get();
1842 
1871  bool set(bool value);
1872  };
1873 
1879  {
1880  public:
1920  uint8_t get();
1921 
1960  bool set(uint8_t value);
1961  };
1962 
1967  class dcs
1968  {
1969  public:
1996  bool get();
1997 
2024  bool set(uint8_t dutyCycle);
2025  };
2026 
2031  class dr
2032  {
2033  public:
2057  uint8_t get();
2058 
2087  bool set(uint8_t value);
2088  };
2089 
2094  class jn1dl
2095  {
2096  public:
2121  int get();
2122 
2150  bool set(int value);
2151  };
2152 
2157  class jn2dl
2158  {
2159  public:
2182  int get();
2183 
2211  bool set(int value);
2212  };
2213 
2218  class pnm
2219  {
2220  public:
2247  bool get();
2248 
2276  bool set(bool value);
2277  };
2278 
2283  class rx1dl
2284  {
2285  public:
2310  int get();
2311 
2338  bool set(int value);
2339  };
2340 
2345  class rx2dl
2346  {
2347  public:
2370  int get();
2371 
2398  bool set(int value);
2399  };
2400 
2405  class rx2dr
2406  {
2407  public:
2432  uint8_t get();
2433 
2461  bool set(uint8_t value);
2462  };
2463 
2468  class rx2fq
2469  {
2470  public:
2493  long get();
2494 
2521  bool set(int value);
2522  };
2523 
2528  class txp
2529  {
2530  public:
2555  uint8_t get();
2556 
2584  bool set(uint8_t value);
2585  };
2586 
2591  class pgslot
2592  {
2593  public:
2640  uint8_t get();
2641 
2691  bool set(uint8_t value);
2692  };
2693 
2698  class bfreq
2699  {
2700  public:
2746  float get();
2747  };
2748 
2753  class btime
2754  {
2755  public:
2801  long get();
2802  };
2803 
2808  class bgw
2809  {
2810  public:
2865  beacon_bgw_t get();
2866  };
2867 
2873  class rssi
2874  {
2875  public:
2930  int get();
2931  };
2932 
2938  class snr
2939  {
2940  public:
2995  int get();
2996  };
2997 
3002  class ltime
3003  {
3004  public:
3050  String get();
3051  };
3052 
3057  class ver
3058  {
3059  public:
3082  String get();
3083  };
3084 
3090  class mask
3091  {
3092  public:
3126  bool get(uint16_t *buff);
3127 
3161  bool set(uint16_t *value);
3162  };
3163 
3180  class band
3181  {
3182  public:
3220  int32_t get();
3221 
3250  bool set(uint8_t value);
3251  };
3252 
3258  {
3259  public:
3288  uint32_t get();
3289 
3318  bool set(uint8_t value);
3319  };
3320 
3325  class nwm
3326  {
3327  public:
3356  int get();
3357 
3386  bool set(uint8_t value);
3387  };
3388 
3393  class pfreq
3394  {
3395  public:
3422  uint32_t get();
3423 
3453  bool set(uint32_t value);
3454  };
3455 
3460  class psf
3461  {
3462  public:
3489  uint8_t get();
3490 
3520  bool set(uint8_t value);
3521  };
3522 
3527  class pbw
3528  {
3529  public:
3556  uint32_t get();
3557 
3587  bool set(uint32_t value);
3588  };
3589 
3594  class pcr
3595  {
3596  public:
3623  uint8_t get();
3624 
3654  bool set(uint8_t value);
3655  };
3656 
3661  class ppl
3662  {
3663  public:
3690  uint16_t get();
3691 
3721  bool set(uint16_t value);
3722  };
3723 
3728  class ptp
3729  {
3730  public:
3757  uint8_t get();
3758 
3787  bool set(uint8_t value);
3788  };
3789 
3830  bool precv(uint32_t timeout);
3831 
3832  //instance
3875 
3918  bool psend(uint8_t length, uint8_t *payload);
3919  bool psend(uint8_t length, uint8_t *payload,bool cad_enable);
3920 
3925  class encry
3926  {
3927  public:
3993  bool get();
3994 
4060  bool set(bool value);
4061  };
4062 
4067  class enckey
4068  {
4069  public:
4137  bool get(uint8_t *buff, uint32_t len);
4138 
4206  bool set(uint8_t *buff, uint32_t len);
4207  };
4208  class enciv
4209  {
4210  public:
4287  bool get(uint8_t *buff, uint32_t len);
4364  bool set(uint8_t *buff, uint32_t len);
4365  };
4366 
4370 
4375  class pbr
4376  {
4377  public:
4386  uint32_t get();
4387 
4397  bool set(uint32_t value);
4398  };
4399 
4404  class pfdev
4405  {
4406  public:
4415  uint32_t get();
4416 
4426  bool set(uint32_t value);
4427  };
4428 
4431 
4510  bool addmulc(RAK_LORA_McSession session);
4511 
4591  bool rmvmulc(uint32_t devAddr);
4592 
4702  bool lstmulc(RAK_LORA_McSession *iterator);
4703 
4760  bool arssi(RAK_LORA_chan_rssi *iterator);
4761 };
4762 
4763 #endif
4764 
4765 #endif //end lorawan.h
Definition: RAKLorawan.h:2591
This file contains all error code for the hardware independent driver layer.
pfdev pfdev
Definition: RAKLorawan.h:4430
void(* service_lora_join_cb)(int32_t status)
Definition: service_lora.h:101
Definition: RAKLorawan.h:4375
Definition: RAKLorawan.h:1558
ppl ppl
Definition: RAKLorawan.h:3873
Definition: RAKLorawan.h:2218
Definition: RAKLorawan.h:2468
Definition: RAKLorawan.h:965
The device will get received data from network.
Definition: RAKLorawan.h:68
A Tx timeout occurred.
Definition: RAKLorawan.h:90
Service performed successfully.
Definition: RAKLorawan.h:88
rx2dl rx2dl
Definition: RAKLorawan.h:3853
Definition: RAKLorawan.h:3393
btime btime
Definition: RAKLorawan.h:3859
adr adr
Definition: RAKLorawan.h:3845
snr snr
Definition: RAKLorawan.h:3862
void(* service_lora_recv_cb)(SERVICE_LORA_RECEIVE_T *data)
Definition: service_lora.h:100
RAKLoRaMacEventInfoStatus
Definition: RAKLorawan.h:85
Definition: RAKLorawan.h:264
deviceClass deviceClass
Definition: RAKLorawan.h:3846
void(* service_lora_send_cb)(int32_t status)
Definition: service_lora.h:102
KR920 ~ 923.
Definition: RAKLorawan.h:36
Definition: RAKLorawan.h:87
Definition: RAKLorawan.h:3925
Definition: RAKLorawan.h:2753
appeui appeui
Definition: RAKLorawan.h:3834
The LoRaWan will work in Class C.
Definition: RAKLorawan.h:78
rx2fq rx2fq
Definition: RAKLorawan.h:3855
pnm pnm
Definition: RAKLorawan.h:3851
IN865 ~ 867.
Definition: RAKLorawan.h:32
mask mask
Definition: RAKLorawan.h:3865
Definition: RAKLorawan.h:1690
rx2dr rx2dr
Definition: RAKLorawan.h:3854
RAK_LORA_JOIN_MODE
Definition: RAKLorawan.h:46
cfs cfs
Definition: RAKLorawan.h:3842
rssi rssi
Definition: RAKLorawan.h:3861
uint32_t McFrequency
The frequency of a multicast group.
Definition: RAKLorawan.h:116
over-the-air activation
Definition: RAKLorawan.h:49
Definition: RAKLorawan.h:1279
Definition: RAKLorawan.h:2873
uint16_t McPeriodicity
The periodicity of a multicast group.
Definition: RAKLorawan.h:118
Definition: RAKLorawan.h:1623
pbw pbw
Definition: RAKLorawan.h:3871
An Rx error occurred on receive window 1.
Definition: RAKLorawan.h:93
AS923-1.
Definition: RAKLorawan.h:37
An error occurred during the execution of the service.
Definition: RAKLorawan.h:89
Definition: RAKLorawan.h:3257
A frame with an invalid downlink counter was received. The downlink counter of the frame was equal to...
Definition: RAKLorawan.h:96
deui deui
Definition: RAKLorawan.h:3838
Definition: RAKLorawan.h:860
Definition: WString.h:22
EU863 ~ 870.
Definition: RAKLorawan.h:33
enciv enciv
Definition: RAKLorawan.h:4369
Provide battery service layer.
dcs dcs
Definition: RAKLorawan.h:3847
Switch to FSK mode.
Definition: RAKLorawan.h:59
njs njs
Definition: RAKLorawan.h:3844
enum RAKLoRaMacEventInfoStatus RAKLoRaMacEventInfoStatus_t
Definition: RAKLorawan.h:3002
An Rx error occurred on receive window 2.
Definition: RAKLorawan.h:94
US902 ~ 928.
Definition: RAKLorawan.h:34
Definition: RAKLorawan.h:1757
RAK_LORA_BAND
Definition: RAKLorawan.h:27
An error occurred in the join procedure.
Definition: RAKLorawan.h:95
Multicast error occurred.
Definition: RAKLorawan.h:101
ver ver
Definition: RAKLorawan.h:3864
Definition: service_lora.h:125
int8_t McGroupID
The group ID of a multicast group.
Definition: RAKLorawan.h:119
AU915 ~ 928.
Definition: RAKLorawan.h:35
Definition: RAKLorawan.h:3325
An Rx timeout occurred on receive window 2.
Definition: RAKLorawan.h:92
An Rx timeout occurred on receive window 1.
Definition: RAKLorawan.h:91
Definition: RAKLorawan.h:1453
Definition: RAKLorawan.h:4067
Definition: RAKLorawan.h:2157
Definition: RAKLorawan.h:2094
nwkskey nwkskey
Definition: RAKLorawan.h:3840
AS923-4.
Definition: RAKLorawan.h:40
Definition: RAKLorawan.h:2345
Definition: RAKLorawan.h:2283
The device will not get received data from network.
Definition: RAKLorawan.h:67
Definition: RAKLorawan.h:4404
encry encry
Definition: RAKLorawan.h:4367
bfreq bfreq
Definition: RAKLorawan.h:3858
netid netid
Definition: RAKLorawan.h:3839
daddr daddr
Definition: RAKLorawan.h:3837
The LoRaWan will work in Class B.
Definition: RAKLorawan.h:77
void(* service_lora_p2p_send_cb_type)(void)
Definition: service_lora_p2p.h:110
Definition: RAKLorawan.h:1812
rx1dl rx1dl
Definition: RAKLorawan.h:3852
Beacon lost.
Definition: RAKLorawan.h:103
Definition: RAKLorawan.h:110
Provide LoRa service layer for API layer to use.
linkcheck linkcheck
Definition: RAKLorawan.h:3867
Definition: RAKLorawan.h:3527
Definition: RAKLorawan.h:126
nwm nwm
Definition: RAKLorawan.h:3868
uint32_t chan
The channel of a rssi.
Definition: RAKLorawan.h:128
jn2dl jn2dl
Definition: RAKLorawan.h:3850
bgw bgw
Definition: RAKLorawan.h:3860
An address error occurred.
Definition: RAKLorawan.h:99
uint8_t McDevclass
The device class of a multicast group.
Definition: RAKLorawan.h:112
EU433.
Definition: RAKLorawan.h:29
RU864 ~ 870.
Definition: RAKLorawan.h:31
RAK_LORA_CONFIRM_MODE
Definition: RAKLorawan.h:65
ptp ptp
Definition: RAKLorawan.h:3874
pcr pcr
Definition: RAKLorawan.h:3872
Definition: RAKLorawan.h:2938
int8_t rssi
The rssi on reception.
Definition: RAKLorawan.h:130
Switch to LoRaWan mode.
Definition: RAKLorawan.h:58
activation by personalization
Definition: RAKLorawan.h:48
AS923-3.
Definition: RAKLorawan.h:39
appkey appkey
Definition: RAKLorawan.h:3835
uint16_t length
Definition: RAKProtocol.h:71
int8_t McDatarate
The data rate of a multicast group.
Definition: RAKLorawan.h:117
The MAC could not retransmit a frame since the MAC decreased the datarate. The payload size is not ap...
Definition: RAKLorawan.h:97
jn1dl jn1dl
Definition: RAKLorawan.h:3849
The LoRaWan will work in Class A.
Definition: RAKLorawan.h:76
Definition: RAKLorawan.h:2031
rety rety
Definition: RAKLorawan.h:3833
Definition: RAKLorawan.h:3594
AS923-2.
Definition: RAKLorawan.h:38
Definition: RAKLorawan.h:3090
uint8_t entry
The entry of a multicast group.
Definition: RAKLorawan.h:120
Definition: RAKLorawan.h:1967
void(* service_lora_p2p_send_CAD_cb_type)(bool)
Definition: service_lora_p2p.h:112
Beacon locked.
Definition: RAKLorawan.h:102
Definition: RAKLorawan.h:135
Definition: RAKLorawan.h:3728
njm njm
Definition: RAKLorawan.h:3843
Switch to P2P mode.
Definition: RAKLorawan.h:57
pbr pbr
Definition: RAKLorawan.h:4429
uint32_t McAddress
The address of a multicast group.
Definition: RAKLorawan.h:113
Definition: RAKLorawan.h:3661
RAK_LORA_WORK_MODE
Definition: RAKLorawan.h:55
Definition: RAKLorawan.h:2808
enckey enckey
Definition: RAKLorawan.h:4368
Definition: RAKLorawan.h:3057
void(* service_lora_p2p_recv_cb_type)(rui_lora_p2p_recv_t recv_data_pkg)
Definition: service_lora_p2p.h:111
appskey appskey
Definition: RAKLorawan.h:3836
psf psf
Definition: RAKLorawan.h:3870
pgslot pgslot
Definition: RAKLorawan.h:3857
Definition: RAKLorawan.h:1069
uint16_t mask
The mask of a rssi.
Definition: RAKLorawan.h:129
Definition: RAKLorawan.h:3180
Definition: RAKLorawan.h:1174
cfm cfm
Definition: RAKLorawan.h:3841
Definition: RAKLorawan.h:1878
Definition: RAKLorawan.h:2528
RAK_LORA_CLASS
Definition: RAKLorawan.h:74
Message integrity check failure.
Definition: RAKLorawan.h:100
Definition: RAKLorawan.h:3460
The node has lost MAX_FCNT_GAP or more frames.
Definition: RAKLorawan.h:98
ltime ltime
Definition: RAKLorawan.h:3863
Definition: RAKLorawan.h:2698
Definition: RAKLorawan.h:2405
pfreq pfreq
Definition: RAKLorawan.h:3869
Definition: RAKLorawan.h:4208
CN470 ~ 510.
Definition: RAKLorawan.h:30
Provide LoRa service layer for API layer to use.
dr dr
Definition: RAKLorawan.h:3848
band band
Definition: RAKLorawan.h:3866
txp txp
Definition: RAKLorawan.h:3856
Definition: RAKLorawan.h:1383