mirror of
https://github.com/opentx/opentx.git
synced 2025-07-25 17:25:13 +03:00
Add support for R9M module (#5101)
* Implement R9M protocol according to PXX spec 1.7 Some of the things here are guesswork as I don’t have a R9M at hand. Also Companion support for the extra R9M options is not implemented yet. * Fix build errors
This commit is contained in:
parent
87295776ff
commit
51be7b000e
33 changed files with 244 additions and 120 deletions
|
@ -105,6 +105,7 @@ class ProtocolsConversionTable: public ConversionTable
|
|||
else if (IS_ARM(board)) {
|
||||
val++;
|
||||
addConversion(PULSES_MULTIMODULE, val++);
|
||||
addConversion(PULSES_PXX_R9M, val++);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -800,6 +800,7 @@ int OpenTxFirmware::isAvailable(PulsesProtocol proto, int port)
|
|||
case PULSES_PXX_XJT_X16:
|
||||
case PULSES_PXX_XJT_D8:
|
||||
case PULSES_PXX_XJT_LR12:
|
||||
case PULSES_PXX_R9M:
|
||||
//case PULSES_PXX_DJT: // Unavailable for now
|
||||
case PULSES_LP45:
|
||||
case PULSES_DSM2:
|
||||
|
@ -832,6 +833,7 @@ int OpenTxFirmware::isAvailable(PulsesProtocol proto, int port)
|
|||
case PULSES_PXX_XJT_X16:
|
||||
case PULSES_PXX_XJT_D8:
|
||||
case PULSES_PXX_XJT_LR12:
|
||||
case PULSES_PXX_R9M:
|
||||
case PULSES_LP45:
|
||||
case PULSES_DSM2:
|
||||
case PULSES_DSMX:
|
||||
|
|
|
@ -261,7 +261,8 @@ ModulePanel::~ModulePanel()
|
|||
|
||||
bool ModulePanel::moduleHasFailsafes()
|
||||
{
|
||||
return ((PulsesProtocol)module.protocol == PulsesProtocol::PULSES_PXX_XJT_X16 && firmware->getCapability(HasFailsafe));;
|
||||
return (((PulsesProtocol)module.protocol == PulsesProtocol::PULSES_PXX_XJT_X16 || (PulsesProtocol)module.protocol == PulsesProtocol::PULSES_PXX_R9M)
|
||||
&& firmware->getCapability(HasFailsafe));;
|
||||
}
|
||||
|
||||
void ModulePanel::setupFailsafes()
|
||||
|
@ -369,8 +370,9 @@ void ModulePanel::update()
|
|||
case PULSES_PXX_XJT_D8:
|
||||
case PULSES_PXX_XJT_LR12:
|
||||
case PULSES_PXX_DJT:
|
||||
case PULSES_PXX_R9M:
|
||||
mask |= MASK_CHANNELS_RANGE | MASK_CHANNELS_COUNT;
|
||||
if (protocol==PULSES_PXX_XJT_X16 || protocol==PULSES_PXX_XJT_LR12)
|
||||
if (protocol==PULSES_PXX_XJT_X16 || protocol==PULSES_PXX_XJT_LR12 || protocol==PULSES_PXX_R9M)
|
||||
mask |= MASK_RX_NUMBER;
|
||||
if (IS_HORUS(firmware->getBoard()) && moduleIdx==0)
|
||||
mask |= MASK_ANTENNA;
|
||||
|
|
|
@ -119,7 +119,8 @@ QString ModelPrinter::printModuleProtocol(unsigned int protocol)
|
|||
"PPM16", "PPMsim",
|
||||
"FrSky XJT (D16)", "FrSky XJT (D8)", "FrSky XJT (LR12)", "FrSky DJT",
|
||||
"Crossfire",
|
||||
"DIY Multiprotocol Module"
|
||||
"DIY Multiprotocol Module",
|
||||
"FrSky R9M Module"
|
||||
};
|
||||
|
||||
return CHECK_IN_ARRAY(strings, protocol);
|
||||
|
|
|
@ -774,6 +774,7 @@ enum PulsesProtocol {
|
|||
PULSES_PXX_DJT,
|
||||
PULSES_CROSSFIRE,
|
||||
PULSES_MULTIMODULE,
|
||||
PULSES_PXX_R9M,
|
||||
PULSES_PROTOCOL_LAST
|
||||
};
|
||||
|
||||
|
|
|
@ -674,11 +674,12 @@ PACK(struct ModuleData {
|
|||
int8_t optionValue;
|
||||
} multi);
|
||||
NOBACKUP(struct {
|
||||
uint8_t spare:4;
|
||||
uint8_t power:2; // 0 10 mW, 1 100 mW, 2 500 mW, 3 1W
|
||||
uint8_t spare:2;
|
||||
uint8_t receiver_telem_off:1; // false = receiver telem enabled
|
||||
uint8_t receiver_channel_9_16:1; // false = pwm out 1-8, true 9-16
|
||||
uint8_t external_antenna:1; // false = internal antenna, true = external antenna
|
||||
uint8_t spare2:1;
|
||||
uint8_t sport_out:1;
|
||||
uint8_t spare3;
|
||||
} pxx);
|
||||
};
|
||||
|
|
|
@ -78,10 +78,11 @@ enum MenuModelSetupItems {
|
|||
ITEM_MODEL_EXTERNAL_MODULE_OUTPUT_TYPE,
|
||||
#endif
|
||||
ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE,
|
||||
ITEM_MODEL_EXTERNAL_MODULE_OPTIONS,
|
||||
#if defined(MULTIMODULE)
|
||||
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
|
||||
ITEM_MODEL_EXTERNAL_MODULE_LOWPOWER,
|
||||
#endif
|
||||
ITEM_MODEL_EXTERNAL_MODULE_POWER,
|
||||
#if defined(PCBSKY9X) && !defined(REVA)
|
||||
ITEM_MODEL_EXTRA_MODULE_LABEL,
|
||||
ITEM_MODEL_EXTRA_MODULE_CHANNELS,
|
||||
|
@ -133,9 +134,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_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_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
|
||||
#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_PXX(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW
|
||||
|
||||
#if defined(PCBSKY9X) && defined(REVX)
|
||||
#define OUTPUT_TYPE_ROWS() (IS_MODULE_PPM(EXTERNAL_MODULE) ? (uint8_t)0 : HIDDEN_ROW) ,
|
||||
|
@ -215,7 +215,9 @@ void menuModelSetup(event_t event)
|
|||
EXTERNAL_MODULE_BIND_ROWS(),
|
||||
OUTPUT_TYPE_ROWS()
|
||||
FAILSAFE_ROWS(EXTERNAL_MODULE),
|
||||
EXTERNAL_MODULE_OPTION_ROW,
|
||||
MULTIMODULE_MODULE_ROWS
|
||||
EXTERNAL_MODULE_POWER_ROW,
|
||||
EXTRA_MODULE_ROWS
|
||||
TRAINER_MODULE_ROWS });
|
||||
#elif defined(CPUARM)
|
||||
|
@ -228,7 +230,9 @@ void menuModelSetup(event_t event)
|
|||
EXTERNAL_MODULE_BIND_ROWS(),
|
||||
OUTPUT_TYPE_ROWS()
|
||||
FAILSAFE_ROWS(EXTERNAL_MODULE),
|
||||
EXTERNAL_MODULE_OPTION_ROW,
|
||||
MULTIMODULE_MODULE_ROWS
|
||||
EXTERNAL_MODULE_POWER_ROW,
|
||||
EXTRA_MODULE_ROWS
|
||||
TRAINER_MODULE_ROWS });
|
||||
#elif defined(CPUM64)
|
||||
|
@ -875,7 +879,7 @@ void menuModelSetup(event_t event)
|
|||
else {
|
||||
lcdDrawTextAlignedLeft(y, STR_RECEIVER_NUM);
|
||||
}
|
||||
if (IS_MODULE_XJT(moduleIdx) || IS_MODULE_DSM2(moduleIdx) || IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
if (IS_MODULE_PXX(moduleIdx) || IS_MODULE_DSM2(moduleIdx) || IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
if (xOffsetBind) lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz==0 ? attr : 0) | LEADING0|LEFT, 2);
|
||||
if (attr && l_posHorz==0) {
|
||||
if (editMode>0 || p1valdiff) {
|
||||
|
@ -961,11 +965,10 @@ void menuModelSetup(event_t event)
|
|||
case ITEM_MODEL_INTERNAL_MODULE_FAILSAFE:
|
||||
#endif
|
||||
#if defined(CPUARM)
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE:
|
||||
{
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE: {
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
ModuleData & moduleData = g_model.moduleData[moduleIdx];
|
||||
if (IS_MODULE_XJT(moduleIdx)) {
|
||||
ModuleData &moduleData = g_model.moduleData[moduleIdx];
|
||||
if (IS_MODULE_PXX(moduleIdx)) {
|
||||
lcdDrawTextAlignedLeft(y, STR_FAILSAFE);
|
||||
lcdDrawTextAlignedLeft(y, TR_FAILSAFE);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VFAILSAFE, moduleData.failsafeMode, menuHorizontalPosition == 0
|
||||
|
@ -981,25 +984,27 @@ void menuModelSetup(event_t event)
|
|||
CHECK_INCDEC_MODELVAR_ZERO(event, moduleData.failsafeMode, FAILSAFE_LAST);
|
||||
if (checkIncDec_Ret) SEND_FAILSAFE_NOW(moduleIdx);
|
||||
}
|
||||
}
|
||||
else if (menuHorizontalPosition == 1) {
|
||||
} else if (menuHorizontalPosition == 1) {
|
||||
s_editMode = 0;
|
||||
if (moduleData.failsafeMode == FAILSAFE_CUSTOM && event == EVT_KEY_FIRST(KEY_ENTER)) {
|
||||
g_moduleIdx = moduleIdx;
|
||||
pushMenu(menuModelFailsafe);
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
lcdDrawSolidFilledRect(MODEL_SETUP_2ND_COLUMN, y, LCD_W - MODEL_SETUP_2ND_COLUMN, 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_OPTIONS: {
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
#if defined(MULTIMODULE)
|
||||
else if (IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
int optionValue = g_model.moduleData[moduleIdx].multi.optionValue;
|
||||
if (IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
int optionValue = g_model.moduleData[moduleIdx].multi.optionValue;
|
||||
|
||||
const uint8_t multi_proto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true);
|
||||
const mm_protocol_definition* pdef = getMultiProtocolDefinition(multi_proto);
|
||||
const mm_protocol_definition *pdef = getMultiProtocolDefinition(multi_proto);
|
||||
if (pdef->optionsstr)
|
||||
lcdDrawTextAlignedLeft(y, pdef->optionsstr);
|
||||
|
||||
|
@ -1018,9 +1023,26 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
if (IS_MODULE_R9M(moduleIdx)) {
|
||||
g_model.moduleData[moduleIdx].pxx.sport_out = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].pxx.sport_out, MODEL_SETUP_2ND_COLUMN, y, STR_SPORT_OUT, attr, event);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_POWER: {
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
#if defined(MULTIMODULE)
|
||||
if (IS_MODULE_MULTIMODULE(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);
|
||||
}
|
||||
#endif
|
||||
if (IS_MODULE_R9M(moduleIdx)) {
|
||||
lcdDrawTextAlignedLeft(y, TR_MULTI_RFPOWER);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, getR9MPowerString(g_model.moduleData[moduleIdx].pxx.power), attr);
|
||||
if (attr)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].pxx.power, 0, 3);
|
||||
}
|
||||
}
|
||||
break;
|
||||
#if defined(MULTIMODULE)
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
|
||||
|
@ -1028,9 +1050,6 @@ void menuModelSetup(event_t 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:
|
||||
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);
|
||||
break;
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_STATUS: {
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_STATUS);
|
||||
|
||||
|
|
|
@ -66,7 +66,7 @@ void menuRadioDiagAnalogs(event_t event)
|
|||
lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT + 1 + (NUM_STICKS+NUM_POTS+NUM_SLIDERS+1)/2 * FH + 2, STR_BATT_CALIB);
|
||||
putsVolts(LEN_CALIB_FIELDS*FW+FW, MENU_HEADER_HEIGHT + 1 + (NUM_STICKS+NUM_POTS+NUM_SLIDERS+1)/2 * FH + 2, getBatteryVoltage(), (menuVerticalPosition==HEADER_LINE ? INVERS | (s_editMode > 0 ? BLINK : 0) : 0) | PREC2 | LEFT);
|
||||
// SWR
|
||||
if(IS_MODULE_XJT(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON()) {
|
||||
if(IS_MODULE_PXX(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON()) {
|
||||
lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT + 1 + (NUM_STICKS+NUM_POTS+NUM_SLIDERS+1)/2 * FH + 1 * FH + 2, "RAS");
|
||||
lcdDrawNumber(LEN_CALIB_FIELDS*FW+FW, MENU_HEADER_HEIGHT + 1 + (NUM_STICKS+NUM_POTS+NUM_SLIDERS+1)/2 * FH + 1 * FH + 2, telemetryData.swr.value, LEFT);
|
||||
}
|
||||
|
|
|
@ -82,10 +82,11 @@ enum MenuModelSetupItems {
|
|||
ITEM_MODEL_EXTERNAL_MODULE_CHANNELS,
|
||||
ITEM_MODEL_EXTERNAL_MODULE_BIND,
|
||||
ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE,
|
||||
ITEM_MODEL_EXTERNAL_MODULE_OPTIONS,
|
||||
#if defined(MULTIMODULE)
|
||||
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
|
||||
ITEM_MODEL_EXTERNAL_MODULE_LOWPOWER,
|
||||
#endif
|
||||
ITEM_MODEL_EXTERNAL_MODULE_POWER,
|
||||
ITEM_MODEL_TRAINER_LABEL,
|
||||
ITEM_MODEL_TRAINER_MODE,
|
||||
ITEM_MODEL_TRAINER_CHANNELS,
|
||||
|
@ -238,7 +239,6 @@ int getSwitchWarningsCount()
|
|||
#define INTERNAL_MODULE_MODE_ROWS 0 // (OFF / RF protocols)
|
||||
#endif
|
||||
#define IF_EXTERNAL_MODULE_ON(x) (g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_NONE ? HIDDEN_ROW : (uint8_t)(x))
|
||||
#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 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()))
|
||||
|
@ -284,7 +284,7 @@ void menuModelSetup(event_t event)
|
|||
MULTIMODULE_STATUS_ROW
|
||||
EXTERNAL_MODULE_CHANNELS_ROWS,
|
||||
(IS_MODULE_XJT(EXTERNAL_MODULE) && !HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[EXTERNAL_MODULE].rfProtocol)) ? (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,
|
||||
FAILSAFE_ROWS(EXTERNAL_MODULE), MULTIMODULE_MODULE_ROWS
|
||||
FAILSAFE_ROWS(EXTERNAL_MODULE), EXTERNAL_MODULE_OPTION_ROW, MULTIMODULE_MODULE_ROWS EXTERNAL_MODULE_POWER_ROW,
|
||||
LABEL(Trainer), 0, TRAINER_CHANNELS_ROWS(), IF_TRAINER_ON(2)});
|
||||
#else
|
||||
MENU_TAB({ 0, 0, TIMERS_ROWS, TOPLCD_ROWS 0, 1, 0, 0,
|
||||
|
@ -299,9 +299,9 @@ void menuModelSetup(event_t event)
|
|||
EXTERNAL_MODULE_MODE_ROWS,
|
||||
MULTIMODULE_STATUS_ROW
|
||||
EXTERNAL_MODULE_CHANNELS_ROWS,
|
||||
(IS_MODULE_XJT(EXTERNAL_MODULE) && !HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[EXTERNAL_MODULE].rfProtocol)) ? (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,
|
||||
FAILSAFE_ROWS(EXTERNAL_MODULE), MULTIMODULE_MODULE_ROWS
|
||||
LABEL(Trainer), 0, TRAINER_CHANNELS_ROWS(), IF_TRAINER_ON(2)});
|
||||
(IS_MODULE_XJT(EXTERNAL_MODULE) && !HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[EXTERNAL_MODULE].rfProtocol)) ? (uint8_t)1 : (IS_MODULE_PPM(EXTERNAL_MODULE) || IS_MODULE_PXX(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)2 : HIDDEN_ROW,
|
||||
FAILSAFE_ROWS(EXTERNAL_MODULE), EXTERNAL_MODULE_OPTION_ROW, MULTIMODULE_MODULE_ROWS EXTERNAL_MODULE_POWER_ROW,
|
||||
LABEL(Trainer), 0, TRAINER_CHANNELS_ROWS(), IF_TRAINER_ON(2)});
|
||||
#endif
|
||||
MENU_CHECK(STR_MENUSETUP, menuTabModel, MENU_MODEL_SETUP, ITEM_MODEL_SETUP_MAX);
|
||||
|
||||
|
@ -699,9 +699,9 @@ void menuModelSetup(event_t event)
|
|||
if (attr) {
|
||||
g_model.moduleData[INTERNAL_MODULE].rfProtocol = checkIncDec(event, g_model.moduleData[INTERNAL_MODULE].rfProtocol, RF_PROTO_OFF, RF_PROTO_LAST, EE_MODEL, isRfProtocolAvailable);
|
||||
if (checkIncDec_Ret) {
|
||||
g_model.moduleData[0].type = MODULE_TYPE_XJT;
|
||||
g_model.moduleData[0].channelsStart = 0;
|
||||
g_model.moduleData[0].channelsCount = DEFAULT_CHANNELS(INTERNAL_MODULE);
|
||||
g_model.moduleData[INTERNAL_MODULE].type = MODULE_TYPE_XJT;
|
||||
g_model.moduleData[INTERNAL_MODULE].channelsStart = 0;
|
||||
g_model.moduleData[INTERNAL_MODULE].channelsCount = DEFAULT_CHANNELS(INTERNAL_MODULE);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -818,7 +818,7 @@ void menuModelSetup(event_t event)
|
|||
lcdDrawNumber(lcdLastRightPos, y, moduleData.channelsStart+1, LEFT | (menuHorizontalPosition==0 ? attr : 0));
|
||||
lcdDrawChar(lcdLastRightPos, y, '-');
|
||||
lcdDrawNumber(lcdLastRightPos + FW+1, y, moduleData.channelsStart+NUM_CHANNELS(moduleIdx), LEFT | (menuHorizontalPosition==1 ? attr : 0));
|
||||
if (IS_MODULE_XJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol== RF_PROTO_X16) {
|
||||
if (IS_R9M_OR_XJTD16(moduleIdx)) {
|
||||
if (NUM_CHANNELS(moduleIdx) > 8)
|
||||
lcdDrawText(lcdLastRightPos+5, y, "(18ms)");
|
||||
else
|
||||
|
@ -886,7 +886,7 @@ void menuModelSetup(event_t event)
|
|||
else {
|
||||
lcdDrawTextAlignedLeft(y, STR_RECEIVER_NUM);
|
||||
}
|
||||
if (IS_MODULE_XJT(moduleIdx) || IS_MODULE_DSM2(moduleIdx) || IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
if (IS_MODULE_PXX(moduleIdx) || IS_MODULE_DSM2(moduleIdx) || IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
if (xOffsetBind) lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz==0 ? attr : 0) | LEADING0|LEFT, 2);
|
||||
if (attr && l_posHorz==0) {
|
||||
if (s_editMode>0) {
|
||||
|
@ -962,7 +962,7 @@ void menuModelSetup(event_t event)
|
|||
case ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE:
|
||||
{
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
if (IS_MODULE_XJT(moduleIdx)) {
|
||||
if (IS_MODULE_PXX(moduleIdx)) {
|
||||
ModuleData & moduleData = g_model.moduleData[moduleIdx];
|
||||
lcdDrawTextAlignedLeft(y, STR_FAILSAFE);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VFAILSAFE, moduleData.failsafeMode, menuHorizontalPosition==0 ? attr : 0);
|
||||
|
@ -989,42 +989,64 @@ void menuModelSetup(event_t event)
|
|||
}
|
||||
}
|
||||
}
|
||||
#if defined(MULTIMODULE)
|
||||
else if (IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
int optionValue = g_model.moduleData[moduleIdx].multi.optionValue;
|
||||
|
||||
const uint8_t multi_proto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true);
|
||||
const mm_protocol_definition* pdef = getMultiProtocolDefinition(multi_proto);
|
||||
if (pdef->optionsstr)
|
||||
lcdDrawTextAlignedLeft(y, pdef->optionsstr);
|
||||
|
||||
if (multi_proto == MM_RF_PROTO_FS_AFHDS2A)
|
||||
optionValue = 50 + 5 * optionValue;
|
||||
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
|
||||
if (attr) {
|
||||
if (multi_proto == MM_RF_PROTO_FS_AFHDS2A) {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, 0, 70);
|
||||
} else if (multi_proto == MM_RF_PROTO_OLRS) {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -1, 7);
|
||||
} else {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_OPTIONS: {
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
#if defined(MULTIMODULE)
|
||||
if (IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
int optionValue = g_model.moduleData[moduleIdx].multi.optionValue;
|
||||
|
||||
const uint8_t multi_proto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true);
|
||||
const mm_protocol_definition *pdef = getMultiProtocolDefinition(multi_proto);
|
||||
if (pdef->optionsstr)
|
||||
lcdDrawTextAlignedLeft(y, pdef->optionsstr);
|
||||
|
||||
if (multi_proto == MM_RF_PROTO_FS_AFHDS2A)
|
||||
optionValue = 50 + 5 * optionValue;
|
||||
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, optionValue, LEFT | attr);
|
||||
if (attr) {
|
||||
if (multi_proto == MM_RF_PROTO_FS_AFHDS2A) {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, 0, 70);
|
||||
}
|
||||
else if (multi_proto == MM_RF_PROTO_OLRS) {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -1, 7);
|
||||
}
|
||||
else {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (IS_MODULE_R9M(moduleIdx)) {
|
||||
g_model.moduleData[moduleIdx].pxx.sport_out = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].pxx.sport_out, MODEL_SETUP_2ND_COLUMN, y, STR_SPORT_OUT, attr, event);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_POWER: {
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
#if defined (MULTIMODULE)
|
||||
if (IS_MODULE_MULTIMODULE(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);
|
||||
#endif
|
||||
if (IS_MODULE_R9M(moduleIdx)) {
|
||||
lcdDrawTextAlignedLeft(y, TR_MULTI_RFPOWER);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, getR9MPowerString(g_model.moduleData[moduleIdx].pxx.power), attr);
|
||||
if (attr)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].pxx.power, 0, 3);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
#if defined (MULTIMODULE)
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
||||
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;
|
||||
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);
|
||||
break;
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_STATUS: {
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_STATUS);
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ void menuRadioDiagAnalogs(event_t event)
|
|||
}
|
||||
|
||||
// SWR
|
||||
if((IS_MODULE_XJT(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) || (IS_MODULE_XJT(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON())) {
|
||||
if((IS_MODULE_XJT(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) || (IS_MODULE_PXX(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON())) {
|
||||
lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+6*FH, "RAS");
|
||||
lcdDrawNumber(10*FW-1, MENU_HEADER_HEIGHT+6*FH, telemetryData.swr.value, RIGHT);
|
||||
lcdDrawText(LCD_W/2, MENU_HEADER_HEIGHT+6*FH, "XJTVER");
|
||||
|
|
|
@ -75,10 +75,11 @@ enum MenuModelSetupItems {
|
|||
ITEM_MODEL_EXTERNAL_MODULE_CHANNELS,
|
||||
ITEM_MODEL_EXTERNAL_MODULE_BIND,
|
||||
ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE,
|
||||
ITEM_MODEL_EXTERNAL_MODULE_OPTIONS,
|
||||
#if defined(MULTIMODULE)
|
||||
ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND,
|
||||
ITEM_MODEL_EXTERNAL_MODULE_LOWPOWER,
|
||||
#endif
|
||||
ITEM_MODEL_EXTERNAL_MODULE_POWER,
|
||||
ITEM_MODEL_TRAINER_LABEL,
|
||||
ITEM_MODEL_TRAINER_MODE,
|
||||
ITEM_MODEL_TRAINER_CHANNELS,
|
||||
|
@ -208,7 +209,6 @@ int getSwitchWarningsCount()
|
|||
return count;
|
||||
}
|
||||
|
||||
#define IF_EXTERNAL_MODULE_XJT(x) (IS_MODULE_XJT(EXTERNAL_MODULE) ? (uint8_t)x : HIDDEN_ROW)
|
||||
#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))
|
||||
|
||||
|
@ -261,7 +261,7 @@ bool menuModelSetup(event_t event)
|
|||
MULTIMODULE_STATUS_ROW
|
||||
EXTERNAL_MODULE_CHANNELS_ROWS,
|
||||
(IS_MODULE_XJT(EXTERNAL_MODULE) && !HAS_RF_PROTOCOL_MODELINDEX(g_model.moduleData[EXTERNAL_MODULE].rfProtocol)) ? (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,
|
||||
FAILSAFE_ROWS(EXTERNAL_MODULE), MULTIMODULE_MODULE_ROWS
|
||||
FAILSAFE_ROWS(EXTERNAL_MODULE), EXTERNAL_MODULE_OPTION_ROW, MULTIMODULE_MODULE_ROWS EXTERNAL_MODULE_POWER_ROW,
|
||||
LABEL(Trainer), 0, TRAINER_CHANNELS_ROWS(), IF_TRAINER_ON(2) });
|
||||
|
||||
if (menuEvent) {
|
||||
|
@ -747,11 +747,11 @@ bool menuModelSetup(event_t event)
|
|||
drawStringWithIndex(MODEL_SETUP_2ND_COLUMN, y, STR_CH, moduleData.channelsStart+1, menuHorizontalPosition==0 ? attr : 0);
|
||||
lcdDrawText(lcdNextPos+5, y, "-");
|
||||
drawStringWithIndex(lcdNextPos+5, y, STR_CH, moduleData.channelsStart+NUM_CHANNELS(moduleIdx), menuHorizontalPosition==1 ? attr : 0);
|
||||
if (IS_MODULE_XJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol== RF_PROTO_X16) {
|
||||
if (IS_R9M_OR_XJTD16(moduleIdx)) {
|
||||
if (NUM_CHANNELS(moduleIdx) > 8)
|
||||
lcdDrawText(lcdNextPos+15, y, "(18ms)");
|
||||
lcdDrawText(lcdNextPos + 15, y, "(18ms)");
|
||||
else
|
||||
lcdDrawText(lcdNextPos+15, y, "(9ms)");
|
||||
lcdDrawText(lcdNextPos + 15, y, "(9ms)");
|
||||
}
|
||||
if (attr && s_editMode>0) {
|
||||
switch (menuHorizontalPosition) {
|
||||
|
@ -807,7 +807,7 @@ bool menuModelSetup(event_t event)
|
|||
else {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_RECEIVER_NUM);
|
||||
}
|
||||
if (IS_MODULE_XJT(moduleIdx) || IS_MODULE_DSM2(moduleIdx) || IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
if (IS_MODULE_PXX(moduleIdx) || IS_MODULE_DSM2(moduleIdx) || IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
if (xOffsetBind) lcdDrawNumber(MODEL_SETUP_2ND_COLUMN, y, g_model.header.modelId[moduleIdx], (l_posHorz==0 ? attr : 0) | LEADING0 | LEFT, 2);
|
||||
if (attr && l_posHorz==0 && s_editMode>0) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], MAX_RX_NUM(moduleIdx));
|
||||
|
@ -874,7 +874,7 @@ bool menuModelSetup(event_t event)
|
|||
case ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE:
|
||||
{
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
if (IS_MODULE_XJT(moduleIdx)) {
|
||||
if (IS_MODULE_PXX(moduleIdx)) {
|
||||
ModuleData & moduleData = g_model.moduleData[moduleIdx];
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_FAILSAFE);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VFAILSAFE, moduleData.failsafeMode, menuHorizontalPosition==0 ? attr : 0);
|
||||
|
@ -898,16 +898,20 @@ bool menuModelSetup(event_t event)
|
|||
}
|
||||
}
|
||||
else {
|
||||
lcdDrawSolidFilledRect(MODEL_SETUP_2ND_COLUMN, y, LCD_W-MODEL_SETUP_2ND_COLUMN-2, 8, TEXT_COLOR);
|
||||
lcdDrawSolidFilledRect(MODEL_SETUP_2ND_COLUMN, y, LCD_W - MODEL_SETUP_2ND_COLUMN - 2, 8, TEXT_COLOR);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_OPTIONS: {
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
#if defined(MULTIMODULE)
|
||||
else if (IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
int optionValue = g_model.moduleData[moduleIdx].multi.optionValue;
|
||||
if (IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
int optionValue = g_model.moduleData[moduleIdx].multi.optionValue;
|
||||
|
||||
const uint8_t multi_proto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true);
|
||||
const mm_protocol_definition* pdef = getMultiProtocolDefinition(multi_proto);
|
||||
const mm_protocol_definition *pdef = getMultiProtocolDefinition(multi_proto);
|
||||
if (pdef->optionsstr)
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, pdef->optionsstr);
|
||||
|
||||
|
@ -926,8 +930,28 @@ bool menuModelSetup(event_t event)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
if (IS_MODULE_R9M(moduleIdx)) {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_SPORT_OUT);
|
||||
g_model.moduleData[moduleIdx].pxx.sport_out = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].pxx.sport_out, MODEL_SETUP_2ND_COLUMN, y, attr, event);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_POWER: {
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
if (IS_MODULE_R9M(moduleIdx)) {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, TR_MULTI_RFPOWER);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, getR9MPowerString(g_model.moduleData[moduleIdx].pxx.power), LEFT | attr);
|
||||
if (attr)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].pxx.power, 0, 3);
|
||||
}
|
||||
#if defined(MULTIMODULE)
|
||||
else if (IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_LOWPOWER);
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.lowPowerMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.lowPowerMode, MODEL_SETUP_2ND_COLUMN, y, attr, event);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
#if defined(MULTIMODULE)
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_AUTOBIND:
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
|
||||
|
@ -936,10 +960,6 @@ bool menuModelSetup(event_t event)
|
|||
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);
|
||||
break;
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_LOWPOWER:
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_LOWPOWER);
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.lowPowerMode = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].multi.lowPowerMode, MODEL_SETUP_2ND_COLUMN, y, attr, event);
|
||||
break;
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_STATUS: {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MODULE_STATUS);
|
||||
|
||||
|
|
|
@ -178,7 +178,7 @@ bool menuStatsAnalogs(event_t event)
|
|||
}
|
||||
|
||||
// SWR
|
||||
if((IS_MODULE_XJT(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) || (IS_MODULE_XJT(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON())) {
|
||||
if((IS_MODULE_XJT(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) || (IS_MODULE_PXX(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON())) {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, MENU_CONTENT_TOP+7*FH, "RAS");
|
||||
lcdDrawNumber(MENUS_MARGIN_LEFT+100, MENU_CONTENT_TOP+7*FH, telemetryData.swr.value);
|
||||
lcdDrawText(MENUS_MARGIN_LEFT + LCD_W/2, MENU_CONTENT_TOP+7*FH, "XJTVER");
|
||||
|
|
|
@ -68,6 +68,7 @@ bool isCurrentSensor(int sensor);
|
|||
bool isTelemetryFieldAvailable(int index);
|
||||
bool isTelemetryFieldComparisonAvailable(int index);
|
||||
bool isSensorAvailable(int sensor);
|
||||
const char* getR9MPowerString(int power);
|
||||
|
||||
bool modelHasNotes();
|
||||
#endif
|
||||
|
@ -119,13 +120,13 @@ void lcdDrawMMM(coord_t x, coord_t y, LcdFlags flags=0);
|
|||
|
||||
#if defined(MULTIMODULE)
|
||||
#define MULTIMODULE_STATUS_ROW IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) ? TITLE_ROW : HIDDEN_ROW,
|
||||
#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_MODULE_ROWS 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(true)) ? (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(true)) ? (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) (getMultiProtocolDefinition(x)->maxSubtype > 0)
|
||||
#define MULTIMODULE_HASOPTIONS(x) (getMultiProtocolDefinition(x)->optionsstr != nullptr)
|
||||
#define MULTIMODULE_FAILSAFEROWS(x) (IS_MODULE_MULTIMODULE(x) && (MULTIMODULE_HASOPTIONS(g_model.moduleData[x].getMultiProtocol(true)))) ? (uint8_t) 0: HIDDEN_ROW
|
||||
#define MULTIMODULE_OPTIONS_ROW (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) && MULTIMODULE_HASOPTIONS(g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true))) ? (uint8_t) 0: HIDDEN_ROW
|
||||
#define MULTI_MAX_RX_NUM(x) (g_model.moduleData[x].getMultiProtocol(true) == MM_RF_PROTO_OLRS ? 4 : 15)
|
||||
// only packed to save flash
|
||||
PACK(
|
||||
|
@ -144,15 +145,24 @@ const mm_protocol_definition *getMultiProtocolDefinition (uint8_t protocol);
|
|||
#define MULTIMODULE_SUBTYPE_ROWS(x)
|
||||
#define MULTIMODULE_MODE_ROWS(x) (uint8_t)0
|
||||
#define MULTI_MAX_RX_NUM(x) 15
|
||||
#define MULTIMODULE_OPTIONS_ROW HIDDEN_ROW
|
||||
#endif
|
||||
|
||||
#define MAX_RX_NUM(x) (IS_MODULE_DSM2(x) ? 20 : IS_MODULE_MULTIMODULE(x) ? MULTI_MAX_RX_NUM(x) : 63)
|
||||
// Multi failsafe is WIP
|
||||
#define MULTIMODULE_HASFAILSAFE(x) false
|
||||
|
||||
|
||||
#define MAX_RX_NUM(x) (IS_MODULE_DSM2(x) ? 20 : IS_MODULE_MULTIMODULE(x) ? MULTI_MAX_RX_NUM(x) : 63)
|
||||
#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 IS_R9M_OR_XJTD16(x) ((IS_MODULE_XJT(x) && g_model.moduleData[x].rfProtocol== RF_PROTO_X16) || IS_MODULE_R9M(x))
|
||||
|
||||
#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 FAILSAFE_ROWS(x) ((IS_MODULE_XJT(x) && HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[x].rfProtocol)) || MULTIMODULE_HASFAILSAFE(x) || IS_MODULE_R9M(x)) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW
|
||||
#define EXTERNAL_MODULE_OPTION_ROW (IS_MODULE_R9M(EXTERNAL_MODULE) ? (uint8_t) 0 : MULTIMODULE_OPTIONS_ROW)
|
||||
#define EXTERNAL_MODULE_POWER_ROW (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) || IS_MODULE_R9M(EXTERNAL_MODULE)) ? (uint8_t) 0 : HIDDEN_ROW
|
||||
|
||||
void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags);
|
||||
|
||||
|
||||
|
||||
#endif // _GUI_COMMON_H_
|
||||
|
|
|
@ -705,3 +705,18 @@ void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, Lcd
|
|||
else
|
||||
lcdDrawMMM(x, y, flags);
|
||||
}
|
||||
|
||||
const char* getR9MPowerString(int power)
|
||||
{
|
||||
switch (power) {
|
||||
case 0:
|
||||
return " 10 mW";
|
||||
case 1:
|
||||
return "100 mW";
|
||||
case 2:
|
||||
return "500 mW";
|
||||
case 3:
|
||||
default:
|
||||
return " 1 W";
|
||||
}
|
||||
}
|
||||
|
|
|
@ -569,6 +569,7 @@ enum ModuleTypes {
|
|||
MODULE_TYPE_DSM2,
|
||||
MODULE_TYPE_CROSSFIRE,
|
||||
MODULE_TYPE_MULTIMODULE,
|
||||
MODULE_TYPE_R9M,
|
||||
MODULE_TYPE_COUNT
|
||||
};
|
||||
|
||||
|
|
|
@ -1024,7 +1024,7 @@ void checkSDVersion()
|
|||
void checkFailsafe()
|
||||
{
|
||||
for (int i=0; i<NUM_MODULES; i++) {
|
||||
if (IS_MODULE_XJT(i)) {
|
||||
if (IS_MODULE_PXX(i)) {
|
||||
ModuleData & moduleData = g_model.moduleData[i];
|
||||
if (HAS_RF_PROTOCOL_FAILSAFE(moduleData.rfProtocol) && moduleData.failsafeMode == FAILSAFE_NOT_SET) {
|
||||
ALERT(STR_FAILSAFEWARN, STR_NO_FAILSAFE, AU_ERROR);
|
||||
|
|
|
@ -373,8 +373,8 @@ void memswap(void * a, void * b, uint8_t size);
|
|||
#include "pulses/pulses.h"
|
||||
|
||||
#if defined(CPUARM)
|
||||
// Order is the same as in enum Protocols in myeeprom.h (none, ppm, xjt, dsm, crossfire, multi)
|
||||
static const int8_t maxChannelsModules[] = { 0, 8, 8, -2, 8, 4 }; // relative to 8!
|
||||
// Order is the same as in enum Protocols in myeeprom.h (none, ppm, xjt, dsm, crossfire, multi, r9m)
|
||||
static const int8_t maxChannelsModules[] = { 0, 8, 8, -2, 8, 4, 8}; // relative to 8!
|
||||
static const int8_t maxChannelsXJT[] = { 0, 8, 0, 4 }; // relative to 8!
|
||||
#define MAX_TRAINER_CHANNELS_M8() (MAX_TRAINER_CHANNELS-8)
|
||||
#endif
|
||||
|
@ -428,6 +428,9 @@ void memswap(void * a, void * b, uint8_t size);
|
|||
#define MAX_CHANNELS(idx) (idx==EXTERNAL_MODULE ? MAX_EXTERNAL_MODULE_CHANNELS() : MAX_TRAINER_CHANNELS_M8())
|
||||
#define NUM_CHANNELS(idx) (8+g_model.moduleData[idx].channelsCount)
|
||||
#endif
|
||||
#define IS_MODULE_R9M(idx) (g_model.moduleData[idx].type==MODULE_TYPE_R9M)
|
||||
#define IS_MODULE_PXX(idx) (IS_MODULE_XJT(idx) || IS_MODULE_R9M(idx))
|
||||
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
#define IS_MULTIMODULE_DSM(idx) (IS_MODULE_MULTIMODULE(idx) && g_model.moduleData[idx].getMultiProtocol(true) == MM_RF_PROTO_DSM2)
|
||||
|
|
|
@ -64,6 +64,7 @@ uint8_t getRequiredProtocol(uint8_t port)
|
|||
required_protocol = PROTO_PPM;
|
||||
break;
|
||||
case MODULE_TYPE_XJT:
|
||||
case MODULE_TYPE_R9M:
|
||||
required_protocol = PROTO_PXX;
|
||||
break;
|
||||
#if defined(MULTIMODULE)
|
||||
|
|
|
@ -372,29 +372,25 @@ void setupPulsesPXX(uint8_t port)
|
|||
pulseValueLow = pulseValue;
|
||||
}
|
||||
}
|
||||
#if defined(BINDING_OPTIONS)
|
||||
|
||||
uint8_t extra_flags = 0;
|
||||
|
||||
/* Ext. flag (holds antenna selection on Horus internal module, 0x00 otherwise) */
|
||||
uint8_t extra_flags = XJT_INTERNAL_ANTENNA;
|
||||
if (port == INTERNAL_MODULE) {
|
||||
#if defined(PCBHORUS)
|
||||
extra_flags = g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna;
|
||||
#endif
|
||||
extra_flags |= g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off << 1;
|
||||
extra_flags |= g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 << 2;
|
||||
}
|
||||
putPcmByte(port, extra_flags);
|
||||
#else //BINDING_OPTIONS
|
||||
/* Ext. flag (holds antenna selection on Horus internal module, 0x00 otherwise) */
|
||||
#if defined(PCBHORUS)
|
||||
uint8_t antenna = XJT_INTERNAL_ANTENNA;
|
||||
if (port == INTERNAL_MODULE) {
|
||||
antenna = g_model.moduleData[INTERNAL_MODULE].pxx.external_antenna;
|
||||
extra_flags |= g_model.moduleData[port].pxx.external_antenna;
|
||||
}
|
||||
putPcmByte(port, antenna);
|
||||
#else
|
||||
putPcmByte(port, 0);
|
||||
#endif
|
||||
#if defined(BINDING_OPTIONS)
|
||||
extra_flags |= g_model.moduleData[port].pxx.receiver_telem_off << 1;
|
||||
extra_flags |= g_model.moduleData[port].pxx.receiver_channel_9_16 << 2;
|
||||
#endif
|
||||
if (IS_MODULE_R9M(port)) {
|
||||
extra_flags |= g_model.moduleData[port].pxx.power << 3;
|
||||
extra_flags |= g_model.moduleData[port].pxx.sport_out << 5;
|
||||
}
|
||||
|
||||
putPcmByte(port, extra_flags);
|
||||
|
||||
/* CRC */
|
||||
putPcmCrc(port);
|
||||
|
|
|
@ -179,7 +179,7 @@ void telemetryWakeup()
|
|||
}
|
||||
|
||||
#if defined(PCBTARANIS) || defined(PCBHORUS)
|
||||
if ((g_model.moduleData[INTERNAL_MODULE].rfProtocol != RF_PROTO_OFF || g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_XJT) && FRSKY_BAD_ANTENNA()) {
|
||||
if ((g_model.moduleData[INTERNAL_MODULE].rfProtocol != RF_PROTO_OFF || IS_MODULE_PXX(EXTERNAL_MODULE)) && FRSKY_BAD_ANTENNA()) {
|
||||
AUDIO_SWR_RED();
|
||||
POPUP_WARNING(STR_WARNING);
|
||||
const char * w = STR_ANTENNAPROBLEM;
|
||||
|
|
|
@ -380,6 +380,7 @@ const pm_char STR_RECEIVER[] PROGMEM = TR_RECEIVER;
|
|||
const pm_char STR_SYNCMENU[] PROGMEM = TR_SYNCMENU;
|
||||
const pm_char STR_INTERNALRF[] PROGMEM = TR_INTERNALRF;
|
||||
const pm_char STR_EXTERNALRF[] PROGMEM = TR_EXTERNALRF;
|
||||
const pm_char STR_SPORT_OUT[] PROGMEM = TR_SPORT_OUT;
|
||||
const pm_char STR_COUNTRYCODE[] PROGMEM = TR_COUNTRYCODE;
|
||||
const pm_char STR_FAILSAFE[] PROGMEM = TR_FAILSAFE;
|
||||
const pm_char STR_FAILSAFESET[] PROGMEM = TR_FAILSAFESET;
|
||||
|
|
|
@ -611,6 +611,7 @@ extern const pm_char STR_RECEIVER[];
|
|||
extern const pm_char STR_SYNCMENU[];
|
||||
extern const pm_char STR_INTERNALRF[];
|
||||
extern const pm_char STR_EXTERNALRF[];
|
||||
extern const pm_char STR_SPORT_OUT[];
|
||||
extern const pm_char STR_FAILSAFE[];
|
||||
extern const pm_char STR_FAILSAFESET[];
|
||||
extern const pm_char STR_HOLD[];
|
||||
|
|
|
@ -93,7 +93,7 @@
|
|||
#define TR_COUNTRYCODES TR("US""JP""EU", "Amerika\0""Japonsko""Evropa\0 ")
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "Vyp\0""PPM\0""XJT\0""DSM2""CRSF""MULT"
|
||||
#define TR_TARANIS_PROTOCOLS "Vyp\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 FrSky D\0 FrSky D (kabel)Spektrum\0 "
|
||||
|
@ -854,6 +854,7 @@
|
|||
#define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup")
|
||||
#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_SPORT_OUT INDENT "S.port out"
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int.", "Disable internal RF")
|
||||
#define TR_MODULE_NO_SERIAL_MODE TR("!serial mode", "Not in serial mode")
|
||||
#define TR_MODULE_NO_INPUT TR("No input", "No serial input")
|
||||
|
|
|
@ -99,7 +99,7 @@
|
|||
#define TR_COUNTRYCODES TR("US""JP""EU", "Amerika""Japan\0 ""Europa\0")
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "AUS\0""PPM\0""XJT\0""DSM?""CRSF""MULT"
|
||||
#define TR_TARANIS_PROTOCOLS "AUS\0""PPM\0""XJT\0""DSM?""CRSF""MULT""R9M\0"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (Kabel)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
@ -875,6 +875,7 @@
|
|||
#define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup")
|
||||
#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_SPORT_OUT INDENT "S.port out"
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
#define TR_MODULE_NO_SERIAL_MODE TR("!serial mode", "Not in serial mode")
|
||||
#define TR_MODULE_NO_INPUT TR("No input", "No serial input")
|
||||
|
|
|
@ -99,7 +99,7 @@
|
|||
#define TR_COUNTRYCODES TR("US""JP""EU", "America""Japan\0 ""Europe\0")
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
@ -858,6 +858,7 @@
|
|||
#define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup")
|
||||
#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_SPORT_OUT INDENT "S.port out"
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int.", "Disable internal RF")
|
||||
#define TR_MODULE_NO_SERIAL_MODE TR("!serial mode", "Not in serial mode")
|
||||
#define TR_MODULE_NO_INPUT TR("No input", "No serial input")
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
#define TR_COUNTRYCODES TR("US""JP""EU", "America""Japon\0 ""Europa\0")
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
@ -834,6 +834,7 @@
|
|||
#define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup")
|
||||
#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_SPORT_OUT INDENT "S.port out"
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
#define TR_MODULE_NO_SERIAL_MODE TR("!serial mode", "Not in serial mode")
|
||||
#define TR_MODULE_NO_INPUT TR("No input", "No serial input")
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
#define TR_COUNTRYCODES TR("US""JP""EU", "Amerikk""Japani\0""Euroopp")
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
@ -830,6 +830,7 @@
|
|||
#define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup")
|
||||
#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_SPORT_OUT INDENT "S.port out"
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
#define TR_MODULE_NO_SERIAL_MODE TR("!serial mode", "Not in serial mode")
|
||||
#define TR_MODULE_NO_INPUT TR("No input", "No serial input")
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
#define TR_COUNTRYCODES TR("US""JP""EU", "USA\0 ""Japon\0""Europe")
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
@ -849,6 +849,7 @@
|
|||
#define TR_RECEIVER_NUM "Récepteur"
|
||||
#define TR_RECEIVER "Récepteur"
|
||||
#endif
|
||||
<<<<<<< HEAD
|
||||
#define TR_MULTI_RFTUNE TR(INDENT "Ajust.fréq", INDENT "Ajustement fréq.")
|
||||
#define TR_MULTI_TELEMETRY "Telemetry"
|
||||
#define TR_MULTI_VIDFREQ TR(INDENT "Fréq. vidéo", INDENT "Fréquence vidéo")
|
||||
|
@ -862,6 +863,22 @@
|
|||
#define TR_MODULE_NO_INPUT TR("Pas de sign.", "Aucun signal série")
|
||||
#define TR_MODULE_NO_TELEMETRY TR3("Pas de télm.", "Télémétrie absente", "Télémétrie absente(act. MULTI_TELEMETRY)")
|
||||
#define TR_MODULE_BINDING "Bind..."
|
||||
=======
|
||||
#define TR_MULTI_RFTUNE TR(INDENT "Ajust.fréq", INDENT "Ajustement fréq.")
|
||||
#define TR_MULTI_TELEMETRY "Telemetry"
|
||||
#define TR_MULTI_VIDFREQ TR(INDENT "Fréq. vidéo", INDENT "Fréquence vidéo")
|
||||
#define TR_MULTI_RFPOWER TR(INDENT "Puiss. RF", INDENT "Puissance RF")
|
||||
#define TR_MULTI_OPTION TR(INDENT "Option", INDENT "Option perso")
|
||||
#define TR_MULTI_AUTOBIND TR(INDENT "Bind auto", INDENT "Bind automatique")
|
||||
#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_SPORT_OUT INDENT "S.port out"
|
||||
#define TR_DISABLE_INTERNAL TR("Désact intRF", "Désact. RF interne")
|
||||
#define TR_MODULE_NO_SERIAL_MODE TR("Mode série?", "Pas en mode série")
|
||||
#define TR_MODULE_NO_INPUT TR("Pas de sign.", "Aucun signal série")
|
||||
#define TR_MODULE_NO_TELEMETRY TR3("Pas de télm.", "Télémétrie absente", "Télémétrie absente(act. MULTI_TELEMETRY)")
|
||||
#define TR_MODULE_BINDING "Bind..."
|
||||
>>>>>>> Implement R9M protocol according to PXX spec 1.7
|
||||
#define TR_BINDING_MODE1 "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_MODE2 "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_MODE3 "Ch9-16 Telem ON"
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
#define TR_COUNTRYCODES TR("US""JP""EU", "America""Japan\0 ""Europa\0")
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
@ -859,6 +859,7 @@
|
|||
#define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup")
|
||||
#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_SPORT_OUT INDENT "S.port out"
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
#define TR_MODULE_NO_SERIAL_MODE TR("!serial mode", "Not in serial mode")
|
||||
#define TR_MODULE_NO_INPUT TR("No input", "No serial input")
|
||||
|
|
|
@ -100,7 +100,7 @@
|
|||
#define TR_COUNTRYCODES TR("US""JP""EU", "Amerika""Japan\0 ""Europa\0")
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "UIT\0""PPM\0""XJT\0""DSM2""CRSF""MULT"
|
||||
#define TR_TARANIS_PROTOCOLS "UIT\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
@ -854,6 +854,7 @@
|
|||
#define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup")
|
||||
#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_SPORT_OUT INDENT "S.port out"
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
#define TR_MODULE_NO_SERIAL_MODE TR("!serial mode", "Not in serial mode")
|
||||
#define TR_MODULE_NO_INPUT TR("No input", "No serial input")
|
||||
|
|
|
@ -96,7 +96,7 @@
|
|||
#define TR_COUNTRYCODES TR("US""JP""EU", "Ameryka""Japonia""Europa\0")
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
@ -860,6 +860,7 @@
|
|||
#define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup")
|
||||
#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_SPORT_OUT INDENT "S.port out"
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
#define TR_MODULE_NO_SERIAL_MODE TR("!serial mode", "Not in serial mode")
|
||||
#define TR_MODULE_NO_INPUT TR("No input", "No serial input")
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
#define TR_COUNTRYCODES TR("US""JP""EU", "America""Japan\0 ""Europe\0")
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT"
|
||||
#define TR_TARANIS_PROTOCOLS "OFF\0""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
@ -836,6 +836,7 @@
|
|||
#define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup")
|
||||
#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_SPORT_OUT INDENT "S.port out"
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
#define TR_MODULE_NO_SERIAL_MODE TR("!serial mode", "Not in serial mode")
|
||||
#define TR_MODULE_NO_INPUT TR("No input", "No serial input")
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
#define TR_COUNTRYCODES TR("US""JP""EU", "Amerika""Japan\0 ""Europa\0")
|
||||
|
||||
#define LEN_TARANIS_PROTOCOLS "\004"
|
||||
#define TR_TARANIS_PROTOCOLS "Av\0 ""PPM\0""XJT\0""DSM2""CRSF""MULT"
|
||||
#define TR_TARANIS_PROTOCOLS "Av\0 ""PPM\0""XJT\0""DSM2""CRSF""MULT""R9M\0"
|
||||
|
||||
#define LEN_TELEMETRY_PROTOCOLS "\017"
|
||||
#define TR_TELEMETRY_PROTOCOLS "FrSky S.PORT\0 ""FrSky D\0 ""FrSky D (cable)""TBS Crossfire\0 ""Spektrum\0 ""AFHDS2A IBUS\0 ""Multi Telemetry"
|
||||
|
@ -873,6 +873,7 @@
|
|||
#define TR_MULTI_AUTOBIND TR(INDENT "Autobind",INDENT "Bind on powerup")
|
||||
#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_SPORT_OUT INDENT "S.port out"
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
#define TR_MODULE_NO_SERIAL_MODE TR("!serial mode", "Not in serial mode")
|
||||
#define TR_MODULE_NO_INPUT TR("No input", "No serial input")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue