mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-15 15:22:34 +00:00
preset aware signal strength display
This commit is contained in:
@@ -2136,6 +2136,48 @@ void CannedMessageModule::drawFrame(OLEDDisplay *display, OLEDDisplayUiState *st
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return SNR limit based on modem preset
|
||||||
|
static float getSnrLimit(meshtastic_Config_LoRaConfig_ModemPreset preset)
|
||||||
|
{
|
||||||
|
switch (preset) {
|
||||||
|
case meshtastic_Config_LoRaConfig_ModemPreset_LONG_SLOW:
|
||||||
|
case meshtastic_Config_LoRaConfig_ModemPreset_LONG_MODERATE:
|
||||||
|
case meshtastic_Config_LoRaConfig_ModemPreset_LONG_FAST:
|
||||||
|
return -6.0f;
|
||||||
|
case meshtastic_Config_LoRaConfig_ModemPreset_MEDIUM_SLOW:
|
||||||
|
case meshtastic_Config_LoRaConfig_ModemPreset_MEDIUM_FAST:
|
||||||
|
return -5.5f;
|
||||||
|
case meshtastic_Config_LoRaConfig_ModemPreset_SHORT_SLOW:
|
||||||
|
case meshtastic_Config_LoRaConfig_ModemPreset_SHORT_FAST:
|
||||||
|
case meshtastic_Config_LoRaConfig_ModemPreset_SHORT_TURBO:
|
||||||
|
return -4.5f;
|
||||||
|
default:
|
||||||
|
return -6.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return Good/Fair/Bad label and set 1–5 bars based on SNR and RSSI
|
||||||
|
static const char *getSignalGrade(float snr, int32_t rssi, float snrLimit, int &bars)
|
||||||
|
{
|
||||||
|
// 5-bar logic: strength inside Good/Fair/Bad category
|
||||||
|
if (snr > snrLimit && rssi > -10) {
|
||||||
|
bars = 5; // very strong good
|
||||||
|
return "Good";
|
||||||
|
} else if (snr > snrLimit && rssi > -20) {
|
||||||
|
bars = 4; // normal good
|
||||||
|
return "Good";
|
||||||
|
} else if (snr > 0 && rssi > -50) {
|
||||||
|
bars = 3; // weaker good (on edge of fair)
|
||||||
|
return "Good";
|
||||||
|
} else if (snr > -10 && rssi > -100) {
|
||||||
|
bars = 2; // fair
|
||||||
|
return "Fair";
|
||||||
|
} else {
|
||||||
|
bars = 1; // bad
|
||||||
|
return "Bad";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ProcessMessage CannedMessageModule::handleReceived(const meshtastic_MeshPacket &mp)
|
ProcessMessage CannedMessageModule::handleReceived(const meshtastic_MeshPacket &mp)
|
||||||
{
|
{
|
||||||
// Only process routing ACK/NACK packets that are responses to our own outbound
|
// Only process routing ACK/NACK packets that are responses to our own outbound
|
||||||
@@ -2206,20 +2248,10 @@ ProcessMessage CannedMessageModule::handleReceived(const meshtastic_MeshPacket &
|
|||||||
const char *channelName = channels.getName(this->channel);
|
const char *channelName = channels.getName(this->channel);
|
||||||
const char *nodeName = getNodeName(this->incoming);
|
const char *nodeName = getNodeName(this->incoming);
|
||||||
|
|
||||||
// Signal quality calculation (Good / Fair / Bad)
|
// Calculate signal quality and bars based on preset, SNR, and RSSI
|
||||||
const char *qualityLabel;
|
float snrLimit = getSnrLimit(config.lora.modem_preset);
|
||||||
int bars = 0;
|
int bars = 0;
|
||||||
|
const char *qualityLabel = getSignalGrade(this->lastRxSnr, this->lastRxRssi, snrLimit, bars);
|
||||||
if (lastRxSnr > -7 && lastRxRssi > -110) {
|
|
||||||
qualityLabel = "Good";
|
|
||||||
bars = 4;
|
|
||||||
} else if (lastRxSnr > -15 && lastRxRssi > -120) {
|
|
||||||
qualityLabel = "Fair";
|
|
||||||
bars = 2;
|
|
||||||
} else {
|
|
||||||
qualityLabel = "Bad";
|
|
||||||
bars = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this->ack) {
|
if (this->ack) {
|
||||||
if (this->lastSentNode == NODENUM_BROADCAST) {
|
if (this->lastSentNode == NODENUM_BROADCAST) {
|
||||||
|
|||||||
Reference in New Issue
Block a user