[SX127x] Sync with LoRaLib 8.0.6
This commit is contained in:
parent
8cc9b175ad
commit
ac30ca652f
5 changed files with 171 additions and 166 deletions
|
@ -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();
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue