mirror of
https://github.com/opentx/opentx.git
synced 2025-07-14 03:49:52 +03:00
Port all Multi changes also to 9X and Horus UI
This commit is contained in:
parent
4082a320b8
commit
543a1d14e8
5 changed files with 99 additions and 84 deletions
|
@ -679,18 +679,18 @@ PACK(struct ModuleData {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Helper functions to set both of the rfProto protocol at the same time
|
// Helper functions to set both of the rfProto protocol at the same time
|
||||||
inline uint8_t getMultiProtocol(bool returnCustom)
|
NOBACKUP(inline uint8_t getMultiProtocol(bool returnCustom) {
|
||||||
{
|
|
||||||
if (returnCustom && multi.customProto)
|
if (returnCustom && multi.customProto)
|
||||||
return MM_RF_CUSTOM_SELECTED;
|
return MM_RF_CUSTOM_SELECTED;
|
||||||
return ((uint8_t) (rfProtocol & 0x0f)) + (multi.rfProtocolExtra << 4);
|
return ((uint8_t) (rfProtocol & 0x0f)) + (multi.rfProtocolExtra << 4);
|
||||||
}
|
})
|
||||||
|
|
||||||
inline void setMultiProtocol(uint8_t proto)
|
NOBACKUP(inline void setMultiProtocol(uint8_t proto)
|
||||||
{
|
{
|
||||||
rfProtocol = (uint8_t) (proto & 0x0f);
|
rfProtocol = (uint8_t) (proto & 0x0f);
|
||||||
multi.rfProtocolExtra = (proto & 0x30) >> 4;
|
multi.rfProtocolExtra = (proto & 0x30) >> 4;
|
||||||
}
|
})
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -579,7 +579,10 @@ void menuModelSetup(event_t event)
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) {
|
else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) {
|
||||||
uint8_t multi_rfProto = min(g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol, (uint8_t) MM_RF_PROTO_CUSTOM);
|
int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||||
|
if (g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
|
||||||
|
multi_rfProto = MM_RF_PROTO_LAST + 1; // Custom proto has its string after all other valid protocols
|
||||||
|
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_MULTI_PROTOCOLS, multi_rfProto, menuHorizontalPosition==1 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_MULTI_PROTOCOLS, multi_rfProto, menuHorizontalPosition==1 ? attr : 0);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -598,19 +601,20 @@ void menuModelSetup(event_t event)
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) {
|
else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) {
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST);
|
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||||
|
CHECK_INCDEC_MODELVAR(event, multiRfProto, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST);
|
||||||
if (checkIncDec_Ret) {
|
if (checkIncDec_Ret) {
|
||||||
// When in custom protocol mode the highest bit (0x20) is set to indicate the protocl we might be way above MM_RF_PROTO_LAST.
|
g_model.moduleData[EXTERNAL_MODULE].multi.customProto = (multiRfProto == MM_RF_PROTO_CUSTOM);
|
||||||
// Reset to MM_RF_PROTO_LAST-1 in that case
|
if (!g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
|
||||||
if (checkIncDec_Ret == -1 && g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol >= MM_RF_PROTO_LAST) {
|
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
|
||||||
g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol = MM_RF_PROTO_LAST-1;
|
|
||||||
}
|
|
||||||
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
|
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
|
||||||
// Sensible default for DSM2 (same as for ppm): 6ch@22ms
|
// Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
|
||||||
if (g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol == MM_RF_PROTO_DSM2)
|
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2) {
|
||||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = MM_RF_DSM2_22MS_6CH_OPTION;
|
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
|
||||||
else
|
} else {
|
||||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = 0;
|
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 0;
|
||||||
|
}
|
||||||
|
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -630,8 +634,7 @@ void menuModelSetup(event_t event)
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_SUBTYPE:
|
case ITEM_MODEL_EXTERNAL_MODULE_SUBTYPE:
|
||||||
{
|
{
|
||||||
lcdDrawTextAlignedLeft(y, STR_SUBTYPE);
|
lcdDrawTextAlignedLeft(y, STR_SUBTYPE);
|
||||||
int8_t multi_rfProto = min<int8_t>(g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol, (uint8_t) MM_RF_PROTO_CUSTOM);
|
switch (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true)) {
|
||||||
switch (multi_rfProto) {
|
|
||||||
case MM_RF_PROTO_FLYSKY:
|
case MM_RF_PROTO_FLYSKY:
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_FLYSKY, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_FLYSKY, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0);
|
||||||
break;
|
break;
|
||||||
|
@ -642,7 +645,7 @@ void menuModelSetup(event_t event)
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_HISKY, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_HISKY, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0);
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_DSM2:
|
case MM_RF_PROTO_DSM2:
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].subType + 1, menuHorizontalPosition == 0 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_DSM, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0);
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_YD717:
|
case MM_RF_PROTO_YD717:
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_YD717, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_YD717, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0);
|
||||||
|
@ -654,7 +657,6 @@ void menuModelSetup(event_t event)
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_SYMAX, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_SYMAX, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0);
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_CX10:
|
case MM_RF_PROTO_CX10:
|
||||||
case MM_RF_PROTO_HONTAI:
|
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_CX10, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_CX10, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition == 0 ? attr : 0);
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_CG023:
|
case MM_RF_PROTO_CG023:
|
||||||
|
@ -669,17 +671,16 @@ void menuModelSetup(event_t event)
|
||||||
case MM_RF_PROTO_HONTAI:
|
case MM_RF_PROTO_HONTAI:
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_HONTAI, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_SUBTYPE_HONTAI, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_CUSTOM:
|
case MM_RF_CUSTOM_SELECTED:
|
||||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN + 3 * FW, y, g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol & 0x1f, RIGHT | (menuHorizontalPosition == 0 ? attr : 0), 2);
|
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN + 3 * FW, y, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false), RIGHT | (menuHorizontalPosition == 0 ? attr : 0), 2);
|
||||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN + 5 * FW, y, g_model.moduleData[EXTERNAL_MODULE].subType, RIGHT | (menuHorizontalPosition == 1 ? attr : 0), 2);
|
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN + 5 * FW, y, g_model.moduleData[EXTERNAL_MODULE].subType, RIGHT | (menuHorizontalPosition == 1 ? attr : 0), 2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (attr && (editMode > 0 || p1valdiff)) {
|
if (attr && (editMode > 0 || p1valdiff)) {
|
||||||
switch (menuHorizontalPosition) {
|
switch (menuHorizontalPosition) {
|
||||||
case 0:
|
case 0:
|
||||||
switch (min(g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol, (uint8_t) MM_RF_PROTO_CUSTOM)) {
|
switch (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true)) {
|
||||||
case MM_RF_PROTO_HISKY:
|
case MM_RF_PROTO_HISKY:
|
||||||
case MM_RF_PROTO_DSM2:
|
|
||||||
case MM_RF_PROTO_SYMAX:
|
case MM_RF_PROTO_SYMAX:
|
||||||
case MM_RF_PROTO_KN:
|
case MM_RF_PROTO_KN:
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 1);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 1);
|
||||||
|
@ -689,6 +690,7 @@ void menuModelSetup(event_t event)
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_FLYSKY:
|
case MM_RF_PROTO_FLYSKY:
|
||||||
case MM_RF_PROTO_FRSKY:
|
case MM_RF_PROTO_FRSKY:
|
||||||
|
case MM_RF_PROTO_DSM2:
|
||||||
case MM_RF_PROTO_MT99XX:
|
case MM_RF_PROTO_MT99XX:
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 3);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 3);
|
||||||
break;
|
break;
|
||||||
|
@ -699,9 +701,9 @@ void menuModelSetup(event_t event)
|
||||||
case MM_RF_PROTO_CX10:
|
case MM_RF_PROTO_CX10:
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 7);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 7);
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_CUSTOM:
|
case MM_RF_CUSTOM_SELECTED:
|
||||||
//custom protocol using the highest bit 0x20 to indicate that the protocol and the lower bits as the rfProtocol
|
//custom protocol using the highest bit 0x20 to indicate that the protocol and the lower bits as the rfProtocol
|
||||||
g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol = 0x20 | checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol & 0x1f, 1, 31, EE_MODEL);
|
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false), 0, 63, EE_MODEL));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -886,7 +888,7 @@ void menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (IS_MODULE_MULTIMODULE(moduleIdx)) {
|
else if (IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||||
switch (g_model.moduleData[moduleIdx].multi.rfProtocol)
|
switch (g_model.moduleData[moduleIdx].getMultiProtocol(true))
|
||||||
{
|
{
|
||||||
case MM_RF_PROTO_FRSKY:
|
case MM_RF_PROTO_FRSKY:
|
||||||
case MM_RF_PROTO_SFHSS:
|
case MM_RF_PROTO_SFHSS:
|
||||||
|
@ -896,13 +898,13 @@ void menuModelSetup(event_t event)
|
||||||
lcdDrawTextAlignedLeft(y, STR_MULTI_VIDFREQ);
|
lcdDrawTextAlignedLeft(y, STR_MULTI_VIDFREQ);
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_DSM2:
|
case MM_RF_PROTO_DSM2:
|
||||||
g_model.moduleData[moduleIdx].multi.optionValue = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSMFRAME, STR_OPTIONS_DSM, g_model.moduleData[moduleIdx].multi.optionValue, 0, 12, attr, event);
|
g_model.moduleData[moduleIdx].multi.optionValue = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.optionValue, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSMPRNG, attr, event);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
lcdDrawTextAlignedLeft(y, STR_MULTI_OPTION);
|
lcdDrawTextAlignedLeft(y, STR_MULTI_OPTION);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (g_model.moduleData[moduleIdx].multi.rfProtocol != MM_RF_PROTO_DSM2) {
|
if (g_model.moduleData[moduleIdx].getMultiProtocol(true) != MM_RF_PROTO_DSM2) {
|
||||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.moduleData[moduleIdx].multi.optionValue, LEFT | attr);
|
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.moduleData[moduleIdx].multi.optionValue, LEFT | attr);
|
||||||
if (attr) {
|
if (attr) {
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127);
|
||||||
|
@ -915,7 +917,10 @@ void menuModelSetup(event_t event)
|
||||||
|
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
||||||
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_AUTOBIND, attr, event);
|
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
|
||||||
|
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSM_AUTODTECT, attr, event);
|
||||||
|
else
|
||||||
|
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_AUTOBIND, attr, event);
|
||||||
break;
|
break;
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_LOWPOWER:
|
case ITEM_MODEL_EXTERNAL_MODULE_LOWPOWER:
|
||||||
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, STR_MULTI_LOWPOWER, attr, event);
|
||||||
|
|
|
@ -985,7 +985,7 @@ void menuModelSetup(event_t event)
|
||||||
lcdDrawTextAlignedLeft(y, STR_MULTI_VIDFREQ);
|
lcdDrawTextAlignedLeft(y, STR_MULTI_VIDFREQ);
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_DSM2:
|
case MM_RF_PROTO_DSM2:
|
||||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.optionValue, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSMPRNG, attr, event);
|
g_model.moduleData[moduleIdx].multi.optionValue = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.optionValue, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSMPRNG, attr, event);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
lcdDrawTextAlignedLeft(y, STR_MULTI_OPTION);
|
lcdDrawTextAlignedLeft(y, STR_MULTI_OPTION);
|
||||||
|
@ -1004,9 +1004,9 @@ void menuModelSetup(event_t event)
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
||||||
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
|
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
|
||||||
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSM_AUTODTECT, attr, event);
|
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSM_AUTODTECT, attr, event);
|
||||||
else
|
else
|
||||||
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_AUTOBIND, attr, event);
|
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_AUTOBIND, attr, event);
|
||||||
break;
|
break;
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_LOWPOWER:
|
case ITEM_MODEL_EXTERNAL_MODULE_LOWPOWER:
|
||||||
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, STR_MULTI_LOWPOWER, attr, event);
|
||||||
|
|
|
@ -186,8 +186,6 @@ int getSwitchWarningsCount()
|
||||||
#define INTERNAL_MODULE_CHANNELS_ROWS IF_INTERNAL_MODULE_ON(1)
|
#define INTERNAL_MODULE_CHANNELS_ROWS IF_INTERNAL_MODULE_ON(1)
|
||||||
#define TRAINER_CHANNELS_ROWS() IF_TRAINER_ON(1)
|
#define TRAINER_CHANNELS_ROWS() IF_TRAINER_ON(1)
|
||||||
#define PORT_CHANNELS_ROWS(x) (x==INTERNAL_MODULE ? INTERNAL_MODULE_CHANNELS_ROWS : (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : TRAINER_CHANNELS_ROWS()))
|
#define PORT_CHANNELS_ROWS(x) (x==INTERNAL_MODULE ? INTERNAL_MODULE_CHANNELS_ROWS : (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : TRAINER_CHANNELS_ROWS()))
|
||||||
#if defined MULTIMODULE
|
|
||||||
|
|
||||||
|
|
||||||
#define TIMER_ROWS(x) NAVIGATION_LINE_BY_LINE|1, 0, 0, 0, g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t)1 : (uint8_t)0
|
#define TIMER_ROWS(x) NAVIGATION_LINE_BY_LINE|1, 0, 0, 0, g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t)1 : (uint8_t)0
|
||||||
|
|
||||||
|
@ -630,10 +628,12 @@ bool menuModelSetup(event_t event)
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, (menuHorizontalPosition==1 ? attr : 0));
|
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, (menuHorizontalPosition==1 ? attr : 0));
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) {
|
else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) {
|
||||||
uint8_t multi_rfProto = min(g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol, (uint8_t) MM_RF_PROTO_CUSTOM);
|
int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||||
|
if (g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
|
||||||
|
multi_rfProto = MM_RF_PROTO_LAST + 1; // Custom proto has its string after all other valid protocols
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_MULTI_PROTOCOLS, multi_rfProto, menuHorizontalPosition==1 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_MULTI_PROTOCOLS, multi_rfProto, menuHorizontalPosition==1 ? attr : 0);
|
||||||
|
|
||||||
switch(multi_rfProto) {
|
switch(g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true)) {
|
||||||
case MM_RF_PROTO_FLYSKY:
|
case MM_RF_PROTO_FLYSKY:
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_4TH_COLUMN, y, STR_SUBTYPE_FLYSKY, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_4TH_COLUMN, y, STR_SUBTYPE_FLYSKY, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
||||||
break;
|
break;
|
||||||
|
@ -644,7 +644,7 @@ bool menuModelSetup(event_t event)
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_4TH_COLUMN, y, STR_SUBTYPE_HISKY, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_4TH_COLUMN, y, STR_SUBTYPE_HISKY, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_DSM2:
|
case MM_RF_PROTO_DSM2:
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_4TH_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].subType+1, menuHorizontalPosition==2 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_4TH_COLUMN, y, STR_SUBTYPE_DSM, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_YD717:
|
case MM_RF_PROTO_YD717:
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_4TH_COLUMN, y, STR_SUBTYPE_YD717, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_4TH_COLUMN, y, STR_SUBTYPE_YD717, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
||||||
|
@ -670,8 +670,8 @@ bool menuModelSetup(event_t event)
|
||||||
case MM_RF_PROTO_HONTAI:
|
case MM_RF_PROTO_HONTAI:
|
||||||
lcdDrawTextAtIndex(MODEL_SETUP_4TH_COLUMN, y, STR_SUBTYPE_HONTAI, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
lcdDrawTextAtIndex(MODEL_SETUP_4TH_COLUMN, y, STR_SUBTYPE_HONTAI, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_CUSTOM:
|
case MM_RF_CUSTOM_SELECTED:
|
||||||
lcdDrawNumber(MODEL_SETUP_4TH_COLUMN, y, g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol & 0x1f, menuHorizontalPosition==2 ? attr : 0, 2);
|
lcdDrawNumber(MODEL_SETUP_4TH_COLUMN, y, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false), menuHorizontalPosition==2 ? attr : 0, 2);
|
||||||
lcdDrawNumber(MODEL_SETUP_4TH_COLUMN + MODEL_SETUP_BIND_OFS, y, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==3 ? attr : 0, 2);
|
lcdDrawNumber(MODEL_SETUP_4TH_COLUMN + MODEL_SETUP_BIND_OFS, y, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==3 ? attr : 0, 2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -690,59 +690,64 @@ bool menuModelSetup(event_t event)
|
||||||
case 1:
|
case 1:
|
||||||
if (IS_MODULE_DSM2(EXTERNAL_MODULE))
|
if (IS_MODULE_DSM2(EXTERNAL_MODULE))
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
||||||
|
#if defined(MULTIMODULE)
|
||||||
else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) {
|
else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) {
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST);
|
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||||
|
CHECK_INCDEC_MODELVAR(event, multiRfProto, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST);
|
||||||
if (checkIncDec_Ret) {
|
if (checkIncDec_Ret) {
|
||||||
// When in custom protocol mode the highest bit (0x20) is set to indicate the protocl we might be way above MM_RF_PROTO_LAST.
|
g_model.moduleData[EXTERNAL_MODULE].multi.customProto = (multiRfProto == MM_RF_PROTO_CUSTOM);
|
||||||
// Reset to MM_RF_PROTO_LAST-1 in that case
|
if (!g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
|
||||||
if (checkIncDec_Ret == -1 && g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol >= MM_RF_PROTO_LAST) {
|
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
|
||||||
g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol = MM_RF_PROTO_LAST-1;
|
|
||||||
}
|
|
||||||
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
|
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
|
||||||
// Sensible default for DSM2 (same as for ppm): 6ch@22ms
|
// Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
|
||||||
if (g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol == MM_RF_PROTO_DSM2)
|
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2) {
|
||||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = MM_RF_DSM2_22MS_6CH_OPTION;
|
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
|
||||||
else
|
} else {
|
||||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = 0;
|
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 0;
|
||||||
|
}
|
||||||
|
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
else {
|
else {
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, RF_PROTO_X16, RF_PROTO_LAST);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, RF_PROTO_X16, RF_PROTO_LAST);
|
||||||
}
|
}
|
||||||
if (checkIncDec_Ret) {
|
if (checkIncDec_Ret) {
|
||||||
g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
|
g_model.moduleData[EXTERNAL_MODULE].channelsStart = 0;
|
||||||
g_model.moduleData[EXTERNAL_MODULE].channelsCount = DEFAULT_CHANNELS(EXTERNAL_MODULE);
|
g_model.moduleData[EXTERNAL_MODULE].channelsCount = DEFAULT_CHANNELS(EXTERNAL_MODULE);
|
||||||
|
g_model.moduleData[EXTERNAL_MODULE].channelsCount = MAX_EXTERNAL_MODULE_CHANNELS();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
case 2:
|
case 2:
|
||||||
switch (min(g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol, (uint8_t) MM_RF_PROTO_CUSTOM)) {
|
if (g_model.moduleData[EXTERNAL_MODULE].multi.customProto) {
|
||||||
case MM_RF_PROTO_HISKY:
|
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false), 0, 63, EE_MODEL));
|
||||||
case MM_RF_PROTO_DSM2:
|
break;
|
||||||
case MM_RF_PROTO_SYMAX:
|
} else {
|
||||||
case MM_RF_PROTO_KN:
|
switch (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true)) {
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 1);
|
case MM_RF_PROTO_HISKY:
|
||||||
break;
|
case MM_RF_PROTO_SYMAX:
|
||||||
case MM_RF_PROTO_CG023:
|
case MM_RF_PROTO_KN:
|
||||||
case MM_RF_PROTO_HONTAI:
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 1);
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 2);
|
break;
|
||||||
break;
|
case MM_RF_PROTO_CG023:
|
||||||
case MM_RF_PROTO_FLYSKY:
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 2);
|
||||||
case MM_RF_PROTO_FRSKY:
|
break;
|
||||||
case MM_RF_PROTO_MT99XX:
|
case MM_RF_PROTO_FLYSKY:
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 3);
|
case MM_RF_PROTO_MT99XX:
|
||||||
break;
|
case MM_RF_PROTO_FRSKY:
|
||||||
case MM_RF_PROTO_MJXQ:
|
case MM_RF_PROTO_DSM2:
|
||||||
case MM_RF_PROTO_YD717:
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 3);
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 4);
|
break;
|
||||||
break;
|
case MM_RF_PROTO_MJXQ:
|
||||||
case MM_RF_PROTO_CX10:
|
case MM_RF_PROTO_YD717:
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 7);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 4);
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_CUSTOM:
|
case MM_RF_PROTO_CX10:
|
||||||
//custom protocol using the highest bit 0x20 to indicate that the protocol and the lower bits as the rfProtocol
|
case MM_RF_PROTO_HONTAI:
|
||||||
g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol = 0x20 | checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol & 0x1f, 1, 31, EE_MODEL);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 7);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
|
@ -886,23 +891,24 @@ bool menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
else if (IS_MODULE_MULTIMODULE(moduleIdx)) {
|
else if (IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||||
switch (g_model.moduleData[moduleIdx].multi.rfProtocol)
|
switch (g_model.moduleData[moduleIdx].getMultiProtocol(true))
|
||||||
{
|
{
|
||||||
case MM_RF_PROTO_FRSKY:
|
case MM_RF_PROTO_FRSKY:
|
||||||
|
case MM_RF_PROTO_SFHSS:
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_RFTUNE);
|
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_RFTUNE);
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_HUBSAN:
|
case MM_RF_PROTO_HUBSAN:
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_VIDFREQ);
|
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_VIDFREQ);
|
||||||
break;
|
break;
|
||||||
case MM_RF_PROTO_DSM2:
|
case MM_RF_PROTO_DSM2:
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_DSMFRAME);
|
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_DSMPRNG);
|
||||||
g_model.moduleData[moduleIdx].multi.optionValue = editChoice(MODEL_SETUP_2ND_COLUMN, y, STR_OPTIONS_DSM, g_model.moduleData[moduleIdx].multi.optionValue, 0, 12, attr, event);
|
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.optionValue, MODEL_SETUP_2ND_COLUMN, y, attr, event);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_OPTION);
|
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_OPTION);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (g_model.moduleData[moduleIdx].multi.rfProtocol != MM_RF_PROTO_DSM2) {
|
if (g_model.moduleData[moduleIdx].getMultiProtocol(true) != MM_RF_PROTO_DSM2) {
|
||||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.moduleData[moduleIdx].multi.optionValue, LEFT | attr);
|
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.moduleData[moduleIdx].multi.optionValue, LEFT | attr);
|
||||||
if (attr)
|
if (attr)
|
||||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127);
|
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127);
|
||||||
|
@ -913,7 +919,10 @@ bool menuModelSetup(event_t event)
|
||||||
}
|
}
|
||||||
#if defined(MULTIMODULE)
|
#if defined(MULTIMODULE)
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_AUTOBIND);
|
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
|
||||||
|
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_DSM_AUTODTECT);
|
||||||
|
else
|
||||||
|
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_AUTOBIND);
|
||||||
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, attr, event);
|
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode, MODEL_SETUP_2ND_COLUMN, y, attr, event);
|
||||||
break;
|
break;
|
||||||
case ITEM_MODEL_EXTERNAL_MODULE_LOWPOWER:
|
case ITEM_MODEL_EXTERNAL_MODULE_LOWPOWER:
|
||||||
|
|
|
@ -432,6 +432,7 @@ void memswap(void * a, void * b, uint8_t size);
|
||||||
#define MAX_EXTRA_MODULE_CHANNELS() (8) // Only PPM (16ch PPM)
|
#define MAX_EXTRA_MODULE_CHANNELS() (8) // Only PPM (16ch PPM)
|
||||||
#define MAX_CHANNELS(idx) (idx==EXTERNAL_MODULE ? MAX_EXTERNAL_MODULE_CHANNELS() : (idx==EXTRA_MODULE ? MAX_EXTRA_MODULE_CHANNELS() : MAX_TRAINER_CHANNELS_M8()))
|
#define MAX_CHANNELS(idx) (idx==EXTERNAL_MODULE ? MAX_EXTERNAL_MODULE_CHANNELS() : (idx==EXTRA_MODULE ? MAX_EXTRA_MODULE_CHANNELS() : MAX_TRAINER_CHANNELS_M8()))
|
||||||
#define NUM_CHANNELS(idx) (8+g_model.moduleData[idx].channelsCount)
|
#define NUM_CHANNELS(idx) (8+g_model.moduleData[idx].channelsCount)
|
||||||
|
#define IS_MODULE_CROSSFIRE(idx) (false)
|
||||||
#else
|
#else
|
||||||
#define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_PPM))
|
#define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_PPM))
|
||||||
#define IS_MODULE_XJT(idx) (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_XJT)
|
#define IS_MODULE_XJT(idx) (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_XJT)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue