_sf = sf;
- setModulationParams(sf, _bw, _cr, _ldro);
handleLowDataRate();
+ setModulationParams(sf, _bw, _cr, _ldro);
}
long sx126x::getSignalBandwidth()
}
void sx126x::handleLowDataRate(){
- // TODO: Why was this enabled without any logic to check LDRO conditions?
- //_ldro = 1;
- //setModulationParams(_sf, _bw, _cr, _ldro);
+ if ( long( (1<<_sf) / (getSignalBandwidth()/1000)) > 16) {
+ _ldro = 0x01;
+ } else {
+ _ldro = 0x00;
+ }
}
void sx126x::optimizeModemSensitivity(){
void sx126x::setSignalBandwidth(long sbw)
{
- if (sbw <= 7.8E3) {
- _bw = 0x00;
- } else if (sbw <= 10.4E3) {
- _bw = 0x08;
- } else if (sbw <= 15.6E3) {
- _bw = 0x01;
- } else if (sbw <= 20.8E3) {
- _bw = 0x09;
- } else if (sbw <= 31.25E3) {
- _bw = 0x02;
- } else if (sbw <= 41.7E3) {
- _bw = 0x0A;
- } else if (sbw <= 62.5E3) {
- _bw = 0x03;
- } else if (sbw <= 125E3) {
- _bw = 0x04;
- } else if (sbw <= 250E3) {
- _bw = 0x05;
- } else /*if (sbw <= 250E3)*/ {
- _bw = 0x06;
- }
+ if (sbw <= 7.8E3) {
+ _bw = 0x00;
+ } else if (sbw <= 10.4E3) {
+ _bw = 0x08;
+ } else if (sbw <= 15.6E3) {
+ _bw = 0x01;
+ } else if (sbw <= 20.8E3) {
+ _bw = 0x09;
+ } else if (sbw <= 31.25E3) {
+ _bw = 0x02;
+ } else if (sbw <= 41.7E3) {
+ _bw = 0x0A;
+ } else if (sbw <= 62.5E3) {
+ _bw = 0x03;
+ } else if (sbw <= 125E3) {
+ _bw = 0x04;
+ } else if (sbw <= 250E3) {
+ _bw = 0x05;
+ } else /*if (sbw <= 250E3)*/ {
+ _bw = 0x06;
+ }
- setModulationParams(_sf, _bw, _cr, _ldro);
+ handleLowDataRate();
+ setModulationParams(_sf, _bw, _cr, _ldro);
- handleLowDataRate();
optimizeModemSensitivity();
}