fix: RX stat labelling dependent on telemetry protocol (#3523)

* RX stat (formerly known as "RSSI") labeling dependent on protocol (RSSI/dbm, Rqly/%, Sgnl/-)  used for range check, multi rf tuning and low/critical warning settings pages

* chore: Bump libopenui

* removed define that was supposed to be for testing only

function getRxStatLabels(): wasting flash as inline, no need to be inlined

* removed inline on getRxStatLabels() - step 2
This commit is contained in:
Michael
2023-05-17 11:17:35 +10:00
committed by GitHub
parent 5db37e2a2b
commit fd7d359695
11 changed files with 89 additions and 26 deletions
+3 -2
View File
@@ -1796,7 +1796,8 @@ void menuModelSetup(event_t event)
if (!title) break;
lcdDrawText(INDENT_WIDTH, y, title);
if (title == STR_MULTI_RFTUNE) {
lcdDrawText(MODEL_SETUP_2ND_COLUMN + 23, y, "RSSI(", LEFT);
lcdDrawText(MODEL_SETUP_2ND_COLUMN + 23, y, getRxStatLabels()->label, LEFT);
lcdDrawText(lcdLastRightPos, y, "(", LEFT);
lcdDrawNumber(lcdLastRightPos, y, TELEMETRY_RSSI(), LEFT);
lcdDrawText(lcdLastRightPos, y, ")", LEFT);
}
@@ -2137,7 +2138,7 @@ void menuModelSetup(event_t event)
#if defined(PXX)
if (isModuleInRangeCheckMode()) {
showMessageBox("RSSI: ");
showMessageBox(getRxStatLabels()->label);
lcdDrawNumber(WARNING_LINE_X, 5*FH, TELEMETRY_RSSI(), BOLD);
}
#endif
+1 -1
View File
@@ -228,7 +228,7 @@ void menuModelTelemetry(event_t event)
break;
case ITEM_TELEMETRY_RSSI_LABEL:
lcdDrawTextAlignedLeft(y, getRssiLabel());
lcdDrawTextAlignedLeft(y, getRxStatLabels()->label);
break;
case ITEM_TELEMETRY_RSSI_SOURCE: {
+3 -2
View File
@@ -1555,7 +1555,8 @@ void menuModelSetup(event_t event)
if (!title) break;
lcdDrawText(INDENT_WIDTH, y, title);
if (title == STR_MULTI_RFTUNE) {
lcdDrawText(MODEL_SETUP_2ND_COLUMN + 23, y, "RSSI(", LEFT);
lcdDrawText(MODEL_SETUP_2ND_COLUMN + 23, y, getRxStatLabels()->label, LEFT);
lcdDrawText(lcdLastRightPos, y, "(", LEFT);
lcdDrawNumber(lcdLastRightPos, y, TELEMETRY_RSSI(), LEFT);
lcdDrawText(lcdLastRightPos, y, ")", LEFT);
}
@@ -1850,7 +1851,7 @@ void menuModelSetup(event_t event)
#if defined(PXX)
if (isModuleInRangeCheckMode()) {
showMessageBox("RSSI: ");
showMessageBox(getRxStatLabels()->label);
lcdDrawNumber(WARNING_LINE_X, 5*FH, TELEMETRY_RSSI(), BOLD | LEFT);
}
#endif
+1 -1
View File
@@ -220,7 +220,7 @@ void menuModelTelemetry(event_t event)
break;
case ITEM_TELEMETRY_RSSI_LABEL:
lcdDrawTextAlignedLeft(y, getRssiLabel());
lcdDrawTextAlignedLeft(y, getRxStatLabels()->label);
break;
case ITEM_TELEMETRY_RSSI_SOURCE: {
+2 -2
View File
@@ -897,8 +897,8 @@ void ModelTelemetryPage::build(FormWindow * window)
new StaticText(line, rect_t{}, STR_IGNORE_INSTANCE, 0, COLOR_THEME_PRIMARY1);
new CheckBox(line, rect_t{}, GET_SET_DEFAULT(g_model.ignoreSensorIds));
// RSSI
new Subtitle(window, rect_t{}, getRssiLabel(), 0, COLOR_THEME_PRIMARY1);
// RX stat
new Subtitle(window, rect_t{}, getRxStatLabels()->label, 0, COLOR_THEME_PRIMARY1);
line = window->newLine(&grid);
line->padLeft(10);
+2 -11
View File
@@ -527,23 +527,14 @@ void ModuleWindow::updateFailsafe()
}
}
#if defined(PCBNV14)
#define SIGNAL_POSTFIX
#define SIGNAL_MESSAGE "SGNL"
#else
#define SIGNAL_POSTFIX " db"
#define SIGNAL_MESSAGE "RSSI"
#endif
void ModuleWindow::startRSSIDialog(std::function<void()> closeHandler)
{
auto rssiDialog = new DynamicMessageDialog(
parent, STR_RANGE_TEST,
[=]() {
return std::to_string((int)TELEMETRY_RSSI()) +
std::string(SIGNAL_POSTFIX);
return std::to_string((int)TELEMETRY_RSSI()) + getRxStatLabels()->unit;
},
SIGNAL_MESSAGE, 50,
getRxStatLabels()->label, 50,
COLOR_THEME_SECONDARY1 | CENTERED | FONT(BOLD) | FONT(XL));
rssiDialog->setCloseHandler([this, closeHandler]() {
+5 -2
View File
@@ -61,7 +61,7 @@ MPMProtoOption::MPMProtoOption(FormGroup* form, FlexGridLayout *layout) :
edit = new NumberEdit(box, rect_t{}, 0, 0, nullptr);
cb = new CheckBox(box, rect_t{}, nullptr, nullptr);
rssi = new DynamicNumber<uint16_t>(
box, rect_t{}, [] { return (uint16_t)TELEMETRY_RSSI(); }, 0, "RSSI: ", " db");
box, rect_t{}, [] { return (uint16_t)TELEMETRY_RSSI(); }, 0, getRxStatLabels()->label, getRxStatLabels()->unit);
}
void MPMProtoOption::update(const MultiRfProtocols::RfProto* rfProto, ModuleData* md)
@@ -137,8 +137,11 @@ void MPMProtoOption::update(const MultiRfProtocols::RfProto* rfProto, ModuleData
edit->setSetValueHandler(SET_DEFAULT(md->multi.optionValue));
lv_obj_clear_flag(edit->getLvObj(), LV_OBJ_FLAG_HIDDEN);
edit->update();
if (title == STR_MULTI_RFTUNE)
if (title == STR_MULTI_RFTUNE) {
rssi->setPrefix(getRxStatLabels()->label);
rssi->setSuffix(getRxStatLabels()->unit);
lv_obj_clear_flag(rssi->getLvObj(), LV_OBJ_FLAG_HIDDEN);
}
}
}
}
+56
View File
@@ -72,6 +72,8 @@ static uint8_t intTelemetryRxBuffer[TELEMETRY_RX_PACKET_SIZE];
static uint8_t intTelemetryRxBufferCount;
#endif
static rxStatStruct rxStat;
uint8_t * getTelemetryRxBuffer(uint8_t moduleIdx)
{
#if defined(INTERNAL_MODULE_SERIAL_TELEMETRY)
@@ -90,6 +92,60 @@ uint8_t &getTelemetryRxBufferCount(uint8_t moduleIdx)
return telemetryRxBufferCount;
}
rxStatStruct *getRxStatLabels() {
// default to RSSI/db notation
rxStat.label = STR_RXSTAT_LABEL_RSSI;
rxStat.unit = STR_RXSTAT_UNIT_DBM;
// Currently we can only display a single rx stat in settings/telemetry.
// If both modules are used we choose the internal one
// TODO: have to rx stat sections in settings/telemetry
uint8_t moduleToUse = INTERNAL_MODULE;
if(g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_NONE &&
g_model.moduleData[EXTERNAL_MODULE].type != MODULE_TYPE_NONE) {
moduleToUse = EXTERNAL_MODULE;
}
uint8_t moduleType = g_model.moduleData[moduleToUse].type;
switch(moduleType) {
case MODULE_TYPE_MULTIMODULE: {
uint8_t multiProtocol = g_model.moduleData[moduleToUse].multi.rfProtocol;
if (multiProtocol == MODULE_SUBTYPE_MULTI_FS_AFHDS2A ||
multiProtocol == MODULE_SUBTYPE_MULTI_HOTT ||
multiProtocol == MODULE_SUBTYPE_MULTI_MLINK) {
rxStat.label = STR_RXSTAT_LABEL_RQLY;
rxStat.unit = STR_RXSTAT_UNIT_PERCENT;
}
}
break;
case MODULE_TYPE_CROSSFIRE:
case MODULE_TYPE_GHOST:
rxStat.label = STR_RXSTAT_LABEL_RQLY;
rxStat.unit = STR_RXSTAT_UNIT_PERCENT;
break;
case MODULE_TYPE_FLYSKY:
#if defined (PCBNV14)
extern uint32_t NV14internalModuleFwVersion;
if(moduleToUse == INTERNAL_MODULE) {
if(g_model.moduleData[INTERNAL_MODULE].subType == FLYSKY_SUBTYPE_AFHDS2A &&
NV14internalModuleFwVersion >= 0x1000E) {
rxStat.label = STR_RXSTAT_LABEL_SIGNAL;
rxStat.unit = STR_RXSTAT_UNIT_NOUNIT ;
}
}
#endif
break;
}
return &rxStat;
}
// TODO: move to module port driver
//
// static int (*_telemetryGetByte)(void*, uint8_t*) = nullptr;
+6 -4
View File
@@ -126,10 +126,12 @@ void frskyDSetDefault(int index, uint16_t id);
#define IS_DISTANCE_UNIT(unit) ((unit) == UNIT_METERS || (unit) == UNIT_FEET)
#define IS_SPEED_UNIT(unit) ((unit) >= UNIT_KTS && (unit) <= UNIT_MPH)
inline const char* getRssiLabel()
{
return "Rx-Stats";
}
typedef struct {
const char *label;
const char *unit;
} rxStatStruct;
rxStatStruct *getRxStatLabels();
// TODO: this should handle only the external S.PORT line
// - and go away in the end: one proto per module, not global!
+9
View File
@@ -322,6 +322,15 @@
#define STR_SENSOR_SERVO_STATUS "SrvS"
#define STR_SENSOR_SPECIAL "Spcl"
// RX stat labeling for settings/telemetry, range
// check and internal/external module setup screens
#define STR_RXSTAT_LABEL_RSSI "RSSI "
#define STR_RXSTAT_LABEL_RQLY "Rqly "
#define STR_RXSTAT_LABEL_SIGNAL "Sgnl "
#define STR_RXSTAT_UNIT_PERCENT " %"
#define STR_RXSTAT_UNIT_DBM " db"
#define STR_RXSTAT_UNIT_NOUNIT ""
#define STR_CHAR_RIGHT "\302\200"
#define STR_CHAR_LEFT "\302\201"
#define STR_CHAR_UP "\302\202"