SX127x - Updated comments
This commit is contained in:
parent
2e85c23cbd
commit
10f32c8b5c
16 changed files with 62 additions and 5 deletions
|
@ -25,6 +25,13 @@ void setup() {
|
||||||
|
|
||||||
// initialize SX1278 with default settings
|
// initialize SX1278 with default settings
|
||||||
Serial.print(F("[SX1278] Initializing ... "));
|
Serial.print(F("[SX1278] Initializing ... "));
|
||||||
|
// carrier frequency: 434.0 MHz
|
||||||
|
// bandwidth: 125.0 kHz
|
||||||
|
// spreading factor: 9
|
||||||
|
// coding rate: 7
|
||||||
|
// sync word: 0x12
|
||||||
|
// output power: 17 dBm
|
||||||
|
// node address in EEPROM starts at: 0
|
||||||
byte state = lora.begin();
|
byte state = lora.begin();
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
Serial.println(F("success!"));
|
Serial.println(F("success!"));
|
||||||
|
|
|
@ -26,6 +26,13 @@ void setup() {
|
||||||
|
|
||||||
// initialize SX1278 with default settings
|
// initialize SX1278 with default settings
|
||||||
Serial.print(F("[SX1278] Initializing ... "));
|
Serial.print(F("[SX1278] Initializing ... "));
|
||||||
|
// carrier frequency: 434.0 MHz
|
||||||
|
// bandwidth: 125.0 kHz
|
||||||
|
// spreading factor: 9
|
||||||
|
// coding rate: 7
|
||||||
|
// sync word: 0x12
|
||||||
|
// output power: 17 dBm
|
||||||
|
// node address in EEPROM starts at: 0
|
||||||
byte state = lora.begin();
|
byte state = lora.begin();
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
Serial.println(F("success!"));
|
Serial.println(F("success!"));
|
||||||
|
|
|
@ -52,6 +52,7 @@ uint8_t SX1272::setFrequency(float freq) {
|
||||||
return(ERR_INVALID_FREQUENCY);
|
return(ERR_INVALID_FREQUENCY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set frequency and if successful, save the new setting
|
||||||
uint8_t state = SX1272::setFrequencyRaw(freq);
|
uint8_t state = SX1272::setFrequencyRaw(freq);
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
SX127x::_freq = freq;
|
SX127x::_freq = freq;
|
||||||
|
@ -73,6 +74,7 @@ uint8_t SX1272::setBandwidth(float bw) {
|
||||||
return(ERR_INVALID_BANDWIDTH);
|
return(ERR_INVALID_BANDWIDTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set bandwidth and if successful, save the new setting
|
||||||
uint8_t state = SX1272::setBandwidthRaw(newBandwidth);
|
uint8_t state = SX1272::setBandwidthRaw(newBandwidth);
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
SX127x::_bw = bw;
|
SX127x::_bw = bw;
|
||||||
|
@ -111,6 +113,7 @@ uint8_t SX1272::setSpreadingFactor(uint8_t sf) {
|
||||||
return(ERR_INVALID_SPREADING_FACTOR);
|
return(ERR_INVALID_SPREADING_FACTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set spreading factor and if successful, save the new setting
|
||||||
uint8_t state = SX1272::setSpreadingFactorRaw(newSpreadingFactor);
|
uint8_t state = SX1272::setSpreadingFactorRaw(newSpreadingFactor);
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
SX127x::_sf = sf;
|
SX127x::_sf = sf;
|
||||||
|
@ -140,6 +143,7 @@ uint8_t SX1272::setCodingRate(uint8_t cr) {
|
||||||
return(ERR_INVALID_CODING_RATE);
|
return(ERR_INVALID_CODING_RATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set coding rate and if successful, save the new setting
|
||||||
uint8_t state = SX1272::setCodingRateRaw(newCodingRate);
|
uint8_t state = SX1272::setCodingRateRaw(newCodingRate);
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
SX127x::_cr = cr;
|
SX127x::_cr = cr;
|
||||||
|
@ -149,10 +153,12 @@ uint8_t SX1272::setCodingRate(uint8_t cr) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t SX1272::setOutputPower(int8_t power) {
|
uint8_t SX1272::setOutputPower(int8_t power) {
|
||||||
|
// check allowed power range
|
||||||
if((power < -1) || (power > 20)) {
|
if((power < -1) || (power > 20)) {
|
||||||
return(ERR_INVALID_OUTPUT_POWER);
|
return(ERR_INVALID_OUTPUT_POWER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set mode to standby
|
||||||
SX127x::standby();
|
SX127x::standby();
|
||||||
|
|
||||||
uint8_t state;
|
uint8_t state;
|
||||||
|
@ -172,7 +178,8 @@ uint8_t SX1272::setOutputPower(int8_t power) {
|
||||||
state |= _mod->SPIsetRegValue(SX127X_REG_PA_CONFIG, power - 5, 3, 0);
|
state |= _mod->SPIsetRegValue(SX127X_REG_PA_CONFIG, power - 5, 3, 0);
|
||||||
state |= _mod->SPIsetRegValue(SX1272_REG_PA_DAC, SX127X_PA_BOOST_ON, 2, 0);
|
state |= _mod->SPIsetRegValue(SX1272_REG_PA_DAC, SX127X_PA_BOOST_ON, 2, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// configuration successful, save new setting
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
_power = power;
|
_power = power;
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,10 +45,13 @@
|
||||||
|
|
||||||
class SX1272: public SX127x {
|
class SX1272: public SX127x {
|
||||||
public:
|
public:
|
||||||
|
// constructor
|
||||||
SX1272(Module* mod);
|
SX1272(Module* mod);
|
||||||
|
|
||||||
|
// basic methods
|
||||||
uint8_t begin(float freq = 915.0, float bw = 125.0, uint8_t sf = 9, uint8_t cr = 7, uint8_t syncWord = SX127X_SYNC_WORD, int8_t power = 17, uint16_t addrEeprom = 0);
|
uint8_t begin(float freq = 915.0, float bw = 125.0, uint8_t sf = 9, uint8_t cr = 7, uint8_t syncWord = SX127X_SYNC_WORD, int8_t power = 17, uint16_t addrEeprom = 0);
|
||||||
|
|
||||||
|
// configuration methods
|
||||||
uint8_t setFrequency(float freq);
|
uint8_t setFrequency(float freq);
|
||||||
uint8_t setBandwidth(float bw);
|
uint8_t setBandwidth(float bw);
|
||||||
uint8_t setSpreadingFactor(uint8_t sf);
|
uint8_t setSpreadingFactor(uint8_t sf);
|
||||||
|
|
|
@ -25,6 +25,7 @@ uint8_t SX1273::setSpreadingFactor(uint8_t sf) {
|
||||||
return(ERR_INVALID_SPREADING_FACTOR);
|
return(ERR_INVALID_SPREADING_FACTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set spreading factor and if successful, save the new setting
|
||||||
uint8_t state = setSpreadingFactorRaw(newSpreadingFactor);
|
uint8_t state = setSpreadingFactorRaw(newSpreadingFactor);
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
SX127x::_sf = sf;
|
SX127x::_sf = sf;
|
||||||
|
|
|
@ -6,8 +6,10 @@
|
||||||
|
|
||||||
class SX1273: public SX1272 {
|
class SX1273: public SX1272 {
|
||||||
public:
|
public:
|
||||||
|
// constructor
|
||||||
SX1273(Module* mod);
|
SX1273(Module* mod);
|
||||||
|
|
||||||
|
// configuration methods
|
||||||
uint8_t setSpreadingFactor(uint8_t sf);
|
uint8_t setSpreadingFactor(uint8_t sf);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ uint8_t SX1276::setFrequency(float freq) {
|
||||||
return(ERR_INVALID_FREQUENCY);
|
return(ERR_INVALID_FREQUENCY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set frequency and if successful, save the new setting
|
||||||
uint8_t state = SX1278::setFrequencyRaw(freq);
|
uint8_t state = SX1278::setFrequencyRaw(freq);
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
SX127x::_freq = freq;
|
SX127x::_freq = freq;
|
||||||
|
|
|
@ -6,8 +6,10 @@
|
||||||
|
|
||||||
class SX1276: public SX1278 {
|
class SX1276: public SX1278 {
|
||||||
public:
|
public:
|
||||||
|
// constructor
|
||||||
SX1276(Module* mod);
|
SX1276(Module* mod);
|
||||||
|
|
||||||
|
// configuration methods
|
||||||
uint8_t setFrequency(float freq);
|
uint8_t setFrequency(float freq);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ uint8_t SX1277::setFrequency(float freq) {
|
||||||
return(ERR_INVALID_FREQUENCY);
|
return(ERR_INVALID_FREQUENCY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set frequency and if successful, save the new setting
|
||||||
uint8_t state = SX1278::setFrequencyRaw(freq);
|
uint8_t state = SX1278::setFrequencyRaw(freq);
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
SX127x::_freq = freq;
|
SX127x::_freq = freq;
|
||||||
|
@ -38,6 +39,7 @@ uint8_t SX1277::setSpreadingFactor(uint8_t sf) {
|
||||||
return(ERR_INVALID_SPREADING_FACTOR);
|
return(ERR_INVALID_SPREADING_FACTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set spreading factor and if successful, save the new setting
|
||||||
uint8_t state = SX1278::setSpreadingFactorRaw(newSpreadingFactor);
|
uint8_t state = SX1278::setSpreadingFactorRaw(newSpreadingFactor);
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
SX127x::_sf = sf;
|
SX127x::_sf = sf;
|
||||||
|
|
|
@ -6,8 +6,10 @@
|
||||||
|
|
||||||
class SX1277: public SX1278 {
|
class SX1277: public SX1278 {
|
||||||
public:
|
public:
|
||||||
|
// constructor
|
||||||
SX1277(Module* mod);
|
SX1277(Module* mod);
|
||||||
|
|
||||||
|
// configuration methods
|
||||||
uint8_t setFrequency(float freq);
|
uint8_t setFrequency(float freq);
|
||||||
uint8_t setSpreadingFactor(uint8_t sf);
|
uint8_t setSpreadingFactor(uint8_t sf);
|
||||||
};
|
};
|
||||||
|
|
|
@ -52,6 +52,7 @@ uint8_t SX1278::setFrequency(float freq) {
|
||||||
return(ERR_INVALID_FREQUENCY);
|
return(ERR_INVALID_FREQUENCY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set frequency and if successful, save the new setting
|
||||||
uint8_t state = SX1278::setFrequencyRaw(freq);
|
uint8_t state = SX1278::setFrequencyRaw(freq);
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
SX127x::_freq = freq;
|
SX127x::_freq = freq;
|
||||||
|
@ -85,6 +86,7 @@ uint8_t SX1278::setBandwidth(float bw) {
|
||||||
return(ERR_INVALID_BANDWIDTH);
|
return(ERR_INVALID_BANDWIDTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set bandwidth and if successful, save the new setting
|
||||||
uint8_t state = SX1278::setBandwidthRaw(newBandwidth);
|
uint8_t state = SX1278::setBandwidthRaw(newBandwidth);
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
SX127x::_bw = bw;
|
SX127x::_bw = bw;
|
||||||
|
@ -123,6 +125,7 @@ uint8_t SX1278::setSpreadingFactor(uint8_t sf) {
|
||||||
return(ERR_INVALID_SPREADING_FACTOR);
|
return(ERR_INVALID_SPREADING_FACTOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set spreading factor and if successful, save the new setting
|
||||||
uint8_t state = SX1278::setSpreadingFactorRaw(newSpreadingFactor);
|
uint8_t state = SX1278::setSpreadingFactorRaw(newSpreadingFactor);
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
SX127x::_sf = sf;
|
SX127x::_sf = sf;
|
||||||
|
@ -152,6 +155,7 @@ uint8_t SX1278::setCodingRate(uint8_t cr) {
|
||||||
return(ERR_INVALID_CODING_RATE);
|
return(ERR_INVALID_CODING_RATE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set coding rate and if successful, save the new setting
|
||||||
uint8_t state = SX1278::setCodingRateRaw(newCodingRate);
|
uint8_t state = SX1278::setCodingRateRaw(newCodingRate);
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
SX127x::_cr = cr;
|
SX127x::_cr = cr;
|
||||||
|
@ -165,6 +169,7 @@ uint8_t SX1278::setOutputPower(int8_t power) {
|
||||||
return(ERR_INVALID_OUTPUT_POWER);
|
return(ERR_INVALID_OUTPUT_POWER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set mode to standby
|
||||||
SX127x::standby();
|
SX127x::standby();
|
||||||
|
|
||||||
uint8_t state;
|
uint8_t state;
|
||||||
|
@ -184,7 +189,8 @@ uint8_t SX1278::setOutputPower(int8_t power) {
|
||||||
state |= _mod->SPIsetRegValue(SX127X_REG_PA_CONFIG, SX1278_MAX_POWER | (power + 2), 6, 0);
|
state |= _mod->SPIsetRegValue(SX127X_REG_PA_CONFIG, SX1278_MAX_POWER | (power + 2), 6, 0);
|
||||||
state |= _mod->SPIsetRegValue(SX1278_REG_PA_DAC, SX127X_PA_BOOST_ON, 2, 0);
|
state |= _mod->SPIsetRegValue(SX1278_REG_PA_DAC, SX127X_PA_BOOST_ON, 2, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// configuration successful, save new setting
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
_power = power;
|
_power = power;
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,10 +63,13 @@
|
||||||
|
|
||||||
class SX1278: public SX127x {
|
class SX1278: public SX127x {
|
||||||
public:
|
public:
|
||||||
|
// constructor
|
||||||
SX1278(Module* mod);
|
SX1278(Module* mod);
|
||||||
|
|
||||||
|
// basic methods
|
||||||
uint8_t begin(float freq = 434.0, float bw = 125.0, uint8_t sf = 9, uint8_t cr = 7, uint8_t syncWord = SX127X_SYNC_WORD, int8_t power = 17, uint16_t addrEeprom = 0);
|
uint8_t begin(float freq = 434.0, float bw = 125.0, uint8_t sf = 9, uint8_t cr = 7, uint8_t syncWord = SX127X_SYNC_WORD, int8_t power = 17, uint16_t addrEeprom = 0);
|
||||||
|
|
||||||
|
// configuration methods
|
||||||
uint8_t setFrequency(float freq);
|
uint8_t setFrequency(float freq);
|
||||||
uint8_t setBandwidth(float bw);
|
uint8_t setBandwidth(float bw);
|
||||||
uint8_t setSpreadingFactor(uint8_t sf);
|
uint8_t setSpreadingFactor(uint8_t sf);
|
||||||
|
|
|
@ -10,6 +10,7 @@ uint8_t SX1279::setFrequency(float freq) {
|
||||||
return(ERR_INVALID_FREQUENCY);
|
return(ERR_INVALID_FREQUENCY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set frequency and if successful, save the new setting
|
||||||
uint8_t state = SX1278::setFrequencyRaw(freq);
|
uint8_t state = SX1278::setFrequencyRaw(freq);
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
SX127x::_freq = freq;
|
SX127x::_freq = freq;
|
||||||
|
|
|
@ -6,8 +6,10 @@
|
||||||
|
|
||||||
class SX1279: public SX1278 {
|
class SX1279: public SX1278 {
|
||||||
public:
|
public:
|
||||||
|
// constructor
|
||||||
SX1279(Module* mod);
|
SX1279(Module* mod);
|
||||||
|
|
||||||
|
// configuration methods
|
||||||
uint8_t setFrequency(float freq);
|
uint8_t setFrequency(float freq);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -205,13 +205,17 @@ uint8_t SX127x::receive(Packet& pack) {
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t SX127x::scanChannel() {
|
uint8_t SX127x::scanChannel() {
|
||||||
|
// set mode to standby
|
||||||
setMode(SX127X_STANDBY);
|
setMode(SX127X_STANDBY);
|
||||||
|
|
||||||
|
// set DIO pin mapping
|
||||||
_mod->SPIsetRegValue(SX127X_REG_DIO_MAPPING_1, SX127X_DIO0_CAD_DONE | SX127X_DIO1_CAD_DETECTED, 7, 4);
|
_mod->SPIsetRegValue(SX127X_REG_DIO_MAPPING_1, SX127X_DIO0_CAD_DONE | SX127X_DIO1_CAD_DETECTED, 7, 4);
|
||||||
clearIRQFlags();
|
clearIRQFlags();
|
||||||
|
|
||||||
|
// set mode to CAD
|
||||||
setMode(SX127X_CAD);
|
setMode(SX127X_CAD);
|
||||||
|
|
||||||
|
// wait for channel activity detected or timeout
|
||||||
while(!_mod->getInt0State()) {
|
while(!_mod->getInt0State()) {
|
||||||
if(_mod->getInt1State()) {
|
if(_mod->getInt1State()) {
|
||||||
clearIRQFlags();
|
clearIRQFlags();
|
||||||
|
@ -219,21 +223,27 @@ uint8_t SX127x::scanChannel() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// clear interrupt flags
|
||||||
clearIRQFlags();
|
clearIRQFlags();
|
||||||
|
|
||||||
return(CHANNEL_FREE);
|
return(CHANNEL_FREE);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t SX127x::sleep() {
|
uint8_t SX127x::sleep() {
|
||||||
|
// set mode to sleep
|
||||||
return(setMode(SX127X_SLEEP));
|
return(setMode(SX127X_SLEEP));
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t SX127x::standby() {
|
uint8_t SX127x::standby() {
|
||||||
|
// set mode to standby
|
||||||
return(setMode(SX127X_STANDBY));
|
return(setMode(SX127X_STANDBY));
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t SX127x::setSyncWord(uint8_t syncWord) {
|
uint8_t SX127x::setSyncWord(uint8_t syncWord) {
|
||||||
|
// set mode to standby
|
||||||
setMode(SX127X_STANDBY);
|
setMode(SX127X_STANDBY);
|
||||||
|
|
||||||
|
// write register
|
||||||
uint8_t state = _mod->SPIsetRegValue(SX127X_REG_SYNC_WORD, syncWord);
|
uint8_t state = _mod->SPIsetRegValue(SX127X_REG_SYNC_WORD, syncWord);
|
||||||
if(state == ERR_NONE) {
|
if(state == ERR_NONE) {
|
||||||
_syncWord = syncWord;
|
_syncWord = syncWord;
|
||||||
|
|
|
@ -167,20 +167,23 @@
|
||||||
|
|
||||||
class SX127x {
|
class SX127x {
|
||||||
public:
|
public:
|
||||||
|
// constructor
|
||||||
SX127x(Module* mod);
|
SX127x(Module* mod);
|
||||||
|
|
||||||
|
// public member variables
|
||||||
float dataRate;
|
float dataRate;
|
||||||
int8_t lastPacketRSSI;
|
int8_t lastPacketRSSI;
|
||||||
float lastPacketSNR;
|
float lastPacketSNR;
|
||||||
|
|
||||||
|
// basic methods
|
||||||
uint8_t begin(uint8_t syncWord, uint16_t addrEeprom);
|
uint8_t begin(uint8_t syncWord, uint16_t addrEeprom);
|
||||||
uint8_t transmit(Packet& pack);
|
uint8_t transmit(Packet& pack);
|
||||||
uint8_t receive(Packet& pack);
|
uint8_t receive(Packet& pack);
|
||||||
uint8_t scanChannel();
|
uint8_t scanChannel();
|
||||||
|
|
||||||
uint8_t sleep();
|
uint8_t sleep();
|
||||||
uint8_t standby();
|
uint8_t standby();
|
||||||
|
|
||||||
|
// configuration methods
|
||||||
uint8_t setSyncWord(uint8_t syncWord);
|
uint8_t setSyncWord(uint8_t syncWord);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -195,9 +198,7 @@ class SX127x {
|
||||||
|
|
||||||
uint8_t tx(char* data, uint8_t length);
|
uint8_t tx(char* data, uint8_t length);
|
||||||
uint8_t rxSingle(char* data, uint8_t* length);
|
uint8_t rxSingle(char* data, uint8_t* length);
|
||||||
|
|
||||||
uint8_t setFrequencyRaw(float newFreq);
|
uint8_t setFrequencyRaw(float newFreq);
|
||||||
|
|
||||||
uint8_t config();
|
uint8_t config();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Add table
Reference in a new issue