Compare commits
48 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| cca7180834 | |||
| 104ab8c7f3 | |||
| e4d273aa0e | |||
| df61a1ab4e | |||
| 1dcd8cc419 | |||
| b55b68f191 | |||
| 2c2339e229 | |||
| d7645252bb | |||
| dc89bb1dfc | |||
| 47383fd053 | |||
| f80406c7cb | |||
| 75b382e619 | |||
| 566c616abb | |||
| 59d2ef8aa1 | |||
| 977262232a | |||
| fa5895de39 | |||
| f2fb788eac | |||
| c8c3b79f2d | |||
| 1c7012726a | |||
| e3bbbdcecf | |||
| 4e8867c819 | |||
| cffb5e767f | |||
| 204711d313 | |||
| e43807540e | |||
| eb79d4f774 | |||
| e80b63f66f | |||
| ada0712e1a | |||
| 0a7aece40f | |||
| 63bcb4693d | |||
| dec630efa0 | |||
| 2a0984408f | |||
| 8e5027dcb2 | |||
| f489742c9e | |||
| bcc6e3c67d | |||
| 12ad7b0d9c | |||
| a6044a684d | |||
| 9c27947345 | |||
| c96a30aea0 | |||
| 934578118b | |||
| 81dbebb663 | |||
| afd3103506 | |||
| 8b34c96a2d | |||
| ec2c4302cb | |||
| 23eeccec9c | |||
| 421f16d0dd | |||
| cb73261c60 | |||
| 6bc02fd838 | |||
| a7e4b0b062 |
+1
-1
@@ -6,7 +6,7 @@ set(VERSION_REVISION "1")
|
||||
set(VERSION_SUFFIX $ENV{OPENTX_VERSION_SUFFIX})
|
||||
set(VERSION_FAMILY ${VERSION_MAJOR}.${VERSION_MINOR})
|
||||
set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}${VERSION_SUFFIX})
|
||||
set(SDCARD_REVISION "0012")
|
||||
set(SDCARD_REVISION "0013")
|
||||
set(SDCARD_VERSION ${VERSION_MAJOR}.${VERSION_MINOR}V${SDCARD_REVISION})
|
||||
|
||||
cmake_minimum_required(VERSION 2.8)
|
||||
|
||||
+12
@@ -1289,3 +1289,15 @@ Merv Dale
|
||||
Michel Garbarino
|
||||
Geoff Graham
|
||||
Georges Pezet
|
||||
Robert Wilhelm
|
||||
Francis Herzog
|
||||
Bo Hjeresen
|
||||
Danny Koch
|
||||
John Eppling
|
||||
Thierry Malosse
|
||||
Johann Antretter
|
||||
Jan Kaiser
|
||||
Rachel Berkhahn
|
||||
Luca Massimiliano Comolli
|
||||
Mario Wesierski
|
||||
Evening Shade Pottery
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>1</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="profileTab">
|
||||
<attribute name="title">
|
||||
|
||||
+17
-16
@@ -172,37 +172,29 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability)
|
||||
switch (capability) {
|
||||
case Sticks:
|
||||
return 4;
|
||||
|
||||
case Pots:
|
||||
if (IS_HORUS(board))
|
||||
return 3;
|
||||
else if (IS_TARANIS_X7(board))
|
||||
if (IS_TARANIS_X7(board))
|
||||
return 2;
|
||||
else if (IS_TARANIS_X9E(board))
|
||||
return 4;
|
||||
else if (IS_TARANIS(board))
|
||||
return 3;
|
||||
else
|
||||
return 3;
|
||||
|
||||
case Sliders:
|
||||
if (IS_HORUS(board))
|
||||
if (IS_HORUS_X12S(board) || IS_TARANIS_X9E(board))
|
||||
return 4;
|
||||
else if (IS_TARANIS_X7(board))
|
||||
return 0;
|
||||
else if (IS_TARANIS_X9E(board))
|
||||
return 4;
|
||||
else if (IS_TARANIS(board))
|
||||
else if (IS_TARANIS_X9D(board) || IS_HORUS_X10(board))
|
||||
return 2;
|
||||
else
|
||||
return 0;
|
||||
|
||||
case MouseAnalogs:
|
||||
if (IS_HORUS(board))
|
||||
if (IS_HORUS_X12S(board))
|
||||
return 2;
|
||||
else
|
||||
return 0;
|
||||
case FactoryInstalledSwitches:
|
||||
if (IS_TARANIS_X9E(board))
|
||||
return 8;
|
||||
// no break
|
||||
|
||||
case Switches:
|
||||
if (IS_TARANIS_X9E(board))
|
||||
return 18;
|
||||
@@ -212,16 +204,25 @@ const int Boards::getCapability(Board::Type board, Board::Capability capability)
|
||||
return 8;
|
||||
else
|
||||
return 7;
|
||||
|
||||
case FactoryInstalledSwitches:
|
||||
if (IS_TARANIS_X9E(board))
|
||||
return 8;
|
||||
else
|
||||
return getCapability(board, Switches);
|
||||
|
||||
case SwitchPositions:
|
||||
if (IS_HORUS_OR_TARANIS(board))
|
||||
return getCapability(board, Switches) * 3;
|
||||
else
|
||||
return 9;
|
||||
|
||||
case NumTrims:
|
||||
if (IS_HORUS(board))
|
||||
return 6;
|
||||
else
|
||||
return 4;
|
||||
|
||||
case NumTrimSwitches:
|
||||
return getCapability(board, NumTrims) * 2;
|
||||
}
|
||||
|
||||
@@ -1178,7 +1178,6 @@ GeneralSettings::GeneralSettings()
|
||||
memset(this, 0, sizeof(GeneralSettings));
|
||||
|
||||
contrast = 25;
|
||||
vBatWarn = 90;
|
||||
|
||||
for (int i=0; i < CPN_MAX_ANALOGS; ++i) {
|
||||
calibMid[i] = 0x200;
|
||||
@@ -1189,7 +1188,29 @@ GeneralSettings::GeneralSettings()
|
||||
Firmware * firmware = Firmware::getCurrentVariant();
|
||||
Board::Type board = firmware->getBoard();
|
||||
|
||||
for (int i=0; i<getBoardCapability(board, Board::FactoryInstalledSwitches); i++) {
|
||||
// vBatWarn is voltage in 100mV, vBatMin is in 100mV but with -9V offset, vBatMax has a -12V offset
|
||||
vBatWarn = 90;
|
||||
if (IS_TARANIS_X9E(board) || IS_HORUS_X12S(board)) {
|
||||
// NI-MH 9.6V
|
||||
vBatWarn = 87;
|
||||
vBatMin = -5; //8,5V
|
||||
vBatMax = -5; //11,5V
|
||||
}
|
||||
else if (IS_HORUS_X10(board)) {
|
||||
// Lipo 2V
|
||||
vBatWarn = 66;
|
||||
vBatMin = -28; // 6.2V
|
||||
vBatMax = -38; // 8.2V
|
||||
}
|
||||
else if (IS_TARANIS(board)) {
|
||||
// NI-MH 7.2V, X9D, X9D+ and X7
|
||||
vBatWarn = 65;
|
||||
vBatMin = -30; //6V
|
||||
vBatMax = -40; //8V
|
||||
}
|
||||
|
||||
|
||||
for (int i=0; i<getBoardCapability(board, Board::FactoryInstalledSwitches); i++) {
|
||||
switchConfig[i] = Boards::getSwitchInfo(board, i).config;
|
||||
}
|
||||
|
||||
@@ -1219,13 +1240,13 @@ GeneralSettings::GeneralSettings()
|
||||
potConfig[2] = Board::POT_WITHOUT_DETENT;
|
||||
}
|
||||
|
||||
if (IS_HORUS(board) || IS_TARANIS_X9E(board)) {
|
||||
if (IS_HORUS_X12S(board) || IS_TARANIS_X9E(board)) {
|
||||
sliderConfig[0] = Board::SLIDER_WITH_DETENT;
|
||||
sliderConfig[1] = Board::SLIDER_WITH_DETENT;
|
||||
sliderConfig[2] = Board::SLIDER_WITH_DETENT;
|
||||
sliderConfig[3] = Board::SLIDER_WITH_DETENT;
|
||||
}
|
||||
else if (IS_TARANIS(board) && !IS_TARANIS_X7(board)) {
|
||||
else if (IS_TARANIS_X9(board) || IS_HORUS_X10(board)) {
|
||||
sliderConfig[0] = Board::SLIDER_WITH_DETENT;
|
||||
sliderConfig[1] = Board::SLIDER_WITH_DETENT;
|
||||
}
|
||||
|
||||
@@ -69,6 +69,8 @@ enum Capability {
|
||||
SoundMod,
|
||||
SoundPitch,
|
||||
MaxVolume,
|
||||
MaxContrast,
|
||||
MinContrast,
|
||||
Haptic,
|
||||
HasBeeper,
|
||||
ModelTrainerEnable,
|
||||
|
||||
@@ -3227,15 +3227,16 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsig
|
||||
for (int i=0; i<MAX_GVARS(board, version); i++) {
|
||||
if (version >= 218) {
|
||||
internalField.Append(new ZCharField<3>(this, modelData.gvarData[i].name, "GVar name"));
|
||||
internalField.Append(new SignedField<12>(this, modelData.gvarData[i].min));
|
||||
internalField.Append(new SignedField<12>(this, modelData.gvarData[i].max));
|
||||
internalField.Append(new UnsignedField<12>(this, (unsigned &)modelData.gvarData[i].min));
|
||||
internalField.Append(new UnsignedField<12>(this, (unsigned &)modelData.gvarData[i].max));
|
||||
internalField.Append(new BoolField<1>(this, modelData.gvarData[i].popup));
|
||||
internalField.Append(new UnsignedField<1>(this, modelData.gvarData[i].prec));
|
||||
internalField.Append(new UnsignedField<2>(this, modelData.gvarData[i].unit));
|
||||
internalField.Append(new SpareBitsField<4>(this));
|
||||
}
|
||||
else {
|
||||
internalField.Append(new ZCharField<6>(this, modelData.gvarData[i].name, "GVar name"));
|
||||
internalField.Append(new ZCharField<3>(this, modelData.gvarData[i].name, "GVar name"));
|
||||
internalField.Append(new SpareBitsField<3*8>(this));
|
||||
if (version >= 216) {
|
||||
internalField.Append(new BoolField<1>(this, modelData.gvarData[i].popup));
|
||||
internalField.Append(new SpareBitsField<7>(this));
|
||||
@@ -3522,8 +3523,8 @@ void OpenTxModelData::afterImport()
|
||||
modelData.moduleData[module].pxx.power = pxxByte & 0x03;
|
||||
modelData.moduleData[module].pxx.receiver_telem_off = static_cast<bool>(pxxByte & (1 << 4));
|
||||
modelData.moduleData[module].pxx.receiver_channel_9_16 = static_cast<bool>(pxxByte & (1 << 5));
|
||||
modelData.moduleData[module].pxx.external_antenna = modelData.moduleData[module].ppm.outputType;
|
||||
modelData.moduleData[module].pxx.sport_out = modelData.moduleData[module].ppm.pulsePol;
|
||||
modelData.moduleData[module].pxx.sport_out = modelData.moduleData[module].ppm.outputType;
|
||||
modelData.moduleData[module].pxx.external_antenna = modelData.moduleData[module].ppm.pulsePol;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -337,7 +337,7 @@ int OpenTxEepromInterface::save(uint8_t * eeprom, const RadioData & radioData, u
|
||||
}
|
||||
|
||||
for (int i = 0; i < getCurrentFirmware()->getCapability(Models); i++) {
|
||||
if (!radioData.models[i].isEmpty()) {
|
||||
if (i < (int)radioData.models.size() && !radioData.models[i].isEmpty()) {
|
||||
OpenTxModelData generator((ModelData &)radioData.models[i], board, version, variant);
|
||||
// generator.Dump();
|
||||
QByteArray data;
|
||||
@@ -543,6 +543,16 @@ int OpenTxFirmware::getCapability(::Capability capability)
|
||||
return 0;
|
||||
case MaxVolume:
|
||||
return (IS_ARM(board) ? 23 : 7);
|
||||
case MaxContrast:
|
||||
if (IS_TARANIS_X7(board))
|
||||
return 30;
|
||||
else
|
||||
return 45;
|
||||
case MinContrast:
|
||||
if (IS_TARANIS_X9(board))
|
||||
return 0;
|
||||
else
|
||||
return 10;
|
||||
case HasSoundMixer:
|
||||
return (IS_ARM(board) ? 1 : 0);
|
||||
case ExtraInputs:
|
||||
@@ -749,7 +759,7 @@ QString OpenTxFirmware::getAnalogInputName(unsigned int index)
|
||||
};
|
||||
return CHECK_IN_ARRAY(pots, index);
|
||||
}
|
||||
else if (IS_HORUS(board)) {
|
||||
else if (IS_HORUS_X12S(board)) {
|
||||
const QString pots[] = {
|
||||
QObject::tr("S1"),
|
||||
QObject::tr("6P"),
|
||||
@@ -763,6 +773,16 @@ QString OpenTxFirmware::getAnalogInputName(unsigned int index)
|
||||
};
|
||||
return CHECK_IN_ARRAY(pots, index);
|
||||
}
|
||||
else if (IS_HORUS_X10(board)) {
|
||||
const QString pots[] = {
|
||||
QObject::tr("S1"),
|
||||
QObject::tr("6P"),
|
||||
QObject::tr("S2"),
|
||||
QObject::tr("LS"),
|
||||
QObject::tr("RS")
|
||||
};
|
||||
return CHECK_IN_ARRAY(pots, index);
|
||||
}
|
||||
else {
|
||||
return "???";
|
||||
}
|
||||
@@ -1133,7 +1153,6 @@ void addOpenTxFrskyOptions(OpenTxFirmware * firmware)
|
||||
firmware->addOption("nogvars", QObject::tr("Disable Global variables"));
|
||||
firmware->addOption("lua", QObject::tr("Enable Lua custom scripts screen"));
|
||||
firmware->addOption("luac", QObject::tr("Enable Lua compiler"));
|
||||
firmware->addOption("bindopt", QObject::tr("Enable bindings options"));
|
||||
}
|
||||
|
||||
void addOpenTxTaranisOptions(OpenTxFirmware * firmware)
|
||||
|
||||
@@ -31,7 +31,6 @@ ui(new Ui::GeneralSetup)
|
||||
QSlider *tpmsld[] = {ui->chkSA, ui->chkSB, ui->chkSC, ui->chkSD, ui->chkSE, ui->chkSF, ui->chkSG, ui->chkSH, NULL};
|
||||
|
||||
if (IS_TARANIS(firmware->getBoard())) {
|
||||
ui->contrastSB->setMinimum(0);
|
||||
if (firmware->getId().contains("readonly")) {
|
||||
uint16_t switchstate = generalSettings.switchUnlockStates;
|
||||
ui->chkSA->setValue(switchstate & 0x3);
|
||||
@@ -216,7 +215,10 @@ ui(new Ui::GeneralSetup)
|
||||
populateRotEncCB(reCount);
|
||||
}
|
||||
|
||||
ui->contrastSB->setMinimum(firmware->getCapability(MinContrast));
|
||||
ui->contrastSB->setMaximum(firmware->getCapability(MaxContrast));
|
||||
ui->contrastSB->setValue(generalSettings.contrast);
|
||||
|
||||
ui->battwarningDSB->setValue((double)generalSettings.vBatWarn/10);
|
||||
ui->backlightautoSB->setValue(generalSettings.backlightDelay*5);
|
||||
ui->inactimerSB->setValue(generalSettings.inactivityTimer);
|
||||
|
||||
@@ -1414,11 +1414,11 @@ void MdiChild::setCurrentFile(const QString & fileName)
|
||||
isUntitled = false;
|
||||
setWindowModified(false);
|
||||
updateTitle();
|
||||
int MaxRecentFiles = g.historySize();
|
||||
|
||||
QStringList files = g.recentFiles();
|
||||
files.removeAll(fileName);
|
||||
files.prepend(fileName);
|
||||
while (files.size() > MaxRecentFiles)
|
||||
files.removeAll(curFile);
|
||||
files.prepend(curFile);
|
||||
while (files.size() > g.historySize())
|
||||
files.removeLast();
|
||||
g.recentFiles(files);
|
||||
}
|
||||
|
||||
@@ -172,6 +172,7 @@ void TimerPanel::on_name_editingFinished()
|
||||
#define MASK_MULTIOPTION 512
|
||||
#define MASK_R9M 1024
|
||||
#define MASK_SBUSPPM_FIELDS 2048
|
||||
#define MASK_SUBTYPES 4096
|
||||
|
||||
quint8 ModulePanel::failsafesValueDisplayType = ModulePanel::FAILSAFE_DISPLAY_PERCENT;
|
||||
|
||||
@@ -369,7 +370,7 @@ void ModulePanel::update()
|
||||
mask |= MASK_PROTOCOL;
|
||||
switch (protocol) {
|
||||
case PULSES_PXX_R9M:
|
||||
mask |= MASK_R9M;
|
||||
mask |= MASK_R9M | MASK_SUBTYPES;
|
||||
case PULSES_PXX_XJT_X16:
|
||||
case PULSES_PXX_XJT_D8:
|
||||
case PULSES_PXX_XJT_LR12:
|
||||
@@ -402,7 +403,7 @@ void ModulePanel::update()
|
||||
mask |= MASK_SBUSPPM_FIELDS| MASK_CHANNELS_RANGE;
|
||||
break;
|
||||
case PULSES_MULTIMODULE:
|
||||
mask |= MASK_CHANNELS_RANGE | MASK_RX_NUMBER | MASK_MULTIMODULE;
|
||||
mask |= MASK_CHANNELS_RANGE | MASK_RX_NUMBER | MASK_MULTIMODULE | MASK_SUBTYPES;
|
||||
max_rx_num = 15;
|
||||
if (module.multi.rfProtocol == MM_RF_PROTO_DSM2)
|
||||
mask |= MASK_CHANNELS_COUNT;
|
||||
@@ -410,6 +411,8 @@ void ModulePanel::update()
|
||||
module.channelsCount = 16;
|
||||
if (multiProtocols.getProtocol(module.multi.rfProtocol).optionsstr != nullptr)
|
||||
mask |= MASK_MULTIOPTION;
|
||||
if (multiProtocols.getProtocol(module.multi.rfProtocol).hasFailsafe)
|
||||
mask |= MASK_FAILSAFES;
|
||||
break;
|
||||
case PULSES_OFF:
|
||||
break;
|
||||
@@ -466,37 +469,49 @@ void ModulePanel::update()
|
||||
ui->antennaMode->setVisible(mask & MASK_ANTENNA);
|
||||
ui->antennaMode->setCurrentIndex(module.pxx.external_antenna);
|
||||
|
||||
// R9M S.port output
|
||||
// R9M options
|
||||
ui->sportOut->setVisible(mask & MASK_R9M);
|
||||
ui->label_sportOut->setVisible(mask & MASK_R9M);
|
||||
ui->sportOut->setCurrentIndex(module.pxx.sport_out);
|
||||
ui->r9mPower->setVisible((mask & MASK_R9M) && module.subType == 0);
|
||||
ui->label_r9mPower->setVisible((mask & MASK_R9M) && module.subType == 0);
|
||||
if (mask & MASK_R9M) {
|
||||
if (model->moduleData[0].protocol >= PULSES_PXX_XJT_X16 && model->moduleData[0].protocol <= PULSES_PXX_XJT_LR12) {
|
||||
module.pxx.sport_out = false;
|
||||
ui->sportOut->setDisabled(true);
|
||||
}
|
||||
else {
|
||||
ui->sportOut->setEnabled(true);
|
||||
}
|
||||
ui->sportOut->setChecked(module.pxx.sport_out);
|
||||
ui->r9mPower->setCurrentIndex(module.pxx.power);
|
||||
}
|
||||
|
||||
ui->r9mPower->setVisible(mask & MASK_R9M);
|
||||
ui->label_r9mPower->setVisible(mask & MASK_R9M);
|
||||
ui->r9mPower->setCurrentIndex(module.pxx.power);
|
||||
// module subtype
|
||||
ui->label_multiSubType->setVisible(mask & MASK_SUBTYPES);
|
||||
ui->multiSubType->setVisible(mask & MASK_SUBTYPES);
|
||||
if (mask & MASK_SUBTYPES) {
|
||||
unsigned numEntries = 2; // R9M FCC/EU
|
||||
if (mask & MASK_MULTIMODULE)
|
||||
numEntries = (module.multi.customProto ? 8 : multiProtocols.getProtocol(module.multi.rfProtocol).numSubytes());
|
||||
|
||||
const QSignalBlocker blocker(ui->multiSubType);
|
||||
ui->multiSubType->clear();
|
||||
for (unsigned i=0; i < numEntries; i++)
|
||||
ui->multiSubType->addItem(ModelPrinter::printModuleSubType(protocol, i, module.multi.rfProtocol, module.multi.customProto), i);
|
||||
ui->multiSubType->setCurrentIndex(module.subType);
|
||||
}
|
||||
|
||||
// Multi settings fields
|
||||
ui->label_multiProtocol->setVisible(mask & MASK_MULTIMODULE);
|
||||
ui->multiProtocol->setVisible(mask & MASK_MULTIMODULE);
|
||||
ui->multiProtocol->setCurrentIndex(module.multi.rfProtocol);
|
||||
ui->label_multiSubType->setVisible(mask & MASK_MULTIMODULE);
|
||||
ui->multiSubType->setVisible(mask & MASK_MULTIMODULE);
|
||||
ui->label_option->setVisible(mask & MASK_MULTIOPTION);
|
||||
ui->optionValue->setVisible(mask & MASK_MULTIOPTION);
|
||||
ui->autoBind->setVisible(mask & MASK_MULTIMODULE);
|
||||
ui->lowPower->setVisible(mask & MASK_MULTIMODULE);
|
||||
|
||||
if (mask & MASK_MULTIMODULE) {
|
||||
int numEntries = multiProtocols.getProtocol(module.multi.rfProtocol).numSubytes();
|
||||
if (module.multi.customProto)
|
||||
numEntries=8;
|
||||
// Removes extra items
|
||||
ui->multiSubType->setMaxCount(numEntries);
|
||||
for (int i=0; i < numEntries; i++) {
|
||||
if (i < ui->multiSubType->count())
|
||||
ui->multiSubType->setItemText(i, ModelPrinter::printMultiSubType(module.multi.rfProtocol, module.multi.customProto, i));
|
||||
else
|
||||
ui->multiSubType->addItem(ModelPrinter::printMultiSubType(module.multi.rfProtocol, module.multi.customProto, i), (QVariant) i);
|
||||
}
|
||||
ui->multiProtocol->setCurrentIndex(module.multi.rfProtocol);
|
||||
ui->autoBind->setChecked(module.multi.autoBindMode ? Qt::Checked : Qt::Unchecked);
|
||||
ui->lowPower->setChecked(module.multi.lowPowerMode ? Qt::Checked : Qt::Unchecked);
|
||||
}
|
||||
|
||||
if (mask & MASK_MULTIOPTION) {
|
||||
@@ -506,14 +521,8 @@ void ModulePanel::update()
|
||||
ui->optionValue->setValue(module.multi.optionValue);
|
||||
ui->label_option->setText(qApp->translate("Multiprotocols", qPrintable(pdef.optionsstr)));
|
||||
}
|
||||
ui->multiSubType->setCurrentIndex(module.subType);
|
||||
|
||||
ui->autoBind->setVisible(mask & MASK_MULTIMODULE);
|
||||
ui->autoBind->setChecked(module.multi.autoBindMode ? Qt::Checked : Qt::Unchecked);
|
||||
ui->lowPower->setVisible(mask & MASK_MULTIMODULE);
|
||||
ui->lowPower->setChecked(module.multi.lowPowerMode ? Qt::Checked : Qt::Unchecked);
|
||||
|
||||
|
||||
// Failsafes
|
||||
ui->label_failsafeMode->setVisible(mask & MASK_FAILSAFES);
|
||||
ui->failsafeMode->setVisible(mask & MASK_FAILSAFES);
|
||||
|
||||
@@ -582,10 +591,12 @@ void ModulePanel::on_antennaMode_currentIndexChanged(int index)
|
||||
emit modified();
|
||||
}
|
||||
|
||||
void ModulePanel::on_sportOut_currentIndexChanged(int index)
|
||||
void ModulePanel::on_sportOut_toggled(bool checked)
|
||||
{
|
||||
module.pxx.sport_out = index;
|
||||
emit modified();
|
||||
if (module.pxx.sport_out != checked) {
|
||||
module.pxx.sport_out = checked;
|
||||
emit modified();
|
||||
}
|
||||
}
|
||||
|
||||
void ModulePanel::on_r9mPower_currentIndexChanged(int index)
|
||||
|
||||
@@ -88,7 +88,7 @@ class ModulePanel : public ModelPanel
|
||||
void on_multiSubType_currentIndexChanged(int index);
|
||||
void on_autoBind_stateChanged(int state);
|
||||
void on_lowPower_stateChanged(int state);
|
||||
void on_sportOut_currentIndexChanged(int index);
|
||||
void on_sportOut_toggled(bool checked);
|
||||
void on_r9mPower_currentIndexChanged(int index);
|
||||
void setChannelFailsafeValue(const int channel, const int value, quint8 updtSb = 0);
|
||||
void onFailsafeComboIndexChanged(int index);
|
||||
|
||||
@@ -6,13 +6,16 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>674</width>
|
||||
<height>229</height>
|
||||
<width>708</width>
|
||||
<height>259</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
@@ -147,22 +150,43 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_multiSubType">
|
||||
<widget class="QLabel" name="label_rxNumber">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>SubType</string>
|
||||
<string>Receiver No.</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="multiSubType">
|
||||
<widget class="QSpinBox" name="rxNumber">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QComboBox::AdjustToContents</enum>
|
||||
<property name="suffix">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>63</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -206,87 +230,53 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_antenna">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<widget class="QLabel" name="label_r9mPower">
|
||||
<property name="text">
|
||||
<string>Antenna</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
<string>RF Output Power</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QComboBox" name="antennaMode">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QComboBox::AdjustToContents</enum>
|
||||
</property>
|
||||
<widget class="QComboBox" name="r9mPower">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Internal</string>
|
||||
<string>10 mW</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Ext. + Int.</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_ppmOutputType">
|
||||
<property name="text">
|
||||
<string>Output type</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QComboBox" name="ppmOutputType">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QComboBox::AdjustToContents</enum>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Open Drain</string>
|
||||
<string>100 mW</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Push Pull</string>
|
||||
<string>500 mW</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>1000 mW</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QSpinBox" name="optionValue">
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_option">
|
||||
<property name="text">
|
||||
<string>Option value</string>
|
||||
</property>
|
||||
</widget>
|
||||
<item row="4" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="autoBind">
|
||||
<property name="text">
|
||||
<string>Bind on startup</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="lowPower">
|
||||
<property name="text">
|
||||
<string>Low Power</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
@@ -352,61 +342,6 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_rxNumber">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Receiver No.</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QSpinBox" name="rxNumber">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>63</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="autoBind">
|
||||
<property name="text">
|
||||
<string>Bind on startup</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QCheckBox" name="lowPower">
|
||||
<property name="text">
|
||||
<string>Low Power</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_ppmDelay">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
@@ -422,7 +357,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<item row="1" column="1">
|
||||
<widget class="QSpinBox" name="ppmDelay">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
@@ -450,7 +385,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_ppmFrameLength">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
@@ -466,7 +401,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<item row="2" column="1">
|
||||
<widget class="QDoubleSpinBox" name="ppmFrameLength">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
@@ -494,6 +429,89 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_antenna">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Antenna</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QComboBox" name="antennaMode">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QComboBox::AdjustToContents</enum>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Internal</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Ext. + Int.</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_ppmOutputType">
|
||||
<property name="text">
|
||||
<string>Output type</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QComboBox" name="ppmOutputType">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QComboBox::AdjustToContents</enum>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Open Drain</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Push Pull</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_option">
|
||||
<property name="text">
|
||||
<string>Option value</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QSpinBox" name="optionValue">
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
@@ -560,6 +578,26 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_multiSubType">
|
||||
<property name="text">
|
||||
<string>Sub Type</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="multiSubType">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QComboBox::AdjustToContents</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_failsafeMode">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
@@ -575,7 +613,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<item row="4" column="1">
|
||||
<widget class="QComboBox" name="failsafeMode">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
@@ -613,7 +651,7 @@
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_trainerMode">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
@@ -629,7 +667,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<item row="5" column="1">
|
||||
<widget class="QComboBox" name="trainerMode">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
@@ -667,64 +705,19 @@
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_sportOut">
|
||||
<item row="3" column="1">
|
||||
<widget class="QCheckBox" name="sportOut">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>S.port output</string>
|
||||
<string>Module Telemetry</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QComboBox" name="sportOut">
|
||||
<property name="currentText">
|
||||
<string>Disable</string>
|
||||
</property>
|
||||
<property name="sizeAdjustPolicy">
|
||||
<enum>QComboBox::AdjustToContents</enum>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Disable</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Enable</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_r9mPower">
|
||||
<property name="text">
|
||||
<string>RF Output Power</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QComboBox" name="r9mPower">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>10 mW</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>100 mW</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>500 mW</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>1000 mW</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="3">
|
||||
|
||||
@@ -45,6 +45,14 @@ ModelPrinter::~ModelPrinter()
|
||||
{
|
||||
}
|
||||
|
||||
QString ModelPrinter::printBoolean(bool val)
|
||||
{
|
||||
if (val)
|
||||
return tr("Y");
|
||||
else
|
||||
return tr("N");
|
||||
}
|
||||
|
||||
void debugHtml(const QString & html)
|
||||
{
|
||||
QFile file("foo.html");
|
||||
@@ -132,7 +140,7 @@ QString ModelPrinter::printMultiRfProtocol(int rfProtocol, bool custom)
|
||||
static const char *strings[] = {
|
||||
"FlySky", "Hubsan", "FrSky", "Hisky", "V2x2", "DSM", "Devo", "YD717", "KN", "SymaX", "SLT", "CX10", "CG023",
|
||||
"Bayang", "ESky", "MT99XX", "MJXQ", "Shenqi", "FY326", "SFHSS", "J6 PRO","FQ777","Assan","Hontai","OLRS",
|
||||
"FlySky AFHDS2A", "Q2x2", "Walkera", "Q303", "GW008", "DM002"
|
||||
"FlySky AFHDS2A", "Q2x2", "Walkera", "Q303", "GW008", "DM002", "CABELL", "Esky 150", "H8 3D"
|
||||
};
|
||||
if (custom)
|
||||
return "Custom - proto " + QString::number(rfProtocol);
|
||||
@@ -140,7 +148,7 @@ QString ModelPrinter::printMultiRfProtocol(int rfProtocol, bool custom)
|
||||
return CHECK_IN_ARRAY(strings, rfProtocol);
|
||||
}
|
||||
|
||||
QString ModelPrinter::printMultiSubType(int rfProtocol, bool custom, unsigned int subType) {
|
||||
QString ModelPrinter::printMultiSubType(unsigned rfProtocol, bool custom, unsigned int subType) {
|
||||
/* custom protocols */
|
||||
|
||||
if (custom)
|
||||
@@ -154,6 +162,39 @@ QString ModelPrinter::printMultiSubType(int rfProtocol, bool custom, unsigned in
|
||||
return "???";
|
||||
}
|
||||
|
||||
QString ModelPrinter::printR9MPowerValue(unsigned subType, unsigned val, bool telem)
|
||||
{
|
||||
static const QStringList strFTC = QStringList() << tr("10mW") << tr("100mW") << tr("500mW") << tr("1W");
|
||||
static const QStringList strLBT = QStringList() << tr("25mW") << tr("500mW");
|
||||
|
||||
|
||||
if (subType == 0 && (int)val < strFTC.size())
|
||||
return strFTC.at(val);
|
||||
else if (subType == 1)
|
||||
return (telem ? strLBT.at(0) : strLBT.at(1));
|
||||
else
|
||||
return "???";
|
||||
}
|
||||
|
||||
QString ModelPrinter::printModuleSubType(unsigned protocol, unsigned subType, unsigned rfProtocol, bool custom)
|
||||
{
|
||||
static const char * strings[] = {
|
||||
"FCC",
|
||||
"LBT(EU)"
|
||||
};
|
||||
|
||||
switch (protocol) {
|
||||
case PULSES_MULTIMODULE:
|
||||
return printMultiSubType(rfProtocol, custom, subType);
|
||||
|
||||
case PULSES_PXX_R9M:
|
||||
return CHECK_IN_ARRAY(strings, subType);
|
||||
|
||||
default:
|
||||
return "???";
|
||||
}
|
||||
}
|
||||
|
||||
QString ModelPrinter::printModule(int idx) {
|
||||
const ModuleData &module = model.moduleData[idx];
|
||||
if (module.protocol == PULSES_OFF)
|
||||
@@ -167,6 +208,8 @@ QString ModelPrinter::printModule(int idx) {
|
||||
}
|
||||
if (module.protocol == PULSES_MULTIMODULE)
|
||||
result += " " + tr("radio Protocol %1, subType %2, option value %3").arg(printMultiRfProtocol(module.multi.rfProtocol, module.multi.customProto)).arg(printMultiSubType(module.multi.rfProtocol, module.multi.customProto, module.subType)).arg(module.multi.optionValue);
|
||||
else if (module.protocol == PULSES_PXX_R9M)
|
||||
result += " " + tr("Module Type: %1, Power: %2, Telemetry Enabled: %3").arg(printModuleSubType(module.protocol, module.subType)).arg(printR9MPowerValue(module.subType, module.pxx.power, module.pxx.sport_out)).arg(printBoolean(module.pxx.sport_out));
|
||||
return result;
|
||||
}
|
||||
}
|
||||
@@ -709,7 +752,7 @@ QString ModelPrinter::printGlobalVarMax(int idx)
|
||||
|
||||
QString ModelPrinter::printGlobalVarPopup(int idx)
|
||||
{
|
||||
return (model.gvarData[idx].popup ? "Y" : "N" );
|
||||
return printBoolean(model.gvarData[idx].popup);
|
||||
}
|
||||
|
||||
QString ModelPrinter::printOutputValueGVar(int val)
|
||||
@@ -760,6 +803,6 @@ QString ModelPrinter::printOutputCurve(int idx)
|
||||
|
||||
QString ModelPrinter::printOutputSymetrical(int idx)
|
||||
{
|
||||
return (model.limitData[idx].symetrical ? "Y": "N");
|
||||
return printBoolean(model.limitData[idx].symetrical);
|
||||
}
|
||||
|
||||
|
||||
@@ -54,12 +54,15 @@ class ModelPrinter: public QObject
|
||||
ModelPrinter(Firmware * firmware, const GeneralSettings & generalSettings, const ModelData & model);
|
||||
virtual ~ModelPrinter();
|
||||
|
||||
QString printBoolean(bool val);
|
||||
QString printEEpromSize();
|
||||
QString printTrimIncrementMode();
|
||||
QString printThrottleTrimMode();
|
||||
static QString printModuleProtocol(unsigned int protocol);
|
||||
static QString printMultiRfProtocol(int rfProtocol, bool custom);
|
||||
static QString printMultiSubType(int rfProtocol, bool custom, unsigned int subType);
|
||||
static QString printR9MPowerValue(unsigned subType, unsigned val, bool telem);
|
||||
static QString printMultiSubType(unsigned rfProtocol, bool custom, unsigned int subType);
|
||||
static QString printModuleSubType(unsigned protocol, unsigned subType, unsigned rfProtocol = 0, bool custom = false);
|
||||
QString printFlightModeSwitch(const RawSwitch & swtch);
|
||||
QString printFlightModeName(int index);
|
||||
QString printFlightModes(unsigned int flightModes);
|
||||
|
||||
@@ -45,8 +45,8 @@ static const QStringList STR_SUBTYPE_YD717 {"YD717", "Skywalker", "Syma X2", "
|
||||
static const QStringList STR_SUBTYPE_SYMAX {"Standard", "Syma X5C"};
|
||||
static const QStringList STR_SUBTYPE_SLT {"SLT", "Vista"};
|
||||
static const QStringList STR_SUBTYPE_CX10 {"Green", "Blue", "DM007", "-", "JC3015a", "JC3015b", "MK33041", "Q242"};
|
||||
static const QStringList STR_SUBTYPE_CG023 {"CG023", "YD829", "H8 3D"};
|
||||
static const QStringList STR_SUBTYPE_BAYANG {"Bayang", "H8S3D", "X16 AH"};
|
||||
static const QStringList STR_SUBTYPE_CG023 {"CG023", "YD829"};
|
||||
static const QStringList STR_SUBTYPE_BAYANG {"Bayang", "H8S3D", "X16 AH", "IRDRONE"};
|
||||
static const QStringList STR_SUBTYPE_KN {"WLtoys", "FeiLun"};
|
||||
static const QStringList STR_SUBTYPE_MT99 {"MT99", "H7", "YZ", "LS", "FY805"};
|
||||
static const QStringList STR_SUBTYPE_MJXQ {"WLH08", "X600", "X800", "H26D", "E010", "H26WH"};
|
||||
@@ -56,6 +56,8 @@ static const QStringList STR_SUBTYPE_AFHDS2A {"PWM and IBUS", "PPM and IBUS", "P
|
||||
static const QStringList STR_SUBTYPE_Q2X2 {"Q222", "Q242", "Q282"};
|
||||
static const QStringList STR_SUBTYPE_WK2x01 {"WK2801", "WK2401", "W6_5_1", "W6_6_1", "W6_HEL", "W6_HEL_I"};
|
||||
static const QStringList STR_SUBTYPE_Q303 {"Q303", "CX35", "CX10D", "CX10WD"};
|
||||
static const QStringList STR_SUBTYPE_CABELL {"CABELL V3","C TELEM","-","-","-","-","F_SAFE","UNBIND"};
|
||||
static const QStringList STR_SUBTYPE_H83D {"H8_3D","H20H","H20Mini","H30Mini"};
|
||||
static const QStringList NO_SUBTYPE {STR_MULTI_DEFAULT};
|
||||
|
||||
|
||||
@@ -73,18 +75,20 @@ const Multiprotocols multiProtocols {
|
||||
{MM_RF_PROTO_SYMAX, 1, false, STR_SUBTYPE_SYMAX, nullptr},
|
||||
{MM_RF_PROTO_SLT, 1, false, STR_SUBTYPE_SLT, nullptr},
|
||||
{MM_RF_PROTO_CX10, 7, false, STR_SUBTYPE_CX10, nullptr},
|
||||
{MM_RF_PROTO_CG023, 2, false, STR_SUBTYPE_CG023, nullptr},
|
||||
{MM_RF_PROTO_BAYANG, 2, false, STR_SUBTYPE_BAYANG, STR_MULTI_TELEMETRY},
|
||||
{MM_RF_PROTO_CG023, 1, false, STR_SUBTYPE_CG023, nullptr},
|
||||
{MM_RF_PROTO_BAYANG, 3, false, STR_SUBTYPE_BAYANG, STR_MULTI_TELEMETRY},
|
||||
{MM_RF_PROTO_MT99XX, 4, false, STR_SUBTYPE_MT99, nullptr},
|
||||
{MM_RF_PROTO_MJXQ, 5, false, STR_SUBTYPE_MJXQ, nullptr},
|
||||
{MM_RF_PROTO_FY326, 1, false, STR_SUBTYPE_FY326, nullptr},
|
||||
{MM_RF_PROTO_SFHSS, 0, false, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
{MM_RF_PROTO_SFHSS, 0, true, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
{MM_RF_PROTO_HONTAI, 2, false, STR_SUBTYPE_HONTAI, nullptr},
|
||||
{MM_RF_PROTO_OLRS, 0, false, NO_SUBTYPE, STR_MULTI_RFPOWER},
|
||||
{MM_RF_PROTO_FS_AFHDS2A, 3, true, STR_SUBTYPE_AFHDS2A, STR_MULTI_SERVOFREQ},
|
||||
{MM_RF_PROTO_Q2X2, 2, false, STR_SUBTYPE_Q2X2, nullptr},
|
||||
{MM_RF_PROTO_WK_2X01, 5, false, STR_SUBTYPE_WK2x01, nullptr},
|
||||
{MM_RF_PROTO_Q303, 3, false, STR_SUBTYPE_Q303, nullptr},
|
||||
{MM_RF_PROTO_CABELL, 7, false, STR_SUBTYPE_CABELL, STR_MULTI_OPTION},
|
||||
{MM_RF_PROTO_H83D, 3, false, STR_SUBTYPE_H83D, nullptr},
|
||||
{MM_RF_CUSTOM_SELECTED, 7, true, STR_SUBTYPE_CUSTOM, STR_MULTI_OPTION},
|
||||
|
||||
// Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff)
|
||||
|
||||
@@ -168,6 +168,8 @@ void LogicalSwitchData::convert(Board::Type before, Board::Type after)
|
||||
void CustomFunctionData::convert(Board::Type before, Board::Type after)
|
||||
{
|
||||
swtch.convert(before, after);
|
||||
if (func == FuncVolume || func == FuncPlayValue || (func >= FuncAdjustGV1 && func <= FuncAdjustGVLast && adjustMode == 1))
|
||||
param = RawSource(param).convert(before, after).toValue();
|
||||
}
|
||||
|
||||
void FlightModeData::convert(Board::Type before, Board::Type after)
|
||||
@@ -203,6 +205,10 @@ void GeneralSettings::convert(Board::Type before, Board::Type after)
|
||||
{
|
||||
// Here we can add explicit conversions when moving from one board to another
|
||||
|
||||
for (int i=0; i<CPN_MAX_SPECIAL_FUNCTIONS; i++) {
|
||||
customFn[i].convert(before, after);
|
||||
}
|
||||
|
||||
// No SE and SG on X7 board
|
||||
if (IS_TARANIS_X7(after)) {
|
||||
if (IS_TARANIS_X9(before) || IS_HORUS(before)) {
|
||||
@@ -212,6 +218,16 @@ void GeneralSettings::convert(Board::Type before, Board::Type after)
|
||||
memcpy(switchName[5], switchName[7], sizeof(switchName[5]));
|
||||
}
|
||||
}
|
||||
|
||||
if (IS_TARANIS(after)) {
|
||||
unsigned int min_contrast = getCurrentFirmware()->getCapability(MinContrast);
|
||||
unsigned int max_contrast = getCurrentFirmware()->getCapability(MaxContrast);
|
||||
|
||||
if (contrast < min_contrast)
|
||||
contrast = min_contrast;
|
||||
else if (contrast > max_contrast)
|
||||
contrast = max_contrast;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -297,4 +313,9 @@ void RadioData::convert(Board::Type before, Board::Type after)
|
||||
if (IS_HORUS(after)) {
|
||||
fixModelFilenames();
|
||||
}
|
||||
|
||||
// ensure proper number of model slots
|
||||
if (getCurrentFirmware()->getCapability(Models) && getCurrentFirmware()->getCapability(Models) != (int)models.size()) {
|
||||
models.resize(getCurrentFirmware()->getCapability(Models));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -812,7 +812,10 @@ enum MultiModuleRFProtocols {
|
||||
MM_RF_PROTO_Q303,
|
||||
MM_RF_PROTO_GW008,
|
||||
MM_RF_PROTO_DM002,
|
||||
MM_RF_PROTO_LAST=MM_RF_PROTO_DM002
|
||||
MM_RF_PROTO_CABELL,
|
||||
MM_RF_PROTO_ESKY150,
|
||||
MM_RF_PROTO_H83D,
|
||||
MM_RF_PROTO_LAST=MM_RF_PROTO_H83D
|
||||
};
|
||||
|
||||
enum TrainerProtocol {
|
||||
|
||||
@@ -71,8 +71,9 @@ class StorageFormat
|
||||
{
|
||||
switch (board) {
|
||||
case Board::BOARD_X12S:
|
||||
case Board::BOARD_X10:
|
||||
return 0x3478746F;
|
||||
case Board::BOARD_X10:
|
||||
return 0x3778746F;
|
||||
case Board::BOARD_TARANIS_X7:
|
||||
return 0x3678746F;
|
||||
case Board::BOARD_TARANIS_X9E:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -422,15 +422,15 @@ local function createModel(event)
|
||||
if(AilFields[1][5] == 1) then
|
||||
addMix(AilFields[2][5], MIXSRC_FIRST_INPUT+defaultChannel(3), "Ail")
|
||||
elseif (AilFields[1][5] == 2) then
|
||||
addMix(AilFields[2][5], MIXSRC_FIRST_INPUT+defaultChannel(3), "Ail1")
|
||||
addMix(AilFields[3][5], MIXSRC_FIRST_INPUT+defaultChannel(3), "Ail2", -100)
|
||||
addMix(AilFields[2][5], MIXSRC_FIRST_INPUT+defaultChannel(3), "AilL")
|
||||
addMix(AilFields[3][5], MIXSRC_FIRST_INPUT+defaultChannel(3), "AilR", -100)
|
||||
end
|
||||
-- Flaps
|
||||
if(FlapsFields[1][5] == 1) then
|
||||
addMix(FlapsFields[2][5], MIXSRC_SA, "Flaps")
|
||||
elseif (FlapsFields[1][5] == 2) then
|
||||
addMix(FlapsFields[2][5], MIXSRC_SA, "Flaps1")
|
||||
addMix(FlapsFields[3][5], MIXSRC_SA, "Flaps2")
|
||||
addMix(FlapsFields[2][5], MIXSRC_SA, "FlapsL")
|
||||
addMix(FlapsFields[3][5], MIXSRC_SA, "FlapsR")
|
||||
end
|
||||
-- Tail
|
||||
if(TailFields[1][5] == 0) then
|
||||
@@ -439,14 +439,14 @@ local function createModel(event)
|
||||
addMix(TailFields[2][5], MIXSRC_FIRST_INPUT+defaultChannel(1), "Elev")
|
||||
addMix(TailFields[3][5], MIXSRC_FIRST_INPUT+defaultChannel(0), "Rudder")
|
||||
elseif (TailFields[1][5] == 2) then
|
||||
addMix(TailFields[2][5], MIXSRC_FIRST_INPUT+defaultChannel(1), "Elev1")
|
||||
addMix(TailFields[2][5], MIXSRC_FIRST_INPUT+defaultChannel(1), "ElevL")
|
||||
addMix(TailFields[3][5], MIXSRC_FIRST_INPUT+defaultChannel(0), "Rudder")
|
||||
addMix(TailFields[4][5], MIXSRC_FIRST_INPUT+defaultChannel(1), "Elev2")
|
||||
addMix(TailFields[4][5], MIXSRC_FIRST_INPUT+defaultChannel(1), "ElevR")
|
||||
elseif (TailFields[1][5] == 3) then
|
||||
addMix(TailFields[2][5], MIXSRC_FIRST_INPUT+defaultChannel(1), "VTailE", 50)
|
||||
addMix(TailFields[2][5], MIXSRC_FIRST_INPUT+defaultChannel(0), "VTailR", 50, 1)
|
||||
addMix(TailFields[3][5], MIXSRC_FIRST_INPUT+defaultChannel(1), "VTailE", 50)
|
||||
addMix(TailFields[3][5], MIXSRC_FIRST_INPUT+defaultChannel(0), "VTailR", -50, 1)
|
||||
addMix(TailFields[2][5], MIXSRC_FIRST_INPUT+defaultChannel(1), "V-EleL", 50)
|
||||
addMix(TailFields[2][5], MIXSRC_FIRST_INPUT+defaultChannel(0), "V-RudL", 50, 1)
|
||||
addMix(TailFields[3][5], MIXSRC_FIRST_INPUT+defaultChannel(1), "V-EleR", 50)
|
||||
addMix(TailFields[3][5], MIXSRC_FIRST_INPUT+defaultChannel(0), "V-RudR", -50, 1)
|
||||
end
|
||||
lcd.drawText(70, 90, "Model successfully created !", TEXT_COLOR)
|
||||
lcd.drawText(100, 130, "Press RTN to exit", TEXT_COLOR)
|
||||
|
||||
@@ -1,3 +1,19 @@
|
||||
---- #########################################################################
|
||||
---- # #
|
||||
---- # Copyright (C) OpenTX #
|
||||
-----# #
|
||||
---- # License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html #
|
||||
---- # #
|
||||
---- # This program is free software; you can redistribute it and/or modify #
|
||||
---- # it under the terms of the GNU General Public License version 2 as #
|
||||
---- # published by the Free Software Foundation. #
|
||||
---- # #
|
||||
---- # This program is distributed in the hope that it will be useful #
|
||||
---- # but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
||||
---- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
||||
---- # GNU General Public License for more details. #
|
||||
---- # #
|
||||
---- #########################################################################
|
||||
-- Delta Wizard pages
|
||||
local ENGINE_PAGE = 0
|
||||
local ELEVONS_PAGE = 1
|
||||
|
||||
@@ -1,3 +1,19 @@
|
||||
---- #########################################################################
|
||||
---- # #
|
||||
---- # Copyright (C) OpenTX #
|
||||
-----# #
|
||||
---- # License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html #
|
||||
---- # #
|
||||
---- # This program is free software; you can redistribute it and/or modify #
|
||||
---- # it under the terms of the GNU General Public License version 2 as #
|
||||
---- # published by the Free Software Foundation. #
|
||||
---- # #
|
||||
---- # This program is distributed in the hope that it will be useful #
|
||||
---- # but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
||||
---- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
||||
---- # GNU General Public License for more details. #
|
||||
---- # #
|
||||
---- #########################################################################
|
||||
-- Multicopter Wizard pages
|
||||
local THROTTLE_PAGE = 0
|
||||
local ROLL_PAGE = 1
|
||||
|
||||
@@ -1,3 +1,19 @@
|
||||
---- #########################################################################
|
||||
---- # #
|
||||
---- # Copyright (C) OpenTX #
|
||||
-----# #
|
||||
---- # License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html #
|
||||
---- # #
|
||||
---- # This program is free software; you can redistribute it and/or modify #
|
||||
---- # it under the terms of the GNU General Public License version 2 as #
|
||||
---- # published by the Free Software Foundation. #
|
||||
---- # #
|
||||
---- # This program is distributed in the hope that it will be useful #
|
||||
---- # but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
||||
---- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
||||
---- # GNU General Public License for more details. #
|
||||
---- # #
|
||||
---- #########################################################################
|
||||
-- Plane Wizard pages
|
||||
local ENGINE_PAGE = 0
|
||||
local AILERONS_PAGE = 1
|
||||
@@ -166,7 +182,7 @@ local function engineMenu(event)
|
||||
end
|
||||
|
||||
-- Ailerons Menu
|
||||
local aileronsModeItems = {"No", "Yes", "Yes, 2 channels"}
|
||||
local aileronsModeItems = {"No", "Yes, 1 channel", "Yes, 2 channels"}
|
||||
local function drawAileronsMenu()
|
||||
lcd.clear()
|
||||
if aileronsMode == 2 then
|
||||
@@ -211,7 +227,7 @@ local function aileronsMenu(event)
|
||||
end
|
||||
|
||||
-- Flaps Menu
|
||||
local flapsModeItems = {"No", "Yes", "Yes, 2 channels"}
|
||||
local flapsModeItems = {"No", "Yes, 1 channel", "Yes, 2 channels"}
|
||||
local function drawFlapsMenu()
|
||||
lcd.clear()
|
||||
if flapsMode == 0 then
|
||||
@@ -256,7 +272,7 @@ local function flapsMenu(event)
|
||||
end
|
||||
|
||||
-- Airbrakes Menu
|
||||
local brakesModeItems = {"No", "Yes", "Yes, 2 channels"}
|
||||
local brakesModeItems = {"No", "Yes, 1 channel", "Yes, 2 channels"}
|
||||
local function drawBrakesMenu()
|
||||
lcd.clear()
|
||||
if brakesMode == 0 then
|
||||
|
||||
@@ -1,3 +1,19 @@
|
||||
---- #########################################################################
|
||||
---- # #
|
||||
---- # Copyright (C) OpenTX #
|
||||
-----# #
|
||||
---- # License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html #
|
||||
---- # #
|
||||
---- # This program is free software; you can redistribute it and/or modify #
|
||||
---- # it under the terms of the GNU General Public License version 2 as #
|
||||
---- # published by the Free Software Foundation. #
|
||||
---- # #
|
||||
---- # This program is distributed in the hope that it will be useful #
|
||||
---- # but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
||||
---- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
||||
---- # GNU General Public License for more details. #
|
||||
---- # #
|
||||
---- #########################################################################
|
||||
-- Navigation variables
|
||||
local dirty = true
|
||||
|
||||
|
||||
@@ -308,10 +308,10 @@ local function applySettings()
|
||||
if engineMode == 1 then
|
||||
addMix(thrCH1, MIXSRC_FIRST_INPUT+defaultChannel(2), "Engine")
|
||||
end
|
||||
addMix(elevCH1, MIXSRC_FIRST_INPUT+defaultChannel(1), "ElevL-E", 50)
|
||||
addMix(elevCH1, MIXSRC_FIRST_INPUT+defaultChannel(3), "ElevL-A", 50, 1)
|
||||
addMix(elevCH2, MIXSRC_FIRST_INPUT+defaultChannel(1), "ElevR-E", 50)
|
||||
addMix(elevCH2, MIXSRC_FIRST_INPUT+defaultChannel(3), "ElevR-A", -50, 1)
|
||||
addMix(elevCH1, MIXSRC_FIRST_INPUT+defaultChannel(1), "D-EleL", 50)
|
||||
addMix(elevCH1, MIXSRC_FIRST_INPUT+defaultChannel(3), "D-AilL", 50, 1)
|
||||
addMix(elevCH2, MIXSRC_FIRST_INPUT+defaultChannel(1), "D-EleR", 50)
|
||||
addMix(elevCH2, MIXSRC_FIRST_INPUT+defaultChannel(3), "D-AilR", -50, 1)
|
||||
if rudderMode == 1 then
|
||||
addMix(rudCH1, MIXSRC_FIRST_INPUT+defaultChannel(0), "Rudder")
|
||||
end
|
||||
|
||||
@@ -265,7 +265,7 @@ end
|
||||
local function applySettings()
|
||||
model.defaultInputs()
|
||||
model.deleteMixes()
|
||||
addMix(thrCH1, MIXSRC_FIRST_INPUT+defaultChannel(2), "Throttle")
|
||||
addMix(thrCH1, MIXSRC_FIRST_INPUT+defaultChannel(2), "Engine")
|
||||
addMix(rollCH1, MIXSRC_FIRST_INPUT+defaultChannel(3), "Roll")
|
||||
addMix(yawCH1, MIXSRC_FIRST_INPUT+defaultChannel(0), "Yaw")
|
||||
addMix(pitchCH1, MIXSRC_FIRST_INPUT+defaultChannel(1), "Pitch")
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
---- #########################################################################
|
||||
---- # #
|
||||
---- # Copyright (C) OpenTX #
|
||||
@@ -186,7 +185,7 @@ local function engineMenu(event)
|
||||
end
|
||||
|
||||
-- Ailerons Menu
|
||||
local aileronsModeItems = {"No", "Yes", "Yes, 2 channels"}
|
||||
local aileronsModeItems = {"No", "Yes, 1 channel", "Yes, 2 channels"}
|
||||
local function drawAileronsMenu()
|
||||
lcd.clear()
|
||||
lcd.drawText(1, 0, "Has your model got ailerons?", 0)
|
||||
@@ -233,7 +232,7 @@ local function aileronsMenu(event)
|
||||
end
|
||||
|
||||
-- Flaps Menu
|
||||
local flapsModeItems = {"No", "Yes", "Yes, 2 channels"}
|
||||
local flapsModeItems = {"No", "Yes, 1 channel", "Yes, 2 channels"}
|
||||
local function drawFlapsMenu()
|
||||
lcd.clear()
|
||||
lcd.drawText(1, 0, "Has your model got flaps?", 0)
|
||||
@@ -280,7 +279,7 @@ local function flapsMenu(event)
|
||||
end
|
||||
|
||||
-- Airbrakes Menu
|
||||
local brakesModeItems = {"No", "Yes", "Yes, 2 channels"}
|
||||
local brakesModeItems = {"No", "Yes, 1 channel", "Yes, 2 channels"}
|
||||
local function drawBrakesMenu()
|
||||
lcd.clear()
|
||||
lcd.drawText(1, 0, "Has your model got air brakes?", 0)
|
||||
@@ -327,7 +326,7 @@ local function brakesMenu(event)
|
||||
end
|
||||
|
||||
-- Tail Menu
|
||||
local tailModeItems = {"Ele(1ch)", "Ele(1ch) + Rudder(1ch)", "Ele(2ch) + Rudder(1ch)", "V-Tail(2ch)"}
|
||||
local tailModeItems = {"Ele(1ch)", "Ele(1ch) + Rud(1ch)", "Ele(2ch) + Rud(1ch)", "V-Tail(2ch)"}
|
||||
local function drawTailMenu()
|
||||
lcd.clear()
|
||||
lcd.drawText(1, 0, "Which is the tail config on your model?", 0)
|
||||
@@ -462,7 +461,7 @@ local function drawConfirmationMenu()
|
||||
end
|
||||
if flapsMode == 1 then
|
||||
x, y = drawNextLine(x, y, "Flaps", flapsCH1)
|
||||
elsif flapsMode == 2 then
|
||||
elseif flapsMode == 2 then
|
||||
x, y = drawNextLine(x, y, "Flap L", flapsCH1)
|
||||
x, y = drawNextLine(x, y, "Flap R", flapsCH2)
|
||||
end
|
||||
@@ -510,35 +509,35 @@ local function applySettings()
|
||||
if aileronsMode == 1 then
|
||||
addMix(ailCH1, MIXSRC_FIRST_INPUT+defaultChannel(3), "Ail")
|
||||
elseif aileronsMode == 2 then
|
||||
addMix(ailCH1, MIXSRC_FIRST_INPUT+defaultChannel(3), "Ail L")
|
||||
addMix(ailCH2, MIXSRC_FIRST_INPUT+defaultChannel(3), "Ail R", -100)
|
||||
addMix(ailCH1, MIXSRC_FIRST_INPUT+defaultChannel(3), "AilL")
|
||||
addMix(ailCH2, MIXSRC_FIRST_INPUT+defaultChannel(3), "AilR", -100)
|
||||
end
|
||||
if flapsMode == 1 then
|
||||
addMix(flapsCH1, MIXSRC_SA, "Flaps")
|
||||
elseif flapsMode == 2 then
|
||||
addMix(flapsCH1, MIXSRC_SA, "Flap L")
|
||||
addMix(flapsCH2, MIXSRC_SA, "Flap R")
|
||||
addMix(flapsCH1, MIXSRC_SA, "FlapL")
|
||||
addMix(flapsCH2, MIXSRC_SA, "FlapR")
|
||||
end
|
||||
if brakesMode == 1 then
|
||||
addMix(brakesCH1, MIXSRC_SE, "Brakes")
|
||||
elseif brakesMode == 2 then
|
||||
addMix(brakesCH1, MIXSRC_SE, "Brake L")
|
||||
addMix(brakesCH2, MIXSRC_SE, "Brake R")
|
||||
addMix(brakesCH1, MIXSRC_SE, "BrakeL")
|
||||
addMix(brakesCH2, MIXSRC_SE, "BrakeR")
|
||||
end
|
||||
if tailMode == 3 then
|
||||
addMix(eleCH1, MIXSRC_FIRST_INPUT+defaultChannel(1), "V-Ele L", 50)
|
||||
addMix(eleCH1, MIXSRC_FIRST_INPUT+defaultChannel(0), "V-Rud L", 50, 1)
|
||||
addMix(eleCH2, MIXSRC_FIRST_INPUT+defaultChannel(1), "V-Ele R", 50)
|
||||
addMix(eleCH2, MIXSRC_FIRST_INPUT+defaultChannel(0), "V-Rud R", -50, 1)
|
||||
addMix(eleCH1, MIXSRC_FIRST_INPUT+defaultChannel(1), "V-EleL", 50)
|
||||
addMix(eleCH1, MIXSRC_FIRST_INPUT+defaultChannel(0), "V-RudL", 50, 1)
|
||||
addMix(eleCH2, MIXSRC_FIRST_INPUT+defaultChannel(1), "V-EleR", 50)
|
||||
addMix(eleCH2, MIXSRC_FIRST_INPUT+defaultChannel(0), "V-RudR", -50, 1)
|
||||
else
|
||||
if tailMode > 0 then
|
||||
addMix(rudCH1, MIXSRC_FIRST_INPUT+defaultChannel(0), "Rudder")
|
||||
end
|
||||
if tailMode == 1 then
|
||||
addMix(eleCH1, MIXSRC_FIRST_INPUT+defaultChannel(1), "Elevator")
|
||||
addMix(eleCH1, MIXSRC_FIRST_INPUT+defaultChannel(1), "Elev")
|
||||
elseif tailMode == 2 then
|
||||
addMix(eleCH1, MIXSRC_FIRST_INPUT+defaultChannel(1), "Elev L")
|
||||
addMix(eleCH2, MIXSRC_FIRST_INPUT+defaultChannel(1), "Elev R")
|
||||
addMix(eleCH1, MIXSRC_FIRST_INPUT+defaultChannel(1), "ElevL")
|
||||
addMix(eleCH2, MIXSRC_FIRST_INPUT+defaultChannel(1), "ElevR")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -103,7 +103,7 @@ end
|
||||
-- Redraw the current page
|
||||
local function redrawFieldsPage()
|
||||
lcd.clear()
|
||||
lcd.drawScreenTitle("S6R", page, #pages)
|
||||
lcd.drawScreenTitle("SxR", page, #pages)
|
||||
|
||||
if refreshIndex < #fields then
|
||||
drawProgressBar()
|
||||
|
||||
@@ -3,7 +3,7 @@ include(Bitmaps)
|
||||
|
||||
set(PCB_TYPES X7 X9D X9D+ X9E X10 X12S 9X 9XR 9X128 9XR128 9X2561 GRUVIN9X MEGA2560 SKY9X 9XRPRO AR9X)
|
||||
set(GUI_LANGUAGES CZ DE EN ES FR IT PT SK SE PL HU NL)
|
||||
set(TTS_LANGUAGES CZ DE EN ES FR IT PT SK SE PL HU)
|
||||
set(TTS_LANGUAGES CZ DE EN ES FR IT PT SK SE PL HU RU)
|
||||
|
||||
set(PCB "X9D+" CACHE STRING "Radio type, one of: ${PCB_TYPES}")
|
||||
set_property(CACHE PCB PROPERTY STRINGS ${PCB_TYPES})
|
||||
@@ -41,7 +41,6 @@ option(FAS_PROTOTYPE "Support of old FAS prototypes (different resistors)" OFF)
|
||||
option(TEMPLATES "Model templates menu" OFF)
|
||||
option(TRACE_SIMPGMSPACE "Turn on traces in simpgmspace.cpp" ON)
|
||||
option(TRACE_LUA_INTERNALS "Turn on traces for Lua internals" OFF)
|
||||
option(BINDING_OPTIONS "Allow advanced frsky bindings" OFF)
|
||||
option(FRSKY_STICKS "Reverse sticks for FrSky sticks" OFF)
|
||||
option(NANO "Use nano newlib and binalloc")
|
||||
option(NIGHTLY_BUILD_WARNING "Warn this is a nightly build" OFF)
|
||||
@@ -327,10 +326,6 @@ if(TRACE_LUA_INTERNALS)
|
||||
add_definitions(-DTRACE_LUA_INTERNALS_ENABLED)
|
||||
endif()
|
||||
|
||||
if(BINDING_OPTIONS)
|
||||
add_definitions(-DBINDING_OPTIONS)
|
||||
endif()
|
||||
|
||||
if(FRSKY_STICKS)
|
||||
add_definitions(-DFRSKY_STICKS)
|
||||
endif()
|
||||
|
||||
@@ -654,7 +654,7 @@ PACK(struct ModuleData {
|
||||
int8_t rfProtocol:4;
|
||||
uint8_t channelsStart;
|
||||
int8_t channelsCount; // 0=8 channels
|
||||
uint8_t failsafeMode:4; //only 3 bits used
|
||||
uint8_t failsafeMode:4; // only 3 bits used
|
||||
uint8_t subType:3;
|
||||
uint8_t invertedSerial:1; // telemetry serial inverted from standard
|
||||
int16_t failsafeChannels[MAX_OUTPUT_CHANNELS];
|
||||
@@ -667,23 +667,23 @@ PACK(struct ModuleData {
|
||||
} ppm;
|
||||
NOBACKUP(struct {
|
||||
uint8_t rfProtocolExtra:2;
|
||||
uint8_t spare:3;
|
||||
uint8_t spare1:3;
|
||||
uint8_t customProto:1;
|
||||
uint8_t autoBindMode:1;
|
||||
uint8_t lowPowerMode:1;
|
||||
int8_t optionValue;
|
||||
} multi);
|
||||
NOBACKUP(struct {
|
||||
uint8_t power:2; // 0 10 mW, 1 100 mW, 2 500 mW, 3 1W
|
||||
uint8_t spare:2;
|
||||
uint8_t power:2; // 0=10 mW, 1=100 mW, 2=500 mW, 3=1W
|
||||
uint8_t spare1: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 external_antenna:1; // false = internal antenna, true = external antenna
|
||||
uint8_t sport_out:1;
|
||||
uint8_t spare3;
|
||||
uint8_t spare2;
|
||||
} pxx);
|
||||
NOBACKUP(struct {
|
||||
uint8_t spare:6;
|
||||
uint8_t spare1:6;
|
||||
uint8_t noninverted:1;
|
||||
uint8_t spare2:1;
|
||||
int8_t refreshRate; // definition as framelength for ppm (* 5 + 225 = time in 1/10 ms)
|
||||
|
||||
@@ -143,7 +143,7 @@ enum MenuModelSetupItems {
|
||||
#endif
|
||||
#define PORT_CHANNELS_ROWS(x) (x==EXTERNAL_MODULE ? EXTERNAL_MODULE_CHANNELS_ROWS : 0)
|
||||
|
||||
#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 EXTERNAL_MODULE_MODE_ROWS (IS_MODULE_PXX(EXTERNAL_MODULE) || IS_MODULE_DSM2(EXTERNAL_MODULE) || IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) ? (uint8_t)1 : (uint8_t)0
|
||||
|
||||
#define CURSOR_ON_CELL (true)
|
||||
#define MODEL_SETUP_MAX_LINES (HEADER_LINE+ITEM_MODEL_SETUP_MAX)
|
||||
@@ -178,33 +178,56 @@ enum MenuModelSetupItems {
|
||||
#define MODEL_SETUP_MAX_LINES ((IS_PPM_PROTOCOL(protocol)||IS_DSM2_PROTOCOL(protocol)||IS_PXX_PROTOCOL(protocol)) ? HEADER_LINE+ITEM_MODEL_SETUP_MAX : HEADER_LINE+ITEM_MODEL_SETUP_MAX-1)
|
||||
#endif
|
||||
|
||||
#if defined(BINDING_OPTIONS)
|
||||
#if defined(PCBTARANIS)
|
||||
void onBindMenu(const char * result)
|
||||
{
|
||||
if (result == STR_BINDING_1_8_TELEM_ON) {
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = false;
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition);
|
||||
|
||||
if (result == STR_BINDING_25MW_CH1_8_TELEM_OFF) {
|
||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_25;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_25MW_CH1_8_TELEM_ON) {
|
||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_25;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_500MW_CH1_8_TELEM_OFF) {
|
||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_500;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_500MW_CH9_16_TELEM_OFF) {
|
||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_500;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true;
|
||||
}
|
||||
else if (result == STR_BINDING_1_8_TELEM_ON) {
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_1_8_TELEM_OFF) {
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = false;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_9_16_TELEM_ON) {
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true;
|
||||
}
|
||||
else if (result == STR_BINDING_9_16_TELEM_OFF) {
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
|
||||
moduleFlag[INTERNAL_MODULE] = MODULE_BIND;
|
||||
moduleFlag[moduleIdx] = MODULE_BIND;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
void menuModelSetup(event_t event)
|
||||
{
|
||||
#if defined(PCBX7)
|
||||
@@ -711,6 +734,8 @@ void menuModelSetup(event_t event)
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
||||
else if (IS_MODULE_DSM2(EXTERNAL_MODULE))
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
||||
else if (IS_MODULE_R9M(EXTERNAL_MODULE))
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN+5*FW, y, STR_R9M_MODES, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
|
||||
#if defined(MULTIMODULE)
|
||||
else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) {
|
||||
int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||
@@ -735,6 +760,8 @@ void menuModelSetup(event_t event)
|
||||
case 1:
|
||||
if (IS_MODULE_DSM2(EXTERNAL_MODULE))
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
||||
else if (IS_MODULE_R9M(EXTERNAL_MODULE))
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, MODULE_SUBTYPE_R9M_FCC, MODULE_SUBTYPE_R9M_LBT);
|
||||
#if defined(MULTIMODULE)
|
||||
else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) {
|
||||
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||
@@ -747,7 +774,8 @@ void menuModelSetup(event_t event)
|
||||
// Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 0;
|
||||
}
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = 0;
|
||||
@@ -771,13 +799,13 @@ void menuModelSetup(event_t event)
|
||||
{
|
||||
lcdDrawTextAlignedLeft(y, STR_SUBTYPE);
|
||||
uint8_t multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true);
|
||||
const mm_protocol_definition *pdef = getMultiProtocolDefinition(multi_rfProto);
|
||||
const mm_protocol_definition * pdef = getMultiProtocolDefinition(multi_rfProto);
|
||||
|
||||
if (multi_rfProto == MM_RF_CUSTOM_SELECTED) {
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN + 3 * FW, y, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false), RIGHT | (menuHorizontalPosition == 0 ? attr : 0), 2);
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN + 5 * FW, y, g_model.moduleData[EXTERNAL_MODULE].subType, RIGHT | (menuHorizontalPosition == 1 ? attr : 0), 2);
|
||||
} else
|
||||
{
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN + 3 * FW, y, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false), RIGHT | (menuHorizontalPosition == 0 ? attr : 0), 2);
|
||||
lcdDrawNumber(MODEL_SETUP_2ND_COLUMN + 5 * FW, y, g_model.moduleData[EXTERNAL_MODULE].subType, RIGHT | (menuHorizontalPosition == 1 ? attr : 0), 2);
|
||||
}
|
||||
else {
|
||||
if (pdef->subTypeString != nullptr)
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, pdef->subTypeString, g_model.moduleData[EXTERNAL_MODULE].subType, attr);
|
||||
}
|
||||
@@ -796,7 +824,7 @@ void menuModelSetup(event_t event)
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
break;
|
||||
#endif
|
||||
|
||||
#if defined(PCBX7)
|
||||
@@ -987,26 +1015,40 @@ void menuModelSetup(event_t event)
|
||||
s_editMode=0;
|
||||
}
|
||||
#endif
|
||||
#if defined(BINDING_OPTIONS)
|
||||
#if defined(PCBTARANIS)
|
||||
if (attr && l_posHorz > 0) {
|
||||
if (s_editMode > 0) {
|
||||
if (l_posHorz == 1) {
|
||||
if (IS_MODULE_XJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol== RF_PROTO_X16 && s_current_protocol[INTERNAL_MODULE] == PROTO_PXX) {
|
||||
if(event==EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF);
|
||||
POPUP_MENU_SELECT_ITEM(g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off + (g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 << 1));
|
||||
if (IS_MODULE_R9M(moduleIdx) || (IS_MODULE_XJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol== RF_PROTO_X16)) {
|
||||
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
uint8_t default_selection;
|
||||
if (IS_MODULE_R9M_LBT(moduleIdx)) {
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_25MW_CH1_8_TELEM_OFF);
|
||||
if (!IS_TELEMETRY_INTERNAL_MODULE())
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_25MW_CH1_8_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_500MW_CH1_8_TELEM_OFF);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_500MW_CH9_16_TELEM_OFF);
|
||||
default_selection = 2;
|
||||
}
|
||||
else {
|
||||
if (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE))
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF);
|
||||
if (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE))
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF);
|
||||
default_selection = g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off + (g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 << 1);
|
||||
}
|
||||
POPUP_MENU_SELECT_ITEM(default_selection);
|
||||
POPUP_MENU_START(onBindMenu);
|
||||
continue;
|
||||
}
|
||||
if (moduleFlag[INTERNAL_MODULE] == MODULE_BIND) {
|
||||
if (moduleFlag[moduleIdx] == MODULE_BIND) {
|
||||
newFlag = MODULE_BIND;
|
||||
}
|
||||
else {
|
||||
if (!popupMenuNoItems) {
|
||||
s_editMode=0; // this is when popup is exited before a choice is made
|
||||
s_editMode = 0; // this is when popup is exited before a choice is made
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1027,7 +1069,6 @@ void menuModelSetup(event_t event)
|
||||
newFlag = MODULE_RANGECHECK;
|
||||
}
|
||||
#endif
|
||||
|
||||
moduleFlag[moduleIdx] = newFlag;
|
||||
|
||||
#if defined(MULTIMODULE)
|
||||
@@ -1059,40 +1100,40 @@ void menuModelSetup(event_t event)
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE: {
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
ModuleData &moduleData = g_model.moduleData[moduleIdx];
|
||||
if (IS_MODULE_PXX(moduleIdx)) {
|
||||
lcdDrawTextAlignedLeft(y, STR_FAILSAFE);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VFAILSAFE, moduleData.failsafeMode, menuHorizontalPosition == 0 ? attr : 0);
|
||||
if (moduleData.failsafeMode == FAILSAFE_CUSTOM)
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN + MODEL_SETUP_SET_FAILSAFE_OFS, y, STR_SET, menuHorizontalPosition == 1 ? attr : 0);
|
||||
if (attr) {
|
||||
if (moduleData.failsafeMode != FAILSAFE_CUSTOM)
|
||||
menuHorizontalPosition = 0;
|
||||
if (menuHorizontalPosition == 0) {
|
||||
if (editMode > 0 || p1valdiff) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, moduleData.failsafeMode, FAILSAFE_LAST);
|
||||
if (checkIncDec_Ret) SEND_FAILSAFE_NOW(moduleIdx);
|
||||
}
|
||||
} else if (menuHorizontalPosition == 1) {
|
||||
s_editMode = 0;
|
||||
if (moduleData.failsafeMode == FAILSAFE_CUSTOM && event == EVT_KEY_FIRST(KEY_ENTER)) {
|
||||
g_moduleIdx = moduleIdx;
|
||||
pushMenu(menuModelFailsafe);
|
||||
}
|
||||
} else {
|
||||
lcdDrawSolidFilledRect(MODEL_SETUP_2ND_COLUMN, y, LCD_W - MODEL_SETUP_2ND_COLUMN, 8);
|
||||
lcdDrawTextAlignedLeft(y, STR_FAILSAFE);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VFAILSAFE, moduleData.failsafeMode, menuHorizontalPosition == 0 ? attr : 0);
|
||||
if (moduleData.failsafeMode == FAILSAFE_CUSTOM)
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN + MODEL_SETUP_SET_FAILSAFE_OFS, y, STR_SET, menuHorizontalPosition == 1 ? attr : 0);
|
||||
if (attr) {
|
||||
if (moduleData.failsafeMode != FAILSAFE_CUSTOM)
|
||||
menuHorizontalPosition = 0;
|
||||
if (menuHorizontalPosition == 0) {
|
||||
if (editMode > 0 || p1valdiff) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, moduleData.failsafeMode, FAILSAFE_LAST);
|
||||
if (checkIncDec_Ret) SEND_FAILSAFE_NOW(moduleIdx);
|
||||
}
|
||||
} else if (menuHorizontalPosition == 1) {
|
||||
s_editMode = 0;
|
||||
if (moduleData.failsafeMode == FAILSAFE_CUSTOM && event == EVT_KEY_FIRST(KEY_ENTER)) {
|
||||
g_moduleIdx = moduleIdx;
|
||||
pushMenu(menuModelFailsafe);
|
||||
}
|
||||
} else {
|
||||
lcdDrawSolidFilledRect(MODEL_SETUP_2ND_COLUMN, y, LCD_W - MODEL_SETUP_2ND_COLUMN, 8);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_OPTIONS: {
|
||||
|
||||
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);
|
||||
const mm_protocol_definition * pdef = getMultiProtocolDefinition(multi_proto);
|
||||
if (pdef->optionsstr)
|
||||
lcdDrawTextAlignedLeft(y, pdef->optionsstr);
|
||||
|
||||
@@ -1103,21 +1144,33 @@ void menuModelSetup(event_t event)
|
||||
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) {
|
||||
}
|
||||
else if (multi_proto == MM_RF_PROTO_OLRS) {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -1, 7);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (IS_MODULE_R9M(moduleIdx)) {
|
||||
if (IS_TELEMETRY_INTERNAL_MODULE) {
|
||||
lcdDrawTextAlignedLeft(y, STR_SPORT_OUT);
|
||||
if (IS_MODULE_R9M_FCC(moduleIdx)) {
|
||||
if (IS_TELEMETRY_INTERNAL_MODULE()) {
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_TELEMETRY);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_DISABLE_INTERNAL);
|
||||
}
|
||||
else {
|
||||
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);
|
||||
g_model.moduleData[moduleIdx].pxx.sport_out = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].pxx.sport_out, MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_TELEMETRY, attr, event);
|
||||
}
|
||||
}
|
||||
else if (IS_MODULE_R9M_LBT(moduleIdx)) {
|
||||
if (IS_TELEMETRY_INTERNAL_MODULE()) {
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_TELEMETRY);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_DISABLE_INTERNAL);
|
||||
}
|
||||
else {
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_TELEMETRY);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BINDING_OPTION);
|
||||
}
|
||||
}
|
||||
else if (IS_MODULE_SBUS(moduleIdx)) {
|
||||
@@ -1126,44 +1179,51 @@ void menuModelSetup(event_t event)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_POWER: {
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_POWER:
|
||||
{
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
if (IS_MODULE_R9M_FCC(moduleIdx)) {
|
||||
// Power selection is only available on R9M FCC
|
||||
lcdDrawTextAlignedLeft(y, TR_MULTI_RFPOWER);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_FCC_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr);
|
||||
if (attr)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].pxx.power, 0, R9M_FCC_POWER_MAX);
|
||||
}
|
||||
#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);
|
||||
}
|
||||
else 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;
|
||||
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_STATUS: {
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_STATUS);
|
||||
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;
|
||||
|
||||
char statusText[64];
|
||||
multiModuleStatus.getStatusString(statusText);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, statusText);
|
||||
break;
|
||||
}
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_SYNCSTATUS: {
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_SYNC);
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_STATUS: {
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_STATUS);
|
||||
|
||||
char statusText[64];
|
||||
multiSyncStatus.getRefreshString(statusText);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, statusText);
|
||||
break;
|
||||
}
|
||||
char statusText[64];
|
||||
multiModuleStatus.getStatusString(statusText);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, statusText);
|
||||
break;
|
||||
}
|
||||
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_SYNCSTATUS: {
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_SYNC);
|
||||
|
||||
char statusText[64];
|
||||
multiSyncStatus.getRefreshString(statusText);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, statusText);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
@@ -92,6 +92,8 @@ void showAlertBox(const pm_char * title, const pm_char * text, const char * acti
|
||||
lcdRefresh();
|
||||
lcdSetContrast();
|
||||
clearKeyEvents();
|
||||
backlightOn();
|
||||
checkBacklight();
|
||||
}
|
||||
|
||||
void runPopupWarning(event_t event)
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Copyright (C) OpenTX
|
||||
*
|
||||
* Based on code named
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* th9x - http://code.google.com/p/th9x
|
||||
* er9x - http://code.google.com/p/er9x
|
||||
* gruvin9x - http://code.google.com/p/gruvin9x
|
||||
*
|
||||
@@ -51,16 +51,23 @@ void menuRadioDiagKeys(event_t event)
|
||||
|
||||
if (i < 6) {
|
||||
y = MENU_HEADER_HEIGHT + FH + FH*i;
|
||||
#if defined(PCBX7)
|
||||
if (i > 1) {
|
||||
lcdDrawTextAtIndex(0, y, STR_VKEYS, (5-i), 0);
|
||||
displayKeyState(5*FW+4, y, KEY_MENU+(5-i));
|
||||
}
|
||||
#else
|
||||
lcdDrawTextAtIndex(0, y, STR_VKEYS, (5-i), 0);
|
||||
displayKeyState(5*FW+2, y, KEY_MENU+(5-i));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
if (i < NUM_SWITCHES) {
|
||||
if (SWITCH_EXISTS(i)) {
|
||||
getvalue_t val = getValue(MIXSRC_FIRST_SWITCH+i);
|
||||
getvalue_t sw = ((val < 0) ? 3*i+1 : ((val == 0) ? 3*i+2 : 3*i+3));
|
||||
drawSwitch(8*FW, y, sw, 0);
|
||||
drawSwitch(8*FW+4, y, sw, 0);
|
||||
}
|
||||
}
|
||||
#else
|
||||
@@ -74,12 +81,22 @@ void menuRadioDiagKeys(event_t event)
|
||||
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
for (uint8_t i=0; i<DIM(rotencValue); i++) {
|
||||
|
||||
#if defined(PCBX7)
|
||||
coord_t y = MENU_HEADER_HEIGHT + FH;
|
||||
coord_t x = 6*FW+3;
|
||||
lcdDrawTextAtIndex(0, MENU_HEADER_HEIGHT + FH , STR_VRENCODERS, i, 0);
|
||||
#else
|
||||
coord_t y = MENU_HEADER_HEIGHT /* ??? + 1 ??? */ + i*FH;
|
||||
coord_t x = 19*FW;
|
||||
lcdDrawTextAtIndex(14*FW, y, STR_VRENCODERS, i, 0);
|
||||
#endif
|
||||
#if defined(ROTARY_ENCODERS)
|
||||
lcdDrawNumber(18*FW, y, rotencValue[i], LEFT|(keyState(BTN_REa+i) ? INVERS : 0));
|
||||
lcdDrawNumber(x, y, rotencValue[i], LEFT|(keyState(BTN_REa+i) ? INVERS : 0));
|
||||
#elif defined(PCBX7)
|
||||
lcdDrawNumber(x, y, rotencValue[i], RIGHT);
|
||||
#else
|
||||
lcdDrawNumber(18*FW, y, rotencValue[i], LEFT);
|
||||
lcdDrawNumber(x, y, rotencValue[i], LEFT);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -103,32 +103,54 @@ enum MenuModelSetupItems {
|
||||
#define MODEL_SETUP_RANGE_OFS 7*FW
|
||||
#define MODEL_SETUP_SET_FAILSAFE_OFS 10*FW-2
|
||||
|
||||
#if defined(BINDING_OPTIONS)
|
||||
#define CURRENT_MODULE_EDITED(k) (k>=ITEM_MODEL_TRAINER_LABEL ? TRAINER_MODULE : (k>=ITEM_MODEL_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE))
|
||||
|
||||
void onBindMenu(const char * result)
|
||||
{
|
||||
if (result == STR_BINDING_1_8_TELEM_ON) {
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = false;
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition);
|
||||
|
||||
if (result == STR_BINDING_25MW_CH1_8_TELEM_OFF) {
|
||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_25;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_25MW_CH1_8_TELEM_ON) {
|
||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_25;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_500MW_CH1_8_TELEM_OFF) {
|
||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_500;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_500MW_CH9_16_TELEM_OFF) {
|
||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_500;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true;
|
||||
}
|
||||
else if (result == STR_BINDING_1_8_TELEM_ON) {
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_1_8_TELEM_OFF) {
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = false;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_9_16_TELEM_ON) {
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true;
|
||||
}
|
||||
else if (result == STR_BINDING_9_16_TELEM_OFF) {
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
|
||||
moduleFlag[INTERNAL_MODULE] = MODULE_BIND;
|
||||
moduleFlag[moduleIdx] = MODULE_BIND;
|
||||
}
|
||||
#endif
|
||||
|
||||
void copySelection(char * dst, const char * src, uint8_t size)
|
||||
{
|
||||
@@ -219,8 +241,6 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event)
|
||||
}
|
||||
}
|
||||
|
||||
#define CURRENT_MODULE_EDITED(k) (k>=ITEM_MODEL_TRAINER_LABEL ? TRAINER_MODULE : (k>=ITEM_MODEL_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE))
|
||||
|
||||
int getSwitchWarningsCount()
|
||||
{
|
||||
int count = 0;
|
||||
@@ -253,7 +273,7 @@ int getSwitchWarningsCount()
|
||||
|
||||
#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
|
||||
|
||||
#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
|
||||
#define EXTERNAL_MODULE_MODE_ROWS (IS_MODULE_PXX(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
|
||||
#define TIMERS_ROWS TIMER_ROWS(0)
|
||||
@@ -306,8 +326,11 @@ void menuModelSetup(event_t event)
|
||||
EXTERNAL_MODULE_MODE_ROWS,
|
||||
MULTIMODULE_STATUS_ROWS
|
||||
EXTERNAL_MODULE_CHANNELS_ROWS,
|
||||
((IS_MODULE_XJT(EXTERNAL_MODULE) && !HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[EXTERNAL_MODULE].rfProtocol))|| IS_MODULE_SBUS(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,
|
||||
FAILSAFE_ROWS(EXTERNAL_MODULE), EXTERNAL_MODULE_OPTION_ROW, MULTIMODULE_MODULE_ROWS EXTERNAL_MODULE_POWER_ROW,
|
||||
((IS_MODULE_XJT(EXTERNAL_MODULE) && !HAS_RF_PROTOCOL_FAILSAFE(g_model.moduleData[EXTERNAL_MODULE].rfProtocol)) || IS_MODULE_SBUS(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,
|
||||
FAILSAFE_ROWS(EXTERNAL_MODULE),
|
||||
EXTERNAL_MODULE_OPTION_ROW,
|
||||
MULTIMODULE_MODULE_ROWS
|
||||
EXTERNAL_MODULE_POWER_ROW,
|
||||
LABEL(Trainer), 0, TRAINER_LINE1_ROWS, TRAINER_LINE2_ROWS});
|
||||
#endif
|
||||
MENU_CHECK(STR_MENUSETUP, menuTabModel, MENU_MODEL_SETUP, ITEM_MODEL_SETUP_MAX);
|
||||
@@ -741,6 +764,8 @@ void menuModelSetup(event_t event)
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
||||
else if (IS_MODULE_DSM2(EXTERNAL_MODULE))
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, menuHorizontalPosition==1 ? attr : 0);
|
||||
else if (IS_MODULE_R9M(EXTERNAL_MODULE))
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_R9M_MODES, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
|
||||
#if defined(MULTIMODULE)
|
||||
else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) {
|
||||
uint8_t multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||
@@ -775,6 +800,8 @@ void menuModelSetup(event_t event)
|
||||
case 1:
|
||||
if (IS_MODULE_DSM2(EXTERNAL_MODULE))
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
||||
else if (IS_MODULE_R9M(EXTERNAL_MODULE))
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, MODULE_SUBTYPE_R9M_FCC, MODULE_SUBTYPE_R9M_LBT);
|
||||
#if defined(MULTIMODULE)
|
||||
else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) {
|
||||
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||
@@ -787,7 +814,8 @@ void menuModelSetup(event_t event)
|
||||
// Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 0;
|
||||
}
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = 0;
|
||||
@@ -807,8 +835,9 @@ void menuModelSetup(event_t event)
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].multi.customProto) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].setMultiProtocol(checkIncDec(event, g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false), 0, 63, EE_MODEL));
|
||||
break;
|
||||
} else {
|
||||
const mm_protocol_definition* pdef = getMultiProtocolDefinition(g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false));
|
||||
}
|
||||
else {
|
||||
const mm_protocol_definition * pdef = getMultiProtocolDefinition(g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false));
|
||||
if (pdef->maxSubtype > 0)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, 0, pdef->maxSubtype);
|
||||
}
|
||||
@@ -967,11 +996,11 @@ void menuModelSetup(event_t event)
|
||||
lcdDrawTextAlignedLeft(y, STR_RECEIVER_NUM);
|
||||
}
|
||||
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 (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) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, g_model.header.modelId[moduleIdx], MAX_RX_NUM(moduleIdx));
|
||||
|
||||
if (checkIncDec_Ret) {
|
||||
modelHeaders[g_eeGeneral.currModel].modelId[moduleIdx] = g_model.header.modelId[moduleIdx];
|
||||
}
|
||||
@@ -986,29 +1015,42 @@ void menuModelSetup(event_t event)
|
||||
#if defined(MULTIMODULE)
|
||||
if (multiBindStatus == MULTI_BIND_FINISHED) {
|
||||
multiBindStatus = MULTI_NORMAL_OPERATION;
|
||||
s_editMode=0;
|
||||
s_editMode = 0;
|
||||
}
|
||||
#endif
|
||||
#if defined(BINDING_OPTIONS)
|
||||
if (attr && l_posHorz>0) {
|
||||
if(s_editMode>0) {
|
||||
if (s_editMode>0) {
|
||||
if (l_posHorz == 1) {
|
||||
if (IS_MODULE_XJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol== RF_PROTO_X16 && s_current_protocol[INTERNAL_MODULE] == PROTO_PXX) {
|
||||
if(event==EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF);
|
||||
POPUP_MENU_SELECT_ITEM(g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off + (g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 << 1));
|
||||
if (IS_MODULE_R9M(moduleIdx) || (IS_MODULE_XJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol== RF_PROTO_X16)) {
|
||||
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
uint8_t default_selection;
|
||||
if (IS_MODULE_R9M_LBT(moduleIdx)) {
|
||||
if (!IS_TELEMETRY_INTERNAL_MODULE())
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_25MW_CH1_8_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_25MW_CH1_8_TELEM_OFF);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_500MW_CH1_8_TELEM_OFF);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_500MW_CH9_16_TELEM_OFF);
|
||||
default_selection = 1;
|
||||
}
|
||||
else {
|
||||
if (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE))
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF);
|
||||
if (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE))
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF);
|
||||
default_selection = g_model.moduleData[moduleIdx].pxx.receiver_telem_off + (g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 << 1);
|
||||
}
|
||||
POPUP_MENU_SELECT_ITEM(default_selection);
|
||||
POPUP_MENU_START(onBindMenu);
|
||||
continue;
|
||||
}
|
||||
if (moduleFlag[INTERNAL_MODULE] == MODULE_BIND) {
|
||||
if (moduleFlag[moduleIdx] == MODULE_BIND) {
|
||||
newFlag = MODULE_BIND;
|
||||
}
|
||||
else {
|
||||
if (!popupMenuNoItems) {
|
||||
s_editMode=0; // this is when popup is exited before a choice is made
|
||||
s_editMode = 0; // this is when popup is exited before a choice is made
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1019,13 +1061,6 @@ void menuModelSetup(event_t event)
|
||||
else if (l_posHorz == 2) {
|
||||
newFlag = MODULE_RANGECHECK;
|
||||
}
|
||||
#else
|
||||
if (attr && l_posHorz>0 && s_editMode>0) {
|
||||
if (l_posHorz == 1)
|
||||
newFlag = MODULE_BIND;
|
||||
else if (l_posHorz == 2) {
|
||||
newFlag = MODULE_RANGECHECK;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
moduleFlag[moduleIdx] = newFlag;
|
||||
@@ -1042,37 +1077,37 @@ void menuModelSetup(event_t event)
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE:
|
||||
{
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
if (IS_MODULE_PXX(moduleIdx) || IS_MODULE_MULTIMODULE(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);
|
||||
if (moduleData.failsafeMode == FAILSAFE_CUSTOM) lcdDrawText(MODEL_SETUP_2ND_COLUMN + MODEL_SETUP_SET_FAILSAFE_OFS, y, STR_SET, menuHorizontalPosition==1 ? attr : 0);
|
||||
if (attr) {
|
||||
if (moduleData.failsafeMode != FAILSAFE_CUSTOM) {
|
||||
menuHorizontalPosition = 0;
|
||||
ModuleData & moduleData = g_model.moduleData[moduleIdx];
|
||||
lcdDrawTextAlignedLeft(y, STR_FAILSAFE);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VFAILSAFE, moduleData.failsafeMode, menuHorizontalPosition==0 ? attr : 0);
|
||||
if (moduleData.failsafeMode == FAILSAFE_CUSTOM) lcdDrawText(MODEL_SETUP_2ND_COLUMN + MODEL_SETUP_SET_FAILSAFE_OFS, y, STR_SET, menuHorizontalPosition==1 ? attr : 0);
|
||||
if (attr) {
|
||||
if (moduleData.failsafeMode != FAILSAFE_CUSTOM) {
|
||||
menuHorizontalPosition = 0;
|
||||
}
|
||||
if (menuHorizontalPosition == 0) {
|
||||
if (s_editMode > 0) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, moduleData.failsafeMode, FAILSAFE_LAST);
|
||||
if (checkIncDec_Ret) SEND_FAILSAFE_NOW(moduleIdx);
|
||||
}
|
||||
if (menuHorizontalPosition == 0) {
|
||||
if (s_editMode > 0) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, moduleData.failsafeMode, FAILSAFE_LAST);
|
||||
if (checkIncDec_Ret) SEND_FAILSAFE_NOW(moduleIdx);
|
||||
}
|
||||
}
|
||||
else if (menuHorizontalPosition == 1) {
|
||||
s_editMode = 0;
|
||||
if (moduleData.failsafeMode==FAILSAFE_CUSTOM && event==EVT_KEY_FIRST(KEY_ENTER)) {
|
||||
g_moduleIdx = moduleIdx;
|
||||
pushMenu(menuModelFailsafe);
|
||||
}
|
||||
}
|
||||
else {
|
||||
lcdDrawFilledRect(MODEL_SETUP_2ND_COLUMN, y, LCD_W - MODEL_SETUP_2ND_COLUMN - MENUS_SCROLLBAR_WIDTH, 8);
|
||||
}
|
||||
else if (menuHorizontalPosition == 1) {
|
||||
s_editMode = 0;
|
||||
if (moduleData.failsafeMode==FAILSAFE_CUSTOM && event==EVT_KEY_FIRST(KEY_ENTER)) {
|
||||
g_moduleIdx = moduleIdx;
|
||||
pushMenu(menuModelFailsafe);
|
||||
}
|
||||
}
|
||||
else {
|
||||
lcdDrawFilledRect(MODEL_SETUP_2ND_COLUMN, y, LCD_W - MODEL_SETUP_2ND_COLUMN - MENUS_SCROLLBAR_WIDTH, 8);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_OPTIONS: {
|
||||
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_OPTIONS:
|
||||
{
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
#if defined(MULTIMODULE)
|
||||
|
||||
@@ -1101,13 +1136,23 @@ void menuModelSetup(event_t event)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (IS_MODULE_R9M(moduleIdx)) {
|
||||
if (IS_TELEMETRY_INTERNAL_MODULE) {
|
||||
lcdDrawTextAlignedLeft(y, STR_SPORT_OUT);
|
||||
if (IS_MODULE_R9M_FCC(moduleIdx)) {
|
||||
if (IS_TELEMETRY_INTERNAL_MODULE()) {
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_TELEMETRY);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_DISABLE_INTERNAL);
|
||||
}
|
||||
else {
|
||||
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);
|
||||
g_model.moduleData[moduleIdx].pxx.sport_out = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].pxx.sport_out, MODEL_SETUP_2ND_COLUMN, y, STR_MODULE_TELEMETRY, attr, event);
|
||||
}
|
||||
}
|
||||
else if (IS_MODULE_R9M_LBT(moduleIdx)) {
|
||||
if (IS_TELEMETRY_INTERNAL_MODULE()) {
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_TELEMETRY);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_DISABLE_INTERNAL);
|
||||
}
|
||||
else {
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_TELEMETRY);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BINDING_OPTION);
|
||||
}
|
||||
}
|
||||
else if (IS_MODULE_SBUS(moduleIdx)) {
|
||||
@@ -1116,18 +1161,22 @@ void menuModelSetup(event_t event)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_POWER: {
|
||||
|
||||
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)) {
|
||||
if (IS_MODULE_R9M_FCC(moduleIdx)) {
|
||||
// Power selection is only available on R9M FCC
|
||||
lcdDrawTextAlignedLeft(y, TR_MULTI_RFPOWER);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, getR9MPowerString(g_model.moduleData[moduleIdx].pxx.power), attr);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_FCC_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr);
|
||||
if (attr)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].pxx.power, 0, 3);
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].pxx.power, 0, R9M_FCC_POWER_MAX);
|
||||
}
|
||||
#if defined (MULTIMODULE)
|
||||
else 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
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1138,7 +1187,8 @@ 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_STATUS: {
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_STATUS:
|
||||
{
|
||||
lcdDrawTextAlignedLeft(y, STR_MODULE_STATUS);
|
||||
|
||||
char statusText[64];
|
||||
|
||||
@@ -83,6 +83,8 @@ void showAlertBox(const char * title, const char * text, const char * action, ui
|
||||
lcdRefresh();
|
||||
lcdSetContrast();
|
||||
clearKeyEvents();
|
||||
backlightOn();
|
||||
checkBacklight();
|
||||
}
|
||||
|
||||
void runPopupWarning(event_t event)
|
||||
|
||||
@@ -40,6 +40,10 @@ void menuChannelsView(event_t event)
|
||||
break;
|
||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||
case EVT_KEY_FIRST(KEY_LEFT):
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_ROTARY_LEFT:
|
||||
case EVT_ROTARY_RIGHT:
|
||||
#endif
|
||||
secondPage = !secondPage;
|
||||
break;
|
||||
case EVT_KEY_FIRST(KEY_ENTER):
|
||||
|
||||
@@ -433,6 +433,8 @@ int getSwitchCount()
|
||||
|
||||
void menuMainView(event_t event)
|
||||
{
|
||||
static bool secondPage = false;
|
||||
|
||||
STICK_SCROLL_DISABLE();
|
||||
|
||||
switch(event) {
|
||||
@@ -491,6 +493,15 @@ void menuMainView(event_t event)
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
|
||||
case EVT_KEY_FIRST(KEY_RIGHT):
|
||||
case EVT_KEY_FIRST(KEY_LEFT):
|
||||
#if defined(ROTARY_ENCODER_NAVIGATION)
|
||||
case EVT_ROTARY_LEFT:
|
||||
case EVT_ROTARY_RIGHT:
|
||||
#endif
|
||||
secondPage = !secondPage;
|
||||
break;
|
||||
}
|
||||
|
||||
// Flight Mode Name
|
||||
@@ -548,11 +559,17 @@ void menuMainView(event_t event)
|
||||
}
|
||||
else {
|
||||
// Logical Switches
|
||||
lcdDrawText(TRIM_RH_X - TRIM_LEN/2 + 5, 6*FH-1, "LS 1-32");
|
||||
for (int sw=0; sw<32; ++sw) {
|
||||
div_t qr = div(sw, 10);
|
||||
uint8_t y = 13 + 11 * qr.quot;
|
||||
uint8_t x = TRIM_RH_X - TRIM_LEN + qr.rem*5 + (qr.rem >= 5 ? 3 : 0);
|
||||
int sw = (secondPage && MAX_LOGICAL_SWITCHES > 32 ? 32 : 0);
|
||||
const int end = sw + 32;
|
||||
uint8_t y = 6*FH-1;
|
||||
lcdDrawText(TRIM_RH_X - TRIM_LEN/2 + 1, y, "LS");
|
||||
lcdDrawNumber(lcdLastRightPos + 1, y, sw + 1, LEFT|LEADING0, 2);
|
||||
lcdDrawText(lcdLastRightPos, y, "-");
|
||||
lcdDrawNumber(lcdLastRightPos, y, end, LEFT);
|
||||
for ( ; sw < end; ++sw) {
|
||||
const div_t qr = div(sw + 32 - end, 10);
|
||||
const uint8_t x = TRIM_RH_X - TRIM_LEN + qr.rem*5 + (qr.rem >= 5 ? 3 : 0);
|
||||
y = 13 + 11 * qr.quot;
|
||||
LogicalSwitchData * cs = lswAddress(sw);
|
||||
if (cs->func == LS_FUNC_NONE) {
|
||||
lcdDrawSolidHorizontalLine(x, y+6, 4);
|
||||
|
||||
@@ -96,32 +96,54 @@ enum MenuModelSetupItems {
|
||||
#define MODEL_SETUP_SET_FAILSAFE_OFS 100
|
||||
#define MODEL_SETUP_SLIDPOT_SPACING 45
|
||||
|
||||
#if defined(BINDING_OPTIONS)
|
||||
#define CURRENT_MODULE_EDITED(k) (k>=ITEM_MODEL_TRAINER_LABEL ? TRAINER_MODULE : (k>=ITEM_MODEL_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE))
|
||||
|
||||
void onBindMenu(const char * result)
|
||||
{
|
||||
if (result == STR_BINDING_1_8_TELEM_ON) {
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = false;
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(menuVerticalPosition);
|
||||
|
||||
if (result == STR_BINDING_25MW_CH1_8_TELEM_OFF) {
|
||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_25;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_25MW_CH1_8_TELEM_ON) {
|
||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_25;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_500MW_CH1_8_TELEM_OFF) {
|
||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_500;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_500MW_CH9_16_TELEM_OFF) {
|
||||
g_model.moduleData[moduleIdx].pxx.power = R9M_LBT_POWER_500;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true;
|
||||
}
|
||||
else if (result == STR_BINDING_1_8_TELEM_ON) {
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_1_8_TELEM_OFF) {
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = false;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = false;
|
||||
}
|
||||
else if (result == STR_BINDING_9_16_TELEM_ON) {
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = false;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true;
|
||||
}
|
||||
else if (result == STR_BINDING_9_16_TELEM_OFF) {
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_telem_off = true;
|
||||
g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 = true;
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
|
||||
moduleFlag[INTERNAL_MODULE] = MODULE_BIND;
|
||||
moduleFlag[moduleIdx] = MODULE_BIND;
|
||||
}
|
||||
#endif
|
||||
|
||||
void onModelSetupBitmapMenu(const char * result)
|
||||
{
|
||||
@@ -197,8 +219,6 @@ void editTimerCountdown(int timerIdx, coord_t y, LcdFlags attr, event_t event)
|
||||
}
|
||||
}
|
||||
|
||||
#define CURRENT_MODULE_EDITED(k) (k>=ITEM_MODEL_TRAINER_LABEL ? TRAINER_MODULE : (k>=ITEM_MODEL_EXTERNAL_MODULE_LABEL ? EXTERNAL_MODULE : INTERNAL_MODULE))
|
||||
|
||||
int getSwitchWarningsCount()
|
||||
{
|
||||
int count = 0;
|
||||
@@ -219,7 +239,7 @@ int getSwitchWarningsCount()
|
||||
|
||||
#define TIMER_ROWS(x) NAVIGATION_LINE_BY_LINE|1, 0, 0, 0, g_model.timers[x].countdownBeep != COUNTDOWN_SILENT ? (uint8_t)1 : (uint8_t)0
|
||||
|
||||
#define 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
|
||||
#define EXTERNAL_MODULE_MODE_ROWS (IS_MODULE_PXX(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
|
||||
#define TIMERS_ROWS TIMER_ROWS(0)
|
||||
@@ -263,9 +283,15 @@ bool menuModelSetup(event_t event)
|
||||
EXTERNAL_MODULE_MODE_ROWS,
|
||||
MULTIMODULE_STATUS_ROWS
|
||||
EXTERNAL_MODULE_CHANNELS_ROWS,
|
||||
((IS_MODULE_XJT(EXTERNAL_MODULE) && !HAS_RF_PROTOCOL_MODELINDEX(g_model.moduleData[EXTERNAL_MODULE].rfProtocol)) || IS_MODULE_SBUS(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,
|
||||
FAILSAFE_ROWS(EXTERNAL_MODULE), EXTERNAL_MODULE_OPTION_ROW, MULTIMODULE_MODULE_ROWS EXTERNAL_MODULE_POWER_ROW,
|
||||
LABEL(Trainer), 0, TRAINER_LINE1_ROWS, TRAINER_LINE2_ROWS });
|
||||
((IS_MODULE_XJT(EXTERNAL_MODULE) && !HAS_RF_PROTOCOL_MODELINDEX(g_model.moduleData[EXTERNAL_MODULE].rfProtocol)) || IS_MODULE_SBUS(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,
|
||||
FAILSAFE_ROWS(EXTERNAL_MODULE),
|
||||
EXTERNAL_MODULE_OPTION_ROW,
|
||||
MULTIMODULE_MODULE_ROWS
|
||||
EXTERNAL_MODULE_POWER_ROW,
|
||||
LABEL(Trainer),
|
||||
0,
|
||||
TRAINER_LINE1_ROWS,
|
||||
TRAINER_LINE2_ROWS });
|
||||
|
||||
if (menuEvent) {
|
||||
moduleFlag[0] = 0;
|
||||
@@ -665,6 +691,8 @@ bool menuModelSetup(event_t event)
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_XJT_PROTOCOLS, 1+g_model.moduleData[EXTERNAL_MODULE].rfProtocol, (menuHorizontalPosition==1 ? attr : 0));
|
||||
else if (IS_MODULE_DSM2(EXTERNAL_MODULE))
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_DSM_PROTOCOLS, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, (menuHorizontalPosition==1 ? attr : 0));
|
||||
else if (IS_MODULE_R9M(EXTERNAL_MODULE))
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_R9M_MODES, g_model.moduleData[EXTERNAL_MODULE].subType, (menuHorizontalPosition==1 ? attr : 0));
|
||||
#if defined(MULTIMODULE)
|
||||
else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) {
|
||||
int multi_rfProto = g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||
@@ -672,9 +700,9 @@ bool menuModelSetup(event_t event)
|
||||
lcdDrawText(MODEL_SETUP_3RD_COLUMN, y, STR_MULTI_CUSTOM, menuHorizontalPosition == 1 ? attr : 0);
|
||||
lcdDrawNumber(MODEL_SETUP_4TH_COLUMN, y, multi_rfProto, menuHorizontalPosition==2 ? attr : 0, 2);
|
||||
lcdDrawNumber(MODEL_SETUP_4TH_COLUMN + MODEL_SETUP_BIND_OFS, y, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==3 ? attr : 0, 2);
|
||||
} else {
|
||||
const mm_protocol_definition *pdef = getMultiProtocolDefinition(multi_rfProto);
|
||||
|
||||
}
|
||||
else {
|
||||
const mm_protocol_definition * pdef = getMultiProtocolDefinition(multi_rfProto);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_3RD_COLUMN, y, STR_MULTI_PROTOCOLS, multi_rfProto, menuHorizontalPosition == 1 ? attr : 0);
|
||||
if (pdef->subTypeString != nullptr)
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_4TH_COLUMN, y, pdef->subTypeString, g_model.moduleData[EXTERNAL_MODULE].subType, menuHorizontalPosition==2 ? attr : 0);
|
||||
@@ -696,6 +724,8 @@ bool menuModelSetup(event_t event)
|
||||
case 1:
|
||||
if (IS_MODULE_DSM2(EXTERNAL_MODULE))
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].rfProtocol, DSM2_PROTO_LP45, DSM2_PROTO_DSMX);
|
||||
else if (IS_MODULE_R9M(EXTERNAL_MODULE))
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[EXTERNAL_MODULE].subType, MODULE_SUBTYPE_R9M_FCC, MODULE_SUBTYPE_R9M_LBT);
|
||||
#if defined(MULTIMODULE)
|
||||
else if (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE)) {
|
||||
int multiRfProto = g_model.moduleData[EXTERNAL_MODULE].multi.customProto == 1 ? MM_RF_PROTO_CUSTOM : g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(false);
|
||||
@@ -708,7 +738,8 @@ bool menuModelSetup(event_t event)
|
||||
// Sensible default for DSM2 (same as for ppm): 7ch@22ms + Autodetect settings enabled
|
||||
if (g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true) == MM_RF_PROTO_DSM2) {
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 1;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.autoBindMode = 0;
|
||||
}
|
||||
g_model.moduleData[EXTERNAL_MODULE].multi.optionValue = 0;
|
||||
@@ -876,39 +907,52 @@ bool menuModelSetup(event_t event)
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_RECEIVER_NUM);
|
||||
}
|
||||
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) {
|
||||
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));
|
||||
}
|
||||
drawButton(MODEL_SETUP_2ND_COLUMN+xOffsetBind, y, STR_MODULE_BIND, (moduleFlag[moduleIdx] == MODULE_BIND ? BUTTON_ON : BUTTON_OFF) | (l_posHorz==1 ? attr : 0));
|
||||
drawButton(MODEL_SETUP_2ND_COLUMN+MODEL_SETUP_RANGE_OFS+xOffsetBind, y, STR_MODULE_RANGE, (moduleFlag[moduleIdx] == MODULE_RANGECHECK ? BUTTON_ON : BUTTON_OFF) | (l_posHorz==2 ? attr : 0));
|
||||
uint8_t newFlag = 0;
|
||||
#if defined(MULTIMODULE)
|
||||
if (multiBindStatus == MULTI_BIND_FINISHED) {
|
||||
multiBindStatus = MULTI_NORMAL_OPERATION;
|
||||
s_editMode=0;
|
||||
s_editMode = 0;
|
||||
}
|
||||
#endif
|
||||
#if defined(BINDING_OPTIONS)
|
||||
if (attr && l_posHorz>0) {
|
||||
if(s_editMode>0) {
|
||||
if (s_editMode>0) {
|
||||
if (l_posHorz == 1) {
|
||||
if (IS_MODULE_XJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol== RF_PROTO_X16 && s_current_protocol[INTERNAL_MODULE] == PROTO_PXX) {
|
||||
if(event==EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF);
|
||||
POPUP_MENU_SELECT_ITEM(g_model.moduleData[INTERNAL_MODULE].pxx.receiver_telem_off + (g_model.moduleData[INTERNAL_MODULE].pxx.receiver_channel_9_16 << 1));
|
||||
if (IS_MODULE_R9M(moduleIdx) || (IS_MODULE_XJT(moduleIdx) && g_model.moduleData[moduleIdx].rfProtocol == RF_PROTO_X16)) {
|
||||
if (event == EVT_KEY_BREAK(KEY_ENTER)) {
|
||||
uint8_t default_selection;
|
||||
if (IS_MODULE_R9M_LBT(moduleIdx)) {
|
||||
if (!IS_TELEMETRY_INTERNAL_MODULE())
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_25MW_CH1_8_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_25MW_CH1_8_TELEM_OFF);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_500MW_CH1_8_TELEM_OFF);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_500MW_CH9_16_TELEM_OFF);
|
||||
default_selection = 2;
|
||||
}
|
||||
else {
|
||||
if (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE))
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_1_8_TELEM_OFF);
|
||||
if (!(IS_TELEMETRY_INTERNAL_MODULE() && moduleIdx == EXTERNAL_MODULE))
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_ON);
|
||||
POPUP_MENU_ADD_ITEM(STR_BINDING_9_16_TELEM_OFF);
|
||||
default_selection = g_model.moduleData[moduleIdx].pxx.receiver_telem_off + (g_model.moduleData[moduleIdx].pxx.receiver_channel_9_16 << 1);
|
||||
}
|
||||
POPUP_MENU_SELECT_ITEM(default_selection);
|
||||
POPUP_MENU_START(onBindMenu);
|
||||
continue;
|
||||
}
|
||||
if (moduleFlag[INTERNAL_MODULE] == MODULE_BIND) {
|
||||
if (moduleFlag[moduleIdx] == MODULE_BIND) {
|
||||
newFlag = MODULE_BIND;
|
||||
}
|
||||
else {
|
||||
if (!popupMenuNoItems) {
|
||||
s_editMode=0; // this is when popup is exited before a choice is made
|
||||
s_editMode = 0; // this is when popup is exited before a choice is made
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -919,13 +963,6 @@ bool menuModelSetup(event_t event)
|
||||
else if (l_posHorz == 2) {
|
||||
newFlag = MODULE_RANGECHECK;
|
||||
}
|
||||
#else
|
||||
if (attr && l_posHorz>0 && s_editMode>0) {
|
||||
if (l_posHorz == 1)
|
||||
newFlag = MODULE_BIND;
|
||||
else if (l_posHorz == 2) {
|
||||
newFlag = MODULE_RANGECHECK;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
moduleFlag[moduleIdx] = newFlag;
|
||||
@@ -942,37 +979,37 @@ bool menuModelSetup(event_t event)
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_FAILSAFE:
|
||||
{
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
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);
|
||||
if (moduleData.failsafeMode == FAILSAFE_CUSTOM) {
|
||||
drawButton(MODEL_SETUP_2ND_COLUMN + MODEL_SETUP_SET_FAILSAFE_OFS, y, STR_SET, menuHorizontalPosition==1 ? attr : 0);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_VFAILSAFE, moduleData.failsafeMode, menuHorizontalPosition==0 ? attr : 0);
|
||||
if (moduleData.failsafeMode == FAILSAFE_CUSTOM) {
|
||||
drawButton(MODEL_SETUP_2ND_COLUMN + MODEL_SETUP_SET_FAILSAFE_OFS, y, STR_SET, menuHorizontalPosition==1 ? attr : 0);
|
||||
}
|
||||
if (attr) {
|
||||
if (moduleData.failsafeMode != FAILSAFE_CUSTOM)
|
||||
menuHorizontalPosition = 0;
|
||||
if (menuHorizontalPosition==0) {
|
||||
if (s_editMode>0) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, moduleData.failsafeMode, FAILSAFE_LAST);
|
||||
if (checkIncDec_Ret) SEND_FAILSAFE_NOW(moduleIdx);
|
||||
}
|
||||
}
|
||||
if (attr) {
|
||||
if (moduleData.failsafeMode != FAILSAFE_CUSTOM)
|
||||
menuHorizontalPosition = 0;
|
||||
if (menuHorizontalPosition==0) {
|
||||
if (s_editMode>0) {
|
||||
CHECK_INCDEC_MODELVAR_ZERO(event, moduleData.failsafeMode, FAILSAFE_LAST);
|
||||
if (checkIncDec_Ret) SEND_FAILSAFE_NOW(moduleIdx);
|
||||
}
|
||||
}
|
||||
else if (menuHorizontalPosition==1) {
|
||||
s_editMode = 0;
|
||||
if (moduleData.failsafeMode==FAILSAFE_CUSTOM && event==EVT_KEY_FIRST(KEY_ENTER)) {
|
||||
g_moduleIdx = moduleIdx;
|
||||
pushMenu(menuModelFailsafe);
|
||||
}
|
||||
}
|
||||
else {
|
||||
lcdDrawSolidFilledRect(MODEL_SETUP_2ND_COLUMN, y, LCD_W - MODEL_SETUP_2ND_COLUMN - 2, 8, TEXT_COLOR);
|
||||
else if (menuHorizontalPosition==1) {
|
||||
s_editMode = 0;
|
||||
if (moduleData.failsafeMode==FAILSAFE_CUSTOM && event==EVT_KEY_FIRST(KEY_ENTER)) {
|
||||
g_moduleIdx = moduleIdx;
|
||||
pushMenu(menuModelFailsafe);
|
||||
}
|
||||
}
|
||||
else {
|
||||
lcdDrawSolidFilledRect(MODEL_SETUP_2ND_COLUMN, y, LCD_W - MODEL_SETUP_2ND_COLUMN - 2, 8, TEXT_COLOR);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_OPTIONS: {
|
||||
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_OPTIONS:
|
||||
{
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
#if defined(MULTIMODULE)
|
||||
if (IS_MODULE_MULTIMODULE(moduleIdx)) {
|
||||
@@ -990,45 +1027,62 @@ bool menuModelSetup(event_t event)
|
||||
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) {
|
||||
}
|
||||
else if (multi_proto == MM_RF_PROTO_OLRS) {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -1, 7);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].multi.optionValue, -128, 127);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (IS_MODULE_R9M(moduleIdx)) {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_SPORT_OUT);
|
||||
if (IS_TELEMETRY_INTERNAL_MODULE) {
|
||||
if (IS_MODULE_R9M_FCC(moduleIdx)) {
|
||||
if (IS_TELEMETRY_INTERNAL_MODULE()) {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MODULE_TELEMETRY);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_DISABLE_INTERNAL);
|
||||
}
|
||||
else {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MODULE_TELEMETRY);
|
||||
g_model.moduleData[moduleIdx].pxx.sport_out = editCheckBox(g_model.moduleData[EXTERNAL_MODULE].pxx.sport_out, MODEL_SETUP_2ND_COLUMN, y, attr, event);
|
||||
}
|
||||
}
|
||||
else if (IS_MODULE_R9M_LBT(moduleIdx)) {
|
||||
if (IS_TELEMETRY_INTERNAL_MODULE()) {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MODULE_TELEMETRY);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_DISABLE_INTERNAL);
|
||||
}
|
||||
else {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT,y, STR_MODULE_TELEMETRY);
|
||||
lcdDrawText(MODEL_SETUP_2ND_COLUMN, y, STR_BINDING_OPTION);
|
||||
}
|
||||
}
|
||||
else if (IS_MODULE_SBUS(moduleIdx)) {
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_WARN_BATTVOLTAGE);
|
||||
drawValueWithUnit(MODEL_SETUP_4TH_COLUMN, y, getBatteryVoltage(), UNIT_VOLTS, attr|PREC2|LEFT);
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ITEM_MODEL_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);
|
||||
}
|
||||
|
||||
case ITEM_MODEL_EXTERNAL_MODULE_POWER:
|
||||
{
|
||||
uint8_t moduleIdx = CURRENT_MODULE_EDITED(k);
|
||||
if (IS_MODULE_R9M_FCC(moduleIdx)) {
|
||||
// Power selection is only available on R9M FCC
|
||||
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_MULTI_RFPOWER);
|
||||
lcdDrawTextAtIndex(MODEL_SETUP_2ND_COLUMN, y, STR_R9M_FCC_POWER_VALUES, g_model.moduleData[moduleIdx].pxx.power, LEFT | attr);
|
||||
if (attr)
|
||||
CHECK_INCDEC_MODELVAR(event, g_model.moduleData[moduleIdx].pxx.power, 0, R9M_FCC_POWER_MAX);
|
||||
}
|
||||
#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);
|
||||
}
|
||||
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)
|
||||
|
||||
@@ -65,6 +65,8 @@ void showAlertBox(const char * title, const char * text, const char * action, ui
|
||||
lcdRefresh();
|
||||
lcdSetContrast();
|
||||
clearKeyEvents();
|
||||
backlightOn();
|
||||
checkBacklight();
|
||||
}
|
||||
|
||||
void showMessageBox(const char * title)
|
||||
|
||||
@@ -68,7 +68,6 @@ bool isCurrentSensor(int sensor);
|
||||
bool isTelemetryFieldAvailable(int index);
|
||||
bool isTelemetryFieldComparisonAvailable(int index);
|
||||
bool isSensorAvailable(int sensor);
|
||||
const char* getR9MPowerString(int power);
|
||||
|
||||
bool modelHasNotes();
|
||||
#endif
|
||||
@@ -128,7 +127,7 @@ void lcdDrawMMM(coord_t x, coord_t y, LcdFlags flags=0);
|
||||
#define MULTIMODULE_HAS_SUBTYPE(x) (getMultiProtocolDefinition(x)->maxSubtype > 0)
|
||||
#define MULTIMODULE_HASOPTIONS(x) (getMultiProtocolDefinition(x)->optionsstr != nullptr)
|
||||
#define MULTI_MAX_RX_NUM(x) (g_model.moduleData[x].getMultiProtocol(true) == MM_RF_PROTO_OLRS ? 4 : 15)
|
||||
#define MULTIMODULE_HASFAILSAFE(x) (IS_MODULE_MULTIMODULE(x) && getMultiProtocolDefinition(g_model.moduleData[x].getMultiProtocol(true))->failsafe)
|
||||
#define MULTIMODULE_HASFAILSAFE(x) (IS_MODULE_MULTIMODULE(x) && multiModuleStatus.isValid() && multiModuleStatus.supportsFailsafe())
|
||||
#define MULTIMODULE_OPTIONS_ROW (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) && MULTIMODULE_HASOPTIONS(g_model.moduleData[EXTERNAL_MODULE].getMultiProtocol(true))) ? (uint8_t) 0: HIDDEN_ROW
|
||||
|
||||
// When using packed, the pointer in here end up not being aligned, which clang and gcc complain about
|
||||
@@ -158,9 +157,10 @@ const mm_protocol_definition *getMultiProtocolDefinition (uint8_t protocol);
|
||||
#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)) || MULTIMODULE_HASFAILSAFE(x) || IS_MODULE_R9M(x)) ? (g_model.moduleData[x].failsafeMode==FAILSAFE_CUSTOM ? (uint8_t)1 : (uint8_t)0) : HIDDEN_ROW
|
||||
#define R9M_OPTION_ROW (IS_TELEMETRY_INTERNAL_MODULE ? TITLE_ROW : (uint8_t) 0)
|
||||
#define EXTERNAL_MODULE_OPTION_ROW (IS_MODULE_R9M(EXTERNAL_MODULE) ? R9M_OPTION_ROW : IS_MODULE_SBUS(EXTERNAL_MODULE) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW)
|
||||
#define EXTERNAL_MODULE_POWER_ROW (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) || IS_MODULE_R9M(EXTERNAL_MODULE)) ? (uint8_t) 0 : HIDDEN_ROW
|
||||
#define R9M_FCC_OPTION_ROW (IS_TELEMETRY_INTERNAL_MODULE() ? TITLE_ROW : (uint8_t)0)
|
||||
#define R9M_OPTION_ROW (IS_MODULE_R9M_FCC(EXTERNAL_MODULE) ? R9M_FCC_OPTION_ROW : TITLE_ROW)
|
||||
#define EXTERNAL_MODULE_OPTION_ROW (IS_MODULE_R9M(EXTERNAL_MODULE) ? R9M_OPTION_ROW : (IS_MODULE_SBUS(EXTERNAL_MODULE) ? TITLE_ROW : MULTIMODULE_OPTIONS_ROW))
|
||||
#define EXTERNAL_MODULE_POWER_ROW (IS_MODULE_MULTIMODULE(EXTERNAL_MODULE) || IS_MODULE_R9M_FCC(EXTERNAL_MODULE)) ? (uint8_t) 0 : HIDDEN_ROW
|
||||
|
||||
void editStickHardwareSettings(coord_t x, coord_t y, int idx, event_t event, LcdFlags flags);
|
||||
|
||||
|
||||
@@ -657,7 +657,7 @@ const pm_char STR_SUBTYPE_SLT[] PROGMEM = "\005""SLT\0 ""Vista";
|
||||
|
||||
const pm_char STR_SUBTYPE_CX10[] PROGMEM = "\007""Green\0 ""Blue\0 ""DM007\0 ""-\0 ""JC3015a""JC3015b""MK33041""Q242\0 ";
|
||||
|
||||
const pm_char STR_SUBTYPE_CG023[] PROGMEM = "\005""CG023""YD829""H8 3d";
|
||||
const pm_char STR_SUBTYPE_CG023[] PROGMEM = "\005""CG023""YD829";
|
||||
|
||||
const pm_char STR_SUBTYPE_KN[] PROGMEM = "\006""WLtoys""FeiLun";
|
||||
|
||||
@@ -675,10 +675,14 @@ const pm_char STR_SUBTYPE_WK2x01[] PROGMEM = "\006""WK2801""WK2401""W6_5_1""
|
||||
|
||||
const pm_char STR_SUBTYPE_V2X2[] PROGMEM = "\006""V2x2\0 ""JXD506";
|
||||
|
||||
const pm_char STR_SUBTYPE_BAYANG[] PROGMEM = "\006""Bayang""H8S3D\0""X16 AH\0";
|
||||
const pm_char STR_SUBTYPE_BAYANG[] PROGMEM = "\007""Bayang\0""H8S3D\0 ""X16 AH\0 ""irdrone";
|
||||
|
||||
const pm_char STR_SUBTYPE_FY326[] PROGMEM = "\005""FY326""FY319";
|
||||
|
||||
const pm_char STR_SUBTYPE_CABELL[] PROGMEM = "\006""CAB_V3""C_TELM""-\0 ""-\0 ""-\0 ""-\0 ""F_SAFE""UNBIND";
|
||||
|
||||
const pm_char STR_SUBTYPE_H83D[] PROGMEM = "\006""H8_3D\0""H20H\0 ""H20Mini""H30Mini";
|
||||
|
||||
const mm_protocol_definition multi_protocols[] = {
|
||||
|
||||
{MM_RF_PROTO_FLYSKY, 4, false, STR_SUBTYPE_FLYSKY, nullptr},
|
||||
@@ -692,18 +696,20 @@ const mm_protocol_definition multi_protocols[] = {
|
||||
{MM_RF_PROTO_SYMAX, 1, false, STR_SUBTYPE_SYMAX, nullptr},
|
||||
{MM_RF_PROTO_SLT, 1, false, STR_SUBTYPE_SLT, nullptr},
|
||||
{MM_RF_PROTO_CX10, 7, false, STR_SUBTYPE_CX10, nullptr},
|
||||
{MM_RF_PROTO_CG023, 2, false, STR_SUBTYPE_CG023, nullptr},
|
||||
{MM_RF_PROTO_BAYANG, 2, false, STR_SUBTYPE_BAYANG, STR_MULTI_TELEMETRY},
|
||||
{MM_RF_PROTO_CG023, 1, false, STR_SUBTYPE_CG023, nullptr},
|
||||
{MM_RF_PROTO_BAYANG, 3, false, STR_SUBTYPE_BAYANG, STR_MULTI_TELEMETRY},
|
||||
{MM_RF_PROTO_MT99XX, 4, false, STR_SUBTYPE_MT99, nullptr},
|
||||
{MM_RF_PROTO_MJXQ, 5, false, STR_SUBTYPE_MJXQ, nullptr},
|
||||
{MM_RF_PROTO_FY326, 1, false, STR_SUBTYPE_FY326, nullptr},
|
||||
{MM_RF_PROTO_SFHSS, 0, false, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
{MM_RF_PROTO_SFHSS, 0, true, NO_SUBTYPE, STR_MULTI_RFTUNE},
|
||||
{MM_RF_PROTO_HONTAI, 2, false, STR_SUBTYPE_HONTAI, nullptr},
|
||||
{MM_RF_PROTO_OLRS, 0, false, NO_SUBTYPE, STR_MULTI_RFPOWER},
|
||||
{MM_RF_PROTO_FS_AFHDS2A, 3, true, STR_SUBTYPE_AFHDS2A, STR_MULTI_SERVOFREQ},
|
||||
{MM_RF_PROTO_Q2X2, 2, false, STR_SUBTYPE_Q2X2, nullptr},
|
||||
{MM_RF_PROTO_WK_2X01, 5, false, STR_SUBTYPE_WK2x01, nullptr},
|
||||
{MM_RF_PROTO_Q303, 3, false, STR_SUBTYPE_Q303, nullptr},
|
||||
{MM_RF_PROTO_CABELL, 7, false, STR_SUBTYPE_CABELL, STR_MULTI_OPTION},
|
||||
{MM_RF_PROTO_H83D, 3, false, STR_SUBTYPE_H83D, nullptr},
|
||||
{MM_RF_CUSTOM_SELECTED, 7, true, NO_SUBTYPE, STR_MULTI_OPTION},
|
||||
|
||||
// Sentinel and default for protocols not listed above (MM_RF_CUSTOM is 0xff)
|
||||
@@ -732,18 +738,3 @@ 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";
|
||||
}
|
||||
}
|
||||
|
||||
+10
-1
@@ -503,6 +503,12 @@ enum XJTRFProtocols {
|
||||
RF_PROTO_LAST = RF_PROTO_LR12
|
||||
};
|
||||
|
||||
enum R9MSubTypes
|
||||
{
|
||||
MODULE_SUBTYPE_R9M_FCC,
|
||||
MODULE_SUBTYPE_R9M_LBT,
|
||||
};
|
||||
|
||||
enum MultiModuleRFProtocols {
|
||||
MM_RF_PROTO_CUSTOM = -1,
|
||||
MM_RF_PROTO_FIRST = MM_RF_PROTO_CUSTOM,
|
||||
@@ -537,7 +543,10 @@ enum MultiModuleRFProtocols {
|
||||
MM_RF_PROTO_Q303,
|
||||
MM_RF_PROTO_GW008,
|
||||
MM_RF_PROTO_DM002,
|
||||
MM_RF_PROTO_LAST= MM_RF_PROTO_DM002
|
||||
MM_RF_PROTO_CABELL,
|
||||
MM_RF_PROTO_ESKY150,
|
||||
MM_RF_PROTO_H83D,
|
||||
MM_RF_PROTO_LAST= MM_RF_PROTO_H83D
|
||||
};
|
||||
|
||||
enum MMDSM2Subtypes {
|
||||
|
||||
+14
-25
@@ -259,16 +259,22 @@ void generalDefault()
|
||||
g_eeGeneral.switchConfig = 0x00007bff; // 6x3POS, 1x2POS, 1xTOGGLE
|
||||
#endif
|
||||
|
||||
#if defined(PCBX9E)
|
||||
// vBatWarn is voltage in 100mV, vBatMin is in 100mV but with -9V offset, vBatMax has a -12V offset
|
||||
#if defined(PCBX9E) || defined(PCBX12S)
|
||||
// NI-MH 9.6V
|
||||
g_eeGeneral.vBatWarn = 87;
|
||||
g_eeGeneral.vBatMin = -5;
|
||||
g_eeGeneral.vBatMax = -5;
|
||||
g_eeGeneral.vBatMin = -5; //8,5V
|
||||
g_eeGeneral.vBatMax = -5; //11,5V
|
||||
#elif defined(PCBX10)
|
||||
// Lipo 2V
|
||||
g_eeGeneral.vBatWarn = 66;
|
||||
g_eeGeneral.vBatMin = -28; // 6.2V
|
||||
g_eeGeneral.vBatMax = -38; // 8.2V
|
||||
#elif defined(PCBTARANIS)
|
||||
// NI-MH 7.2V
|
||||
// NI-MH 7.2V, X9D, X9D+ and X7
|
||||
g_eeGeneral.vBatWarn = 65;
|
||||
g_eeGeneral.vBatMin = -30;
|
||||
g_eeGeneral.vBatMax = -40;
|
||||
g_eeGeneral.vBatMin = -30; //6V
|
||||
g_eeGeneral.vBatMax = -40; //8V
|
||||
#else
|
||||
g_eeGeneral.vBatWarn = 90;
|
||||
#endif
|
||||
@@ -2809,24 +2815,9 @@ uint32_t pwrCheck()
|
||||
if (get_tmr10ms() - pwr_press_time > PWR_PRESS_SHUTDOWN_DELAY) {
|
||||
#if defined(SHUTDOWN_CONFIRMATION)
|
||||
while (1) {
|
||||
lcdRefreshWait();
|
||||
lcdClear();
|
||||
POPUP_CONFIRMATION("Confirm Shutdown");
|
||||
event_t evt = getEvent(false);
|
||||
DISPLAY_WARNING(evt);
|
||||
lcdRefresh();
|
||||
if (warningResult == true) {
|
||||
pwr_check_state = PWR_CHECK_OFF;
|
||||
return e_power_off;
|
||||
}
|
||||
else if (!warningText) {
|
||||
// shutdown has been cancelled
|
||||
pwr_check_state = PWR_CHECK_PAUSED;
|
||||
return e_power_on;
|
||||
}
|
||||
}
|
||||
#else
|
||||
while ((TELEMETRY_STREAMING() && !g_eeGeneral.disableRssiPoweroffAlarm)) {
|
||||
#endif
|
||||
lcdRefreshWait();
|
||||
lcdClear();
|
||||
POPUP_CONFIRMATION("Confirm Shutdown");
|
||||
@@ -2846,7 +2837,6 @@ uint32_t pwrCheck()
|
||||
haptic.play(15, 3, PLAY_NOW);
|
||||
pwr_check_state = PWR_CHECK_OFF;
|
||||
return e_power_off;
|
||||
#endif
|
||||
}
|
||||
else {
|
||||
drawShutdownAnimation(pwrPressedDuration(), message);
|
||||
@@ -2884,9 +2874,8 @@ uint32_t pwrCheck()
|
||||
if (TELEMETRY_STREAMING()) {
|
||||
RAISE_ALERT(STR_MODEL, STR_MODEL_STILL_POWERED, STR_PRESS_ENTER_TO_CONFIRM, AU_MODEL_STILL_POWERED);
|
||||
while (TELEMETRY_STREAMING()) {
|
||||
#if defined(CPUARM)
|
||||
resetForcePowerOffRequest();
|
||||
CoTickDelay(10);
|
||||
#endif
|
||||
if (pwrPressed()) {
|
||||
return e_power_on;
|
||||
}
|
||||
|
||||
+3
-1
@@ -454,7 +454,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_R9M(idx) (g_model.moduleData[idx].type == MODULE_TYPE_R9M)
|
||||
#define IS_MODULE_R9M_FCC(idx) (IS_MODULE_R9M(idx) && g_model.moduleData[idx].subType == MODULE_SUBTYPE_R9M_FCC)
|
||||
#define IS_MODULE_R9M_LBT(idx) (IS_MODULE_R9M(idx) && g_model.moduleData[idx].subType == MODULE_SUBTYPE_R9M_LBT)
|
||||
#define IS_MODULE_PXX(idx) (IS_MODULE_XJT(idx) || IS_MODULE_R9M(idx))
|
||||
|
||||
#if defined(DSM2)
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
#define MULTI_CHANS 16
|
||||
#define MULTI_CHAN_BITS 11
|
||||
|
||||
void sendFrameProtocolHeader(uint8_t port);
|
||||
static void sendFrameProtocolHeader(uint8_t port, bool failsafe);
|
||||
|
||||
void sendChannels(uint8_t port);
|
||||
|
||||
@@ -54,17 +54,6 @@ static void sendSetupFrame()
|
||||
sendByteSbus(config);
|
||||
}
|
||||
|
||||
static void sendFailFailsafeHeader(uint8_t port)
|
||||
{
|
||||
|
||||
// Old multi firmware will mark config messsages as invalid frame and throw them away
|
||||
sendByteSbus('M');
|
||||
sendByteSbus('P');
|
||||
sendByteSbus(0x81); // Failsafe Data
|
||||
sendByteSbus(23); // 22 byte channel + 1 byte mode
|
||||
sendByteSbus(g_model.moduleData->failsafeMode);
|
||||
}
|
||||
|
||||
static void sendFailsafeChannels(uint8_t port)
|
||||
{
|
||||
uint32_t bits = 0;
|
||||
@@ -73,11 +62,18 @@ static void sendFailsafeChannels(uint8_t port)
|
||||
for (int i = 0; i < MULTI_CHANS; i++) {
|
||||
int16_t failsafeValue = g_model.moduleData[port].failsafeChannels[i];
|
||||
int pulseValue;
|
||||
if (g_model.moduleData[port].failsafeMode == FAILSAFE_HOLD)
|
||||
failsafeValue = FAILSAFE_CHANNEL_HOLD;
|
||||
|
||||
if (g_model.moduleData[port].failsafeMode == FAILSAFE_NOPULSES)
|
||||
failsafeValue = FAILSAFE_CHANNEL_NOPULSE;
|
||||
|
||||
|
||||
if (failsafeValue == FAILSAFE_CHANNEL_HOLD) {
|
||||
pulseValue = 0;
|
||||
}
|
||||
else if (failsafeValue == FAILSAFE_CHANNEL_NOPULSE) {
|
||||
pulseValue = 2048;
|
||||
pulseValue = 2047;
|
||||
}
|
||||
else {
|
||||
failsafeValue += 2 * PPM_CH_CENTER(g_model.moduleData[port].channelsStart + i) - 2 * PPM_CENTER;
|
||||
@@ -112,12 +108,12 @@ void setupPulsesMultimodule(uint8_t port)
|
||||
counter++;
|
||||
if (counter % 1000== 500) {
|
||||
sendSetupFrame();
|
||||
} else if (counter % 1000 == 0) {
|
||||
sendFailFailsafeHeader(port);
|
||||
} else if (counter % 1000 == 0 && g_model.moduleData[port].failsafeMode != FAILSAFE_NOT_SET && g_model.moduleData[port].failsafeMode != FAILSAFE_RECEIVER) {
|
||||
sendFrameProtocolHeader(port, true);
|
||||
sendFailsafeChannels(port);
|
||||
} else {
|
||||
// Normal Frame
|
||||
sendFrameProtocolHeader(port);
|
||||
sendFrameProtocolHeader(port, false);
|
||||
sendChannels(port);
|
||||
}
|
||||
|
||||
@@ -151,7 +147,7 @@ void sendChannels(uint8_t port)
|
||||
}
|
||||
}
|
||||
|
||||
void sendFrameProtocolHeader(uint8_t port)
|
||||
void sendFrameProtocolHeader(uint8_t port, bool failsafe)
|
||||
{// byte 1+2, protocol information
|
||||
|
||||
// Our enumeration starts at 0
|
||||
@@ -218,11 +214,15 @@ void sendFrameProtocolHeader(uint8_t port)
|
||||
type = g_model.moduleData[port].getMultiProtocol(false);
|
||||
|
||||
|
||||
// header, byte 0, 0x55 for proto 0-31 0x54 for 32-63
|
||||
uint8_t headerByte = 0x54;
|
||||
if (failsafe)
|
||||
headerByte = 0x56;
|
||||
|
||||
// header, byte 0, 0x55 for proto 0-31 0x54 for 32-63
|
||||
if (type <= 31)
|
||||
sendByteSbus(0x55);
|
||||
sendByteSbus(headerByte+1);
|
||||
else
|
||||
sendByteSbus(0x54);
|
||||
sendByteSbus(headerByte);
|
||||
|
||||
|
||||
// protocol byte
|
||||
|
||||
@@ -180,4 +180,28 @@ inline void SEND_FAILSAFE_1S()
|
||||
}
|
||||
}
|
||||
|
||||
#define LEN_R9M_MODES "\007"
|
||||
#define TR_R9M_MODES "FCC\0 ""LBT(EU)"
|
||||
#define LEN_R9M_FCC_POWER_VALUES "\006"
|
||||
#define LEN_R9M_LBT_POWER_VALUES "\006"
|
||||
#define TR_R9M_FCC_POWER_VALUES "10 mW\0" "100 mW" "500 mW" "1 W\0"
|
||||
#define TR_R9M_LBT_POWER_VALUES "25 mW\0" "500 mW"
|
||||
|
||||
enum R9MFCCPowerValues {
|
||||
R9M_FCC_POWER_10 = 0,
|
||||
R9M_FCC_POWER_100,
|
||||
R9M_FCC_POWER_500,
|
||||
R9M_FCC_POWER_1000,
|
||||
R9M_FCC_POWER_MAX = R9M_FCC_POWER_1000
|
||||
};
|
||||
|
||||
enum R9MLBTPowerValues {
|
||||
R9M_LBT_POWER_25 = 0,
|
||||
R9M_LBT_POWER_500,
|
||||
R9M_LBT_POWER_MAX = R9M_LBT_POWER_500
|
||||
};
|
||||
|
||||
#define BIND_TELEM_ALLOWED(idx) (!IS_MODULE_R9M_LBT(idx) || g_model.moduleData[idx].pxx.power == R9M_LBT_POWER_25)
|
||||
#define BIND_CH9TO16_ALLOWED(idx) (!IS_MODULE_R9M_LBT(idx) || g_model.moduleData[idx].pxx.power != R9M_LBT_POWER_25)
|
||||
|
||||
#endif // _PULSES_ARM_H_
|
||||
|
||||
@@ -378,18 +378,17 @@ void setupPulsesPXX(uint8_t port)
|
||||
/* Ext. flag (holds antenna selection on Horus internal module, 0x00 otherwise) */
|
||||
#if defined(PCBHORUS)
|
||||
if (port == INTERNAL_MODULE) {
|
||||
extra_flags |= g_model.moduleData[port].pxx.external_antenna;
|
||||
extra_flags |= (g_model.moduleData[port].pxx.external_antenna << 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
|
||||
extra_flags |= (g_model.moduleData[port].pxx.receiver_telem_off << 1);
|
||||
extra_flags |= (g_model.moduleData[port].pxx.receiver_channel_9_16 << 2);
|
||||
if (IS_MODULE_R9M(port)) {
|
||||
extra_flags |= g_model.moduleData[port].pxx.power << 3;
|
||||
// Disable s.port if internal module is active
|
||||
if (IS_TELEMETRY_INTERNAL_MODULE || !g_model.moduleData[port].pxx.sport_out)
|
||||
extra_flags |= (1<< 5);
|
||||
extra_flags |= (min(g_model.moduleData[port].pxx.power, IS_MODULE_R9M_FCC(port) ? (uint8_t)R9M_FCC_POWER_MAX : (uint8_t)R9M_LBT_POWER_MAX) << 3);
|
||||
// Disable S.PORT if internal module is active
|
||||
if (IS_TELEMETRY_INTERNAL_MODULE() || !g_model.moduleData[port].pxx.sport_out) {
|
||||
extra_flags |= (1 << 5);
|
||||
}
|
||||
}
|
||||
|
||||
putPcmByte(port, extra_flags);
|
||||
|
||||
+6
-3
@@ -115,16 +115,19 @@ inline const pm_char * SDCARD_ERROR(FRESULT result)
|
||||
const char * getFileExtension(const char * filename, uint8_t size=0, uint8_t extMaxLen=0, uint8_t *fnlen=NULL, uint8_t *extlen=NULL);
|
||||
|
||||
// TODO REMOVE THE O9X FOURCC in 2.3
|
||||
#if defined(PCBHORUS)
|
||||
#define OTX_FOURCC 0x3478746F // otx for Horus
|
||||
#if defined(PCBX12S)
|
||||
#define OTX_FOURCC 0x3478746F // otx for X12S
|
||||
#define O9X_FOURCC 0x3178396F // we forgot it in 2.2 RC ..
|
||||
#elif defined(PCBX10)
|
||||
#define OTX_FOURCC 0x3778746F // otx for X10
|
||||
#define O9X_FOURCC 0x3478746F // match X12S, we forgot OTX_FOURCC before 2.2.1 RC2
|
||||
#elif defined(PCBX9E)
|
||||
#define OTX_FOURCC 0x3578746F // otx for Taranis X9E
|
||||
#define O9X_FOURCC 0x3378396F // o9x for Taranis X9E
|
||||
#elif defined(PCBX7)
|
||||
#define OTX_FOURCC 0x3678746F // otx for Taranis X7
|
||||
#define O9X_FOURCC 0x3378396F // o9x for Taranis X7
|
||||
#elif defined(PCBTARANIS)
|
||||
#elif defined(PCBX9D) || defined(PCBX9DP)
|
||||
#define OTX_FOURCC 0x3378746F // otx for Taranis X9D
|
||||
#define O9X_FOURCC 0x3378396F // o9x for Taranis X9D
|
||||
#elif defined(PCBSKY9X)
|
||||
|
||||
@@ -279,15 +279,27 @@ void simuSetSwitch(uint8_t swtch, int8_t state)
|
||||
// SWITCH_3_CASE(5, SWITCHES_GPIO_REG_F_H, SWITCHES_GPIO_REG_F_L, SWITCHES_GPIO_PIN_F_H, SWITCHES_GPIO_PIN_F_L)
|
||||
#elif defined(PCBTARANIS) || defined(PCBHORUS)
|
||||
SWITCH_3_CASE(0, SWITCHES_GPIO_REG_A_L, SWITCHES_GPIO_REG_A_H, SWITCHES_GPIO_PIN_A_L, SWITCHES_GPIO_PIN_A_H)
|
||||
#if !defined(PCBX10)
|
||||
SWITCH_3_CASE(1, SWITCHES_GPIO_REG_B_L, SWITCHES_GPIO_REG_B_H, SWITCHES_GPIO_PIN_B_L, SWITCHES_GPIO_PIN_B_H)
|
||||
#else
|
||||
SWITCH_3_CASE(1, SWITCHES_GPIO_REG_B_H, SWITCHES_GPIO_REG_B_L, SWITCHES_GPIO_PIN_B_H, SWITCHES_GPIO_PIN_B_L)
|
||||
#endif
|
||||
SWITCH_3_CASE(2, SWITCHES_GPIO_REG_C_L, SWITCHES_GPIO_REG_C_H, SWITCHES_GPIO_PIN_C_L, SWITCHES_GPIO_PIN_C_H)
|
||||
#if !defined(PCBX10)
|
||||
SWITCH_3_CASE(3, SWITCHES_GPIO_REG_D_L, SWITCHES_GPIO_REG_D_H, SWITCHES_GPIO_PIN_D_L, SWITCHES_GPIO_PIN_D_H)
|
||||
#else
|
||||
SWITCH_3_CASE(3, SWITCHES_GPIO_REG_D_H, SWITCHES_GPIO_REG_D_L, SWITCHES_GPIO_PIN_D_H, SWITCHES_GPIO_PIN_D_L)
|
||||
#endif
|
||||
#if defined(PCBX7)
|
||||
SWITCH_CASE(4, SWITCHES_GPIO_REG_F, SWITCHES_GPIO_PIN_F)
|
||||
SWITCH_CASE(5, SWITCHES_GPIO_REG_H, SWITCHES_GPIO_PIN_H)
|
||||
#else
|
||||
#if !defined(PCBX10)
|
||||
SWITCH_3_CASE(4, SWITCHES_GPIO_REG_E_L, SWITCHES_GPIO_REG_E_H, SWITCHES_GPIO_PIN_E_L, SWITCHES_GPIO_PIN_E_H)
|
||||
#if defined(PCBHORUS)
|
||||
#else
|
||||
SWITCH_3_CASE(4, SWITCHES_GPIO_REG_E_H, SWITCHES_GPIO_REG_E_L, SWITCHES_GPIO_PIN_E_H, SWITCHES_GPIO_PIN_E_L)
|
||||
#endif
|
||||
#if defined(PCBX12S)
|
||||
SWITCH_CASE_NEGATIVE(5, SWITCHES_GPIO_REG_F, SWITCHES_GPIO_PIN_F)
|
||||
#else
|
||||
SWITCH_CASE(5, SWITCHES_GPIO_REG_F, SWITCHES_GPIO_PIN_F)
|
||||
|
||||
@@ -657,7 +657,7 @@
|
||||
#define LCD_RST_GPIO GPIOD
|
||||
#define LCD_RST_GPIO_PIN GPIO_Pin_15 // PD.15
|
||||
#define LCD_DMA DMA1
|
||||
#define LDC_DMA_Stream DMA1_Stream7
|
||||
#define LCD_DMA_Stream DMA1_Stream7
|
||||
#define LCD_DMA_Stream_IRQn DMA1_Stream7_IRQn
|
||||
#define LCD_DMA_Stream_IRQHandler DMA1_Stream7_IRQHandler
|
||||
#define LCD_DMA_FLAGS (DMA_HIFCR_CTCIF7 | DMA_HIFCR_CHTIF7 | DMA_HIFCR_CTEIF7 | DMA_HIFCR_CDMEIF7 | DMA_HIFCR_CFEIF7)
|
||||
@@ -678,7 +678,7 @@
|
||||
#define LCD_RST_GPIO GPIOD
|
||||
#define LCD_RST_GPIO_PIN GPIO_Pin_12 // PD.12
|
||||
#define LCD_DMA DMA1
|
||||
#define LDC_DMA_Stream DMA1_Stream7
|
||||
#define LCD_DMA_Stream DMA1_Stream7
|
||||
#define LCD_DMA_Stream_IRQn DMA1_Stream7_IRQn
|
||||
#define LCD_DMA_Stream_IRQHandler DMA1_Stream7_IRQHandler
|
||||
#define LCD_DMA_FLAGS (DMA_HIFCR_CTCIF7 | DMA_HIFCR_CHTIF7 | DMA_HIFCR_CTEIF7 | DMA_HIFCR_CDMEIF7 | DMA_HIFCR_CFEIF7)
|
||||
|
||||
@@ -85,17 +85,17 @@ void lcdHardwareInit()
|
||||
GPIO_PinAFConfig(LCD_SPI_GPIO, LCD_MOSI_GPIO_PinSource, LCD_GPIO_AF);
|
||||
GPIO_PinAFConfig(LCD_SPI_GPIO, LCD_CLK_GPIO_PinSource, LCD_GPIO_AF);
|
||||
|
||||
LDC_DMA_Stream->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||
LCD_DMA_Stream->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||
LCD_DMA->HIFCR = LCD_DMA_FLAGS; // Write ones to clear bits
|
||||
LDC_DMA_Stream->CR = DMA_SxCR_PL_0 | DMA_SxCR_MINC | DMA_SxCR_DIR_0;
|
||||
LDC_DMA_Stream->PAR = (uint32_t)&LCD_SPI->DR;
|
||||
LCD_DMA_Stream->CR = DMA_SxCR_PL_0 | DMA_SxCR_MINC | DMA_SxCR_DIR_0;
|
||||
LCD_DMA_Stream->PAR = (uint32_t)&LCD_SPI->DR;
|
||||
#if defined(PCBX7)
|
||||
LDC_DMA_Stream->NDTR = LCD_W;
|
||||
LCD_DMA_Stream->NDTR = LCD_W;
|
||||
#else
|
||||
LDC_DMA_Stream->M0AR = (uint32_t)displayBuf;
|
||||
LDC_DMA_Stream->NDTR = LCD_W*LCD_H/8*4;
|
||||
LCD_DMA_Stream->M0AR = (uint32_t)displayBuf;
|
||||
LCD_DMA_Stream->NDTR = LCD_W*LCD_H/8*4;
|
||||
#endif
|
||||
LDC_DMA_Stream->FCR = 0x05; // DMA_SxFCR_DMDIS | DMA_SxFCR_FTH_0;
|
||||
LCD_DMA_Stream->FCR = 0x05; // DMA_SxFCR_DMDIS | DMA_SxFCR_FTH_0;
|
||||
|
||||
NVIC_EnableIRQ(LCD_DMA_Stream_IRQn);
|
||||
}
|
||||
@@ -187,10 +187,10 @@ void lcdRefresh(bool wait)
|
||||
LCD_A0_HIGH();
|
||||
|
||||
lcd_busy = true;
|
||||
LDC_DMA_Stream->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||
LCD_DMA_Stream->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||
LCD_DMA->HIFCR = LCD_DMA_FLAGS; // Write ones to clear bits
|
||||
LDC_DMA_Stream->M0AR = (uint32_t)p;
|
||||
LDC_DMA_Stream->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA & TC interrupts
|
||||
LCD_DMA_Stream->M0AR = (uint32_t)p;
|
||||
LCD_DMA_Stream->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA & TC interrupts
|
||||
LCD_SPI->CR2 |= SPI_CR2_TXDMAEN;
|
||||
|
||||
WAIT_FOR_DMA_END();
|
||||
@@ -208,16 +208,16 @@ void lcdRefresh(bool wait)
|
||||
LCD_NCS_LOW();
|
||||
LCD_A0_HIGH();
|
||||
|
||||
LDC_DMA_Stream->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||
LCD_DMA_Stream->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||
LCD_DMA->HIFCR = LCD_DMA_FLAGS; // Write ones to clear bits
|
||||
|
||||
#if defined(LCD_DUAL_BUFFER)
|
||||
// Switch LCD buffer
|
||||
LDC_DMA_Stream->M0AR = (uint32_t)displayBuf;
|
||||
LCD_DMA_Stream->M0AR = (uint32_t)displayBuf;
|
||||
displayBuf = (displayBuf == displayBuf1) ? displayBuf2 : displayBuf1;
|
||||
#endif
|
||||
|
||||
LDC_DMA_Stream->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA & TC interrupts
|
||||
LCD_DMA_Stream->CR |= DMA_SxCR_EN | DMA_SxCR_TCIE; // Enable DMA & TC interrupts
|
||||
LCD_SPI->CR2 |= SPI_CR2_TXDMAEN;
|
||||
#endif
|
||||
}
|
||||
@@ -226,10 +226,10 @@ extern "C" void LCD_DMA_Stream_IRQHandler()
|
||||
{
|
||||
DEBUG_INTERRUPT(INT_LCD);
|
||||
|
||||
LDC_DMA_Stream->CR &= ~DMA_SxCR_TCIE; // Stop interrupt
|
||||
LCD_DMA_Stream->CR &= ~DMA_SxCR_TCIE; // Stop interrupt
|
||||
LCD_DMA->HIFCR |= LCD_DMA_FLAG_INT; // Clear interrupt flag
|
||||
LCD_SPI->CR2 &= ~SPI_CR2_TXDMAEN;
|
||||
LDC_DMA_Stream->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||
LCD_DMA_Stream->CR &= ~DMA_SxCR_EN; // Disable DMA
|
||||
|
||||
while (LCD_SPI->SR & SPI_SR_BSY) {
|
||||
/* Wait for SPI to finish sending data
|
||||
|
||||
@@ -88,11 +88,6 @@ uint16_t stackAvailable()
|
||||
|
||||
volatile uint16_t timeForcePowerOffPressed = 0;
|
||||
|
||||
void resetForcePowerOffRequest()
|
||||
{
|
||||
timeForcePowerOffPressed = 0;
|
||||
}
|
||||
|
||||
bool isForcePowerOffRequested()
|
||||
{
|
||||
if (pwrOffPressed()) {
|
||||
|
||||
@@ -73,4 +73,7 @@ extern TaskStack<AUDIO_STACK_SIZE> audioStack;
|
||||
|
||||
void tasksStart();
|
||||
|
||||
extern volatile uint16_t timeForcePowerOffPressed;
|
||||
inline void resetForcePowerOffRequest() {timeForcePowerOffPressed = 0; }
|
||||
|
||||
#endif // _TASKS_ARM_H_
|
||||
|
||||
@@ -82,6 +82,7 @@ static void processMultiSyncPacket(const uint8_t *data)
|
||||
multiSyncStatus.target = data[5];
|
||||
#if !defined(PPM_PIN_SERIAL)
|
||||
auto oldlag = multiSyncStatus.inputLag;
|
||||
(void) oldlag;
|
||||
#endif
|
||||
|
||||
multiSyncStatus.calcAdjustedRefreshRate(data[0] << 8 | data[1], data[2] << 8 | data[3]);
|
||||
@@ -272,7 +273,7 @@ void MultiModuleSyncStatus::getRefreshString(char *statusText)
|
||||
|
||||
void MultiModuleStatus::getStatusString(char *statusText)
|
||||
{
|
||||
if (get_tmr10ms() - lastUpdate > 200) {
|
||||
if (!isValid()) {
|
||||
#if defined(PCBTARANIS) || defined(PCBHORUS)
|
||||
if (IS_INTERNAL_MODULE_ENABLED())
|
||||
strcpy(statusText, STR_DISABLE_INTERNAL);
|
||||
@@ -293,6 +294,11 @@ void MultiModuleStatus::getStatusString(char *statusText)
|
||||
strcpy(statusText, STR_MODULE_NO_INPUT);
|
||||
return;
|
||||
}
|
||||
else if(isWaitingforBind()) {
|
||||
strcpy(statusText, STR_MODULE_WAITFORBIND);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
strcpy(statusText, "V");
|
||||
appendInt(statusText, major);
|
||||
|
||||
@@ -122,6 +122,9 @@ struct MultiModuleStatus {
|
||||
|
||||
void getStatusString(char* statusText);
|
||||
|
||||
inline bool isValid() { return (bool)(get_tmr10ms() - lastUpdate < 200); }
|
||||
inline bool supportsFailsafe() { return (bool) (flags & 0x20); }
|
||||
inline bool isWaitingforBind() { return (bool) (flags & 0x10); }
|
||||
inline bool isBinding() { return (bool) (flags & 0x08); }
|
||||
inline bool protocolValid() { return (bool) (flags & 0x04); }
|
||||
inline bool serialMode() { return (bool) (flags & 0x02); }
|
||||
|
||||
@@ -198,9 +198,9 @@ extern Fifo<uint8_t, LUA_TELEMETRY_INPUT_FIFO_SIZE> * luaInputTelemetryFifo;
|
||||
#endif
|
||||
|
||||
#if defined(STM32)
|
||||
#define IS_TELEMETRY_INTERNAL_MODULE (g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_XJT)
|
||||
#define IS_TELEMETRY_INTERNAL_MODULE() (g_model.moduleData[INTERNAL_MODULE].type == MODULE_TYPE_XJT)
|
||||
#else
|
||||
#define IS_TELEMETRY_INTERNAL_MODULE (false)
|
||||
#define IS_TELEMETRY_INTERNAL_MODULE() (false)
|
||||
#endif
|
||||
|
||||
#endif // _TELEMETRY_H_
|
||||
|
||||
@@ -108,6 +108,9 @@ const pm_char STR_OPEN9X[] PROGMEM =
|
||||
#if defined(CPUARM)
|
||||
ISTR(VTRAINERMODES)
|
||||
ISTR(TARANIS_PROTOCOLS)
|
||||
ISTR(R9M_MODES)
|
||||
ISTR(R9M_FCC_POWER_VALUES)
|
||||
ISTR(R9M_LBT_POWER_VALUES)
|
||||
ISTR(TELEMETRY_PROTOCOLS)
|
||||
ISTR(XJT_PROTOCOLS)
|
||||
ISTR(DSM_PROTOCOLS)
|
||||
@@ -388,7 +391,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_MODULE_TELEMETRY[] PROGMEM = TR_MODULE_TELEMETRY;
|
||||
const pm_char STR_COUNTRYCODE[] PROGMEM = TR_COUNTRYCODE;
|
||||
const pm_char STR_USBMODE[] PROGMEM = TR_USBMODE;
|
||||
const pm_char STR_FAILSAFE[] PROGMEM = TR_FAILSAFE;
|
||||
@@ -475,13 +478,13 @@ const pm_char STR_MULTI_CUSTOM[] PROGMEM = TR_MULTI_CUSTOM;
|
||||
const pm_char STR_MULTI_RFTUNE[] PROGMEM = TR_MULTI_RFTUNE;
|
||||
const pm_char STR_MULTI_TELEMETRY[] PROGMEM = TR_MULTI_TELEMETRY;
|
||||
const pm_char STR_MULTI_VIDFREQ[] PROGMEM = TR_MULTI_VIDFREQ;
|
||||
const pm_char STR_MULTI_RFPOWER[] PROGMEM = TR_MULTI_RFPOWER;
|
||||
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_MODULE_NO_SERIAL_MODE[] PROGMEM = TR_MODULE_NO_SERIAL_MODE;
|
||||
const pm_char STR_MODULE_NO_INPUT[] PROGMEM = TR_MODULE_NO_INPUT;
|
||||
const pm_char STR_MODULE_WAITFORBIND[] PROGMEM = TR_MODULE_WAITFORBIND;
|
||||
const pm_char STR_MODULE_NO_TELEMETRY[] PROGMEM = TR_MODULE_NO_TELEMETRY;
|
||||
const pm_char STR_MODULE_BINDING[] PROGMEM = TR_MODULE_BINDING;
|
||||
const pm_char STR_PROTOCOL_INVALID[] PROGMEM = TR_PROTOCOL_INVALID;
|
||||
@@ -614,10 +617,15 @@ const pm_char STR_BLCOLOR[] PROGMEM = TR_BLCOLOR;
|
||||
#if defined(CPUARM)
|
||||
const pm_char STR_TRAINER[] PROGMEM = TR_TRAINER;
|
||||
const pm_char STR_MODULE_BIND[] PROGMEM = TR_MODULE_BIND;
|
||||
const pm_char STR_BINDING_1_8_TELEM_ON[] PROGMEM = TR_BINDING_MODE1;
|
||||
const pm_char STR_BINDING_1_8_TELEM_OFF[] PROGMEM = TR_BINDING_MODE2;
|
||||
const pm_char STR_BINDING_9_16_TELEM_ON[] PROGMEM = TR_BINDING_MODE3;
|
||||
const pm_char STR_BINDING_9_16_TELEM_OFF[] PROGMEM = TR_BINDING_MODE4;
|
||||
const pm_char STR_BINDING_1_8_TELEM_ON[] PROGMEM = TR_BINDING_CH1_8_TELEM_ON;
|
||||
const pm_char STR_BINDING_1_8_TELEM_OFF[] PROGMEM = TR_BINDING_CH1_8_TELEM_OFF;
|
||||
const pm_char STR_BINDING_9_16_TELEM_ON[] PROGMEM = TR_BINDING_CH9_16_TELEM_ON;
|
||||
const pm_char STR_BINDING_9_16_TELEM_OFF[] PROGMEM = TR_BINDING_CH9_16_TELEM_OFF;
|
||||
const pm_char STR_BINDING_25MW_CH1_8_TELEM_OFF[] PROGMEM = TR_BINDING_25MW_CH1_8_TELEM_OFF;
|
||||
const pm_char STR_BINDING_25MW_CH1_8_TELEM_ON[] PROGMEM = TR_BINDING_25MW_CH1_8_TELEM_ON;
|
||||
const pm_char STR_BINDING_500MW_CH1_8_TELEM_OFF[] PROGMEM = TR_BINDING_500MW_CH1_8_TELEM_OFF;
|
||||
const pm_char STR_BINDING_500MW_CH9_16_TELEM_OFF[] PROGMEM = TR_BINDING_500MW_CH9_16_TELEM_OFF;
|
||||
const pm_char STR_BINDING_OPTION[] PROGMEM = TR_BINDING_OPTION;
|
||||
const pm_char STR_CHANNELRANGE[] PROGMEM = TR_CHANNELRANGE;
|
||||
const pm_char STR_ANTENNASELECTION[] PROGMEM = TR_ANTENNASELECTION;
|
||||
const pm_char STR_ANTENNACONFIRM1[] PROGMEM = TR_ANTENNACONFIRM1;
|
||||
@@ -675,6 +683,7 @@ const pm_char STR_BLCOLOR[] PROGMEM = TR_BLCOLOR;
|
||||
const pm_char STR_ADDMAINVIEW[] PROGMEM = TR_ADDMAINVIEW;
|
||||
const pm_char STR_BACKGROUND_COLOR[] PROGMEM = TR_BACKGROUND_COLOR;
|
||||
const pm_char STR_MAIN_COLOR[] PROGMEM = TR_MAIN_COLOR;
|
||||
const pm_char STR_MULTI_RFPOWER[] PROGMEM = TR_MULTI_RFPOWER;
|
||||
#endif
|
||||
|
||||
#if defined(CPUARM)
|
||||
|
||||
+27
-13
@@ -87,11 +87,11 @@
|
||||
#if defined(PCBHORUS)
|
||||
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_BATTERY TR_VTRAINER_BLUETOOTH
|
||||
#elif defined(PCBX9E)
|
||||
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_SBUS_MODULE TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY TR_VTRAINER_BLUETOOTH
|
||||
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_SBUS_MODULE TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY TR_VTRAINER_BLUETOOTH
|
||||
#elif defined(PCBTARANIS) && defined(BLUETOOTH)
|
||||
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_SBUS_MODULE TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY TR_VTRAINER_BLUETOOTH
|
||||
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_SBUS_MODULE TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY TR_VTRAINER_BLUETOOTH
|
||||
#elif defined(PCBTARANIS)
|
||||
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_SBUS_MODULE TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY
|
||||
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_SBUS_MODULE TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY
|
||||
#elif defined(CPUARM)
|
||||
#define TR_VTRAINERMODES TR_VTRAINER_MASTER_JACK TR_VTRAINER_SLAVE_JACK TR_VTRAINER_MASTER_CPPM_MODULE TR_VTRAINER_MASTER_BATTERY
|
||||
#endif
|
||||
@@ -219,10 +219,13 @@ extern const pm_char STR_OPEN9X[];
|
||||
#define OFS_VTRAINERMODES (OFS_VFAILSAFE)
|
||||
#endif
|
||||
#if defined(CPUARM)
|
||||
#define OFS_TARANIS_PROTOCOLS (OFS_VTRAINERMODES + sizeof(TR_VTRAINERMODES))
|
||||
#define OFS_TELEMETRY_PROTOCOLS (OFS_TARANIS_PROTOCOLS + sizeof(TR_TARANIS_PROTOCOLS))
|
||||
#define OFS_XJT_PROTOCOLS (OFS_TELEMETRY_PROTOCOLS + sizeof(TR_TELEMETRY_PROTOCOLS))
|
||||
#define OFS_DSM_PROTOCOLS (OFS_XJT_PROTOCOLS + sizeof(TR_XJT_PROTOCOLS))
|
||||
#define OFS_TARANIS_PROTOCOLS (OFS_VTRAINERMODES + sizeof(TR_VTRAINERMODES))
|
||||
#define OFS_R9M_MODES (OFS_TARANIS_PROTOCOLS + sizeof(TR_TARANIS_PROTOCOLS))
|
||||
#define OFS_R9M_FCC_POWER_VALUES (OFS_R9M_MODES + sizeof(TR_R9M_MODES))
|
||||
#define OFS_R9M_LBT_POWER_VALUES (OFS_R9M_FCC_POWER_VALUES + sizeof(TR_R9M_FCC_POWER_VALUES))
|
||||
#define OFS_TELEMETRY_PROTOCOLS (OFS_R9M_LBT_POWER_VALUES + sizeof(TR_R9M_LBT_POWER_VALUES))
|
||||
#define OFS_XJT_PROTOCOLS (OFS_TELEMETRY_PROTOCOLS + sizeof(TR_TELEMETRY_PROTOCOLS))
|
||||
#define OFS_DSM_PROTOCOLS (OFS_XJT_PROTOCOLS + sizeof(TR_XJT_PROTOCOLS))
|
||||
#if defined(MULTIMODULE)
|
||||
#define OFS_MULTI_PROTOCOLS (OFS_DSM_PROTOCOLS + sizeof(TR_DSM_PROTOCOLS))
|
||||
#define OFS_VOLTSRC (OFS_MULTI_PROTOCOLS + sizeof(TR_MULTI_PROTOCOLS))
|
||||
@@ -348,7 +351,10 @@ extern const pm_char STR_OPEN9X[];
|
||||
#if defined(CPUARM)
|
||||
#define STR_VTRAINERMODES (STR_OPEN9X + OFS_VTRAINERMODES)
|
||||
#define STR_TARANIS_PROTOCOLS (STR_OPEN9X + OFS_TARANIS_PROTOCOLS)
|
||||
#define STR_TELEMETRY_PROTOCOLS (STR_OPEN9X + OFS_TELEMETRY_PROTOCOLS)
|
||||
#define STR_R9M_MODES (STR_OPEN9X + OFS_R9M_MODES)
|
||||
#define STR_R9M_FCC_POWER_VALUES (STR_OPEN9X + OFS_R9M_FCC_POWER_VALUES)
|
||||
#define STR_R9M_LBT_POWER_VALUES (STR_OPEN9X + OFS_R9M_LBT_POWER_VALUES)
|
||||
#define STR_TELEMETRY_PROTOCOLS (STR_OPEN9X + OFS_TELEMETRY_PROTOCOLS)
|
||||
#define STR_XJT_PROTOCOLS (STR_OPEN9X + OFS_XJT_PROTOCOLS)
|
||||
#define STR_DSM_PROTOCOLS (STR_OPEN9X + OFS_DSM_PROTOCOLS)
|
||||
#if defined(MULTIMODULE)
|
||||
@@ -604,7 +610,6 @@ extern const pm_char STR_FAS_OFFSET[];
|
||||
extern const pm_char STR_MULTI_CUSTOM[];
|
||||
extern const pm_char STR_MULTI_OPTION[];
|
||||
extern const pm_char STR_MULTI_VIDFREQ[];
|
||||
extern const pm_char STR_MULTI_RFPOWER[];
|
||||
extern const pm_char STR_MULTI_RFTUNE[];
|
||||
extern const pm_char STR_MULTI_TELEMETRY[];
|
||||
extern const pm_char STR_MULTI_AUTOBIND[];
|
||||
@@ -612,6 +617,7 @@ extern const pm_char STR_MULTI_DSM_AUTODTECT[];
|
||||
extern const pm_char STR_MULTI_LOWPOWER[];
|
||||
extern const pm_char STR_MODULE_NO_SERIAL_MODE[];
|
||||
extern const pm_char STR_MODULE_NO_INPUT[];
|
||||
extern const pm_char STR_MODULE_WAITFORBIND[];
|
||||
extern const pm_char STR_MODULE_NO_TELEMETRY[];
|
||||
extern const pm_char STR_MODULE_BINDING[];
|
||||
extern const pm_char STR_PROTOCOL_INVALID[];
|
||||
@@ -631,7 +637,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_MODULE_TELEMETRY[];
|
||||
extern const pm_char STR_FAILSAFE[];
|
||||
extern const pm_char STR_FAILSAFESET[];
|
||||
extern const pm_char STR_HOLD[];
|
||||
@@ -843,6 +849,7 @@ extern const pm_char STR_BLCOLOR[];
|
||||
extern const LanguagePack skLanguagePack;
|
||||
extern const LanguagePack seLanguagePack;
|
||||
extern const LanguagePack huLanguagePack;
|
||||
extern const LanguagePack ruLanguagePack;
|
||||
extern const LanguagePack * const languagePacks[];
|
||||
#if defined(LANGUAGE_PACKS_DEFINITION)
|
||||
const LanguagePack * const languagePacks[] = {
|
||||
@@ -856,6 +863,7 @@ extern const pm_char STR_BLCOLOR[];
|
||||
&itLanguagePack,
|
||||
&plLanguagePack,
|
||||
&ptLanguagePack,
|
||||
&ruLanguagePack,
|
||||
&seLanguagePack,
|
||||
&skLanguagePack,
|
||||
NULL
|
||||
@@ -917,6 +925,11 @@ extern const pm_char STR_BLCOLOR[];
|
||||
extern const pm_char STR_BINDING_1_8_TELEM_OFF[];
|
||||
extern const pm_char STR_BINDING_9_16_TELEM_ON[];
|
||||
extern const pm_char STR_BINDING_9_16_TELEM_OFF[];
|
||||
extern const pm_char STR_BINDING_25MW_CH1_8_TELEM_OFF[];
|
||||
extern const pm_char STR_BINDING_25MW_CH1_8_TELEM_ON[];
|
||||
extern const pm_char STR_BINDING_500MW_CH1_8_TELEM_OFF[];
|
||||
extern const pm_char STR_BINDING_500MW_CH9_16_TELEM_OFF[];
|
||||
extern const pm_char STR_BINDING_OPTION[];
|
||||
extern const pm_char STR_CHANNELRANGE[];
|
||||
extern const pm_char STR_ANTENNASELECTION[];
|
||||
extern const pm_char STR_ANTENNACONFIRM1[];
|
||||
@@ -929,9 +942,9 @@ extern const pm_char STR_BLCOLOR[];
|
||||
extern const pm_char STR_RESET_SUBMENU[];
|
||||
extern const pm_char STR_LOWALARM[];
|
||||
extern const pm_char STR_CRITICALALARM[];
|
||||
extern const pm_char STR_RSSIALARM_WARN[];
|
||||
extern const pm_char STR_NO_RSSIALARM[];
|
||||
extern const pm_char STR_DISABLE_ALARM[];
|
||||
extern const pm_char STR_RSSIALARM_WARN[];
|
||||
extern const pm_char STR_NO_RSSIALARM[];
|
||||
extern const pm_char STR_DISABLE_ALARM[];
|
||||
extern const pm_char STR_TELEMETRY_TYPE[];
|
||||
extern const pm_char STR_TELEMETRY_SENSORS[];
|
||||
extern const pm_char STR_VALUE[];
|
||||
@@ -974,6 +987,7 @@ extern const pm_char STR_DISABLE_ALARM[];
|
||||
extern const pm_char STR_ADDMAINVIEW[];
|
||||
extern const pm_char STR_BACKGROUND_COLOR[];
|
||||
extern const pm_char STR_MAIN_COLOR[];
|
||||
extern const pm_char STR_MULTI_RFPOWER[];
|
||||
#endif
|
||||
|
||||
#if defined(CPUARM)
|
||||
|
||||
@@ -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 ""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 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\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""Hontai""OLRS\0 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\0""Cabell""Esky15""H8 3D\0"
|
||||
|
||||
#define TR_MULTI_CUSTOM "Custom"
|
||||
|
||||
@@ -860,16 +860,22 @@
|
||||
#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 "Telemetry"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "Mod telem.", INDENT "Module telemetry")
|
||||
#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")
|
||||
#define TR_MODULE_NO_TELEMETRY TR3( "No telemetry", "No MULTI_TELEMETRY", "No MULTI_TELEMETRY detected")
|
||||
#define TR_MODULE_WAITFORBIND "Bind to load protocol"
|
||||
#define TR_MODULE_BINDING TR("Bind...","Binding")
|
||||
#define TR_BINDING_MODE1 "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_MODE2 "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_MODE3 "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_MODE4 "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Telem ON")
|
||||
#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("500mW Ch1-8 Tel OFF", "500mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("500mW Ch9-16 Tel OFF", "500mW Ch9-16 Telem OFF")
|
||||
#define TR_BINDING_OPTION "Set at bind"
|
||||
#define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
|
||||
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
|
||||
#define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync")
|
||||
|
||||
@@ -115,7 +115,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 ""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 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\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""Hontai""OLRS\0 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\0""Cabell""Esky15""H8 3D\0"
|
||||
|
||||
#define TR_MULTI_CUSTOM "Custom"
|
||||
|
||||
@@ -881,16 +881,22 @@
|
||||
#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 "Telemetrie"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "Mod telem.", INDENT "Module telemetrie")
|
||||
#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")
|
||||
#define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
|
||||
#define TR_MODULE_WAITFORBIND "Bind to load protocol"
|
||||
#define TR_MODULE_BINDING "Binding"
|
||||
#define TR_BINDING_MODE1 "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_MODE2 "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_MODE3 "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_MODE4 "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Telem ON")
|
||||
#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("500mW Ch1-8 Tel OFF", "500mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("500mW Ch9-16 Tel OFF", "500mW Ch9-16 Telem OFF")
|
||||
#define TR_BINDING_OPTION "Set at bind"
|
||||
#define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
|
||||
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
|
||||
#define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync")
|
||||
|
||||
@@ -114,7 +114,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 ""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 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\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""Hontai""OLRS\0 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\0""Cabell""Esky15""H8 3D\0"
|
||||
|
||||
#define TR_MULTI_CUSTOM "Custom"
|
||||
|
||||
@@ -864,16 +864,22 @@
|
||||
#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 "Telemetry"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "Mod telem.", INDENT "Module telemetry")
|
||||
#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")
|
||||
#define TR_MODULE_NO_TELEMETRY TR3("No telemetry", "No MULTI_TELEMETRY", "No MULTI_TELEMETRY detected")
|
||||
#define TR_MODULE_WAITFORBIND "Bind to load protocol"
|
||||
#define TR_MODULE_BINDING TR("Bind...","Binding")
|
||||
#define TR_BINDING_MODE1 "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_MODE2 "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_MODE3 "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_MODE4 "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Telem ON")
|
||||
#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("500mW Ch1-8 Tel OFF", "500mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("500mW Ch9-16 Tel OFF", "500mW Ch9-16 Telem OFF")
|
||||
#define TR_BINDING_OPTION "Set at bind"
|
||||
#define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
|
||||
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
|
||||
#define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync")
|
||||
|
||||
@@ -110,7 +110,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 ""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 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\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""Hontai""OLRS\0 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\0""Cabell""Esky15""H8 3D\0"
|
||||
|
||||
#define TR_MULTI_CUSTOM "Custom"
|
||||
|
||||
@@ -840,16 +840,22 @@
|
||||
#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 "Telemetry"
|
||||
#define TR_DISABLE_INTERNAL TR("Disable int. RF", "Disable internal RF")
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "Mod telem.", INDENT "Module telemetry")
|
||||
#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")
|
||||
#define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
|
||||
#define TR_MODULE_WAITFORBIND "Bind to load protocol"
|
||||
#define TR_MODULE_BINDING "Binding"
|
||||
#define TR_BINDING_MODE1 "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_MODE2 "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_MODE3 "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_MODE4 "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Telem ON")
|
||||
#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("500mW Ch1-8 Tel OFF", "500mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("500mW Ch9-16 Tel OFF", "500mW Ch9-16 Telem OFF")
|
||||
#define TR_BINDING_OPTION "Set at bind"
|
||||
#define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
|
||||
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
|
||||
#define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync")
|
||||
|
||||
@@ -110,7 +110,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 ""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 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\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""Hontai""OLRS\0 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\0""Cabell""Esky15""H8 3D\0"
|
||||
|
||||
#define TR_MULTI_CUSTOM "Custom"
|
||||
|
||||
@@ -836,16 +836,22 @@
|
||||
#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 "Telemetry"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "Mod telem.", INDENT "Module telemetry")
|
||||
#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")
|
||||
#define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
|
||||
#define TR_MODULE_WAITFORBIND "Bind to load protocol"
|
||||
#define TR_MODULE_BINDING "Binding"
|
||||
#define TR_BINDING_MODE1 "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_MODE2 "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_MODE3 "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_MODE4 "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Telem ON")
|
||||
#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("500mW Ch1-8 Tel OFF", "500mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("500mW Ch9-16 Tel OFF", "500mW Ch9-16 Telem OFF")
|
||||
#define TR_BINDING_OPTION "Set at bind"
|
||||
#define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
|
||||
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
|
||||
#define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync")
|
||||
|
||||
@@ -110,7 +110,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 ""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 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\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""Hontai""OLRS\0 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\0""Cabell""Esky15""H8 3D\0"
|
||||
|
||||
#define TR_MULTI_CUSTOM "Perso"
|
||||
|
||||
@@ -321,7 +321,7 @@
|
||||
#define LEN_VFSWRESET TR("\004", "\012")
|
||||
|
||||
#if defined(TELEMETRY_FRSKY)
|
||||
#define TR_FSW_RESET_TELEM TR("Télm", "Télémesure")
|
||||
#define TR_FSW_RESET_TELEM TR("Télm", "Télémétrie")
|
||||
#else
|
||||
#define TR_FSW_RESET_TELEM
|
||||
#endif
|
||||
@@ -455,8 +455,16 @@
|
||||
#define LEN_VSWASHTYPE "\004"
|
||||
#define TR_VSWASHTYPE "--- ""120 ""120X""140 ""90\0"
|
||||
|
||||
#if defined(PCBHORUS)
|
||||
#define LEN_VKEYS "\006"
|
||||
#define TR_VKEYS "Menu\0 ""Exit\0 ""Entree""Haut\0 ""Bas\0 ""Droit\0""Gauche"
|
||||
#elif defined(PCBTARANIS)
|
||||
#define LEN_VKEYS "\005"
|
||||
#define TR_VKEYS TR("Menu\0""Exit\0""Bas\0 ""Haut\0""Droit""Gauch", "Menu\0""Exit\0""Enter""Page\0""Plus\0""Minus")
|
||||
#define TR_VKEYS "Menu\0""Exit\0""Enter""Page\0""Plus\0""Moins"
|
||||
#else
|
||||
#define LEN_VKEYS "\005"
|
||||
#define TR_VKEYS "Menu\0""Exit\0""Bas\0 ""Haut\0""Droit""Gauch"
|
||||
#endif
|
||||
|
||||
#define LEN_VRENCODERS "\003"
|
||||
#define TR_VRENCODERS "REa""REb"
|
||||
@@ -623,7 +631,7 @@
|
||||
#endif
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
#define TR_POPUPS TR_EXIT "\010" "\010" "\010" "\010" TR_ENTER
|
||||
#define TR_POPUPS TR(TR_EXIT "\010" TR_ENTER, TR_EXIT "\010" "\010" "\010" "\010" TR_ENTER)
|
||||
#else
|
||||
#define TR_POPUPS TR_ENTER "\010" TR_EXIT
|
||||
#define OFS_EXIT sizeof(TR_ENTER)
|
||||
@@ -813,8 +821,8 @@
|
||||
#define TR_MENUTRAINER "ECOLAGE"
|
||||
#define TR_MENUSPECIALFUNCS "FONCTIONS GLOBALES"
|
||||
#define TR_MENUVERSION "VERSION"
|
||||
#define TR_MENU_RADIO_SWITCHES TR("INTERS", "TEST INTERRUPTEURS")
|
||||
#define TR_MENU_RADIO_ANALOGS TR("ANAS", "ENTREES ANALOGIQUES")
|
||||
#define TR_MENU_RADIO_SWITCHES TR("INTERS", "TEST INTERRUPTEURS")
|
||||
#define TR_MENU_RADIO_ANALOGS TR("ANAS", "ENTREES ANALOGIQUES")
|
||||
#define TR_MENUCALIBRATION "CALIBRATION"
|
||||
#define TR_TRIMS2OFFSETS "\005Trims => Subtrims"
|
||||
#define TR_MENUMODELSEL "MODELES"
|
||||
@@ -863,16 +871,22 @@
|
||||
#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 "Telemetry"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "Télem. mod.", INDENT "Télémétrie module")
|
||||
#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_WAITFORBIND "Binder d'abord"
|
||||
#define TR_MODULE_BINDING "Bind..."
|
||||
#define TR_BINDING_MODE1 "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_MODE2 "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_MODE3 "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_MODE4 "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Télem ON"
|
||||
#define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Télem OFF"
|
||||
#define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Télem ON"
|
||||
#define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Télem OFF"
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_OFF "25mW Ch1-8 Télem OFF"
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_ON "25mW Ch1-8 Télem ON"
|
||||
#define TR_BINDING_500MW_CH1_8_TELEM_OFF "500mW Ch1-8 Télem OFF"
|
||||
#define TR_BINDING_500MW_CH9_16_TELEM_OFF "500mW Ch9-16 Télem OFF"
|
||||
#define TR_BINDING_OPTION "Set at bind"
|
||||
#define TR_PROTOCOL_INVALID TR("Sél. invalide", "Protocole invalide")
|
||||
#define TR_MODULE_STATUS TR(INDENT "Etat", INDENT "Etat module")
|
||||
#define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync")
|
||||
@@ -920,7 +934,7 @@
|
||||
#define TR_SWITCHWARN TR("INTERS","CONTROLES")
|
||||
#define TR_FAILSAFEWARN "FAILSAFE"
|
||||
#define TR_NIGHTLY_WARNING TR("NIGHTLY", "NIGHTLY BUILD")
|
||||
#define TR_NIGHTLY_NOTSAFE "Version not safe to fly"
|
||||
#define TR_NIGHTLY_NOTSAFE "Version de test uniq."
|
||||
#define TR_WRONG_SDCARDVERSION "Version requise: "
|
||||
#define TR_WRONG_PCBREV "PCB incorrect détecté"
|
||||
#define TR_EMERGENCY_MODE "MODE SECOURS"
|
||||
@@ -1020,7 +1034,7 @@
|
||||
#define TR_RESET_TIMER1 TR("Réinit. Timer1", "Réinitialiser Timer1")
|
||||
#define TR_RESET_TIMER2 TR("Réinit. Timer2", "Réinitialiser Timer2")
|
||||
#define TR_RESET_TIMER3 TR("Réinit. Timer3", "Réinitialiser Timer3")
|
||||
#define TR_RESET_TELEMETRY TR("Réinit. Télém.", "Réinit. Télémesure")
|
||||
#define TR_RESET_TELEMETRY TR("Réinit. Télém.", "Réinit. Télémétrie")
|
||||
#define TR_STATISTICS "Statistiques"
|
||||
#define TR_ABOUT_US "A propos"
|
||||
#define TR_USB_JOYSTICK "USB Joystick (HID)"
|
||||
@@ -1042,7 +1056,7 @@
|
||||
#define TR_ANTENNAPROBLEM CENTER "Antenne radio défectueuse!"
|
||||
#define TR_MODELIDUSED TR("ID affecté à :", "No de récepteur utilisé par :")
|
||||
#define TR_MODULE INDENT "Type de module"
|
||||
#define TR_TELEMETRY_TYPE TR("Type tél.", "Type télémesure")
|
||||
#define TR_TELEMETRY_TYPE TR("Type tél.", "Type télémétrie")
|
||||
#define TR_TELEMETRY_SENSORS "Capteurs"
|
||||
#define TR_VALUE "Valeur"
|
||||
#define TR_TOPLCDTIMER "Timer LCD haut"
|
||||
@@ -1055,8 +1069,8 @@
|
||||
#define TR_LOWALARM INDENT "Alarme basse"
|
||||
#define TR_CRITICALALARM INDENT "Alarme critique"
|
||||
#define TR_RSSIALARM_WARN TR("RSSI", "TELEMETRIE")
|
||||
#define TR_NO_RSSIALARM TR(INDENT "Alarms disabled", "Alarme télémétrie désactivée")
|
||||
#define TR_DISABLE_ALARM TR(INDENT "Disable alarms", INDENT "Désactiver alarme télémétrie")
|
||||
#define TR_NO_RSSIALARM TR(INDENT "Alarmes désact.", "Alarme télémétrie désactivée")
|
||||
#define TR_DISABLE_ALARM TR(INDENT "Désact. alarme", INDENT "Désactiver alarme télémétrie")
|
||||
#define TR_ENABLE_POPUP "Activer popup"
|
||||
#define TR_DISABLE_POPUP "Désactiver popup"
|
||||
#define TR_POPUP "Popup"
|
||||
@@ -1145,16 +1159,16 @@
|
||||
#define TR_LSW_HEADERS_DURATION "Durée min."
|
||||
#define TR_LSW_HEADERS_DELAY "Délai"
|
||||
|
||||
#define TR_GVAR_HEADERS_NAME "Name"
|
||||
#define TR_GVAR_HEADERS_FM0 "Value on FM0"
|
||||
#define TR_GVAR_HEADERS_FM1 "Value on FM1"
|
||||
#define TR_GVAR_HEADERS_FM2 "Value on FM2"
|
||||
#define TR_GVAR_HEADERS_FM3 "Value on FM3"
|
||||
#define TR_GVAR_HEADERS_FM4 "Value on FM4"
|
||||
#define TR_GVAR_HEADERS_FM5 "Value on FM5"
|
||||
#define TR_GVAR_HEADERS_FM6 "Value on FM6"
|
||||
#define TR_GVAR_HEADERS_FM7 "Value on FM7"
|
||||
#define TR_GVAR_HEADERS_FM8 "Value on FM8"
|
||||
#define TR_GVAR_HEADERS_NAME "Nom"
|
||||
#define TR_GVAR_HEADERS_FM0 "Valeur FM0"
|
||||
#define TR_GVAR_HEADERS_FM1 "Valeur FM1"
|
||||
#define TR_GVAR_HEADERS_FM2 "Valeur FM2"
|
||||
#define TR_GVAR_HEADERS_FM3 "Valeur FM3"
|
||||
#define TR_GVAR_HEADERS_FM4 "Valeur FM4"
|
||||
#define TR_GVAR_HEADERS_FM5 "Valeur FM5"
|
||||
#define TR_GVAR_HEADERS_FM6 "Valeur FM6"
|
||||
#define TR_GVAR_HEADERS_FM7 "Valeur FM7"
|
||||
#define TR_GVAR_HEADERS_FM8 "Valeur FM8"
|
||||
|
||||
// Horus footer descriptions
|
||||
#define TR_LSW_DESCRIPTIONS { "Type de comparaison ou fonction", "Première variable", "Seconde variable ou constante", "Seconde variable ou constante", "Condition supplémentaire pour activer la ligne", "Durée minimale d'activation de l'inter logique", "Durée min de la condition avant l'activation de l'inter" }
|
||||
@@ -1279,7 +1293,7 @@
|
||||
#define TR_MENU_TRAINER "\317Ecolage"
|
||||
#define TR_MENU_CHANNELS "\320Canaux"
|
||||
#define TR_MENU_GVARS "\311Vars. glob."
|
||||
#define TR_MENU_TELEMETRY "\321Télémesure"
|
||||
#define TR_MENU_TELEMETRY "\321Télémétrie"
|
||||
#define TR_MENU_DISPLAY "AFFICHAGE"
|
||||
#define TR_MENU_OTHER "Autres"
|
||||
#define TR_MENU_INVERT "Inverser"
|
||||
|
||||
@@ -110,7 +110,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 ""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 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\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""Hontai""OLRS\0 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\0""Cabell""Esky15""H8 3D\0"
|
||||
|
||||
#define TR_MULTI_CUSTOM "Custom"
|
||||
|
||||
@@ -865,16 +865,22 @@
|
||||
#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 "Telemetry"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "Mod telem.", INDENT "Module telemetry")
|
||||
#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")
|
||||
#define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
|
||||
#define TR_MODULE_WAITFORBIND "Bind to load protocol"
|
||||
#define TR_MODULE_BINDING "Binding"
|
||||
#define TR_BINDING_MODE1 "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_MODE2 "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_MODE3 "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_MODE4 "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Telem ON")
|
||||
#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("500mW Ch1-8 Tel OFF", "500mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("500mW Ch9-16 Tel OFF", "500mW Ch9-16 Telem OFF")
|
||||
#define TR_BINDING_OPTION "Set at bind"
|
||||
#define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
|
||||
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
|
||||
#define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync")
|
||||
|
||||
@@ -115,7 +115,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 ""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 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\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""Hontai""OLRS\0 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\0""Cabell""Esky15""H8 3D\0"
|
||||
|
||||
#define TR_MULTI_CUSTOM "Custom"
|
||||
|
||||
@@ -863,16 +863,22 @@
|
||||
#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 "Telemetry"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "Mod telem.", INDENT "Module telemetry")
|
||||
#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")
|
||||
#define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
|
||||
#define TR_MODULE_WAITFORBIND "Bind to load protocol"
|
||||
#define TR_MODULE_BINDING "Binding"
|
||||
#define TR_BINDING_MODE1 "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_MODE2 "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_MODE3 "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_MODE4 "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Telem ON")
|
||||
#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("500mW Ch1-8 Tel OFF", "500mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("500mW Ch9-16 Tel OFF", "500mW Ch9-16 Telem OFF")
|
||||
#define TR_BINDING_OPTION "Set at bind"
|
||||
#define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
|
||||
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
|
||||
#define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync")
|
||||
|
||||
@@ -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 ""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 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\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""Hontai""OLRS\0 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\0""Cabell""Esky15""H8 3D\0"
|
||||
|
||||
#define TR_MULTI_CUSTOM "Custom"
|
||||
|
||||
@@ -867,16 +867,22 @@
|
||||
#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 "Telemetry"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "Mod telem.", INDENT "Module telemetry")
|
||||
#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")
|
||||
#define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
|
||||
#define TR_MODULE_WAITFORBIND "Bind to load protocol"
|
||||
#define TR_MODULE_BINDING "Binding"
|
||||
#define TR_BINDING_MODE1 "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_MODE2 "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_MODE3 "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_MODE4 "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Telem ON")
|
||||
#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("500mW Ch1-8 Tel OFF", "500mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("500mW Ch9-16 Tel OFF", "500mW Ch9-16 Telem OFF")
|
||||
#define TR_BINDING_OPTION "Set at bind"
|
||||
#define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
|
||||
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
|
||||
#define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync")
|
||||
|
||||
@@ -110,7 +110,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 ""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 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\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""Hontai""OLRS\0 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\0""Cabell""Esky15""H8 3D\0"
|
||||
|
||||
#define TR_MULTI_CUSTOM "Custom"
|
||||
|
||||
@@ -842,16 +842,22 @@
|
||||
#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 "Telemetry"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "Mod telem.", INDENT "Module telemetry")
|
||||
#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")
|
||||
#define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
|
||||
#define TR_MODULE_WAITFORBIND "Bind to load protocol"
|
||||
#define TR_MODULE_BINDING "Binding"
|
||||
#define TR_BINDING_MODE1 "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_MODE2 "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_MODE3 "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_MODE4 "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Telem ON")
|
||||
#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("500mW Ch1-8 Tel OFF", "500mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("500mW Ch9-16 Tel OFF", "500mW Ch9-16 Telem OFF")
|
||||
#define TR_BINDING_OPTION "Set at bind"
|
||||
#define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
|
||||
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
|
||||
#define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync")
|
||||
|
||||
@@ -110,7 +110,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 ""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 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\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""Hontai""OLRS\0 ""FS 2A\0""Q2x2\0 ""Walk.\0""Q303\0 ""GW008\0""DM002\0""Cabell""Esky15""H8 3D\0"
|
||||
|
||||
#define TR_MULTI_CUSTOM "Custom"
|
||||
|
||||
@@ -879,16 +879,22 @@
|
||||
#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 "Telemetry"
|
||||
#define TR_MODULE_TELEMETRY TR(INDENT "Mod telem.", INDENT "Module telemetry")
|
||||
#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")
|
||||
#define TR_MODULE_NO_TELEMETRY TR3( "No telmetry", "No MULTI_TELEMETRY", "No telemetry (enable MULTI_TELEMETRY)")
|
||||
#define TR_MODULE_WAITFORBIND "Bind to load protocol"
|
||||
#define TR_MODULE_BINDING "Binding"
|
||||
#define TR_BINDING_MODE1 "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_MODE2 "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_MODE3 "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_MODE4 "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_CH1_8_TELEM_ON "Ch1-8 Telem ON"
|
||||
#define TR_BINDING_CH1_8_TELEM_OFF "Ch1-8 Telem OFF"
|
||||
#define TR_BINDING_CH9_16_TELEM_ON "Ch9-16 Telem ON"
|
||||
#define TR_BINDING_CH9_16_TELEM_OFF "Ch9-16 Telem OFF"
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_OFF TR("25mW Ch1-8 Tel OFF", "25mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_25MW_CH1_8_TELEM_ON TR("25mW Ch1-8 Tel ON", "25mW Ch1-8 Telem ON")
|
||||
#define TR_BINDING_500MW_CH1_8_TELEM_OFF TR("500mW Ch1-8 Tel OFF", "500mW Ch1-8 Telem OFF")
|
||||
#define TR_BINDING_500MW_CH9_16_TELEM_OFF TR("500mW Ch9-16 Tel OFF", "500mW Ch9-16 Telem OFF")
|
||||
#define TR_BINDING_OPTION "Set at bind"
|
||||
#define TR_PROTOCOL_INVALID TR("Prot. invalid", "Protocol invalid")
|
||||
#define TR_MODULE_STATUS TR(INDENT "Status", INDENT "Module Status")
|
||||
#define TR_MODULE_SYNC TR(INDENT "Sync", INDENT "Module Sync")
|
||||
|
||||
@@ -0,0 +1,222 @@
|
||||
/*
|
||||
* Author
|
||||
* - Alexander Novikov (mr.pokryshkin@gmail.com)
|
||||
*
|
||||
* tts_ru is based on tts_de and tts_en
|
||||
*
|
||||
* opentx is based on code named
|
||||
* gruvin9x by Bryan J. Rentoul: http://code.google.com/p/gruvin9x/,
|
||||
* er9x by Erez Raviv: http://code.google.com/p/er9x/,
|
||||
* and the original (and ongoing) project by
|
||||
* Thomas Husterer, th9x: http://code.google.com/p/th9x/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "opentx.h"
|
||||
|
||||
enum RusPrompts {
|
||||
RU_PROMPT_NUMBERS_BASE = 0,
|
||||
RU_PROMPT_ZERO = RU_PROMPT_NUMBERS_BASE+0, //02-99
|
||||
RU_PROMPT_HUNDRED = RU_PROMPT_NUMBERS_BASE+100, //100,200 .. 900
|
||||
|
||||
RU_PROMPT_AND = RU_PROMPT_NUMBERS_BASE+110, // и
|
||||
RU_PROMPT_MINUS = RU_PROMPT_NUMBERS_BASE+111, // минус
|
||||
RU_PROMPT_UNITS_BASE = RU_PROMPT_NUMBERS_BASE + 113,
|
||||
RU_PROMPT_POINT_BASE = RU_PROMPT_NUMBERS_BASE + 165, //.0 - .9
|
||||
RU_PROMPT_FEMALE_ONE = RU_PROMPT_NUMBERS_BASE + 180,
|
||||
RU_PROMPT_FEMALE_TWO = RU_PROMPT_NUMBERS_BASE + 190,
|
||||
|
||||
RU_PROMPT_THOUSAND1 = RU_PROMPT_NUMBERS_BASE+200, //1000
|
||||
RU_PROMPT_THOUSAND2 = RU_PROMPT_NUMBERS_BASE+201, //2000
|
||||
RU_PROMPT_THOUSAND5 = RU_PROMPT_NUMBERS_BASE+202, //5000
|
||||
};
|
||||
#define MALE 0x00
|
||||
#define FEMALE 0x01
|
||||
#define RU_FEMALE_UNIT 0xFF
|
||||
|
||||
#if defined(VOICE)
|
||||
|
||||
#if defined(CPUARM)
|
||||
#define RU_PUSH_UNIT_PROMPT(u, p) ru_pushUnitPrompt((u), (p), id)
|
||||
#else
|
||||
#define RU_PUSH_UNIT_PROMPT(u, p) pushUnitPrompt((u), (p))
|
||||
#endif
|
||||
|
||||
I18N_PLAY_FUNCTION(ru, pushUnitPrompt, uint8_t unitprompt, int16_t number)
|
||||
{
|
||||
#if defined(CPUARM)
|
||||
if (number < 0){ // if negative number, we have to use 2 units form (for example value = 1.3)
|
||||
PUSH_UNIT_PROMPT(unitprompt, 2);
|
||||
}
|
||||
else{
|
||||
int16_t mod10 = number % 10;
|
||||
if (number == 0)
|
||||
PUSH_UNIT_PROMPT(unitprompt, 0);
|
||||
else if (number == 1)
|
||||
PUSH_UNIT_PROMPT(unitprompt, 1);
|
||||
else if (number>=2 && number <=4)
|
||||
PUSH_UNIT_PROMPT(unitprompt, 2);
|
||||
else if (number>=5 && number <=20)
|
||||
PUSH_UNIT_PROMPT(unitprompt, 5);
|
||||
else if (mod10 == 1)
|
||||
PUSH_UNIT_PROMPT(unitprompt, 1);
|
||||
else if (mod10 >= 2 && mod10 <=4)
|
||||
PUSH_UNIT_PROMPT(unitprompt, 2);
|
||||
else
|
||||
PUSH_UNIT_PROMPT(unitprompt, 5);
|
||||
}
|
||||
#else
|
||||
|
||||
// TODO: add rules for Russian language
|
||||
unitprompt = RU_PROMPT_UNITS_BASE + unitprompt*4;
|
||||
if (number == 1)
|
||||
PUSH_NUMBER_PROMPT(unitprompt);
|
||||
else
|
||||
PUSH_NUMBER_PROMPT(unitprompt+1);
|
||||
#endif
|
||||
}
|
||||
|
||||
I18N_PLAY_FUNCTION(ru, playNumber, getvalue_t number, uint8_t unit, uint8_t att)
|
||||
{
|
||||
if (number < 0) {
|
||||
PUSH_NUMBER_PROMPT(RU_PROMPT_MINUS);
|
||||
number = -number;
|
||||
}
|
||||
|
||||
#if !defined(CPUARM)
|
||||
if (unit) {
|
||||
unit--;
|
||||
convertUnit(number, unit);
|
||||
if (IS_IMPERIAL_ENABLE()) {
|
||||
if (unit == UNIT_DIST) {
|
||||
unit = UNIT_FEET;
|
||||
}
|
||||
if (unit == UNIT_SPEED) {
|
||||
unit = UNIT_KTS;
|
||||
}
|
||||
}
|
||||
unit++;
|
||||
}
|
||||
#endif
|
||||
div_t qr = div((int)number, 10);
|
||||
int8_t mode = MODE(att);
|
||||
if (mode > 0 && att != RU_FEMALE_UNIT) {
|
||||
#if defined(CPUARM)
|
||||
if (mode == 2) {
|
||||
number /= 10;
|
||||
}
|
||||
#else
|
||||
// we assume that we are PREC1
|
||||
#endif
|
||||
if (qr.rem) {
|
||||
PLAY_NUMBER(qr.quot, 0, 0);
|
||||
PUSH_NUMBER_PROMPT(RU_PROMPT_POINT_BASE + qr.rem);
|
||||
number = -1;
|
||||
}
|
||||
else {
|
||||
number = qr.quot;
|
||||
}
|
||||
}
|
||||
|
||||
int16_t tmp = number;
|
||||
|
||||
if (number >= 1000) {
|
||||
PLAY_NUMBER(number / 1000, RU_FEMALE_UNIT, 0); // female
|
||||
uint8_t thousands = number / 1000;
|
||||
int16_t mod10 = thousands % 10;
|
||||
if (thousands == 1)
|
||||
PUSH_NUMBER_PROMPT(RU_PROMPT_THOUSAND1);
|
||||
else if (thousands>=2 && thousands <=4)
|
||||
PUSH_NUMBER_PROMPT(RU_PROMPT_THOUSAND2);
|
||||
else if (thousands>=5 && thousands <=20)
|
||||
PUSH_NUMBER_PROMPT(RU_PROMPT_THOUSAND5);
|
||||
else if (mod10 == 1)
|
||||
PUSH_NUMBER_PROMPT(RU_PROMPT_THOUSAND1);
|
||||
else if (mod10 >= 2 && mod10 <=4)
|
||||
PUSH_NUMBER_PROMPT(RU_PROMPT_THOUSAND2);
|
||||
else
|
||||
PUSH_NUMBER_PROMPT(RU_PROMPT_THOUSAND5);
|
||||
number %= 1000;
|
||||
if (number == 0)
|
||||
number = -1;
|
||||
}
|
||||
if (number >= 100) {
|
||||
PUSH_NUMBER_PROMPT(RU_PROMPT_HUNDRED + (number/100)-1);
|
||||
number %= 100;
|
||||
if (number == 0)
|
||||
number = -1;
|
||||
}
|
||||
if (number >= 0) {
|
||||
uint8_t attr = MALE;
|
||||
switch(unit) {
|
||||
case RU_FEMALE_UNIT:
|
||||
case UNIT_MPH:
|
||||
case UNIT_FLOZ:
|
||||
case UNIT_MINUTES:
|
||||
case UNIT_SECONDS:
|
||||
attr = FEMALE;
|
||||
break;
|
||||
default:
|
||||
attr = MALE;
|
||||
break;
|
||||
}
|
||||
uint8_t lastDigit = number % 10;
|
||||
uint8_t ten=(number - (number % 10))/10;
|
||||
if (lastDigit == 1 && number != 11 && attr == FEMALE)
|
||||
PUSH_NUMBER_PROMPT(RU_PROMPT_FEMALE_ONE + ten);
|
||||
else if (lastDigit == 2 && number !=12 && attr == FEMALE)
|
||||
PUSH_NUMBER_PROMPT(RU_PROMPT_FEMALE_TWO + ten);
|
||||
else
|
||||
PUSH_NUMBER_PROMPT(RU_PROMPT_ZERO + number);
|
||||
}
|
||||
|
||||
if (unit) {
|
||||
if (mode > 0 && qr.rem) // number with decimal point
|
||||
RU_PUSH_UNIT_PROMPT(unit, -1); // force 2 units form, if float value
|
||||
else
|
||||
RU_PUSH_UNIT_PROMPT(unit, tmp);
|
||||
}
|
||||
}
|
||||
|
||||
I18N_PLAY_FUNCTION(ru, playDuration, int seconds PLAY_DURATION_ATT)
|
||||
{
|
||||
if (seconds == 0) {
|
||||
PLAY_NUMBER(seconds, 0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (seconds < 0) {
|
||||
PUSH_NUMBER_PROMPT(RU_PROMPT_MINUS);
|
||||
seconds = -seconds;
|
||||
}
|
||||
|
||||
uint8_t tmp = seconds / 3600;
|
||||
seconds %= 3600;
|
||||
if (tmp > 0 || IS_PLAY_TIME()) {
|
||||
PLAY_NUMBER(tmp, UNIT_HOURS, 0);
|
||||
}
|
||||
|
||||
tmp = seconds / 60;
|
||||
seconds %= 60;
|
||||
if (tmp > 0) {
|
||||
PLAY_NUMBER(tmp, UNIT_MINUTES, 0);
|
||||
if (seconds > 0)
|
||||
PUSH_NUMBER_PROMPT(RU_PROMPT_AND);
|
||||
}
|
||||
if (seconds > 0) {
|
||||
PLAY_NUMBER(seconds, UNIT_SECONDS, 0);
|
||||
}
|
||||
}
|
||||
|
||||
LANGUAGE_PACK_DECLARE(ru, "Russian");
|
||||
|
||||
#endif
|
||||
+5
-10
@@ -245,8 +245,7 @@ options_taranis = {
|
||||
"internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"),
|
||||
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
|
||||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||
"bindopt": ("BINDING_OPTIONS", "YES", "NO")
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO")
|
||||
}
|
||||
|
||||
options_taranisplus = {
|
||||
@@ -263,8 +262,7 @@ options_taranisplus = {
|
||||
"internalppm": ("TARANIS_INTERNAL_PPM", "YES", "NO"),
|
||||
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
|
||||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||
"bindopt": ("BINDING_OPTIONS", "YES", "NO")
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO")
|
||||
}
|
||||
|
||||
options_taranisx9e = {
|
||||
@@ -282,8 +280,7 @@ options_taranisx9e = {
|
||||
"shutdownconfirm": ("SHUTDOWN_CONFIRMATION", "YES", "NO"),
|
||||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||
"horussticks": ("STICKS", "HORUS", "STANDARD"),
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||
"bindopt": ("BINDING_OPTIONS", "YES", "NO")
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO")
|
||||
}
|
||||
|
||||
options_x12s = {
|
||||
@@ -297,8 +294,7 @@ options_x12s = {
|
||||
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
|
||||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||
"pcbdev": ("PCBREV", "10", None),
|
||||
"bindopt": ("BINDING_OPTIONS", "YES", "NO")
|
||||
"pcbdev": ("PCBREV", "10", None)
|
||||
}
|
||||
|
||||
options_x10 = {
|
||||
@@ -311,6 +307,5 @@ options_x10 = {
|
||||
"faichoice": ("FAI", "CHOICE", None),
|
||||
"nooverridech": ("OVERRIDE_CHANNEL_FUNCTION", "NO", "YES"),
|
||||
"eu": ("SUPPORT_D16_EU_ONLY", "YES", "NO"),
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO"),
|
||||
"bindopt": ("BINDING_OPTIONS", "YES", "NO")
|
||||
"multimodule": ("MULTIMODULE", "YES", "NO")
|
||||
}
|
||||
|
||||
@@ -0,0 +1,272 @@
|
||||
SYSTEM|0000|0
|
||||
SYSTEM|0001|1
|
||||
SYSTEM|0002|2
|
||||
SYSTEM|0003|3
|
||||
SYSTEM|0004|4
|
||||
SYSTEM|0005|5
|
||||
SYSTEM|0006|6
|
||||
SYSTEM|0007|7
|
||||
SYSTEM|0008|8
|
||||
SYSTEM|0009|9
|
||||
SYSTEM|0010|10
|
||||
SYSTEM|0011|11
|
||||
SYSTEM|0012|12
|
||||
SYSTEM|0013|13
|
||||
SYSTEM|0014|14
|
||||
SYSTEM|0015|15
|
||||
SYSTEM|0016|16
|
||||
SYSTEM|0017|17
|
||||
SYSTEM|0018|18
|
||||
SYSTEM|0019|19
|
||||
SYSTEM|0020|20
|
||||
SYSTEM|0021|21
|
||||
SYSTEM|0022|22
|
||||
SYSTEM|0023|23
|
||||
SYSTEM|0024|24
|
||||
SYSTEM|0025|25
|
||||
SYSTEM|0026|26
|
||||
SYSTEM|0027|27
|
||||
SYSTEM|0028|28
|
||||
SYSTEM|0029|29
|
||||
SYSTEM|0030|30
|
||||
SYSTEM|0031|31
|
||||
SYSTEM|0032|32
|
||||
SYSTEM|0033|33
|
||||
SYSTEM|0034|34
|
||||
SYSTEM|0035|35
|
||||
SYSTEM|0036|36
|
||||
SYSTEM|0037|37
|
||||
SYSTEM|0038|38
|
||||
SYSTEM|0039|39
|
||||
SYSTEM|0040|40
|
||||
SYSTEM|0041|41
|
||||
SYSTEM|0042|42
|
||||
SYSTEM|0043|43
|
||||
SYSTEM|0044|44
|
||||
SYSTEM|0045|45
|
||||
SYSTEM|0046|46
|
||||
SYSTEM|0047|47
|
||||
SYSTEM|0048|48
|
||||
SYSTEM|0049|49
|
||||
SYSTEM|0050|50
|
||||
SYSTEM|0051|51
|
||||
SYSTEM|0052|52
|
||||
SYSTEM|0053|53
|
||||
SYSTEM|0054|54
|
||||
SYSTEM|0055|55
|
||||
SYSTEM|0056|56
|
||||
SYSTEM|0057|57
|
||||
SYSTEM|0058|58
|
||||
SYSTEM|0059|59
|
||||
SYSTEM|0060|60
|
||||
SYSTEM|0061|61
|
||||
SYSTEM|0062|62
|
||||
SYSTEM|0063|63
|
||||
SYSTEM|0064|64
|
||||
SYSTEM|0065|65
|
||||
SYSTEM|0066|66
|
||||
SYSTEM|0067|67
|
||||
SYSTEM|0068|68
|
||||
SYSTEM|0069|69
|
||||
SYSTEM|0070|70
|
||||
SYSTEM|0071|71
|
||||
SYSTEM|0072|72
|
||||
SYSTEM|0073|73
|
||||
SYSTEM|0074|74
|
||||
SYSTEM|0075|75
|
||||
SYSTEM|0076|76
|
||||
SYSTEM|0077|77
|
||||
SYSTEM|0078|78
|
||||
SYSTEM|0079|79
|
||||
SYSTEM|0080|80
|
||||
SYSTEM|0081|81
|
||||
SYSTEM|0082|82
|
||||
SYSTEM|0083|83
|
||||
SYSTEM|0084|84
|
||||
SYSTEM|0085|85
|
||||
SYSTEM|0086|86
|
||||
SYSTEM|0087|87
|
||||
SYSTEM|0088|88
|
||||
SYSTEM|0089|89
|
||||
SYSTEM|0090|90
|
||||
SYSTEM|0091|91
|
||||
SYSTEM|0092|92
|
||||
SYSTEM|0093|93
|
||||
SYSTEM|0094|94
|
||||
SYSTEM|0095|95
|
||||
SYSTEM|0096|96
|
||||
SYSTEM|0097|97
|
||||
SYSTEM|0098|98
|
||||
SYSTEM|0099|99
|
||||
SYSTEM|0100|100
|
||||
SYSTEM|0101|200
|
||||
SYSTEM|0102|300
|
||||
SYSTEM|0103|400
|
||||
SYSTEM|0104|500
|
||||
SYSTEM|0105|600
|
||||
SYSTEM|0106|700
|
||||
SYSTEM|0107|800
|
||||
SYSTEM|0108|900
|
||||
SYSTEM|0109|1000
|
||||
SYSTEM|0110|č
|
||||
SYSTEM|0111|ěčíóń
|
||||
SYSTEM|0112|
|
||||
SYSTEM|0165|đîâíî
|
||||
SYSTEM|0166|č îäíŕ äĺń˙ňŕ˙
|
||||
SYSTEM|0167|č äâĺ äĺń˙ňűő
|
||||
SYSTEM|0168|č ňđč äĺń˙ňűő
|
||||
SYSTEM|0169|č ÷ĺňűđĺ äĺń˙ňűő
|
||||
SYSTEM|0170|č ď˙ňü äĺń˙ňűő
|
||||
SYSTEM|0171|č řĺńňü äĺń˙ňűő
|
||||
SYSTEM|0172|č ńĺěü äĺń˙ňűő
|
||||
SYSTEM|0173|č âîńĺěü äĺń˙ňűő
|
||||
SYSTEM|0174|č äĺâ˙ňü äĺń˙ňűő
|
||||
SYSTEM|volt0|âîëüň
|
||||
SYSTEM|volt1|âîëüň
|
||||
SYSTEM|volt2|âîëüňŕ
|
||||
SYSTEM|volt5|âîëüň
|
||||
SYSTEM|amp0|ŕěďĺđ
|
||||
SYSTEM|amp1|ŕěďĺđ
|
||||
SYSTEM|amp2|ŕěďĺđŕ
|
||||
SYSTEM|amp5|ŕěďĺđ
|
||||
SYSTEM|mamp0|ěčëëčŕěďĺđ
|
||||
SYSTEM|mamp1|ěčëëčŕěďĺđ
|
||||
SYSTEM|mamp2|ěčëëčŕěďĺđŕ
|
||||
SYSTEM|mamp5|ěčëëčŕěďĺđ
|
||||
SYSTEM|knot0|óçëîâ
|
||||
SYSTEM|knot1|óçĺë
|
||||
SYSTEM|knot2|óçëŕ
|
||||
SYSTEM|knot5|óçëîâ
|
||||
SYSTEM|mps0|ěĺňđîâ â ńĺęóíäó
|
||||
SYSTEM|mps1|ěĺňđ â ńĺęóíäó
|
||||
SYSTEM|mps2|ěĺňđŕ â ńĺęóíäó
|
||||
SYSTEM|mps5|ěĺňđîâ â ńĺęóíäó
|
||||
SYSTEM|celsius0|ăđŕäóńîâ
|
||||
SYSTEM|celsius1|ăđŕäóń
|
||||
SYSTEM|celsius2|ăđŕäóńŕ
|
||||
SYSTEM|celsius5|ăđŕäóńîâ
|
||||
SYSTEM|db0|äĺöčáĺë
|
||||
SYSTEM|db1|äĺöčáĺë
|
||||
SYSTEM|db2|äĺöčáĺëŕ
|
||||
SYSTEM|db5|äĺöčáĺë
|
||||
SYSTEM|degree0|ăđŕäóńîâ
|
||||
SYSTEM|degree1|ăđŕäóń
|
||||
SYSTEM|degree2|ăđŕäóńŕ
|
||||
SYSTEM|degree5|ăđŕäóńîâ
|
||||
SYSTEM|fahr0|ăđŕäóńîâ ďî ôŕđĺíăĺéňó
|
||||
SYSTEM|fahr1|ăđŕäóń ďî ôŕđĺíăĺéňó
|
||||
SYSTEM|fahr2|ăđŕäóńŕ ďî ôŕđĺíăĺéňó
|
||||
SYSTEM|fahr5|ăđŕäóńîâ ďî ôŕđĺíăĺéňó
|
||||
SYSTEM|foot0|ôóňîâ
|
||||
SYSTEM|foot1|ôóň
|
||||
SYSTEM|foot2|ôóňŕ
|
||||
SYSTEM|foot5|ôóňîâ
|
||||
SYSTEM|founce0|óíöčé
|
||||
SYSTEM|founce1|óíöč˙
|
||||
SYSTEM|founce2|óíöčč
|
||||
SYSTEM|founce5|óíöčé
|
||||
SYSTEM|fps0|ôóňîâ â ńĺęóíäó
|
||||
SYSTEM|fps1|ôóň â ńĺęóíäó
|
||||
SYSTEM|fps2|ôóňŕ â ńĺęóíäó
|
||||
SYSTEM|fps5|ôóňîâ â ńĺęóíäó
|
||||
SYSTEM|g0|äćč
|
||||
SYSTEM|g1|äćč
|
||||
SYSTEM|g2|äćč
|
||||
SYSTEM|g5|äćč
|
||||
SYSTEM|hour0|÷ŕńîâ
|
||||
SYSTEM|hour1|÷ŕń
|
||||
SYSTEM|hour2|÷ŕńŕ
|
||||
SYSTEM|hour5|÷ŕńîâ
|
||||
SYSTEM|kph0|ęčëîěĺňđîâ â ÷ŕń
|
||||
SYSTEM|kph1|ęčëîěĺňđ â ÷ŕń
|
||||
SYSTEM|kph2|ęčëîěĺňđŕ â ÷ŕń
|
||||
SYSTEM|kph5|ęčëîěĺňđîâ â ÷ŕń
|
||||
SYSTEM|mamph0|ěčëëčŕěďĺđ â ÷ŕń
|
||||
SYSTEM|mamph1|ěčëëčŕěďĺđ â ÷ŕń
|
||||
SYSTEM|mamph2|ěčëëčŕěďĺđŕ â ÷ŕń
|
||||
SYSTEM|mamph5|ěčëëčŕěďĺđ â ÷ŕń
|
||||
SYSTEM|meter0|ěĺňđîâ
|
||||
SYSTEM|meter1|ěĺňđ
|
||||
SYSTEM|meter2|ěĺňđŕ
|
||||
SYSTEM|meter5|ěĺňđîâ
|
||||
SYSTEM|minute0|ěčíóň
|
||||
SYSTEM|minute1|ěčíóňŕ
|
||||
SYSTEM|minute2|ěčíóňű
|
||||
SYSTEM|minute5|ěčíóň
|
||||
SYSTEM|ml0|ěčëëčëčňđîâ
|
||||
SYSTEM|ml1|ěčëëčëčňđ
|
||||
SYSTEM|ml2|ěčëëčëčňđŕ
|
||||
SYSTEM|ml5|ěčëëčëčňđîâ
|
||||
SYSTEM|mph0|ěčëü â ÷ŕń
|
||||
SYSTEM|mph1|ěčë˙ â ÷ŕń
|
||||
SYSTEM|mph2|ěčëč â ÷ŕń
|
||||
SYSTEM|mph5|ěčëü â ÷ŕń
|
||||
SYSTEM|mwatt0|ěčëëčâŕňň
|
||||
SYSTEM|mwatt1|ěčëëčâŕňň
|
||||
SYSTEM|mwatt2|ěčëëčâŕňňŕ
|
||||
SYSTEM|mwatt5|ěčëëčâŕňň
|
||||
SYSTEM|percent0|ďđîöĺíňîâ
|
||||
SYSTEM|percent1|ďđîöĺíň
|
||||
SYSTEM|percent2|ďđîöĺíňŕ
|
||||
SYSTEM|percent5|ďđîöĺíňîâ
|
||||
SYSTEM|radian0|đŕäčŕí
|
||||
SYSTEM|radian1|đŕäčŕí
|
||||
SYSTEM|radian2|đŕäčŕíŕ
|
||||
SYSTEM|radian5|đŕäčŕí
|
||||
SYSTEM|rpm0|îáîđîňîâ â ěčíóňó
|
||||
SYSTEM|rpm1|îáîđîň â ěčíóňó
|
||||
SYSTEM|rpm2|îáîđîňŕ â ěčíóňó
|
||||
SYSTEM|rpm5|îáîđîňîâ â ěčíóňó
|
||||
SYSTEM|second0|ńĺęóíä
|
||||
SYSTEM|second1|ńĺęóíäŕ
|
||||
SYSTEM|second2|ńĺęóíäű
|
||||
SYSTEM|second5|ńĺęóíä
|
||||
SYSTEM|watt0|âŕňň
|
||||
SYSTEM|watt1|âŕňň
|
||||
SYSTEM|watt2|âŕňňŕ
|
||||
SYSTEM|watt5|âŕňň
|
||||
SYSTEM|eebad|Îřčáęŕ ďŕě˙ňč
|
||||
SYSTEM|hello|Ňŕęč çäđŕâńňâóéňĺ!
|
||||
SYSTEM|inactiv|ß ňóň! Ďđî ěĺí˙ çŕáűëč!
|
||||
SYSTEM|lowbatt|Ŕęęóěóë˙ňîđ đŕçđ˙ćĺí
|
||||
SYSTEM|maxtrim|Ňđčěěĺđ ěŕęńčěóě
|
||||
SYSTEM|midtrim|Ňđčěěĺđ ďî öĺíňđó
|
||||
SYSTEM|mintrim|Ňđčěěĺđ ěčíčěóě
|
||||
SYSTEM|rssi_org|Ńëŕáűé ńčăíŕë!
|
||||
SYSTEM|rssi_red|Î÷ĺíü ńëŕáűé ńčăíŕë!
|
||||
SYSTEM|rxko|
|
||||
SYSTEM|sensorko|Ńĺíńîđ îňęëţ÷ĺí
|
||||
SYSTEM|servoko|
|
||||
SYSTEM|swalert|Ďđîâĺđü ňóěáëĺđű!
|
||||
SYSTEM|swr_red|Ďđîáëĺěű ń ŕíňĺííîé ďĺđĺäŕň÷čęŕ!
|
||||
SYSTEM|telemko|Ďîňĺđ˙í ńčăíŕë ňĺëĺěĺňđčč
|
||||
SYSTEM|telemok|Ňĺëĺěĺňđč˙ âîńńňŕíîâëĺíŕ
|
||||
SYSTEM|thralert|Óáĺđč ăŕç!
|
||||
SYSTEM|timovr1|Ňŕéěĺđ 1. Âđĺě˙ âűřëî
|
||||
SYSTEM|timovr2|Ňŕéěĺđ 2. Âđĺě˙ âűřëî
|
||||
SYSTEM|timovr3|Ňŕéěĺđ 3. Âđĺě˙ âűřëî
|
||||
SYSTEM|trainko|Ňđĺíĺđńęčé ńčăíŕë ďîňĺđ˙í
|
||||
SYSTEM|trainok|Ďî˙âčëń˙ ňđĺíĺđńęčé ńčăíŕë
|
||||
SYSTEM|0180|îäíŕ
|
||||
SYSTEM|0181|îäčííŕäöŕňü
|
||||
SYSTEM|0182|äâŕäöŕňü îäíŕ
|
||||
SYSTEM|0183|ňđčäöŕňü îäíŕ
|
||||
SYSTEM|0184|ńîđîę îäíŕ
|
||||
SYSTEM|0185|ď˙ňüäĺń˙ň îäíŕ
|
||||
SYSTEM|0186|řĺńňüäĺń˙ň îäíŕ
|
||||
SYSTEM|0187|ńĺěüäĺń˙ň îäíŕ
|
||||
SYSTEM|0188|âîńĺěüäĺń˙ň îäíŕ
|
||||
SYSTEM|0189|äĺâ˙íîńňî îäíŕ
|
||||
SYSTEM|0190|äâĺ
|
||||
SYSTEM|0191|äâĺíŕäöŕňü
|
||||
SYSTEM|0192|äâŕäöŕňü äâĺ
|
||||
SYSTEM|0193|ňđčäöŕňü äâĺ
|
||||
SYSTEM|0194|ńîđîę äâĺ
|
||||
SYSTEM|0195|ď˙ňüäĺń˙ň äâĺ
|
||||
SYSTEM|0196|řĺńňüäĺń˙ň äâĺ
|
||||
SYSTEM|0197|ńĺěüäĺń˙ň äâĺ
|
||||
SYSTEM|0198|âîńĺěüäĺń˙ň äâĺ
|
||||
SYSTEM|0199|äĺâ˙íîńňî äâĺ
|
||||
SYSTEM|0200|ňűń˙÷ŕ
|
||||
SYSTEM|0201|ňűń˙÷č
|
||||
SYSTEM|0202|ňűń˙÷
|
||||
@@ -34,7 +34,7 @@ docker exec companion rm -rf build
|
||||
if [ ! -f ${output}/companion/linux/companion22_${version}${suffix}_amd64.deb ]; then
|
||||
docker exec companion /opentx/code/tools/build-companion-release.sh /opentx/code /opentx/binaries/
|
||||
docker exec companion sh -c "cp /build/radio/src/lua/*.txt /opentx/binaries"
|
||||
cp -f binaries/*.deb ${output}/companion/linux/companion22_${version}_amd64.deb
|
||||
cp -f binaries/*.deb ${output}/companion/linux/companion22_${version}${suffix}_amd64.deb
|
||||
cp -f binaries/lua_fields_*.txt ${output}/firmware
|
||||
fi
|
||||
docker stop companion
|
||||
|
||||
@@ -52,8 +52,8 @@ else
|
||||
mkdir ${workdir}/sdcard/taranis-x7/SOUNDS
|
||||
cp -r ${workdir}/sdcard/horus/SOUNDS ${workdir}/sdcard/taranis-x9/
|
||||
cp -r ${workdir}/sdcard/horus/SOUNDS ${workdir}/sdcard/taranis-x7/
|
||||
cd ${workdir}/sdcard/horus && zip -r ${output}/x12/sdcard-horus-${sdcard_version}.zip *
|
||||
cd ${workdir}/sdcard/taranis-x9 && zip -r ${output}/x9/sdcard-taranis-x9-${sdcard_version}.zip *
|
||||
cd ${workdir}/sdcard/taranis-x7 && zip -r ${output}/x7/sdcard-taranis-x7-${sdcard_version}.zip *
|
||||
cd ${workdir}/sdcard/horus && zip -r ${output}/opentx-x12s/sdcard-horus-${sdcard_version}.zip *
|
||||
cd ${workdir}/sdcard/taranis-x9 && zip -r ${output}/opentx-x9d/sdcard-taranis-x9-${sdcard_version}.zip *
|
||||
cd ${workdir}/sdcard/taranis-x7 && zip -r ${output}/opentx-x7/sdcard-taranis-x7-${sdcard_version}.zip *
|
||||
rm -Rf ${workdir}/sdcard
|
||||
fi
|
||||
|
||||
@@ -6,7 +6,7 @@ branch=2.2
|
||||
docker=release22
|
||||
workdir=/home/opentx/release22
|
||||
output=/var/www/html/2.2
|
||||
version=2.2.0
|
||||
version=2.2.1
|
||||
|
||||
cd ${workdir}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user