From ee9d50dca4eb4fa0e6b485966c3e23551102cbd5 Mon Sep 17 00:00:00 2001 From: Raphael Coeffic Date: Sun, 15 Oct 2023 08:27:38 +0200 Subject: [PATCH] fix: Incorrect MPM module status (#4198) --- radio/src/gui/colorlcd/module_setup.cpp | 9 +++++++++ radio/src/hal/module_port.cpp | 8 ++++++++ radio/src/hal/module_port.h | 2 ++ radio/src/pulses/multi.cpp | 2 +- radio/src/telemetry/multi.cpp | 2 +- 5 files changed, 21 insertions(+), 2 deletions(-) diff --git a/radio/src/gui/colorlcd/module_setup.cpp b/radio/src/gui/colorlcd/module_setup.cpp index f5da10dd5f3..757cadade99 100644 --- a/radio/src/gui/colorlcd/module_setup.cpp +++ b/radio/src/gui/colorlcd/module_setup.cpp @@ -447,6 +447,15 @@ void ModuleWindow::updateModule() auto line = newLine(&grid); new StaticText(line, rect_t{}, STR_RF_POWER, 0, COLOR_THEME_PRIMARY1); rfPower = new Choice(line, rect_t{}, 0, 0, GET_SET_DEFAULT(md->pxx.power)); + line = newLine(&grid); + new StaticText(line, rect_t{}, STR_MODULE_TELEMETRY, 0, COLOR_THEME_PRIMARY1); + new DynamicText(line, rect_t{}, [=] () { + if (modulePortHasRx(moduleIdx)) { + return std::string(STR_MODULE_TELEM_ON); + } else { + return std::string(STR_DISABLE_INTERNAL); + } + }); } #if defined(PXX2) diff --git a/radio/src/hal/module_port.cpp b/radio/src/hal/module_port.cpp index c2f24aed9cb..1e5fb957c0c 100644 --- a/radio/src/hal/module_port.cpp +++ b/radio/src/hal/module_port.cpp @@ -319,3 +319,11 @@ int8_t modulePortGetModuleForPort(uint8_t port) return -1; } + +bool modulePortHasRx(uint8_t module) +{ + auto mod_st = modulePortGetState(module); + if (!mod_st) return false; + + return mod_st && mod_st->rx.port; +} diff --git a/radio/src/hal/module_port.h b/radio/src/hal/module_port.h index 1a227dfb51a..991557bd9d1 100644 --- a/radio/src/hal/module_port.h +++ b/radio/src/hal/module_port.h @@ -166,3 +166,5 @@ bool modulePortIsPortUsedByModule(uint8_t module, uint8_t port); bool modulePortIsPortUsed(uint8_t port); int8_t modulePortGetModuleForPort(uint8_t port); + +bool modulePortHasRx(uint8_t module); diff --git a/radio/src/pulses/multi.cpp b/radio/src/pulses/multi.cpp index c6bdb5a091d..7ec770b4cf2 100644 --- a/radio/src/pulses/multi.cpp +++ b/radio/src/pulses/multi.cpp @@ -139,7 +139,7 @@ static void setupPulsesMulti(uint8_t*& p_buf, uint8_t module) } // Invert telemetry if needed - uint8_t disableTelemetry = modulePortIsPortUsedByModule(module, ETX_MOD_PORT_SPORT) ? 0 : 1; + uint8_t disableTelemetry = modulePortHasRx(module) ? 0 : 1; if (invert[module] & 0x80 && !disableTelemetry) { if (getMultiModuleStatus(module).isValid()) { invert[module] &= 0x08; // Telemetry received, stop searching diff --git a/radio/src/telemetry/multi.cpp b/radio/src/telemetry/multi.cpp index 1c6b951f471..36fb1eb8af4 100644 --- a/radio/src/telemetry/multi.cpp +++ b/radio/src/telemetry/multi.cpp @@ -508,7 +508,7 @@ static void processMultiTelemetryPaket(const uint8_t * packet, uint8_t module) void MultiModuleStatus::getStatusString(char * statusText) const { if (!isValid()) { - if (!modulePortIsPortUsedByModule(getModuleIndex(), ETX_MOD_PORT_SPORT)) { + if (!modulePortHasRx(getModuleIndex())) { strcpy(statusText, STR_DISABLE_INTERNAL); } else { strcpy(statusText, STR_MODULE_NO_TELEMETRY);