From 575d87f70cf123d70d24bd185edb52d788d110d9 Mon Sep 17 00:00:00 2001 From: Bertrand Songis Date: Fri, 5 Jul 2019 12:01:26 +0200 Subject: [PATCH] R9M Lite Pro fixes --- radio/src/gui/128x64/model_setup.cpp | 42 +++++++++++++++------------- radio/src/gui/gui_common.h | 4 +-- radio/src/pulses/modules_helpers.h | 17 ++++++++++- 3 files changed, 40 insertions(+), 23 deletions(-) diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index c7f071cf2..a51578bdf 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -1525,51 +1525,53 @@ void menuModelSetup(event_t event) case ITEM_MODEL_SETUP_EXTERNAL_MODULE_POWER: { uint8_t moduleIdx = CURRENT_MODULE_EDITED(k); - if (isModuleR9MNonAccess(moduleIdx)) { + auto & module = g_model.moduleData[moduleIdx]; + + if (isModuleTypeR9MNonAccess(module.type)) { lcdDrawTextAlignedLeft(y, TR_MULTI_RFPOWER); if (isModuleR9M_FCC_VARIANT(moduleIdx)) { - g_model.moduleData[moduleIdx].pxx.power = min((uint8_t)g_model.moduleData[moduleIdx].pxx.power, (uint8_t)R9M_FCC_POWER_MAX); // Lite FCC has only one setting - if (isModuleR9MLite(moduleIdx)) { // R9M lite FCC has only one power value, so displayed for info only - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LITE_FCC_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT); + module.pxx.power = min((uint8_t)module.pxx.power, (uint8_t)R9M_FCC_POWER_MAX); // Lite FCC has only one setting + if (isModuleTypeR9MLiteNonPro(module.type)) { // R9M lite FCC has only one power value, so displayed for info only + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LITE_FCC_POWER_VALUES, module.pxx.power, LEFT); if (attr) REPEAT_LAST_CURSOR_MOVE(); } else { - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_FCC_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_FCC_POWER_VALUES, module.pxx.power, LEFT | attr); if (attr) - CHECK_INCDEC_MODELVAR_ZERO(event, g_model.moduleData[moduleIdx].pxx.power, R9M_FCC_POWER_MAX); + CHECK_INCDEC_MODELVAR_ZERO(event, module.pxx.power, R9M_FCC_POWER_MAX); } } - else if (isModuleR9MLite(moduleIdx)) { - g_model.moduleData[moduleIdx].pxx.power = min((uint8_t)g_model.moduleData[moduleIdx].pxx.power, (uint8_t)R9M_LITE_LBT_POWER_MAX); - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LITE_LBT_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr); + else if (isModuleTypeR9MLiteNonPro(module.type)) { + module.pxx.power = min((uint8_t)module.pxx.power, (uint8_t)R9M_LITE_LBT_POWER_MAX); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LITE_LBT_POWER_VALUES, module.pxx.power, LEFT | attr); if (attr) { - CHECK_INCDEC_MODELVAR_ZERO(event, g_model.moduleData[moduleIdx].pxx.power, R9M_LITE_LBT_POWER_MAX); + CHECK_INCDEC_MODELVAR_ZERO(event, module.pxx.power, R9M_LITE_LBT_POWER_MAX); } - if (attr && s_editMode == 0 && reusableBuffer.moduleSetup.r9mPower != g_model.moduleData[moduleIdx].pxx.power) { - if (reusableBuffer.moduleSetup.r9mPower + g_model.moduleData[moduleIdx].pxx.power < 5) { //switching between mode 2 and 3 does not require rebind + if (attr && s_editMode == 0 && reusableBuffer.moduleSetup.r9mPower != module.pxx.power) { + if (reusableBuffer.moduleSetup.r9mPower + module.pxx.power < 5) { //switching between mode 2 and 3 does not require rebind POPUP_WARNING(STR_REBIND); } - reusableBuffer.moduleSetup.r9mPower = g_model.moduleData[moduleIdx].pxx.power; + reusableBuffer.moduleSetup.r9mPower = module.pxx.power; } } else { - g_model.moduleData[moduleIdx].pxx.power = min((uint8_t)g_model.moduleData[moduleIdx].pxx.power, (uint8_t)R9M_LBT_POWER_MAX); - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LBT_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr); + module.pxx.power = min((uint8_t)module.pxx.power, (uint8_t)R9M_LBT_POWER_MAX); + lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_LBT_POWER_VALUES, module.pxx.power, LEFT | attr); if (attr) { - CHECK_INCDEC_MODELVAR_ZERO(event, g_model.moduleData[moduleIdx].pxx.power, R9M_LBT_POWER_MAX); + CHECK_INCDEC_MODELVAR_ZERO(event, module.pxx.power, R9M_LBT_POWER_MAX); } - if (attr && s_editMode == 0 && reusableBuffer.moduleSetup.r9mPower != g_model.moduleData[moduleIdx].pxx.power) { - if (reusableBuffer.moduleSetup.r9mPower + g_model.moduleData[moduleIdx].pxx.power < 5) { //switching between mode 2 and 3 does not require rebind + if (attr && s_editMode == 0 && reusableBuffer.moduleSetup.r9mPower != module.pxx.power) { + if (reusableBuffer.moduleSetup.r9mPower + module.pxx.power < 5) { //switching between mode 2 and 3 does not require rebind POPUP_WARNING(STR_REBIND); } - reusableBuffer.moduleSetup.r9mPower = g_model.moduleData[moduleIdx].pxx.power; + reusableBuffer.moduleSetup.r9mPower = module.pxx.power; } } } #if defined(MULTIMODULE) else if (isModuleMultimodule(moduleIdx)) { - g_model.moduleData[EXTERNAL_MODULE].multi.lowPowerMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.lowPowerMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_LOWPOWER, attr, event); + module.multi.lowPowerMode = editCheckBox(module.multi.lowPowerMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_LOWPOWER, attr, event); } #endif diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index 2c4f26a4f..d959f7452 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -23,6 +23,7 @@ #include "lcd.h" #include "keys.h" +#include "telemetry/telemetry_sensors.h" #if defined(ROTARY_ENCODER_NAVIGATION) #define CASE_EVT_ROTARY_LEFT case EVT_ROTARY_LEFT: @@ -90,7 +91,6 @@ void drawFlightMode(coord_t x, coord_t y, int8_t idx, LcdFlags att=0); swsrc_t checkIncDecMovedSwitch(swsrc_t val); -#include "telemetry/telemetry_sensors.h" void drawValueWithUnit(coord_t x, coord_t y, int val, uint8_t unit, LcdFlags flags); void drawCurveRef(coord_t x, coord_t y, CurveRef & curve, LcdFlags flags=0); void drawDate(coord_t x, coord_t y, TelemetryItem & telemetryItem, LcdFlags flags=0); @@ -160,7 +160,7 @@ const mm_protocol_definition *getMultiProtocolDefinition (uint8_t protocol); #define EXTERNAL_MODULE_OPTION_ROW (isModuleR9MNonAccess(EXTERNAL_MODULE) || isModuleSBUS(EXTERNAL_MODULE) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW) -#define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isModuleR9MNonAccess(EXTERNAL_MODULE)) ? (isModuleR9MLite(EXTERNAL_MODULE) ? TITLE_ROW : (uint8_t) 0) : HIDDEN_ROW +#define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isModuleR9MNonAccess(EXTERNAL_MODULE)) ? (isModuleR9MLiteNonPro(EXTERNAL_MODULE) ? TITLE_ROW : (uint8_t) 0) : HIDDEN_ROW void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags); diff --git a/radio/src/pulses/modules_helpers.h b/radio/src/pulses/modules_helpers.h index db663684f..066497a5e 100644 --- a/radio/src/pulses/modules_helpers.h +++ b/radio/src/pulses/modules_helpers.h @@ -137,9 +137,24 @@ inline bool isModuleR9M(uint8_t idx) return isModuleTypeR9M(g_model.moduleData[idx].type); } +inline bool isModuleTypeR9MLiteNonPro(uint8_t type) +{ + return type == MODULE_TYPE_R9M_LITE_PXX1 || type == MODULE_TYPE_R9M_LITE_PXX2; +} + +inline bool isModuleR9MLiteNonPro(uint8_t idx) +{ + return isModuleTypeR9MLiteNonPro(g_model.moduleData[idx].type); +} + +inline bool isModuleTypeR9MLitePro(uint8_t type) +{ + return type == MODULE_TYPE_R9M_LITE_PRO_PXX1 || type == MODULE_TYPE_R9M_LITE_PRO_PXX2; +} + inline bool isModuleTypeR9MLite(uint8_t type) { - return type == MODULE_TYPE_R9M_LITE_PXX1 || type == MODULE_TYPE_R9M_LITE_PXX2 || type == MODULE_TYPE_R9M_LITE_PRO_PXX1 || type == MODULE_TYPE_R9M_LITE_PRO_PXX2; + return isModuleTypeR9MLiteNonPro(type) || isModuleTypeR9MLitePro(type); } inline bool isModuleR9MLite(uint8_t idx)