mirror of
https://github.com/lumapu/ahoy.git
synced 2025-06-07 05:01:39 +02:00
bind inverter rf-quality (from heuristic) to display radio RSSI bars
This commit is contained in:
parent
531869737e
commit
baebbf4ff7
1 changed files with 31 additions and 1 deletions
|
@ -87,6 +87,7 @@ class Display {
|
||||||
|
|
||||||
uint8_t nrprod = 0;
|
uint8_t nrprod = 0;
|
||||||
uint8_t nrsleep = 0;
|
uint8_t nrsleep = 0;
|
||||||
|
int8_t minQAllInv = 4;
|
||||||
|
|
||||||
Inverter<> *iv;
|
Inverter<> *iv;
|
||||||
record_t<> *rec;
|
record_t<> *rec;
|
||||||
|
@ -97,6 +98,15 @@ class Display {
|
||||||
if (iv == NULL)
|
if (iv == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
int8_t maxQInv = -6;
|
||||||
|
for(uint8_t ch = 0; ch < RF_MAX_CHANNEL_ID; ch++) {
|
||||||
|
int8_t q = iv->txRfQuality[ch];
|
||||||
|
if (q > maxQInv)
|
||||||
|
maxQInv = q;
|
||||||
|
}
|
||||||
|
if (maxQInv < minQAllInv)
|
||||||
|
minQAllInv = maxQInv;
|
||||||
|
|
||||||
rec = iv->getRecordStruct(RealTimeRunData_Debug);
|
rec = iv->getRecordStruct(RealTimeRunData_Debug);
|
||||||
|
|
||||||
if (iv->isProducing())
|
if (iv->isProducing())
|
||||||
|
@ -123,7 +133,7 @@ class Display {
|
||||||
mDisplayData.RadioSymbol = mHmRadio->isChipConnected();
|
mDisplayData.RadioSymbol = mHmRadio->isChipConnected();
|
||||||
mDisplayData.WifiSymbol = (WiFi.status() == WL_CONNECTED);
|
mDisplayData.WifiSymbol = (WiFi.status() == WL_CONNECTED);
|
||||||
mDisplayData.MQTTSymbol = mApp->getMqttIsConnected();
|
mDisplayData.MQTTSymbol = mApp->getMqttIsConnected();
|
||||||
mDisplayData.RadioRSSI = (0 < mDisplayData.nrProducing) ? 0 : SCHAR_MIN; // Workaround as NRF24 has no RSSI. Could be approximated by transmisson error heuristic in the future
|
mDisplayData.RadioRSSI = (0 < mDisplayData.nrProducing) ? ivQuality2RadioRSSI(minQAllInv) : SCHAR_MIN; // Workaround as NRF24 has no RSSI. Approximation by quality levels from heuristic function
|
||||||
mDisplayData.WifiRSSI = (WiFi.status() == WL_CONNECTED) ? WiFi.RSSI() : SCHAR_MIN;
|
mDisplayData.WifiRSSI = (WiFi.status() == WL_CONNECTED) ? WiFi.RSSI() : SCHAR_MIN;
|
||||||
mDisplayData.ipAddress = WiFi.localIP();
|
mDisplayData.ipAddress = WiFi.localIP();
|
||||||
time_t utc= mApp->getTimestamp();
|
time_t utc= mApp->getTimestamp();
|
||||||
|
@ -148,6 +158,26 @@ class Display {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// approximate RSSI in dB by invQuality levels from heuristic function (very unscientific but better than nothing :-) )
|
||||||
|
int8_t ivQuality2RadioRSSI(int8_t invQuality) {
|
||||||
|
int8_t pseudoRSSIdB;
|
||||||
|
switch(invQuality) {
|
||||||
|
case 4: pseudoRSSIdB = -55; break;
|
||||||
|
case 3:
|
||||||
|
case 2:
|
||||||
|
case 1: pseudoRSSIdB = -65; break;
|
||||||
|
case 0:
|
||||||
|
case -1:
|
||||||
|
case -2: pseudoRSSIdB = -75; break;
|
||||||
|
case -3:
|
||||||
|
case -4:
|
||||||
|
case -5: pseudoRSSIdB = -85; break;
|
||||||
|
case -6:
|
||||||
|
default: pseudoRSSIdB = -95; break;
|
||||||
|
}
|
||||||
|
return (pseudoRSSIdB);
|
||||||
|
}
|
||||||
|
|
||||||
// private member variables
|
// private member variables
|
||||||
IApp *mApp;
|
IApp *mApp;
|
||||||
DisplayData mDisplayData;
|
DisplayData mDisplayData;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue