SX127x - Sync with LoRaLib v3.0.2

This commit is contained in:
Jan Gromeš 2018-07-18 10:51:46 +02:00
parent d29be7a252
commit 0db8813682
9 changed files with 22 additions and 54 deletions

View file

@ -6,7 +6,7 @@ SX1272::SX1272(Module* mod) : SX127x(mod) {
uint8_t SX1272::begin(float freq, float bw, uint8_t sf, uint8_t cr, uint8_t syncWord, int8_t power) { uint8_t SX1272::begin(float freq, float bw, uint8_t sf, uint8_t cr, uint8_t syncWord, int8_t power) {
// execute common part // execute common part
uint8_t state = SX127x::begin(syncWord); uint8_t state = SX127x::begin(SX1272_CHIP_VERSION, syncWord);
if(state != ERR_NONE) { if(state != ERR_NONE) {
return(state); return(state);
} }
@ -52,12 +52,8 @@ uint8_t SX1272::setFrequency(float freq) {
return(ERR_INVALID_FREQUENCY); return(ERR_INVALID_FREQUENCY);
} }
// set frequency and if successful, save the new setting // set frequency
uint8_t state = SX1272::setFrequencyRaw(freq); return(SX1272::setFrequencyRaw(freq));
if(state == ERR_NONE) {
SX127x::_freq = freq;
}
return(state);
} }
uint8_t SX1272::setBandwidth(float bw) { uint8_t SX1272::setBandwidth(float bw) {
@ -179,11 +175,6 @@ uint8_t SX1272::setOutputPower(int8_t power) {
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) {
_power = power;
}
return(state); return(state);
} }

View file

@ -43,6 +43,9 @@
#define SX1272_AGC_AUTO_OFF 0b00000000 // 2 2 LNA gain set by REG_LNA #define SX1272_AGC_AUTO_OFF 0b00000000 // 2 2 LNA gain set by REG_LNA
#define SX1272_AGC_AUTO_ON 0b00000100 // 2 2 LNA gain set by internal AGC loop #define SX1272_AGC_AUTO_ON 0b00000100 // 2 2 LNA gain set by internal AGC loop
//SX127X_REG_VERSION
#define SX1272_CHIP_VERSION 0x22
class SX1272: public SX127x { class SX1272: public SX127x {
public: public:
// constructor // constructor

View file

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

View file

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

View file

@ -6,7 +6,7 @@ SX1278::SX1278(Module* mod) : SX127x(mod) {
uint8_t SX1278::begin(float freq, float bw, uint8_t sf, uint8_t cr, uint8_t syncWord, int8_t power) { uint8_t SX1278::begin(float freq, float bw, uint8_t sf, uint8_t cr, uint8_t syncWord, int8_t power) {
// execute common part // execute common part
uint8_t state = SX127x::begin(syncWord); uint8_t state = SX127x::begin(SX1278_CHIP_VERSION, syncWord);
if(state != ERR_NONE) { if(state != ERR_NONE) {
return(state); return(state);
} }
@ -52,12 +52,8 @@ uint8_t SX1278::setFrequency(float freq) {
return(ERR_INVALID_FREQUENCY); return(ERR_INVALID_FREQUENCY);
} }
// set frequency and if successful, save the new setting // set frequency
uint8_t state = SX1278::setFrequencyRaw(freq); return(SX1278::setFrequencyRaw(freq));
if(state == ERR_NONE) {
SX127x::_freq = freq;
}
return(state);
} }
uint8_t SX1278::setBandwidth(float bw) { uint8_t SX1278::setBandwidth(float bw) {
@ -190,11 +186,6 @@ uint8_t SX1278::setOutputPower(int8_t power) {
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) {
_power = power;
}
return(state); return(state);
} }

View file

@ -61,6 +61,9 @@
#define SX1278_AGC_AUTO_OFF 0b00000000 // 2 2 LNA gain set by REG_LNA #define SX1278_AGC_AUTO_OFF 0b00000000 // 2 2 LNA gain set by REG_LNA
#define SX1278_AGC_AUTO_ON 0b00000100 // 2 2 LNA gain set by internal AGC loop #define SX1278_AGC_AUTO_ON 0b00000100 // 2 2 LNA gain set by internal AGC loop
//SX127X_REG_VERSION
#define SX1278_CHIP_VERSION 0x12
class SX1278: public SX127x { class SX1278: public SX127x {
public: public:
// constructor // constructor

View file

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

View file

@ -4,7 +4,7 @@ SX127x::SX127x(Module* mod) {
_mod = mod; _mod = mod;
} }
uint8_t SX127x::begin(uint8_t syncWord) { uint8_t SX127x::begin(uint8_t chipVersion, uint8_t syncWord) {
// set module properties // set module properties
_mod->init(USE_SPI, INT_BOTH); _mod->init(USE_SPI, INT_BOTH);
@ -13,7 +13,7 @@ uint8_t SX127x::begin(uint8_t syncWord) {
bool flagFound = false; bool flagFound = false;
while((i < 10) && !flagFound) { while((i < 10) && !flagFound) {
uint8_t version = _mod->SPIreadRegister(SX127X_REG_VERSION); uint8_t version = _mod->SPIreadRegister(SX127X_REG_VERSION);
if(version == 0x12) { if(version == chipVersion) {
flagFound = true; flagFound = true;
} else { } else {
#ifdef KITELIB_DEBUG #ifdef KITELIB_DEBUG
@ -229,12 +229,7 @@ uint8_t SX127x::setSyncWord(uint8_t syncWord) {
setMode(SX127X_STANDBY); setMode(SX127X_STANDBY);
// write register // write register
uint8_t state = _mod->SPIsetRegValue(SX127X_REG_SYNC_WORD, syncWord); return(_mod->SPIsetRegValue(SX127X_REG_SYNC_WORD, syncWord));
if(state == ERR_NONE) {
_syncWord = syncWord;
}
return(state);
} }
uint8_t SX127x::setFrequencyRaw(float newFreq) { uint8_t SX127x::setFrequencyRaw(float newFreq) {

View file

@ -173,7 +173,7 @@ class SX127x {
float lastPacketSNR; float lastPacketSNR;
// basic methods // basic methods
uint8_t begin(uint8_t syncWord); uint8_t begin(uint8_t chipVersion, uint8_t syncWord);
uint8_t transmit(uint8_t* data, size_t len); uint8_t transmit(uint8_t* data, size_t len);
uint8_t transmit(const char* str); uint8_t transmit(const char* str);
uint8_t transmit(String& str); uint8_t transmit(String& str);
@ -189,12 +189,9 @@ class SX127x {
protected: protected:
Module* _mod; Module* _mod;
float _freq;
float _bw; float _bw;
uint8_t _sf; uint8_t _sf;
uint8_t _cr; uint8_t _cr;
uint8_t _syncWord;
int8_t _power;
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);