SX127x - Updated comments

This commit is contained in:
Jan Gromeš 2018-07-11 17:56:26 +02:00
parent 2e85c23cbd
commit 10f32c8b5c
16 changed files with 62 additions and 5 deletions

View file

@ -25,6 +25,13 @@ void setup() {
// initialize SX1278 with default settings
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();
if(state == ERR_NONE) {
Serial.println(F("success!"));

View file

@ -26,6 +26,13 @@ void setup() {
// initialize SX1278 with default settings
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();
if(state == ERR_NONE) {
Serial.println(F("success!"));

View file

@ -52,6 +52,7 @@ uint8_t SX1272::setFrequency(float freq) {
return(ERR_INVALID_FREQUENCY);
}
// set frequency and if successful, save the new setting
uint8_t state = SX1272::setFrequencyRaw(freq);
if(state == ERR_NONE) {
SX127x::_freq = freq;
@ -73,6 +74,7 @@ uint8_t SX1272::setBandwidth(float bw) {
return(ERR_INVALID_BANDWIDTH);
}
// set bandwidth and if successful, save the new setting
uint8_t state = SX1272::setBandwidthRaw(newBandwidth);
if(state == ERR_NONE) {
SX127x::_bw = bw;
@ -111,6 +113,7 @@ uint8_t SX1272::setSpreadingFactor(uint8_t sf) {
return(ERR_INVALID_SPREADING_FACTOR);
}
// set spreading factor and if successful, save the new setting
uint8_t state = SX1272::setSpreadingFactorRaw(newSpreadingFactor);
if(state == ERR_NONE) {
SX127x::_sf = sf;
@ -140,6 +143,7 @@ uint8_t SX1272::setCodingRate(uint8_t cr) {
return(ERR_INVALID_CODING_RATE);
}
// set coding rate and if successful, save the new setting
uint8_t state = SX1272::setCodingRateRaw(newCodingRate);
if(state == ERR_NONE) {
SX127x::_cr = cr;
@ -149,10 +153,12 @@ uint8_t SX1272::setCodingRate(uint8_t cr) {
}
uint8_t SX1272::setOutputPower(int8_t power) {
// check allowed power range
if((power < -1) || (power > 20)) {
return(ERR_INVALID_OUTPUT_POWER);
}
// set mode to standby
SX127x::standby();
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(SX1272_REG_PA_DAC, SX127X_PA_BOOST_ON, 2, 0);
}
// configuration successful, save new setting
if(state == ERR_NONE) {
_power = power;
}

View file

@ -45,10 +45,13 @@
class SX1272: public SX127x {
public:
// constructor
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);
// configuration methods
uint8_t setFrequency(float freq);
uint8_t setBandwidth(float bw);
uint8_t setSpreadingFactor(uint8_t sf);

View file

@ -25,6 +25,7 @@ uint8_t SX1273::setSpreadingFactor(uint8_t sf) {
return(ERR_INVALID_SPREADING_FACTOR);
}
// set spreading factor and if successful, save the new setting
uint8_t state = setSpreadingFactorRaw(newSpreadingFactor);
if(state == ERR_NONE) {
SX127x::_sf = sf;

View file

@ -6,8 +6,10 @@
class SX1273: public SX1272 {
public:
// constructor
SX1273(Module* mod);
// configuration methods
uint8_t setSpreadingFactor(uint8_t sf);
};

View file

@ -10,6 +10,7 @@ uint8_t SX1276::setFrequency(float freq) {
return(ERR_INVALID_FREQUENCY);
}
// set frequency and if successful, save the new setting
uint8_t state = SX1278::setFrequencyRaw(freq);
if(state == ERR_NONE) {
SX127x::_freq = freq;

View file

@ -6,8 +6,10 @@
class SX1276: public SX1278 {
public:
// constructor
SX1276(Module* mod);
// configuration methods
uint8_t setFrequency(float freq);
};

View file

@ -10,6 +10,7 @@ uint8_t SX1277::setFrequency(float freq) {
return(ERR_INVALID_FREQUENCY);
}
// set frequency and if successful, save the new setting
uint8_t state = SX1278::setFrequencyRaw(freq);
if(state == ERR_NONE) {
SX127x::_freq = freq;
@ -38,6 +39,7 @@ uint8_t SX1277::setSpreadingFactor(uint8_t sf) {
return(ERR_INVALID_SPREADING_FACTOR);
}
// set spreading factor and if successful, save the new setting
uint8_t state = SX1278::setSpreadingFactorRaw(newSpreadingFactor);
if(state == ERR_NONE) {
SX127x::_sf = sf;

View file

@ -6,8 +6,10 @@
class SX1277: public SX1278 {
public:
// constructor
SX1277(Module* mod);
// configuration methods
uint8_t setFrequency(float freq);
uint8_t setSpreadingFactor(uint8_t sf);
};

View file

@ -52,6 +52,7 @@ uint8_t SX1278::setFrequency(float freq) {
return(ERR_INVALID_FREQUENCY);
}
// set frequency and if successful, save the new setting
uint8_t state = SX1278::setFrequencyRaw(freq);
if(state == ERR_NONE) {
SX127x::_freq = freq;
@ -85,6 +86,7 @@ uint8_t SX1278::setBandwidth(float bw) {
return(ERR_INVALID_BANDWIDTH);
}
// set bandwidth and if successful, save the new setting
uint8_t state = SX1278::setBandwidthRaw(newBandwidth);
if(state == ERR_NONE) {
SX127x::_bw = bw;
@ -123,6 +125,7 @@ uint8_t SX1278::setSpreadingFactor(uint8_t sf) {
return(ERR_INVALID_SPREADING_FACTOR);
}
// set spreading factor and if successful, save the new setting
uint8_t state = SX1278::setSpreadingFactorRaw(newSpreadingFactor);
if(state == ERR_NONE) {
SX127x::_sf = sf;
@ -152,6 +155,7 @@ uint8_t SX1278::setCodingRate(uint8_t cr) {
return(ERR_INVALID_CODING_RATE);
}
// set coding rate and if successful, save the new setting
uint8_t state = SX1278::setCodingRateRaw(newCodingRate);
if(state == ERR_NONE) {
SX127x::_cr = cr;
@ -165,6 +169,7 @@ uint8_t SX1278::setOutputPower(int8_t power) {
return(ERR_INVALID_OUTPUT_POWER);
}
// set mode to standby
SX127x::standby();
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(SX1278_REG_PA_DAC, SX127X_PA_BOOST_ON, 2, 0);
}
// configuration successful, save new setting
if(state == ERR_NONE) {
_power = power;
}

View file

@ -63,10 +63,13 @@
class SX1278: public SX127x {
public:
// constructor
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);
// configuration methods
uint8_t setFrequency(float freq);
uint8_t setBandwidth(float bw);
uint8_t setSpreadingFactor(uint8_t sf);

View file

@ -10,6 +10,7 @@ uint8_t SX1279::setFrequency(float freq) {
return(ERR_INVALID_FREQUENCY);
}
// set frequency and if successful, save the new setting
uint8_t state = SX1278::setFrequencyRaw(freq);
if(state == ERR_NONE) {
SX127x::_freq = freq;

View file

@ -6,8 +6,10 @@
class SX1279: public SX1278 {
public:
// constructor
SX1279(Module* mod);
// configuration methods
uint8_t setFrequency(float freq);
};

View file

@ -205,13 +205,17 @@ uint8_t SX127x::receive(Packet& pack) {
}
uint8_t SX127x::scanChannel() {
// set mode to 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);
clearIRQFlags();
// set mode to CAD
setMode(SX127X_CAD);
// wait for channel activity detected or timeout
while(!_mod->getInt0State()) {
if(_mod->getInt1State()) {
clearIRQFlags();
@ -219,21 +223,27 @@ uint8_t SX127x::scanChannel() {
}
}
// clear interrupt flags
clearIRQFlags();
return(CHANNEL_FREE);
}
uint8_t SX127x::sleep() {
// set mode to sleep
return(setMode(SX127X_SLEEP));
}
uint8_t SX127x::standby() {
// set mode to standby
return(setMode(SX127X_STANDBY));
}
uint8_t SX127x::setSyncWord(uint8_t syncWord) {
// set mode to standby
setMode(SX127X_STANDBY);
// write register
uint8_t state = _mod->SPIsetRegValue(SX127X_REG_SYNC_WORD, syncWord);
if(state == ERR_NONE) {
_syncWord = syncWord;

View file

@ -167,20 +167,23 @@
class SX127x {
public:
// constructor
SX127x(Module* mod);
// public member variables
float dataRate;
int8_t lastPacketRSSI;
float lastPacketSNR;
// basic methods
uint8_t begin(uint8_t syncWord, uint16_t addrEeprom);
uint8_t transmit(Packet& pack);
uint8_t receive(Packet& pack);
uint8_t scanChannel();
uint8_t sleep();
uint8_t standby();
// configuration methods
uint8_t setSyncWord(uint8_t syncWord);
protected:
@ -195,9 +198,7 @@ class SX127x {
uint8_t tx(char* data, uint8_t length);
uint8_t rxSingle(char* data, uint8_t* length);
uint8_t setFrequencyRaw(float newFreq);
uint8_t config();
private: