diff --git a/radio/src/gui/128x64/model_setup.cpp b/radio/src/gui/128x64/model_setup.cpp index a5a5fe092..0c0fb76fd 100644 --- a/radio/src/gui/128x64/model_setup.cpp +++ b/radio/src/gui/128x64/model_setup.cpp @@ -1728,17 +1728,31 @@ void menuModelSetup(event_t event) 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 defined(PCBXLITE) && !defined(MODULE_R9M_FULLSIZE) // R9M lite FCC has only one power value, so displayed for info only - lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_FCC_POWER_VALUES, g_model.moduleData[moduleIdx].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); - if (attr) - CHECK_INCDEC_MODELVAR_ZERO(event, g_model.moduleData[moduleIdx].pxx.power, R9M_FCC_POWER_MAX); -#endif + if (g_model.moduleData[moduleIdx].type == MODULE_TYPE_R9M_LITE) { // 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); + 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); + if (attr) + CHECK_INCDEC_MODELVAR_ZERO(event, g_model.moduleData[moduleIdx].pxx.power, R9M_FCC_POWER_MAX); + } } - else { + else if (g_model.moduleData[moduleIdx].type == MODULE_TYPE_R9M_LITE) { + 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); + if (attr) { + CHECK_INCDEC_MODELVAR_ZERO(event, g_model.moduleData[moduleIdx].pxx.power, R9M_LITE_LBT_POWER_MAX); + } + if (attr && 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 + POPUP_WARNING(STR_REBIND); + } + reusableBuffer.moduleSetup.r9mPower = g_model.moduleData[moduleIdx].pxx.power; + } + } + else if (g_model.moduleData[moduleIdx].type == MODULE_TYPE_R9M) { 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); if (attr) { diff --git a/radio/src/gui/gui_common.h b/radio/src/gui/gui_common.h index 929c1c24f..ad60ee27a 100644 --- a/radio/src/gui/gui_common.h +++ b/radio/src/gui/gui_common.h @@ -160,11 +160,8 @@ const mm_protocol_definition *getMultiProtocolDefinition (uint8_t protocol); #define EXTERNAL_MODULE_OPTION_ROW (isModuleR9M(EXTERNAL_MODULE) || isModuleSBUS(EXTERNAL_MODULE) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW) -#if defined(PCBXLITE) && !defined(MODULE_R9M_FULLSIZE) - #define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isModuleR9M(EXTERNAL_MODULE)) ? (isModuleR9M_FCC_VARIANT(EXTERNAL_MODULE) ? TITLE_ROW : (uint8_t) 0) : HIDDEN_ROW -#else - #define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isModuleR9M(EXTERNAL_MODULE)) ? (uint8_t) 0 : HIDDEN_ROW -#endif +#define EXTERNAL_MODULE_POWER_ROW (isModuleMultimodule(EXTERNAL_MODULE) || isModuleR9M(EXTERNAL_MODULE)) ? (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_R9M_LITE ? 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/pulses.h b/radio/src/pulses/pulses.h index 5c327b952..e6d0c49e5 100644 --- a/radio/src/pulses/pulses.h +++ b/radio/src/pulses/pulses.h @@ -26,6 +26,7 @@ #include "pulses_common.h" #include "pulses/pxx1.h" #include "pulses/pxx2.h" +#include "modules.h" #if NUM_MODULES > 1 #define IS_RANGECHECK_ENABLE() (moduleState[0].mode == MODULE_MODE_RANGECHECK || moduleState[1].mode == MODULE_MODE_RANGECHECK) @@ -353,37 +354,25 @@ inline void SEND_FAILSAFE_1S() // for channels not set previously to HOLD or NOPULSE void setCustomFailsafe(uint8_t moduleIndex); -#if defined(PCBXLITE) && !defined(MODULE_R9M_FULLSIZE) #define LEN_R9M_REGION "\006" #define TR_R9M_REGION "FCC\0 ""EU\0 ""868MHz""915MHz" -#define LEN_R9M_FCC_POWER_VALUES "\010" -#define LEN_R9M_LBT_POWER_VALUES "\015" -#define TR_R9M_FCC_POWER_VALUES "(100 mW)" -#define TR_R9M_LBT_POWER_VALUES "25 mW 8ch\0 ""25 mW 16ch\0 ""100mW no tele" -#define LEN_R9MFLEX_FREQ "\006" -#define TR_R9MFLEX_FREQ "868Mhz""915Mhz" +#define LEN_R9M_LITE_FCC_POWER_VALUES "\010" +#define LEN_R9M_LITE_LBT_POWER_VALUES "\015" +#define TR_R9M_LITE_FCC_POWER_VALUES "(100 mW)" +#define TR_R9M_LITE_LBT_POWER_VALUES "25 mW 8ch\0 ""25 mW 16ch\0 ""100mW no tele" -enum R9MFCCPowerValues { - R9M_FCC_POWER_100 = 0, - R9M_FCC_POWER_MAX = R9M_FCC_POWER_100 +enum R9MLiteFCCPowerValues { + R9M_LITE_FCC_POWER_100 = 0, + R9M_LITE_FCC_POWER_MAX = R9M_LITE_FCC_POWER_100 }; -enum R9MLBTPowerValues { - R9M_LBT_POWER_25 = 0, - R9M_LBT_POWER_25_16, - R9M_LBT_POWER_100, - R9M_LBT_POWER_MAX = R9M_LBT_POWER_100 +enum R9MLiteLBTPowerValues { + R9M_LITE_LBT_POWER_25 = 0, + R9M_LITE_LBT_POWER_25_16, + R9M_LITE_LBT_POWER_100, + R9M_LITE_LBT_POWER_MAX = R9M_LITE_LBT_POWER_100 }; -#define BIND_TELEM_ALLOWED(idx) (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE) && (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power < R9M_LBT_POWER_100)) -#define BIND_CH9TO16_ALLOWED(idx) (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power != R9M_LBT_POWER_25) - -#else - -#define LEN_R9M_REGION "\006" -#define TR_R9M_REGION "FCC\0 ""EU\0 ""868MHz""915MHz" -#define LEN_R9MFLEX_FREQ "\006" -#define TR_R9MFLEX_FREQ "868Mhz""915Mhz" #define LEN_R9M_FCC_POWER_VALUES "\006" #define LEN_R9M_LBT_POWER_VALUES "\013" #define TR_R9M_FCC_POWER_VALUES "10 mW\0" "100 mW" "500 mW" "1 W\0" @@ -405,8 +394,6 @@ enum R9MLBTPowerValues { R9M_LBT_POWER_MAX = R9M_LBT_POWER_500 }; -#define BIND_TELEM_ALLOWED(idx) (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE) && (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power < R9M_LBT_POWER_200)) #define BIND_CH9TO16_ALLOWED(idx) (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power != R9M_LBT_POWER_25) -#endif - +#define BIND_TELEM_ALLOWED(idx) (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_R9M) ? (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE) && (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power < R9M_LBT_POWER_200)) : (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE) && (!isModuleR9M_LBT(idx) || g_model.moduleData[idx].pxx.power < R9M_LITE_LBT_POWER_100)) #endif // _PULSES_H_ diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index df7653ef0..0cb9e1733 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -93,9 +93,10 @@ const char STR_OPEN9X[] = ISTR(VTRAINERMODES) ISTR(MODULE_PROTOCOLS) ISTR(R9M_REGION) - ISTR(R9MFLEX_FREQ) ISTR(R9M_FCC_POWER_VALUES) ISTR(R9M_LBT_POWER_VALUES) + ISTR(R9M_LITE_FCC_POWER_VALUES) + ISTR(R9M_LITE_LBT_POWER_VALUES) ISTR(TELEMETRY_PROTOCOLS) ISTR(XJT_PROTOCOLS) ISTR(DSM_PROTOCOLS) diff --git a/radio/src/translations.h b/radio/src/translations.h index c5334cbe7..50fc20dfe 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -190,10 +190,11 @@ extern const char STR_OPEN9X[]; #define OFS_VTRAINERMODES (OFS_VFAILSAFE + sizeof(TR_VFAILSAFE)) #define OFS_MODULE_PROTOCOLS (OFS_VTRAINERMODES + sizeof(TR_VTRAINERMODES)) #define OFS_R9M_REGION (OFS_MODULE_PROTOCOLS + sizeof(TR_MODULE_PROTOCOLS)) - #define OFS_R9MFLEX_FREQ (OFS_R9M_REGION + sizeof(TR_R9M_REGION)) - #define OFS_R9M_FCC_POWER_VALUES (OFS_R9MFLEX_FREQ + sizeof(TR_R9MFLEX_FREQ)) + #define OFS_R9M_FCC_POWER_VALUES (OFS_R9M_REGION + sizeof(TR_R9M_REGION)) #define OFS_R9M_LBT_POWER_VALUES (OFS_R9M_FCC_POWER_VALUES + sizeof(TR_R9M_FCC_POWER_VALUES)) - #define OFS_TELEMETRY_PROTOCOLS (OFS_R9M_LBT_POWER_VALUES + sizeof(TR_R9M_LBT_POWER_VALUES)) + #define OFS_R9M_LITE_FCC_POWER_VALUES (OFS_R9M_LBT_POWER_VALUES + sizeof(TR_R9M_LBT_POWER_VALUES)) + #define OFS_R9M_LITE_LBT_POWER_VALUES (OFS_R9M_LITE_FCC_POWER_VALUES + sizeof(TR_R9M_LITE_FCC_POWER_VALUES)) + #define OFS_TELEMETRY_PROTOCOLS (OFS_R9M_LITE_LBT_POWER_VALUES + sizeof(TR_R9M_LITE_LBT_POWER_VALUES)) #define OFS_XJT_PROTOCOLS (OFS_TELEMETRY_PROTOCOLS + sizeof(TR_TELEMETRY_PROTOCOLS)) #define OFS_DSM_PROTOCOLS (OFS_XJT_PROTOCOLS + sizeof(TR_XJT_PROTOCOLS)) #if defined(MULTIMODULE) @@ -298,9 +299,10 @@ extern const char STR_OPEN9X[]; #define STR_VTRAINERMODES (STR_OPEN9X + OFS_VTRAINERMODES) #define STR_MODULE_PROTOCOLS (STR_OPEN9X + OFS_MODULE_PROTOCOLS) #define STR_R9M_REGION (STR_OPEN9X + OFS_R9M_REGION) - #define STR_R9MFLEX_FREQ (STR_OPEN9X + OFS_R9MFLEX_FREQ) #define STR_R9M_FCC_POWER_VALUES (STR_OPEN9X + OFS_R9M_FCC_POWER_VALUES) #define STR_R9M_LBT_POWER_VALUES (STR_OPEN9X + OFS_R9M_LBT_POWER_VALUES) + #define STR_R9M_LITE_FCC_POWER_VALUES (STR_OPEN9X + OFS_R9M_LITE_FCC_POWER_VALUES) + #define STR_R9M_LITE_LBT_POWER_VALUES (STR_OPEN9X + OFS_R9M_LITE_LBT_POWER_VALUES) #define STR_TELEMETRY_PROTOCOLS (STR_OPEN9X + OFS_TELEMETRY_PROTOCOLS) #define STR_XJT_PROTOCOLS (STR_OPEN9X + OFS_XJT_PROTOCOLS) #define STR_DSM_PROTOCOLS (STR_OPEN9X + OFS_DSM_PROTOCOLS)