mirror of
https://github.com/opentx/opentx.git
synced 2025-07-25 01:05:10 +03:00
Streamline multi interface (#7524)
This commit is contained in:
parent
07b096ff44
commit
9c632b582d
23 changed files with 147 additions and 36 deletions
|
@ -313,7 +313,7 @@ void onBluetoothConnectMenu(const char * result)
|
|||
MULTIMODULE_SUBTYPE_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_SUBTYPE */ \
|
||||
MULTIMODULE_STATUS_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_STATUS, ITEM_MODEL_SETUP_INTERNAL_MODULE_SYNCSTATUS */ \
|
||||
MODULE_CHANNELS_ROWS(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_CHANNELS */ \
|
||||
IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(IF_INTERNAL_MODULE_ON(isModuleRxNumAvailable(INTERNAL_MODULE) ? (uint8_t)2 : (uint8_t)1))), /* *ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE */\
|
||||
IF_NOT_ACCESS_MODULE_RF(INTERNAL_MODULE, IF_INTERNAL_MODULE_ON(IF_INTERNAL_MODULE_ON(MODULE_BIND_ROWS(INTERNAL_MODULE)))), /* *ITEM_MODEL_SETUP_INTERNAL_MODULE_NOT_ACCESS_RXNUM_BIND_RANGE */\
|
||||
IF_ACCESS_MODULE_RF(INTERNAL_MODULE, 0), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_PXX2_MODEL_NUM */ \
|
||||
MODULE_OPTION_ROW(INTERNAL_MODULE), /* ITEM_MODEL_SETUP_INTERNAL_MODULE_OPTIONS */ \
|
||||
MULTIMODULE_MODULE_ROWS(INTERNAL_MODULE) /* ITEM_MODEL_SETUP_INTERNAL_MODULE_AUTOBIND */ \
|
||||
|
@ -1000,7 +1000,25 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawMultiProtocolString(MODEL_SETUP_2ND_COLUMN, y, moduleIdx, multi_rfProto, attr);
|
||||
if (attr) {
|
||||
int multiRfProto = g_model.moduleData[moduleIdx].getMultiProtocol();
|
||||
MultiModuleStatus &status = getMultiModuleStatus(moduleIdx);
|
||||
if (status.isValid()) {
|
||||
int8_t direction = checkIncDec(event, 0, -1, 1);
|
||||
if (direction == -1) {
|
||||
if (multiRfProto == MODULE_SUBTYPE_MULTI_FRSKY)
|
||||
multiRfProto = MODULE_SUBTYPE_MULTI_FRSKYX_RX;
|
||||
else
|
||||
multiRfProto = convertMultiToOtx(status.protocolPrev);
|
||||
}
|
||||
if (direction == 1) {
|
||||
if (multiRfProto == MODULE_SUBTYPE_MULTI_FRSKY)
|
||||
multiRfProto = MODULE_SUBTYPE_MULTI_FRSKYX2;
|
||||
else
|
||||
multiRfProto = convertMultiToOtx(status.protocolNext);
|
||||
}
|
||||
}
|
||||
else {
|
||||
CHECK_INCDEC_MODELVAR_CHECK(event, multiRfProto, MODULE_SUBTYPE_MULTI_FIRST, MULTI_MAX_PROTOCOLS, isMultiProtocolSelectable);
|
||||
}
|
||||
if (checkIncDec_Ret) {
|
||||
g_model.moduleData[moduleIdx].setMultiProtocol(multiRfProto);
|
||||
g_model.moduleData[moduleIdx].subType = 0;
|
||||
|
@ -1326,6 +1344,7 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
}
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN+xOffsetBind, y, STR_MODULE_BIND, l_posHorz==1 ? attr : 0);
|
||||
if (!IS_RX_MULTI(moduleIdx))
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN+MODEL_SETUP_RANGE_OFS+xOffsetBind, y, STR_MODULE_RANGE, l_posHorz==2 ? attr : 0);
|
||||
uint8_t newFlag = 0;
|
||||
#if defined(MULTIMODULE)
|
||||
|
@ -1586,7 +1605,7 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
#if defined(MULTIMODULE)
|
||||
else if (isModuleMultimodule(moduleIdx)) {
|
||||
module.multi.lowPowerMode = editCheckBox(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, IS_RX_MULTI(moduleIdx) ? STR_MULTI_LNA_DISABLE : STR_MULTI_LOWPOWER, attr, event);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -907,7 +907,25 @@ void menuModelSetup(event_t event)
|
|||
switch (menuHorizontalPosition) {
|
||||
case 0: {
|
||||
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol();
|
||||
MultiModuleStatus &status = getMultiModuleStatus(EXTERNAL_MODULE);
|
||||
if (status.isValid()) {
|
||||
int8_t direction = checkIncDec(event, 0, -1, 1);
|
||||
if (direction == -1) {
|
||||
if (multiRfProto == MODULE_SUBTYPE_MULTI_FRSKY)
|
||||
multiRfProto = MODULE_SUBTYPE_MULTI_FRSKYX_RX;
|
||||
else
|
||||
multiRfProto = convertMultiToOtx(status.protocolPrev);
|
||||
}
|
||||
if (direction == 1) {
|
||||
if (multiRfProto == MODULE_SUBTYPE_MULTI_FRSKY)
|
||||
multiRfProto = MODULE_SUBTYPE_MULTI_FRSKYX2;
|
||||
else
|
||||
multiRfProto = convertMultiToOtx(status.protocolNext);
|
||||
}
|
||||
}
|
||||
else {
|
||||
CHECK_INCDEC_MODELVAR_CHECK(event, multiRfProto, MODULE_SUBTYPE_MULTI_FIRST, MULTI_MAX_PROTOCOLS, isMultiProtocolSelectable);
|
||||
}
|
||||
if (checkIncDec_Ret) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
|
||||
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
|
||||
|
@ -1122,8 +1140,13 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawText(INDENT_WIDTH, y, STR_RECEIVER_NUM);
|
||||
}
|
||||
if (isModuleBindRangeAvailable(moduleIdx)) {
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz==0 ? attr : 0) | LEADING0|LEFT, 2);
|
||||
if (!IS_RX_MULTI(moduleIdx)) {
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz == 0 ? attr : 0) | LEADING0 | LEFT, 2);
|
||||
bindButtonPos = lcdNextPos + FW;
|
||||
}
|
||||
else {
|
||||
bindButtonPos = MODEL_SETUP_2ND_COLUMN;
|
||||
}
|
||||
if (attr && l_posHorz==0) {
|
||||
if (s_editMode>0) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], getMaxRxNum(moduleIdx));
|
||||
|
@ -1141,6 +1164,7 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
}
|
||||
lcdDrawText(bindButtonPos, y, STR_MODULE_BIND, l_posHorz==1 ? attr : 0);
|
||||
if (!IS_RX_MULTI(moduleIdx))
|
||||
lcdDrawText(lcdNextPos + FW, y, STR_MODULE_RANGE, l_posHorz==2 ? attr : 0);
|
||||
uint8_t newFlag = 0;
|
||||
#if defined(MULTIMODULE)
|
||||
|
@ -1306,7 +1330,7 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
#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);
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.lowPowerMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.lowPowerMode, MODEL_SETUP_2ND_COLUMN, y, IS_RX_MULTI(moduleIdx) ? STR_MULTI_LNA_DISABLE : STR_MULTI_LOWPOWER, attr, event);
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
|
|
@ -1114,7 +1114,25 @@ bool menuModelSetup(event_t event)
|
|||
#if defined(MULTIMODULE)
|
||||
else if (isModuleMultimodule(moduleIdx)) {
|
||||
int multiRfProto = g_model.moduleData[moduleIdx].getMultiProtocol();
|
||||
MultiModuleStatus &status = getMultiModuleStatus(moduleIdx);
|
||||
if (status.isValid()) {
|
||||
int8_t direction = checkIncDec(event, 0, -1, 1);
|
||||
if (direction == -1) {
|
||||
if (multiRfProto == MODULE_SUBTYPE_MULTI_FRSKY)
|
||||
multiRfProto = MODULE_SUBTYPE_MULTI_FRSKYX_RX;
|
||||
else
|
||||
multiRfProto = convertMultiToOtx(status.protocolPrev);
|
||||
}
|
||||
if (direction == 1) {
|
||||
if (multiRfProto == MODULE_SUBTYPE_MULTI_FRSKY)
|
||||
multiRfProto = MODULE_SUBTYPE_MULTI_FRSKYX2;
|
||||
else
|
||||
multiRfProto = convertMultiToOtx(status.protocolNext);
|
||||
}
|
||||
}
|
||||
else {
|
||||
CHECK_INCDEC_MODELVAR_CHECK(event, multiRfProto, MODULE_SUBTYPE_MULTI_FIRST, MULTI_MAX_PROTOCOLS, isMultiProtocolSelectable);
|
||||
}
|
||||
if (checkIncDec_Ret) {
|
||||
g_model.moduleData[moduleIdx].setMultiProtocol(multiRfProto);
|
||||
g_model.moduleData[moduleIdx].subType = 0;
|
||||
|
@ -1336,6 +1354,7 @@ bool menuModelSetup(event_t event)
|
|||
{
|
||||
lcdDrawText(MENUS_MARGIN_LEFT + INDENT_WIDTH, y, STR_MODULE);
|
||||
drawButton(MODEL_SETUP_2ND_COLUMN, y, STR_REGISTER, (menuHorizontalPosition == 0 ? attr : 0));
|
||||
if (!IS_RX_MULTI(moduleIdx))
|
||||
drawButton(MODEL_SETUP_2ND_COLUMN + MODEL_SETUP_SET_FAILSAFE_OFS, y, STR_MODULE_RANGE, (menuHorizontalPosition == 1 ? attr : 0));
|
||||
if (attr) {
|
||||
if (moduleState[moduleIdx].mode == MODULE_MODE_NORMAL && s_editMode > 0) {
|
||||
|
@ -1520,6 +1539,7 @@ bool menuModelSetup(event_t event)
|
|||
}
|
||||
}
|
||||
drawButton(MODEL_SETUP_2ND_COLUMN+xOffsetBind, y, STR_MODULE_BIND, (moduleState[moduleIdx].mode == MODULE_MODE_BIND ? BUTTON_ON : BUTTON_OFF) | (l_posHorz==1 ? attr : 0));
|
||||
if (!IS_RX_MULTI(moduleIdx))
|
||||
drawButton(MODEL_SETUP_2ND_COLUMN+MODEL_SETUP_RANGE_OFS+xOffsetBind, y, STR_MODULE_RANGE, (moduleState[moduleIdx].mode == MODULE_MODE_RANGECHECK ? BUTTON_ON : BUTTON_OFF) | (l_posHorz==2 ? attr : 0));
|
||||
uint8_t newFlag = 0;
|
||||
#if defined(MULTIMODULE)
|
||||
|
@ -1683,7 +1703,7 @@ bool menuModelSetup(event_t event)
|
|||
}
|
||||
#if defined(MULTIMODULE)
|
||||
else if (isModuleMultimodule(moduleIdx)) {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_LOWPOWER);
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, IS_RX_MULTI(moduleIdx) ? STR_MULTI_LNA_DISABLE : STR_MULTI_LOWPOWER);
|
||||
g_model.moduleData[moduleIdx].multi.lowPowerMode = editCheckBox(g_model.moduleData[moduleIdx].multi.lowPowerMode, MODEL_SETUP_2ND_COLUMN, y, attr, event);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -789,7 +789,7 @@ int getFirstAvailable(int min, int max, IsValueAvailable isValueAvailable)
|
|||
#if defined(MULTIMODULE)
|
||||
|
||||
// This maps OpenTX multi type with Pascal's Multi type
|
||||
uint8_t convertMultiProtocol(uint8_t moduleIdx, uint8_t type)
|
||||
uint8_t multiConvertOtxToMulti(uint8_t moduleIdx, uint8_t type)
|
||||
{
|
||||
|
||||
// 15 for Multimodule is FrskyX or D16 which we map as a subprotocol of 3 (FrSky)
|
||||
|
@ -818,6 +818,27 @@ uint8_t convertMultiProtocol(uint8_t moduleIdx, uint8_t type)
|
|||
return type;
|
||||
}
|
||||
|
||||
// This maps multi type to OpenTX number, type ONLY (no subtype)
|
||||
int convertMultiToOtx(int type)
|
||||
{
|
||||
if (type == 3) //FrSkyD
|
||||
return MODULE_SUBTYPE_MULTI_FRSKY;
|
||||
|
||||
if (type == 15) //FrSkyX
|
||||
return MODULE_SUBTYPE_MULTI_FRSKY;
|
||||
|
||||
if (type == 25) //FrSkyV
|
||||
return MODULE_SUBTYPE_MULTI_FRSKY;
|
||||
|
||||
if (type > 25)
|
||||
type = type - 1;
|
||||
|
||||
if (type > 15)
|
||||
type = type - 1;
|
||||
|
||||
return type - 1; //Multi list starts at 1
|
||||
}
|
||||
|
||||
// Third row is number of subtypes -1 (max valid subtype)
|
||||
#define NO_SUBTYPE nullptr
|
||||
|
||||
|
@ -866,6 +887,7 @@ const char STR_SUBTYPE_ZSX[] = "\007""280JJRC";
|
|||
const char STR_SUBTYPE_FLYZONE[] = "\005""FZ410";
|
||||
const char STR_SUBTYPE_FX816[] = "\003""P38";
|
||||
const char STR_SUBTYPE_ESKY150[] = "\003""4CH""7CH";
|
||||
const char STR_SUBTYPE_FRSKYL[] = "\010""LR12\0 ""LR12 6ch";
|
||||
|
||||
const char* mm_options_strings::options[] = {
|
||||
nullptr,
|
||||
|
@ -925,6 +947,8 @@ const mm_protocol_definition multi_protocols[] = {
|
|||
{MODULE_SUBTYPE_MULTI_FX816, 0, false, false, STR_SUBTYPE_FX816, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_HOTT, 0, true, false, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKYX2, 4, true, false, STR_SUBTYPE_FRSKYX2, STR_MULTI_RFTUNE},
|
||||
{MODULE_SUBTYPE_MULTI_PROPEL, 0, false, false, NO_SUBTYPE, nullptr},
|
||||
{MODULE_SUBTYPE_MULTI_FRSKYL, 1, false, false, STR_SUBTYPE_FRSKYL, STR_MULTI_RFTUNE},
|
||||
{MM_RF_CUSTOM_SELECTED, 7, true, true, NO_SUBTYPE, STR_MULTI_OPTION},
|
||||
|
||||
// Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff)
|
||||
|
|
|
@ -122,6 +122,8 @@ void drawSensorCustomValue(coord_t x, coord_t y, uint8_t sensor, int32_t value,
|
|||
void drawSourceCustomValue(coord_t x, coord_t y, source_t channel, int32_t val, LcdFlags flags=0);
|
||||
void drawSourceValue(coord_t x, coord_t y, source_t channel, LcdFlags flags=0);
|
||||
|
||||
int convertMultiToOtx(int type);
|
||||
|
||||
void drawCurve(coord_t offset=0);
|
||||
|
||||
#if defined(COLORLCD)
|
||||
|
@ -139,6 +141,9 @@ void runFatalErrorScreen(const char * message);
|
|||
|
||||
inline uint8_t MODULE_BIND_ROWS(int moduleIdx)
|
||||
{
|
||||
if (IS_RX_MULTI(moduleIdx))
|
||||
return 0;
|
||||
|
||||
if (isModuleXJTD8(moduleIdx) || isModuleSBUS(moduleIdx))
|
||||
return 1;
|
||||
|
||||
|
@ -150,7 +155,7 @@ inline uint8_t MODULE_BIND_ROWS(int moduleIdx)
|
|||
|
||||
inline uint8_t MODULE_CHANNELS_ROWS(int moduleIdx)
|
||||
{
|
||||
if (!IS_MODULE_ENABLED(moduleIdx))
|
||||
if (!IS_MODULE_ENABLED(moduleIdx) || IS_RX_MULTI(moduleIdx))
|
||||
return HIDDEN_ROW;
|
||||
|
||||
if (isModuleDSM2(moduleIdx) || isModuleCrossfire(moduleIdx) || isModuleSBUS(moduleIdx) || (isModuleMultimodule(moduleIdx) && g_model.moduleData[moduleIdx].getMultiProtocol() != MODULE_SUBTYPE_MULTI_DSM2))
|
||||
|
@ -250,7 +255,7 @@ inline uint8_t MULTIMODULE_HASOPTIONS(uint8_t moduleIdx)
|
|||
return false;
|
||||
}
|
||||
|
||||
#define MULTIMODULE_MODULE_ROWS(moduleIdx) MULTIMODULE_PROTOCOL_KNOWN(moduleIdx) ? (uint8_t) 0 : HIDDEN_ROW, MULTIMODULE_PROTOCOL_KNOWN(moduleIdx) ? (uint8_t) 0 : HIDDEN_ROW, MULTI_DISABLE_CHAN_MAP_ROW(moduleIdx), // AUTOBIND, DISABLE TELEM, DISABLE CN.MAP
|
||||
#define MULTIMODULE_MODULE_ROWS(moduleIdx) (MULTIMODULE_PROTOCOL_KNOWN(moduleIdx) && !IS_RX_MULTI(moduleIdx)) ? (uint8_t) 0 : HIDDEN_ROW, (MULTIMODULE_PROTOCOL_KNOWN(moduleIdx) && !IS_RX_MULTI(moduleIdx)) ? (uint8_t) 0 : HIDDEN_ROW, MULTI_DISABLE_CHAN_MAP_ROW(moduleIdx), // AUTOBIND, DISABLE TELEM, DISABLE CN.MAP
|
||||
#define MULTIMODULE_TYPE_ROW(moduleIdx) isModuleMultimodule(moduleIdx) ? MULTIMODULE_RFPROTO_COLUMNS(moduleIdx) : HIDDEN_ROW,
|
||||
#define MULTIMODULE_STATUS_ROWS(moduleIdx) isModuleMultimodule(moduleIdx) ? TITLE_ROW : HIDDEN_ROW, (isModuleMultimodule(moduleIdx) && getMultiSyncStatus(moduleIdx).isValid()) ? TITLE_ROW : HIDDEN_ROW,
|
||||
#define MULTIMODULE_MODE_ROWS(moduleIdx) (g_model.moduleData[moduleIdx].multi.customProto) ? (uint8_t) 3 : MULTIMODULE_HAS_SUBTYPE(moduleIdx) ? (uint8_t)2 : (uint8_t)1
|
||||
|
|
|
@ -71,7 +71,7 @@ class MultiFirmwareInformation {
|
|||
|
||||
bool isMultiInternalFirmware() const
|
||||
{
|
||||
return (boardType == FIRMWARE_MULTI_STM && telemetryInversion == false && optibootSupport == true && bootloaderCheck == true && telemetryType == FIRMWARE_MULTI_TELEM_MULTI_TELEMETRY);
|
||||
return (boardType == FIRMWARE_MULTI_STM && optibootSupport == true && bootloaderCheck == true && telemetryType == FIRMWARE_MULTI_TELEM_MULTI_TELEMETRY);
|
||||
}
|
||||
|
||||
bool isMultiExternalFirmware() const
|
||||
|
|
|
@ -102,68 +102,70 @@ enum ModuleSubtypeR9M {
|
|||
enum ModuleSubtypeMulti {
|
||||
MODULE_SUBTYPE_MULTI_FIRST = 0,
|
||||
MODULE_SUBTYPE_MULTI_FLYSKY = MODULE_SUBTYPE_MULTI_FIRST,
|
||||
MODULE_SUBTYPE_MULTI_HUBSAN,
|
||||
MODULE_SUBTYPE_MULTI_FRSKY,
|
||||
MODULE_SUBTYPE_MULTI_HISKY,
|
||||
MODULE_SUBTYPE_MULTI_V2X2,
|
||||
MODULE_SUBTYPE_MULTI_DSM2,
|
||||
MODULE_SUBTYPE_MULTI_HUBSAN, //1
|
||||
MODULE_SUBTYPE_MULTI_FRSKY, //2
|
||||
MODULE_SUBTYPE_MULTI_HISKY, //3
|
||||
MODULE_SUBTYPE_MULTI_V2X2, //4
|
||||
MODULE_SUBTYPE_MULTI_DSM2, //5
|
||||
MODULE_SUBTYPE_MULTI_DEVO,
|
||||
MODULE_SUBTYPE_MULTI_YD717,
|
||||
MODULE_SUBTYPE_MULTI_KN,
|
||||
MODULE_SUBTYPE_MULTI_SYMAX,
|
||||
MODULE_SUBTYPE_MULTI_SLT,
|
||||
MODULE_SUBTYPE_MULTI_SLT, //10
|
||||
MODULE_SUBTYPE_MULTI_CX10,
|
||||
MODULE_SUBTYPE_MULTI_CG023,
|
||||
MODULE_SUBTYPE_MULTI_BAYANG,
|
||||
MODULE_SUBTYPE_MULTI_ESky,
|
||||
MODULE_SUBTYPE_MULTI_MT99XX,
|
||||
MODULE_SUBTYPE_MULTI_MT99XX, //15
|
||||
MODULE_SUBTYPE_MULTI_MJXQ,
|
||||
MODULE_SUBTYPE_MULTI_SHENQI,
|
||||
MODULE_SUBTYPE_MULTI_FY326,
|
||||
MODULE_SUBTYPE_MULTI_SFHSS,
|
||||
MODULE_SUBTYPE_MULTI_J6PRO,
|
||||
MODULE_SUBTYPE_MULTI_J6PRO, //20
|
||||
MODULE_SUBTYPE_MULTI_FQ777,
|
||||
MODULE_SUBTYPE_MULTI_ASSAN,
|
||||
MODULE_SUBTYPE_MULTI_HONTAI,
|
||||
MODULE_SUBTYPE_MULTI_OLRS,
|
||||
MODULE_SUBTYPE_MULTI_FS_AFHDS2A,
|
||||
MODULE_SUBTYPE_MULTI_FS_AFHDS2A, //25
|
||||
MODULE_SUBTYPE_MULTI_Q2X2,
|
||||
MODULE_SUBTYPE_MULTI_WK_2X01,
|
||||
MODULE_SUBTYPE_MULTI_Q303,
|
||||
MODULE_SUBTYPE_MULTI_GW008,
|
||||
MODULE_SUBTYPE_MULTI_DM002,
|
||||
MODULE_SUBTYPE_MULTI_DM002, //30
|
||||
MODULE_SUBTYPE_MULTI_CABELL,
|
||||
MODULE_SUBTYPE_MULTI_ESKY150,
|
||||
MODULE_SUBTYPE_MULTI_H83D,
|
||||
MODULE_SUBTYPE_MULTI_CORONA,
|
||||
MODULE_SUBTYPE_MULTI_CFLIE,
|
||||
MODULE_SUBTYPE_MULTI_CFLIE, //35
|
||||
MODULE_SUBTYPE_MULTI_HITEC,
|
||||
MODULE_SUBTYPE_MULTI_WFLY,
|
||||
MODULE_SUBTYPE_MULTI_BUGS,
|
||||
MODULE_SUBTYPE_MULTI_BUGS_MINI,
|
||||
MODULE_SUBTYPE_MULTI_TRAXXAS,
|
||||
MODULE_SUBTYPE_MULTI_TRAXXAS, //40
|
||||
MODULE_SUBTYPE_MULTI_NCC1701,
|
||||
MODULE_SUBTYPE_MULTI_E01X,
|
||||
MODULE_SUBTYPE_MULTI_V911S,
|
||||
MODULE_SUBTYPE_MULTI_GD00X,
|
||||
MODULE_SUBTYPE_MULTI_V761,
|
||||
MODULE_SUBTYPE_MULTI_V761, //45
|
||||
MODULE_SUBTYPE_MULTI_KF606,
|
||||
MODULE_SUBTYPE_MULTI_REDPINE,
|
||||
MODULE_SUBTYPE_MULTI_POTENSIC,
|
||||
MODULE_SUBTYPE_MULTI_ZSX,
|
||||
MODULE_SUBTYPE_MULTI_FLYZONE,
|
||||
MODULE_SUBTYPE_MULTI_FLYZONE, //50
|
||||
MODULE_SUBTYPE_MULTI_SCANNER,
|
||||
MODULE_SUBTYPE_MULTI_FRSKYX_RX,
|
||||
MODULE_SUBTYPE_MULTI_AFHDS2A_RX,
|
||||
MODULE_SUBTYPE_MULTI_HOTT,
|
||||
MODULE_SUBTYPE_MULTI_FX816,
|
||||
MODULE_SUBTYPE_MULTI_FX816, //55
|
||||
MODULE_SUBTYPE_MULTI_BAYANG_RX,
|
||||
MODULE_SUBTYPE_MULTI_PELIKAN,
|
||||
MODULE_SUBTYPE_MULTI_TIGER,
|
||||
MODULE_SUBTYPE_MULTI_XK,
|
||||
MODULE_SUBTYPE_MULTI_XN297DUMP,
|
||||
MODULE_SUBTYPE_MULTI_XN297DUMP, //60
|
||||
MODULE_SUBTYPE_MULTI_FRSKYX2,
|
||||
MODULE_SUBTYPE_MULTI_FRSKY_R9,
|
||||
MODULE_SUBTYPE_MULTI_PROPEL,
|
||||
MODULE_SUBTYPE_MULTI_FRSKYL,
|
||||
MODULE_SUBTYPE_MULTI_LAST = MODULE_SUBTYPE_MULTI_FRSKY_R9
|
||||
};
|
||||
#define MODULE_SUBTYPE_MULTI_XN297DP 63-3
|
||||
|
|
|
@ -384,6 +384,9 @@ inline bool isModuleRxNumAvailable(uint8_t moduleIdx)
|
|||
if (isModuleISRM(moduleIdx))
|
||||
return true;
|
||||
|
||||
if (IS_RX_MULTI(moduleIdx))
|
||||
return false;
|
||||
|
||||
if (isModuleMultimodule(moduleIdx))
|
||||
return true;
|
||||
|
||||
|
|
|
@ -555,7 +555,7 @@ void MultiModuleStatus::getStatusString(char * statusText) const
|
|||
return;
|
||||
}
|
||||
|
||||
if (major <= 1 && minor <= 3 && revision <= 0 && patch < 87 && SLOW_BLINK_ON_PHASE) {
|
||||
if (major <= 1 && minor <= 3 && revision <= 0 && patch < 91 && SLOW_BLINK_ON_PHASE) {
|
||||
strcpy(statusText, STR_MODULE_UPGRADE);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -111,6 +111,7 @@ extern uint8_t telemetryProtocol;
|
|||
#define IS_D16_MULTI(module) (((g_model.moduleData[module].getMultiProtocol() == MODULE_SUBTYPE_MULTI_FRSKY) && (g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16 || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_8CH || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_LBT || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_LBT_8CH || g_model.moduleData[module].subType == MM_RF_FRSKY_SUBTYPE_D16_CLONED)) \
|
||||
|| (g_model.moduleData[module].getMultiProtocol() == MODULE_SUBTYPE_MULTI_FRSKYX2))
|
||||
#define IS_HOTT_MULTI(module) (g_model.moduleData[module].getMultiProtocol() == MODULE_SUBTYPE_MULTI_HOTT)
|
||||
#define IS_RX_MULTI(module) ((g_model.moduleData[module].getMultiProtocol() == MODULE_SUBTYPE_MULTI_AFHDS2A_RX) || (g_model.moduleData[module].getMultiProtocol() == MODULE_SUBTYPE_MULTI_FRSKYX_RX) || (g_model.moduleData[module].getMultiProtocol() == MODULE_SUBTYPE_MULTI_BAYANG_RX))
|
||||
#if defined(HARDWARE_INTERNAL_MODULE)
|
||||
#define IS_FRSKY_SPORT_PROTOCOL() (telemetryProtocol == PROTOCOL_TELEMETRY_FRSKY_SPORT || (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE && (IS_D16_MULTI(INTERNAL_MODULE)||IS_D16_MULTI(EXTERNAL_MODULE))))
|
||||
#else
|
||||
|
|
|
@ -695,6 +695,7 @@ const char STR_DISABLE_CH_MAP[] = TR_DISABLE_CH_MAP;
|
|||
const char STR_DISABLE_TELEM[] = TR_DISABLE_TELEM;
|
||||
const char STR_MULTI_DSM_AUTODTECT[] = TR_MULTI_DSM_AUTODTECT;
|
||||
const char STR_MULTI_LOWPOWER[] = TR_MULTI_LOWPOWER;
|
||||
const char STR_MULTI_LNA_DISABLE[] = TR_MULTI_LNA_DISABLE;
|
||||
const char STR_MODULE_NO_SERIAL_MODE[] = TR_MODULE_NO_SERIAL_MODE;
|
||||
const char STR_MODULE_NO_INPUT[] = TR_MODULE_NO_INPUT;
|
||||
const char STR_MODULE_WAITFORBIND[] = TR_MODULE_WAITFORBIND;
|
||||
|
|
|
@ -394,6 +394,7 @@ extern const char STR_DISABLE_CH_MAP[];
|
|||
extern const char STR_DISABLE_TELEM[];
|
||||
extern const char STR_MULTI_DSM_AUTODTECT[];
|
||||
extern const char STR_MULTI_LOWPOWER[];
|
||||
extern const char STR_MULTI_LNA_DISABLE[];
|
||||
extern const char STR_MODULE_NO_SERIAL_MODE[];
|
||||
extern const char STR_MODULE_NO_INPUT[];
|
||||
extern const char STR_MODULE_WAITFORBIND[];
|
||||
|
|
|
@ -638,6 +638,7 @@
|
|||
#define TR_DISABLE_TELEM TR("No Telem", "Disable Telemetry")
|
||||
#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetekce", INDENT "Formát autodetekce")
|
||||
#define TR_MULTI_LOWPOWER TR(INDENT "Nízký výkon", INDENT "Režim nízkého výkonu")
|
||||
#define TR_MULTI_LNA_DISABLE INDENT "LNA disable"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "S.Port", INDENT "S.Port link")
|
||||
#define TR_MODULE_TELEM_ON TR("Zap", "Zapnuto")
|
||||
#define TR_DISABLE_INTERNAL TR("Vypnout int.", "Vypnout interní RF")
|
||||
|
|
|
@ -640,6 +640,7 @@
|
|||
#define TR_DISABLE_TELEM TR("No Telem", "Disable Telemetry")
|
||||
#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format")
|
||||
#define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode")
|
||||
#define TR_MULTI_LNA_DISABLE INDENT "LNA disable"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "S.Port", INDENT "S.Port link")
|
||||
#define TR_MODULE_TELEM_ON TR("ON", "Enabled")
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
|
|
|
@ -639,6 +639,7 @@
|
|||
#define TR_DISABLE_TELEM TR("No Telem", "Disable Telemetry")
|
||||
#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format")
|
||||
#define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode")
|
||||
#define TR_MULTI_LNA_DISABLE INDENT "LNA disable"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "S.Port", INDENT "S.Port link")
|
||||
#define TR_MODULE_TELEM_ON TR("ON", "Enabled")
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int.", "Disable internal RF")
|
||||
|
|
|
@ -641,6 +641,7 @@
|
|||
#define TR_DISABLE_TELEM TR("No telem", "Desactivar telem.")
|
||||
#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetectar formato")
|
||||
#define TR_MULTI_LOWPOWER TR(INDENT "Baja poten.", INDENT "Modo de baja poten.")
|
||||
#define TR_MULTI_LNA_DISABLE INDENT "LNA disable"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "S.Port", INDENT "S.Port link")
|
||||
#define TR_MODULE_TELEM_ON TR("ON", "Activado")
|
||||
#define TR_DISABLE_INTERNAL TR("Desac.RF int", "Desact. mod. int. RF")
|
||||
|
|
|
@ -657,6 +657,7 @@
|
|||
#define TR_DISABLE_TELEM TR("No Telem", "Disable Telemetry")
|
||||
#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format")
|
||||
#define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode")
|
||||
#define TR_MULTI_LNA_DISABLE INDENT "LNA disable"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "S.Port", INDENT "S.Port link")
|
||||
#define TR_MODULE_TELEM_ON TR("ON", "Enabled")
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
|
|
|
@ -660,6 +660,7 @@
|
|||
#define TR_DISABLE_TELEM TR("No Telem", "Désact Télémétrie")
|
||||
#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodét.", INDENT "Autodétection")
|
||||
#define TR_MULTI_LOWPOWER TR(INDENT "Basse puis.", INDENT "Mode basse puiss.")
|
||||
#define TR_MULTI_LNA_DISABLE INDENT "LNA disable"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "S.Port", INDENT "Lien S.Port")
|
||||
#define TR_MODULE_TELEM_ON TR("ON", "Actif")
|
||||
#define TR_DISABLE_INTERNAL TR("Désact intRF", "Désact. RF interne")
|
||||
|
|
|
@ -659,6 +659,7 @@
|
|||
#define TR_DISABLE_TELEM TR("No Telem", "Telem. disabil.")
|
||||
#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Trova autom.", INDENT "Autoril. il formato")
|
||||
#define TR_MULTI_LOWPOWER TR(INDENT "Bassa pot.", INDENT "Modo bassa potenza")
|
||||
#define TR_MULTI_LNA_DISABLE INDENT "LNA disable"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "S.Port", INDENT "Link S.Port")
|
||||
#define TR_MODULE_TELEM_ON TR("ON", "Abilitato")
|
||||
#define TR_DISABLE_INTERNAL TR("Disatt. RF int.", "Disattiva RF interna")
|
||||
|
|
|
@ -645,6 +645,7 @@
|
|||
#define TR_DISABLE_TELEM TR("No Telem", "Disable Telemetry")
|
||||
#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format")
|
||||
#define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode")
|
||||
#define TR_MULTI_LNA_DISABLE INDENT "LNA disable"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "S.Port", INDENT "S.Port link")
|
||||
#define TR_MODULE_TELEM_ON TR("ON", "Enabled")
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
|
|
|
@ -658,6 +658,7 @@
|
|||
#define TR_DISABLE_TELEM TR("No Telem", "Disable Telemetry")
|
||||
#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format")
|
||||
#define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode")
|
||||
#define TR_MULTI_LNA_DISABLE INDENT "LNA disable"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "S.Port", INDENT "S.Port link")
|
||||
#define TR_MODULE_TELEM_ON TR("ON", "Enabled")
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
|
|
|
@ -649,6 +649,7 @@
|
|||
#define TR_DISABLE_TELEM TR("No Telem", "Disable Telemetry")
|
||||
#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format")
|
||||
#define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode")
|
||||
#define TR_MULTI_LNA_DISABLE INDENT "LNA disable"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "S.Port", INDENT "S.Port link")
|
||||
#define TR_MODULE_TELEM_ON TR("ON", "Enabled")
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
|
|
|
@ -658,6 +658,7 @@
|
|||
#define TR_DISABLE_TELEM TR("No Telem", "Disable Telemetry")
|
||||
#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format")
|
||||
#define TR_MULTI_LOWPOWER TR(INDENT "Low power", INDENT "Low power mode")
|
||||
#define TR_MULTI_LNA_DISABLE INDENT "LNA disable"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "S.Port", INDENT "S.Port link")
|
||||
#define TR_MODULE_TELEM_ON TR("ON", "Enabled")
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue