[LoRaWAN] Added dev files
This commit is contained in:
parent
5ebf74ee2b
commit
2efd020ea1
3 changed files with 174 additions and 0 deletions
|
@ -0,0 +1,16 @@
|
||||||
|
#define RADIOLIB_GODMODE
|
||||||
|
#include <RadioLib.h>
|
||||||
|
|
||||||
|
SX1268 lora = new Module(10, 2, 3, 9);
|
||||||
|
|
||||||
|
LoRaWANNode node(&lora, &EU868);
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(9600);
|
||||||
|
Serial.println(node._band->uplinkDefault[0].freqStart);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
// put your main code here, to run repeatedly:
|
||||||
|
|
||||||
|
}
|
96
src/protocols/LoRaWAN/LoRaWAN.cpp
Normal file
96
src/protocols/LoRaWAN/LoRaWAN.cpp
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
#include "LoRaWAN.h"
|
||||||
|
|
||||||
|
/*LoRaWANBand_t EU868 {
|
||||||
|
.numChannelSpans = 2,
|
||||||
|
.downlinkChannelMod = 0xFF,
|
||||||
|
.uplinkDefault = {
|
||||||
|
{
|
||||||
|
.numChannels = 3,
|
||||||
|
.freqStart = 868.1,
|
||||||
|
.freqStep = 0.2,
|
||||||
|
.numDataRates = 6,
|
||||||
|
.dataRates = {
|
||||||
|
LORAWAN_DATA_RATE_SF_12 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_11 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_10 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_9 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_8 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_7 | LORAWAN_DATA_RATE_BW_125_KHZ
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
.numChannels = 0,
|
||||||
|
.freqStart = 0,
|
||||||
|
.freqStep = 0,
|
||||||
|
.numDataRates = 0,
|
||||||
|
.dataRates = { }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
.uplinkAvailable = {
|
||||||
|
.numChannels = 3,
|
||||||
|
.freqStart = 868.1,
|
||||||
|
.freqStep = 0.2,
|
||||||
|
.numDataRates = 6,
|
||||||
|
.dataRates = {
|
||||||
|
LORAWAN_DATA_RATE_SF_12 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_11 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_10 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_9 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_8 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_7 | LORAWAN_DATA_RATE_BW_125_KHZ
|
||||||
|
}
|
||||||
|
},
|
||||||
|
.downlinkDefault = {
|
||||||
|
{
|
||||||
|
.numChannels = 3,
|
||||||
|
.freqStart = 868.1,
|
||||||
|
.freqStep = 0.2,
|
||||||
|
.numDataRates = 6,
|
||||||
|
.dataRates = {
|
||||||
|
LORAWAN_DATA_RATE_SF_12 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_11 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_10 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_9 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_8 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_7 | LORAWAN_DATA_RATE_BW_125_KHZ
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
.numChannels = 0,
|
||||||
|
.freqStart = 0,
|
||||||
|
.freqStep = 0,
|
||||||
|
.numDataRates = 0,
|
||||||
|
.dataRates = { }
|
||||||
|
}
|
||||||
|
},
|
||||||
|
.downlinkAvailable = {
|
||||||
|
.numChannels = 3,
|
||||||
|
.freqStart = 868.1,
|
||||||
|
.freqStep = 0.2,
|
||||||
|
.numDataRates = 6,
|
||||||
|
.dataRates = {
|
||||||
|
LORAWAN_DATA_RATE_SF_12 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_11 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_10 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_9 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_8 | LORAWAN_DATA_RATE_BW_125_KHZ,
|
||||||
|
LORAWAN_DATA_RATE_SF_7 | LORAWAN_DATA_RATE_BW_125_KHZ
|
||||||
|
}
|
||||||
|
},
|
||||||
|
.downlinkBackup = {
|
||||||
|
.numChannels = 1,
|
||||||
|
.freqStart = 869.858,
|
||||||
|
.freqStep = 0,
|
||||||
|
.numDataRates = 1,
|
||||||
|
.dataRates = {
|
||||||
|
LORAWAN_DATA_RATE_SF_12 | LORAWAN_DATA_RATE_BW_125_KHZ
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};*/
|
||||||
|
|
||||||
|
uint8_t EU868::getDownlinkChannel(uint8_t txChan) {
|
||||||
|
return(txChan);
|
||||||
|
}
|
||||||
|
|
||||||
|
LoRaWANNode::LoRaWANNode(PhysicalLayer* phy, LoRaWANBand_t* band) {
|
||||||
|
_phy = phy;
|
||||||
|
_band = band;
|
||||||
|
}
|
62
src/protocols/LoRaWAN/LoRaWAN.h
Normal file
62
src/protocols/LoRaWAN/LoRaWAN.h
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
#ifndef _RADIOLIB_LORAWAN_H
|
||||||
|
#define _RADIOLIB_LORAWAN_H
|
||||||
|
|
||||||
|
#include "../../TypeDef.h"
|
||||||
|
#include "../PhysicalLayer/PhysicalLayer.h"
|
||||||
|
|
||||||
|
//https://github.com/Lora-net/LoRaMac-node
|
||||||
|
|
||||||
|
// preamble format
|
||||||
|
#define LORAWAN_LORA_SYNC_WORD 0x34
|
||||||
|
#define LORAWAN_LORA_PREAMBLE_LEN 8
|
||||||
|
#define LORAWAN_GFSK_SYNC_WORD 0xC194C1
|
||||||
|
#define LORAWAN_GFSK_PREAMBLE_LEN 5
|
||||||
|
|
||||||
|
// data rate field encoding MSB LSB DESCRIPTION
|
||||||
|
#define LORAWAN_DATA_RATE_SF_12 0b00000000 // 7 4 LoRaWAN spreading factor: SF12
|
||||||
|
#define LORAWAN_DATA_RATE_SF_11 0b00010000 // 7 4 SF11
|
||||||
|
#define LORAWAN_DATA_RATE_SF_10 0b00100000 // 7 4 SF10
|
||||||
|
#define LORAWAN_DATA_RATE_SF_9 0b00110000 // 7 4 SF9
|
||||||
|
#define LORAWAN_DATA_RATE_SF_8 0b01000000 // 7 4 SF8
|
||||||
|
#define LORAWAN_DATA_RATE_SF_7 0b01010000 // 7 4 SF7
|
||||||
|
#define LORAWAN_DATA_RATE_FSK_50_K 0b01100000 // 7 4 FSK @ 50 kbps
|
||||||
|
#define LORAWAN_DATA_RATE_BW_500_KHZ 0b00000000 // 3 0 LoRaWAN bandwidth: 500 kHz
|
||||||
|
#define LORAWAN_DATA_RATE_BW_250_KHZ 0b00000001 // 3 0 250 kHz
|
||||||
|
#define LORAWAN_DATA_RATE_BW_125_KHZ 0b00000010 // 3 0 125 kHz
|
||||||
|
|
||||||
|
// to save space, channels are saved in "spans"
|
||||||
|
struct LoRaWANChannelSpan_t {
|
||||||
|
uint8_t numChannels; // total number of channels in the span
|
||||||
|
float freqStart; // center frequency of the first channel in span
|
||||||
|
float freqStep; // frequency step between adjacent channels
|
||||||
|
uint8_t numDataRates; // number of datarates supported by the all channels in the span
|
||||||
|
uint8_t dataRates[6]; // array of datarates supported by all channels in the span (no channel span has more than 6 allowed data rates)
|
||||||
|
};
|
||||||
|
|
||||||
|
struct LoRaWANBand_t {
|
||||||
|
uint8_t numChannelSpans; // number of channel spans in the band
|
||||||
|
LoRaWANChannelSpan_t uplinkDefault[2]; // default uplink (TX) channels (defined by LoRaWAN Regional Parameters)
|
||||||
|
LoRaWANChannelSpan_t uplinkAvailable; // available uplink (TX) channels (not defined by LoRaWAN Regional Parameters)
|
||||||
|
LoRaWANChannelSpan_t downlinkDefault[2]; // default downlink (RX1) channels (defined by LoRaWAN Regional Parameters)
|
||||||
|
LoRaWANChannelSpan_t downlinkAvailable; // available downlink (RX1) channels (not defined by LoRaWAN Regional Parameters)
|
||||||
|
LoRaWANChannelSpan_t downlinkBackup; // backup downlink (RX2) channels - just a single channel, but using the same structure for convenience
|
||||||
|
};
|
||||||
|
|
||||||
|
struct EU868: public LoRaWANBand_t {
|
||||||
|
uint8_t getDownlinkChannel(uint8_t txChan); // method that returns RX1 channel number based on TX channel
|
||||||
|
uint8_t getDownlinkDataRate(uint8_t offset); // method that returns RX1 channel number based on TX channel
|
||||||
|
};
|
||||||
|
|
||||||
|
class LoRaWANNode {
|
||||||
|
public:
|
||||||
|
|
||||||
|
LoRaWANNode(PhysicalLayer* phy, LoRaWANBand_t* band);
|
||||||
|
|
||||||
|
#ifndef RADIOLIB_GODMODE
|
||||||
|
private:
|
||||||
|
#endif
|
||||||
|
PhysicalLayer* _phy;
|
||||||
|
LoRaWANBand_t* _band;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Add table
Reference in a new issue