Handle both R9M and R9M Lite

This commit is contained in:
3djc
2019-04-25 11:25:55 +02:00
parent 452a7253f1
commit a75548c360
5 changed files with 48 additions and 47 deletions
+24 -10
View File
@@ -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) {
+2 -5
View File
@@ -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);
+14 -27
View File
@@ -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_
+2 -1
View File
@@ -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)
+6 -4
View File
@@ -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)