Bsongis/r9m modes (#6577)

R9M / R9M Lite / R9M Lite PRO modes
This commit is contained in:
Bertrand Songis
2019-07-17 23:15:31 +02:00
committed by GitHub
parent cd10f4cde5
commit 99c8b4576b
16 changed files with 299 additions and 296 deletions
+16 -55
View File
@@ -84,6 +84,7 @@ enum MenuModelSetupItems {
ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_TYPE,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_POWER,
#if defined(MULTIMODULE)
ITEM_MODEL_SETUP_EXTERNAL_MODULE_STATUS,
ITEM_MODEL_SETUP_EXTERNAL_MODULE_SYNCSTATUS,
@@ -95,7 +96,6 @@ enum MenuModelSetupItems {
#if defined(MULTIMODULE)
ITEM_MODEL_SETUP_EXTERNAL_MODULE_AUTOBIND,
#endif
ITEM_MODEL_SETUP_EXTERNAL_MODULE_POWER,
ITEM_MODEL_SETUP_TRAINER_LABEL,
ITEM_MODEL_SETUP_TRAINER_MODE,
#if defined(BLUETOOTH)
@@ -117,6 +117,8 @@ enum MenuModelSetupItems {
#define CURRENT_MODULE_EDITED(k) (k >= ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE)
#define CURRENT_RECEIVER_EDITED(k) (k - (k >= ITEM_MODEL_SETUP_EXTERNAL_MODULE_LABEL ? k : ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_RECEIVER_1))
#include "common/stdlcd/model_setup_pxx1.cpp"
bool isPXX2ReceiverEmpty(uint8_t moduleIdx, uint8_t receiverIdx)
{
return is_memclear(g_model.moduleData[moduleIdx].pxx2.receiverName[receiverIdx], PXX2_LEN_RX_NAME);
@@ -178,7 +180,6 @@ void onPXX2R9MBindModeMenu(const char * result)
#endif
}
#define HEADER_LINE 0
// TODO code duplicated
@@ -388,33 +389,6 @@ void checkModelIdUnique(uint8_t moduleIdx)
}
}
void onBindMenu(const char * result)
{
uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition);
if (result == STR_BINDING_1_8_TELEM_ON) {
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
}
else if (result == STR_BINDING_1_8_TELEM_OFF) {
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
}
else if (result == STR_BINDING_9_16_TELEM_ON) {
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true;
}
else if (result == STR_BINDING_9_16_TELEM_OFF) {
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true;
}
else {
return;
}
moduleState[moduleIdx].mode = MODULE_MODE_BIND;
}
void onModelSetupBitmapMenu(const char * result)
{
if (result == STR_UPDATE_LIST) {
@@ -622,13 +596,13 @@ bool menuModelSetup(event_t event)
LABEL(ExternalModule),
EXTERNAL_MODULE_MODE_ROWS,
EXTERNAL_MODULE_POWER_ROW,
MULTIMODULE_STATUS_ROWS
EXTERNAL_MODULE_CHANNELS_ROWS,
EXTERNAL_MODULE_BIND_ROWS,
FAILSAFE_ROWS(EXTERNAL_MODULE),
EXTERNAL_MODULE_OPTION_ROW,
MULTIMODULE_MODULE_ROWS
EXTERNAL_MODULE_POWER_ROW,
TRAINER_ROWS
});
@@ -1468,29 +1442,9 @@ bool menuModelSetup(event_t event)
if (attr && l_posHorz>0) {
if (s_editMode>0) {
if (l_posHorz == 1) {
if (isModuleR9MNonAccess(moduleIdx) || (isModuleXJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol == MODULE_SUBTYPE_PXX1_ACCST_D16)) {
if (isModuleR9MNonAccess(moduleIdx) || isModuleD16(moduleIdx)) {
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
uint8_t default_selection = 0; // R9M_LBT should default to 0 as available options are variables
if (isModuleR9M_LBT(moduleIdx)) {
if (BIND_TELEM_ALLOWED(moduleIdx))
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON);
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF);
if (BIND_TELEM_ALLOWED(moduleIdx) && BIND_CH9TO16_ALLOWED(moduleIdx))
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON);
if (BIND_CH9TO16_ALLOWED(moduleIdx))
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF);
}
else {
if (BIND_TELEM_ALLOWED(moduleIdx))
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON);
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF);
if (BIND_TELEM_ALLOWED(moduleIdx))
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON);
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF);
default_selection = g_model.moduleData[moduleIdx].pxx.receiver_telem_off + (g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 << 1);
}
POPUP_MENU_SELECT_ITEM(default_selection);
POPUP_MENU_START(onBindMenu);
startBindMenu(moduleIdx);
continue;
}
if (moduleState[moduleIdx].mode == MODULE_MODE_BIND) {
@@ -1536,7 +1490,7 @@ bool menuModelSetup(event_t event)
menuHorizontalPosition = 0;
if (menuHorizontalPosition==0) {
if (s_editMode>0) {
CHECK_INCDEC_MODELVAR_ZERO(event, moduleData.failsafeMode, FAILSAFE_LAST);
CHECK_INCDEC_MODELVAR_ZERO(event, moduleData.failsafeMode, isModuleR9M(moduleIdx) ? FAILSAFE_NOPULSES : FAILSAFE_LAST);
if (checkIncDec_Ret) SEND_FAILSAFE_NOW(moduleIdx);
}
}
@@ -1592,12 +1546,19 @@ bool menuModelSetup(event_t event)
}
}
#endif
if (isModuleSBUS(moduleIdx)) {
if (isModuleR9MNonAccess(moduleIdx)) {
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MODULE_TELEMETRY);
if (isSportLineUsedByInternalModule())
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_DISABLE_INTERNAL);
else
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_TELEM_ON);
}
else if (isModuleSBUS(moduleIdx)) {
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_WARN_BATTVOLTAGE);
drawValueWithUnit(MODEL_SETUP_4TH_COLUMN, y, getBatteryVoltage(), UNIT_VOLTS, attr|PREC2|LEFT);
}
}
break;
}
case ITEM_MODEL_SETUP_EXTERNAL_MODULE_POWER:
{