mirror of
https://github.com/MarekZegare4/MeshCore-Solo.git
synced 2026-09-14 15:16:40 +00:00
LR2021: auto-LDRO for side detectors
This commit is contained in:
@@ -1065,8 +1065,8 @@ bool MyMesh::setRxBoostedGain(bool enable) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if defined(USE_LR2021)
|
#if defined(USE_LR2021)
|
||||||
bool MyMesh::configSideDetectors(const uint8_t sideDetSFs[], uint8_t num) {
|
bool MyMesh::configSideDetectors(const uint8_t sideDetSFs[], uint8_t num, float bw) {
|
||||||
return radio_driver.configSideDetectors(sideDetSFs, num);
|
return radio_driver.configSideDetectors(sideDetSFs, num, bw);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ public:
|
|||||||
bool setRxBoostedGain(bool enable) override;
|
bool setRxBoostedGain(bool enable) override;
|
||||||
|
|
||||||
#if defined(USE_LR2021)
|
#if defined(USE_LR2021)
|
||||||
virtual bool configSideDetectors(const uint8_t sideDetSFs[], uint8_t num) override;
|
virtual bool configSideDetectors(const uint8_t sideDetSFs[], uint8_t num, float bw) override;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -766,7 +766,7 @@ void CommonCLI::handleSetCmd(uint32_t sender_timestamp, char* command, char* rep
|
|||||||
sideDetSFs[i] = atoi(parts[i]);
|
sideDetSFs[i] = atoi(parts[i]);
|
||||||
}
|
}
|
||||||
sideDetSFs[num] = 0;
|
sideDetSFs[num] = 0;
|
||||||
if (_callbacks->configSideDetectors(sideDetSFs, num)) {
|
if (_callbacks->configSideDetectors(sideDetSFs, num, _prefs->bw)) {
|
||||||
for (int i = 0; i <= num; i++) _prefs->extra_sf[i] = sideDetSFs[i];
|
for (int i = 0; i <= num; i++) _prefs->extra_sf[i] = sideDetSFs[i];
|
||||||
savePrefs();
|
savePrefs();
|
||||||
sprintf(reply, "OK - extra SFs set");
|
sprintf(reply, "OK - extra SFs set");
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
#if defined(USE_LR2021)
|
#if defined(USE_LR2021)
|
||||||
virtual bool configSideDetectors(const uint8_t sideDetSFs[], uint8_t num) {
|
virtual bool configSideDetectors(const uint8_t sideDetSFs[], uint8_t num, float bw) {
|
||||||
return false; // Override in wrapper
|
return false; // Override in wrapper
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ public:
|
|||||||
applySideDetectorConfig();
|
applySideDetectorConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool configSideDetectors(const uint8_t* sideDetSFs, uint8_t num) override {
|
bool configSideDetectors(const uint8_t* sideDetSFs, uint8_t num, float bw) override {
|
||||||
LR2021LoRaSideDetector_t tmp[3];
|
LR2021LoRaSideDetector_t tmp[3];
|
||||||
uint8_t sf = getSpreadingFactor();
|
uint8_t sf = getSpreadingFactor();
|
||||||
|
|
||||||
@@ -35,7 +35,8 @@ public:
|
|||||||
if (sideDetSFs[i] > sf + 4) { return false; } // span must not be > 4
|
if (sideDetSFs[i] > sf + 4) { return false; } // span must not be > 4
|
||||||
|
|
||||||
tmp[i].sf = sideDetSFs[i];
|
tmp[i].sf = sideDetSFs[i];
|
||||||
if (sideDetSFs[i] == 10) { // TODO: set ldro=true when tSym >=16
|
float tSym = calcTsym(tmp[i].sf, bw);
|
||||||
|
if (tSym >= 16.0f) {
|
||||||
tmp[i].ldro = true;
|
tmp[i].ldro = true;
|
||||||
} else {
|
} else {
|
||||||
tmp[i].ldro = false;
|
tmp[i].ldro = false;
|
||||||
@@ -63,6 +64,11 @@ public:
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float calcTsym(uint8_t sf, float bw) {
|
||||||
|
float tSym = (float)(uint32_t(1) << sf) / (float)bw;
|
||||||
|
return tSym;
|
||||||
|
}
|
||||||
|
|
||||||
bool isReceivingPacket() override {
|
bool isReceivingPacket() override {
|
||||||
return ((CustomLR2021 *)_radio)->isReceiving();
|
return ((CustomLR2021 *)_radio)->isReceiving();
|
||||||
}
|
}
|
||||||
@@ -98,5 +104,4 @@ public:
|
|||||||
LR2021LoRaSideDetector_t _sideDet[3];
|
LR2021LoRaSideDetector_t _sideDet[3];
|
||||||
size_t _numSideDet = 0;
|
size_t _numSideDet = 0;
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ public:
|
|||||||
virtual bool setRxBoostedGainMode(bool) { return false; }
|
virtual bool setRxBoostedGainMode(bool) { return false; }
|
||||||
virtual bool getRxBoostedGainMode() const { return false; }
|
virtual bool getRxBoostedGainMode() const { return false; }
|
||||||
|
|
||||||
virtual bool configSideDetectors(const uint8_t sideDetSFs[], uint8_t num) { return false; }
|
virtual bool configSideDetectors(const uint8_t sideDetSFs[], uint8_t num, float bw) { return false; }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user