[LoRaWAN] Added dev files

This commit is contained in:
jgromes 2020-04-14 10:48:07 +02:00
parent 5ebf74ee2b
commit 2efd020ea1
3 changed files with 174 additions and 0 deletions

View file

@ -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:
}

View 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;
}

View 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