[SX127x] Sync with LoRaLib 8.0.6

This commit is contained in:
jgromes 2019-06-02 16:22:57 +02:00
parent 8cc9b175ad
commit ac30ca652f
5 changed files with 171 additions and 166 deletions

View file

@ -122,6 +122,17 @@ int16_t SX1272::setBandwidth(float bw) {
int16_t state = SX1272::setBandwidthRaw(newBandwidth);
if(state == ERR_NONE) {
SX127x::_bw = bw;
// calculate symbol length and set low data rate optimization, if needed
float symbolLength = (float)(uint32_t(1) << SX127x::_sf) / (float)SX127x::_bw;
DEBUG_PRINT("Symbol length: ");
DEBUG_PRINT(symbolLength);
DEBUG_PRINTLN(" ms");
if(symbolLength >= 16.0) {
state = _mod->SPIsetRegValue(SX127X_REG_MODEM_CONFIG_1, SX1272_LOW_DATA_RATE_OPT_ON, 0, 0);
} else {
state = _mod->SPIsetRegValue(SX127X_REG_MODEM_CONFIG_1, SX1272_LOW_DATA_RATE_OPT_OFF, 0, 0);
}
}
return(state);
}
@ -165,6 +176,17 @@ int16_t SX1272::setSpreadingFactor(uint8_t sf) {
int16_t state = SX1272::setSpreadingFactorRaw(newSpreadingFactor);
if(state == ERR_NONE) {
SX127x::_sf = sf;
// calculate symbol length and set low data rate optimization, if needed
float symbolLength = (float)(uint32_t(1) << SX127x::_sf) / (float)SX127x::_bw;
DEBUG_PRINT("Symbol length: ");
DEBUG_PRINT(symbolLength);
DEBUG_PRINTLN(" ms");
if(symbolLength >= 16.0) {
state = _mod->SPIsetRegValue(SX127X_REG_MODEM_CONFIG_1, SX1272_LOW_DATA_RATE_OPT_ON, 0, 0);
} else {
state = _mod->SPIsetRegValue(SX127X_REG_MODEM_CONFIG_1, SX1272_LOW_DATA_RATE_OPT_OFF, 0, 0);
}
}
return(state);
}
@ -392,24 +414,6 @@ int16_t SX1272::setCodingRateRaw(uint8_t newCodingRate) {
return(state);
}
int16_t SX1272::config() {
// configure common registers
int16_t state = SX127x::config();
if(state != ERR_NONE) {
return(state);
}
// calculate symbol length and set low data rate optimization, if needed
uint16_t base = 1;
float symbolLength = (float)(base << _sf) / (float)_bw;
if(symbolLength >= 16.0) {
state = _mod->SPIsetRegValue(SX127X_REG_MODEM_CONFIG_1, SX1272_LOW_DATA_RATE_OPT_ON, 0, 0);
} else {
state = _mod->SPIsetRegValue(SX127X_REG_MODEM_CONFIG_1, SX1272_LOW_DATA_RATE_OPT_OFF, 0, 0);
}
return(state);
}
int16_t SX1272::configFSK() {
// configure common registers
int16_t state = SX127x::configFSK();

View file

@ -253,7 +253,6 @@ class SX1272: public SX127x {
int16_t setSpreadingFactorRaw(uint8_t newSpreadingFactor);
int16_t setCodingRateRaw(uint8_t newCodingRate);
int16_t config();
int16_t configFSK();
private:

View file

@ -192,6 +192,17 @@ int16_t SX1278::setBandwidth(float bw) {
int16_t state = SX1278::setBandwidthRaw(newBandwidth);
if(state == ERR_NONE) {
SX127x::_bw = bw;
// calculate symbol length and set low data rate optimization, if needed
float symbolLength = (float)(uint32_t(1) << SX127x::_sf) / (float)SX127x::_bw;
DEBUG_PRINT("Symbol length: ");
DEBUG_PRINT(symbolLength);
DEBUG_PRINTLN(" ms");
if(symbolLength >= 16.0) {
state = _mod->SPIsetRegValue(SX1278_REG_MODEM_CONFIG_3, SX1278_LOW_DATA_RATE_OPT_ON, 3, 3);
} else {
state = _mod->SPIsetRegValue(SX1278_REG_MODEM_CONFIG_3, SX1278_LOW_DATA_RATE_OPT_OFF, 3, 3);
}
}
return(state);
}
@ -235,6 +246,17 @@ int16_t SX1278::setSpreadingFactor(uint8_t sf) {
int16_t state = SX1278::setSpreadingFactorRaw(newSpreadingFactor);
if(state == ERR_NONE) {
SX127x::_sf = sf;
// calculate symbol length and set low data rate optimization, if needed
float symbolLength = (float)(uint32_t(1) << SX127x::_sf) / (float)SX127x::_bw;
DEBUG_PRINT("Symbol length: ");
DEBUG_PRINT(symbolLength);
DEBUG_PRINTLN(" ms");
if(symbolLength >= 16.0) {
state = _mod->SPIsetRegValue(SX1278_REG_MODEM_CONFIG_3, SX1278_LOW_DATA_RATE_OPT_ON, 3, 3);
} else {
state = _mod->SPIsetRegValue(SX1278_REG_MODEM_CONFIG_3, SX1278_LOW_DATA_RATE_OPT_OFF, 3, 3);
}
}
return(state);
}
@ -468,24 +490,6 @@ int16_t SX1278::setCodingRateRaw(uint8_t newCodingRate) {
return(state);
}
int16_t SX1278::config() {
// configure common registers
int16_t state = SX127x::config();
if(state != ERR_NONE) {
return(state);
}
// calculate symbol length and set low data rate optimization, if needed
uint16_t base = 1;
float symbolLength = (float)(base << _sf) / (float)_bw;
if(symbolLength >= 16.0) {
state = _mod->SPIsetRegValue(SX1278_REG_MODEM_CONFIG_3, SX1278_LOW_DATA_RATE_OPT_ON, 0, 0);
} else {
state = _mod->SPIsetRegValue(SX1278_REG_MODEM_CONFIG_3, SX1278_LOW_DATA_RATE_OPT_OFF, 0, 0);
}
return(state);
}
int16_t SX1278::configFSK() {
// configure common registers
int16_t state = SX127x::configFSK();

View file

@ -262,7 +262,6 @@ class SX1278: public SX127x {
int16_t setSpreadingFactorRaw(uint8_t newSpreadingFactor);
int16_t setCodingRateRaw(uint8_t newCodingRate);
int16_t config();
int16_t configFSK();
private:

View file

@ -121,8 +121,7 @@ int16_t SX127x::transmit(uint8_t* data, size_t len, uint8_t addr) {
int16_t modem = getActiveModem();
if(modem == SX127X_LORA) {
// calculate timeout (150 % of expected time-one-air)
uint16_t base = 1;
float symbolLength = (float)(base << _sf) / (float)_bw;
float symbolLength = (float)(uint32_t(1) <<_sf) / (float)_bw;
float de = 0;
if(symbolLength >= 16.0) {
de = 1;