-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlorapacket.cpp
More file actions
executable file
·53 lines (38 loc) · 1.62 KB
/
lorapacket.cpp
File metadata and controls
executable file
·53 lines (38 loc) · 1.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "LoRaMacCrypto.h"
#include "lorapacket.h"
#include "Arduino.h"
uint8_t generatePacket(
uint8_t payload[],
uint8_t payloadLength,
uint32_t DevAddr,
uint8_t NwkSKey[],
uint8_t AppSKey[],
uint16_t UpLinkCounter,
uint8_t LoRaMacBuffer[]
){
uint8_t MHDR = 0x40;
uint8_t fCtrl = 0;
uint8_t pktHeaderLen = 0;
uint8_t LoRaMacBufferPktLen;
uint32_t mic = 0;
uint8_t framePort = 3;
LoRaMacBufferPktLen = 0;
LoRaMacBuffer[pktHeaderLen++] = MHDR;
LoRaMacBuffer[pktHeaderLen++] = ( DevAddr ) & 0xFF;
LoRaMacBuffer[pktHeaderLen++] = ( DevAddr >> 8 ) & 0xFF;
LoRaMacBuffer[pktHeaderLen++] = ( DevAddr >> 16 ) & 0xFF;
LoRaMacBuffer[pktHeaderLen++] = ( DevAddr >> 24 ) & 0xFF;
LoRaMacBuffer[pktHeaderLen++] = fCtrl;
LoRaMacBuffer[pktHeaderLen++] = UpLinkCounter & 0xFF;
LoRaMacBuffer[pktHeaderLen++] = ( UpLinkCounter >> 8 ) & 0xFF;
LoRaMacBuffer[pktHeaderLen++] = framePort;
LoRaMacPayloadEncrypt( payload, payloadLength, AppSKey, DevAddr, UP_LINK, UpLinkCounter, &LoRaMacBuffer[pktHeaderLen] );
LoRaMacBufferPktLen = pktHeaderLen + payloadLength;
LoRaMacComputeMic( LoRaMacBuffer, LoRaMacBufferPktLen, NwkSKey, DevAddr, UP_LINK, UpLinkCounter, &mic );
LoRaMacBuffer[LoRaMacBufferPktLen + 0] = mic & 0xFF;
LoRaMacBuffer[LoRaMacBufferPktLen + 1] = ( mic >> 8 ) & 0xFF;
LoRaMacBuffer[LoRaMacBufferPktLen + 2] = ( mic >> 16 ) & 0xFF;
LoRaMacBuffer[LoRaMacBufferPktLen + 3] = ( mic >> 24 ) & 0xFF;
LoRaMacBufferPktLen += 4; //LORAMAC_MFR_LEN
return LoRaMacBufferPktLen;
}