mirror of
https://github.com/opentx/opentx.git
synced 2025-07-19 22:35:12 +03:00
Rework DSM2/X support, auto protocol selection for DSM2
Support more than 31 protocols for the multi module. Breaks existing multi eeproms, need to reselect protocols
This commit is contained in:
parent
c592fed9f1
commit
c055e93247
23 changed files with 198 additions and 182 deletions
|
@ -661,7 +661,9 @@ PACK(struct ModuleData {
|
|||
int8_t frameLength;
|
||||
} ppm;
|
||||
NOBACKUP(struct {
|
||||
uint8_t rfProtocol:6; // can be changed to rfProtocol if rfProtocol gets more bits, currently 6 bits used
|
||||
uint8_t rfProtocolExtra:2;
|
||||
uint8_t spare:3;
|
||||
uint8_t customProto:1;
|
||||
uint8_t autoBindMode:1;
|
||||
uint8_t lowPowerMode:1;
|
||||
int8_t optionValue;
|
||||
|
@ -673,6 +675,18 @@ PACK(struct ModuleData {
|
|||
uint8_t spare3;
|
||||
} pxx);
|
||||
};
|
||||
|
||||
// Helper functions to set both of the rfProto protocol at the same time
|
||||
inline uint8_t getMultiProtocol()
|
||||
{
|
||||
return ((uint8_t) (rfProtocol & 0x0f)) + (multi.rfProtocolExtra << 4);
|
||||
}
|
||||
|
||||
inline void setMultiProtocol(uint8_t proto)
|
||||
{
|
||||
rfProtocol = (uint8_t) (proto & 0x0f);
|
||||
multi.rfProtocolExtra = (proto & 0x30) >> 4;
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
|
|
|
@ -129,11 +129,8 @@ enum MenuModelSetupItems {
|
|||
#endif
|
||||
|
||||
#define IF_EXTERNAL_MODULE_ON(x) (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x))
|
||||
#define IF_TRAINER_ON(x) (g_model.trainerMode == TRAINER_MODE_SLAVE ? (uint8_t)(x) : HIDDEN_ROW)
|
||||
#define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == RF_PROTO_D8)
|
||||
#define IF_EXTERNAL_MODULE_XJT(x) (IS_MODULE_XJT(EXTERNAL_MODULE) ? (uint8_t)(x) : HIDDEN_ROW)
|
||||
#define INTERNAL_MODULE_CHANNELS_ROWS IF_INTERNAL_MODULE_ON(1)
|
||||
#define EXTERNAL_MODULE_CHANNELS_ROWS IF_EXTERNAL_MODULE_ON((IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)0 : (uint8_t)1)
|
||||
#define EXTERNAL_MODULE_BIND_ROWS() (IS_MODULE_XJT(EXTERNAL_MODULE) && IS_D8_RX(EXTERNAL_MODULE)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW
|
||||
|
||||
#if defined(PCBSKY9X) && defined(REVX)
|
||||
|
@ -143,26 +140,6 @@ enum MenuModelSetupItems {
|
|||
#endif
|
||||
#define PORT_CHANNELS_ROWS(x) (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : 0)
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
#define MULTIMODULE_HASOPTIONS(x) (x == MM_RF_PROTO_HUBSAN || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_DSM2 || x == MM_RF_PROTO_SFHSS || x >= MM_RF_PROTO_CUSTOM)
|
||||
#define MULTIMODULE_FAILSAFEROWS(x) (IS_MODULE_MULTIMODULE(x) && (MULTIMODULE_HASOPTIONS(g_model.moduleData[x].multi.rfProtocol))) ? (uint8_t) 0: HIDDEN_ROW
|
||||
#else
|
||||
#define MULTIMODULE_FAILSAFEROWS(x) HIDDEN_ROW
|
||||
#endif
|
||||
#define FAILSAFE_ROWS(x) (IS_MODULE_XJT(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : MULTIMODULE_FAILSAFEROWS(x))
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
#define MULTIMODULE_HAS_SUBTYPE(x) (x == MM_RF_PROTO_FLYSKY || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_HISKY || x == MM_RF_PROTO_DSM2 || x == MM_RF_PROTO_YD717 || x == MM_RF_PROTO_KN || x == MM_RF_PROTO_SYMAX || x == MM_RF_PROTO_CX10 || x == MM_RF_PROTO_CG023 || x == MM_RF_PROTO_MT99XX || x == MM_RF_PROTO_MJXQ)
|
||||
#define MULTIMODULE_MODE_ROWS(x) (g_model.moduleData[x].multi.rfProtocol >= MM_RF_PROTO_CUSTOM ) ? (uint8_t) 3 :MULTIMODULE_HAS_SUBTYPE(g_model.moduleData[x].multi.rfProtocol) ? (uint8_t)2 : (uint8_t)1
|
||||
#define MULTIMODULE_MODULE_ROWS IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW, IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW,
|
||||
#define MULTIMODULE_RFPROTO_ROWS(x) (g_model.moduleData[x].multi.rfProtocol >= MM_RF_PROTO_CUSTOM) ? (uint8_t) 1 :MULTIMODULE_HAS_SUBTYPE(g_model.moduleData[x].multi.rfProtocol) ? (uint8_t) 0 : HIDDEN_ROW
|
||||
#define MULTIMODULE_SUBTYPE_ROWS(x) IS_MODULE_MULTIMODULE(x) ? MULTIMODULE_RFPROTO_ROWS(x) : HIDDEN_ROW,
|
||||
#else
|
||||
#define MULTIMODULE_MODE_ROWS(x) (uint8_t)0
|
||||
#define MULTIMODULE_MODULE_ROWS
|
||||
#define MULTIMODULE_SUBTYPE_ROWS(x)
|
||||
#endif
|
||||
|
||||
#define EXTERNAL_MODULE_MODE_ROWS (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0
|
||||
|
||||
#define CURSOR_ON_CELL (true)
|
||||
|
|
|
@ -211,33 +211,14 @@ int getSwitchWarningsCount()
|
|||
#define IF_INTERNAL_MODULE_ON(x) (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF ? HIDDEN_ROW : (uint8_t)(x))
|
||||
#endif
|
||||
#define IF_EXTERNAL_MODULE_ON(x) (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x))
|
||||
#define IF_TRAINER_ON(x) (g_model.trainerMode == TRAINER_MODE_SLAVE ? (uint8_t)(x) : HIDDEN_ROW)
|
||||
#define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == RF_PROTO_D8)
|
||||
#define IF_EXTERNAL_MODULE_XJT(x) (IS_MODULE_XJT(EXTERNAL_MODULE) ? (uint8_t)x : HIDDEN_ROW)
|
||||
#define INTERNAL_MODULE_CHANNELS_ROWS IF_INTERNAL_MODULE_ON(1)
|
||||
#define EXTERNAL_MODULE_CHANNELS_ROWS IF_EXTERNAL_MODULE_ON((IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_CROSSFIRE(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)0 : (uint8_t)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()))
|
||||
|
||||
#if defined MULTIMODULE
|
||||
#define MULTIMODULE_HASOPTIONS(x) (x == MM_RF_PROTO_HUBSAN || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_DSM2 || x == MM_RF_PROTO_SFHSS || x >= MM_RF_PROTO_CUSTOM)
|
||||
#define MULTIMODULE_FAILSAFEROWS(x) (IS_MODULE_MULTIMODULE(x) && (MULTIMODULE_HASOPTIONS(g_model.moduleData[x].multi.rfProtocol))) ? (uint8_t) 0: HIDDEN_ROW
|
||||
#else
|
||||
#define MULTIMODULE_FAILSAFEROWS(x) HIDDEN_ROW
|
||||
#endif
|
||||
|
||||
#define FAILSAFE_ROWS(x) (IS_MODULE_XJT(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : MULTIMODULE_FAILSAFEROWS(x))
|
||||
#define TIMER_ROWS(x) 2|NAVIGATION_LINE_BY_LINE, 0, 0, 0, g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t) 1 : (uint8_t)0
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
#define MULTIMODULE_HAS_SUBTYPE(x) (x == MM_RF_PROTO_FLYSKY || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_HISKY || x == MM_RF_PROTO_DSM2 || x == MM_RF_PROTO_YD717 || x == MM_RF_PROTO_KN || x == MM_RF_PROTO_SYMAX || x == MM_RF_PROTO_CX10 || x == MM_RF_PROTO_CG023 || x == MM_RF_PROTO_MT99XX || x == MM_RF_PROTO_MJXQ)
|
||||
#define MULTIMODULE_MODE_ROWS(x) (g_model.moduleData[x].multi.rfProtocol >= MM_RF_PROTO_CUSTOM ) ? (uint8_t) 3 :MULTIMODULE_HAS_SUBTYPE(g_model.moduleData[x].multi.rfProtocol) ? (uint8_t)2 : (uint8_t)1
|
||||
#define MULTIMODULE_MODULE_ROWS IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW, IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW,
|
||||
#else
|
||||
#define MULTIMODULE_MODE_ROWS(x) (uint8_t)0
|
||||
#define MULTIMODULE_MODULE_ROWS
|
||||
#endif
|
||||
|
||||
#define EXTERNAL_MODULE_MODE_ROWS (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? MULTIMODULE_MODE_ROWS(EXTERNAL_MODULE) : (uint8_t)0
|
||||
|
||||
#if TIMERS == 1
|
||||
|
@ -714,7 +695,7 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
||||
#if defined(MULTIMODULE)
|
||||
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);
|
||||
uint8_t multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol();
|
||||
// Do not use MODEL_SETUP_3RD_COLUMN here since some the protocol string are so long that we cannot afford the 2 spaces (+6) here
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_MULTI_PROTOCOLS, multi_rfProto, menuHorizontalPosition==1 ? attr : 0);
|
||||
|
||||
|
@ -729,7 +710,7 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+10*FW, y, STR_SUBTYPE_HISKY, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
||||
break;
|
||||
case MM_RF_PROTO_DSM2:
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+11*FW, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].subType+1, menuHorizontalPosition==2 ? attr : 0);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+10*FW, y, STR_SUBTYPE_DSM, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
||||
break;
|
||||
case MM_RF_PROTO_YD717:
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+10*FW, y, STR_SUBTYPE_YD717, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
||||
|
@ -756,7 +737,7 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+11*FW, y, STR_SUBTYPE_HONTAI, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
||||
break;
|
||||
case MM_RF_PROTO_CUSTOM:
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+14*FW, y, g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol & 0x1f, menuHorizontalPosition==2 ? attr : 0, 2);
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+14*FW, y, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(), menuHorizontalPosition==2 ? attr : 0, 2);
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN+16*FW, y, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==3 ? attr : 0, 2);
|
||||
break;
|
||||
}
|
||||
|
@ -777,18 +758,19 @@ void menuModelSetup(event_t event)
|
|||
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)) {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST);
|
||||
uint8_t multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol();
|
||||
CHECK_INCDEC_MODELVAR(event, multiRfProto, MM_RF_PROTO_FIRST, MM_RF_PROTO_LAST);
|
||||
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.
|
||||
// Reset to MM_RF_PROTO_LAST-1 in that case
|
||||
if (checkIncDec_Ret == -1 && g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol >= MM_RF_PROTO_LAST) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol = MM_RF_PROTO_LAST-1;
|
||||
}
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.customProto = (multiRfProto == MM_RF_PROTO_CUSTOM);
|
||||
if (!g_model.moduleData[EXTERNAL_MODULE].multi.customProto)
|
||||
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(multiRfProto);
|
||||
g_model.moduleData[EXTERNAL_MODULE].subType = 0;
|
||||
// Sensible default for DSM2 (same as for ppm): 6ch@22ms
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol == MM_RF_PROTO_DSM2)
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = MM_RF_DSM2_22MS_6CH_OPTION;
|
||||
else
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() == MM_RF_PROTO_DSM2) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
|
||||
} else {
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 0;
|
||||
}
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = 0;
|
||||
}
|
||||
}
|
||||
|
@ -803,9 +785,12 @@ void menuModelSetup(event_t event)
|
|||
break;
|
||||
#if defined(MULTIMODULE)
|
||||
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) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(), 0, 63, EE_MODEL));
|
||||
break;
|
||||
} else {
|
||||
switch (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol()) {
|
||||
case MM_RF_PROTO_HISKY:
|
||||
case MM_RF_PROTO_DSM2:
|
||||
case MM_RF_PROTO_SYMAX:
|
||||
case MM_RF_PROTO_KN:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 1);
|
||||
|
@ -816,6 +801,7 @@ void menuModelSetup(event_t event)
|
|||
case MM_RF_PROTO_FLYSKY:
|
||||
case MM_RF_PROTO_MT99XX:
|
||||
case MM_RF_PROTO_FRSKY:
|
||||
case MM_RF_PROTO_DSM2:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 3);
|
||||
break;
|
||||
case MM_RF_PROTO_MJXQ:
|
||||
|
@ -826,10 +812,7 @@ void menuModelSetup(event_t event)
|
|||
case MM_RF_PROTO_HONTAI:
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, 7);
|
||||
break;
|
||||
case MM_RF_PROTO_CUSTOM:
|
||||
//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);
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
|
@ -989,7 +972,7 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
#if defined(MULTIMODULE)
|
||||
else if (IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
switch (g_model.moduleData[moduleIdx].multi.rfProtocol)
|
||||
switch (g_model.moduleData[moduleIdx].getMultiProtocol())
|
||||
{
|
||||
case MM_RF_PROTO_FRSKY:
|
||||
case MM_RF_PROTO_SFHSS:
|
||||
|
@ -999,13 +982,13 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawTextAlignedLeft(y, STR_MULTI_VIDFREQ);
|
||||
break;
|
||||
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[EXTERNAL_MODULE].multi.optionValue = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.optionValue, MODEL_SETUP_2ND_COLUMN, y, STR_MULTI_DSMPRNG, attr, event);
|
||||
break;
|
||||
default:
|
||||
lcdDrawTextAlignedLeft(y, STR_MULTI_OPTION);
|
||||
break;
|
||||
}
|
||||
if (g_model.moduleData[moduleIdx].multi.rfProtocol != MM_RF_PROTO_DSM2) {
|
||||
if (g_model.moduleData[moduleIdx].getMultiProtocol() != MM_RF_PROTO_DSM2) {
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.moduleData[moduleIdx].multi.optionValue, LEFT | attr);
|
||||
if (attr) {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127);
|
||||
|
@ -1017,6 +1000,9 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
#if defined(MULTIMODULE)
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() == 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;
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_LOWPOWER:
|
||||
|
|
|
@ -179,34 +179,18 @@ int getSwitchWarningsCount()
|
|||
}
|
||||
|
||||
#define IF_EXTERNAL_MODULE_XJT(x) (IS_MODULE_XJT(EXTERNAL_MODULE) ? (uint8_t)x : HIDDEN_ROW)
|
||||
#define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == RF_PROTO_D8)
|
||||
#define IF_INTERNAL_MODULE_ON(x) (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF ? HIDDEN_ROW : (uint8_t)(x))
|
||||
#define IF_EXTERNAL_MODULE_ON(x) (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x))
|
||||
#define IF_TRAINER_ON(x) (g_model.trainerMode == TRAINER_MODE_SLAVE ? (uint8_t)(x) : HIDDEN_ROW)
|
||||
|
||||
#define INTERNAL_MODULE_MODE_ROWS (uint8_t)0
|
||||
#define INTERNAL_MODULE_CHANNELS_ROWS IF_INTERNAL_MODULE_ON(1)
|
||||
#define EXTERNAL_MODULE_CHANNELS_ROWS IF_EXTERNAL_MODULE_ON((IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_CROSSFIRE(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)0 : (uint8_t)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()))
|
||||
#if defined MULTIMODULE
|
||||
#define MULTIMODULE_HASOPTIONS(x) (x == MM_RF_PROTO_HUBSAN || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_DSM2 || x >= MM_RF_PROTO_CUSTOM)
|
||||
#define MULTIMODULE_FAILSAFEROWS(x) (IS_MODULE_MULTIMODULE(x) && (MULTIMODULE_HASOPTIONS(g_model.moduleData[x].multi.rfProtocol))) ? (uint8_t) 0: HIDDEN_ROW
|
||||
#else
|
||||
#define MULTIMODULE_FAILSAFEROWS(x) HIDDEN_ROW
|
||||
#endif
|
||||
|
||||
#define FAILSAFE_ROWS(x) (IS_MODULE_XJT(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : MULTIMODULE_FAILSAFEROWS(x))
|
||||
|
||||
#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
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
#define MULTIMODULE_HAS_SUBTYPE(x) (x == MM_RF_PROTO_FLYSKY || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_HISKY || x == MM_RF_PROTO_DSM2 || x == MM_RF_PROTO_YD717 || x == MM_RF_PROTO_KN || x == MM_RF_PROTO_SYMAX || x == MM_RF_PROTO_CX10 || x == MM_RF_PROTO_CG023 || x == MM_RF_PROTO_MT99XX || x == MM_RF_PROTO_MJXQ)
|
||||
#define MULTIMODULE_MODE_ROWS(x) (g_model.moduleData[x].multi.rfProtocol >= MM_RF_PROTO_CUSTOM ) ? (uint8_t) 3 : MULTIMODULE_HAS_SUBTYPE(g_model.moduleData[x].multi.rfProtocol) ? (uint8_t)2 : (uint8_t)1
|
||||
#define MULTIMODULE_MODULE_ROWS IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW, IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW,
|
||||
#else
|
||||
#define MULTIMODULE_MODE_ROWS(x) (uint8_t)0
|
||||
#define MULTIMODULE_MODULE_ROWS
|
||||
#endif
|
||||
|
||||
#define EXTERNAL_MODULE_MODE_ROWS (IS_MODULE_XJT(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE)) ? (uint8_t)1 : IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? MULTIMODULE_MODE_ROWS(EXTERNAL_MODULE) : (uint8_t)0
|
||||
|
||||
|
|
|
@ -109,4 +109,29 @@ void drawFatalErrorScreen(const char * message);
|
|||
void runFatalErrorScreen(const char * message);
|
||||
#endif
|
||||
|
||||
// model_setup Defines that are used in all uis in the same way
|
||||
#define EXTERNAL_MODULE_CHANNELS_ROWS IF_EXTERNAL_MODULE_ON((IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_CROSSFIRE(EXTERNAL_MODULE) || (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() != MM_RF_PROTO_DSM2)) ? (uint8_t)0 : (uint8_t)1)
|
||||
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
#define MULTIMODULE_MODULE_ROWS IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW, IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? (uint8_t) 0 : HIDDEN_ROW,
|
||||
#define MULTIMODULE_MODE_ROWS(x) (g_model.moduleData[x].multi.customProto) ? (uint8_t) 3 :MULTIMODULE_HAS_SUBTYPE(g_model.moduleData[x].getMultiProtocol()) ? (uint8_t)2 : (uint8_t)1
|
||||
#define MULTIMODULE_RFPROTO_ROWS(x) (g_model.moduleData[x].multi.customProto) ? (uint8_t) 1 :MULTIMODULE_HAS_SUBTYPE(g_model.moduleData[x].getMultiProtocol()) ? (uint8_t) 0 : HIDDEN_ROW
|
||||
#define MULTIMODULE_SUBTYPE_ROWS(x) IS_MODULE_MULTIMODULE(x) ? MULTIMODULE_RFPROTO_ROWS(x) : HIDDEN_ROW,
|
||||
#define MULTIMODULE_HAS_SUBTYPE(x) (x == MM_RF_PROTO_FLYSKY || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_HISKY || x == MM_RF_PROTO_DSM2 || x == MM_RF_PROTO_YD717 || x == MM_RF_PROTO_KN || x == MM_RF_PROTO_SYMAX || x == MM_RF_PROTO_CX10 || x == MM_RF_PROTO_CG023 || x == MM_RF_PROTO_MT99XX || x == MM_RF_PROTO_MJXQ || x == MM_RF_PROTO_HONTAI)
|
||||
#define MULTIMODULE_HASOPTIONS(x) (x == MM_RF_PROTO_HUBSAN || x == MM_RF_PROTO_FRSKY || x == MM_RF_PROTO_DSM2 )
|
||||
#define MULTIMODULE_FAILSAFEROWS(x) (IS_MODULE_MULTIMODULE(x) && (g_model.moduleData[x].multi.customProto || MULTIMODULE_HASOPTIONS(g_model.moduleData[x].getMultiProtocol()))) ? (uint8_t) 0: HIDDEN_ROW
|
||||
|
||||
#else
|
||||
#define MULTIMODULE_MODULE_ROWS
|
||||
#define MULTIMODULE_FAILSAFEROWS(x) HIDDEN_ROW
|
||||
#define MULTIMODULE_SUBTYPE_ROWS(x)
|
||||
#define MULTIMODULE_MODE_ROWS(x) (uint8_t)0
|
||||
#endif
|
||||
|
||||
#define IS_D8_RX(x) (g_model.moduleData[x].rfProtocol == RF_PROTO_D8)
|
||||
#define IF_TRAINER_ON(x) (g_model.trainerMode == TRAINER_MODE_SLAVE ? (uint8_t)(x) : HIDDEN_ROW)
|
||||
|
||||
#define FAILSAFE_ROWS(x) (IS_MODULE_XJT(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : MULTIMODULE_FAILSAFEROWS(x))
|
||||
|
||||
#endif // _GUI_COMMON_H_
|
||||
|
|
|
@ -528,11 +528,11 @@ enum MultiModuleRFProtocols {
|
|||
MM_RF_PROTO_LAST= MM_RF_PROTO_CUSTOM
|
||||
};
|
||||
|
||||
#define MM_RF_DSM2_22MS_6CH_OPTION 2
|
||||
#define MM_RF_DSM2_11MS_7CH_OPTION 7
|
||||
|
||||
#define MM_RF_DSM2_SUBTYPE_DSM2 0
|
||||
#define MM_RF_DSM2_SUBTYPE_DSMX 1
|
||||
#define MM_RF_DSM2_SUBTYPE_DSM2_22 0
|
||||
#define MM_RF_DSM2_SUBTYPE_DSM2_11 1
|
||||
#define MM_RF_DSM2_SUBTYPE_DSMX_22 2
|
||||
#define MM_RF_DSM2_SUBTYPE_DSMX_11 3
|
||||
#define MM_RF_DSM2_SUBTYPE_AUTO 4
|
||||
|
||||
|
||||
#define MM_RF_FRSKY_SUBTYPE_D16 0
|
||||
|
|
|
@ -394,8 +394,10 @@ void memswap(void * a, void * b, uint8_t size);
|
|||
|
||||
#if defined(MULTIMODULE)
|
||||
#define IS_MODULE_MULTIMODULE(idx) (idx==EXTERNAL_MODULE && g_model.moduleData[EXTERNAL_MODULE].type==MODULE_TYPE_MULTIMODULE)
|
||||
#define IS_MODULE_MULTIMODULE_DSM(idx) (IS_MODULE_MULTIMODULE(idx) && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() == MM_RF_PROTO_DSM2)
|
||||
#else
|
||||
#define IS_MODULE_MULTIMODULE(idx) (false)
|
||||
#define IS_MODULE_MULTIMODULE_DSM(idx) (false)
|
||||
#endif
|
||||
|
||||
#if defined(PCBTARANIS) || defined(PCBHORUS)
|
||||
|
@ -423,7 +425,7 @@ void memswap(void * a, void * b, uint8_t size);
|
|||
#endif
|
||||
#define MAX_EXTERNAL_MODULE_CHANNELS() ((g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_XJT) ? maxChannelsXJT[1+g_model.moduleData[1].rfProtocol] : maxChannelsModules[g_model.moduleData[EXTERNAL_MODULE].type])
|
||||
#define MAX_CHANNELS(idx) (idx==INTERNAL_MODULE ? MAX_INTERNAL_MODULE_CHANNELS() : (idx==EXTERNAL_MODULE ? MAX_EXTERNAL_MODULE_CHANNELS() : MAX_TRAINER_CHANNELS_M8()))
|
||||
#define NUM_CHANNELS(idx) ((IS_MODULE_CROSSFIRE(idx) || IS_MODULE_MULTIMODULE(idx)) ? CROSSFIRE_CHANNELS_COUNT : (8+g_model.moduleData[idx].channelsCount))
|
||||
#define NUM_CHANNELS(idx) ((IS_MODULE_CROSSFIRE(idx) || (IS_MODULE_MULTIMODULE(idx) && !IS_MODULE_MULTIMODULE_DSM(idx))) ? CROSSFIRE_CHANNELS_COUNT : (8+g_model.moduleData[idx].channelsCount))
|
||||
#elif defined(PCBSKY9X) && !defined(REVA)
|
||||
#define IS_MODULE_PPM(idx) (idx==TRAINER_MODULE || idx==EXTRA_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)
|
||||
|
|
|
@ -111,12 +111,11 @@ void setupPulsesMultimodule(uint8_t port)
|
|||
|
||||
modulePulsesData[EXTERNAL_MODULE].dsm2.ptr = modulePulsesData[EXTERNAL_MODULE].dsm2.pulses;
|
||||
|
||||
// header, byte 0, always 0x55
|
||||
sendByteMulti(0x55);
|
||||
|
||||
// byte 1+2, protocol information
|
||||
|
||||
int type = g_model.moduleData[port].multi.rfProtocol + 1;
|
||||
// Our enumeration starts at 0
|
||||
int type = g_model.moduleData[port].getMultiProtocol() + 1;
|
||||
int subtype = g_model.moduleData[port].subType;
|
||||
int8_t optionValue = g_model.moduleData[port].multi.optionValue;
|
||||
|
||||
|
@ -127,10 +126,17 @@ void setupPulsesMultimodule(uint8_t port)
|
|||
protoByte |= MULTI_SEND_RANGECHECK;
|
||||
|
||||
// rfProtocol
|
||||
if (type == MM_RF_PROTO_DSM2 && g_model.moduleData[port].multi.autoBindMode && moduleFlag[port] == MODULE_BIND) {
|
||||
if (g_model.moduleData[port].getMultiProtocol() && g_model.moduleData[port].multi.autoBindMode && moduleFlag[port] == MODULE_BIND) {
|
||||
// Autobinding should always be done in DSMX 11ms
|
||||
subtype = MM_RF_DSM2_SUBTYPE_DSMX;
|
||||
optionValue = MM_RF_DSM2_11MS_7CH_OPTION;
|
||||
subtype = MM_RF_DSM2_SUBTYPE_AUTO;
|
||||
|
||||
// The multi module wants the number of channels as options value and negative amout if the
|
||||
// broken PRNG table is to be used.
|
||||
if (optionValue==0)
|
||||
optionValue = NUM_CHANNELS(EXTERNAL_MODULE);
|
||||
else
|
||||
optionValue = -(NUM_CHANNELS(EXTERNAL_MODULE));
|
||||
|
||||
}
|
||||
|
||||
// 15 for Multimodule is FrskyX or D16 which we map as a subprotocol of 3 (FrSky)
|
||||
|
@ -142,7 +148,7 @@ void setupPulsesMultimodule(uint8_t port)
|
|||
if (type >= 23)
|
||||
type = type + 1;
|
||||
|
||||
if (g_model.moduleData[port].multi.rfProtocol == MM_RF_PROTO_FRSKY) {
|
||||
if (g_model.moduleData[port].getMultiProtocol() == MM_RF_PROTO_FRSKY) {
|
||||
if(subtype == MM_RF_FRSKY_SUBTYPE_D8) {
|
||||
//D8
|
||||
type = 3;
|
||||
|
@ -160,11 +166,14 @@ void setupPulsesMultimodule(uint8_t port)
|
|||
}
|
||||
}
|
||||
|
||||
if (g_model.moduleData[port].multi.rfProtocol >= MM_RF_PROTO_CUSTOM)
|
||||
type = g_model.moduleData[port].multi.rfProtocol & 0x1f;
|
||||
// header, byte 0, 0x55 for proto 0-31 0x54 for 32-63
|
||||
if (type <= 31)
|
||||
sendByteMulti(0x55);
|
||||
else
|
||||
sendByteMulti(0x54);
|
||||
|
||||
|
||||
protoByte |= (type & 0x1f); // (g_model.moduleData[port].multi.autoBindMode << 6)
|
||||
// (g_model.moduleData[port].multi.autoBindMode << 6)
|
||||
protoByte |= (type & 0x1f);
|
||||
sendByteMulti(protoByte);
|
||||
|
||||
|
||||
|
|
|
@ -331,47 +331,39 @@ void processSpektrumPacket(const uint8_t *packet)
|
|||
6 1 byte -> RX version but you don't care...
|
||||
7 1 byte -> number of channels, example 0x06=6 channels
|
||||
8 1 byte -> max DSM type allowed:
|
||||
0x01 =>22ms 1024 DSM2 1 packet => number of channels is <8 and no telemetry
|
||||
0x01 => 22ms 1024 DSM2 1 packet => number of channels is <8 and no telemetry
|
||||
0x02 => 22ms 1024 DSM2 2 packets => either a number of channel >7 or telemetry enable RX
|
||||
0x12 => 11ms 2048 DSM2 2 packets => can be any number of channels with/without telemetry -> this mode might be supported following Mike's trials, note the channels should be duplicated between the packets which is not the case today
|
||||
0xa2 => 22ms 2048 DSMX 1 packet => number of channels is <8 and no telemetry
|
||||
0xb2 => 11ms 2048 DSMX => can be any number of channels with/without telemetry -> this mode is only half supported since the channels should be duplicated between the packets which is not the case but might be supported following Mike's trials
|
||||
9 0x00: not sure of the use of this byte since I've always seen it at 0...
|
||||
10 2 bytes CRC but you don't care as I've checked it already...
|
||||
|
||||
Examples: DSM #Chan RXver
|
||||
Inductrix 0xa2 07 1
|
||||
LemonRX+Sat+tele 0xb2 07 1
|
||||
|
||||
*/
|
||||
void processDSMBindPacket(const uint8_t *packet)
|
||||
{
|
||||
uint32_t debugval;
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].subType == MM_RF_PROTO_DSM2
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE && g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() == MM_RF_PROTO_DSM2
|
||||
&& g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode) {
|
||||
|
||||
int channels = packet[7];
|
||||
// Only sets channel etc when in DSM multi mode
|
||||
g_model.moduleData[EXTERNAL_MODULE].channelsCount = channels - 8;
|
||||
if (packet[8] & 0xa0) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].subType = MM_RF_DSM2_SUBTYPE_DSMX;
|
||||
} else {
|
||||
g_model.moduleData[EXTERNAL_MODULE].subType = MM_RF_DSM2_SUBTYPE_DSM2;
|
||||
}
|
||||
|
||||
bool use11ms = false;
|
||||
// 11ms mode (and less than 8 channels since more channels don't worke with 11ms for now
|
||||
if ((packet[8] & 0x10) && (channels < 8)) {
|
||||
use11ms = true;
|
||||
}
|
||||
// bool use11ms = (packet[8] & 0x10) ;
|
||||
if (packet[8] >= 0xb2)
|
||||
g_model.moduleData[EXTERNAL_MODULE].subType = MM_RF_DSM2_SUBTYPE_DSMX_11;
|
||||
else if (packet[8] >= 0xa2)
|
||||
g_model.moduleData[EXTERNAL_MODULE].subType = MM_RF_DSM2_SUBTYPE_DSMX_22;
|
||||
else if (packet[8] >= 0x12)
|
||||
g_model.moduleData[EXTERNAL_MODULE].subType = MM_RF_DSM2_SUBTYPE_DSM2_11;
|
||||
else
|
||||
g_model.moduleData[EXTERNAL_MODULE].subType = MM_RF_DSM2_SUBTYPE_DSM2_22;
|
||||
|
||||
// 4 - 7 => 4-7 ch @ 11ms
|
||||
if (use11ms) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = limit(4, channels, 7);
|
||||
} else {
|
||||
if (channels <= 7) {
|
||||
// 0 -3 => 4-7 ch @ 22ms
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = limit(0, channels - 4, 3);
|
||||
} else {
|
||||
// 8 - 12 => 8-12 ch @ 22ms
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = limit(8, channels, 12);
|
||||
}
|
||||
}
|
||||
storageDirty(EE_MODEL);
|
||||
|
||||
}
|
||||
|
|
|
@ -147,9 +147,9 @@ inline uint8_t modelTelemetryProtocol()
|
|||
|
||||
#if defined(MULTIMODULE)
|
||||
if (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_MULTIMODULE) {
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol == MM_RF_PROTO_DSM2)
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() == MM_RF_PROTO_DSM2)
|
||||
return PROTOCOL_SPEKTRUM;
|
||||
else if ((g_model.moduleData[EXTERNAL_MODULE].multi.rfProtocol == MM_RF_PROTO_FRSKY) &&
|
||||
else if ((g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol() == MM_RF_PROTO_FRSKY) &&
|
||||
(g_model.moduleData[EXTERNAL_MODULE].subType == MM_RF_FRSKY_SUBTYPE_D16 || g_model.moduleData[EXTERNAL_MODULE].subType == MM_RF_FRSKY_SUBTYPE_D16_8CH))
|
||||
return PROTOCOL_FRSKY_SPORT;
|
||||
else
|
||||
|
|
|
@ -115,6 +115,7 @@ const pm_char STR_OPEN9X[] PROGMEM =
|
|||
ISTR(SUBTYPE_FLYSKY)
|
||||
ISTR(SUBTYPE_FRSKY)
|
||||
ISTR(SUBTYPE_HISKY)
|
||||
ISTR(SUBTYPE_DSM)
|
||||
ISTR(SUBTYPE_YD717)
|
||||
ISTR(SUBTYPE_SYMAX)
|
||||
ISTR(SUBTYPE_CX10)
|
||||
|
@ -468,8 +469,9 @@ const pm_char STR_MULTI_RFTUNE[] PROGMEM = TR_MULTI_RFTUNE;
|
|||
const pm_char STR_MULTI_VIDFREQ[] PROGMEM = TR_MULTI_VIDFREQ;
|
||||
const pm_char STR_MULTI_OPTION[] PROGMEM = TR_MULTI_OPTION;
|
||||
const pm_char STR_MULTI_AUTOBIND[] PROGMEM = TR_MULTI_AUTOBIND;
|
||||
const pm_char STR_MULTI_DSM_AUTODTECT[] PROGMEM = TR_MULTI_DSM_AUTODTECT;
|
||||
const pm_char STR_MULTI_LOWPOWER[] PROGMEM = TR_MULTI_LOWPOWER;
|
||||
const pm_char STR_MULTI_DSMFRAME[] PROGMEM = TR_MULTI_DSMFRAME;
|
||||
const pm_char STR_MULTI_DSMPRNG[] PROGMEM = TR_MULTI_DSMPRNG;
|
||||
#if LCD_W < 212
|
||||
const pm_char STR_SUBTYPE[] PROGMEM = TR_SUBTYPE;
|
||||
#endif
|
||||
|
|
|
@ -216,7 +216,8 @@ extern const pm_char STR_OPEN9X[];
|
|||
#define OFS_SUBTYPE_FLYSKY (OFS_MULTI_PROTOCOLS + sizeof(TR_MULTI_PROTOCOLS))
|
||||
#define OFS_SUBTYPE_FRSKY (OFS_SUBTYPE_FLYSKY + sizeof(TR_SUBTYPE_FLYSKY))
|
||||
#define OFS_SUBTYPE_HISKY (OFS_SUBTYPE_FRSKY + sizeof(TR_SUBTYPE_FRSKY))
|
||||
#define OFS_SUBTYPE_YD717 (OFS_SUBTYPE_HISKY + sizeof(TR_SUBTYPE_HISKY))
|
||||
#define OFS_SUBTYPE_DSM (OFS_SUBTYPE_HISKY + sizeof(TR_SUBTYPE_HISKY))
|
||||
#define OFS_SUBTYPE_YD717 (OFS_SUBTYPE_DSM + sizeof(TR_SUBTYPE_DSM))
|
||||
#define OFS_SUBTYPE_SYMAX (OFS_SUBTYPE_YD717 + sizeof(TR_SUBTYPE_YD717))
|
||||
#define OFS_SUBTYPE_CX10 (OFS_SUBTYPE_SYMAX + sizeof(TR_SUBTYPE_SYMAX))
|
||||
#define OFS_SUBTYPE_CG023 (OFS_SUBTYPE_CX10 + sizeof(TR_SUBTYPE_CX10))
|
||||
|
@ -350,6 +351,7 @@ extern const pm_char STR_OPEN9X[];
|
|||
#define STR_SUBTYPE_FLYSKY (STR_OPEN9X + OFS_SUBTYPE_FLYSKY)
|
||||
#define STR_SUBTYPE_FRSKY (STR_OPEN9X + OFS_SUBTYPE_FRSKY)
|
||||
#define STR_SUBTYPE_HISKY (STR_OPEN9X + OFS_SUBTYPE_HISKY)
|
||||
#define STR_SUBTYPE_DSM (STR_OPEN9X + OFS_SUBTYPE_DSM)
|
||||
#define STR_SUBTYPE_YD717 (STR_OPEN9X + OFS_SUBTYPE_YD717)
|
||||
#define STR_SUBTYPE_SYMAX (STR_OPEN9X + OFS_SUBTYPE_SYMAX)
|
||||
#define STR_SUBTYPE_CX10 (STR_OPEN9X + OFS_SUBTYPE_CX10)
|
||||
|
@ -599,8 +601,9 @@ extern const pm_char STR_MULTI_OPTION[];
|
|||
extern const pm_char STR_MULTI_VIDFREQ[];
|
||||
extern const pm_char STR_MULTI_RFTUNE[];
|
||||
extern const pm_char STR_MULTI_AUTOBIND[];
|
||||
extern const pm_char STR_MULTI_DSM_AUTODTECT[];
|
||||
extern const pm_char STR_MULTI_LOWPOWER[];
|
||||
extern const pm_char STR_MULTI_DSMFRAME[];
|
||||
extern const pm_char STR_MULTI_DSMPRNG[];
|
||||
#if LCD_W < 212
|
||||
extern const pm_char STR_SUBTYPE[];
|
||||
#endif
|
||||
|
|
|
@ -107,7 +107,7 @@
|
|||
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
|
||||
|
||||
#define LEN_MULTI_PROTOCOLS "\006"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
|
||||
#define LEN_SUBTYPE_FLYSKY "\004"
|
||||
#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912"
|
||||
|
@ -118,7 +118,8 @@
|
|||
#define LEN_SUBTYPE_HISKY "\005"
|
||||
#define TR_SUBTYPE_HISKY "HiSky""HK310"
|
||||
|
||||
// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1
|
||||
#define LEN_SUBTYPE_DSM "\006"
|
||||
#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms"
|
||||
|
||||
#define LEN_SUBTYPE_YD717 "\007"
|
||||
#define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 "
|
||||
|
@ -890,9 +891,10 @@
|
|||
#endif
|
||||
#define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune")
|
||||
#define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency")
|
||||
#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format")
|
||||
#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables")
|
||||
#define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value")
|
||||
#define TR_MULTI_AUTOBIND INDENT "Autobind"
|
||||
#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_SYNCMENU "[Sync]"
|
||||
#define TR_LIMIT INDENT"Limit"
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX" //LP45 =Low Power 4 und 5 Kanal
|
||||
|
||||
#define LEN_MULTI_PROTOCOLS "\006"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
|
||||
#define LEN_SUBTYPE_FLYSKY "\004"
|
||||
#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912"
|
||||
|
@ -122,7 +122,8 @@
|
|||
#define LEN_SUBTYPE_HISKY "\005"
|
||||
#define TR_SUBTYPE_HISKY "HiSky""HK310"
|
||||
|
||||
// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1
|
||||
#define LEN_SUBTYPE_DSM "\006"
|
||||
#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms"
|
||||
|
||||
#define LEN_SUBTYPE_YD717 "\007"
|
||||
#define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""SYMAX2\0""XINXUN\0""NIHUI\0 "
|
||||
|
@ -893,9 +894,10 @@
|
|||
#endif
|
||||
#define TR_MULTI_RFTUNE TR(INDENT "RF Freq.", INDENT "RF Freq. Feintuning")
|
||||
#define TR_MULTI_VIDFREQ TR(INDENT "Vid. Freq.", INDENT "Video Frequenz")
|
||||
#define TR_MULTI_DSMFRAME TR(INDENT "DSM Frm", INDENT "DSM Rahmenformat")
|
||||
#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables")
|
||||
#define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Optionswert")
|
||||
#define TR_MULTI_AUTOBIND INDENT "Autobind"
|
||||
#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_SYNCMENU "Sync [MENU]"
|
||||
#define TR_LIMIT INDENT "Grenzen"
|
||||
|
|
|
@ -111,7 +111,7 @@
|
|||
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
|
||||
|
||||
#define LEN_MULTI_PROTOCOLS "\006"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
|
||||
#define LEN_SUBTYPE_FLYSKY "\004"
|
||||
#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912"
|
||||
|
@ -122,7 +122,8 @@
|
|||
#define LEN_SUBTYPE_HISKY "\005"
|
||||
#define TR_SUBTYPE_HISKY "HiSky""HK310"
|
||||
|
||||
// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1
|
||||
#define LEN_SUBTYPE_DSM "\006"
|
||||
#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms"
|
||||
|
||||
#define LEN_SUBTYPE_YD717 "\007"
|
||||
#define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 "
|
||||
|
@ -859,9 +860,10 @@
|
|||
#endif
|
||||
#define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune")
|
||||
#define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency")
|
||||
#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format")
|
||||
#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables")
|
||||
#define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value")
|
||||
#define TR_MULTI_AUTOBIND INDENT "Autobind"
|
||||
#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_SYNCMENU "[Sync]"
|
||||
#define TR_LIMIT INDENT "Limit"
|
||||
|
|
|
@ -107,7 +107,7 @@
|
|||
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
|
||||
|
||||
#define LEN_MULTI_PROTOCOLS "\006"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
|
||||
#define LEN_SUBTYPE_FLYSKY "\004"
|
||||
#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912"
|
||||
|
@ -118,7 +118,8 @@
|
|||
#define LEN_SUBTYPE_HISKY "\005"
|
||||
#define TR_SUBTYPE_HISKY "HiSky""HK310"
|
||||
|
||||
// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1
|
||||
#define LEN_SUBTYPE_DSM "\006"
|
||||
#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms"
|
||||
|
||||
#define LEN_SUBTYPE_YD717 "\007"
|
||||
#define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 "
|
||||
|
@ -838,9 +839,10 @@
|
|||
#define TR_RECEIVER INDENT "Receiver"
|
||||
#define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune")
|
||||
#define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency")
|
||||
#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format")
|
||||
#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables")
|
||||
#define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value")
|
||||
#define TR_MULTI_AUTOBIND INDENT "Autobind"
|
||||
#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_SYNCMENU "Sync " TR_ENTER
|
||||
#define TR_LIMIT INDENT"Limite"
|
||||
|
|
|
@ -107,7 +107,7 @@
|
|||
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
|
||||
|
||||
#define LEN_MULTI_PROTOCOLS "\006"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
|
||||
#define LEN_SUBTYPE_FLYSKY "\004"
|
||||
#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912"
|
||||
|
@ -118,7 +118,8 @@
|
|||
#define LEN_SUBTYPE_HISKY "\005"
|
||||
#define TR_SUBTYPE_HISKY "HiSky""HK310"
|
||||
|
||||
// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1
|
||||
#define LEN_SUBTYPE_DSM "\006"
|
||||
#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms"
|
||||
|
||||
#define LEN_SUBTYPE_YD717 "\007"
|
||||
#define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 "
|
||||
|
@ -838,9 +839,10 @@
|
|||
#define TR_RECEIVER INDENT "Receiver"
|
||||
#define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune")
|
||||
#define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency")
|
||||
#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format")
|
||||
#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables")
|
||||
#define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value")
|
||||
#define TR_MULTI_AUTOBIND INDENT "Autobind"
|
||||
#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_SYNCMENU "[Sync]"
|
||||
#define TR_LIMIT INDENT"Limit"
|
||||
|
|
|
@ -107,7 +107,7 @@
|
|||
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
|
||||
|
||||
#define LEN_MULTI_PROTOCOLS "\006"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Perso\0"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Perso\0"
|
||||
|
||||
#define LEN_SUBTYPE_FLYSKY "\004"
|
||||
#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912"
|
||||
|
@ -118,7 +118,8 @@
|
|||
#define LEN_SUBTYPE_HISKY "\005"
|
||||
#define TR_SUBTYPE_HISKY "HiSky""HK310"
|
||||
|
||||
// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1
|
||||
#define LEN_SUBTYPE_DSM "\006"
|
||||
#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms"
|
||||
|
||||
#define LEN_SUBTYPE_YD717 "\007"
|
||||
#define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 "
|
||||
|
@ -873,6 +874,7 @@
|
|||
#define TR_MULTI_DSMFRAME INDENT "Format trame DSM"
|
||||
#define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option perso")
|
||||
#define TR_MULTI_AUTOBIND INDENT "Bind automatique"
|
||||
#define TR_MULTI_DSM_AUTODTECT TR(INDENT "Autodetect", INDENT "Autodetect format")
|
||||
#define TR_MULTI_LOWPOWER TR( INDENT "low power", INDENT "Mode basse puiss.")
|
||||
#define TR_SYNCMENU "Sync [MENU]"
|
||||
#define TR_LIMIT INDENT "Limite"
|
||||
|
|
|
@ -107,7 +107,7 @@
|
|||
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
|
||||
|
||||
#define LEN_MULTI_PROTOCOLS "\006"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
|
||||
#define LEN_SUBTYPE_FLYSKY "\004"
|
||||
#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912"
|
||||
|
@ -118,7 +118,8 @@
|
|||
#define LEN_SUBTYPE_HISKY "\005"
|
||||
#define TR_SUBTYPE_HISKY "HiSky""HK310"
|
||||
|
||||
// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1
|
||||
#define LEN_SUBTYPE_DSM "\006"
|
||||
#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms"
|
||||
|
||||
#define LEN_SUBTYPE_YD717 "\007"
|
||||
#define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 "
|
||||
|
@ -873,9 +874,10 @@
|
|||
#endif
|
||||
#define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune")
|
||||
#define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency")
|
||||
#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format")
|
||||
#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables")
|
||||
#define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value")
|
||||
#define TR_MULTI_AUTOBIND INDENT "Autobind"
|
||||
#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_SYNCMENU "[Sync]"
|
||||
#define TR_LIMIT INDENT "Limiti"
|
||||
|
|
|
@ -112,7 +112,7 @@
|
|||
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
|
||||
|
||||
#define LEN_MULTI_PROTOCOLS "\006"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
|
||||
#define LEN_SUBTYPE_FLYSKY "\004"
|
||||
#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912"
|
||||
|
@ -123,7 +123,8 @@
|
|||
#define LEN_SUBTYPE_HISKY "\005"
|
||||
#define TR_SUBTYPE_HISKY "HiSky""HK310"
|
||||
|
||||
// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1
|
||||
#define LEN_SUBTYPE_DSM "\006"
|
||||
#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms"
|
||||
|
||||
#define LEN_SUBTYPE_YD717 "\007"
|
||||
#define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 "
|
||||
|
@ -867,9 +868,10 @@
|
|||
#endif
|
||||
#define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune")
|
||||
#define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency")
|
||||
#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format")
|
||||
#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables")
|
||||
#define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value")
|
||||
#define TR_MULTI_AUTOBIND INDENT "Autobind"
|
||||
#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_SYNCMENU "Sync [MENU]"
|
||||
#define TR_LIMIT INDENT "Grenzen"
|
||||
|
|
|
@ -108,7 +108,7 @@
|
|||
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
|
||||
|
||||
#define LEN_MULTI_PROTOCOLS "\006"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
|
||||
#define LEN_SUBTYPE_FLYSKY "\004"
|
||||
#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912"
|
||||
|
@ -119,7 +119,8 @@
|
|||
#define LEN_SUBTYPE_HISKY "\005"
|
||||
#define TR_SUBTYPE_HISKY "HiSky""HK310"
|
||||
|
||||
// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1
|
||||
#define LEN_SUBTYPE_DSM "\006"
|
||||
#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms"
|
||||
|
||||
#define LEN_SUBTYPE_YD717 "\007"
|
||||
#define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 "
|
||||
|
@ -875,9 +876,10 @@
|
|||
#endif
|
||||
#define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune")
|
||||
#define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency")
|
||||
#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format")
|
||||
#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables")
|
||||
#define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value")
|
||||
#define TR_MULTI_AUTOBIND INDENT "Autobind"
|
||||
#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_SYNCMENU "[Synch]"
|
||||
#define TR_LIMIT INDENT "Limit"
|
||||
|
|
|
@ -107,7 +107,7 @@
|
|||
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
|
||||
|
||||
#define LEN_MULTI_PROTOCOLS "\006"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
|
||||
|
||||
#define LEN_SUBTYPE_FLYSKY "\004"
|
||||
|
@ -119,7 +119,8 @@
|
|||
#define LEN_SUBTYPE_HISKY "\005"
|
||||
#define TR_SUBTYPE_HISKY "HiSky""HK310"
|
||||
|
||||
// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1
|
||||
#define LEN_SUBTYPE_DSM "\006"
|
||||
#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms"
|
||||
|
||||
#define LEN_SUBTYPE_YD717 "\007"
|
||||
#define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 "
|
||||
|
@ -834,9 +835,10 @@
|
|||
#define TR_SYNCMENU "Sync [MENU]"
|
||||
#define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune")
|
||||
#define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency")
|
||||
#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format")
|
||||
#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables")
|
||||
#define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value")
|
||||
#define TR_MULTI_AUTOBIND INDENT "Autobind"
|
||||
#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_LIMIT INDENT"Limite"
|
||||
#define TR_MINRSSI "Min Rssi"
|
||||
|
|
|
@ -107,7 +107,7 @@
|
|||
#define TR_DSM_PROTOCOLS "LP45""DSM2""DSMX"
|
||||
|
||||
#define LEN_MULTI_PROTOCOLS "\006"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM2\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
#define TR_MULTI_PROTOCOLS "FlySky""Hubsan""FrSky\0""Hisky\0""V2x2\0 ""DSM\0 ""Devo\0 ""YD717\0""KN\0 ""SymaX\0""SLT\0 ""CX10\0 ""CG023\0""Bayang""ESky\0 ""MT99XX""MJXQ\0 ""Shenqi""FY326\0""SFHSS\0""J6 PRO""FQ777\0""Assan\0""Hontai""OLRS\0 ""Custom"
|
||||
|
||||
#define LEN_SUBTYPE_FLYSKY "\004"
|
||||
#define TR_SUBTYPE_FLYSKY "Std\0""V9x9""V6x6""V912"
|
||||
|
@ -118,7 +118,8 @@
|
|||
#define LEN_SUBTYPE_HISKY "\005"
|
||||
#define TR_SUBTYPE_HISKY "HiSky""HK310"
|
||||
|
||||
// SUBTYPE FOR DSMX use TR_DSM_PROTOCOLS with offset +1
|
||||
#define LEN_SUBTYPE_DSM "\006"
|
||||
#define TR_SUBTYPE_DSM "2 22ms""2 11ms""X 22ms""X 11ms"
|
||||
|
||||
#define LEN_SUBTYPE_YD717 "\007"
|
||||
#define TR_SUBTYPE_YD717 "YD717\0 ""SKYWLKR""Syma X2""XINXUN\0""NIHUI\0 "
|
||||
|
@ -887,9 +888,10 @@
|
|||
#define TR_SYNCMENU "Synk [MENU]"
|
||||
#define TR_MULTI_RFTUNE TR(INDENT "Freq tune",INDENT "RF Freq. fine tune")
|
||||
#define TR_MULTI_VIDFREQ TR(INDENT "Vid. freq.", INDENT "Video frequency")
|
||||
#define TR_MULTI_DSMFRAME TR(INDENT "DSM frame", INDENT "DSM frame format")
|
||||
#define TR_MULTI_DSMPRNG TR(INDENT "Wrong PNRG", INDENT "Wrong PRNG tables")
|
||||
#define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option value")
|
||||
#define TR_MULTI_AUTOBIND INDENT "Autobind"
|
||||
#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_LIMIT INDENT "Nivå"
|
||||
#define TR_MINRSSI "Min Rssi"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue