diff --git a/companion/src/appdata.cpp b/companion/src/appdata.cpp index 6874cfbe3..395dd68be 100644 --- a/companion/src/appdata.cpp +++ b/companion/src/appdata.cpp @@ -20,7 +20,7 @@ AppData g; // ** CompStoreObj class******************** void CompStoreObj::clear (const QString tag1, const QString tag2, const QString tag3) { - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); if (tag2.isEmpty()) { settings.remove(tag1); @@ -43,7 +43,7 @@ void CompStoreObj::clear (const QString tag1, const QString tag2, const QString void CompStoreObj::store(const QByteArray newArray, QByteArray &array, const QString tag, const QString group1, const QString group2 ) { - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); if (!group1.isEmpty()) settings.beginGroup(group1); if (!group2.isEmpty()) settings.beginGroup(group2); @@ -56,7 +56,7 @@ void CompStoreObj::store(const QByteArray newArray, QByteArray &array, const QSt void CompStoreObj::store(const QStringList newSList, QStringList &stringList, const QString tag, const QString group1, const QString group2 ) { - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); if (!group1.isEmpty()) settings.beginGroup(group1); if (!group2.isEmpty()) settings.beginGroup(group2); @@ -69,7 +69,7 @@ void CompStoreObj::store(const QStringList newSList, QStringList &stringList, co void CompStoreObj::store(const QString newString, QString &string, const QString tag, const QString group1, const QString group2 ) { - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); if (!group1.isEmpty()) settings.beginGroup(group1); if (!group2.isEmpty()) settings.beginGroup(group2); @@ -82,7 +82,7 @@ void CompStoreObj::store(const QString newString, QString &string, const QString void CompStoreObj::store(const bool newTruth, bool &truth, const QString tag, const QString group1, const QString group2 ) { - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); if (!group1.isEmpty()) settings.beginGroup(group1); if (!group2.isEmpty()) settings.beginGroup(group2); @@ -95,7 +95,7 @@ void CompStoreObj::store(const bool newTruth, bool &truth, const QString tag, co void CompStoreObj::store(const int newNumber, int &number, const QString tag, const QString group1, const QString group2 ) { - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); if (!group1.isEmpty()) settings.beginGroup(group1); if (!group2.isEmpty()) settings.beginGroup(group2); @@ -109,7 +109,7 @@ void CompStoreObj::store(const int newNumber, int &number, const QString tag, co // Retrieval functions void CompStoreObj::retrieve( QByteArray &array, const QString tag, const QString def, const QString group1, const QString group2 ) { - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); if (!group1.isEmpty()) settings.beginGroup(group1); if (!group2.isEmpty()) settings.beginGroup(group2); @@ -121,7 +121,7 @@ void CompStoreObj::retrieve( QByteArray &array, const QString tag, const QString void CompStoreObj::retrieve( QStringList &stringList, const QString tag, const QString def, const QString group1, const QString group2 ) { - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); if (!group1.isEmpty()) settings.beginGroup(group1); if (!group2.isEmpty()) settings.beginGroup(group2); @@ -133,7 +133,7 @@ void CompStoreObj::retrieve( QStringList &stringList, const QString tag, const Q void CompStoreObj::retrieve( QString &string, const QString tag, const QString def, const QString group1, const QString group2 ) { - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); if (!group1.isEmpty()) settings.beginGroup(group1); if (!group2.isEmpty()) settings.beginGroup(group2); @@ -145,7 +145,7 @@ void CompStoreObj::retrieve( QString &string, const QString tag, const QString d void CompStoreObj::retrieve( bool &truth, const QString tag, const bool def, const QString group1, const QString group2 ) { - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); if (!group1.isEmpty()) settings.beginGroup(group1); if (!group2.isEmpty()) settings.beginGroup(group2); @@ -157,7 +157,7 @@ void CompStoreObj::retrieve( bool &truth, const QString tag, const bool def, con void CompStoreObj::retrieve( int &number, const QString tag, const int def, const QString group1, const QString group2 ) { - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); if (!group1.isEmpty()) settings.beginGroup(group1); if (!group2.isEmpty()) settings.beginGroup(group2); @@ -241,7 +241,7 @@ JStickData::JStickData() void JStickData::remove() { // Remove all JStickData values from settings file - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); settings.beginGroup( "JsCalibration" ); settings.remove( QString( "stick%1_axe").arg(index) ); settings.remove( QString( "stick%1_min").arg(index) ); @@ -256,7 +256,7 @@ void JStickData::remove() bool JStickData::existsOnDisk() { - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); settings.beginGroup("JsCalibration"); int axe = settings.value( QString("stick%1_axe").arg(index), -1 ).toInt(); settings.endGroup(); @@ -377,7 +377,7 @@ Profile& Profile::operator=(const Profile& rhs) void Profile::remove() { // Remove all profile values from settings file - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); settings.beginGroup("Profiles"); settings.remove(QString("profile%1").arg(index)); settings.endGroup(); @@ -388,7 +388,7 @@ void Profile::remove() bool Profile::existsOnDisk() { - QSettings settings(PRODUCT, COMPANY); + QSettings settings(COMPANY, PRODUCT); settings.beginGroup("Profiles"); settings.beginGroup(QString("profile%1").arg(index)); QStringList keyList = settings.allKeys(); @@ -577,11 +577,43 @@ AppData::AppData() for (int i=0; i #include -#define COMPANY "OpenTX Companion" -#define PRODUCT "OpenTX" +#define COMPANY "OpenTX" +#define PRODUCT "Companion 2.1" #define MAX_PROFILES 15 #define MAX_JOYSTICKS 8 diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index 7575b63f2..3fd6e5ee2 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -533,15 +533,19 @@ QString RawSwitch::toString() SwitchUp('C'), QString::fromUtf8("SC-"), SwitchDn('C'), SwitchUp('D'), QString::fromUtf8("SD-"), SwitchDn('D'), SwitchUp('E'), QString::fromUtf8("SE-"), SwitchDn('E'), - SwitchUp('F'), SwitchDn('F'), + SwitchUp('F'), QString::fromUtf8("SF-"), SwitchDn('F'), SwitchUp('G'), QString::fromUtf8("SG-"), SwitchDn('G'), - SwitchUp('H'), SwitchDn('H'), - SwitchUp('I'), SwitchDn('I'), - SwitchUp('J'), SwitchDn('J'), - SwitchUp('K'), SwitchDn('K'), - SwitchUp('L'), SwitchDn('L'), - SwitchUp('M'), SwitchDn('M'), - SwitchUp('N'), SwitchDn('N'), + SwitchUp('H'), QString::fromUtf8("SH-"), SwitchDn('H'), + SwitchUp('I'), QString::fromUtf8("SI-"), SwitchDn('I'), + SwitchUp('J'), QString::fromUtf8("SJ-"), SwitchDn('J'), + SwitchUp('K'), QString::fromUtf8("SK-"), SwitchDn('K'), + SwitchUp('L'), QString::fromUtf8("SL-"), SwitchDn('L'), + SwitchUp('M'), QString::fromUtf8("SM-"), SwitchDn('M'), + SwitchUp('N'), QString::fromUtf8("SN-"), SwitchDn('N'), + SwitchUp('O'), QString::fromUtf8("SO-"), SwitchDn('O'), + SwitchUp('P'), QString::fromUtf8("SP-"), SwitchDn('P'), + SwitchUp('Q'), QString::fromUtf8("SQ-"), SwitchDn('Q'), + SwitchUp('R'), QString::fromUtf8("SR-"), SwitchDn('R'), }; static const QString logicalSwitches[] = { @@ -991,14 +995,7 @@ void LimitData::clear() GeneralSettings::SwitchInfo GeneralSettings::switchInfoFromSwitchPositionTaranis(unsigned int index) { - if (index <= 3*5) - return SwitchInfo((index-1)/3, (index-1)%3); - else if (index <= 17) - return SwitchInfo(5, index==17 ? 2 : 0); - else if (index <= 20) - return SwitchInfo(6, index-18); - else - return SwitchInfo(7+(index-21)/2, 2*((index-21)%2)); + return SwitchInfo((index-1)/3, (index-1)%3); } bool GeneralSettings::switchPositionAllowedTaranis(int index) const @@ -1011,7 +1008,12 @@ bool GeneralSettings::switchPositionAllowedTaranis(int index) const else if (info.position == 1) return switchConfig[info.index] == SWITCH_3POS; else - return true; + return switchConfig[info.index] != SWITCH_NONE; +} + +bool GeneralSettings::switchSourceAllowedTaranis(int index) const +{ + return switchConfig[index] != SWITCH_NONE; } GeneralSettings::GeneralSettings() diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 0684fafd4..e26d88581 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -906,7 +906,8 @@ class SensorData { char label[4+1]; unsigned int unit; unsigned int prec; - unsigned int inputFlags; + bool autoOffset; + bool filter; bool logs; bool persistent; @@ -1095,7 +1096,8 @@ class GeneralSettings { bool enableTelemetryAlarm; BeeperMode hapticMode; unsigned int stickMode; // TODO enum - int timezone; + int timezone; + bool adjustRTC; bool optrexDisplay; unsigned int inactivityTimer; bool minuteBeep; @@ -1172,6 +1174,7 @@ class GeneralSettings { static SwitchInfo switchInfoFromSwitchPositionTaranis(unsigned int index); bool switchPositionAllowedTaranis(int index) const; + bool switchSourceAllowedTaranis(int index) const; }; class RadioData { @@ -1246,7 +1249,6 @@ enum Capability { NoTelemetryProtocol, TelemetryCustomScreens, TelemetryCustomScreensFieldsPerLine, - TelemetryTimeshift, TelemetryMaxMultiplier, HasVario, HasVarioSink, diff --git a/companion/src/firmwares/opentx/opentxeeprom.cpp b/companion/src/firmwares/opentx/opentxeeprom.cpp index e319a9730..aba9061c6 100644 --- a/companion/src/firmwares/opentx/opentxeeprom.cpp +++ b/companion/src/firmwares/opentx/opentxeeprom.cpp @@ -2696,7 +2696,8 @@ class SensorField: public TransformedField { internalField.Append(new UnsignedField<1>(sensor.type, "type")); internalField.Append(new UnsignedField<5>(sensor.unit, "unit")); internalField.Append(new UnsignedField<2>(sensor.prec, "prec")); - internalField.Append(new UnsignedField<2>(sensor.inputFlags, "inputFlags")); + internalField.Append(new BoolField<1>(sensor.autoOffset)); + internalField.Append(new BoolField<1>(sensor.filter)); internalField.Append(new BoolField<1>(sensor.logs)); internalField.Append(new BoolField<1>(sensor.persistent)); internalField.Append(new SpareBitsField<4>()); @@ -2729,6 +2730,8 @@ class SensorField: public TransformedField { if (sensor.type == SensorData::TYPE_CUSTOM) { sensor.id = _id; sensor.instance = _instance; + sensor.ratio = _param & 0xFF; + sensor.offset = (_param >> 16) & 0xFF; } else { sensor.persistentValue = _id; @@ -3012,8 +3015,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne } if (IS_ARM(board) && version >= 217) { - int size = IS_TARANIS_X9E(board) ? 32 : 8; - for (int i=0; i(modelData.potsWarningEnabled[i])); else @@ -3031,7 +3033,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne } if (IS_ARM(board) && version >= 216) { - for (int i=0; i < GetCurrentFirmware()->getCapability(Pots); i++) { + for (int i=0; i < MAX_POTS(board)+MAX_SLIDERS(board); i++) { internalField.Append(new SignedField<8>(modelData.potPosition[i])); } } @@ -3157,7 +3159,12 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum bo internalField.Append(new UnsignedField<2>(generalData.stickMode)); internalField.Append(new SignedField<5>(generalData.timezone)); - internalField.Append(new SpareBitsField<1>()); + if (version >= 217 && IS_TARANIS(board)) { + internalField.Append(new BoolField<1>(generalData.adjustRTC)); + } + else { + internalField.Append(new SpareBitsField<1>()); + } internalField.Append(new UnsignedField<8>(generalData.inactivityTimer)); if (IS_9X(board) && version >= 215) { @@ -3269,7 +3276,7 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum bo internalField.Append(new SpareBitsField<64>()); else if (IS_TARANIS(board)) internalField.Append(new SpareBitsField<16>()); - + if (version >= 217) { for (int i=0; iunits_CB->setCurrentIndex(generalSettings.imperial); } - if (!firmware->getCapability(TelemetryTimeshift)) { - ui->label_timezone->hide(); - ui->timezoneSB->hide(); - ui->timezoneSB->setDisabled(true); - ui->gpsFormatCB->hide(); - ui->gpsFormatLabel->hide(); - } - ui->gpsFormatCB->setCurrentIndex(generalSettings.gpsFormat); ui->timezoneSB->setValue(generalSettings.timezone); + if (IS_TARANIS(firmware->getBoard())) { + ui->adjustRTC->setChecked(generalSettings.adjustRTC); + } + else { + ui->adjustRTC->hide(); + } + if (!firmware->getCapability(OptrexDisplay)) { ui->label_displayType->hide(); ui->displayTypeCB->setDisabled(true); @@ -533,6 +532,13 @@ void GeneralSetupPanel::on_timezoneSB_editingFinished() emit modified(); } +void GeneralSetupPanel::on_adjustRTC_stateChanged(int) +{ + generalSettings.adjustRTC = ui->adjustRTC->isChecked(); + emit modified(); +} + + void GeneralSetupPanel::on_inactimerSB_editingFinished() { generalSettings.inactivityTimer = ui->inactimerSB->value(); diff --git a/companion/src/generaledit/generalsetup.h b/companion/src/generaledit/generalsetup.h index 3b72b475d..f884d0062 100644 --- a/companion/src/generaledit/generalsetup.h +++ b/companion/src/generaledit/generalsetup.h @@ -19,7 +19,7 @@ class GeneralSetupPanel : public GeneralPanel private slots: void on_splashScreenChkB_stateChanged(int); void on_splashScreenDuration_currentIndexChanged(int index); - void on_alarmwarnChkB_stateChanged(int ); + void on_alarmwarnChkB_stateChanged(int); void on_gpsFormatCB_currentIndexChanged(int index); void on_displayTypeCB_currentIndexChanged(int index); void on_BLBright_SB_editingFinished(); @@ -29,6 +29,7 @@ class GeneralSetupPanel : public GeneralPanel void on_faimode_CB_stateChanged(int ); void on_speakerPitchSB_editingFinished(); void on_timezoneSB_editingFinished(); + void on_adjustRTC_stateChanged(int); void on_hapticStrength_valueChanged(); void on_soundModeCB_currentIndexChanged(int index); void on_beeperlenCB_currentIndexChanged(int index); diff --git a/companion/src/generaledit/generalsetup.ui b/companion/src/generaledit/generalsetup.ui index cd269787a..156464e5c 100644 --- a/companion/src/generaledit/generalsetup.ui +++ b/companion/src/generaledit/generalsetup.ui @@ -6,101 +6,29 @@ 0 0 - 689 - 606 + 758 + 635 Form - + GPS Coordinates - - - - Speaker Pitch (spkr only) - - - - - - - + Measurement Units - - - - - hh° (N/S) mm' ss''.dd - - - - - NMEA - - - - - - - -14 - - - 12 - - - 0 - - - - - - - Voice Language - - - - - - - Timeshift from UTC - - - - - - - - Metric - - - - - Imperial - - - - - - - - Country Code - - - - @@ -119,6 +47,144 @@ + + + + FAI Mode + + + + + + + Country Code + + + + + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + Show splash screen on startup + + + Show splash screen on startup + + + + + + + + + + + 0 + 0 + + + + + --- + + + + + 2s + + + + + 3s + + + + + 4s + + + + + 6s + + + + + 8s + + + + + 10s + + + + + 15s + + + + + + + + + + + hh° (N/S) mm' ss''.dd + + + + + NMEA + + + + + + + + + Metric + + + + + Imperial + + + + + + + + Speaker Pitch (spkr only) + + + + + + + + + + Voice Language + + + @@ -195,6 +261,41 @@ + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" text-decoration: underline;">Warnings</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These will define startup warnings.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Throttle warning - will alert if the throttle is not at idle during startup</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Switch warning - will alert if switches are not in their defaul position</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Memory warning - will alert if there's not a lot of memory left</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Silent mode warning - will alert you if the beeper is set to quiet (0)</p></body></html> + + + + + + true + + + @@ -247,7 +348,7 @@ - + Qt::Vertical @@ -1278,41 +1379,6 @@ Acceptable values are 5v..10v - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" text-decoration: underline;">Warnings</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">These will define startup warnings.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Throttle warning - will alert if the throttle is not at idle during startup</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Switch warning - will alert if switches are not in their defaul position</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Memory warning - will alert if there's not a lot of memory left</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Silent mode warning - will alert you if the beeper is set to quiet (0)</p></body></html> - - - - - - true - - - @@ -1404,85 +1470,6 @@ p, li { white-space: pre-wrap; } - - - - - - - 0 - 0 - - - - - 16777215 - 16777215 - - - - Show splash screen on startup - - - Show splash screen on startup - - - - - - - - - - - 0 - 0 - - - - - --- - - - - - 2s - - - - - 3s - - - - - 4s - - - - - 6s - - - - - 8s - - - - - 10s - - - - - 15s - - - - - - @@ -1607,19 +1594,6 @@ p, li { white-space: pre-wrap; } - - - - - 0 - 0 - - - - Stick reverse (order as above) - - - @@ -1633,13 +1607,6 @@ p, li { white-space: pre-wrap; } - - - - FAI Mode - - - @@ -1694,38 +1661,6 @@ Mode 4: - - - - - - 1 - - - - - - - 2 - - - - - - - 3 - - - - - - - 4 - - - - - @@ -1862,17 +1797,7 @@ Mode 4: - - - - If you enable FAI, you loose the vario, the play functions, the telemetry screen. This function cannot be disabled by the radio. - - - - - - - + @@ -1885,7 +1810,7 @@ Mode 4: - + @@ -1932,6 +1857,98 @@ p, li { white-space: pre-wrap; } + + + + Timeshift from UTC + + + + + + + + + 1 + + + + + + + 2 + + + + + + + 3 + + + + + + + 4 + + + + + + + + + + 0 + 0 + + + + Stick reverse + + + + + + + + + -14 + + + 12 + + + 0 + + + + + + + If you enable FAI, you loose the vario, the play functions, the telemetry screen. This function cannot be disabled by the radio. + + + Qt::RightToLeft + + + Adjust RTC + + + + + + + + + If you enable FAI, you loose the vario, the play functions, the telemetry screen. This function cannot be disabled by the radio. + + + + + + diff --git a/companion/src/helpers.cpp b/companion/src/helpers.cpp index eaaeaca17..4640f298f 100644 --- a/companion/src/helpers.cpp +++ b/companion/src/helpers.cpp @@ -412,9 +412,10 @@ void populateSwitchCB(QComboBox *b, const RawSwitch & value, const GeneralSettin } for (int i=-GetCurrentFirmware()->getCapability(SwitchesPositions); i<0; i++) { - if (IS_TARANIS(GetCurrentFirmware()->getBoard()) && !generalSettings.switchPositionAllowedTaranis(i)) - continue; item = RawSwitch(SWITCH_TYPE_SWITCH, i); + if (IS_TARANIS(GetCurrentFirmware()->getBoard()) && !generalSettings.switchPositionAllowedTaranis(i)){ + continue; + } b->addItem(item.toString(), item.toValue()); if (item == value) b->setCurrentIndex(b->count()-1); } @@ -433,9 +434,10 @@ void populateSwitchCB(QComboBox *b, const RawSwitch & value, const GeneralSettin } for (int i=1; i<=GetCurrentFirmware()->getCapability(SwitchesPositions); i++) { - if (IS_TARANIS(GetCurrentFirmware()->getBoard()) && !generalSettings.switchPositionAllowedTaranis(i)) - continue; item = RawSwitch(SWITCH_TYPE_SWITCH, i); + if (IS_TARANIS(GetCurrentFirmware()->getBoard()) && !generalSettings.switchPositionAllowedTaranis(i)){ + continue; + } b->addItem(item.toString(), item.toValue()); if (item == value) b->setCurrentIndex(b->count()-1); } @@ -525,7 +527,7 @@ void populateGVCB(QComboBox *b, int value) } } -void populateSourceCB(QComboBox *b, const RawSource & source, const ModelData * model, unsigned int flags) +void populateSourceCB(QComboBox *b, const RawSource & source, const GeneralSettings generalSettings, const ModelData * model, unsigned int flags) { BoardEnum board = GetCurrentFirmware()->getBoard(); RawSource item; @@ -590,6 +592,11 @@ void populateSourceCB(QComboBox *b, const RawSource & source, const ModelData * for (int i=0; igetCapability(Switches); i++) { item = RawSource(SOURCE_TYPE_SWITCH, i); b->addItem(item.toString(model), item.toValue()); + if (IS_TARANIS(GetCurrentFirmware()->getBoard()) && !generalSettings.switchSourceAllowedTaranis(i)) { + QModelIndex index = b->model()->index(b->count()-1, 0); + QVariant v(0); + b->model()->setData(index, v, Qt::UserRole - 1); + } if (item == source) b->setCurrentIndex(b->count()-1); } diff --git a/companion/src/helpers.h b/companion/src/helpers.h index c57cdbda6..035176e58 100644 --- a/companion/src/helpers.h +++ b/companion/src/helpers.h @@ -115,7 +115,7 @@ QString getPhasesStr(unsigned int phases, ModelData * model); // void populateGVarCB(QComboBox *b, int value, int min, int max,int pgvars=5); //TODO: Clean Up void populateGVCB(QComboBox *b, int value); -void populateSourceCB(QComboBox *b, const RawSource &source, const ModelData * model, unsigned int flags); +void populateSourceCB(QComboBox *b, const RawSource &source, const GeneralSettings generalSettings, const ModelData * model, unsigned int flags); QString getPhaseName(int val, const char * phasename=NULL); QString getInputStr(ModelData * model, int index); QString image2qstring(QImage image); diff --git a/companion/src/mainwindow.cpp b/companion/src/mainwindow.cpp index 72cfa5e4c..c26a81ff4 100644 --- a/companion/src/mainwindow.cpp +++ b/companion/src/mainwindow.cpp @@ -68,7 +68,7 @@ #include "radiointerface.h" #include "progressdialog.h" -#define OPENTX_COMPANION_DOWNLOADS "http://downloads-20.open-tx.org/companion" +#define OPENTX_COMPANION_DOWNLOADS "http://downloads-21.open-tx.org/companion" #define DONATE_STR "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QUZ48K4SEXDP2" #ifdef __APPLE__ @@ -121,6 +121,7 @@ MainWindow::MainWindow(): } QTimer::singleShot(updateDelay, this, SLOT(doAutoUpdates())); QTimer::singleShot(updateDelay, this, SLOT(displayWarnings())); + updateSdsyncAction(); QStringList strl = QApplication::arguments(); QString str; @@ -916,13 +917,12 @@ void MainWindow::updateMenus() printAct->setEnabled(hasSelection); loadbackupAct->setEnabled(hasMdiChild); compareAct->setEnabled(activeMdiChild()); - updateSdsyncAction(); updateRecentFileActions(); updateProfilesActions(); updateLanguageActions(); updateIconSizeActions(); updateIconThemeActions(); - setWindowTitle(tr("OpenTX Companion - FW: %1 - Profile: %2").arg(GetCurrentFirmware()->getName()).arg( g.profile[g.id()].name() )); + setWindowTitle(tr("OpenTX Companion 2.1 - FW: %1 - Profile: %2").arg(GetCurrentFirmware()->getName()).arg( g.profile[g.id()].name() )); } MdiChild *MainWindow::createMdiChild() diff --git a/companion/src/modeledit/customfunctions.cpp b/companion/src/modeledit/customfunctions.cpp index f7c8d0eab..76aea0805 100644 --- a/companion/src/modeledit/customfunctions.cpp +++ b/companion/src/modeledit/customfunctions.cpp @@ -264,6 +264,7 @@ void CustomFunctionsPanel::playMusic() phononCurrent = -1; } else { + playBT[phononCurrent]->setIcon(CompanionIcon("play.png")); phononCurrent = index; clickObject->clear(); #ifdef __APPLE__ @@ -714,18 +715,18 @@ void CustomFunctionsPanel::populateFuncParamCB(QComboBox *b, uint function, unsi b->setCurrentIndex(value); } else if (function==FuncVolume) { - populateSourceCB(b, RawSource(value), model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_TRIMS); + populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_TRIMS); } else if (function==FuncPlayValue) { - populateSourceCB(b, RawSource(value), model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_SWITCHES|POPULATE_GVARS|POPULATE_TRIMS|POPULATE_TELEMETRYEXT); + populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_SWITCHES|POPULATE_GVARS|POPULATE_TRIMS|POPULATE_TELEMETRYEXT); } else if (function>=FuncAdjustGV1 && function<=FuncAdjustGVLast) { switch (adjustmode) { case 1: - populateSourceCB(b, RawSource(value), model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_TRIMS|POPULATE_SWITCHES); + populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_TRIMS|POPULATE_SWITCHES); break; case 2: - populateSourceCB(b, RawSource(value), model, POPULATE_GVARS); + populateSourceCB(b, RawSource(value), generalSettings, model, POPULATE_GVARS); break; case 3: b->clear(); diff --git a/companion/src/modeledit/expodialog.cpp b/companion/src/modeledit/expodialog.cpp index 51c51200b..54f7fb61f 100644 --- a/companion/src/modeledit/expodialog.cpp +++ b/companion/src/modeledit/expodialog.cpp @@ -60,7 +60,7 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G if (firmware->getCapability(VirtualInputs)) { ui->inputName->setMaxLength(4); - populateSourceCB(ui->sourceCB, ed->srcRaw, &model, POPULATE_SOURCES | POPULATE_SWITCHES | POPULATE_TRIMS | POPULATE_TELEMETRY); + populateSourceCB(ui->sourceCB, ed->srcRaw, generalSettings, &model, POPULATE_SOURCES | POPULATE_SWITCHES | POPULATE_TRIMS | POPULATE_TELEMETRY); ui->sourceCB->removeItem(0); } else { diff --git a/companion/src/modeledit/flightmodes.cpp b/companion/src/modeledit/flightmodes.cpp index 3218b6105..3fba520c5 100644 --- a/companion/src/modeledit/flightmodes.cpp +++ b/companion/src/modeledit/flightmodes.cpp @@ -209,7 +209,9 @@ void FlightModePanel::update() if (ui->gvGB->isVisible()) { for (int i=0; isetText(model->gvars_names[i]); + if (firmware->getCapability(GvarsName) > 0) { + gvNames[i]->setText(model->gvars_names[i]); + } gvValues[i]->setDisabled(model->isGVarLinked(phaseIdx, i)); gvValues[i]->setValue(model->getGVarValue(phaseIdx, i)); if (IS_TARANIS(GetEepromInterface()->getBoard()) && phaseIdx == 0) { diff --git a/companion/src/modeledit/heli.cpp b/companion/src/modeledit/heli.cpp index 53d6541f9..391c1c328 100644 --- a/companion/src/modeledit/heli.cpp +++ b/companion/src/modeledit/heli.cpp @@ -48,11 +48,11 @@ void HeliPanel::update() lock = true; ui->swashType->setCurrentIndex(model->swashRingData.type); - populateSourceCB(ui->swashCollectiveSource, model->swashRingData.collectiveSource, model, POPULATE_SOURCES | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS); + populateSourceCB(ui->swashCollectiveSource, model->swashRingData.collectiveSource, generalSettings, model, POPULATE_SOURCES | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS); ui->swashRingVal->setValue(model->swashRingData.value); if (firmware->getCapability(VirtualInputs)) { - populateSourceCB(ui->swashElevatorSource, model->swashRingData.elevatorSource, model, POPULATE_SOURCES | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS); - populateSourceCB(ui->swashAileronSource, model->swashRingData.aileronSource, model, POPULATE_SOURCES | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS); + populateSourceCB(ui->swashElevatorSource, model->swashRingData.elevatorSource, generalSettings, model, POPULATE_SOURCES | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS); + populateSourceCB(ui->swashAileronSource, model->swashRingData.aileronSource, generalSettings, model, POPULATE_SOURCES | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS); ui->swashElevatorWeight->setValue(model->swashRingData.elevatorWeight); ui->swashAileronWeight->setValue(model->swashRingData.aileronWeight); ui->swashCollectiveWeight->setValue(model->swashRingData.collectiveWeight); diff --git a/companion/src/modeledit/logicalswitches.cpp b/companion/src/modeledit/logicalswitches.cpp index 59cd184c2..4228b7141 100644 --- a/companion/src/modeledit/logicalswitches.cpp +++ b/companion/src/modeledit/logicalswitches.cpp @@ -261,6 +261,7 @@ void LogicalSwitchesPanel::edited() } emit modified(); lock = false; + updateLine(i); } } @@ -300,7 +301,7 @@ void LogicalSwitchesPanel::setSwitchWidgetVisibility(int i) { case LS_FAMILY_VOFS: mask |= SOURCE1_VISIBLE; - populateSourceCB(cswitchSource1[i], source, model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); + populateSourceCB(cswitchSource1[i], source, generalSettings, model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); cswitchOffset[i]->setDecimals(range.decimals); cswitchOffset[i]->setSingleStep(range.step); if (source.isTimeBased()) { @@ -345,8 +346,8 @@ void LogicalSwitchesPanel::setSwitchWidgetVisibility(int i) break; case LS_FAMILY_VCOMP: mask |= SOURCE1_VISIBLE | SOURCE2_VISIBLE; - populateSourceCB(cswitchSource1[i], RawSource(model->logicalSw[i].val1), model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); - populateSourceCB(cswitchSource2[i], RawSource(model->logicalSw[i].val2), model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); + populateSourceCB(cswitchSource1[i], RawSource(model->logicalSw[i].val1), generalSettings, model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); + populateSourceCB(cswitchSource2[i], RawSource(model->logicalSw[i].val2), generalSettings, model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_TRIMS | POPULATE_SWITCHES | POPULATE_TELEMETRY | (firmware->getCapability(GvarsInCS) ? POPULATE_GVARS : 0)); break; case LS_FAMILY_TIMER: mask |= VALUE1_VISIBLE | VALUE2_VISIBLE; diff --git a/companion/src/modeledit/mixerdialog.cpp b/companion/src/modeledit/mixerdialog.cpp index 89596f610..12a754673 100644 --- a/companion/src/modeledit/mixerdialog.cpp +++ b/companion/src/modeledit/mixerdialog.cpp @@ -19,7 +19,7 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, G this->setWindowTitle(tr("DEST -> CH%1").arg(md->destCh)); - populateSourceCB(ui->sourceCB, md->srcRaw, &model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS); + populateSourceCB(ui->sourceCB, md->srcRaw, generalSettings, &model, POPULATE_SOURCES | POPULATE_SCRIPT_OUTPUTS | POPULATE_VIRTUAL_INPUTS | POPULATE_SWITCHES | POPULATE_TRIMS); ui->sourceCB->removeItem(0); int limit = firmware->getCapability(OffsetWeight); diff --git a/companion/src/modeledit/setup.cpp b/companion/src/modeledit/setup.cpp index ebc9abf6f..01a57b716 100644 --- a/companion/src/modeledit/setup.cpp +++ b/companion/src/modeledit/setup.cpp @@ -495,19 +495,16 @@ SetupPanel::SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & gen slider->setTickPosition(QSlider::TicksBothSides); slider->setMinimumSize(QSize(30, 50)); slider->setMaximumSize(QSize(50, 50)); + slider->setSingleStep(1); + slider->setPageStep(1); + slider->setTickInterval(1); if (IS_TARANIS(board)) { label->setText(switchesX9D[i]); - slider->setMaximum(2); - slider->setSingleStep(generalSettings.switchConfig[i] == GeneralSettings::SWITCH_3POS ? 1 : 2); - slider->setPageStep(slider->singleStep()); - slider->setTickInterval(slider->singleStep()); + slider->setMaximum(generalSettings.switchConfig[i] == GeneralSettings::SWITCH_3POS ? 2 : 1); } else { label->setText(switches9X[i]); slider->setMaximum(i==0 ? 2 : 1); - slider->setSingleStep(1); - slider->setPageStep(1); - slider->setTickInterval(1); } cb->setProperty("index", i); ui->switchesStartupLayout->addWidget(label, 0, i+1); @@ -735,12 +732,25 @@ void SetupPanel::updateBeepCenter() void SetupPanel::updateStartupSwitches() { lock = true; + + unsigned int switchStates = model->switchWarningStates; + unsigned int value; for (int i=0; iproperty("index").toInt(); bool enabled = !(model->switchWarningEnable & (1 << index)); + if (IS_TARANIS(GetEepromInterface()->getBoard())) { + value = (switchStates >> 2*index) & 0x03; + if (generalSettings.switchConfig[index] != GeneralSettings::SWITCH_3POS && value == 2) + value = 1; + } + else { + value = (i==0 ? switchStates & 0x3 : switchStates & 0x1); + switchStates >>= (i==0 ? 2 : 1); + } + slider->setValue(value); slider->setEnabled(enabled); cb->setChecked(enabled); } @@ -760,16 +770,20 @@ void SetupPanel::startupSwitchEdited(int value) mask = 0x03 << shift; } else { - if (index == 1) { + if (index == 0) { mask = 0x03; } else { - shift = index; + shift = index+1; mask = 0x01 << shift; } } model->switchWarningStates &= ~mask; + + if (IS_TARANIS(GetEepromInterface()->getBoard()) && generalSettings.switchConfig[index] != GeneralSettings::SWITCH_3POS) { + if (value == 1) value = 2; + } if (value) { model->switchWarningStates |= (value << shift); diff --git a/companion/src/modeledit/telemetry.cpp b/companion/src/modeledit/telemetry.cpp index ee2215640..d90196f5e 100644 --- a/companion/src/modeledit/telemetry.cpp +++ b/companion/src/modeledit/telemetry.cpp @@ -486,7 +486,8 @@ TelemetrySensorPanel::TelemetrySensorPanel(QWidget *parent, SensorData & sensor, ui->instance->setField(sensor.instance); ui->ratio->setField(sensor.ratio); ui->offset->setField(sensor.offset); - ui->inputFlags->setField(sensor.inputFlags); + ui->autoOffset->setField(sensor.autoOffset); + ui->filter->setField(sensor.filter); ui->logs->setField(sensor.logs); ui->persistent->setField(sensor.persistent); ui->gpsSensor->setField(sensor.gps); @@ -557,13 +558,28 @@ void TelemetrySensorPanel::update() ui->instance->show(); ui->formula->hide(); ratioFieldsDisplayed = (sensor.unit != SensorData::UNIT_GPS && sensor.unit != SensorData::UNIT_DATETIME); - ui->offset->setDecimals(sensor.prec); precDisplayed = (sensor.unit != SensorData::UNIT_GPS && sensor.unit != SensorData::UNIT_DATETIME); + ui->offset->setMaximum((sensor.prec > 0 ? sensor.prec == 2 ? 30000 : 3000 : 300)); + ui->offset->setMinimum((sensor.prec > 0 ? sensor.prec == 2 ? -30000 : -3000 : -300)); + + if (sensor.unit == SensorData::UNIT_RPMS) { + ui->offset->setDecimals(0); + ui->ratio->setDecimals(0); + ui->autoOffset->hide(); + ui->ratio->setMinimum(1); + ui->offset->setMinimum(1); + } + else { + ui->offset->setDecimals(sensor.prec); + ui->ratio->setDecimals(1); + } } - ui->ratioLabel->setVisible(ratioFieldsDisplayed); + ui->ratioLabel->setVisible(ratioFieldsDisplayed && sensor.unit != SensorData::UNIT_RPMS); + ui->bladesLabel->setVisible(sensor.unit == SensorData::UNIT_RPMS); ui->ratio->setVisible(ratioFieldsDisplayed); - ui->offsetLabel->setVisible(ratioFieldsDisplayed); + ui->offsetLabel->setVisible(ratioFieldsDisplayed && sensor.unit != SensorData::UNIT_RPMS); + ui->multiplierLabel->setVisible(sensor.unit == SensorData::UNIT_RPMS); ui->offset->setVisible(ratioFieldsDisplayed); ui->precLabel->setVisible(precDisplayed); ui->prec->setVisible(precDisplayed); @@ -642,7 +658,7 @@ void TelemetrySensorPanel::on_unit_currentIndexChanged(int index) } } -void TelemetrySensorPanel::on_prec_editingFinished() +void TelemetrySensorPanel::on_prec_valueChanged() { if (!lock) { sensor.prec = ui->prec->value(); diff --git a/companion/src/modeledit/telemetry.h b/companion/src/modeledit/telemetry.h index 9be399456..c7f993e3f 100644 --- a/companion/src/modeledit/telemetry.h +++ b/companion/src/modeledit/telemetry.h @@ -95,7 +95,7 @@ class TelemetrySensorPanel: public ModelPanel void on_type_currentIndexChanged(int index); void on_formula_currentIndexChanged(int index); void on_unit_currentIndexChanged(int index); - void on_prec_editingFinished(); + void on_prec_valueChanged(); protected: void updateSourcesComboBox(AutoComboBox * cb, bool negative); diff --git a/companion/src/modeledit/telemetry_sensor.ui b/companion/src/modeledit/telemetry_sensor.ui index 8d9e03ce1..c00836fb7 100644 --- a/companion/src/modeledit/telemetry_sensor.ui +++ b/companion/src/modeledit/telemetry_sensor.ui @@ -13,7 +13,7 @@ Form - + 0 @@ -419,6 +419,46 @@ Percentage (%) + + + Energy (mAh) + + + + + Power (W) + + + + + RF Power (dBm) + + + + + RPM + + + + + Acceleration (g) + + + + + Heading (°) + + + + + Volume (mL) + + + + + Volume (US fl.Oz.) + + @@ -466,6 +506,13 @@ + + + + Blades + + + @@ -478,7 +525,10 @@ - 1 + 0 + + + 0.000000000000000 3000.000000000000000 @@ -498,6 +548,13 @@ + + + + Multiplier + + + @@ -507,42 +564,37 @@ - 2 + 0 - -12.800000000000001 + -30000.000000000000000 - 12.699999999999999 + 30000.000000000000000 - 0.100000000000000 + 1.000000000000000 - - - - 0 - 0 - + + + Qt::LeftToRight + + + Auto Offset + + + + + + + Qt::LeftToRight + + + Filter - - - --- - - - - - Auto Offset - - - - - Filtered - - diff --git a/companion/src/simulation/simulatorinterface.cpp b/companion/src/simulation/simulatorinterface.cpp index 4c767f900..181ffd78a 100644 --- a/companion/src/simulation/simulatorinterface.cpp +++ b/companion/src/simulation/simulatorinterface.cpp @@ -31,7 +31,7 @@ void registerSimulators() { QDir dir("."); QStringList filters; -#if !defined __GNUC__ +#if (!defined __GNUC__) || (defined __CYGWIN__) filters << "*-simulator.dll"; #else filters << "*-simulator.so"; diff --git a/companion/src/simulation/telemetrysimu.cpp b/companion/src/simulation/telemetrysimu.cpp index 6fab9de7c..e435fe634 100644 --- a/companion/src/simulation/telemetrysimu.cpp +++ b/companion/src/simulation/telemetrysimu.cpp @@ -61,11 +61,14 @@ void generateSportPacket(uint8_t * packet, uint8_t dataId, uint8_t prim, uint16_ void TelemetrySimulator::generateTelemetryFrame() { static int item = 0; + bool ok = true; uint8_t buffer[FRSKY_SPORT_PACKET_SIZE]; + memset(buffer, 0, sizeof(buffer)); switch(item++) { case 0: - generateSportPacket(buffer, 1, DATA_FRAME, RSSI_ID, LIMIT(0, ui->Rssi->text().toInt(), 0xFF)); + if (ui->Rssi->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, RSSI_ID, LIMIT(0, ui->Rssi->text().toInt(&ok, 0), 0xFF)); break; case 1: @@ -75,20 +78,127 @@ void TelemetrySimulator::generateTelemetryFrame() break; case 2: - generateSportPacket(buffer, 1, DATA_FRAME, SWR_ID, LIMIT(0, ui->Swr->text().toInt(), 0xFF)); + if (ui->Swr->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, SWR_ID, LIMIT(0, ui->Swr->text().toInt(&ok, 0), 0xFFFF)); break; case 3: - generateSportPacket(buffer, 1, DATA_FRAME, ADC1_ID, LIMIT(0, ui->A1->text().toInt(), 0xFF)); + if (ui->A1->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, ADC1_ID, LIMIT(0, ui->A1->text().toInt(&ok, 0), 0xFF)); break; case 4: - generateSportPacket(buffer, 1, DATA_FRAME, ADC2_ID, LIMIT(0, ui->A2->text().toInt(), 0xFF)); + if (ui->A2->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, ADC2_ID, LIMIT(0, ui->A2->text().toInt(&ok, 0), 0xFF)); + break; + + case 5: + if (ui->A3->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, A3_FIRST_ID, LIMIT(0, ui->A3->text().toInt(&ok, 0), 0xFFFFFFFF)); + break; + + case 6: + if (ui->A4->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, A4_FIRST_ID, LIMIT(0, ui->A4->text().toInt(&ok, 0), 0xFFFFFFFF)); + break; + + case 7: + if (ui->T1->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, T1_FIRST_ID, LIMIT(-0x7FFFFFFF, ui->T1->text().toInt(&ok, 0), 0x7FFFFFFF)); + break; + + case 8: + if (ui->T2->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, T2_FIRST_ID, LIMIT(-0x7FFFFFFF, ui->T2->text().toInt(&ok, 0), 0x7FFFFFFF)); + break; + + case 9: + if (ui->rpm->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, RPM_FIRST_ID, LIMIT(0, ui->rpm->text().toInt(&ok, 0), 0xFFFF)); + break; + + case 10: + if (ui->fuel->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, FUEL_FIRST_ID, LIMIT(0, ui->fuel->text().toInt(&ok, 0), 0xFFFF)); + break; + + case 11: + if (ui->aspeed->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, AIR_SPEED_FIRST_ID, LIMIT(0, ui->aspeed->text().toInt(&ok, 0), 0xFFFFFFFF)); + break; + + case 12: + if (ui->vspeed->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, VARIO_FIRST_ID, LIMIT(-0x7FFFFFFF, ui->vspeed->text().toInt(&ok, 0), 0x7FFFFFFF)); + break; + + case 13: + if (ui->valt->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, ALT_FIRST_ID, LIMIT(-0x7FFFFFFF, ui->valt->text().toInt(&ok, 0), 0x7FFFFFFF)); + break; + + case 14: + if (ui->accx->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, ACCX_FIRST_ID, LIMIT(-0x7FFFFFFF, ui->accx->text().toInt(&ok, 0), 0x7FFFFFFF)); + break; + + case 15: + if (ui->accy->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, ACCY_FIRST_ID, LIMIT(-0x7FFFFFFF, ui->accy->text().toInt(&ok, 0), 0x7FFFFFFF)); + break; + + case 16: + if (ui->accz->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, ACCZ_FIRST_ID, LIMIT(-0x7FFFFFFF, ui->accz->text().toInt(&ok, 0), 0x7FFFFFFF)); + break; + + case 17: + if (ui->vfas->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, VFAS_FIRST_ID, LIMIT(0, ui->vfas->text().toInt(&ok, 0), 0xFFFFFFFF)); + break; + + case 18: + if (ui->curr->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, CURR_FIRST_ID, LIMIT(0, ui->curr->text().toInt(&ok, 0), 0xFFFFFFFF)); + break; + + case 19: + if (ui->cells->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, CELLS_FIRST_ID, LIMIT(0, ui->cells->text().toInt(&ok, 0), 0xFFFFFFFF)); + break; + + case 20: + if (ui->gps_alt->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, GPS_ALT_FIRST_ID, LIMIT(-0x7FFFFFFF, ui->gps_alt->text().toInt(&ok, 0), 0x7FFFFFFF)); + break; + + case 21: + if (ui->gps_speed->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, GPS_SPEED_FIRST_ID, LIMIT(0, ui->gps_speed->text().toInt(&ok, 0), 0xFFFFFFFF)); + break; + + case 22: + if (ui->gps_course->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, GPS_COURS_FIRST_ID, LIMIT(0, ui->gps_course->text().toInt(&ok, 0), 0xFFFFFFFF)); + break; + + case 23: + if (ui->gps_time->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, GPS_TIME_DATE_FIRST_ID, LIMIT(0, ui->gps_time->text().toInt(&ok, 0), 0xFFFFFFFF)); + break; + + case 24: + if (ui->gps_latlon->text().length()) + generateSportPacket(buffer, 1, DATA_FRAME, GPS_LONG_LATI_FIRST_ID, LIMIT(0, ui->gps_latlon->text().toInt(&ok, 0), 0xFFFFFFFF)); break; default: item = 0; return; } - simulator->sendTelemetry(buffer, 9); + + if (ok && buffer[0]) + simulator->sendTelemetry(buffer, FRSKY_SPORT_PACKET_SIZE); + else + onTimerEvent(); } diff --git a/companion/src/simulation/telemetrysimu.ui b/companion/src/simulation/telemetrysimu.ui index 6f6a661a4..5b3705dab 100644 --- a/companion/src/simulation/telemetrysimu.ui +++ b/companion/src/simulation/telemetrysimu.ui @@ -6,67 +6,342 @@ 0 0 - 184 - 165 + 278 + 384 Telemetry Simulator + + 6 + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Vario Altitude + + + V-ALT + + + + + + + Vario Vertical Speed + + + V-VSPD + + + + + + + + + + + + + + + + ACCZ + + + + + + + GPS Time + + + GPS-T + + + + + + + + + + ACCX + + + + + + - + - - + + - + + + + + + + GPS Lat/Lon + + + GPS-LL + + + + + + + VFAS + + + FAS-V + + + + + + + GPS Speed + + + GPS-S + + + + + + + CELLS + + + + + + + + + + + + + + + + ACCY + + + + + + + GPS Course + + + GPS-C + + + + + + + + + + + + + GPS Altitude + + + GPS-A + + + + + + + CURRENT + + + FAS-C + + + + + + + 30 + + + + RSSI - - - - - + + - A1 + 75 - + SWR - - + + + + FR_ID_AIR_SPEED + - simulate + ASPD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A1 + + + + A2 - - + + + + A3 + + + + + + + A4 + + + + + + + Temperature 1 + + + T1 + + + + + + + Temperature 2 + + + T2 + + + + + + + RPM + + + + + + + FUEL + + + + + + + When enabled, sends any non-blank values as simulated telemetry data. + + + simulate + + + + + + <html><head/><body><p>Start with <span style=" font-style:italic;">0x</span> for hex, <span style=" font-style:italic;">0</span> for octal, otherwise decimal.<br/>Numeric entry only. Blank values are not sent.</p></body></html> + + + + + Simulate + Rssi + Swr + diff --git a/companion/targets/windows/companion-msys.nsi.in b/companion/targets/windows/companion-msys.nsi.in index 88434ac76..dbb9ad683 100644 --- a/companion/targets/windows/companion-msys.nsi.in +++ b/companion/targets/windows/companion-msys.nsi.in @@ -173,8 +173,10 @@ Section "Uninstall" Delete "$INSTDIR\Uninstall.exe" Delete "$INSTDIR\lang\*.*" + Delete "$INSTDIR\phonon_backend\*.*" RMDir "$INSTDIR\lang" + RMDir "$INSTDIR\phonon_backend" RMDir "$INSTDIR" ${unregisterExtension} ".bin" "BIN File" diff --git a/companion/targets/windows/companion-vs.nsi.in b/companion/targets/windows/companion-vs.nsi.in index 5da4e2a71..00e732d42 100644 --- a/companion/targets/windows/companion-vs.nsi.in +++ b/companion/targets/windows/companion-vs.nsi.in @@ -12,14 +12,14 @@ ;General ;Name and file - Name "OpenTX Companion" + Name "OpenTX Companion 2.1" OutFile "companionInstall_@C9X_VERSION@.exe" ;Default installation folder - InstallDir "$PROGRAMFILES\OpenTX" + InstallDir "$PROGRAMFILES\OpenTX\Companion 2.1" ;Get installation folder from registry if available - InstallDirRegKey HKCU "Software\OpenTX" "" + InstallDirRegKey HKCU "Software\OpenTX\Companion 2.1" "" ;Compressor options SetCompressor /FINAL /SOLID lzma @@ -66,7 +66,7 @@ ;Start Menu Folder Page Configuration !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" - !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\OpenTX" + !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\OpenTX\Companion 2.1" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" !insertmacro MUI_PAGE_STARTMENU Application $StartMenuFolder @@ -77,7 +77,7 @@ !define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_FINISHPAGE_RUN !define MUI_FINISHPAGE_RUN_CHECKED - !define MUI_FINISHPAGE_RUN_TEXT "Launch OpenTX Companion" + !define MUI_FINISHPAGE_RUN_TEXT "Launch OpenTX Companion 2.1" !define MUI_FINISHPAGE_RUN_FUNCTION "LaunchLink" # !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED # !define MUI_FINISHPAGE_SHOWREADME $INSTDIR\readme.txt @@ -134,7 +134,7 @@ Section "OpenTX Companion" SecDummy SetOutPath "$INSTDIR" ;Store installation folder - WriteRegStr HKCU "Software\OpenTX" "" $INSTDIR + WriteRegStr HKCU "Software\OpenTX\Companion 2.1" "" $INSTDIR ;Associate with extentions ,bin and .hex ${registerExtension} "$INSTDIR\companion.exe" ".bin" "BIN_File" @@ -147,20 +147,20 @@ Section "OpenTX Companion" SecDummy WriteUninstaller "$INSTDIR\Uninstall.exe" ;Registry information for add/remove programs - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX" "DisplayName" "OpenTX Companion" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX" "UninstallString" "$\"$INSTDIR\Uninstall.exe$\"" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX" "DisplayIcon" "$\"$INSTDIR\companion.exe$\"" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX" "Publisher" "OpenTX" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX" "URLInfoAbout" "http://www.open-tx.org" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\ImageMaker" "QuietUninstallString" "$\"$INSTDIR\Uninstall.exe$\" /S" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX Companion 2.1" "DisplayName" "OpenTX Companion 2.1" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX Companion 2.1" "UninstallString" "$\"$INSTDIR\Uninstall.exe$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX Companion 2.1" "DisplayIcon" "$\"$INSTDIR\companion.exe$\"" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX Companion 2.1" "Publisher" "OpenTX" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX Companion 2.1" "URLInfoAbout" "http://www.open-tx.org" + WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX Companion 2.1" "QuietUninstallString" "$\"$INSTDIR\Uninstall.exe$\" /S" !insertmacro MUI_STARTMENU_WRITE_BEGIN Application ;Create shortcuts CreateDirectory "$SMPROGRAMS\$StartMenuFolder" - CreateShortCut "$SMPROGRAMS\$StartMenuFolder\companion.lnk" "$INSTDIR\companion.exe" - CreateShortCut "$SMPROGRAMS\$StartMenuFolder\simulator.lnk" "$INSTDIR\simulator.exe" - CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" "$INSTDIR\Uninstall.exe" + CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Companion 2.1.lnk" "$INSTDIR\companion.exe" + CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Firmware Simulator 2.1.lnk" "$INSTDIR\simulator.exe" + CreateShortCut "$SMPROGRAMS\$StartMenuFolder\Uninstall Companion 2.1.lnk" "$INSTDIR\Uninstall.exe" !insertmacro MUI_STARTMENU_WRITE_END @@ -207,8 +207,10 @@ Section "Uninstall" Delete "$INSTDIR\Uninstall.exe" Delete "$INSTDIR\lang\*.*" + Delete "$INSTDIR\phonon_backend\*.*" RMDir "$INSTDIR\lang" + RMDir "$INSTDIR\phonon_backend" RMDir "$INSTDIR" ${unregisterExtension} ".bin" "BIN File" @@ -218,13 +220,13 @@ Section "Uninstall" !insertmacro MUI_STARTMENU_GETFOLDER Application $StartMenuFolder - Delete "$SMPROGRAMS\$StartMenuFolder\companion.lnk" - Delete "$SMPROGRAMS\$StartMenuFolder\simulator.lnk" - Delete "$SMPROGRAMS\$StartMenuFolder\Uninstall.lnk" + Delete "$SMPROGRAMS\$StartMenuFolder\Companion 2.1.lnk" + Delete "$SMPROGRAMS\$StartMenuFolder\Firmware Simulator 2.1.lnk" + Delete "$SMPROGRAMS\$StartMenuFolder\Uninstall Companion 2.1.lnk" RMDir "$SMPROGRAMS\$StartMenuFolder" - DeleteRegKey /ifempty HKCU "Software\OpenTX" - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX" + DeleteRegKey /ifempty HKCU "Software\OpenTX Companion 2.1" + DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenTX Companion 2.1" SectionEnd diff --git a/radio/src/Makefile b/radio/src/Makefile index 57a6085c1..365cea2a0 100644 --- a/radio/src/Makefile +++ b/radio/src/Makefile @@ -307,7 +307,7 @@ MIXERS_MONITOR = NO # Use newlib-nano # Values = NO, YES -NANO = YES +NANO = NO # Use custom bin based allocator for Lua # Values = NO, YES @@ -853,7 +853,7 @@ ifeq ($(PCB), TARANIS) INCDIRS += targets/taranis $(THIRDPARTY) $(COOSDIR) $(COOSDIR)/kernel $(COOSDIR)/portable ifeq ($(PCBREV), REV9E) STM32LIBPATH = $(THIRDPARTY)/STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries - CPPDEFS += -DHSE_VALUE=16800000 + CPPDEFS += -DHSE_VALUE=12000000 CPPDEFS += -DSTM32F40_41xxx EXTRAINCDIRS += $(STM32LIBPATH)/CMSIS/Device/ST/STM32F4xx/Include $(STM32LIBPATH)/CMSIS/Include $(STM32LIBPATH)/STM32F4xx_StdPeriph_Driver/inc else diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index 52e97764b..0308ea8a1 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -974,6 +974,12 @@ void audioEvent(unsigned int index, unsigned int freq) if (index == AU_NONE) return; +#if defined(HAPTIC) + if (index >= AU_THROTTLE_ALERT) { + haptic.event(index); //do this before audio to help sync timings + } +#endif + if (index <= AU_ERROR || (index >= AU_WARNING1 && index < AU_FRSKY_FIRST)) { if (g_eeGeneral.alarmsFlash) { flashCounter = FLASH_DURATION; diff --git a/radio/src/eeprom_common.h b/radio/src/eeprom_common.h index 9f0b36433..ffb1c74e9 100644 --- a/radio/src/eeprom_common.h +++ b/radio/src/eeprom_common.h @@ -58,6 +58,7 @@ bool eeModelExists(uint8_t id); void eeLoadModelName(uint8_t id, char *name); void eeLoadModel(uint8_t id); bool eeConvert(); +void eeErase(bool warn); void ConvertModel(int id, int version); uint8_t eeFindEmptyModel(uint8_t id, bool down); void selectModel(uint8_t sub); diff --git a/radio/src/eeprom_rlc.cpp b/radio/src/eeprom_rlc.cpp index 2887d1fc4..af85d5810 100644 --- a/radio/src/eeprom_rlc.cpp +++ b/radio/src/eeprom_rlc.cpp @@ -1016,6 +1016,21 @@ void eeLoadModel(uint8_t id) } } +void eeErase(bool warn) +{ + generalDefault(); + + if (warn) { + ALERT(STR_EEPROMWARN, STR_BADEEPROMDATA, AU_BAD_EEPROM); + } + + MESSAGE(STR_EEPROMWARN, STR_EEPROMFORMATTING, NULL, AU_EEPROM_FORMATTING); + EeFsFormat(); + theFile.writeRlc(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&g_eeGeneral, sizeof(EEGeneral), true); + modelDefault(0); + theFile.writeRlc(FILE_MODEL(0), FILE_TYP_MODEL, (uint8_t*)&g_model, sizeof(g_model), true); +} + // TODO merge this code with eeprom_arm.cpp one void eeReadAll() { @@ -1023,19 +1038,7 @@ void eeReadAll() EeFsck() < 0 || !eeLoadGeneral()) { - generalDefault(); - - ALERT(STR_EEPROMWARN, STR_BADEEPROMDATA, AU_BAD_EEPROM); - - MESSAGE(STR_EEPROMWARN, STR_EEPROMFORMATTING, NULL, AU_EEPROM_FORMATTING); - - EeFsFormat(); - - theFile.writeRlc(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&g_eeGeneral, sizeof(EEGeneral), true); - - modelDefault(0); - - theFile.writeRlc(FILE_MODEL(0), FILE_TYP_MODEL, (uint8_t*)&g_model, sizeof(g_model), true); + eeErase(true); } else { eeLoadModelHeaders(); diff --git a/radio/src/fonts/std/font_05x07_extra.png b/radio/src/fonts/std/font_05x07_extra.png index c6f1f39ff..0d75d0b1b 100644 Binary files a/radio/src/fonts/std/font_05x07_extra.png and b/radio/src/fonts/std/font_05x07_extra.png differ diff --git a/radio/src/functions.cpp b/radio/src/functions.cpp index 5ec076707..9e2450ef0 100644 --- a/radio/src/functions.cpp +++ b/radio/src/functions.cpp @@ -355,6 +355,12 @@ void evalFunctions() break; #endif } +#if defined(CPUARM) + if (CFN_PARAM(cfn)>=FUNC_RESET_PARAM_FIRST_TELEM) { + TelemetryItem * telemetryItem = & telemetryItems[CFN_PARAM(cfn)-FUNC_RESET_PARAM_FIRST_TELEM]; + telemetryItem->clear(); + } +#endif break; #if defined(CPUARM) diff --git a/radio/src/gui/9X/helpers.cpp b/radio/src/gui/9X/helpers.cpp index ba3cc6624..3832385fd 100755 --- a/radio/src/gui/9X/helpers.cpp +++ b/radio/src/gui/9X/helpers.cpp @@ -105,9 +105,6 @@ bool isInputSourceAvailable(int source) if (source>=MIXSRC_Rud && source<=MIXSRC_MAX) return true; - if (source>=MIXSRC_Rud && source<=MIXSRC_MAX) - return true; - if (source>=MIXSRC_TrimRud && sourcetype == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0) -#define SENSOR_PREC_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME) ? HIDDEN_ROW : (uint8_t)0) -#define SENSOR_PARAM1_ROWS (sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0 -#define SENSOR_PARAM2_ROWS (sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS || (sensor->type==TELEM_TYPE_CALCULATED && sensor->formula==TELEM_FORMULA_CONSUMPTION)) ? HIDDEN_ROW : (uint8_t)0 -#define SENSOR_PARAM3_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula < TELEM_FORMULA_MULTIPLY) ? (uint8_t)0 : HIDDEN_ROW -#define SENSOR_PARAM4_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula < TELEM_FORMULA_MULTIPLY) ? (uint8_t)0 : HIDDEN_ROW +#define SENSOR_UNIT_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) +#define SENSOR_PREC_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) +#define SENSOR_PARAM1_ROWS (sensor->unit >= UNIT_FIRST_VIRTUAL ? HIDDEN_ROW : (uint8_t)0) +#define SENSOR_PARAM2_ROWS (sensor->unit == UNIT_RPMS || sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS || (sensor->type==TELEM_TYPE_CALCULATED && (sensor->formula==TELEM_FORMULA_CONSUMPTION || sensor->formula==TELEM_FORMULA_TOTALIZE)) ? HIDDEN_ROW : (uint8_t)0) +#define SENSOR_PARAM3_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula < TELEM_FORMULA_MULTIPLY) ? (uint8_t)0 : HIDDEN_ROW +#define SENSOR_PARAM4_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula < TELEM_FORMULA_MULTIPLY) ? (uint8_t)0 : HIDDEN_ROW +#define SENSOR_AUTOOFFSET_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) +#define SENSOR_FILTER_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) +#define SENSOR_PERSISTENT_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) void menuModelSensor(uint8_t event) { TelemetrySensor * sensor = & g_model.telemetrySensors[s_currIdx]; - SUBMENU(STR_MENUSENSOR, SENSOR_FIELD_MAX, {0, 0, sensor->type == TELEM_TYPE_CALCULATED ? (uint8_t)0 : (uint8_t)1, SENSOR_UNIT_ROWS, SENSOR_PREC_ROWS, SENSOR_PARAM1_ROWS, SENSOR_PARAM2_ROWS, SENSOR_PARAM3_ROWS, SENSOR_PARAM4_ROWS, 0 }); + SUBMENU(STR_MENUSENSOR, SENSOR_FIELD_MAX, {0, 0, sensor->type == TELEM_TYPE_CALCULATED ? (uint8_t)0 : (uint8_t)1, SENSOR_UNIT_ROWS, SENSOR_PREC_ROWS, SENSOR_PARAM1_ROWS, SENSOR_PARAM2_ROWS, SENSOR_PARAM3_ROWS, SENSOR_PARAM4_ROWS, SENSOR_AUTOOFFSET_ROWS, SENSOR_FILTER_ROWS, SENSOR_PERSISTENT_ROWS, 0 }); lcd_outdezAtt(PSIZE(TR_MENUSENSOR)*FW+1, 0, s_currIdx+1, INVERS|LEFT); putsTelemetryChannelValue(SENSOR_2ND_COLUMN, 0, s_currIdx, getValue(MIXSRC_FIRST_TELEM+3*s_currIdx), LEFT); @@ -279,12 +284,13 @@ void menuModelSensor(uint8_t event) break; case SENSOR_FIELD_TYPE: - sensor->type = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_TYPE, "\012Custom\0 Calculated", sensor->type, 0, 1, attr, event); + sensor->type = selectMenuItem(SENSOR_2ND_COLUMN, y, NO_INDENT(STR_TYPE), STR_VSENSORTYPES, sensor->type, 0, 1, attr, event); if (attr && checkIncDec_Ret) { sensor->instance = 0; if (sensor->type == TELEM_TYPE_CALCULATED) { sensor->param = 0; - sensor->inputFlags = 0; + sensor->autoOffset = 0; + sensor->filter = 0; } } break; @@ -307,7 +313,7 @@ void menuModelSensor(uint8_t event) } } else { - sensor->formula = selectMenuItem(SENSOR_2ND_COLUMN, y, "Formula", "\010Add\0 Average\0Min\0 Max\0 MultiplyCell\0 ConsumptDistance", sensor->formula, 0, TELEM_FORMULA_DIST, attr, event); + sensor->formula = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_FORMULA, STR_VFORMULAS, sensor->formula, 0, TELEM_FORMULA_LAST, attr, event); if (attr && checkIncDec_Ret) { sensor->param = 0; if (sensor->formula == TELEM_FORMULA_CELL) { @@ -339,7 +345,7 @@ void menuModelSensor(uint8_t event) break; case SENSOR_FIELD_PRECISION: - sensor->prec = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_PRECISION, "\005PREC0PREC1PREC2", sensor->prec, 0, 2, attr, event); + sensor->prec = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_PRECISION, STR_VPREC, sensor->prec, 0, 2, attr, event); if (attr && checkIncDec_Ret) { telemetryItems[s_currIdx].clear(); } @@ -348,7 +354,7 @@ void menuModelSensor(uint8_t event) case SENSOR_FIELD_PARAM1: if (sensor->type == TELEM_TYPE_CALCULATED) { if (sensor->formula == TELEM_FORMULA_CELL) { - lcd_putsLeft(y, "Cells sensor"); + lcd_putsLeft(y, STR_CELLSENSOR); putsMixerSource(SENSOR_2ND_COLUMN, y, sensor->cell.source ? MIXSRC_FIRST_TELEM+3*(sensor->cell.source-1) : 0, attr); if (attr) { sensor->cell.source = checkIncDec(event, sensor->cell.source, 0, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isCellsSensor); @@ -356,7 +362,7 @@ void menuModelSensor(uint8_t event) break; } else if (sensor->formula == TELEM_FORMULA_DIST) { - lcd_putsLeft(y, "GPS sensor"); + lcd_putsLeft(y, STR_GPSSENSOR); putsMixerSource(SENSOR_2ND_COLUMN, y, sensor->dist.gps ? MIXSRC_FIRST_TELEM+3*(sensor->dist.gps-1) : 0, attr); if (attr) { sensor->dist.gps = checkIncDec(event, sensor->dist.gps, 0, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isGPSSensor); @@ -364,7 +370,7 @@ void menuModelSensor(uint8_t event) break; } else if (sensor->formula == TELEM_FORMULA_CONSUMPTION) { - lcd_putsLeft(y, "Amps sensor"); + lcd_putsLeft(y, STR_CURRENTSENSOR); putsMixerSource(SENSOR_2ND_COLUMN, y, sensor->consumption.source ? MIXSRC_FIRST_TELEM+3*(sensor->consumption.source-1) : 0, attr); if (attr) { sensor->consumption.source = checkIncDec(event, sensor->consumption.source, 0, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isCurrentSensor); @@ -373,24 +379,32 @@ void menuModelSensor(uint8_t event) } } else { - lcd_putsLeft(y, "Ratio"); - if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.ratio, 0, 30000); - if (sensor->custom.ratio == 0) - lcd_putcAtt(SENSOR_2ND_COLUMN, y, '-', attr); - else - lcd_outdezAtt(SENSOR_2ND_COLUMN, y, sensor->custom.ratio, LEFT|attr|PREC1); - break; + if (sensor->unit == UNIT_RPMS) { + lcd_putsLeft(y, NO_INDENT(STR_BLADES)); + if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.ratio, 1, 30000); + lcd_outdezAtt(SENSOR_2ND_COLUMN, y, sensor->custom.ratio, LEFT|attr); + break; + } + else { + lcd_putsLeft(y, STR_RATIO); + if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.ratio, 0, 30000); + if (sensor->custom.ratio == 0) + lcd_putcAtt(SENSOR_2ND_COLUMN, y, '-', attr); + else + lcd_outdezAtt(SENSOR_2ND_COLUMN, y, sensor->custom.ratio, LEFT|attr|PREC1); + break; + } } // no break case SENSOR_FIELD_PARAM2: if (sensor->type == TELEM_TYPE_CALCULATED) { if (sensor->formula == TELEM_FORMULA_CELL) { - sensor->cell.index = selectMenuItem(SENSOR_2ND_COLUMN, y, "Cell index", "\007Lowest\0001\0 2\0 3\0 4\0 5\0 6\0 HighestDelta\0", sensor->cell.index, 0, 8, attr, event); + sensor->cell.index = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_CELLINDEX, STR_VCELLINDEX, sensor->cell.index, 0, 8, attr, event); break; } else if (sensor->formula == TELEM_FORMULA_DIST) { - lcd_putsLeft(y, "Alt sensor"); + lcd_putsLeft(y, STR_ALTSENSOR); putsMixerSource(SENSOR_2ND_COLUMN, y, sensor->dist.alt ? MIXSRC_FIRST_TELEM+3*(sensor->dist.alt-1) : 0, attr); if (attr) { sensor->dist.alt = checkIncDec(event, sensor->dist.alt, 0, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isAltSensor); @@ -412,7 +426,7 @@ void menuModelSensor(uint8_t event) case SENSOR_FIELD_PARAM4: { - putsStrIdx(0, y, "Source", k-SENSOR_FIELD_PARAM1+1); + putsStrIdx(0, y, NO_INDENT(STR_SOURCE), k-SENSOR_FIELD_PARAM1+1); int8_t & source = sensor->calc.sources[k-SENSOR_FIELD_PARAM1]; if (attr) { source = checkIncDec(event, source, -TELEM_VALUES_MAX, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isSensorAvailable); @@ -427,12 +441,20 @@ void menuModelSensor(uint8_t event) break; } - case SENSOR_FIELD_INPUT_FLAGS: - sensor->inputFlags = selectMenuItem(SENSOR_2ND_COLUMN, y, "Options", "\013None\0 ""Auto Offset""Filter\0", sensor->inputFlags, 0, TELEM_INPUT_FLAGS_MAX, attr, event); + case SENSOR_FIELD_AUTOOFFSET: + ON_OFF_MENU_ITEM(sensor->autoOffset, SENSOR_2ND_COLUMN, y, STR_AUTOOFFSET, attr, event); + break; + + case SENSOR_FIELD_FILTER: + ON_OFF_MENU_ITEM(sensor->filter, SENSOR_2ND_COLUMN, y, STR_FILTER, attr, event); + break; + + case SENSOR_FIELD_PERSISTENT: + ON_OFF_MENU_ITEM(sensor->persistent, SENSOR_2ND_COLUMN, y, NO_INDENT(STR_PERSISTENT), attr, event); break; case SENSOR_FIELD_LOGS: - ON_OFF_MENU_ITEM(sensor->logs, SENSOR_2ND_COLUMN, y, "Logs", attr, event); + ON_OFF_MENU_ITEM(sensor->logs, SENSOR_2ND_COLUMN, y, STR_LOGS, attr, event); break; } @@ -552,6 +574,9 @@ void menuModelTelemetry(uint8_t event) s_currIdx = res; pushMenu(menuModelSensor); } + else { + POPUP_WARNING(STR_TELEMETRYFULL); + } } break; #endif diff --git a/radio/src/gui/9X/view_telemetry.cpp b/radio/src/gui/9X/view_telemetry.cpp index 79df6265b..bc78cd932 100755 --- a/radio/src/gui/9X/view_telemetry.cpp +++ b/radio/src/gui/9X/view_telemetry.cpp @@ -95,9 +95,9 @@ void displayGpsCoord(uint8_t y, char direction, int16_t bp, int16_t ap) lcd_outdezNAtt(lcdLastPos+FW+FW+1, y, mn, LEFT|LEADING0, 2); // mm before '.' lcd_vline(lcdLastPos, y, 2); uint16_t ss = ap * 6; - lcd_outdezAtt(lcdLastPos+3, y, ss / 1000, LEFT); // '' + lcd_outdezNAtt(lcdLastPos+3, y, ss / 1000, LEFT|LEADING0, 2); // '' lcd_plot(lcdLastPos, y+FH-2, 0); // small decimal point - lcd_outdezAtt(lcdLastPos+2, y, ss % 1000, LEFT); // '' + lcd_outdezNAtt(lcdLastPos+2, y, ss % 1000, LEFT|LEADING0, 3); // '' lcd_vline(lcdLastPos, y, 2); lcd_vline(lcdLastPos+2, y, 2); } diff --git a/radio/src/gui/Taranis/gui.h b/radio/src/gui/Taranis/gui.h index bbf3eca66..415c8197b 100755 --- a/radio/src/gui/Taranis/gui.h +++ b/radio/src/gui/Taranis/gui.h @@ -53,6 +53,9 @@ void displayScrollbar(coord_t x, coord_t y, coord_t h, uint16_t offset, uint16_t void displayMenuBar(const MenuItem *menu, int index); void displayProgressBar(const char *label); void updateProgressBar(int num, int den); +#if defined(REV9E) +void displayShutdownProgress(uint32_t progress); +#endif extern coord_t scrollbar_X; #define SET_SCROLLBAR_X(x) scrollbar_X = (x); diff --git a/radio/src/gui/Taranis/helpers.cpp b/radio/src/gui/Taranis/helpers.cpp index fbd3767cf..f5ada5618 100755 --- a/radio/src/gui/Taranis/helpers.cpp +++ b/radio/src/gui/Taranis/helpers.cpp @@ -38,14 +38,8 @@ uint8_t switchToMix(uint8_t source) { - if (source <= 5*3) - return MIXSRC_FIRST_SWITCH + (source-1) / 3; - else if (source <= 17) - return MIXSRC_SF; - else if (source <= 20) - return MIXSRC_SG; - else - return MIXSRC_SH; + div_t qr = div(source-1, 3); + return qr.quot+MIXSRC_FIRST_SWITCH; } int circularIncDec(int current, int inc, int min, int max, IsValueAvailable isValueAvailable) @@ -94,6 +88,10 @@ bool isSourceAvailable(int source) return IS_POT_AVAILABLE(POT1+source-MIXSRC_FIRST_POT); } + if (source>=MIXSRC_FIRST_SWITCH && source<=MIXSRC_LAST_SWITCH) { + return SWITCH_EXISTS(source-MIXSRC_FIRST_SWITCH); + } + #if !defined(HELI) if (source>=MIXSRC_CYC1 && source<=MIXSRC_CYC3) return false; @@ -109,7 +107,7 @@ bool isSourceAvailable(int source) return false; } - if (source>=MIXSRC_SW1 && source<=MIXSRC_LAST_LOGICAL_SWITCH) { + if (source>=MIXSRC_FIRST_LOGICAL_SWITCH && source<=MIXSRC_LAST_LOGICAL_SWITCH) { LogicalSwitchData * cs = lswAddress(source-MIXSRC_SW1); return (cs->func != LS_FUNC_NONE); } @@ -156,20 +154,22 @@ bool isInputSourceAvailable(int source) if (source>=MIXSRC_Rud && source<=MIXSRC_MAX) return true; - if (source>=MIXSRC_Rud && source<=MIXSRC_MAX) - return true; - - if (source>=MIXSRC_TrimRud && source=MIXSRC_FIRST_TRIM && source<=MIXSRC_LAST_TRIM) return true; + if (source>=MIXSRC_FIRST_SWITCH && source<=MIXSRC_LAST_SWITCH) + return SWITCH_EXISTS(source-MIXSRC_FIRST_SWITCH); + if (source>=MIXSRC_FIRST_CH && source<=MIXSRC_LAST_CH) return true; if (source>=MIXSRC_FIRST_TRAINER && source<=MIXSRC_LAST_TRAINER) return true; - if (source>=MIXSRC_FIRST_TELEM && source<=MIXSRC_LAST_TELEM) - return isTelemetryFieldAvailable(source-MIXSRC_FIRST_TELEM); + if (source>=MIXSRC_FIRST_TELEM && source<=MIXSRC_LAST_TELEM) { + div_t qr = div(source-MIXSRC_FIRST_TELEM, 3); + return isTelemetryFieldAvailable(qr.quot) && isTelemetryFieldComparisonAvailable(qr.quot); + } return false; } @@ -196,18 +196,12 @@ bool isSwitchAvailable(int swtch, SwitchContext context) swtch = -swtch; } -#if defined(REV9E) - if (swtch >= SWSRC_SA0 && swtch <= SWSRC_SR2) { + if (swtch >= SWSRC_SA0 && swtch <= SWSRC_LAST_SWITCH) { if (!SWITCH_EXISTS(index)) return false; if ((swtch-SWSRC_SA1)%3 == 0) return IS_3POS(index); } -#else - if (swtch == SWSRC_SA1 || swtch == SWSRC_SB1 || swtch == SWSRC_SC1 || swtch == SWSRC_SD1 || swtch == SWSRC_SE1 || swtch == SWSRC_SG1) { - return IS_3POS(index); - } -#endif if (swtch >= SWSRC_FIRST_MULTIPOS_SWITCH && swtch <= SWSRC_LAST_MULTIPOS_SWITCH) { int index = (swtch - SWSRC_FIRST_MULTIPOS_SWITCH) / XPOTS_MULTIPOS_COUNT; @@ -350,3 +344,14 @@ bool modelHasNotes() return isFileAvailable(filename); } +int getFirstAvailableSource(int min, int max, bool (*func)(int)) +{ + int retval = MIXSRC_NONE; + for (int i = min; i <= max; i++) { + if ((*func)(i)) { + retval = i; + break; + } + } + return retval; +} diff --git a/radio/src/gui/Taranis/lcd.cpp b/radio/src/gui/Taranis/lcd.cpp index e5a86bd78..e41ab8ed2 100755 --- a/radio/src/gui/Taranis/lcd.cpp +++ b/radio/src/gui/Taranis/lcd.cpp @@ -632,7 +632,7 @@ void putsStickName(coord_t x, coord_t y, uint8_t idx, LcdFlags att) } #endif -void putsMixerSource(coord_t x, coord_t y, uint8_t idx, LcdFlags att) +void putsMixerSource(coord_t x, coord_t y, uint32_t idx, LcdFlags att) { if (idx == 0) { lcd_putsiAtt(x, y, STR_VSRCRAW, 0, att); // TODO macro @@ -890,7 +890,12 @@ void displayDate(coord_t x, coord_t y, TelemetryItem & telemetryItem, LcdFlags a lcd_outdezNAtt(lcdNextPos, y, telemetryItem.datetime.sec, att|LEADING0|LEFT, 2); } else { - lcd_outdezNAtt(x, y, telemetryItem.datetime.hour, att|LEADING0|LEFT, 2); + lcd_outdezNAtt(x, y, telemetryItem.datetime.day, att|LEADING0|LEFT, 2); + lcd_putcAtt(lcdLastPos-1, y, '-', att); + lcd_outdezNAtt(lcdNextPos, y, telemetryItem.datetime.month, att|LEFT, 2); + lcd_putcAtt(lcdLastPos-1, y, '-', att); + lcd_outdezAtt(lcdNextPos, y, telemetryItem.datetime.year, att|LEFT); + lcd_outdezNAtt(lcdNextPos+FW+1, y, telemetryItem.datetime.hour, att|LEADING0|LEFT, 2); lcd_putcAtt(lcdLastPos, y, ':', att); lcd_outdezNAtt(lcdNextPos, y, telemetryItem.datetime.min, att|LEADING0|LEFT, 2); lcd_putcAtt(lcdLastPos, y, ':', att); diff --git a/radio/src/gui/Taranis/lcd.h b/radio/src/gui/Taranis/lcd.h index 0b41ebf7c..4e32f776a 100755 --- a/radio/src/gui/Taranis/lcd.h +++ b/radio/src/gui/Taranis/lcd.h @@ -169,7 +169,7 @@ void putsStrIdx(coord_t x, coord_t y, const pm_char *str, uint8_t idx, LcdFlags void putsModelName(coord_t x, coord_t y, char *name, uint8_t id, LcdFlags att); void putsSwitches(coord_t x, coord_t y, int8_t swtch, LcdFlags att=0); void putsStickName(coord_t x, coord_t y, uint8_t idx, LcdFlags att=0); -void putsMixerSource(coord_t x, coord_t y, uint8_t idx, LcdFlags att=0); +void putsMixerSource(coord_t x, coord_t y, uint32_t idx, LcdFlags att=0); void putsFlightMode(coord_t x, coord_t y, int8_t idx, LcdFlags att=0); #if !defined(BOOT) void putsCurveRef(coord_t x, coord_t y, CurveRef &curve, LcdFlags att); diff --git a/radio/src/gui/Taranis/menu_general_sdmanager.cpp b/radio/src/gui/Taranis/menu_general_sdmanager.cpp index a88693040..95257a827 100755 --- a/radio/src/gui/Taranis/menu_general_sdmanager.cpp +++ b/radio/src/gui/Taranis/menu_general_sdmanager.cpp @@ -321,8 +321,8 @@ void menuGeneralSdManager(uint8_t _event) } } else if (!READ_ONLY() && !strcasecmp(ext, SPORT_FIRMWARE_EXT)) { - MENU_ADD_ITEM(STR_FLASH_INTERNAL_MODULE); MENU_ADD_ITEM(STR_FLASH_EXTERNAL_DEVICE); + MENU_ADD_ITEM(STR_FLASH_INTERNAL_MODULE); } } if (!READ_ONLY()) { @@ -437,7 +437,10 @@ void menuGeneralSdManager(uint8_t _event) editName(lcdNextPos, y, reusableBuffer.sdmanager.lines[i], SD_SCREEN_FILE_LENGTH-4, _event, attr, 0); if (s_editMode == 0) { unsigned int len = effectiveLen(reusableBuffer.sdmanager.lines[i], SD_SCREEN_FILE_LENGTH-LEN_FILE_EXTENSION); - strAppend(&reusableBuffer.sdmanager.lines[i][len], getFileExtension(reusableBuffer.sdmanager.originalName, sizeof(reusableBuffer.sdmanager.originalName))); + char * ext = getFileExtension(reusableBuffer.sdmanager.originalName, sizeof(reusableBuffer.sdmanager.originalName)); + if (ext) { + strAppend(&reusableBuffer.sdmanager.lines[i][len], ext); + } f_rename(reusableBuffer.sdmanager.originalName, reusableBuffer.sdmanager.lines[i]); REFRESH_FILES(); } diff --git a/radio/src/gui/Taranis/menu_general_setup.cpp b/radio/src/gui/Taranis/menu_general_setup.cpp index 791ce551e..e94242c29 100755 --- a/radio/src/gui/Taranis/menu_general_setup.cpp +++ b/radio/src/gui/Taranis/menu_general_setup.cpp @@ -90,7 +90,9 @@ enum menuGeneralSetupItems { CASE_REVPLUS(ITEM_SETUP_BACKLIGHT_COLOR) ITEM_SETUP_FLASH_BEEP, CASE_SPLASH_PARAM(ITEM_SETUP_DISABLE_SPLASH) + CASE_GPS(ITEM_SETUP_LABEL_GPS) CASE_GPS(ITEM_SETUP_TIMEZONE) + CASE_GPS(ITEM_SETUP_ADJUST_RTC) CASE_GPS(ITEM_SETUP_GPSFORMAT) CASE_PXX(ITEM_SETUP_COUNTRYCODE) ITEM_SETUP_LANGUAGE, @@ -126,7 +128,7 @@ void menuGeneralSetup(uint8_t event) } #endif - MENU(STR_MENURADIOSETUP, menuTabGeneral, e_Setup, ITEM_SETUP_MAX, { 2, 2, 1, LABEL(SOUND), 0, 0, 0, 0, 0, 0, 0, CASE_VARIO_CPUARM(LABEL(VARIO)) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_HAPTIC(LABEL(HAPTIC)) CASE_HAPTIC(0) CASE_HAPTIC(0) CASE_HAPTIC(0) 0, LABEL(ALARMS), 0, 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, 0, CASE_REVPLUS(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, CASE_SPLASH_PARAM(0) CASE_GPS(0) CASE_GPS(0) CASE_PXX(0) 0, 0, IF_FAI_CHOICE(0) CASE_MAVLINK(0) 0, 0, LABEL(TX_MODE), 0, 1/*to force edit mode*/ }); + MENU(STR_MENURADIOSETUP, menuTabGeneral, e_Setup, ITEM_SETUP_MAX, { 2, 2, 1, LABEL(SOUND), 0, 0, 0, 0, 0, 0, 0, CASE_VARIO_CPUARM(LABEL(VARIO)) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_HAPTIC(LABEL(HAPTIC)) CASE_HAPTIC(0) CASE_HAPTIC(0) CASE_HAPTIC(0) 0, LABEL(ALARMS), 0, 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, 0, CASE_REVPLUS(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, CASE_SPLASH_PARAM(0) CASE_GPS(LABEL(GPS)) CASE_GPS(0) CASE_GPS(0) CASE_GPS(0) CASE_PXX(0) 0, 0, IF_FAI_CHOICE(0) CASE_MAVLINK(0) 0, 0, LABEL(TX_MODE), 0, 1/*to force edit mode*/ }); int sub = m_posVert; @@ -412,12 +414,20 @@ void menuGeneralSetup(uint8_t event) #endif #if defined(FRSKY) && defined(FRSKY_HUB) && defined(GPS) + case ITEM_SETUP_LABEL_GPS: + lcd_putsLeft(y, STR_GPS); + break; + case ITEM_SETUP_TIMEZONE: lcd_putsLeft(y, STR_TIMEZONE); lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, g_eeGeneral.timezone, attr|LEFT); if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.timezone, -12, 12); break; + case ITEM_SETUP_ADJUST_RTC: + g_eeGeneral.adjustRTC = onoffMenuItem(g_eeGeneral.adjustRTC, RADIO_SETUP_2ND_COLUMN, y, STR_ADJUST_RTC, attr, event); + break; + case ITEM_SETUP_GPSFORMAT: g_eeGeneral.gpsFormat = selectMenuItem(RADIO_SETUP_2ND_COLUMN, y, STR_GPSCOORD, STR_GPSFORMAT, g_eeGeneral.gpsFormat, 0, 1, attr, event); break; diff --git a/radio/src/gui/Taranis/menu_general_version.cpp b/radio/src/gui/Taranis/menu_general_version.cpp index 2248b40d7..99a7c0c7b 100755 --- a/radio/src/gui/Taranis/menu_general_version.cpp +++ b/radio/src/gui/Taranis/menu_general_version.cpp @@ -88,12 +88,27 @@ void backupEeprom() void menuGeneralVersion(uint8_t event) { + if (s_warning_result) { + s_warning_result = 0; + displayPopup(STR_EEPROMFORMATTING); + eeErase(false); +#if !defined(SIMU) + NVIC_SystemReset(); +#else + exit(0); +#endif + } + SIMPLE_MENU(STR_MENUVERSION, menuTabGeneral, e_Vers, 1); lcd_putsLeft(MENU_HEADER_HEIGHT+FH, vers_stamp); - lcd_putsLeft(MENU_HEADER_HEIGHT+6*FH, STR_EEBACKUP); + lcd_putsLeft(MENU_HEADER_HEIGHT+5*FH, STR_EEBACKUP); + lcd_putsLeft(MENU_HEADER_HEIGHT+6*FH, STR_FACTORYRESET); if (event == EVT_KEY_LONG(KEY_ENTER)) { backupEeprom(); } + else if (event == EVT_KEY_LONG(KEY_MENU)) { + POPUP_CONFIRMATION(STR_CONFIRMRESET); + } } diff --git a/radio/src/gui/Taranis/menu_model_custom_functions.cpp b/radio/src/gui/Taranis/menu_model_custom_functions.cpp index 7e142c888..f246762e6 100644 --- a/radio/src/gui/Taranis/menu_model_custom_functions.cpp +++ b/radio/src/gui/Taranis/menu_model_custom_functions.cpp @@ -211,8 +211,18 @@ void menuCustomFunctions(uint8_t event, CustomFunctionData * functions, CustomFu int16_t val_min = 0; int16_t val_max = 255; if (func == FUNC_RESET) { - val_max = FUNC_RESET_PARAM_LAST; - lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VFSWRESET, CFN_PARAM(cfn), attr); + val_max = FUNC_RESET_PARAM_FIRST_TELEM+lastUsedTelemetryIndex(); + int param = CFN_PARAM(cfn); + if (param < FUNC_RESET_PARAM_FIRST_TELEM) { + lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VFSWRESET, param, attr); + } + else { + if (param > FUNC_RESET_PARAM_FIRST_TELEM) { + INCDEC_ENABLE_CHECK(isSensorAvailableInResetSpecialFunction); + } + TelemetrySensor * sensor = & g_model.telemetrySensors[param-FUNC_RESET_PARAM_FIRST_TELEM]; + lcd_putsnAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, sensor->label, TELEM_LABEL_LEN, attr|ZCHAR); + } } #if defined(OVERRIDE_CHANNEL_FUNCTION) else if (func == FUNC_OVERRIDE_CHANNEL) { diff --git a/radio/src/gui/Taranis/menu_model_inputs_mixes.cpp b/radio/src/gui/Taranis/menu_model_inputs_mixes.cpp index 0b1c082c5..9fe344072 100644 --- a/radio/src/gui/Taranis/menu_model_inputs_mixes.cpp +++ b/radio/src/gui/Taranis/menu_model_inputs_mixes.cpp @@ -346,7 +346,7 @@ void menuModelExpoOne(uint8_t event) case EXPO_FIELD_SCALE: lcd_putsLeft(y, STR_SCALE); - putsTelemetryChannelValue(EXPO_ONE_2ND_COLUMN, y, ed->srcRaw - MIXSRC_FIRST_TELEM, convertTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1, ed->scale), LEFT|attr); + putsTelemetryChannelValue(EXPO_ONE_2ND_COLUMN, y, (ed->srcRaw - MIXSRC_FIRST_TELEM)/3, convertTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1, ed->scale), LEFT|attr); if (attr) ed->scale = checkIncDec(event, ed->scale, 0, maxTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1), EE_MODEL); break; @@ -396,7 +396,7 @@ void menuModelExpoOne(uint8_t event) int x512 = getValue(ed->srcRaw); if (ed->srcRaw >= MIXSRC_FIRST_TELEM) { - putsTelemetryChannelValue(LCD_W-8, 6*FH, ed->srcRaw - MIXSRC_FIRST_TELEM, x512, 0); + putsTelemetryChannelValue(LCD_W-8, 6*FH, (ed->srcRaw - MIXSRC_FIRST_TELEM) / 3, x512, 0); if (ed->scale > 0) x512 = (x512 * 1024) / convertTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1, ed->scale); } else { @@ -869,7 +869,7 @@ void menuModelExpoMix(uint8_t expo, uint8_t event) if (cur-s_pgOfs >= 0 && cur-s_pgOfs < NUM_BODY_LINES) { uint8_t attr = ((s_copyMode || sub != cur) ? 0 : INVERS); if (expo) { - ed->weight = GVAR_MENU_ITEM(EXPO_LINE_WEIGHT_POS, y, ed->weight, MIN_EXPO_WEIGHT, 100, attr | (isExpoActive(i) ? BOLD : 0), 0, event); + GVAR_MENU_ITEM(EXPO_LINE_WEIGHT_POS, y, ed->weight, MIN_EXPO_WEIGHT, 100, attr | (isExpoActive(i) ? BOLD : 0), 0, 0); displayExpoLine(y, ed); if (ed->mode!=3) { lcd_putc(EXPO_LINE_SIDE_POS, y, ed->mode == 2 ? 126 : 127); @@ -884,7 +884,7 @@ void menuModelExpoMix(uint8_t expo, uint8_t event) putsMixerSource(MIX_LINE_SRC_POS, y, md->srcRaw, 0); - gvarWeightItem(MIX_LINE_WEIGHT_POS, y, md, attr | (isMixActive(i) ? BOLD : 0), event); + gvarWeightItem(MIX_LINE_WEIGHT_POS, y, md, attr | (isMixActive(i) ? BOLD : 0), 0); displayMixLine(y, md); diff --git a/radio/src/gui/Taranis/menu_model_logical_switches.cpp b/radio/src/gui/Taranis/menu_model_logical_switches.cpp index 1d80e2f29..ba2eb9e88 100755 --- a/radio/src/gui/Taranis/menu_model_logical_switches.cpp +++ b/radio/src/gui/Taranis/menu_model_logical_switches.cpp @@ -163,7 +163,7 @@ void menuModelLogicalSwitches(uint8_t event) } } else if (cstate == LS_FAMILY_COMP) { - v1_val = (uint8_t)cs->v1; + v1_val = cs->v1; putsMixerSource(CSW_2ND_COLUMN, y, v1_val, attr1); putsMixerSource(CSW_3RD_COLUMN, y, cs->v2, attr2); INCDEC_SET_FLAG(EE_MODEL | INCDEC_SOURCE); @@ -178,7 +178,7 @@ void menuModelLogicalSwitches(uint8_t event) INCDEC_ENABLE_CHECK(NULL); } else { - v1_val = (uint8_t)cs->v1; + v1_val = cs->v1; putsMixerSource(CSW_2ND_COLUMN, y, v1_val, attr1); if (horz == 1) { INCDEC_SET_FLAG(EE_MODEL | INCDEC_SOURCE); diff --git a/radio/src/gui/Taranis/menu_model_telemetry.cpp b/radio/src/gui/Taranis/menu_model_telemetry.cpp index 00fba7aa2..07e739183 100644 --- a/radio/src/gui/Taranis/menu_model_telemetry.cpp +++ b/radio/src/gui/Taranis/menu_model_telemetry.cpp @@ -149,7 +149,9 @@ enum SensorFields { SENSOR_FIELD_PARAM2, SENSOR_FIELD_PARAM3, SENSOR_FIELD_PARAM4, - SENSOR_FIELD_INPUT_FLAGS, + SENSOR_FIELD_AUTOOFFSET, + SENSOR_FIELD_FILTER, + SENSOR_FIELD_PERSISTENT, SENSOR_FIELD_LOGS, SENSOR_FIELD_MAX }; @@ -200,18 +202,21 @@ bool isSensorAvailable(int sensor) #define SENSOR_2ND_COLUMN (12*FW) #define SENSOR_3RD_COLUMN (18*FW) -#define SENSOR_UNIT_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0) -#define SENSOR_PREC_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula >= TELEM_FORMULA_CELL) ? HIDDEN_ROW : ((sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME) ? HIDDEN_ROW : (uint8_t)0) -#define SENSOR_PARAM1_ROWS (sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS) ? HIDDEN_ROW : (uint8_t)0 -#define SENSOR_PARAM2_ROWS (sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS || (sensor->type==TELEM_TYPE_CALCULATED && sensor->formula==TELEM_FORMULA_CONSUMPTION)) ? HIDDEN_ROW : (uint8_t)0 -#define SENSOR_PARAM3_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula < TELEM_FORMULA_MULTIPLY) ? (uint8_t)0 : HIDDEN_ROW -#define SENSOR_PARAM4_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula < TELEM_FORMULA_MULTIPLY) ? (uint8_t)0 : HIDDEN_ROW +#define SENSOR_UNIT_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) +#define SENSOR_PREC_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) +#define SENSOR_PARAM1_ROWS (sensor->unit >= UNIT_FIRST_VIRTUAL ? HIDDEN_ROW : (uint8_t)0) +#define SENSOR_PARAM2_ROWS (sensor->unit == UNIT_GPS || sensor->unit == UNIT_DATETIME || sensor->unit == UNIT_CELLS || (sensor->type==TELEM_TYPE_CALCULATED && (sensor->formula==TELEM_FORMULA_CONSUMPTION || sensor->formula==TELEM_FORMULA_TOTALIZE)) ? HIDDEN_ROW : (uint8_t)0) +#define SENSOR_PARAM3_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula < TELEM_FORMULA_MULTIPLY) ? (uint8_t)0 : HIDDEN_ROW +#define SENSOR_PARAM4_ROWS (sensor->type == TELEM_TYPE_CALCULATED && sensor->formula < TELEM_FORMULA_MULTIPLY) ? (uint8_t)0 : HIDDEN_ROW +#define SENSOR_AUTOOFFSET_ROWS (sensor->unit != UNIT_RPMS && sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) +#define SENSOR_FILTER_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) +#define SENSOR_PERSISTENT_ROWS (sensor->isConfigurable() ? (uint8_t)0 : HIDDEN_ROW) void menuModelSensor(uint8_t event) { TelemetrySensor * sensor = & g_model.telemetrySensors[s_currIdx]; - SUBMENU(STR_MENUSENSOR, SENSOR_FIELD_MAX, {0, 0, sensor->type == TELEM_TYPE_CALCULATED ? (uint8_t)0 : (uint8_t)1, SENSOR_UNIT_ROWS, SENSOR_PREC_ROWS, SENSOR_PARAM1_ROWS, SENSOR_PARAM2_ROWS, SENSOR_PARAM3_ROWS, SENSOR_PARAM4_ROWS, 0 }); + SUBMENU(STR_MENUSENSOR, SENSOR_FIELD_MAX, {0, 0, sensor->type == TELEM_TYPE_CALCULATED ? (uint8_t)0 : (uint8_t)1, SENSOR_UNIT_ROWS, SENSOR_PREC_ROWS, SENSOR_PARAM1_ROWS, SENSOR_PARAM2_ROWS, SENSOR_PARAM3_ROWS, SENSOR_PARAM4_ROWS, SENSOR_AUTOOFFSET_ROWS, SENSOR_FILTER_ROWS, SENSOR_PERSISTENT_ROWS, 0 }); lcd_outdezAtt(PSIZE(TR_MENUSENSOR)*FW+1, 0, s_currIdx+1, INVERS|LEFT); putsTelemetryChannelValue(SENSOR_2ND_COLUMN, 0, s_currIdx, getValue(MIXSRC_FIRST_TELEM+3*s_currIdx), LEFT); @@ -223,7 +228,7 @@ void menuModelSensor(uint8_t event) int k = i + s_pgOfs; for (int j=0; jtype = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_TYPE, "\012Custom\0 Calculated", sensor->type, 0, 1, attr, event); + sensor->type = selectMenuItem(SENSOR_2ND_COLUMN, y, NO_INDENT(STR_TYPE), STR_VSENSORTYPES, sensor->type, 0, 1, attr, event); if (attr && checkIncDec_Ret) { sensor->instance = 0; if (sensor->type == TELEM_TYPE_CALCULATED) { sensor->param = 0; - sensor->inputFlags = 0; + sensor->filter = 0; + sensor->autoOffset = 0; } } break; @@ -264,7 +270,7 @@ void menuModelSensor(uint8_t event) } } else { - sensor->formula = selectMenuItem(SENSOR_2ND_COLUMN, y, "Formula", "\010Add\0 Average\0Min\0 Max\0 MultiplyCell\0 ConsumptDistance", sensor->formula, 0, TELEM_FORMULA_DIST, attr, event); + sensor->formula = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_FORMULA, STR_VFORMULAS, sensor->formula, 0, TELEM_FORMULA_LAST, attr, event); if (attr && checkIncDec_Ret) { sensor->param = 0; if (sensor->formula == TELEM_FORMULA_CELL) { @@ -284,7 +290,7 @@ void menuModelSensor(uint8_t event) break; case SENSOR_FIELD_UNIT: - lcd_putsLeft(y, "Unit"); + lcd_putsLeft(y, STR_UNIT); // TODO flash saving with selectMenuItem where I copied those 2 lines? lcd_putsiAtt(SENSOR_2ND_COLUMN, y, STR_VTELEMUNIT, sensor->unit, attr); if (attr) { @@ -296,7 +302,7 @@ void menuModelSensor(uint8_t event) break; case SENSOR_FIELD_PRECISION: - sensor->prec = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_PRECISION, "\005PREC0PREC1PREC2", sensor->prec, 0, 2, attr, event); + sensor->prec = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_PRECISION, STR_VPREC, sensor->prec, 0, 2, attr, event); if (attr && checkIncDec_Ret) { telemetryItems[s_currIdx].clear(); } @@ -305,7 +311,7 @@ void menuModelSensor(uint8_t event) case SENSOR_FIELD_PARAM1: if (sensor->type == TELEM_TYPE_CALCULATED) { if (sensor->formula == TELEM_FORMULA_CELL) { - lcd_putsLeft(y, "Cells sensor"); + lcd_putsLeft(y, STR_CELLSENSOR); putsMixerSource(SENSOR_2ND_COLUMN, y, sensor->cell.source ? MIXSRC_FIRST_TELEM+3*(sensor->cell.source-1) : 0, attr); if (attr) { sensor->cell.source = checkIncDec(event, sensor->cell.source, 0, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isCellsSensor); @@ -313,7 +319,7 @@ void menuModelSensor(uint8_t event) break; } else if (sensor->formula == TELEM_FORMULA_DIST) { - lcd_putsLeft(y, "GPS sensor"); + lcd_putsLeft(y, STR_GPSSENSOR); putsMixerSource(SENSOR_2ND_COLUMN, y, sensor->dist.gps ? MIXSRC_FIRST_TELEM+3*(sensor->dist.gps-1) : 0, attr); if (attr) { sensor->dist.gps = checkIncDec(event, sensor->dist.gps, 0, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isGPSSensor); @@ -321,33 +327,49 @@ void menuModelSensor(uint8_t event) break; } else if (sensor->formula == TELEM_FORMULA_CONSUMPTION) { - lcd_putsLeft(y, "Amps sensor"); + lcd_putsLeft(y, STR_CURRENTSENSOR); putsMixerSource(SENSOR_2ND_COLUMN, y, sensor->consumption.source ? MIXSRC_FIRST_TELEM+3*(sensor->consumption.source-1) : 0, attr); if (attr) { sensor->consumption.source = checkIncDec(event, sensor->consumption.source, 0, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isCurrentSensor); } break; } + else if (sensor->formula == TELEM_FORMULA_TOTALIZE) { + lcd_putsLeft(y, NO_INDENT(STR_SOURCE)); + putsMixerSource(SENSOR_2ND_COLUMN, y, sensor->consumption.source ? MIXSRC_FIRST_TELEM+3*(sensor->consumption.source-1) : 0, attr); + if (attr) { + sensor->consumption.source = checkIncDec(event, sensor->consumption.source, 0, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isTelemetryFieldComparisonAvailable); + } + break; + } } else { - lcd_putsLeft(y, "Ratio"); - if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.ratio, 0, 30000); - if (sensor->custom.ratio == 0) - lcd_putcAtt(SENSOR_2ND_COLUMN, y, '-', attr); - else - lcd_outdezAtt(SENSOR_2ND_COLUMN, y, sensor->custom.ratio, LEFT|attr|PREC1); - break; + if (sensor->unit == UNIT_RPMS) { + lcd_putsLeft(y, NO_INDENT(STR_BLADES)); + if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.ratio, 1, 30000); + lcd_outdezAtt(SENSOR_2ND_COLUMN, y, sensor->custom.ratio, LEFT|attr); + break; + } + else { + lcd_putsLeft(y, STR_RATIO); + if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.ratio, 0, 30000); + if (sensor->custom.ratio == 0) + lcd_putcAtt(SENSOR_2ND_COLUMN, y, '-', attr); + else + lcd_outdezAtt(SENSOR_2ND_COLUMN, y, sensor->custom.ratio, LEFT|attr|PREC1); + break; + } } // no break case SENSOR_FIELD_PARAM2: if (sensor->type == TELEM_TYPE_CALCULATED) { if (sensor->formula == TELEM_FORMULA_CELL) { - sensor->cell.index = selectMenuItem(SENSOR_2ND_COLUMN, y, "Cell index", "\007Lowest\0001\0 2\0 3\0 4\0 5\0 6\0 HighestDelta\0", sensor->cell.index, 0, 8, attr, event); + sensor->cell.index = selectMenuItem(SENSOR_2ND_COLUMN, y, STR_CELLINDEX, STR_VCELLINDEX, sensor->cell.index, 0, 8, attr, event); break; } else if (sensor->formula == TELEM_FORMULA_DIST) { - lcd_putsLeft(y, "Alt sensor"); + lcd_putsLeft(y, STR_ALTSENSOR); putsMixerSource(SENSOR_2ND_COLUMN, y, sensor->dist.alt ? MIXSRC_FIRST_TELEM+3*(sensor->dist.alt-1) : 0, attr); if (attr) { sensor->dist.alt = checkIncDec(event, sensor->dist.alt, 0, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isAltSensor); @@ -355,6 +377,12 @@ void menuModelSensor(uint8_t event) break; } } + else if (sensor->unit == UNIT_RPMS) { + lcd_putsLeft(y, STR_MULTIPLIER); + if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.offset, 1, 30000); + lcd_outdezAtt(SENSOR_2ND_COLUMN, y, sensor->custom.offset, LEFT|attr); + break; + } else { lcd_putsLeft(y, NO_INDENT(STR_OFFSET)); if (attr) CHECK_INCDEC_MODELVAR(event, sensor->custom.offset, -30000, +30000); @@ -369,7 +397,7 @@ void menuModelSensor(uint8_t event) case SENSOR_FIELD_PARAM4: { - putsStrIdx(0, y, "Source", k-SENSOR_FIELD_PARAM1+1); + putsStrIdx(0, y, NO_INDENT(STR_SOURCE), k-SENSOR_FIELD_PARAM1+1); int8_t & source = sensor->calc.sources[k-SENSOR_FIELD_PARAM1]; if (attr) { source = checkIncDec(event, source, -TELEM_VALUES_MAX, TELEM_VALUES_MAX, EE_MODEL|NO_INCDEC_MARKS, isSensorAvailable); @@ -384,12 +412,20 @@ void menuModelSensor(uint8_t event) break; } - case SENSOR_FIELD_INPUT_FLAGS: - sensor->inputFlags = selectMenuItem(SENSOR_2ND_COLUMN, y, "Options", "\013None\0 ""Auto Offset""Filter\0", sensor->inputFlags, 0, TELEM_INPUT_FLAGS_MAX, attr, event); + case SENSOR_FIELD_AUTOOFFSET: + ON_OFF_MENU_ITEM(sensor->autoOffset, SENSOR_2ND_COLUMN, y, STR_AUTOOFFSET, attr, event); + break; + + case SENSOR_FIELD_FILTER: + ON_OFF_MENU_ITEM(sensor->filter, SENSOR_2ND_COLUMN, y, STR_FILTER, attr, event); + break; + + case SENSOR_FIELD_PERSISTENT: + ON_OFF_MENU_ITEM(sensor->persistent, SENSOR_2ND_COLUMN, y, NO_INDENT(STR_PERSISTENT), attr, event); break; case SENSOR_FIELD_LOGS: - ON_OFF_MENU_ITEM(sensor->logs, SENSOR_2ND_COLUMN, y, "Logs", attr, event); + ON_OFF_MENU_ITEM(sensor->logs, SENSOR_2ND_COLUMN, y, STR_LOGS, attr, event); break; } @@ -478,6 +514,10 @@ void menuModelTelemetry(uint8_t event) else { lcd_putsAtt(TELEM_COL2, y, "---", 0); // TODO shortcut } + TelemetrySensor * sensor = & g_model.telemetrySensors[index]; + if (sensor->type == TELEM_TYPE_CUSTOM) { + lcd_outdezAtt(TELEM_COL3+1*FW, y, sensor->instance, LEFT); + } if (attr) { s_editMode = 0; s_currIdx = index; @@ -501,6 +541,8 @@ void menuModelTelemetry(uint8_t event) case ITEM_TELEMETRY_SENSORS_LABEL: lcd_putsLeft(y, STR_TELEMETRY_SENSORS); + lcd_putsAtt(TELEM_COL2, y, STR_VALUE, 0); + lcd_putsAtt(TELEM_COL3+1*FW, y, STR_ID, 0); break; case ITEM_TELEMETRY_NEWSENSOR: @@ -512,6 +554,9 @@ void menuModelTelemetry(uint8_t event) s_currIdx = res; pushMenu(menuModelSensor); } + else { + POPUP_WARNING(STR_TELEMETRYFULL); + } } break; @@ -590,8 +635,8 @@ void menuModelTelemetry(uint8_t event) #if defined(REV9E) case ITEM_TELEMETRY_TOP_LCD_TIMER: - lcd_putsLeft(y, "Top LCD Timer"); - putsStrIdx(TELEM_COL2, y, "Timer", g_model.topLcdTimer+1, attr); + lcd_putsLeft(y, STR_TOPLCDTIMER); + putsStrIdx(TELEM_COL2, y, STR_TIMER, g_model.topLcdTimer+1, attr); if (attr) { g_model.topLcdTimer = checkIncDec(event, g_model.topLcdTimer, 0, MAX_TIMERS-1, EE_MODEL); } @@ -728,7 +773,7 @@ void menuModelTelemetry(uint8_t event) const coord_t pos[] = {TELEM_COL1, TELEM_COL2, TELEM_COL3}; putsMixerSource(pos[c], y, value, cellAttr); if (cellAttr && s_editMode>0) { - CHECK_INCDEC_MODELVAR_ZERO_CHECK(event, value, MIXSRC_LAST_TELEM, isSourceAvailable); + value = checkIncDec(event, value, 0, MIXSRC_LAST_TELEM, EE_MODEL|INCDEC_SOURCE|NO_INCDEC_MARKS, isSourceAvailable); } } if (attr && m_posHorz == NUM_LINE_ITEMS) { diff --git a/radio/src/gui/Taranis/menus.h b/radio/src/gui/Taranis/menus.h index 6640661ea..283a51809 100755 --- a/radio/src/gui/Taranis/menus.h +++ b/radio/src/gui/Taranis/menus.h @@ -202,6 +202,7 @@ bool isSwitchAvailableInCustomFunctions(int swtch); bool isSwitchAvailableInMixes(int swtch); bool isSwitchAvailableInTimers(int swtch); bool isModuleAvailable(int module); +int getFirstAvailableSource(int min, int max, bool (*func)(int)); #define AUTOSWITCH_ENTER_LONG() (attr && event==EVT_KEY_LONG(KEY_ENTER)) #define CHECK_INCDEC_SWITCH(event, var, min, max, flags, available) \ var = checkIncDec(event, var, min, max, (flags)|INCDEC_SWITCH, available) @@ -326,7 +327,8 @@ extern uint8_t s_warning_info_flags; #define NAVIGATION_MENUS #define MENU_ADD_ITEM(s) s_menu[s_menu_count++] = s -#define MENU_MAX_LINES 6 +#define MENU_MAX_LINES 12 +#define MENU_MAX_DISPLAY_LINES 6 #define MENU_ADD_SD_ITEM(s) MENU_ADD_ITEM(s) #define MENU_LINE_LENGTH (LEN_MODEL_NAME+12) extern const char *s_menu[MENU_MAX_LINES]; diff --git a/radio/src/gui/Taranis/navigation.cpp b/radio/src/gui/Taranis/navigation.cpp index b4ace4091..9441fd696 100755 --- a/radio/src/gui/Taranis/navigation.cpp +++ b/radio/src/gui/Taranis/navigation.cpp @@ -42,6 +42,7 @@ horzpos_t m_posHorz; int8_t s_editMode; uint8_t s_noHi; uint8_t calibrationState; +int s_source = MIXSRC_NONE; #if defined(AUTOSWITCH) int8_t checkIncDecMovedSwitch(int8_t val) @@ -52,7 +53,7 @@ int8_t checkIncDecMovedSwitch(int8_t val) div_t info = switchInfo(swtch); if (IS_TOGGLE(info.quot)) { if (info.rem != 0) { - val = (val == swtch ? swtch+2 : swtch); + val = (val == swtch ? swtch-2 : swtch); } } else { @@ -70,6 +71,44 @@ INIT_STOPS(stops100, 3, -100, 0, 100) INIT_STOPS(stops1000, 3, -1000, 0, 1000) INIT_STOPS(stopsSwitch, 15, SWSRC_FIRST, CATEGORY_END(-SWSRC_FIRST_LOGICAL_SWITCH), CATEGORY_END(-SWSRC_FIRST_TRIM), CATEGORY_END(-SWSRC_LAST_SWITCH+1), 0, CATEGORY_END(SWSRC_LAST_SWITCH), CATEGORY_END(SWSRC_FIRST_TRIM-1), CATEGORY_END(SWSRC_FIRST_LOGICAL_SWITCH-1), SWSRC_LAST) +void onLongEnterPress(const char *result) +{ + if (result == STR_MENU_INPUTS) + s_source = getFirstAvailableSource(MIXSRC_FIRST_INPUT, MIXSRC_LAST_INPUT, isInputAvailable)+1; +#if defined(LUA_MODEL_SCRIPTS) + else if (result == STR_MENU_LUA) + s_source = getFirstAvailableSource(MIXSRC_FIRST_LUA, MIXSRC_LAST_LUA, isSourceAvailable); +#endif + else if (result == STR_MENU_STICKS) + s_source = MIXSRC_FIRST_STICK; + else if (result == STR_MENU_POTS) + s_source = MIXSRC_FIRST_POT; + else if (result == STR_MENU_MAX) + s_source = MIXSRC_MAX; + else if (result == STR_MENU_HELI) + s_source = MIXSRC_FIRST_HELI; + else if (result == STR_MENU_TRIMS) + s_source = MIXSRC_FIRST_TRIM; + else if (result == STR_MENU_SWITCHES) + s_source = MIXSRC_FIRST_SWITCH; + else if (result == STR_MENU_TRAINER) + s_source = MIXSRC_FIRST_TRAINER; + else if (result == STR_MENU_CHANNELS) + s_source = getFirstAvailableSource(MIXSRC_FIRST_CH, MIXSRC_LAST_CH, isSourceAvailable); + else if (result == STR_MENU_GVARS) + s_source = MIXSRC_FIRST_GVAR; + + else if (result == STR_MENU_TELEMETRY) { + for (int i = 0; i < TELEM_VALUES_MAX; i++) { + TelemetrySensor * sensor = & g_model.telemetrySensors[i]; + if (sensor->isAvailable()) { + s_source = MIXSRC_FIRST_TELEM + 3*i; + break; + } + } + } +} + int checkIncDec(unsigned int event, int val, int i_min, int i_max, unsigned int i_flags, IsValueAvailable isValueAvailable, const CheckIncDecStops &stops) { int newval = val; @@ -207,6 +246,56 @@ int checkIncDec(unsigned int event, int val, int i_min, int i_max, unsigned int else { checkIncDec_Ret = 0; } + + if (i_flags & INCDEC_SOURCE) { + if (event == EVT_KEY_LONG(KEY_ENTER)) { + killEvents(event); + s_source = MIXSRC_NONE; + + if (i_min <= MIXSRC_FIRST_INPUT && i_max >= MIXSRC_FIRST_INPUT) { + if (getFirstAvailableSource(MIXSRC_FIRST_INPUT, MIXSRC_LAST_INPUT, isInputAvailable) != MIXSRC_NONE) + MENU_ADD_ITEM(STR_MENU_INPUTS); + } +#if defined(LUA_MODEL_SCRIPTS) + if (i_min <= MIXSRC_FIRST_LUA && i_max >= MIXSRC_FIRST_LUA) { + if (getFirstAvailableSource(MIXSRC_FIRST_LUA, MIXSRC_LAST_LUA, isSourceAvailable) != MIXSRC_NONE) + MENU_ADD_ITEM(STR_MENU_LUA); + } +#endif + if (i_min <= MIXSRC_FIRST_STICK && i_max >= MIXSRC_FIRST_STICK) MENU_ADD_ITEM(STR_MENU_STICKS); + if (i_min <= MIXSRC_FIRST_POT && i_max >= MIXSRC_FIRST_POT) MENU_ADD_ITEM(STR_MENU_POTS); + if (i_min <= MIXSRC_MAX && i_max >= MIXSRC_MAX) MENU_ADD_ITEM(STR_MENU_MAX); +#if defined(HELI) + if (i_min <= MIXSRC_FIRST_HELI && i_max >= MIXSRC_FIRST_HELI) MENU_ADD_ITEM(STR_MENU_HELI); +#endif + if (i_min <= MIXSRC_FIRST_TRIM && i_max >= MIXSRC_FIRST_TRIM) MENU_ADD_ITEM(STR_MENU_TRIMS); + if (i_min <= MIXSRC_FIRST_SWITCH && i_max >= MIXSRC_FIRST_SWITCH) MENU_ADD_ITEM(STR_MENU_SWITCHES); + if (i_min <= MIXSRC_FIRST_TRAINER && i_max >= MIXSRC_FIRST_TRAINER) MENU_ADD_ITEM(STR_MENU_TRAINER); + if (i_min <= MIXSRC_FIRST_CH && i_max >= MIXSRC_FIRST_CH) MENU_ADD_ITEM(STR_MENU_CHANNELS); + if (i_min <= MIXSRC_FIRST_GVAR && i_max >= MIXSRC_FIRST_GVAR && isValueAvailable(MIXSRC_FIRST_GVAR)) + MENU_ADD_ITEM(STR_MENU_GVARS); + + if (i_min <= MIXSRC_FIRST_TELEM && i_max >= MIXSRC_FIRST_TELEM) { + bool available = false; + for (int i = 0; i < TELEM_VALUES_MAX; i++) { + TelemetrySensor * sensor = & g_model.telemetrySensors[i]; + if (sensor->isAvailable()) { + available = true; + break; + } + } + if (available) + MENU_ADD_ITEM(STR_MENU_TELEMETRY); + } + menuHandler = onLongEnterPress; + } + if (s_source != MIXSRC_NONE) { + newval = s_source; + if (s_source != MIXSRC_MAX) + s_editMode = 1; + s_source = MIXSRC_NONE; + } + } return newval; } @@ -229,6 +318,7 @@ void onLongMenuPress(const char *result) } } + tmr10ms_t menuEntryTime; void check(const char *name, check_event_t event, uint8_t curr, const MenuFuncP *menuTab, uint8_t menuTabSize, const pm_uint8_t *horTab, uint8_t horTabMax, vertpos_t rowcount, uint8_t flags) diff --git a/radio/src/gui/Taranis/popups.cpp b/radio/src/gui/Taranis/popups.cpp index 36646b54f..b55afd760 100755 --- a/radio/src/gui/Taranis/popups.cpp +++ b/radio/src/gui/Taranis/popups.cpp @@ -127,18 +127,18 @@ const char * displayMenu(uint8_t event) { const char * result = NULL; - uint8_t display_count = min(s_menu_count, (uint16_t)MENU_MAX_LINES); + uint8_t display_count = min(s_menu_count, (uint16_t)MENU_MAX_DISPLAY_LINES); uint8_t y = (display_count >= 5 ? MENU_Y - FH - 1 : MENU_Y); drawFilledRect(MENU_X, y, MENU_W, display_count * (FH+1) + 2, SOLID, ERASE); lcd_rect(MENU_X, y, MENU_W, display_count * (FH+1) + 2); for (uint8_t i=0; i display_count) { - displayScrollbar(MENU_X+MENU_W-1, y+1, MENU_MAX_LINES * (FH+1), s_menu_offset, s_menu_count, MENU_MAX_LINES); + displayScrollbar(MENU_X+MENU_W-1, y+1, MENU_MAX_DISPLAY_LINES * (FH+1), s_menu_offset, s_menu_count, display_count); } switch(event) { @@ -152,9 +152,9 @@ const char * displayMenu(uint8_t event) result = STR_UPDATE_LIST; } else { - s_menu_item = display_count - 1; - if (s_menu_count > MENU_MAX_LINES) { - s_menu_offset = s_menu_count - display_count; + s_menu_item = min(display_count, (uint8_t)MENU_MAX_DISPLAY_LINES)-1; + if (s_menu_count > MENU_MAX_DISPLAY_LINES) { + s_menu_offset = s_menu_count - MENU_MAX_DISPLAY_LINES; result = STR_UPDATE_LIST; } } @@ -179,7 +179,7 @@ const char * displayMenu(uint8_t event) break; CASE_EVT_ROTARY_BREAK case EVT_KEY_BREAK(KEY_ENTER): - result = s_menu[s_menu_item]; + result = s_menu[s_menu_item+s_menu_offset]; // no break case EVT_KEY_BREAK(KEY_EXIT): s_menu_count = 0; diff --git a/radio/src/gui/Taranis/view_about.cpp b/radio/src/gui/Taranis/view_about.cpp index 9e544b184..05c92a86a 100755 --- a/radio/src/gui/Taranis/view_about.cpp +++ b/radio/src/gui/Taranis/view_about.cpp @@ -36,6 +36,10 @@ #include "../../opentx.h" +const pm_uchar about_bmp[] PROGMEM = { +#include "../../bitmaps/Taranis/about.lbm" +}; + enum AboutScreens { ABOUT_OPENTX, ABOUT_BERTRAND, @@ -78,6 +82,10 @@ void menuAboutView(uint8_t event) break; } + lcd_bmp(0, 0, about_bmp); + lcd_putsAtt(64, 0, STR_ABOUTUS, DBLSIZE); + lcd_hline(ABOUT_X, 18, 120); + lcd_hline(ABOUT_X, 19, 130, GREY_DEFAULT); LcdFlags att = GREY(max(0, 15-greyIndex/2)); uint8_t screenDuration = 150; diff --git a/radio/src/gui/Taranis/view_main.cpp b/radio/src/gui/Taranis/view_main.cpp index 7ffd0bd89..7fc20d9e2 100755 --- a/radio/src/gui/Taranis/view_main.cpp +++ b/radio/src/gui/Taranis/view_main.cpp @@ -117,7 +117,7 @@ void doMainScreenGraphics() void displayTrims(uint8_t phase) { - for (unsigned int i=0; i 0 && (trimsDisplayMask & (1<0 ? 25 : 57, xm-2, -abs(dir), TINSIZE|VERTICAL); + if (g_model.displayTrims != DISPLAY_TRIMS_NEVER && dir != 0) { + if (g_model.displayTrims == DISPLAY_TRIMS_ALWAYS || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1<0 ? 22 : 54, xm-2, -abs(dir/5), TINSIZE|VERTICAL); } } } @@ -182,8 +182,8 @@ void displayTrims(uint8_t phase) lcd_vline(xm, ym-1, 3); } if (g_model.displayTrims != DISPLAY_TRIMS_NEVER && dir != 0) { - if (g_model.displayTrims == DISPLAY_TRIMS_ALWAYS || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1<0 ? -9 : 22), ym-2, -abs(dir), TINSIZE); + if (g_model.displayTrims == DISPLAY_TRIMS_ALWAYS || (trimsDisplayTimer > 0 && (trimsDisplayMask & (1<0 ? -11 : 20), ym-2, -abs(dir/5), TINSIZE); } } } @@ -571,7 +571,6 @@ void menuMainView(uint8_t event) lcd_bmp(BITMAP_X, BITMAP_Y, modelBitmap); // Switches -#if defined(REV9E) if (getSwitchCount() > 8) { for (int i=0; i 0 ? 3*i+2 : 3*i+1; - break; - case 6: - val = getValue(MIXSRC_SG); - sw = ((val < 0) ? 3*i : ((val == 0) ? 3*i+1 : 3*i+2)); - break; - case 7: - sw = getValue(MIXSRC_SH) > 0 ? 3*i+1 : 3*i; - break; - default: - { - val = getValue(MIXSRC_SA+i); - sw = ((val < 0) ? 3*i+1 : ((val == 0) ? 3*i+2 : 3*i+3)); - break; - } - } - putsSwitches((g_eeGeneral.view == VIEW_INPUTS) ? (i<4 ? 8*FW+3 : 24*FW+1) : (i<4 ? 3*FW+2 : 8*FW-1), (i%4)*FH+3*FH, sw, 0); - } -#endif if (g_eeGeneral.view == VIEW_TIMERS) { displayTimers(); diff --git a/radio/src/gui/Taranis/widgets.cpp b/radio/src/gui/Taranis/widgets.cpp index f189b6f2f..7f264bc81 100755 --- a/radio/src/gui/Taranis/widgets.cpp +++ b/radio/src/gui/Taranis/widgets.cpp @@ -63,6 +63,19 @@ void menu_lcd_onoff(coord_t x, coord_t y, uint8_t value, LcdFlags attr) lcd_square(x, y, 7); } +#if defined(REV9E) +void displayShutdownProgress(uint32_t progress) +{ + lcd_clear(); + lcd_putsLeft(LCD_H/2-20, STR_POWEROFF); + drawFilledRect((LCD_W-44)/2, LCD_H/2-5, 28, 10, SOLID, ERASE); + lcd_rect((LCD_W-44)/2, LCD_H/2-5, 28, 10); + for (int i=(progress/100); i>=0; i--) { + drawFilledRect((LCD_W-44)/2+3+i*8, LCD_H/2-3, 6, 6, SOLID); + } +} +#endif + void displayScreenIndex(uint8_t index, uint8_t count, uint8_t attr) { lcd_outdezAtt(LCD_W, 0, count, attr); diff --git a/radio/src/keys.h b/radio/src/keys.h index 2948b943f..5d70dd3a3 100644 --- a/radio/src/keys.h +++ b/radio/src/keys.h @@ -89,17 +89,13 @@ enum EnumKeys { SW_SE1, SW_SE2, SW_SF0, -#if defined(REV9E) SW_SF1, -#endif SW_SF2, SW_SG0, SW_SG1, SW_SG2, SW_SH0, -#if defined(REV9E) SW_SH1, -#endif SW_SH2, #if defined(REV9E) SW_SI0, diff --git a/radio/src/main_arm.cpp b/radio/src/main_arm.cpp index 4327b0849..747160ab3 100644 --- a/radio/src/main_arm.cpp +++ b/radio/src/main_arm.cpp @@ -39,8 +39,6 @@ static uint8_t currentSpeakerVolume = 255; uint8_t requiredSpeakerVolume = 255; -extern void checkBattery(); - void handleUsbConnection() { #if defined(PCBTARANIS) && !defined(SIMU) @@ -185,6 +183,13 @@ void perMain() drawStatusLine(); } +#if defined(REV9E) && !defined(SIMU) + uint32_t pwr_pressed_duration = pwrPressedDuration(); + if (pwr_pressed_duration > 0) { + displayShutdownProgress(pwr_pressed_duration); + } +#endif + lcdRefresh(); #if defined(REV9E) && !defined(SIMU) @@ -198,4 +203,8 @@ void perMain() topLcdRefreshEnd(); #endif +#if defined(REV9E) && !defined(SIMU) + bt_wakeup(); +#endif + } diff --git a/radio/src/mixer.cpp b/radio/src/mixer.cpp index dff2cb1ed..44377a898 100644 --- a/radio/src/mixer.cpp +++ b/radio/src/mixer.cpp @@ -278,32 +278,15 @@ getvalue_t getValue(mixsrc_t i) else if (i<=MIXSRC_TrimAil) return calc1000toRESX((int16_t)8 * getTrimValue(mixerCurrentFlightMode, i-MIXSRC_TrimRud)); #if defined(PCBTARANIS) - else if (i==MIXSRC_SA) return (switchState(SW_SA0) ? -1024 : (switchState(SW_SA1) ? 0 : 1024)); - else if (i==MIXSRC_SB) return (switchState(SW_SB0) ? -1024 : (switchState(SW_SB1) ? 0 : 1024)); - else if (i==MIXSRC_SC) return (switchState(SW_SC0) ? -1024 : (switchState(SW_SC1) ? 0 : 1024)); - else if (i==MIXSRC_SD) return (switchState(SW_SD0) ? -1024 : (switchState(SW_SD1) ? 0 : 1024)); - else if (i==MIXSRC_SE) return (switchState(SW_SE0) ? -1024 : (switchState(SW_SE1) ? 0 : 1024)); -#if defined(REV9E) - else if (i==MIXSRC_SF) return (switchState(SW_SF0) ? -1024 : (switchState(SW_SF1) ? 0 : 1024)); -#else - else if (i==MIXSRC_SF) return (switchState(SW_SF0) ? -1024 : 1024); -#endif - else if (i==MIXSRC_SG) return (switchState(SW_SG0) ? -1024 : (switchState(SW_SG1) ? 0 : 1024)); -#if defined(REV9E) - else if (i==MIXSRC_SH) return (switchState(SW_SH0) ? -1024 : (switchState(SW_SH1) ? 0 : 1024)); - else if (i==MIXSRC_SI) return (switchState(SW_SI0) ? -1024 : (switchState(SW_SI1) ? 0 : 1024)); - else if (i==MIXSRC_SJ) return (switchState(SW_SJ0) ? -1024 : (switchState(SW_SJ1) ? 0 : 1024)); - else if (i==MIXSRC_SK) return (switchState(SW_SK0) ? -1024 : (switchState(SW_SK1) ? 0 : 1024)); - else if (i==MIXSRC_SL) return (switchState(SW_SL0) ? -1024 : (switchState(SW_SL1) ? 0 : 1024)); - else if (i==MIXSRC_SM) return (switchState(SW_SM0) ? -1024 : (switchState(SW_SM1) ? 0 : 1024)); - else if (i==MIXSRC_SN) return (switchState(SW_SN0) ? -1024 : (switchState(SW_SN1) ? 0 : 1024)); - else if (i==MIXSRC_SO) return (switchState(SW_SO0) ? -1024 : (switchState(SW_SO1) ? 0 : 1024)); - else if (i==MIXSRC_SP) return (switchState(SW_SP0) ? -1024 : (switchState(SW_SP1) ? 0 : 1024)); - else if (i==MIXSRC_SQ) return (switchState(SW_SQ0) ? -1024 : (switchState(SW_SQ1) ? 0 : 1024)); - else if (i==MIXSRC_SR) return (switchState(SW_SR0) ? -1024 : (switchState(SW_SR1) ? 0 : 1024)); -#else - else if (i==MIXSRC_SH) return (switchState(SW_SH0) ? -1024 : 1024); -#endif + else if ((i >= MIXSRC_FIRST_SWITCH) && (i <= MIXSRC_LAST_SWITCH)) { + mixsrc_t sw = i-MIXSRC_FIRST_SWITCH; + if (SWITCH_EXISTS(sw)) { + return (switchState((EnumKeys)(SW_BASE+(3*sw))) ? -1024 : (switchState((EnumKeys)(SW_BASE+(3*sw)+1)) ? 0 : 1024)); + } + else { + return 0; + } + } #else else if (i==MIXSRC_3POS) return (getSwitch(SW_ID0-SW_BASE+1) ? -1024 : (getSwitch(SW_ID1-SW_BASE+1) ? 0 : 1024)); // don't use switchState directly to give getSwitch possibility to hack values if needed for switch warning @@ -670,7 +653,7 @@ void evalFlightModeMixes(uint8_t mode, uint8_t tick10ms) if (md->srcRaw == 0) break; - uint8_t stickIndex = md->srcRaw - MIXSRC_Rud; + mixsrc_t stickIndex = md->srcRaw - MIXSRC_Rud; if (!(dirtyChannels & ((bitfield_channels_t)1 << md->destCh))) continue; @@ -726,10 +709,10 @@ void evalFlightModeMixes(uint8_t mode, uint8_t tick10ms) else #endif { - int8_t srcRaw = MIXSRC_Rud + stickIndex; + mixsrc_t srcRaw = MIXSRC_Rud + stickIndex; v = getValue(srcRaw); srcRaw -= MIXSRC_CH1; - if (srcRaw>=0 && srcRaw<=MIXSRC_LAST_CH-MIXSRC_CH1 && md->destCh != srcRaw) { + if (srcRaw<=MIXSRC_LAST_CH-MIXSRC_CH1 && md->destCh != srcRaw) { if (dirtyChannels & ((bitfield_channels_t)1 << srcRaw) & (passDirtyChannels|~(((bitfield_channels_t) 1 << md->destCh)-1))) passDirtyChannels |= (bitfield_channels_t) 1 << md->destCh; if (srcRaw < md->destCh || pass > 0) diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 93e079c50..373fbd667 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -130,6 +130,7 @@ #define NUM_POTS 5 #define NUM_XPOTS 3 #endif + #define TELEM_VALUES_MAX 32 #elif defined(CPUARM) #define MAX_MODELS 60 #define NUM_CHNOUT 32 // number of real output channels CH1-CH32 @@ -141,6 +142,7 @@ #define NUM_TRAINER 16 #define NUM_POTS 3 #define NUM_XPOTS 0 + #define TELEM_VALUES_MAX 16 #elif defined(CPUM2560) || defined(CPUM2561) #define MAX_MODELS 30 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 @@ -152,6 +154,7 @@ #define NUM_TRAINER 8 #define NUM_POTS 3 #define NUM_XPOTS 0 + #define TELEM_VALUES_MAX 0 #elif defined(CPUM128) #define MAX_MODELS 30 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 @@ -163,6 +166,7 @@ #define NUM_TRAINER 8 #define NUM_POTS 3 #define NUM_XPOTS 0 + #define TELEM_VALUES_MAX 0 #else #define MAX_MODELS 16 #define NUM_CHNOUT 16 // number of real output channels CH1-CH16 @@ -174,6 +178,7 @@ #define NUM_TRAINER 8 #define NUM_POTS 3 #define NUM_XPOTS 0 + #define TELEM_VALUES_MAX 0 #endif #if defined(CPUARM) @@ -584,9 +589,13 @@ enum ResetFunctionParam { #endif #if ROTARY_ENCODERS > 1 FUNC_RESET_ROTENC2, +#endif +#if defined(CPUARM) + FUNC_RESET_PARAM_FIRST_TELEM, + FUNC_RESET_PARAM_LAST_TELEM = FUNC_RESET_PARAM_FIRST_TELEM + TELEM_VALUES_MAX, #endif FUNC_RESET_PARAMS_COUNT, - FUNC_RESET_PARAM_LAST = FUNC_RESET_PARAMS_COUNT-1 + FUNC_RESET_PARAM_LAST = FUNC_RESET_PARAMS_COUNT-1, }; enum AdjustGvarFunctionParam { @@ -742,7 +751,7 @@ PACK(typedef struct { uint8_t disableAlarmWarning:1; uint8_t stickMode:2; int8_t timezone:5; - uint8_t spare1:1; + uint8_t adjustRTC:1; uint8_t inactivityTimer; uint8_t mavbaud:3; SPLASH_MODE; /* 3bits */ @@ -1141,11 +1150,14 @@ enum TelemetryUnit { UNIT_RPMS, UNIT_G, UNIT_DEGREE, + UNIT_MILLILITERS, + UNIT_FLOZ, UNIT_HOURS, UNIT_MINUTES, UNIT_SECONDS, // FrSky format used for these fields, could be another format in the future - UNIT_CELLS, + UNIT_FIRST_VIRTUAL, + UNIT_CELLS = UNIT_FIRST_VIRTUAL, UNIT_DATETIME, UNIT_GPS, UNIT_GPS_LONGITUDE, @@ -1157,7 +1169,7 @@ enum TelemetryUnit { UNIT_DATETIME_HOUR_MIN, UNIT_DATETIME_SEC }; -#define UNIT_MAX UNIT_DEGREE +#define UNIT_MAX UNIT_FLOZ #define UNIT_DIST UNIT_METERS #define UNIT_TEMPERATURE UNIT_CELSIUS #define UNIT_SPEED UNIT_KMH @@ -1211,11 +1223,6 @@ PACK(typedef struct { #endif #if defined(CPUARM) -#if defined(PCBTARANIS) - #define TELEM_VALUES_MAX 32 -#else - #define TELEM_VALUES_MAX 16 -#endif #define TELEM_LABEL_LEN 4 //#define TELEM_FLAG_TIMEOUT 0x01 #define TELEM_FLAG_LOG 0x02 @@ -1238,17 +1245,11 @@ enum TelemetrySensorFormula TELEM_FORMULA_MIN, TELEM_FORMULA_MAX, TELEM_FORMULA_MULTIPLY, + TELEM_FORMULA_TOTALIZE, TELEM_FORMULA_CELL, TELEM_FORMULA_CONSUMPTION, TELEM_FORMULA_DIST, -}; - -enum TelemetrySensorInputFlags -{ - TELEM_INPUT_FLAGS_NONE, - TELEM_INPUT_FLAGS_AUTO_OFFSET, - TELEM_INPUT_FLAGS_FILTERING, - TELEM_INPUT_FLAGS_MAX=TELEM_INPUT_FLAGS_FILTERING + TELEM_FORMULA_LAST = TELEM_FORMULA_DIST }; PACK(typedef struct { @@ -1264,7 +1265,8 @@ PACK(typedef struct { uint8_t type:1; // 0=custom / 1=calculated uint8_t unit:5; // user can choose what unit to display each value in uint8_t prec:2; - uint8_t inputFlags:2; + uint8_t autoOffset:1; + uint8_t filter:1; uint8_t logs:1; uint8_t persistent:1; uint8_t spare:4; @@ -1296,6 +1298,7 @@ PACK(typedef struct { void init(uint16_t id); bool isAvailable(); int32_t getValue(int32_t value, uint8_t unit, uint8_t prec) const; + bool isConfigurable(); }) TelemetrySensor; #endif @@ -1630,17 +1633,13 @@ enum SwitchSources { SWSRC_SE1, SWSRC_SE2, SWSRC_SF0, -#if defined(REV9E) SWSRC_SF1, -#endif SWSRC_SF2, SWSRC_SG0, SWSRC_SG1, SWSRC_SG2, SWSRC_SH0, -#if defined(REV9E) SWSRC_SH1, -#endif SWSRC_SH2, SWSRC_TRAINER = SWSRC_SH2, #if defined(REV9E) @@ -1767,10 +1766,11 @@ enum MixSources { MIXSRC_LAST_LUA = MIXSRC_FIRST_LUA+(MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS)-1, #endif - MIXSRC_Rud, LUA_EXPORT("rud", "Rudder") - MIXSRC_Ele, LUA_EXPORT("ele", "Elevator") - MIXSRC_Thr, LUA_EXPORT("thr", "Throttle") - MIXSRC_Ail, LUA_EXPORT("ail", "Aileron") + MIXSRC_FIRST_STICK, + MIXSRC_Rud = MIXSRC_FIRST_STICK, LUA_EXPORT("rud", "Rudder") + MIXSRC_Ele, LUA_EXPORT("ele", "Elevator") + MIXSRC_Thr, LUA_EXPORT("thr", "Throttle") + MIXSRC_Ail, LUA_EXPORT("ail", "Aileron") MIXSRC_FIRST_POT, #if defined(PCBTARANIS) @@ -1813,14 +1813,17 @@ enum MixSources { MIXSRC_MAX, - MIXSRC_CYC1, LUA_EXPORT("cyc1", "Cyclic 1") - MIXSRC_CYC2, LUA_EXPORT("cyc2", "Cyclic 2") - MIXSRC_CYC3, LUA_EXPORT("cyc3", "Cyclic 3") + MIXSRC_FIRST_HELI, + MIXSRC_CYC1 = MIXSRC_FIRST_HELI, LUA_EXPORT("cyc1", "Cyclic 1") + MIXSRC_CYC2, LUA_EXPORT("cyc2", "Cyclic 2") + MIXSRC_CYC3, LUA_EXPORT("cyc3", "Cyclic 3") - MIXSRC_TrimRud, LUA_EXPORT("trim-rud", "Rudder trim") - MIXSRC_TrimEle, LUA_EXPORT("trim-ele", "Elevator trim") - MIXSRC_TrimThr, LUA_EXPORT("trim-thr", "Throttle trim") - MIXSRC_TrimAil, LUA_EXPORT("trim-ail", "Aileron trim") + MIXSRC_FIRST_TRIM, + MIXSRC_TrimRud = MIXSRC_FIRST_TRIM, LUA_EXPORT("trim-rud", "Rudder trim") + MIXSRC_TrimEle, LUA_EXPORT("trim-ele", "Elevator trim") + MIXSRC_TrimThr, LUA_EXPORT("trim-thr", "Throttle trim") + MIXSRC_TrimAil, LUA_EXPORT("trim-ail", "Aileron trim") + MIXSRC_LAST_TRIM = MIXSRC_TrimAil, MIXSRC_FIRST_SWITCH, @@ -1844,6 +1847,9 @@ enum MixSources { MIXSRC_SP, LUA_EXPORT("sp", "Switch P") MIXSRC_SQ, LUA_EXPORT("sq", "Switch Q") MIXSRC_SR, LUA_EXPORT("sr", "Switch R") + MIXSRC_LAST_SWITCH = MIXSRC_SR, +#else + MIXSRC_LAST_SWITCH = MIXSRC_SH, #endif #else MIXSRC_3POS = MIXSRC_FIRST_SWITCH, @@ -1853,6 +1859,7 @@ enum MixSources { MIXSRC_AIL, MIXSRC_GEA, MIXSRC_TRN, + MIXSRC_LAST_SWITCH = MIXSRC_TRN, #endif MIXSRC_FIRST_LOGICAL_SWITCH, MIXSRC_SW1 = MIXSRC_FIRST_LOGICAL_SWITCH, LUA_EXPORT_MULTIPLE("ls", "Logical switch L%d", NUM_LOGICAL_SWITCH) diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index e05426c0e..02152c56b 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -334,14 +334,15 @@ void defaultInputs() expo->mode = 3; // TODO constant #if defined(TRANSLATIONS_CZ) for (int c=0; c<4; c++) { - g_model.inputNames[i][c] = char2idx(STR_INPUTNAMES[1+STR_INPUTNAMES[0]*(stick_index-1)+c]); + g_model.inputNames[i][c] = char2idx(STR_INPUTNAMES[1+4*(stick_index-1)+c]); } + g_model.inputNames[i][4] = '\0'; #else for (int c=0; c<3; c++) { g_model.inputNames[i][c] = char2idx(STR_VSRCRAW[2+4*stick_index+c]); -#endif } g_model.inputNames[i][3] = '\0'; +#endif } eeDirty(EE_MODEL); } @@ -2527,6 +2528,10 @@ int main(void) lcdSetRefVolt(25); #endif +#if defined(PCBTARANIS) + displaySplash(); +#endif + sei(); // interrupts needed for telemetryInit and eeReadAll. #if defined(FRSKY) && !defined(DSM2_SERIAL) diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 577aff5a1..b8964aff9 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -1474,6 +1474,10 @@ enum AUDIO_SOUNDS { extern uint8_t requiredSpeakerVolume; #endif +extern void checkBattery(); +extern void opentxClose(); +extern void opentxInit(); + // Re-useable byte array to save having multiple buffers #define SD_SCREEN_FILE_LENGTH (32) union ReusableBuffer diff --git a/radio/src/strhelpers.cpp b/radio/src/strhelpers.cpp index 2733a59f2..7074450d8 100644 --- a/radio/src/strhelpers.cpp +++ b/radio/src/strhelpers.cpp @@ -207,8 +207,9 @@ char *strAppendFilename(char *dest, const char *filename, const int size) #define LEN_FILE_EXTENSION 4 char *getFileExtension(char *filename, int size) { - for (int i=0; i(size, strlen(filename)); + for (int i=len; i>=len-LEN_FILE_EXTENSION; --i) { + if (filename[i] == '.') { return &filename[i]; } } diff --git a/radio/src/switches.cpp b/radio/src/switches.cpp index 4660c26ef..6b7cba904 100644 --- a/radio/src/switches.cpp +++ b/radio/src/switches.cpp @@ -77,32 +77,10 @@ uint64_t switchesPos = 0; tmr10ms_t potsLastposStart[NUM_XPOTS] = { 0 }; uint8_t potsPos[NUM_XPOTS]; -#if defined(REV9E) div_t switchInfo(int switchPosition) { return div(switchPosition-SWSRC_FIRST_SWITCH, 3); } -#else -div_t switchInfo(int switchPosition) -{ - if (switchPosition <= SWSRC_SE2) { - return div(switchPosition-SWSRC_SA0, 3); - } - else if (switchPosition <= SWSRC_SF2) { - div_t qr = { 5, switchPosition == SWSRC_SF2 ? 2 : 0 }; - return qr; - } - else if (switchPosition <= SWSRC_SG2) { - div_t qr = { 6, switchPosition-SWSRC_SG0 }; - return qr; - } - else { - div_t qr = div(2*7+switchPosition-SWSRC_SH0, 2); - qr.rem *= 2; - return qr; - } -} -#endif uint64_t check2PosSwitchPosition(EnumKeys sw) { @@ -577,14 +555,7 @@ int8_t getMovedSwitch() uint8_t next = (1024+getValue(MIXSRC_SA+i)) / 1024; if (prev != next) { switches_states = (switches_states & (~mask)) | ((swarnstate_t)next << (i*2)); - if (i<5) - result = 1+(3*i)+next; - else if (i==5) - result = 1+(3*5)+(next!=0); - else if (i==6) - result = 1+(3*5)+2+next; - else - result = 1+(3*5)+2+3+(next!=0); + result = 1+(3*i)+next; } } } diff --git a/radio/src/targets/mega2560/board_mega2560.cpp b/radio/src/targets/mega2560/board_mega2560.cpp index 4dd09ff69..fc95c3223 100644 --- a/radio/src/targets/mega2560/board_mega2560.cpp +++ b/radio/src/targets/mega2560/board_mega2560.cpp @@ -100,7 +100,7 @@ uint8_t pwrCheck() void pwrOff() { - PORTH = 0x1F; // PortH-4 set to 0 + PORTH = 0xEF; // PortH-4 set to 0 } FORCEINLINE uint8_t keyDown() diff --git a/radio/src/targets/sky9x/rtc_driver.cpp b/radio/src/targets/sky9x/rtc_driver.cpp index e39e6e0fa..ddd0ea50d 100644 --- a/radio/src/targets/sky9x/rtc_driver.cpp +++ b/radio/src/targets/sky9x/rtc_driver.cpp @@ -34,7 +34,7 @@ * */ -#include "../opentx.h" +#include "../../opentx.h" #if defined(REVX) // TODO change this, not the right place diff --git a/radio/src/targets/taranis/bluetooth_driver.cpp b/radio/src/targets/taranis/bluetooth_driver.cpp index 55f106fec..819c1c153 100755 --- a/radio/src/targets/taranis/bluetooth_driver.cpp +++ b/radio/src/targets/taranis/bluetooth_driver.cpp @@ -16,9 +16,16 @@ #define BT_UART_AF GPIO_AF_USART6 #define BT_UART_IRQn USART6_IRQn -#define BT_UART_GPIO_PORT GPIOG +#define BT_UART_GPIO_CLK_TXRX RCC_AHB1Periph_GPIOG +#define BT_UART_GPIO_PORT_TXRX GPIOG #define BT_UART_GPIO_PIN_TX GPIO_Pin_14 #define BT_UART_GPIO_PIN_RX GPIO_Pin_9 +#define BT_UART_GPIO_CLK_EN RCC_AHB1Periph_GPIOD +#define BT_UART_GPIO_PORT_EN GPIOD +#define BT_UART_GPIO_PIN_EN GPIO_Pin_11 +#define BT_UART_GPIO_CLK_BRTS RCC_AHB1Periph_GPIOB +#define BT_UART_GPIO_PORT_BRTS GPIOB +#define BT_UART_GPIO_PIN_BRTS GPIO_Pin_10 #define BT_UART_GPIO_TX_PinSource GPIO_PinSource14 #define BT_UART_GPIO_RX_PinSource GPIO_PinSource9 @@ -30,25 +37,34 @@ int bt_open() GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; - RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE); + RCC_AHB1PeriphClockCmd(BT_UART_GPIO_CLK_TXRX, ENABLE); + RCC_AHB1PeriphClockCmd(BT_UART_GPIO_CLK_EN, ENABLE); + RCC_AHB1PeriphClockCmd(BT_UART_GPIO_CLK_BRTS, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART6, ENABLE); - GPIO_PinAFConfig(BT_UART_GPIO_PORT, BT_UART_GPIO_TX_PinSource, BT_UART_AF); - GPIO_PinAFConfig(BT_UART_GPIO_PORT, BT_UART_GPIO_RX_PinSource, BT_UART_AF); - - GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_TX; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_EN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(BT_UART_GPIO_PORT, &GPIO_InitStructure); - - GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_RX; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_Init(BT_UART_GPIO_PORT_EN, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_BRTS; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; - GPIO_Init(BT_UART_GPIO_PORT, &GPIO_InitStructure); + GPIO_Init(BT_UART_GPIO_PORT_BRTS, &GPIO_InitStructure); + + GPIO_InitStructure.GPIO_Pin = BT_UART_GPIO_PIN_TX|BT_UART_GPIO_PIN_RX; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; + GPIO_Init(BT_UART_GPIO_PORT_TXRX, &GPIO_InitStructure); + + GPIO_PinAFConfig(BT_UART_GPIO_PORT_TXRX, BT_UART_GPIO_TX_PinSource, BT_UART_AF); + GPIO_PinAFConfig(BT_UART_GPIO_PORT_TXRX, BT_UART_GPIO_RX_PinSource, BT_UART_AF); USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_Parity = USART_Parity_No; @@ -68,9 +84,14 @@ int bt_open() NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); + GPIO_SetBits(BT_UART_GPIO_PORT_BRTS, BT_UART_GPIO_PIN_BRTS); + GPIO_ResetBits(BT_UART_GPIO_PORT_EN, BT_UART_GPIO_PIN_EN); // open bluetooth + return 0; } +uint8_t bt_state = 0; + extern "C" void USART6_IRQHandler(void) { #if 1 @@ -90,6 +111,8 @@ extern "C" void USART6_IRQHandler(void) } else { USART_ITConfig(BT_UART, USART_IT_TXE, DISABLE); + GPIO_SetBits(BT_UART_GPIO_PORT_BRTS, BT_UART_GPIO_PIN_BRTS); + bt_state = 0; } } #endif @@ -101,10 +124,23 @@ int bt_write(const void *buffer, int len) for (int i=0; iOTYPER &= ~((GPIO_OTYPER_OT_0) << ((uint16_t)pos)) ; - if ( config & PIN_ODRAIN ) - { - pgpio->OTYPER |= (GPIO_OTYPER_OT_0) << pos ; - } } /* Pull-up Pull down resistor configuration*/ pgpio->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << ((uint16_t)pos * 2)); diff --git a/radio/src/targets/taranis/hal.h b/radio/src/targets/taranis/hal.h index e5f1b2129..605201d32 100644 --- a/radio/src/targets/taranis/hal.h +++ b/radio/src/targets/taranis/hal.h @@ -210,23 +210,6 @@ #define GPIOTRNDET GPIOA #define PIN_TRNDET GPIO_Pin_8 -#define PIN_PORTA 0x0000 -#define PIN_PORTB 0x0100 -#define PIN_PORTC 0x0200 -#define PIN_PORTD 0x0300 -#define PIN_PORTE 0x0400 -#define PIN_PORTF 0x0500 -#define PIN_PER_1 0x0010 -#define PIN_PER_2 0x0020 -#define PIN_PER_3 0x0030 -#define PIN_PER_5 0x0050 -#define PIN_PER_6 0x0060 -#define PIN_PER_8 0x0080 -// #define PIN_OS2 0x0000 -#define PIN_OS25 0x2000 -#define PIN_OS50 0x4000 -#define PIN_OS100 0x6000 - // Cppm #define RCC_AHB1Periph_GPIO_INTPPM RCC_AHB1Periph_GPIOA #define PIN_INTPPM_OUT GPIO_Pin_10 // PA.10 @@ -301,7 +284,7 @@ #endif // LCD -#if defined(REVPLUS) +#if defined(REV9E) #define RCC_AHB1Periph_LCD (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD) #define RCC_AHB1Periph_LCD_RST RCC_AHB1Periph_GPIOD #define RCC_AHB1Periph_LCD_NCS RCC_AHB1Periph_GPIOA @@ -312,7 +295,19 @@ #define PIN_LCD_CLK GPIO_Pin_10 // PC.10 #define PIN_LCD_NCS GPIO_Pin_15 // PA.15 #define PIN_LCD_A0 GPIO_Pin_11 // PC.11 - #define PIN_LCD_RST GPIO_Pin_15 // TOTO PD.12 + #define PIN_LCD_RST GPIO_Pin_15 // PD.15 +#elif defined(REVPLUS) + #define RCC_AHB1Periph_LCD (RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOC | RCC_AHB1Periph_GPIOD) + #define RCC_AHB1Periph_LCD_RST RCC_AHB1Periph_GPIOD + #define RCC_AHB1Periph_LCD_NCS RCC_AHB1Periph_GPIOA + #define GPIO_LCD_SPI GPIOC + #define GPIO_LCD_NCS GPIOA + #define GPIO_LCD_RST GPIOD + #define PIN_LCD_MOSI GPIO_Pin_12 // PC.12 + #define PIN_LCD_CLK GPIO_Pin_10 // PC.10 + #define PIN_LCD_NCS GPIO_Pin_15 // PA.15 + #define PIN_LCD_A0 GPIO_Pin_11 // PC.11 + #define PIN_LCD_RST GPIO_Pin_12 // PD.12 #else #define RCC_AHB1Periph_LCD RCC_AHB1Periph_GPIOD #define GPIO_LCD_SPI GPIOD diff --git a/radio/src/targets/taranis/lcd_driver.cpp b/radio/src/targets/taranis/lcd_driver.cpp index 8aa8da39a..45c755820 100644 --- a/radio/src/targets/taranis/lcd_driver.cpp +++ b/radio/src/targets/taranis/lcd_driver.cpp @@ -55,10 +55,10 @@ void initLcdSpi() SPI3->CR1 |= SPI_CR1_MSTR ; // Make sure in case SSM/SSI needed to be set first SPI3->CR1 |= SPI_CR1_SPE ; - configure_pins( PIN_LCD_NCS, PIN_OUTPUT | PIN_PORTA | PIN_PUSHPULL | PIN_OS25 | PIN_NO_PULLUP ) ; - configure_pins( PIN_LCD_RST, PIN_OUTPUT | PIN_PORTD | PIN_PUSHPULL | PIN_OS25 | PIN_NO_PULLUP ) ; - configure_pins( PIN_LCD_A0, PIN_OUTPUT | PIN_PORTC | PIN_PUSHPULL | PIN_OS50 | PIN_NO_PULLUP ) ; - configure_pins( PIN_LCD_MOSI|PIN_LCD_CLK, PIN_PORTC | PIN_PUSHPULL | PIN_OS50 | PIN_NO_PULLUP | PIN_PER_6 | PIN_PERIPHERAL ) ; + configure_pins( PIN_LCD_NCS, PIN_OUTPUT | PIN_PORTA | PIN_OS25) ; + configure_pins( PIN_LCD_RST, PIN_OUTPUT | PIN_PORTD | PIN_OS25) ; + configure_pins( PIN_LCD_A0, PIN_OUTPUT | PIN_PORTC | PIN_OS50) ; + configure_pins( PIN_LCD_MOSI|PIN_LCD_CLK, PIN_PORTC | PIN_OS50 | PIN_PER_6 | PIN_PERIPHERAL ) ; // NVIC_SetPriority( DMA1_Stream7_IRQn, 8 ) ; diff --git a/radio/src/targets/taranis/pulses_driver.cpp b/radio/src/targets/taranis/pulses_driver.cpp index 7a463c0f3..eab5f1a6b 100644 --- a/radio/src/targets/taranis/pulses_driver.cpp +++ b/radio/src/targets/taranis/pulses_driver.cpp @@ -323,7 +323,7 @@ static void init_pa10_ppm() //RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN ; // Enable portA clock RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIO_INTPPM, ENABLE); - configure_pins( PIN_INTPPM_OUT, PIN_PERIPHERAL | PIN_PORTA | PIN_PER_1 | PIN_OS25 | PIN_PUSHPULL ) ; + configure_pins( PIN_INTPPM_OUT, PIN_PERIPHERAL | PIN_PORTA | PIN_PER_1 | PIN_OS25) ; RCC->APB2ENR |= RCC_APB2ENR_TIM1EN ; // Enable clock TIM1->CR1 &= ~TIM_CR1_CEN ; @@ -553,7 +553,7 @@ static void init_pa7_ppm() ppmStreamPtr[EXTERNAL_MODULE] = ppmStream[EXTERNAL_MODULE]; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN ; // Enable portA clock - configure_pins( PIN_EXTPPM_OUT, PIN_PERIPHERAL | PIN_PORTA | PIN_PER_3 | PIN_OS25 | PIN_PUSHPULL ) ; + configure_pins( PIN_EXTPPM_OUT, PIN_PERIPHERAL | PIN_PORTA | PIN_PER_3 | PIN_OS25) ; RCC->APB2ENR |= RCC_APB2ENR_TIM8EN ; // Enable clock TIM8->CR1 &= ~TIM_CR1_CEN ; diff --git a/radio/src/targets/taranis/pwr_driver.c b/radio/src/targets/taranis/pwr_driver.c index c24b7e490..934da3ec3 100644 --- a/radio/src/targets/taranis/pwr_driver.c +++ b/radio/src/targets/taranis/pwr_driver.c @@ -37,14 +37,8 @@ #include "board_taranis.h" #include "../../pwr.h" -#ifdef REV9E - #define POWER_STATE_OFF 0 - #define POWER_STATE_START 1 - #define POWER_STATE_RUNNING 2 - #define POWER_STATE_STOPPING 3 - #define POWER_STATE_STOPPED 4 - uint8_t PowerState = POWER_STATE_OFF ; -#endif +extern volatile uint32_t g_tmr10ms; +#define get_tmr10ms() g_tmr10ms void pwrInit() { @@ -99,6 +93,10 @@ void pwrInit() // Soft power ON GPIO_SetBits(GPIOPWR, PIN_MCU_PWR); + +#if defined(REV9E) + while (pwrPressed()) ; +#endif } void pwrOff() @@ -106,41 +104,45 @@ void pwrOff() GPIO_ResetBits(GPIOPWR, PIN_MCU_PWR); } -// TODO enums should be UPPERCASE +#if defined(REV9E) +uint32_t pwrPressed() +{ + return GPIO_ReadInputDataBit(GPIOPWR, PIN_PWR_STATUS) == Bit_RESET; +} +#if !defined(BOOT) +uint32_t pwrPressTime = 0; +uint32_t pwrPressedDuration() +{ + if (pwrPressTime == 0) { + return 0; + } + else { + return get_tmr10ms() - pwrPressTime; + } +} +uint32_t pwrCheck() +{ + if (pwrPressed()) { + if (pwrPressTime == 0) { + pwrPressTime = get_tmr10ms(); + } + else { + if (get_tmr10ms() - pwrPressTime > 250) { + return e_power_off; + } + } + } + else { + pwrPressTime = 0; + } + return e_power_on; +} +#endif +#else uint32_t pwrCheck() { #if defined(SIMU) return e_power_on; -#elif defined(REV9E) - uint32_t switchValue = GPIO_ReadInputDataBit(GPIOPWR, PIN_PWR_STATUS) == Bit_RESET; - switch ( PowerState ) - { - case POWER_STATE_OFF : - PowerState = POWER_STATE_START ; - return e_power_on ; - - case POWER_STATE_START : - if ( !switchValue ) { - PowerState = POWER_STATE_RUNNING ; - } - return e_power_on ; - - case POWER_STATE_RUNNING : - if ( switchValue ) { - PowerState = POWER_STATE_STOPPING ; -// return e_power_on; - } - return e_power_on ; - - case POWER_STATE_STOPPING : - if ( !switchValue ) { - PowerState = POWER_STATE_STOPPED ; - } - return e_power_off ; - - case POWER_STATE_STOPPED : - return e_power_off ; - } #else if (GPIO_ReadInputDataBit(GPIOPWR, PIN_PWR_STATUS) == Bit_RESET) return e_power_on; @@ -150,3 +152,4 @@ uint32_t pwrCheck() return e_power_off; #endif } +#endif diff --git a/radio/src/targets/taranis/trainer_driver.cpp b/radio/src/targets/taranis/trainer_driver.cpp index 391a9c840..deac22b1f 100644 --- a/radio/src/targets/taranis/trainer_driver.cpp +++ b/radio/src/targets/taranis/trainer_driver.cpp @@ -48,7 +48,7 @@ void init_trainer_ppm() TrainerPulsePtr = ppmStream[TRAINER_MODULE]; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN ; // Enable portC clock - configure_pins( PIN_TR_PPM_OUT, PIN_PERIPHERAL | PIN_PORTC | PIN_PER_2 | PIN_OS25 | PIN_PUSHPULL ) ; + configure_pins( PIN_TR_PPM_OUT, PIN_PERIPHERAL | PIN_PORTC | PIN_PER_2 | PIN_OS25) ; configure_pins( PIN_TR_PPM_IN, PIN_PORTA | PIN_INPUT ) ; RCC->APB1ENR |= RCC_APB1ENR_TIM3EN ; // Enable clock TIM3->CR1 &= ~TIM_CR1_CEN ; @@ -92,10 +92,22 @@ void set_trainer_ppm_parameters(uint32_t idleTime, uint32_t delay, uint32_t posi // Trainer capture, PC8, Timer 3 channel 3 void init_trainer_capture() { - RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN ; // Enable portC clock - configure_pins (PIN_TR_PPM_IN, PIN_PERIPHERAL | PIN_PORTC | PIN_PER_2) ; - RCC->APB1ENR |= RCC_APB1ENR_TIM3EN ; // Enable clock + GPIO_InitTypeDef GPIO_InitStructure; + RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE); +#if 0 + configure_pins (PIN_TR_PPM_IN, PIN_PERIPHERAL | PIN_PORTC | PIN_PER_2) ; +#else + GPIO_InitStructure.GPIO_Pin = PIN_TR_PPM_IN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; + GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; + GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; + GPIO_Init(GPIO_TR_INOUT, &GPIO_InitStructure); + GPIO_PinAFConfig(GPIO_TR_INOUT, GPIO_PinSource8, GPIO_AF_TIM3); +#endif + + RCC->APB1ENR |= RCC_APB1ENR_TIM3EN ; TIM3->ARR = 0xFFFF ; TIM3->PSC = (PERI1_FREQUENCY * TIMER_MULT_APB1) / 2000000 - 1 ; // 0.5uS TIM3->CR2 = 0 ; diff --git a/radio/src/tasks_arm.cpp b/radio/src/tasks_arm.cpp index 8ca2b437a..a0a0b5c40 100644 --- a/radio/src/tasks_arm.cpp +++ b/radio/src/tasks_arm.cpp @@ -155,9 +155,6 @@ void mixerTask(void * pdata) #define MENU_TASK_PERIOD_TICKS 10 // 20ms -extern void opentxClose(); -extern void opentxInit(); - void menusTask(void * pdata) { opentxInit(); diff --git a/radio/src/telemetry/frsky.cpp b/radio/src/telemetry/frsky.cpp index eac2b461b..067fc2408 100644 --- a/radio/src/telemetry/frsky.cpp +++ b/radio/src/telemetry/frsky.cpp @@ -357,6 +357,11 @@ void telemetryWakeup() uint8_t lastReceived = telemetryItems[i].lastReceived; if (lastReceived < TELEMETRY_VALUE_TIMER_CYCLE && uint8_t(now - lastReceived) > TELEMETRY_VALUE_OLD_THRESHOLD) { telemetryItems[i].lastReceived = TELEMETRY_VALUE_OLD; + TelemetrySensor * sensor = & g_model.telemetrySensors[i]; + if (sensor->unit == UNIT_DATETIME) { + telemetryItems[i].datetime.datestate = 0; + telemetryItems[i].datetime.timestate = 0; + } } } } @@ -566,12 +571,15 @@ void telemetryReset() #endif #if defined(CPUARM) && defined(SIMU) - setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, RSSI_ID, 0, 75, UNIT_RAW, 0); - setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, T1_FIRST_ID, 0, 100, UNIT_CELSIUS, 0); - setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, T1_FIRST_ID, 1, 200, UNIT_CELSIUS, 0); + setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, RSSI_ID, 25, 75, UNIT_RAW, 0); + setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, SWR_ID, 25, 5, UNIT_RAW, 0); + setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, T1_FIRST_ID, 5, 100, UNIT_CELSIUS, 0); + setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, T1_FIRST_ID+0x10, 5, 200, UNIT_CELSIUS, 0); setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, ALT_FIRST_ID, 1, 1000, UNIT_METERS, 2); - setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, CELLS_FIRST_ID, 1, 0x80280220, UNIT_CELLS, 0); - setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, CURR_FIRST_ID, 1, 100, UNIT_AMPS, 2); + setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, CELLS_FIRST_ID, 2, 0x80280220, UNIT_CELLS, 0); + setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, CURR_FIRST_ID, 3, 100, UNIT_AMPS, 2); + setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, RPM_FIRST_ID, 5, 3600, UNIT_RPMS, 0); + setTelemetryValue(TELEM_PROTO_FRSKY_SPORT, FUEL_QTY_FIRST_ID, 11, 1000, UNIT_MILLILITERS, 2); #endif } diff --git a/radio/src/telemetry/frsky.h b/radio/src/telemetry/frsky.h index a98632f0a..dcfb7442d 100644 --- a/radio/src/telemetry/frsky.h +++ b/radio/src/telemetry/frsky.h @@ -135,9 +135,13 @@ #define RSSI_ID 0xf101 #define ADC1_ID 0xf102 #define ADC2_ID 0xf103 +#define SP2UART_A_ID 0xfd00 +#define SP2UART_B_ID 0xfd01 #define BATT_ID 0xf104 #define SWR_ID 0xf105 #define XJT_VERSION_ID 0xf106 +#define FUEL_QTY_FIRST_ID 0x0a10 +#define FUEL_QTY_LAST_ID 0x0a1f // Default sensor data IDs (Physical IDs + CRC) #define DATA_ID_VARIO 0x00 // 0 @@ -331,7 +335,8 @@ struct FrskyData { }; #endif -#define IS_VALID_XJT_VERSION() (frskyData.xjtVersion != 0 && frskyData.xjtVersion != 0xff) +#define IS_VALID_XJT_VERSION() (frskyData.xjtVersion != 0 && frskyData.xjtVersion != 0xff) +#define IS_HIDDEN_TELEMETRY_VALUE() ((appId == SP2UART_A_ID) || (appId == SP2UART_B_ID) || (appId == XJT_VERSION_ID) || ((appId == SWR_ID) && !IS_VALID_XJT_VERSION())) enum AlarmLevel { alarm_off = 0, diff --git a/radio/src/telemetry/frsky_d.cpp b/radio/src/telemetry/frsky_d.cpp index 1565971da..0ddcd133e 100644 --- a/radio/src/telemetry/frsky_d.cpp +++ b/radio/src/telemetry/frsky_d.cpp @@ -643,10 +643,10 @@ void frskyDSetDefault(int index, uint16_t id) if (id >= D_A1_ID && id <= D_A2_ID) { telemetrySensor.prec = 1; telemetrySensor.custom.ratio = 132; - telemetrySensor.inputFlags = TELEM_INPUT_FLAGS_FILTERING; + telemetrySensor.filter = 1; } else if (id == D_RSSI_ID) { - telemetrySensor.inputFlags = TELEM_INPUT_FLAGS_FILTERING; + telemetrySensor.filter = 1; } } else { diff --git a/radio/src/telemetry/frsky_sport.cpp b/radio/src/telemetry/frsky_sport.cpp index b1cb34933..076d0a4f4 100644 --- a/radio/src/telemetry/frsky_sport.cpp +++ b/radio/src/telemetry/frsky_sport.cpp @@ -58,9 +58,12 @@ struct FrSkySportSensor { const FrSkySportSensor sportSensors[] = { { RSSI_ID, RSSI_ID, ZSTR_RSSI, UNIT_RAW, 0 }, - { ADC1_ID, ADC1_ID, ZSTR_A1, UNIT_VOLTS, 0 }, - { ADC2_ID, ADC2_ID, ZSTR_A2, UNIT_VOLTS, 0 }, - { BATT_ID, BATT_ID, ZSTR_BATT, UNIT_VOLTS, 0 }, + { SWR_ID, SWR_ID, ZSTR_SWR, UNIT_RAW, 0 }, + { ADC1_ID, ADC1_ID, ZSTR_A1, UNIT_VOLTS, 1 }, + { ADC2_ID, ADC2_ID, ZSTR_A2, UNIT_VOLTS, 1 }, + { A3_FIRST_ID, A3_LAST_ID, ZSTR_A3, UNIT_VOLTS, 2 }, + { A4_FIRST_ID, A4_LAST_ID, ZSTR_A4, UNIT_VOLTS, 2 }, + { BATT_ID, BATT_ID, ZSTR_BATT, UNIT_VOLTS, 1 }, { T1_FIRST_ID, T2_LAST_ID, ZSTR_TEMP, UNIT_CELSIUS, 0 }, { RPM_FIRST_ID, RPM_LAST_ID, ZSTR_RPM, UNIT_RPMS, 0 }, { FUEL_FIRST_ID, FUEL_LAST_ID, ZSTR_FUEL, UNIT_PERCENT, 0 }, @@ -77,6 +80,7 @@ const FrSkySportSensor sportSensors[] = { { GPS_ALT_FIRST_ID, GPS_ALT_LAST_ID, ZSTR_GPSALT, UNIT_METERS, 2 }, { GPS_TIME_DATE_FIRST_ID, GPS_TIME_DATE_LAST_ID, ZSTR_GPSDATETIME, UNIT_DATETIME, 0 }, { GPS_LONG_LATI_FIRST_ID, GPS_LONG_LATI_LAST_ID, ZSTR_GPS, UNIT_GPS, 0 }, + { FUEL_QTY_FIRST_ID, FUEL_QTY_LAST_ID, ZSTR_FUEL, UNIT_MILLILITERS, 2 }, { 0, 0, NULL, UNIT_RAW, 0 } // sentinel }; @@ -166,7 +170,7 @@ void processSportUpdatePacket(uint8_t *packet) void processSportPacket(uint8_t *packet) { - uint8_t dataId = packet[0]; + uint8_t dataId = (packet[0] & 0x1F) + 1; uint8_t prim = packet[1]; uint16_t appId = *((uint16_t *)(packet+2)); @@ -220,8 +224,8 @@ void processSportPacket(uint8_t *packet) uint16_t value = HUB_DATA_U16(packet); processHubPacket(id, value); } - else { - if (appId == ADC1_ID || appId == ADC2_ID || appId == BATT_ID) { + else if (!IS_HIDDEN_TELEMETRY_VALUE()) { + if (appId == ADC1_ID || appId == ADC2_ID || appId == BATT_ID || appId == SWR_ID) { data = SPORT_DATA_U8(packet); } const FrSkySportSensor * sensor = getFrSkySportSensor(appId); @@ -250,9 +254,12 @@ void frskySportSetDefault(int index, uint16_t id, uint8_t instance) uint8_t prec = min(2, sensor->prec); telemetrySensor.init(sensor->name, unit, prec); if (id >= ADC1_ID && id <= BATT_ID) { - telemetrySensor.prec = 1; telemetrySensor.custom.ratio = 132; - telemetrySensor.inputFlags = TELEM_INPUT_FLAGS_FILTERING; + telemetrySensor.filter = 1; + } + if (unit == UNIT_RPMS) { + telemetrySensor.custom.ratio = 1; + telemetrySensor.custom.offset = 1; } } else { diff --git a/radio/src/telemetry/telemetry.cpp b/radio/src/telemetry/telemetry.cpp index 1a3101b3f..26f474803 100644 --- a/radio/src/telemetry/telemetry.cpp +++ b/radio/src/telemetry/telemetry.cpp @@ -14,8 +14,10 @@ void TelemetryItem::gpsReceived() lastReceived = now(); } -void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t newVal, uint32_t unit, uint32_t prec) +void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t val, uint32_t unit, uint32_t prec) { + int32_t newVal = val; + if (unit == UNIT_CELLS) { uint32_t data = uint32_t(newVal); uint8_t cellIndex = data & 0xF; @@ -52,13 +54,41 @@ void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t newVal, uin datetime.year = (uint16_t) ((data & 0xff000000) >> 24); datetime.month = (uint8_t) ((data & 0x00ff0000) >> 16); datetime.day = (uint8_t) ((data & 0x0000ff00) >> 8); - datetime.datestate = 1; + if (datetime.year != 0) { + datetime.datestate = 1; + } +#if defined(RTCLOCK) + if (g_eeGeneral.adjustRTC && (datetime.datestate == 1)) { + struct gtm t; + gettime(&t); + t.tm_year = datetime.year+4; + t.tm_mon = datetime.month-1; + t.tm_mday = datetime.day; + rtcSetTime(&t); + } +#endif } else { datetime.hour = ((uint8_t) ((data & 0xff000000) >> 24) + g_eeGeneral.timezone + 24) % 24; datetime.min = (uint8_t) ((data & 0x00ff0000) >> 16); datetime.sec = (uint16_t) ((data & 0x0000ff00) >> 8); - datetime.timestate = 1; + if (datetime.datestate == 1) { + datetime.timestate = 1; + } +#if defined(RTCLOCK) + if (g_eeGeneral.adjustRTC && (datetime.datestate == 1)) { + struct gtm t; + gettime(&t); + if (abs((t.tm_hour-datetime.hour)*3600 + (t.tm_min-datetime.min)*60 + (t.tm_sec-datetime.sec)) > 20) { + // we adjust RTC only if difference is > 20 seconds + t.tm_hour = datetime.hour; + t.tm_min = datetime.min; + t.tm_sec = datetime.sec; + g_rtcTime = gmktime(&t); // update local timestamp and get wday calculated + rtcSetTime(&t); + } + } +#endif } if (datetime.year == 0) { return; @@ -141,30 +171,33 @@ void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t newVal, uin datetime.timestate = 1; newVal = 0; } + else if (unit == UNIT_RPMS) { + newVal = (newVal * sensor.custom.offset) / sensor.custom.ratio; + } else { newVal = sensor.getValue(newVal, unit, prec); - if (sensor.inputFlags == TELEM_INPUT_FLAGS_AUTO_OFFSET) { + if (sensor.autoOffset) { if (!isAvailable()) { - offsetAuto = -newVal; + std.offsetAuto = -newVal; } - newVal += offsetAuto; + newVal += std.offsetAuto; } - else if (sensor.inputFlags == TELEM_INPUT_FLAGS_FILTERING) { + else if (sensor.filter) { if (!isAvailable()) { for (int i=0; i= 0) { - switch (protocol) { -#if defined(FRSKY_SPORT) - case TELEM_PROTO_FRSKY_SPORT: - frskySportSetDefault(available, id, instance); - break; -#endif -#if defined(FRSKY) - case TELEM_PROTO_FRSKY_D: - frskyDSetDefault(available, id); - break; -#endif - default: - break; - } - } - - return available; -} - void delTelemetryIndex(uint8_t index) { memclear(&g_model.telemetrySensors[index], sizeof(TelemetrySensor)); @@ -453,15 +461,56 @@ int availableTelemetryIndex() return -1; } +int lastUsedTelemetryIndex() +{ + for (int index=TELEM_VALUES_MAX-1; index>=0; index--) { + TelemetrySensor & telemetrySensor = g_model.telemetrySensors[index]; + if (telemetrySensor.isAvailable()) { + return index; + } + } + return -1; +} + +bool isSensorAvailableInResetSpecialFunction(int index) +{ + TelemetrySensor & telemetrySensor = g_model.telemetrySensors[index-FUNC_RESET_PARAM_FIRST_TELEM]; + return telemetrySensor.isAvailable(); +} + void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec) { - int index = getTelemetryIndex(protocol, id, instance); - - if (index >= 0) { - telemetryItems[index].setValue(g_model.telemetrySensors[index], value, unit, prec); + bool available = false; + + for (int index=0; index= 0) { + switch (protocol) { +#if defined(FRSKY_SPORT) + case TELEM_PROTO_FRSKY_SPORT: + frskySportSetDefault(index, id, instance); + break; +#endif +#if defined(FRSKY) + case TELEM_PROTO_FRSKY_D: + frskyDSetDefault(index, id); + break; +#endif + default: + break; + } + } + else { + POPUP_WARNING(STR_TELEMETRYFULL); + } } } @@ -516,7 +565,12 @@ int32_t convertTelemetryValue(int32_t value, uint8_t unit, uint8_t prec, uint8_t value = 32 + (value*18)/10; } } - + else if (unit == UNIT_MILLILITERS) { + if (destUnit == UNIT_FLOZ) { + value = (value * 100) / 2957; + } + } + for (int i=destPrec; i= TELEM_FORMULA_CELL) { + return false; + } + } + else { + if (unit >= UNIT_FIRST_VIRTUAL) { + return false; + } + } + return true; +} diff --git a/radio/src/telemetry/telemetry.h b/radio/src/telemetry/telemetry.h index ddb9160a7..9ad0d23a1 100644 --- a/radio/src/telemetry/telemetry.h +++ b/radio/src/telemetry/telemetry.h @@ -97,8 +97,10 @@ class TelemetryItem uint8_t lastReceived; // for detection of sensor loss union { - int32_t offsetAuto; - int32_t filterValues[TELEMETRY_AVERAGE_COUNT]; + struct { + int32_t offsetAuto; + int32_t filterValues[TELEMETRY_AVERAGE_COUNT]; + } std; struct { uint16_t prescale; } consumption; @@ -175,16 +177,18 @@ inline bool isTelemetryFieldComparisonAvailable(int index) TelemetrySensor & sensor = g_model.telemetrySensors[index]; if (sensor.type == TELEM_TYPE_CALCULATED) return true; - if (sensor.unit == UNIT_GPS) - return false; - if (sensor.unit == UNIT_DATETIME) + if (sensor.unit >= UNIT_DATETIME) return false; return (sensor.id != 0); } +extern TelemetryItem telemetryItems[]; + void setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec); void delTelemetryIndex(uint8_t index); int availableTelemetryIndex(); +int lastUsedTelemetryIndex(); +bool isSensorAvailableInResetSpecialFunction(int index); int32_t getTelemetryValue(uint8_t index, uint8_t & prec); int32_t convertTelemetryValue(int32_t value, uint8_t unit, uint8_t prec, uint8_t destUnit, uint8_t destPrec); diff --git a/radio/src/tests/mixer.cpp b/radio/src/tests/mixer.cpp index 393c2e0ff..109fb6d32 100644 --- a/radio/src/tests/mixer.cpp +++ b/radio/src/tests/mixer.cpp @@ -761,6 +761,9 @@ TEST(Mixer, SlowOnSwitchSource) g_model.mixData[0].weight = 100; g_model.mixData[0].speedUp = SLOW_STEP*5; g_model.mixData[0].speedDown = SLOW_STEP*5; +#if defined(PCBTARANIS) + g_eeGeneral.switchConfig = 0x03; +#endif s_mixer_first_run_done = true; diff --git a/radio/src/thirdparty/STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c b/radio/src/thirdparty/STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c index 3df57c99b..2de3abef6 100644 --- a/radio/src/thirdparty/STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c +++ b/radio/src/thirdparty/STM32F4xx_DSP_StdPeriph_Lib_V1.4.0/Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c @@ -2,10 +2,12 @@ ****************************************************************************** * @file system_stm32f4xx.c * @author MCD Application Team - * @version V1.4.0 - * @date 04-August-2014 + * @version V1.1.0 + * @date 21-March-2015 * @brief CMSIS Cortex-M4 Device Peripheral Access Layer System Source File. - * This file contains the system clock configuration for STM32F4xx devices. + * This file contains the system clock configuration for STM32F4xx devices, + * and is generated by the clock configuration tool + * stm32f4xx_Clock_Configuration_V1.1.0.xls * * 1. This file provides two functions and one global variable to be called from * user application: @@ -40,7 +42,7 @@ * 5. This file configures the system clock as follows: *============================================================================= *============================================================================= - * Supported STM32F40xxx/41xxx devices + * Supported STM32F40xx/41xx/427x/437x devices *----------------------------------------------------------------------------- * System Clock source | PLL (HSE) *----------------------------------------------------------------------------- @@ -54,9 +56,9 @@ *----------------------------------------------------------------------------- * APB2 Prescaler | 2 *----------------------------------------------------------------------------- - * HSE Frequency(Hz) | 25000000 + * HSE Frequency(Hz) | 12000000 *----------------------------------------------------------------------------- - * PLL_M | 25 + * PLL_M | 12 *----------------------------------------------------------------------------- * PLL_N | 336 *----------------------------------------------------------------------------- @@ -82,152 +84,11 @@ *----------------------------------------------------------------------------- * Data cache | ON *----------------------------------------------------------------------------- - * Require 48MHz for USB OTG FS, | Disabled + * Require 48MHz for USB OTG FS, | Enabled * SDIO and RNG clock | *----------------------------------------------------------------------------- *============================================================================= - *============================================================================= - * Supported STM32F42xxx/43xxx devices - *----------------------------------------------------------------------------- - * System Clock source | PLL (HSE) - *----------------------------------------------------------------------------- - * SYSCLK(Hz) | 180000000 - *----------------------------------------------------------------------------- - * HCLK(Hz) | 180000000 - *----------------------------------------------------------------------------- - * AHB Prescaler | 1 - *----------------------------------------------------------------------------- - * APB1 Prescaler | 4 - *----------------------------------------------------------------------------- - * APB2 Prescaler | 2 - *----------------------------------------------------------------------------- - * HSE Frequency(Hz) | 25000000 - *----------------------------------------------------------------------------- - * PLL_M | 25 - *----------------------------------------------------------------------------- - * PLL_N | 360 - *----------------------------------------------------------------------------- - * PLL_P | 2 - *----------------------------------------------------------------------------- - * PLL_Q | 7 - *----------------------------------------------------------------------------- - * PLLI2S_N | NA - *----------------------------------------------------------------------------- - * PLLI2S_R | NA - *----------------------------------------------------------------------------- - * I2S input clock | NA - *----------------------------------------------------------------------------- - * VDD(V) | 3.3 - *----------------------------------------------------------------------------- - * Main regulator output voltage | Scale1 mode - *----------------------------------------------------------------------------- - * Flash Latency(WS) | 5 - *----------------------------------------------------------------------------- - * Prefetch Buffer | ON - *----------------------------------------------------------------------------- - * Instruction cache | ON - *----------------------------------------------------------------------------- - * Data cache | ON - *----------------------------------------------------------------------------- - * Require 48MHz for USB OTG FS, | Disabled - * SDIO and RNG clock | - *----------------------------------------------------------------------------- - *============================================================================= - *============================================================================= - * Supported STM32F401xx devices - *----------------------------------------------------------------------------- - * System Clock source | PLL (HSE) - *----------------------------------------------------------------------------- - * SYSCLK(Hz) | 84000000 - *----------------------------------------------------------------------------- - * HCLK(Hz) | 84000000 - *----------------------------------------------------------------------------- - * AHB Prescaler | 1 - *----------------------------------------------------------------------------- - * APB1 Prescaler | 2 - *----------------------------------------------------------------------------- - * APB2 Prescaler | 1 - *----------------------------------------------------------------------------- - * HSE Frequency(Hz) | 25000000 - *----------------------------------------------------------------------------- - * PLL_M | 25 - *----------------------------------------------------------------------------- - * PLL_N | 336 - *----------------------------------------------------------------------------- - * PLL_P | 4 - *----------------------------------------------------------------------------- - * PLL_Q | 7 - *----------------------------------------------------------------------------- - * PLLI2S_N | NA - *----------------------------------------------------------------------------- - * PLLI2S_R | NA - *----------------------------------------------------------------------------- - * I2S input clock | NA - *----------------------------------------------------------------------------- - * VDD(V) | 3.3 - *----------------------------------------------------------------------------- - * Main regulator output voltage | Scale1 mode - *----------------------------------------------------------------------------- - * Flash Latency(WS) | 2 - *----------------------------------------------------------------------------- - * Prefetch Buffer | ON - *----------------------------------------------------------------------------- - * Instruction cache | ON - *----------------------------------------------------------------------------- - * Data cache | ON - *----------------------------------------------------------------------------- - * Require 48MHz for USB OTG FS, | Disabled - * SDIO and RNG clock | - *----------------------------------------------------------------------------- - *============================================================================= - *============================================================================= - * Supported STM32F411xx devices - *----------------------------------------------------------------------------- - * System Clock source | PLL (HSI) - *----------------------------------------------------------------------------- - * SYSCLK(Hz) | 100000000 - *----------------------------------------------------------------------------- - * HCLK(Hz) | 100000000 - *----------------------------------------------------------------------------- - * AHB Prescaler | 1 - *----------------------------------------------------------------------------- - * APB1 Prescaler | 2 - *----------------------------------------------------------------------------- - * APB2 Prescaler | 1 - *----------------------------------------------------------------------------- - * HSI Frequency(Hz) | 16000000 - *----------------------------------------------------------------------------- - * PLL_M | 16 - *----------------------------------------------------------------------------- - * PLL_N | 400 - *----------------------------------------------------------------------------- - * PLL_P | 4 - *----------------------------------------------------------------------------- - * PLL_Q | 7 - *----------------------------------------------------------------------------- - * PLLI2S_N | NA - *----------------------------------------------------------------------------- - * PLLI2S_R | NA - *----------------------------------------------------------------------------- - * I2S input clock | NA - *----------------------------------------------------------------------------- - * VDD(V) | 3.3 - *----------------------------------------------------------------------------- - * Main regulator output voltage | Scale1 mode - *----------------------------------------------------------------------------- - * Flash Latency(WS) | 3 - *----------------------------------------------------------------------------- - * Prefetch Buffer | ON - *----------------------------------------------------------------------------- - * Instruction cache | ON - *----------------------------------------------------------------------------- - * Data cache | ON - *----------------------------------------------------------------------------- - * Require 48MHz for USB OTG FS, | Disabled - * SDIO and RNG clock | - *----------------------------------------------------------------------------- - *============================================================================= - ****************************************************************************** + ****************************************************************************** * @attention * *

© COPYRIGHT 2013 STMicroelectronics

@@ -278,31 +139,10 @@ */ /************************* Miscellaneous Configuration ************************/ -/*!< Uncomment the following line if you need to use external SRAM or SDRAM mounted - on STM324xG_EVAL/STM324x7I_EVAL/STM324x9I_EVAL boards as data memory */ -#if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) +/*!< Uncomment the following line if you need to use external SRAM mounted + on STM324xG_EVAL/STM324x7I_EVAL board as data memory */ /* #define DATA_IN_ExtSRAM */ -#endif /* STM32F40_41xxx || STM32F427_437x || STM32F429_439xx */ -#if defined (STM32F427_437xx) || defined (STM32F429_439xx) -/* #define DATA_IN_ExtSDRAM */ -#endif /* STM32F427_437x || STM32F429_439xx */ - -#if defined (STM32F411xE) -/*!< Uncomment the following line if you need to clock the STM32F411xE by HSE Bypass - through STLINK MCO pin of STM32F103 microcontroller. The frequency cannot be changed - and is fixed at 8 MHz. - Hardware configuration needed for Nucleo Board: - � SB54, SB55 OFF - � R35 removed - � SB16, SB50 ON */ -/* #define USE_HSE_BYPASS */ - -#if defined (USE_HSE_BYPASS) -#define HSE_BYPASS_INPUT_FREQUENCY 8000000 -#endif /* USE_HSE_BYPASS */ -#endif /* STM32F411xE */ - /*!< Uncomment the following line if you need to relocate your vector Table in Internal SRAM. */ /* #define VECT_TAB_SRAM */ @@ -311,48 +151,16 @@ /******************************************************************************/ /************************* PLL Parameters *************************************/ -#if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx) /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */ -#if defined(REV9E) #define PLL_M 12 -#else -#define PLL_M 25 -#endif -#else /* STM32F411xE */ -#if defined (USE_HSE_BYPASS) -#define PLL_M 8 -#else /* STM32F411xE */ -#define PLL_M 16 -#endif /* USE_HSE_BYPASS */ -#endif /* STM32F40_41xxx || STM32F427_437xx || STM32F429_439xx || STM32F401xx */ +#define PLL_N 336 + +/* SYSCLK = PLL_VCO / PLL_P */ +#define PLL_P 2 /* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */ #define PLL_Q 7 -#if defined (STM32F40_41xxx) -#define PLL_N 336 -/* SYSCLK = PLL_VCO / PLL_P */ -#define PLL_P 2 -#endif /* STM32F40_41xxx */ - -#if defined (STM32F427_437xx) || defined (STM32F429_439xx) -#define PLL_N 360 -/* SYSCLK = PLL_VCO / PLL_P */ -#define PLL_P 2 -#endif /* STM32F427_437x || STM32F429_439xx */ - -#if defined (STM32F401xx) -#define PLL_N 336 -/* SYSCLK = PLL_VCO / PLL_P */ -#define PLL_P 4 -#endif /* STM32F401xx */ - -#if defined (STM32F411xE) -#define PLL_N 400 -/* SYSCLK = PLL_VCO / PLL_P */ -#define PLL_P 4 -#endif /* STM32F411xx */ - /******************************************************************************/ /** @@ -371,23 +179,9 @@ * @{ */ -#if defined (STM32F40_41xxx) uint32_t SystemCoreClock = 168000000; -#endif /* STM32F40_41xxx */ -#if defined (STM32F427_437xx) || defined (STM32F429_439xx) - uint32_t SystemCoreClock = 180000000; -#endif /* STM32F427_437x || STM32F429_439xx */ - -#if defined (STM32F401xx) - uint32_t SystemCoreClock = 84000000; -#endif /* STM32F401xx */ - -#if defined (STM32F411xE) - uint32_t SystemCoreClock = 100000000; -#endif /* STM32F401xx */ - -__I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; + __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; /** * @} @@ -398,10 +192,9 @@ __I uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9} */ static void SetSysClock(void); - -#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) -static void SystemInit_ExtMemCtl(void); -#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ +#ifdef DATA_IN_ExtSRAM + static void SystemInit_ExtMemCtl(void); +#endif /* DATA_IN_ExtSRAM */ /** * @} @@ -443,9 +236,9 @@ void SystemInit(void) /* Disable all interrupts */ RCC->CIR = 0x00000000; -#if defined (DATA_IN_ExtSRAM) || defined (DATA_IN_ExtSDRAM) +#ifdef DATA_IN_ExtSRAM SystemInit_ExtMemCtl(); -#endif /* DATA_IN_ExtSRAM || DATA_IN_ExtSDRAM */ +#endif /* DATA_IN_ExtSRAM */ /* Configure the System clock source, PLL Multiplier and Divider factors, AHB/APBx prescalers and Flash settings ----------------------------------*/ @@ -513,13 +306,13 @@ void SystemCoreClockUpdate(void) SystemCoreClock = HSE_VALUE; break; case 0x08: /* PLL used as system clock source */ - /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N + + /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N SYSCLK = PLL_VCO / PLL_P */ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22; pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM; -#if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx) if (pllsource != 0) { /* HSE used as PLL clock source */ @@ -530,23 +323,9 @@ void SystemCoreClockUpdate(void) /* HSI used as PLL clock source */ pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); } -#elif defined (STM32F411xE) -#if defined (USE_HSE_BYPASS) - if (pllsource != 0) - { - /* HSE used as PLL clock source */ - pllvco = (HSE_BYPASS_INPUT_FREQUENCY / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); - } -#else - if (pllsource == 0) - { - /* HSI used as PLL clock source */ - pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6); - } -#endif /* USE_HSE_BYPASS */ -#endif /* STM32F40_41xxx || STM32F427_437xx || STM32F429_439xx || STM32F401xx */ + pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2; - SystemCoreClock = pllvco/pllp; + SystemCoreClock = pllvco/pllp; break; default: SystemCoreClock = HSI_VALUE; @@ -569,7 +348,6 @@ void SystemCoreClockUpdate(void) */ static void SetSysClock(void) { -#if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) || defined (STM32F401xx) /******************************************************************************/ /* PLL (clocked by HSE) used as System clock source */ /******************************************************************************/ @@ -596,29 +374,19 @@ static void SetSysClock(void) if (HSEStatus == (uint32_t)0x01) { - /* Select regulator voltage output Scale 1 mode */ + /* Select regulator voltage output Scale 1 mode, System frequency up to 168 MHz */ RCC->APB1ENR |= RCC_APB1ENR_PWREN; PWR->CR |= PWR_CR_VOS; /* HCLK = SYSCLK / 1*/ RCC->CFGR |= RCC_CFGR_HPRE_DIV1; - -#if defined (STM32F40_41xxx) || defined (STM32F427_437xx) || defined (STM32F429_439xx) + /* PCLK2 = HCLK / 2*/ RCC->CFGR |= RCC_CFGR_PPRE2_DIV2; /* PCLK1 = HCLK / 4*/ RCC->CFGR |= RCC_CFGR_PPRE1_DIV4; -#endif /* STM32F40_41xxx || STM32F427_437x || STM32F429_439xx */ -#if defined (STM32F401xx) - /* PCLK2 = HCLK / 2*/ - RCC->CFGR |= RCC_CFGR_PPRE2_DIV1; - - /* PCLK1 = HCLK / 4*/ - RCC->CFGR |= RCC_CFGR_PPRE1_DIV2; -#endif /* STM32F401xx */ - /* Configure the main PLL */ RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); @@ -631,29 +399,8 @@ static void SetSysClock(void) { } -#if defined (STM32F427_437xx) || defined (STM32F429_439xx) - /* Enable the Over-drive to extend the clock frequency to 180 Mhz */ - PWR->CR |= PWR_CR_ODEN; - while((PWR->CSR & PWR_CSR_ODRDY) == 0) - { - } - PWR->CR |= PWR_CR_ODSWEN; - while((PWR->CSR & PWR_CSR_ODSWRDY) == 0) - { - } /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ - FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; -#endif /* STM32F427_437x || STM32F429_439xx */ - -#if defined (STM32F40_41xxx) - /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ - FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; -#endif /* STM32F40_41xxx */ - -#if defined (STM32F401xx) - /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ - FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_2WS; -#endif /* STM32F401xx */ + FLASH->ACR = FLASH_ACR_PRFTEN |FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_5WS; /* Select the main PLL as system clock source */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); @@ -668,113 +415,7 @@ static void SetSysClock(void) { /* If HSE fails to start-up, the application will have wrong clock configuration. User can add here some code to deal with this error */ } -#elif defined (STM32F411xE) -#if defined (USE_HSE_BYPASS) -/******************************************************************************/ -/* PLL (clocked by HSE) used as System clock source */ -/******************************************************************************/ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; - - /* Enable HSE and HSE BYPASS */ - RCC->CR |= ((uint32_t)RCC_CR_HSEON | RCC_CR_HSEBYP); - - /* Wait till HSE is ready and if Time out is reached exit */ - do - { - HSEStatus = RCC->CR & RCC_CR_HSERDY; - StartUpCounter++; - } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); - if ((RCC->CR & RCC_CR_HSERDY) != RESET) - { - HSEStatus = (uint32_t)0x01; - } - else - { - HSEStatus = (uint32_t)0x00; - } - - if (HSEStatus == (uint32_t)0x01) - { - /* Select regulator voltage output Scale 1 mode */ - RCC->APB1ENR |= RCC_APB1ENR_PWREN; - PWR->CR |= PWR_CR_VOS; - - /* HCLK = SYSCLK / 1*/ - RCC->CFGR |= RCC_CFGR_HPRE_DIV1; - - /* PCLK2 = HCLK / 2*/ - RCC->CFGR |= RCC_CFGR_PPRE2_DIV1; - - /* PCLK1 = HCLK / 4*/ - RCC->CFGR |= RCC_CFGR_PPRE1_DIV2; - - /* Configure the main PLL */ - RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | - (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); - - /* Enable the main PLL */ - RCC->CR |= RCC_CR_PLLON; - - /* Wait till the main PLL is ready */ - while((RCC->CR & RCC_CR_PLLRDY) == 0) - { - } - - /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ - FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_2WS; - - /* Select the main PLL as system clock source */ - RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); - RCC->CFGR |= RCC_CFGR_SW_PLL; - - /* Wait till the main PLL is used as system clock source */ - while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); - { - } - } - else - { /* If HSE fails to start-up, the application will have wrong clock - configuration. User can add here some code to deal with this error */ - } -#else /* HSI will be used as PLL clock source */ - /* Select regulator voltage output Scale 1 mode */ - RCC->APB1ENR |= RCC_APB1ENR_PWREN; - PWR->CR |= PWR_CR_VOS; - - /* HCLK = SYSCLK / 1*/ - RCC->CFGR |= RCC_CFGR_HPRE_DIV1; - - /* PCLK2 = HCLK / 2*/ - RCC->CFGR |= RCC_CFGR_PPRE2_DIV1; - - /* PCLK1 = HCLK / 4*/ - RCC->CFGR |= RCC_CFGR_PPRE1_DIV2; - - /* Configure the main PLL */ - RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | (PLL_Q << 24); - - /* Enable the main PLL */ - RCC->CR |= RCC_CR_PLLON; - - /* Wait till the main PLL is ready */ - while((RCC->CR & RCC_CR_PLLRDY) == 0) - { - } - - /* Configure Flash prefetch, Instruction cache, Data cache and wait state */ - FLASH->ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN |FLASH_ACR_DCEN |FLASH_ACR_LATENCY_2WS; - - /* Select the main PLL as system clock source */ - RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); - RCC->CFGR |= RCC_CFGR_SW_PLL; - - /* Wait till the main PLL is used as system clock source */ - while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL); - { - } -#endif /* USE_HSE_BYPASS */ -#endif /* STM32F40_41xxx || STM32F427_437xx || STM32F429_439xx || STM32F401xx */ } /** @@ -787,7 +428,7 @@ static void SetSysClock(void) /** * @brief Setup the external memory controller. * Called in startup_stm32f4xx.s before jump to main. - * This function configures the external SRAM mounted on STM324xG_EVAL/STM324x7I boards + * This function configures the external SRAM mounted on STM324xG_EVAL/STM324x7I_EVAL board * This SRAM will be used as program data memory (including heap and stack). * @param None * @retval None @@ -796,28 +437,31 @@ void SystemInit_ExtMemCtl(void) { /*-- GPIOs Configuration -----------------------------------------------------*/ /* - +-------------------+--------------------+------------------+--------------+ - + SRAM pins assignment + - +-------------------+--------------------+------------------+--------------+ - | PD0 <-> FMC_D2 | PE0 <-> FMC_NBL0 | PF0 <-> FMC_A0 | PG0 <-> FMC_A10 | - | PD1 <-> FMC_D3 | PE1 <-> FMC_NBL1 | PF1 <-> FMC_A1 | PG1 <-> FMC_A11 | - | PD4 <-> FMC_NOE | PE3 <-> FMC_A19 | PF2 <-> FMC_A2 | PG2 <-> FMC_A12 | - | PD5 <-> FMC_NWE | PE4 <-> FMC_A20 | PF3 <-> FMC_A3 | PG3 <-> FMC_A13 | - | PD8 <-> FMC_D13 | PE7 <-> FMC_D4 | PF4 <-> FMC_A4 | PG4 <-> FMC_A14 | - | PD9 <-> FMC_D14 | PE8 <-> FMC_D5 | PF5 <-> FMC_A5 | PG5 <-> FMC_A15 | - | PD10 <-> FMC_D15 | PE9 <-> FMC_D6 | PF12 <-> FMC_A6 | PG9 <-> FMC_NE2 | - | PD11 <-> FMC_A16 | PE10 <-> FMC_D7 | PF13 <-> FMC_A7 |-----------------+ - | PD12 <-> FMC_A17 | PE11 <-> FMC_D8 | PF14 <-> FMC_A8 | - | PD13 <-> FMC_A18 | PE12 <-> FMC_D9 | PF15 <-> FMC_A9 | - | PD14 <-> FMC_D0 | PE13 <-> FMC_D10 |-----------------+ - | PD15 <-> FMC_D1 | PE14 <-> FMC_D11 | - | | PE15 <-> FMC_D12 | - +------------------+------------------+ + +-------------------+--------------------+------------------+------------------+ + + SRAM pins assignment + + +-------------------+--------------------+------------------+------------------+ + | PD0 <-> FSMC_D2 | PE0 <-> FSMC_NBL0 | PF0 <-> FSMC_A0 | PG0 <-> FSMC_A10 | + | PD1 <-> FSMC_D3 | PE1 <-> FSMC_NBL1 | PF1 <-> FSMC_A1 | PG1 <-> FSMC_A11 | + | PD4 <-> FSMC_NOE | PE2 <-> FSMC_A23 | PF2 <-> FSMC_A2 | PG2 <-> FSMC_A12 | + | PD5 <-> FSMC_NWE | PE3 <-> FSMC_A19 | PF3 <-> FSMC_A3 | PG3 <-> FSMC_A13 | + | PD8 <-> FSMC_D13 | PE4 <-> FSMC_A20 | PF4 <-> FSMC_A4 | PG4 <-> FSMC_A14 | + | PD9 <-> FSMC_D14 | PE5 <-> FSMC_A21 | PF5 <-> FSMC_A5 | PG5 <-> FSMC_A15 | + | PD10 <-> FSMC_D15 | PE6 <-> FSMC_A22 | PF12 <-> FSMC_A6 | PG9 <-> FSMC_NE2 | + | PD11 <-> FSMC_A16 | PE7 <-> FSMC_D4 | PF13 <-> FSMC_A7 |------------------+ + | PD12 <-> FSMC_A17 | PE8 <-> FSMC_D5 | PF14 <-> FSMC_A8 | + | PD13 <-> FSMC_A18 | PE9 <-> FSMC_D6 | PF15 <-> FSMC_A9 | + | PD14 <-> FSMC_D0 | PE10 <-> FSMC_D7 |------------------+ + | PD15 <-> FSMC_D1 | PE11 <-> FSMC_D8 | + +-------------------| PE12 <-> FSMC_D9 | + | PE13 <-> FSMC_D10 | + | PE14 <-> FSMC_D11 | + | PE15 <-> FSMC_D12 | + +--------------------+ */ /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ RCC->AHB1ENR |= 0x00000078; - /* Connect PDx pins to FMC Alternate function */ + /* Connect PDx pins to FSMC Alternate function */ GPIOD->AFR[0] = 0x00cc00cc; GPIOD->AFR[1] = 0xcccccccc; /* Configure PDx pins in Alternate function mode */ @@ -829,7 +473,7 @@ void SystemInit_ExtMemCtl(void) /* No pull-up, pull-down for PDx pins */ GPIOD->PUPDR = 0x00000000; - /* Connect PEx pins to FMC Alternate function */ + /* Connect PEx pins to FSMC Alternate function */ GPIOE->AFR[0] = 0xcccccccc; GPIOE->AFR[1] = 0xcccccccc; /* Configure PEx pins in Alternate function mode */ @@ -841,7 +485,7 @@ void SystemInit_ExtMemCtl(void) /* No pull-up, pull-down for PEx pins */ GPIOE->PUPDR = 0x00000000; - /* Connect PFx pins to FMC Alternate function */ + /* Connect PFx pins to FSMC Alternate function */ GPIOF->AFR[0] = 0x00cccccc; GPIOF->AFR[1] = 0xcccc0000; /* Configure PFx pins in Alternate function mode */ @@ -853,7 +497,7 @@ void SystemInit_ExtMemCtl(void) /* No pull-up, pull-down for PFx pins */ GPIOF->PUPDR = 0x00000000; - /* Connect PGx pins to FMC Alternate function */ + /* Connect PGx pins to FSMC Alternate function */ GPIOG->AFR[0] = 0x00cccccc; GPIOG->AFR[1] = 0x000000c0; /* Configure PGx pins in Alternate function mode */ @@ -865,34 +509,24 @@ void SystemInit_ExtMemCtl(void) /* No pull-up, pull-down for PGx pins */ GPIOG->PUPDR = 0x00000000; -/*-- FMC Configuration ------------------------------------------------------*/ - /* Enable the FMC/FSMC interface clock */ +/*-- FSMC Configuration ------------------------------------------------------*/ + /* Enable the FSMC interface clock */ RCC->AHB3ENR |= 0x00000001; - -#if defined (STM32F427_437xx) || defined (STM32F429_439xx) - /* Configure and enable Bank1_SRAM2 */ - FMC_Bank1->BTCR[2] = 0x00001011; - FMC_Bank1->BTCR[3] = 0x00000201; - FMC_Bank1E->BWTR[2] = 0x0fffffff; -#endif /* STM32F427_437xx || STM32F429_439xx */ -#if defined (STM32F40_41xxx) /* Configure and enable Bank1_SRAM2 */ FSMC_Bank1->BTCR[2] = 0x00001011; FSMC_Bank1->BTCR[3] = 0x00000201; FSMC_Bank1E->BWTR[2] = 0x0fffffff; -#endif /* STM32F40_41xxx */ - /* Bank1_SRAM2 is configured as follow: - In case of FSMC configuration - NORSRAMTimingStructure.FSMC_AddressSetupTime = 1; - NORSRAMTimingStructure.FSMC_AddressHoldTime = 0; - NORSRAMTimingStructure.FSMC_DataSetupTime = 2; - NORSRAMTimingStructure.FSMC_BusTurnAroundDuration = 0; - NORSRAMTimingStructure.FSMC_CLKDivision = 0; - NORSRAMTimingStructure.FSMC_DataLatency = 0; - NORSRAMTimingStructure.FSMC_AccessMode = FMC_AccessMode_A; + + p.FSMC_AddressSetupTime = 1; + p.FSMC_AddressHoldTime = 0; + p.FSMC_DataSetupTime = 2; + p.FSMC_BusTurnAroundDuration = 0; + p.FSMC_CLKDivision = 0; + p.FSMC_DataLatency = 0; + p.FSMC_AccessMode = FSMC_AccessMode_A; FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2; FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; @@ -907,219 +541,11 @@ void SystemInit_ExtMemCtl(void) FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable; FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable; FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; - FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &NORSRAMTimingStructure; - FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &NORSRAMTimingStructure; - - In case of FMC configuration - NORSRAMTimingStructure.FMC_AddressSetupTime = 1; - NORSRAMTimingStructure.FMC_AddressHoldTime = 0; - NORSRAMTimingStructure.FMC_DataSetupTime = 2; - NORSRAMTimingStructure.FMC_BusTurnAroundDuration = 0; - NORSRAMTimingStructure.FMC_CLKDivision = 0; - NORSRAMTimingStructure.FMC_DataLatency = 0; - NORSRAMTimingStructure.FMC_AccessMode = FMC_AccessMode_A; - - FMC_NORSRAMInitStructure.FMC_Bank = FMC_Bank1_NORSRAM2; - FMC_NORSRAMInitStructure.FMC_DataAddressMux = FMC_DataAddressMux_Disable; - FMC_NORSRAMInitStructure.FMC_MemoryType = FMC_MemoryType_SRAM; - FMC_NORSRAMInitStructure.FMC_MemoryDataWidth = FMC_MemoryDataWidth_16b; - FMC_NORSRAMInitStructure.FMC_BurstAccessMode = FMC_BurstAccessMode_Disable; - FMC_NORSRAMInitStructure.FMC_AsynchronousWait = FMC_AsynchronousWait_Disable; - FMC_NORSRAMInitStructure.FMC_WaitSignalPolarity = FMC_WaitSignalPolarity_Low; - FMC_NORSRAMInitStructure.FMC_WrapMode = FMC_WrapMode_Disable; - FMC_NORSRAMInitStructure.FMC_WaitSignalActive = FMC_WaitSignalActive_BeforeWaitState; - FMC_NORSRAMInitStructure.FMC_WriteOperation = FMC_WriteOperation_Enable; - FMC_NORSRAMInitStructure.FMC_WaitSignal = FMC_WaitSignal_Disable; - FMC_NORSRAMInitStructure.FMC_ExtendedMode = FMC_ExtendedMode_Disable; - FMC_NORSRAMInitStructure.FMC_WriteBurst = FMC_WriteBurst_Disable; - FMC_NORSRAMInitStructure.FMC_ContinousClock = FMC_CClock_SyncOnly; - FMC_NORSRAMInitStructure.FMC_ReadWriteTimingStruct = &NORSRAMTimingStructure; - FMC_NORSRAMInitStructure.FMC_WriteTimingStruct = &NORSRAMTimingStructure; + FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p; + FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p; */ - } #endif /* DATA_IN_ExtSRAM */ - -#ifdef DATA_IN_ExtSDRAM -/** - * @brief Setup the external memory controller. - * Called in startup_stm32f4xx.s before jump to main. - * This function configures the external SDRAM mounted on STM324x9I_EVAL board - * This SDRAM will be used as program data memory (including heap and stack). - * @param None - * @retval None - */ -void SystemInit_ExtMemCtl(void) -{ - register uint32_t tmpreg = 0, timeout = 0xFFFF; - register uint32_t index; - - /* Enable GPIOC, GPIOD, GPIOE, GPIOF, GPIOG, GPIOH and GPIOI interface - clock */ - RCC->AHB1ENR |= 0x000001FC; - - /* Connect PCx pins to FMC Alternate function */ - GPIOC->AFR[0] = 0x0000000c; - GPIOC->AFR[1] = 0x00007700; - /* Configure PCx pins in Alternate function mode */ - GPIOC->MODER = 0x00a00002; - /* Configure PCx pins speed to 50 MHz */ - GPIOC->OSPEEDR = 0x00a00002; - /* Configure PCx pins Output type to push-pull */ - GPIOC->OTYPER = 0x00000000; - /* No pull-up, pull-down for PCx pins */ - GPIOC->PUPDR = 0x00500000; - - /* Connect PDx pins to FMC Alternate function */ - GPIOD->AFR[0] = 0x000000CC; - GPIOD->AFR[1] = 0xCC000CCC; - /* Configure PDx pins in Alternate function mode */ - GPIOD->MODER = 0xA02A000A; - /* Configure PDx pins speed to 50 MHz */ - GPIOD->OSPEEDR = 0xA02A000A; - /* Configure PDx pins Output type to push-pull */ - GPIOD->OTYPER = 0x00000000; - /* No pull-up, pull-down for PDx pins */ - GPIOD->PUPDR = 0x00000000; - - /* Connect PEx pins to FMC Alternate function */ - GPIOE->AFR[0] = 0xC00000CC; - GPIOE->AFR[1] = 0xCCCCCCCC; - /* Configure PEx pins in Alternate function mode */ - GPIOE->MODER = 0xAAAA800A; - /* Configure PEx pins speed to 50 MHz */ - GPIOE->OSPEEDR = 0xAAAA800A; - /* Configure PEx pins Output type to push-pull */ - GPIOE->OTYPER = 0x00000000; - /* No pull-up, pull-down for PEx pins */ - GPIOE->PUPDR = 0x00000000; - - /* Connect PFx pins to FMC Alternate function */ - GPIOF->AFR[0] = 0xcccccccc; - GPIOF->AFR[1] = 0xcccccccc; - /* Configure PFx pins in Alternate function mode */ - GPIOF->MODER = 0xAA800AAA; - /* Configure PFx pins speed to 50 MHz */ - GPIOF->OSPEEDR = 0xAA800AAA; - /* Configure PFx pins Output type to push-pull */ - GPIOF->OTYPER = 0x00000000; - /* No pull-up, pull-down for PFx pins */ - GPIOF->PUPDR = 0x00000000; - - /* Connect PGx pins to FMC Alternate function */ - GPIOG->AFR[0] = 0xcccccccc; - GPIOG->AFR[1] = 0xcccccccc; - /* Configure PGx pins in Alternate function mode */ - GPIOG->MODER = 0xaaaaaaaa; - /* Configure PGx pins speed to 50 MHz */ - GPIOG->OSPEEDR = 0xaaaaaaaa; - /* Configure PGx pins Output type to push-pull */ - GPIOG->OTYPER = 0x00000000; - /* No pull-up, pull-down for PGx pins */ - GPIOG->PUPDR = 0x00000000; - - /* Connect PHx pins to FMC Alternate function */ - GPIOH->AFR[0] = 0x00C0CC00; - GPIOH->AFR[1] = 0xCCCCCCCC; - /* Configure PHx pins in Alternate function mode */ - GPIOH->MODER = 0xAAAA08A0; - /* Configure PHx pins speed to 50 MHz */ - GPIOH->OSPEEDR = 0xAAAA08A0; - /* Configure PHx pins Output type to push-pull */ - GPIOH->OTYPER = 0x00000000; - /* No pull-up, pull-down for PHx pins */ - GPIOH->PUPDR = 0x00000000; - - /* Connect PIx pins to FMC Alternate function */ - GPIOI->AFR[0] = 0xCCCCCCCC; - GPIOI->AFR[1] = 0x00000CC0; - /* Configure PIx pins in Alternate function mode */ - GPIOI->MODER = 0x0028AAAA; - /* Configure PIx pins speed to 50 MHz */ - GPIOI->OSPEEDR = 0x0028AAAA; - /* Configure PIx pins Output type to push-pull */ - GPIOI->OTYPER = 0x00000000; - /* No pull-up, pull-down for PIx pins */ - GPIOI->PUPDR = 0x00000000; - -/*-- FMC Configuration ------------------------------------------------------*/ - /* Enable the FMC interface clock */ - RCC->AHB3ENR |= 0x00000001; - - /* Configure and enable SDRAM bank1 */ - FMC_Bank5_6->SDCR[0] = 0x000039D0; - FMC_Bank5_6->SDTR[0] = 0x01115351; - - /* SDRAM initialization sequence */ - /* Clock enable command */ - FMC_Bank5_6->SDCMR = 0x00000011; - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - while((tmpreg != 0) & (timeout-- > 0)) - { - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - } - - /* Delay */ - for (index = 0; index<1000; index++); - - /* PALL command */ - FMC_Bank5_6->SDCMR = 0x00000012; - timeout = 0xFFFF; - while((tmpreg != 0) & (timeout-- > 0)) - { - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - } - - /* Auto refresh command */ - FMC_Bank5_6->SDCMR = 0x00000073; - timeout = 0xFFFF; - while((tmpreg != 0) & (timeout-- > 0)) - { - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - } - - /* MRD register program */ - FMC_Bank5_6->SDCMR = 0x00046014; - timeout = 0xFFFF; - while((tmpreg != 0) & (timeout-- > 0)) - { - tmpreg = FMC_Bank5_6->SDSR & 0x00000020; - } - - /* Set refresh count */ - tmpreg = FMC_Bank5_6->SDRTR; - FMC_Bank5_6->SDRTR = (tmpreg | (0x0000027C<<1)); - - /* Disable write protection */ - tmpreg = FMC_Bank5_6->SDCR[0]; - FMC_Bank5_6->SDCR[0] = (tmpreg & 0xFFFFFDFF); - -/* - Bank1_SDRAM is configured as follow: - - FMC_SDRAMTimingInitStructure.FMC_LoadToActiveDelay = 2; - FMC_SDRAMTimingInitStructure.FMC_ExitSelfRefreshDelay = 6; - FMC_SDRAMTimingInitStructure.FMC_SelfRefreshTime = 4; - FMC_SDRAMTimingInitStructure.FMC_RowCycleDelay = 6; - FMC_SDRAMTimingInitStructure.FMC_WriteRecoveryTime = 2; - FMC_SDRAMTimingInitStructure.FMC_RPDelay = 2; - FMC_SDRAMTimingInitStructure.FMC_RCDDelay = 2; - - FMC_SDRAMInitStructure.FMC_Bank = SDRAM_BANK; - FMC_SDRAMInitStructure.FMC_ColumnBitsNumber = FMC_ColumnBits_Number_8b; - FMC_SDRAMInitStructure.FMC_RowBitsNumber = FMC_RowBits_Number_11b; - FMC_SDRAMInitStructure.FMC_SDMemoryDataWidth = FMC_SDMemory_Width_16b; - FMC_SDRAMInitStructure.FMC_InternalBankNumber = FMC_InternalBank_Number_4; - FMC_SDRAMInitStructure.FMC_CASLatency = FMC_CAS_Latency_3; - FMC_SDRAMInitStructure.FMC_WriteProtection = FMC_Write_Protection_Disable; - FMC_SDRAMInitStructure.FMC_SDClockPeriod = FMC_SDClock_Period_2; - FMC_SDRAMInitStructure.FMC_ReadBurst = FMC_Read_Burst_disable; - FMC_SDRAMInitStructure.FMC_ReadPipeDelay = FMC_ReadPipe_Delay_1; - FMC_SDRAMInitStructure.FMC_SDRAMTimingStruct = &FMC_SDRAMTimingInitStructure; -*/ - -} -#endif /* DATA_IN_ExtSDRAM */ /** @@ -1134,3 +560,4 @@ void SystemInit_ExtMemCtl(void) * @} */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ + diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 48ce9ee21..210b07221 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -121,6 +121,10 @@ const pm_char STR_OPEN9X[] PROGMEM = ISTR(DSM_PROTOCOLS) ISTR(VOLTSRC) ISTR(CURVE_TYPES) + ISTR(VSENSORTYPES) + ISTR(VFORMULAS) + ISTR(VPREC) + ISTR(VCELLINDEX) #endif #if defined(MAVLINK) ISTR(MAVLINK_BAUDS) @@ -248,6 +252,8 @@ const pm_char STR_THROTTLEWARNING[] PROGMEM = TR_THROTTLEWARNING; const pm_char STR_SWITCHWARNING[] PROGMEM = TR_SWITCHWARNING; #ifdef FRSKY const pm_char STR_TIMEZONE[] PROGMEM = TR_TIMEZONE; +const pm_char STR_ADJUST_RTC[] PROGMEM = TR_ADJUST_RTC; +const pm_char STR_GPS[] PROGMEM = TR_GPS; const pm_char STR_GPSCOORD[] PROGMEM = TR_GPSCOORD; const pm_char STR_VARIO[] PROGMEM = TR_VARIO; const pm_char STR_PITCH_AT_ZERO[] PROGMEM = TR_PITCH_AT_ZERO; @@ -376,6 +382,10 @@ const pm_char STR_SHUTDOWN[] PROGMEM = TR_SHUTDOWN; const pm_char STR_SAVEMODEL[] PROGMEM = TR_SAVEMODEL; #endif +#if defined(PCBTARANIS) && defined(REV9E) +const pm_char STR_POWEROFF[] PROGMEM = TR_POWEROFF; +#endif + const pm_char STR_BATT_CALIB[] PROGMEM = TR_BATT_CALIB; #if defined(CPUARM) || defined(FRSKY) @@ -499,6 +509,8 @@ const pm_char STR_FLASH_EXTERNAL_DEVICE[] PROGMEM = TR_FLASH_EXTERNAL_DEVICE; const pm_char STR_WRITING[] PROGMEM = TR_WRITING; const pm_char STR_CONFIRM_FORMAT[] PROGMEM = TR_CONFIRM_FORMAT; const pm_char STR_EEBACKUP[] PROGMEM = TR_EEBACKUP; +const pm_char STR_FACTORYRESET[] PROGMEM = TR_FACTORYRESET; +const pm_char STR_CONFIRMRESET[] PROGMEM = TR_CONFIRMRESET; const pm_char STR_TOO_MANY_LUA_SCRIPTS[] PROGMEM = TR_TO_MANY_LUA_SCRIPTS; const pm_char STR_BLCOLOR[] PROGMEM = TR_BLCOLOR; @@ -529,9 +541,24 @@ const pm_char STR_BLCOLOR[] PROGMEM = TR_BLCOLOR; const pm_char STR_CRITICALALARM[] PROGMEM = TR_CRITICALALARM; const pm_char STR_TELEMETRY_TYPE[] PROGMEM = TR_TELEMETRY_TYPE; const pm_char STR_TELEMETRY_SENSORS[] PROGMEM = TR_TELEMETRY_SENSORS; + const pm_char STR_VALUE[] PROGMEM = TR_VALUE; + const pm_char STR_TOPLCDTIMER[] PROGMEM = TR_TOPLCDTIMER; + const pm_char STR_UNIT[] PROGMEM = TR_UNIT; const pm_char STR_TELEMETRY_NEWSENSOR[] PROGMEM = TR_TELEMETRY_NEWSENSOR; const pm_char STR_ID[] PROGMEM = TR_ID; const pm_char STR_PRECISION[] PROGMEM = TR_PRECISION; + const pm_char STR_RATIO[] PROGMEM = TR_RATIO; + const pm_char STR_FORMULA[] PROGMEM = TR_FORMULA; + const pm_char STR_CELLINDEX[] PROGMEM = TR_CELLINDEX; + const pm_char STR_LOGS[] PROGMEM = TR_LOGS; + const pm_char STR_OPTIONS[] PROGMEM = TR_OPTIONS; + const pm_char STR_ALTSENSOR[] PROGMEM = TR_ALTSENSOR; + const pm_char STR_CELLSENSOR[] PROGMEM = TR_CELLSENSOR; + const pm_char STR_GPSSENSOR[] PROGMEM = TR_GPSSENSOR; + const pm_char STR_CURRENTSENSOR[] PROGMEM = TR_CURRENTSENSOR; + const pm_char STR_AUTOOFFSET[] PROGMEM = TR_AUTOOFFSET; + const pm_char STR_FILTER[] PROGMEM = TR_FILTER; + const pm_char STR_TELEMETRYFULL[] PROGMEM = TR_TELEMETRYFULL; #endif #if defined(PCBTARANIS) @@ -561,6 +588,18 @@ const pm_char STR_BLCOLOR[] PROGMEM = TR_BLCOLOR; const pm_char STR_SCRIPT[] PROGMEM = TR_SCRIPT; const pm_char STR_INPUTS[] PROGMEM = TR_INPUTS; const pm_char STR_OUTPUTS[] PROGMEM = TR_OUTPUTS; + const pm_char STR_MENU_INPUTS[] PROGMEM = TR_MENU_INPUTS; + const pm_char STR_MENU_LUA[] PROGMEM = TR_MENU_LUA; + const pm_char STR_MENU_STICKS[] PROGMEM = TR_MENU_STICKS; + const pm_char STR_MENU_POTS[] PROGMEM = TR_MENU_POTS; + const pm_char STR_MENU_MAX[] PROGMEM = TR_MENU_MAX; + const pm_char STR_MENU_HELI[] PROGMEM = TR_MENU_HELI; + const pm_char STR_MENU_TRIMS[] PROGMEM = TR_MENU_TRIMS; + const pm_char STR_MENU_SWITCHES[] PROGMEM = TR_MENU_SWITCHES; + const pm_char STR_MENU_TRAINER[] PROGMEM = TR_MENU_TRAINER; + const pm_char STR_MENU_CHANNELS[] PROGMEM = TR_MENU_CHANNELS; + const pm_char STR_MENU_GVARS[] PROGMEM = TR_MENU_GVARS; + const pm_char STR_MENU_TELEMETRY[] PROGMEM = TR_MENU_TELEMETRY; #endif #if MENUS_LOCK == 1 diff --git a/radio/src/translations.h b/radio/src/translations.h index 8f9cdbcda..307b7cb4e 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -192,7 +192,11 @@ extern const pm_char STR_OPEN9X[]; #define OFS_DSM_PROTOCOLS (OFS_XJT_PROTOCOLS + sizeof(TR_XJT_PROTOCOLS)) #define OFS_VOLTSRC (OFS_DSM_PROTOCOLS + sizeof(TR_DSM_PROTOCOLS)) #define OFS_CURVE_TYPES (OFS_VOLTSRC + sizeof(TR_VOLTSRC)) - #define OFS_MAVLINK_BAUDS (OFS_CURVE_TYPES + sizeof(TR_CURVE_TYPES)) + #define OFS_VSENSORTYPES (OFS_CURVE_TYPES + sizeof(TR_CURVE_TYPES)) + #define OFS_VFORMULAS (OFS_VSENSORTYPES + sizeof(TR_VSENSORTYPES)) + #define OFS_VPREC (OFS_VFORMULAS + sizeof(TR_VFORMULAS)) + #define OFS_VCELLINDEX (OFS_VPREC + sizeof(TR_VPREC)) + #define OFS_MAVLINK_BAUDS (OFS_VCELLINDEX + sizeof(TR_VCELLINDEX)) #else #define OFS_MAVLINK_BAUDS (OFS_VTRAINERMODES) #endif @@ -298,6 +302,10 @@ extern const pm_char STR_OPEN9X[]; #define STR_XJT_PROTOCOLS (STR_OPEN9X + OFS_XJT_PROTOCOLS) #define STR_DSM_PROTOCOLS (STR_OPEN9X + OFS_DSM_PROTOCOLS) #define STR_CURVE_TYPES (STR_OPEN9X + OFS_CURVE_TYPES) + #define STR_VSENSORTYPES (STR_OPEN9X + OFS_VSENSORTYPES) + #define STR_VFORMULAS (STR_OPEN9X + OFS_VFORMULAS) + #define STR_VPREC (STR_OPEN9X + OFS_VPREC) + #define STR_VCELLINDEX (STR_OPEN9X + OFS_VCELLINDEX) #endif #if defined(MAVLINK) @@ -427,6 +435,8 @@ extern const pm_char STR_SPLASHSCREEN[]; extern const pm_char STR_THROTTLEWARNING[]; extern const pm_char STR_SWITCHWARNING[]; extern const pm_char STR_TIMEZONE[]; +extern const pm_char STR_ADJUST_RTC[]; +extern const pm_char STR_GPS[]; extern const pm_char STR_GPSCOORD[]; extern const pm_char STR_VARIO[]; extern const pm_char STR_PITCH_AT_ZERO[]; @@ -542,6 +552,10 @@ extern const pm_char STR_SHUTDOWN[]; extern const pm_char STR_SAVEMODEL[]; #endif +#if defined(PCBTARANIS) && defined(REV9E) +extern const pm_char STR_POWEROFF[]; +#endif + extern const pm_char STR_BATT_CALIB[]; #if defined(CPUARM) || defined(FRSKY) @@ -669,6 +683,8 @@ extern const pm_char STR_FLASH_INTERNAL_MODULE[]; extern const pm_char STR_WRITING[]; extern const pm_char STR_CONFIRM_FORMAT[]; extern const pm_char STR_EEBACKUP[]; +extern const pm_char STR_FACTORYRESET[]; +extern const pm_char STR_CONFIRMRESET[]; extern const pm_char STR_TOO_MANY_LUA_SCRIPTS[]; extern const pm_char STR_BLCOLOR[]; @@ -735,9 +751,24 @@ extern const pm_char STR_BLCOLOR[]; extern const pm_char STR_CRITICALALARM[]; extern const pm_char STR_TELEMETRY_TYPE[]; extern const pm_char STR_TELEMETRY_SENSORS[]; + extern const pm_char STR_VALUE[]; + extern const pm_char STR_TOPLCDTIMER[]; + extern const pm_char STR_UNIT[] PROGMEM; extern const pm_char STR_TELEMETRY_NEWSENSOR[]; extern const pm_char STR_ID[]; extern const pm_char STR_PRECISION[]; + extern const pm_char STR_RATIO[]; + extern const pm_char STR_FORMULA[]; + extern const pm_char STR_CELLINDEX[]; + extern const pm_char STR_LOGS[]; + extern const pm_char STR_OPTIONS[]; + extern const pm_char STR_ALTSENSOR[]; + extern const pm_char STR_CELLSENSOR[]; + extern const pm_char STR_GPSSENSOR[]; + extern const pm_char STR_CURRENTSENSOR[]; + extern const pm_char STR_AUTOOFFSET[]; + extern const pm_char STR_FILTER[]; + extern const pm_char STR_TELEMETRYFULL[]; #endif #if defined(PCBTARANIS) @@ -767,6 +798,18 @@ extern const pm_char STR_BLCOLOR[]; extern const pm_char STR_SCRIPT[]; extern const pm_char STR_INPUTS[]; extern const pm_char STR_OUTPUTS[]; + extern const pm_char STR_MENU_INPUTS[]; + extern const pm_char STR_MENU_LUA[]; + extern const pm_char STR_MENU_STICKS[]; + extern const pm_char STR_MENU_POTS[]; + extern const pm_char STR_MENU_MAX[]; + extern const pm_char STR_MENU_HELI[]; + extern const pm_char STR_MENU_TRIMS[]; + extern const pm_char STR_MENU_SWITCHES[]; + extern const pm_char STR_MENU_TRAINER[]; + extern const pm_char STR_MENU_CHANNELS[]; + extern const pm_char STR_MENU_GVARS[]; + extern const pm_char STR_MENU_TELEMETRY[]; #endif #if MENUS_LOCK == 1 diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index 76eef770b..988b94329 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -82,9 +82,15 @@ #define LEN_UART3MODES "\015" #define TR_UART3MODES "VYP\0 ""S-Port Mirror""Telemetrie\0 ""SBUS Trainer\0""Debug\0" +#define LEN_SWTYPES "\006" +#define TR_SWTYPES "None\0 ""Toggle""2POS\0 ""3POS\0" + #define LEN_POTTYPES "\017" #define TR_POTTYPES "Není\0 ""Pot s aretací\0 ""Vícepol. přep.\0""Potenciometr\0" +#define LEN_SLIDERTYPES "\006" +#define TR_SLIDERTYPES "žádný\0""Slider" + #define LEN_DATETIME "\006" #define TR_DATETIME "DATUM:""ČAS: " @@ -109,15 +115,20 @@ #define LEN_VTRIMINC "\007" #define TR_VTRIMINC "Expo\0 ""ExJemný""Jemný\0 ""Střední""Hrubý\0 " +#define LEN_VDISPLAYTRIMS "\006" +#define TR_VDISPLAYTRIMS "Ne\0 ""Změna\0""Ano\0 " + #define LEN_VBEEPCOUNTDOWN "\006" -#define TR_VBEEPCOUNTDOWN "Tichý\0""Zvuk\0 ""Hlas\0 " +#define TR_VBEEPCOUNTDOWN "Ne\0 ""Zvuk\0 ""Hlas\0 " #define LEN_CURVE_TYPES "\010" #define TR_CURVE_TYPES "Rastr-X\0""Volná-XY" #define LEN_RETA123 "\001" -#if defined(PCBTARANIS) || defined(REVX) +#if defined(PCBTARANIS) && defined(REV9E) + #define TR_RETA123 "SVPK1234LRLR" +#elif defined(PCBTARANIS) || defined(REVX) #define TR_RETA123 "SVPK123LR" #elif defined(PCBSKY9X) #define TR_RETA123 "SVPK123a" @@ -174,7 +185,7 @@ #define LEN_VMIXTRIMS "\004" #define TR_VMIXTRIMS "VYP\0""ZAP\0""Směr""Výšk""Plyn""Křid" -#if defined(PCBTARANIS) +#if LCD_W >= 212 #define TR_CSWTIMER "Timer" #define TR_CSWSTICKY "Stcky" #define TR_CSWRANGE "Range" @@ -230,18 +241,18 @@ #else #define TR_PLAY_TRACK "\221\222Stopa\0 " #endif - #define TR_PLAY_BOTH "\221\222Pár\0 " - #define TR_PLAY_VALUE "\221\222TTS\0 " + #define TR_PLAY_BOTH "\221\222Pár stop\0" + #define TR_PLAY_VALUE "\221\222Hlásit\0 " #else #define TR_PLAY_TRACK "[\221\222Stopa]\0 " #define TR_PLAY_BOTH "[\221\222Pár]\0 " - #define TR_PLAY_VALUE "[\221\222TTS]\0 " + #define TR_PLAY_VALUE "[\221\222Hlásit]\0" #endif -#define TR_SF_BG_MUSIC "BgHudba\0 ""BgHudba ||\0" +#define TR_SF_BG_MUSIC "\221\222Hudba\0 ""\221\222Hudba ||\0" #if defined(SDCARD) - #define TR_SDCLOGS "Log na SD\0 " + #define TR_SDCLOGS "Loguj na SD" #else #define TR_SDCLOGS "[Logování]\0" #endif @@ -249,7 +260,7 @@ #ifdef GVARS #define TR_ADJUST_GVAR "Nastav \0 " #else - #define TR_ADJUST_GVAR "[AdjustGV]\0" + #define TR_ADJUST_GVAR "[Nastav GP]" #endif #if defined(LUA) @@ -302,8 +313,8 @@ #define TR_FSW_RESET_ROTENC #endif -#if defined(PCBTARANIS) - #define TR_FSW_RESET_TIMERS "Timer 1\0 ""Timer 2\0 ""Timer 3\0 " +#if LCD_W >= 212 + #define TR_FSW_RESET_TIMERS "Stopky 1\0 ""Stopky 2\0 ""Stopky 3\0 " #elif defined(CPUARM) #define TR_FSW_RESET_TIMERS "Tmr1""Tmr2""Tmr3" #else @@ -335,10 +346,10 @@ #define TR_ASPD_MAX TR("ASp+", "ASpd+") -#if defined(PCBTARANIS) +#if LCD_W >= 212 #define TR_TELEM_RSSI_RX "RSSI\0" #else - #define TR_TELEM_RSSI_RX TR("Rx\0 ", "Rx\0 ") + #define TR_TELEM_RSSI_RX TR("Rx\0 ", "Rx\0 ") #endif #if defined(CPUARM) @@ -361,10 +372,8 @@ #if defined(CPUARM) #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metr.\0""Imper.", "Metrické""Imperial") - #define LEN_VTELEMUNIT_METR "\003" - #define TR_VTELEMUNIT_METR "v\0 ""A\0 ""m/s""-\0 ""kmh""m\0 ""@\0 ""%\0 ""mA\0""mAh""W\0 " - #define LEN_VTELEMUNIT_IMP "\003" - #define TR_VTELEMUNIT_IMP "v\0 ""A\0 ""m/s""-\0 ""kts""ft\0""@\0 ""%\0 ""mA\0""mAh""W\0 " + #define LEN_VTELEMUNIT "\003" + #define TR_VTELEMUNIT "-\0 ""v\0 ""A\0 ""mA\0""kts""m/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dBm""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -390,24 +399,29 @@ #define TR_VTELPROTO "---\0 ""Hub\0 ""WSHHigh" #if defined(CPUARM) - #define LEN_AMPSRC TR("\003", "\007") - #define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ") - #define LEN_VOLTSRC TR("\003", "\007") - #define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ") + #define LEN_AMPSRC TR("\003", "\005") + #define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells") + #define LEN_VOLTSRC TR("\003", "\005") + #define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells") #else - #define LEN_AMPSRC TR("\003", "\007") - #define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells\0 ") + #define LEN_AMPSRC TR("\003", "\005") + #define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells") #endif -#define LEN_VARIOSRC "\005" +#define LEN_VARIOSRC "\004" #if defined(FRSKY_SPORT) - #define TR_VARIOSRC "Vario""A1\0 ""A2\0" + #define TR_VARIOSRC "VSpd""A1\0 ""A2\0 ""dTE\0" #else - #define TR_VARIOSRC "Alti\0""Alti+""Vario""A1\0 ""A2\0" + #define TR_VARIOSRC "Alt\0""Alt+""VSpd""A1\0 ""A2\0" #endif +#if defined(CPUARM) +#define LEN_VTELEMSCREENTYPE "\010" +#define TR_VTELEMSCREENTYPE "Hodnota ""Ukazatel""Skript\0" +#else #define LEN_VTELEMSCREENTYPE "\010" #define TR_VTELEMSCREENTYPE "Hodnota ""Ukazatel" +#endif #define LEN_GPSFORMAT "\004" #define TR_GPSFORMAT "DMS\0""NMEA" @@ -428,22 +442,31 @@ #define LEN_VSWITCHES "\003" #define LEN_VSRCRAW "\004" -#if defined(PCBTARANIS) - #define TR_POTS_VSRCRAW "S1\0 ""S2\0 ""S3\0 ""LS\0 ""RS\0 " - #define TR_SW_VSRCRAW "SA\0 ""SB\0 ""SC\0 ""SD\0 ""SE\0 ""SF\0 ""SG\0 ""SH\0 " +#define LEN_INPUTNAMES "\004" +#define TR_INPUTNAMES "Smer""Vysk""Plyn""Krid" + +#define TR_STICKS_VSRCRAW TR("Směr""Výšk""Plyn""Křid", "\307Smě""\307Výš""\307Pln""\307Kři") +#define TR_TRIMS_VSRCRAW TR("TrmS""TrmV""TrmP""TrmK", "\313Smě""\313Výš""\313Pln""\313Kři") + +#if defined(PCBTARANIS) && defined(REV9E) + #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\310S4\0""\311LS\0""\311RS\0""\311LS2""\311RS2" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0""\312SI\0""\312SJ\0""\312SK\0""\312SL\0""\312SM\0""\312SN\0""\312SO\0""\312SP\0""\312SQ\0""\312SR\0" +#elif defined(PCBTARANIS) + #define TR_POTS_VSRCRAW "\310S1\0""\310S2\0""\310S3\0""\311LS\0""\311RS\0" + #define TR_SW_VSRCRAW "\312SA\0""\312SB\0""\312SC\0""\312SD\0""\312SE\0""\312SF\0""\312SG\0""\312SH\0" #else - #define TR_POTS_VSRCRAW "P1\0 ""P2\0 ""P3\0 " + #define TR_POTS_VSRCRAW "POT1""POT2""POT3" #define TR_SW_VSRCRAW "3POS" #define TR_9X_3POS_SWITCHES "ID0""ID1""ID2" #endif #if defined(CPUARM) - #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12""L13""L14""L15""L16""L17""L18""L19""L20""L21""L22""L23""L24""L25""L26""L27""L28""L29""L30""L31""L32" + #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12""L13""L14""L15""L16""L17""L18""L19""L20""L21""L22""L23""L24""L25""L26""L27""L28""L29""L30""L31""L32" #else - #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" + #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" #endif -#define TR_TRIMS_SWITCHES "tSl""tSp""tVd""tVn""tPd""tPn""tKl""tKp" +#define TR_TRIMS_SWITCHES TR("tSl""tSp""tVd""tVn""tPd""tPn""tKl""tKp", "\313Sl""\313Sp""\313Vd""\313Vn""\313Pd""\313Pn""\313Kl""\313Kp") #if defined(PCBSKY9X) #define TR_ROTARY_ENCODERS "REa\0" @@ -456,13 +479,23 @@ #define TR_ROTENC_SWITCHES #endif -#if defined(PCBTARANIS) - #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36" - #define TR_VSWITCHES "---""SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ZAP""One" -#elif defined(CPUARM) - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ZAP""One" +#if defined(PCBTARANIS) && defined(REV9E) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301""SI\300""SI-""SI\301""SJ\300""SJ-""SJ\301""SK\300""SK-""SK\301""SL\300""SL-""SL\301""SM\300""SM-""SM\301""SN\300""SN-""SN\301""SO\300""SO-""SO\301""SP\300""SP-""SP\301""SQ\300""SQ-""SQ\301""SR\300""SR-""SR\301" +#elif defined(PCBTARANIS) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301" #else - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ZAP""One" + #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" +#endif + +#if defined(PCBTARANIS) + #if defined(REV9E) + #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36""S41""S42""S43""S44""S45""S46" + #else + #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36" + #endif + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ZAP""One" +#else + #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ZAP""One" #endif #if defined(HELI) @@ -471,13 +504,17 @@ #define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" #endif -#define TR_VSRCRAW "---\0""Směr""Výšk""Plyn""Křid" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW "TrmS" "TrmV" "TrmP" "TrmK" TR_SW_VSRCRAW +#if defined(CPUARM) + #define TR_RESERVE_VSRCRAW "[--]" + #define TR_EXTRA_VSRCRAW "Batt""Time" TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW TR_RESERVE_VSRCRAW "Tmr1""Tmr2""Tmr3" +#else + #define TR_EXTRA_VSRCRAW +#endif -#define LEN_INPUTNAMES "\004" -#define TR_INPUTNAMES "Smer""Vysk""Plyn""Krid" +#define TR_VSRCRAW "---\0" TR_STICKS_VSRCRAW TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW TR_TRIMS_VSRCRAW TR_SW_VSRCRAW TR_EXTRA_VSRCRAW #define LEN_VTMRMODES "\004" -#define TR_VTMRMODES "VYP\0""ABS\0""Pln>""Pln%""Pln*" +#define TR_VTMRMODES "VYP\0""ZAP\0""Pln>""Pln%""Pln*" #define LEN_VTRAINERMODES "\022" #define TR_VTRAINERMODES "Učitel/Jack\0 ""Žák/Jack\0 ""Master/SBUS Module""Master/CPPM Module""Master/Battery\0" @@ -494,10 +531,30 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Totalize""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS +#if defined(COLORLCD) + #define INDENT "\007" + #define LEN_INDENT 1 + #define INDENT_WIDTH 12 + #define BREAKSPACE "\036" +#else #define INDENT "\001" #define LEN_INDENT 1 #define INDENT_WIDTH (FW/2) +#define BREAKSPACE " " +#endif #if defined(PCBTARANIS) #define TR_ENTER "[ENTER]" @@ -516,7 +573,7 @@ #define TR_MENUWHENDONE CENTER "\011" TR_ENTER " > DALŠÍ" #define TR_FREE TR("volné:", "volných") -#define TR_DELETEMODEL "SMAZAT MODEL" +#define TR_DELETEMODEL "SMAZAT" BREAKSPACE "MODEL" #define TR_COPYINGMODEL "Kopíruji model.." #define TR_MOVINGMODEL "Přesouvám model." #define TR_LOADINGMODEL "Aktivuji model.." @@ -525,7 +582,7 @@ #define TR_PHASENAME "Název" #define TR_MIXNAME "Název" #define TR_INPUTNAME "Název" -#if defined(PCBTARANIS) +#if defined(VIRTUALINPUTS) #define TR_EXPONAME "Popis" #else #define TR_EXPONAME "Název" @@ -535,13 +592,17 @@ #define TR_ELIMITS TR("Limit +25%", "Kanál +/- 125%") #define TR_ETRIMS TR("širší Trim", "Široký trim") #define TR_TRIMINC TR("Krok Trimu", "Krok trimu") -#define TR_DISPLAY_TRIMS "Display Trims" +#define TR_DISPLAY_TRIMS "Zobr.hodnotu trimu" #define TR_TTRACE TR("StopaPlynu", INDENT "Stopa plynu") #define TR_TTRIM TR("TrimVolnob.", INDENT "Trim jen volnoběh") -#define TR_BEEPCTR "Středy \221\222" +#define TR_BEEPCTR TR("Středy \221\222", "Pípat středy \221\222") #define TR_USE_GLOBAL_FUNCS "Use Global Funcs" #define TR_PROTO INDENT "Protokol" +#if defined(CPUARM) #define TR_PPMFRAME INDENT "PPM frame" +#else + #define TR_PPMFRAME "PPM frame" +#endif #define TR_MS "ms" #define TR_SWITCH "Spínač" #define TR_TRIMS "Trimy" @@ -552,8 +613,8 @@ #define OFS_CHECKTRIMS (9*FW) #define TR_SWASHTYPE "Typ cykliky" #define TR_COLLECTIVE "Kolektiv" -#define TR_AILERON "Aileron Source" -#define TR_ELEVATOR "Elevator Source" +#define TR_AILERON "Boční cyklika" +#define TR_ELEVATOR "Podélná cykl." #define TR_SWASHRING "Cyklika" #define TR_ELEDIRECTION "Směr:Výškovka" #define TR_AILDIRECTION "\012Křidélka" @@ -617,10 +678,12 @@ #define TR_BLOFFBRIGHTNESS INDENT"Jas Vyp." #define TR_BLCOLOR INDENT "Barva" #define TR_SPLASHSCREEN TR("úvodníLogo", "Zobrazit úvodní logo") -#define TR_THROTTLEWARNING TR("* Plyn", INDENT "Páka Plynu") -#define TR_SWITCHWARNING TR("* Spínače", INDENT "Polohy Spínačů") +#define TR_THROTTLEWARNING TR("* Plyn", INDENT "Kontrola plynu") +#define TR_SWITCHWARNING TR("* Spínače", INDENT "Polohy spínačů") #define TR_POTWARNING TR("* Potenc.", INDENT "Nastavení Pot.") #define TR_TIMEZONE "časové pásmo" +#define TR_ADJUST_RTC INDENT "Adjust RTC" +#define TR_GPS "GPS" #define TR_RXCHANNELORD TR("Pořadí kanálů", "Výchozí pořadí kanálů") #define TR_STICKS "Sticks" #define TR_POTS "Pots" @@ -632,9 +695,15 @@ #define TR_CAL "Kal." #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART CENTER "\011" TR_ENTER " = START" -#define TR_SETMIDPOINT CENTER "\004Nastav páky na střed" -#define TR_MOVESTICKSPOTS TR(CENTER "\006Hýbej pákami/poty", "\014Hýbej pákami i potenciometry") +#if defined(COLORLCD) + #define TR_MENUTOSTART TR_ENTER " = START" + #define TR_SETMIDPOINT "Nastav páky na střed" + #define TR_MOVESTICKSPOTS "Hýbej pákami/poty" +#else + #define TR_MENUTOSTART CENTER "\011" TR_ENTER " = START" + #define TR_SETMIDPOINT CENTER "\004Nastav páky na střed" + #define TR_MOVESTICKSPOTS TR(CENTER "\006Hýbej pákami/poty", "\014Hýbej pákami i potenciometry") +#endif #define TR_RXBATT "Rx Bat.:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 @@ -677,7 +746,11 @@ #define TR_MENUDIAG "DIAG" #define TR_MENUANA "ANALOGY" #define TR_MENUCALIBRATION "KALIBRACE" +#if defined(COLORLCD) #define TR_TRIMS2OFFSETS "\006Trimy => Subtrimy" +#else +#define TR_TRIMS2OFFSETS "\006Trimy => Subtrimy" +#endif #define TR_MENUMODELSEL "MODEL" #define TR_MENUSETUP "NASTAVENÍ" #define TR_MENUFLIGHTPHASE "LETOVÝ REŽIM" @@ -686,15 +759,12 @@ #define TR_MENULIMITS "SERVA" -#if defined(PCBTARANIS) +#if defined(VIRTUALINPUTS) #define TR_MENUINPUTS "VSTUPY" #else #define TR_MENUINPUTS "DR/EXPO" #endif - - - #define TR_MENUCURVES "KŘIVKY" #define TR_MENUCURVE "\002K" #define TR_MENULOGICALSWITCH "LOG. SPÍNAč" @@ -706,8 +776,12 @@ #define TR_MENUTEMPLATES "ŠABLONY" #define TR_MENUSTAT "STATISTIKA" #define TR_MENUDEBUG "DIAG" -#define TR_RXNUM INDENT "Přijímač" -#define TR_SYNCMENU "Sync [MENU]" +#if defined(CPUARM) + #define TR_RXNUM TR(INDENT "RX číslo", INDENT "Číslo přijímače") +#else + #define TR_RXNUM "RX číslo" +#endif +#define TR_SYNCMENU "[Sync]" #define TR_LIMIT INDENT"Limit" #define TR_MINRSSI "Min Rssi" #define TR_LATITUDE "Zem. šířka" @@ -717,8 +791,9 @@ #define TR_PITCH_AT_ZERO INDENT "Tón na nule" #define TR_PITCH_AT_MAX INDENT "Tón na maximu" #define TR_REPEAT_AT_ZERO INDENT "Opakování na nule" -#define TR_SHUTDOWN "VYPÍNÁNí.." -#define TR_SAVEMODEL "Saving model settings" +#define TR_POWEROFF "\027Power OFF..." +#define TR_SHUTDOWN "Vypínání.." +#define TR_SAVEMODEL "Ukládám nastavení modelu" #define TR_BATT_CALIB "Kalib. baterie" #define TR_CURRENT_CALIB " +=\006Proud" #define TR_VOLTAGE INDENT"Napětí" @@ -732,7 +807,7 @@ #define TR_RESTORE_MODEL "Obnov model z SD" #define TR_SDCARD_ERROR "Chyba SD karty" #define TR_NO_SDCARD "Není SD karta" -#define TR_SDCARD_FULL "SD Card Full" +#define TR_SDCARD_FULL "Plná SD karta" #define TR_INCOMPATIBLE "Nekompatibilní" #define TR_WARNING "KONTROLA" #define TR_EEPROMWARN "EEPROM" @@ -740,7 +815,7 @@ #define TR_THROTTLEWARN "PLYNU" #define TR_ALARMSWARN "ALARMU" #define TR_SWITCHWARN "POZICE" -#define TR_KEYSTUCK "Key stuck" +#define TR_KEYSTUCK "Zaseklá klávesa" #define TR_INVERT_THR "Invertovat plyn?" #define TR_SPEAKER_VOLUME INDENT "Hlasitost" #define TR_LCD "LCD" @@ -750,8 +825,8 @@ #define TR_CPU_MAH "Spotřeba" #define TR_COPROC "CoProc." #define TR_COPROC_TEMP "Tepl. MB \016>" -#define TR_CAPAWARNING INDENT "Kapacita" -#define TR_TEMPWARNING INDENT "Teplota" +#define TR_CAPAWARNING INDENT "Nízká kapacita" +#define TR_TEMPWARNING INDENT "Přehřátí" #define TR_FUNC "Fce." #define TR_V1 "V1" #define TR_V2 "V2" @@ -759,10 +834,10 @@ #define TR_DELAY "Zdržet" #define TR_SD_CARD "SD" #define TR_SDHC_CARD "SD-HC" -#define TR_NO_SOUNDS_ON_SD "žádný zvuk na SD" -#define TR_NO_MODELS_ON_SD "žádný model na SD" -#define TR_NO_BITMAPS_ON_SD "žádné obrázky na SD" -#define TR_NO_SCRIPTS_ON_SD "žádný skript na SD" +#define TR_NO_SOUNDS_ON_SD "žádný zvuk" BREAKSPACE "na SD" +#define TR_NO_MODELS_ON_SD "žádný model" BREAKSPACE "na SD" +#define TR_NO_BITMAPS_ON_SD "žádné obrázky" BREAKSPACE "na SD" +#define TR_NO_SCRIPTS_ON_SD "žádný skript" BREAKSPACE "na SD" #define TR_PLAY_FILE "Přehrát" #define TR_DELETE_FILE "Odstranit" #define TR_COPY_FILE "Kopírovat" @@ -783,7 +858,7 @@ #define TR_SD_SPEED "Rychlost:" #define TR_SD_SECTORS "Sektorů :" #define TR_SD_SIZE "Velikost:" -#define TR_TYPE TR_SD_TYPE +#define TR_TYPE INDENT TR_SD_TYPE #define TR_GLOBAL_VARS "Globální proměnné" #define TR_GLOBAL_V "GLOB.PROM." #define TR_GLOBAL_VAR "Globální proměnná" @@ -792,17 +867,19 @@ #define TR_DATE "Datum" #define TR_ROTARY_ENCODER "R.Encs" #define TR_CHANNELS_MONITOR "MONITOR KANÁLU" -#define TR_MIXERS_MONITOR "MIXERS MONITOR" +#define TR_MIXERS_MONITOR "MONITOR MIXU" #define TR_PATH_TOO_LONG "Cesta je moc dlouhá" #define TR_VIEW_TEXT "Zobrazit text" -#define TR_FLASH_BOOTLOADER "Flash BootLoader" -#define TR_WRITING "\032Writing..." -#define TR_CONFIRM_FORMAT "Confirm Format?" +#define TR_FLASH_BOOTLOADER "Flash BootLoaderu" +#define TR_FLASH_EXTERNAL_DEVICE "Flash externí krabičky" +#define TR_FLASH_INTERNAL_MODULE "Flash vnitřního modulu" +#define TR_WRITING "\032Zapisuji.." +#define TR_CONFIRM_FORMAT "Provést Formát?" #define TR_INTERNALRF "Vnitřní RF modul" #define TR_EXTERNALRF "Externí RF modul" #define TR_FAILSAFE "Mód Failsafe" #define TR_FAILSAFESET "NASTAVENÍ FAILSAFE" -#define TR_MENUSENSOR "SENSOR" +#define TR_MENUSENSOR "SENZOR" #define TR_COUNTRYCODE "Kód regionu" #define TR_VOICELANG "Jazyk hlasu" #define TR_UNITSSYSTEM "Jednotky" @@ -836,8 +913,11 @@ #define TR_MODELIDUSED TR("ID již použito","ID modelu je již použito") #define TR_MODULE INDENT "Modul" #define TR_TELEMETRY_TYPE TR("Typ", "Typ telemetrie") -#define TR_TELEMETRY_SENSORS "Sensors" -#define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..." +#define TR_TELEMETRY_SENSORS "Senzory" +#define TR_VALUE "Value" +#define TR_TOPLCDTIMER "Top LCD Timer" +#define TR_UNIT "Unit" +#define TR_TELEMETRY_NEWSENSOR INDENT "+ Přidat nový senzor.." #define TR_CHANNELRANGE INDENT "Rozsah kanálů" #define TR_LOWALARM INDENT "Nízký Alarm" #define TR_CRITICALALARM INDENT "Kritický Alarm" @@ -864,6 +944,8 @@ #define TR_INPUTS "Vstupy" #define TR_OUTPUTS "Výstupy" #define TR_EEBACKUP "\010[dlouze ENTER] zálohuje EEPROM" +#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TO_MANY_LUA_SCRIPTS "Příliš mnoho skriptů!" #if defined(MAVLINK) @@ -968,4 +1050,55 @@ #define TR_MODS_FORBIDDEN "Změny nejsou povoleny!" #define TR_UNLOCKED "Odemčeno" #define TR_ID "ID" -#define TR_PRECISION "Precision" +#define TR_PRECISION "Přesnost" +#define TR_RATIO "Ratio" +#define TR_FORMULA "Formula" +#define TR_CELLINDEX "Cell index" +#define TR_LOGS "Logs" +#define TR_OPTIONS "Options" + +#define TR_ALTSENSOR "Alt sensor" +#define TR_CELLSENSOR "Cell sensor" +#define TR_GPSSENSOR "GPS sensor" +#define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" + +#define TR_MENU_INPUTS "\314Inputs" +#define TR_MENU_LUA "\322Lua scripts" +#define TR_MENU_STICKS "\307Sticks" +#define TR_MENU_POTS "\310Pots" +#define TR_MENU_MAX "\315MAX" +#define TR_MENU_HELI "\316Cyclic" +#define TR_MENU_TRIMS "\313Trims" +#define TR_MENU_SWITCHES "\312Switches" +#define TR_MENU_TRAINER "\317Trainer" +#define TR_MENU_CHANNELS "\320Channels" +#define TR_MENU_GVARS "\311GVars" +#define TR_MENU_TELEMETRY "\321Telemetry" + +#define ZSTR_RSSI "RSSI" +#define ZSTR_SWR "SWR" +#define ZSTR_A1 "A1" +#define ZSTR_A2 "A2" +#define ZSTR_A3 "A3" +#define ZSTR_A4 "A4" +#define ZSTR_BATT "RxBt" +#define ZSTR_ALT "Alt" +#define ZSTR_TEMP "Temp" +#define ZSTR_RPM "RPM" +#define ZSTR_FUEL "Fuel" +#define ZSTR_VSPD "VSpd" +#define ZSTR_ACCX "AccX" +#define ZSTR_ACCY "AccY" +#define ZSTR_ACCZ "AccZ" +#define ZSTR_CURR "Curr" +#define ZSTR_VFAS "VFAS" +#define ZSTR_ASPD "ASpd" +#define ZSTR_GSPD "GSpd" +#define ZSTR_HDG "Hdg" +#define ZSTR_CELLS "Cels" +#define ZSTR_GPSALT "GAlt" +#define ZSTR_GPSDATETIME "Date" +#define ZSTR_GPS "GPS" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index b47d7ab97..7ecf75a82 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -375,7 +375,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\012") #define TR_VUNITSSYSTEM TR("Metrik""Imper.", "Metrisch\0 ""Imperial\0 ") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dBm""rpm""g\0 ""@\0" + #define TR_VTELEMUNIT "-\0 ""V\0 ""A\0 ""mA\0""kts""m/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dBm""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -465,7 +465,7 @@ #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" #endif -#define TR_TRIMS_SWITCHES "\313Sl""\313Sr""\313Hd""\313Hu""\313Gd""\313Gu""\313Ql""\313Qr" +#define TR_TRIMS_SWITCHES TR("tSl""tSr""tHd""tHu""tGd""tGu""tQl""tQr", "\313Sl""\313Sr""\313Hd""\313Hu""\313Gd""\313Gu""\313Ql""\313Qr") #if defined(PCBSKY9X) #define TR_ROTARY_ENCODERS "DGa\0" @@ -481,7 +481,7 @@ #if defined(PCBTARANIS) && defined(REV9E) #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301""SI\300""SI-""SI\301""SJ\300""SJ-""SJ\301""SK\300""SK-""SK\301""SL\300""SL-""SL\301""SM\300""SM-""SM\301""SN\300""SN-""SN\301""SO\300""SO-""SO\301""SP\300""SP-""SP\301""SQ\300""SQ-""SQ\301""SR\300""SR-""SR\301" #elif defined(PCBTARANIS) - #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301" #else #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" #endif @@ -530,6 +530,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Totalize""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #if defined(COLORLCD) #define INDENT "\007" @@ -669,6 +681,8 @@ #define TR_SWITCHWARNING TR("Sch. Alarm", INDENT "Schalter-Alarm") #define TR_POTWARNING TR("Pot Warn.", INDENT "Poti-Warnung") #define TR_TIMEZONE TR("Zeitzone", "GPS-Zeitzone +/-Std") +#define TR_ADJUST_RTC INDENT "Adjust RTC" +#define TR_GPS "GPS" #define TR_RXCHANNELORD TR("Kanalanordnung", "Kanalvoreinstellung") #define TR_STICKS "Knüppel" #define TR_POTS "Potis" @@ -776,6 +790,7 @@ #define TR_PITCH_AT_ZERO INDENT "Niedrigster Ton" #define TR_PITCH_AT_MAX INDENT "Höchster Ton" #define TR_REPEAT_AT_ZERO INDENT "Wiederholrate" +#define TR_POWEROFF "\027Power OFF..." #define TR_SHUTDOWN "Herunterfahren" #define TR_SAVEMODEL "Modelleinstellungen speichern" #define TR_BATT_CALIB "Akku abgleichen" @@ -898,6 +913,9 @@ #define TR_MODULE INDENT "Modul-Typ" #define TR_TELEMETRY_TYPE TR("Typ", "Telemetrytyp") #define TR_TELEMETRY_SENSORS "----Sensoren----" +#define TR_VALUE "Value" +#define TR_TOPLCDTIMER "Top LCD Timer" +#define TR_UNIT "Unit" #define TR_TELEMETRY_NEWSENSOR INDENT "Sensor hinzufügen ..." #define TR_CHANNELRANGE TR(INDENT "Kanäle", INDENT "Ausgangs Kanäle") //wg 9XR-Pro #define TR_LOWALARM INDENT "Vor-Alarm bei" @@ -925,6 +943,8 @@ #define TR_INPUTS "Inputs" #define TR_OUTPUTS "Outputs" #define TR_EEBACKUP "\002[ENTER Long] Backup EEPROM->SD-Karte" +#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TO_MANY_LUA_SCRIPTS "Zu viele Lua-Scripten!!" #if defined(MAVLINK) @@ -1030,11 +1050,40 @@ #define TR_UNLOCKED "Entsperrt" #define TR_ID "ID" #define TR_PRECISION "Prezision" +#define TR_RATIO "Ratio" +#define TR_FORMULA "Formula" +#define TR_CELLINDEX "Cell index" +#define TR_LOGS "Logs" +#define TR_OPTIONS "Options" + +#define TR_ALTSENSOR "Alt sensor" +#define TR_CELLSENSOR "Cell sensor" +#define TR_GPSSENSOR "GPS sensor" +#define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" + +#define TR_MENU_INPUTS "\314Inputs" +#define TR_MENU_LUA "\322Lua scripts" +#define TR_MENU_STICKS "\307Sticks" +#define TR_MENU_POTS "\310Pots" +#define TR_MENU_MAX "\315MAX" +#define TR_MENU_HELI "\316Cyclic" +#define TR_MENU_TRIMS "\313Trims" +#define TR_MENU_SWITCHES "\312Switches" +#define TR_MENU_TRAINER "\317Trainer" +#define TR_MENU_CHANNELS "\320Channels" +#define TR_MENU_GVARS "\311GVars" +#define TR_MENU_TELEMETRY "\321Telemetry" #define ZSTR_RSSI "RSSI" +#define ZSTR_SWR "SWR" #define ZSTR_A1 "A1" #define ZSTR_A2 "A2" -#define ZSTR_BATT "Batt" +#define ZSTR_A3 "A3" +#define ZSTR_A4 "A4" +#define ZSTR_BATT "RxBt" #define ZSTR_ALT "Alt" #define ZSTR_TEMP "Temp" #define ZSTR_RPM "RPM" diff --git a/radio/src/translations/en.h.txt b/radio/src/translations/en.h.txt index 4d403c78d..7db45e790 100644 --- a/radio/src/translations/en.h.txt +++ b/radio/src/translations/en.h.txt @@ -375,7 +375,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metric""Imper.", "Metric\0 ""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""v\0 ""A\0 ""mA\0""kts""m/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dBm""rpm""g\0 ""@\0" + #define TR_VTELEMUNIT "-\0 ""v\0 ""A\0 ""mA\0""kts""m/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dBm""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -465,7 +465,7 @@ #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" #endif -#define TR_TRIMS_SWITCHES "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar" +#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #if defined(PCBSKY9X) #define TR_ROTARY_ENCODERS "REa\0" @@ -481,7 +481,7 @@ #if defined(PCBTARANIS) && defined(REV9E) #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301""SI\300""SI-""SI\301""SJ\300""SJ-""SJ\301""SK\300""SK-""SK\301""SL\300""SL-""SL\301""SM\300""SM-""SM\301""SN\300""SN-""SN\301""SO\300""SO-""SO\301""SP\300""SP-""SP\301""SQ\300""SQ-""SQ\301""SR\300""SR-""SR\301" #elif defined(PCBTARANIS) - #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301" #else #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" #endif @@ -530,6 +530,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Totalize""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #if defined(COLORLCD) #define INDENT "\007" @@ -599,9 +611,9 @@ #define TR_CHECKTRIMS CENTER "\006Check\012Trims" #define OFS_CHECKTRIMS CENTER_OFS+(9*FW) #define TR_SWASHTYPE "Swash Type" -#define TR_COLLECTIVE TR("Collective", "Coll. pitch") -#define TR_AILERON "Lateral cyc." -#define TR_ELEVATOR "Long. cyc." +#define TR_COLLECTIVE TR("Collective", "Coll. pitch source") +#define TR_AILERON "Lateral cyc. source" +#define TR_ELEVATOR "Long. cyc. source" #define TR_SWASHRING "Swash Ring" #define TR_ELEDIRECTION "ELE Direction" #define TR_AILDIRECTION "AIL Direction" @@ -668,7 +680,9 @@ #define TR_THROTTLEWARNING TR(IF_CPUARM(INDENT) "T-Warning", INDENT "Throttle State") #define TR_SWITCHWARNING TR(IF_CPUARM(INDENT) "S-Warning", INDENT "Switch Positions") #define TR_POTWARNING TR(IF_CPUARM(INDENT) "Pot Warn.", INDENT "Pot Positions") -#define TR_TIMEZONE TR("Time Zone", "GPS Time zone") +#define TR_TIMEZONE TR("Time Zone", INDENT "Time zone") +#define TR_ADJUST_RTC INDENT "Adjust RTC" +#define TR_GPS "GPS" #define TR_RXCHANNELORD TR("Rx Channel Ord", "Default channel order") #define TR_STICKS "Sticks" #define TR_POTS "Pots" @@ -771,11 +785,12 @@ #define TR_MINRSSI "Min Rssi" #define TR_LATITUDE "Latitude" #define TR_LONGITUDE "Longitude" -#define TR_GPSCOORD TR("GPS Coords", "GPS coordinate format") +#define TR_GPSCOORD TR("GPS Coords", INDENT "Coordinate format") #define TR_VARIO TR("Vario", "Variometer") #define TR_PITCH_AT_ZERO INDENT "Pitch at Zero" #define TR_PITCH_AT_MAX INDENT "Pitch at Max" #define TR_REPEAT_AT_ZERO INDENT "Repeat at Zero" +#define TR_POWEROFF "\027Power OFF..." #define TR_SHUTDOWN "SHUTTING DOWN" #define TR_SAVEMODEL "Saving model settings" #define TR_BATT_CALIB "Battery Calib" @@ -898,6 +913,9 @@ #define TR_MODULE INDENT "Module" #define TR_TELEMETRY_TYPE TR("Type", "Telemetry Type") #define TR_TELEMETRY_SENSORS "Sensors" +#define TR_VALUE "Value" +#define TR_TOPLCDTIMER "Top LCD Timer" +#define TR_UNIT "Unit" #define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..." #define TR_CHANNELRANGE TR(INDENT "Ch. Range", INDENT "Channel Range") #define TR_LOWALARM INDENT "Low Alarm" @@ -925,6 +943,8 @@ #define TR_INPUTS "Inputs" #define TR_OUTPUTS "Outputs" #define TR_EEBACKUP "\004[ENTER Long] to backup the EEPROM" +#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TO_MANY_LUA_SCRIPTS "Too many Lua scripts!" #if defined(MAVLINK) @@ -1030,11 +1050,40 @@ #define TR_UNLOCKED "Unlocked" #define TR_ID "ID" #define TR_PRECISION "Precision" +#define TR_RATIO "Ratio" +#define TR_FORMULA "Formula" +#define TR_CELLINDEX "Cell index" +#define TR_LOGS "Logs" +#define TR_OPTIONS "Options" + +#define TR_ALTSENSOR "Alt sensor" +#define TR_CELLSENSOR "Cell sensor" +#define TR_GPSSENSOR "GPS sensor" +#define TR_CURRENTSENSOR "Curr. sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" + +#define TR_MENU_INPUTS "\314Inputs" +#define TR_MENU_LUA "\322Lua scripts" +#define TR_MENU_STICKS "\307Sticks" +#define TR_MENU_POTS "\310Pots" +#define TR_MENU_MAX "\315MAX" +#define TR_MENU_HELI "\316Cyclic" +#define TR_MENU_TRIMS "\313Trims" +#define TR_MENU_SWITCHES "\312Switches" +#define TR_MENU_TRAINER "\317Trainer" +#define TR_MENU_CHANNELS "\320Channels" +#define TR_MENU_GVARS "\311GVars" +#define TR_MENU_TELEMETRY "\321Telemetry" #define ZSTR_RSSI "RSSI" +#define ZSTR_SWR "SWR" #define ZSTR_A1 "A1" #define ZSTR_A2 "A2" -#define ZSTR_BATT "Batt" +#define ZSTR_A3 "A3" +#define ZSTR_A4 "A4" +#define ZSTR_BATT "RxBt" #define ZSTR_ALT "Alt" #define ZSTR_TEMP "Temp" #define ZSTR_RPM "RPM" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index de3d0fb45..ca6ad2156 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -82,6 +82,9 @@ #define LEN_UART3MODES "\015" #define TR_UART3MODES "OFF\0 ""S-Port Mirror""Telemetry\0 ""SBUS Trainer\0""Debug\0" +#define LEN_SWTYPES "\006" +#define TR_SWTYPES "None\0 ""Toggle""2POS\0 ""3POS\0" + #define LEN_POTTYPES "\017" #define TR_POTTYPES "None\0 ""Pot with detent""Multipos Switch""Pot\0" @@ -443,7 +446,7 @@ #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" #endif -#define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr" +#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #if defined(PCBSKY9X) #define TR_ROTARY_ENCODERS "REa\0" @@ -456,13 +459,23 @@ #define TR_ROTENC_SWITCHES #endif -#if defined(PCBTARANIS) - #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36" - #define TR_VSWITCHES "---""SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" -#elif defined(CPUARM) - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#if defined(PCBTARANIS) && defined(REV9E) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301""SI\300""SI-""SI\301""SJ\300""SJ-""SJ\301""SK\300""SK-""SK\301""SL\300""SL-""SL\301""SM\300""SM-""SM\301""SN\300""SN-""SN\301""SO\300""SO-""SO\301""SP\300""SP-""SP\301""SQ\300""SQ-""SQ\301""SR\300""SR-""SR\301" +#elif defined(PCBTARANIS) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301" #else - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" + #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" +#endif + +#if defined(PCBTARANIS) + #if defined(REV9E) + #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36""S41""S42""S43""S44""S45""S46" + #else + #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36" + #endif + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#else + #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" #endif #if defined(HELI) @@ -491,6 +504,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circulo ""Estabilizar ""Entrenamiento""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guiado ""Inicialisando""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Totalize""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 @@ -549,8 +574,8 @@ #define OFS_CHECKTRIMS CENTER_OFS+(9*FW) #define TR_SWASHTYPE "Tipo ciclico" #define TR_COLLECTIVE TR("Colectivo", "Fuente Colectivo") -#define TR_AILERON "Aileron Source" -#define TR_ELEVATOR "Elevator Source" +#define TR_AILERON "Lateral cyc. source" +#define TR_ELEVATOR "Long. cyc. source" #define TR_SWASHRING "Ciclico" #define TR_ELEDIRECTION TR("ELE Direccion","Largo cyc. direccion") #define TR_AILDIRECTION TR("AIL Direccion","Lateral cyc. direccion") @@ -618,6 +643,8 @@ #define TR_SWITCHWARNING TR("Aviso-I", INDENT "Aviso Intrptor") #define TR_POTWARNING TR("Pot Warn.", INDENT "Pot Warning") #define TR_TIMEZONE TR("Zona Hora", "GPS Zona Hora") +#define TR_ADJUST_RTC INDENT "Adjust RTC" +#define TR_GPS "GPS" #define TR_RXCHANNELORD TR("Rx Orden canal", "Orden habitual canales") #define TR_STICKS "Sticks" #define TR_POTS "Pots" @@ -714,6 +741,7 @@ #define TR_PITCH_AT_ZERO INDENT "Pitch at Zero" #define TR_PITCH_AT_MAX INDENT "Pitch at Max" #define TR_REPEAT_AT_ZERO INDENT "Repeat at Zero" +#define TR_POWEROFF "\027Power OFF..." #define TR_SHUTDOWN "APAGANDO" #define TR_SAVEMODEL "Saving model settings" #define TR_BATT_CALIB "Calib.bateria" @@ -780,7 +808,7 @@ #define TR_SD_SPEED "Velocidad:" #define TR_SD_SECTORS "Sectores:" #define TR_SD_SIZE "Tamaño:" -#define TR_TYPE "Tipo" +#define TR_TYPE INDENT "Tipo" #define TR_GLOBAL_VARS "Global Variables" #define TR_GLOBAL_V "GLOBAL V." #define TR_GLOBAL_VAR "Global Variable" @@ -834,6 +862,9 @@ #define TR_MODULE INDENT "Modulo" #define TR_TELEMETRY_TYPE TR("Type", "Telemetry Type") #define TR_TELEMETRY_SENSORS "Sensors" +#define TR_VALUE "Value" +#define TR_TOPLCDTIMER "Top LCD Timer" +#define TR_UNIT "Unit" #define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..." #define TR_CHANNELRANGE INDENT "Gama de canales" #define TR_LOWALARM INDENT "Alarma baja" @@ -861,6 +892,8 @@ #define TR_INPUTS "Inputs" #define TR_OUTPUTS "Outputs" #define TR_EEBACKUP "\004[ENTER Long] to backup the EEPROM" +#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TO_MANY_LUA_SCRIPTS "Too many Lua scripts!" #if defined(MAVLINK) @@ -966,3 +999,54 @@ #define TR_UNLOCKED "Unlocked" #define TR_ID "ID" #define TR_PRECISION "Precision" +#define TR_RATIO "Ratio" +#define TR_FORMULA "Formula" +#define TR_CELLINDEX "Cell index" +#define TR_LOGS "Logs" +#define TR_OPTIONS "Options" + +#define TR_ALTSENSOR "Alt sensor" +#define TR_CELLSENSOR "Cell sensor" +#define TR_GPSSENSOR "GPS sensor" +#define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" + +#define TR_MENU_INPUTS "\314Inputs" +#define TR_MENU_LUA "\322Lua scripts" +#define TR_MENU_STICKS "\307Sticks" +#define TR_MENU_POTS "\310Pots" +#define TR_MENU_MAX "\315MAX" +#define TR_MENU_HELI "\316Cyclic" +#define TR_MENU_TRIMS "\313Trims" +#define TR_MENU_SWITCHES "\312Switches" +#define TR_MENU_TRAINER "\317Trainer" +#define TR_MENU_CHANNELS "\320Channels" +#define TR_MENU_GVARS "\311GVars" +#define TR_MENU_TELEMETRY "\321Telemetry" + +#define ZSTR_RSSI "RSSI" +#define ZSTR_SWR "SWR" +#define ZSTR_A1 "A1" +#define ZSTR_A2 "A2" +#define ZSTR_A3 "A3" +#define ZSTR_A4 "A4" +#define ZSTR_BATT "RxBt" +#define ZSTR_ALT "Alt" +#define ZSTR_TEMP "Temp" +#define ZSTR_RPM "RPM" +#define ZSTR_FUEL "Fuel" +#define ZSTR_VSPD "VSpd" +#define ZSTR_ACCX "AccX" +#define ZSTR_ACCY "AccY" +#define ZSTR_ACCZ "AccZ" +#define ZSTR_CURR "Curr" +#define ZSTR_VFAS "VFAS" +#define ZSTR_ASPD "ASpd" +#define ZSTR_GSPD "GSpd" +#define ZSTR_HDG "Hdg" +#define ZSTR_CELLS "Cels" +#define ZSTR_GPSALT "GAlt" +#define ZSTR_GPSDATETIME "Date" +#define ZSTR_GPS "GPS" diff --git a/radio/src/translations/fi.h.txt b/radio/src/translations/fi.h.txt index 3cc4f2746..96f4ae3cf 100644 --- a/radio/src/translations/fi.h.txt +++ b/radio/src/translations/fi.h.txt @@ -1,4 +1,4 @@ -/* +/* * Authors (alphabetical order) * - Bertrand Songis * - Bernet Andre @@ -82,6 +82,9 @@ #define LEN_UART3MODES "\015" #define TR_UART3MODES "POIS\0 ""S-Port Pelik\0""Telemetry\0 ""SBUS Trainer\0""Debug\0" +#define LEN_SWTYPES "\006" +#define TR_SWTYPES "None\0 ""Toggle""2POS\0 ""3POS\0" + #define LEN_POTTYPES "\017" #define TR_POTTYPES "None\0 ""Pot with detent""Monias. Kytkin\0""Potikka\0" @@ -443,7 +446,7 @@ #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" #endif -#define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr" +#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313\313d""\313\313u""\313Al""\313Ar") #if defined(PCBSKY9X) #define TR_ROTARY_ENCODERS "REa\0" @@ -456,13 +459,23 @@ #define TR_ROTENC_SWITCHES #endif -#if defined(PCBTARANIS) - #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36" - #define TR_VSWITCHES "---""SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" -#elif defined(CPUARM) - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#if defined(PCBTARANIS) && defined(REV9E) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301""SI\300""SI-""SI\301""SJ\300""SJ-""SJ\301""SK\300""SK-""SK\301""SL\300""SL-""SL\301""SM\300""SM-""SM\301""SN\300""SN-""SN\301""SO\300""SO-""SO\301""SP\300""SP-""SP\301""SQ\300""SQ-""SQ\301""SR\300""SR-""SR\301" +#elif defined(PCBTARANIS) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301" #else - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" + #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" +#endif + +#if defined(PCBTARANIS) + #if defined(REV9E) + #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36""S41""S42""S43""S44""S45""S46" + #else + #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36" + #endif + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#else + #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" #endif #if defined(HELI) @@ -491,6 +504,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Totalize""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 @@ -548,9 +573,9 @@ #define TR_CHECKTRIMS CENTER "\006Check\012Trims" #define OFS_CHECKTRIMS CENTER_OFS+(9*FW) #define TR_SWASHTYPE "Swash Type" -#define TR_COLLECTIVE TR("Collective","Collective source") -#define TR_AILERON "Aileron Source" -#define TR_ELEVATOR "Elevator Source" +#define TR_COLLECTIVE TR("Collective", "Coll. pitch source") +#define TR_AILERON "Lateral cyc. source" +#define TR_ELEVATOR "Long. cyc. source" #define TR_SWASHRING "Swash Ring" #define TR_ELEDIRECTION TR("ELE Direction","Long. cyc. direction") #define TR_AILDIRECTION TR("AIL Direction","Lateral cyc. direction") @@ -618,6 +643,8 @@ #define TR_SWITCHWARNING TR("S-Warning", INDENT "Switch Warning") #define TR_POTWARNING TR("Pot Warn.", INDENT "Pot Warning") #define TR_TIMEZONE TR("Time Zone","GPS Time zone") +#define TR_ADJUST_RTC INDENT "Adjust RTC" +#define TR_GPS "GPS" #define TR_RXCHANNELORD TR("Rx Channel Ord","Default channel order") #define TR_STICKS "Sticks" #define TR_POTS "Pots" @@ -714,6 +741,7 @@ #define TR_PITCH_AT_ZERO INDENT "Pitch at Zero" #define TR_PITCH_AT_MAX INDENT "Pitch at Max" #define TR_REPEAT_AT_ZERO INDENT "Repeat at Zero" +#define TR_POWEROFF "\027Power OFF..." #define TR_SHUTDOWN "SHUTTING DOWN" #define TR_SAVEMODEL "Saving model settings" #define TR_BATT_CALIB "Battery Calib" @@ -780,7 +808,7 @@ #define TR_SD_SPEED "Speed:" #define TR_SD_SECTORS "Sectors:" #define TR_SD_SIZE "Size:" -#define TR_TYPE "Type" +#define TR_TYPE INDENT "Type" #define TR_GLOBAL_VARS "Global Variables" #define TR_GLOBAL_V "GLOBAL V." #define TR_GLOBAL_VAR "Global Variable" @@ -834,6 +862,9 @@ #define TR_MODULE INDENT "Module" #define TR_TELEMETRY_TYPE TR("Type", "Telemetry Type") #define TR_TELEMETRY_SENSORS "Sensors" +#define TR_VALUE "Value" +#define TR_TOPLCDTIMER "Top LCD Timer" +#define TR_UNIT "Unit" #define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..." #define TR_CHANNELRANGE INDENT "Channel Range" #define TR_LOWALARM INDENT "Low Alarm" @@ -861,6 +892,8 @@ #define TR_INPUTS "Inputs" #define TR_OUTPUTS "Outputs" #define TR_EEBACKUP "\004[ENTER Long] to backup the EEPROM" +#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TO_MANY_LUA_SCRIPTS "Too many Lua scripts!" #if defined(MAVLINK) @@ -966,3 +999,54 @@ #define TR_UNLOCKED "Avattu" #define TR_ID "ID" #define TR_PRECISION "Precision" +#define TR_RATIO "Ratio" +#define TR_FORMULA "Formula" +#define TR_CELLINDEX "Cell index" +#define TR_LOGS "Logs" +#define TR_OPTIONS "Options" + +#define TR_ALTSENSOR "Alt sensor" +#define TR_CELLSENSOR "Cell sensor" +#define TR_GPSSENSOR "GPS sensor" +#define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" + +#define TR_MENU_INPUTS "\314Inputs" +#define TR_MENU_LUA "\322Lua scripts" +#define TR_MENU_STICKS "\307Sticks" +#define TR_MENU_POTS "\310Pots" +#define TR_MENU_MAX "\315MAX" +#define TR_MENU_HELI "\316Cyclic" +#define TR_MENU_TRIMS "\313Trims" +#define TR_MENU_SWITCHES "\312Switches" +#define TR_MENU_TRAINER "\317Trainer" +#define TR_MENU_CHANNELS "\320Channels" +#define TR_MENU_GVARS "\311GVars" +#define TR_MENU_TELEMETRY "\321Telemetry" + +#define ZSTR_RSSI "RSSI" +#define ZSTR_SWR "SWR" +#define ZSTR_A1 "A1" +#define ZSTR_A2 "A2" +#define ZSTR_A3 "A3" +#define ZSTR_A4 "A4" +#define ZSTR_BATT "RxBt" +#define ZSTR_ALT "Alt" +#define ZSTR_TEMP "Temp" +#define ZSTR_RPM "RPM" +#define ZSTR_FUEL "Fuel" +#define ZSTR_VSPD "VSpd" +#define ZSTR_ACCX "AccX" +#define ZSTR_ACCY "AccY" +#define ZSTR_ACCZ "AccZ" +#define ZSTR_CURR "Curr" +#define ZSTR_VFAS "VFAS" +#define ZSTR_ASPD "ASpd" +#define ZSTR_GSPD "GSpd" +#define ZSTR_HDG "Hdg" +#define ZSTR_CELLS "Cels" +#define ZSTR_GPSALT "GAlt" +#define ZSTR_GPSDATETIME "Date" +#define ZSTR_GPS "GPS" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 4ad9984f3..e42e85fd2 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -83,11 +83,7 @@ #define TR_UART3MODES "OFF\0 ""Recopie S-Port""Télémétrie\0 ""Ecolage SBUS\0 ""Debug\0" #define LEN_SWTYPES "\006" -#if defined(REV9E) - #define TR_SWTYPES "Rien\0 ""Défaut""Levier""2-POS\0""3-POS\0" -#else - #define TR_SWTYPES "Défaut""Levier""2-POS\0""3-POS\0" -#endif +#define TR_SWTYPES "Rien\0 ""Levier""2-POS\0""3-POS\0" #define LEN_POTTYPES "\017" #define TR_POTTYPES "Rien\0 ""Pot avec centre""Inter multi-pos""Potentiomètre\0" @@ -319,7 +315,7 @@ #define TR_FSW_RESET_ROTENC #endif -#if LCD >= 212 +#if LCD_W >= 212 #define TR_FSW_RESET_TIMERS "Chrono 1\0 ""Chrono 2\0 ""Chrono 3\0 " #elif defined(CPUARM) #define TR_FSW_RESET_TIMERS "Chr1""Chr2""Chr3" @@ -379,7 +375,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\012") #define TR_VUNITSSYSTEM TR("Métr.\0""Impér.", "Métriques\0""Impériales") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""v\0 ""A\0 ""mA\0""kts""m/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dBm""rpm""g\0 ""@\0" + #define TR_VTELEMUNIT "-\0 ""v\0 ""A\0 ""mA\0""kts""m/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dBm""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -469,7 +465,7 @@ #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" #endif -#define TR_TRIMS_SWITCHES "\313Dg""\313Dd""\313Pb""\313Ph""\313Gb""\313Gh""\313Ag""\313Ad" +#define TR_TRIMS_SWITCHES TR("tDg""tDd""tPb""tPh""tGb""tGh""tAg""tAd", "\313Dg""\313Dd""\313Pb""\313Ph""\313Gb""\313Gh""\313Ag""\313Ad") #if defined(PCBSKY9X) #define TR_ROTARY_ENCODERS "REa\0" @@ -485,7 +481,7 @@ #if defined(PCBTARANIS) && defined(REV9E) #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301""SI\300""SI-""SI\301""SJ\300""SJ-""SJ\301""SK\300""SK-""SK\301""SL\300""SL-""SL\301""SM\300""SM-""SM\301""SN\300""SN-""SN\301""SO\300""SO-""SO\301""SP\300""SP-""SP\301""SQ\300""SQ-""SQ\301""SR\300""SR-""SR\301" #elif defined(PCBTARANIS) - #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301" #else #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" #endif @@ -534,6 +530,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Perso\0 ""Calculé\0 " + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Addition""Moyenne\0""Min\0 ""Max\0 ""Multipl.""Totalise""Elément\0""Consomm.""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Mini.\0 ""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Maxi.\0 ""Diff.\0 " + // ZERO TERMINATED STRINGS #if defined(COLORLCD) #define INDENT "\007" @@ -603,9 +611,9 @@ #define TR_CHECKTRIMS "\006Vérif\012Trims" #define OFS_CHECKTRIMS (9*FW) #define TR_SWASHTYPE TR("Type de Plat.", "Type de plateau") -#define TR_COLLECTIVE TR("Collectif", "Voie du pas collectif") -#define TR_AILERON "Aileron Source" -#define TR_ELEVATOR "Elevator Source" +#define TR_COLLECTIVE TR("Collectif", "Source collectif") +#define TR_AILERON "Source cyc. lat." +#define TR_ELEVATOR "Source cyc. lon." #define TR_SWASHRING TR("Limite Cycl.", "Limite du cyclique") #define TR_ELEDIRECTION TR("Inv. longitud.", "Inversion longitudinal") #define TR_AILDIRECTION TR("Inv. latéral", "Inversion latéral") @@ -673,6 +681,8 @@ #define TR_SWITCHWARNING TR(IF_CPUARM(INDENT) "Alerte int", INDENT "Pos. interrupteurs") #define TR_POTWARNING TR(IF_CPUARM(INDENT) "Alerte pot", INDENT "Pos. potentios") #define TR_TIMEZONE "Fuseau horaire" +#define TR_ADJUST_RTC INDENT "Adjust RTC" +#define TR_GPS "GPS" #define TR_RXCHANNELORD TR("Ordre voies RX","Ordre des voies préféré") #define TR_STICKS "Manches" #define TR_POTS "Potentios" @@ -772,8 +782,9 @@ #define TR_PITCH_AT_ZERO INDENT "Tonalité au zéro" #define TR_PITCH_AT_MAX INDENT "Tonalité au max" #define TR_REPEAT_AT_ZERO INDENT "Intervalle au zéro" +#define TR_POWEROFF "\037\120ARRET..." #define TR_SHUTDOWN "ARRET EN COURS" -#define TR_SAVEMODEL "Saving model settings" +#define TR_SAVEMODEL "Sauvegarde modèle..." #define TR_BATT_CALIB "Calib. Batterie" #define TR_CURRENT_CALIB "Calib. Courant" #define TR_VOLTAGE TR(INDENT "Tension",INDENT "Source Tension") @@ -838,7 +849,7 @@ #define TR_SD_SPEED "Vitesse:" #define TR_SD_SECTORS "Secteurs:" #define TR_SD_SIZE "Taille:" -#define TR_TYPE "Type" +#define TR_TYPE INDENT "Type" #define TR_GLOBAL_VARS "Variables Globales" #define TR_GLOBAL_V "V. GLOBALES" #define TR_GLOBAL_VAR "Variable globale" @@ -851,15 +862,15 @@ #define TR_PATH_TOO_LONG "Chemin trop long" #define TR_VIEW_TEXT "Voir texte" #define TR_FLASH_BOOTLOADER "Flasher BootLoader" -#define TR_FLASH_EXTERNAL_DEVICE "Flash External Device" -#define TR_FLASH_INTERNAL_MODULE "Flash Module Interne" +#define TR_FLASH_EXTERNAL_DEVICE "Flasher module externe" +#define TR_FLASH_INTERNAL_MODULE "Flasher module interne" #define TR_WRITING "\032Ecriture..." #define TR_CONFIRM_FORMAT "Confirmer Formatage?" #define TR_INTERNALRF "HF interne" #define TR_EXTERNALRF "HF externe" #define TR_FAILSAFE TR(INDENT "Failsafe", INDENT "Type failsafe") #define TR_FAILSAFESET "REGLAGES FAILSAFE" -#define TR_MENUSENSOR "SENSOR" +#define TR_MENUSENSOR "CAPTEUR" #define TR_COUNTRYCODE TR("Zone géo.","Zone géographique") #define TR_VOICELANG TR("Langue voix", "Langue annonces vocales") #define TR_UNITSSYSTEM "Unités" @@ -894,6 +905,9 @@ #define TR_MODULE INDENT "Type de module" #define TR_TELEMETRY_TYPE "Type télémesure" #define TR_TELEMETRY_SENSORS "Capteurs" +#define TR_VALUE "Valeur" +#define TR_TOPLCDTIMER "Timer LCD haut" +#define TR_UNIT "Unité" #define TR_TELEMETRY_NEWSENSOR INDENT "Ajout d'un nouveau capteur..." #define TR_CHANNELRANGE TR(INDENT "Canaux", INDENT "Plage de canaux") #define TR_LOWALARM INDENT "Alarme basse" @@ -921,6 +935,8 @@ #define TR_INPUTS "Entrées" #define TR_OUTPUTS "Sorties" #define TR_EEBACKUP "\004[ENTER Long]: Sauvegarder l'EEPROM" +#define TR_FACTORYRESET "\016[MENU Long]: RAZ d'usine" +#define TR_CONFIRMRESET "Effacer TOUS modèles/réglages?" #define TR_TO_MANY_LUA_SCRIPTS "Too many Lua scripts!" #if defined(MAVLINK) @@ -1025,12 +1041,41 @@ #define TR_MODS_FORBIDDEN "Modifications désactivées!" #define TR_UNLOCKED "Déverrouillé" #define TR_ID "ID" -#define TR_PRECISION "Precision" +#define TR_PRECISION "Précision" +#define TR_RATIO "Ratio" +#define TR_FORMULA "Formule" +#define TR_CELLINDEX "Index élem." +#define TR_LOGS "Logs" +#define TR_OPTIONS "Options" + +#define TR_ALTSENSOR "Capteur Alt" +#define TR_CELLSENSOR "Capteur Elém" +#define TR_GPSSENSOR "Capteur GPS" +#define TR_CURRENTSENSOR "Capt courant" +#define TR_AUTOOFFSET "Offset auto" +#define TR_FILTER "Filtrage" +#define TR_TELEMETRYFULL "Plus de capteurs libres!" + +#define TR_MENU_INPUTS "\314Entrées" +#define TR_MENU_LUA "\322Scripts Lua" +#define TR_MENU_STICKS "\307Manches" +#define TR_MENU_POTS "\310Pots" +#define TR_MENU_MAX "\315MAX" +#define TR_MENU_HELI "\316Cyclique" +#define TR_MENU_TRIMS "\313Trims" +#define TR_MENU_SWITCHES "\312Inters" +#define TR_MENU_TRAINER "\317Ecolage" +#define TR_MENU_CHANNELS "\320Canaux" +#define TR_MENU_GVARS "\311Vars. glob." +#define TR_MENU_TELEMETRY "\321Télémesure" #define ZSTR_RSSI "RSSI" +#define ZSTR_SWR "SWR" #define ZSTR_A1 "A1" #define ZSTR_A2 "A2" -#define ZSTR_BATT "Batt" +#define ZSTR_A3 "A3" +#define ZSTR_A4 "A4" +#define ZSTR_BATT "BtRx" #define ZSTR_ALT "Alt" #define ZSTR_TEMP "Temp" #define ZSTR_RPM "RPM" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index f310e17ee..9ea5720c9 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -82,6 +82,9 @@ #define LEN_UART3MODES "\016" #define TR_UART3MODES "OFF\0 ""Replica S-Port""Telemetria\0 ""SBUS Trainer\0 ""Debug\0" +#define LEN_SWTYPES "\006" +#define TR_SWTYPES "None\0 ""Toggle""2POS\0 ""3POS\0" + #define LEN_POTTYPES "\017" #define TR_POTTYPES "None\0 ""Pot. con centro""Inter. Multipos""Potenziometro\0 " @@ -443,7 +446,7 @@ #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" #endif -#define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr" +#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313\313d""\313\313u""\313Al""\313Ar") #if defined(PCBSKY9X) #define TR_ROTARY_ENCODERS "REa\0" @@ -456,13 +459,23 @@ #define TR_ROTENC_SWITCHES #endif -#if defined(PCBTARANIS) - #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36" - #define TR_VSWITCHES "---""SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" -#elif defined(CPUARM) - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#if defined(PCBTARANIS) && defined(REV9E) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301""SI\300""SI-""SI\301""SJ\300""SJ-""SJ\301""SK\300""SK-""SK\301""SL\300""SL-""SL\301""SM\300""SM-""SM\301""SN\300""SN-""SN\301""SO\300""SO-""SO\301""SP\300""SP-""SP\301""SQ\300""SQ-""SQ\301""SR\300""SR-""SR\301" +#elif defined(PCBTARANIS) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301" #else - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" + #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" +#endif + +#if defined(PCBTARANIS) + #if defined(REV9E) + #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36""S41""S42""S43""S44""S45""S46" + #else + #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36" + #endif + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#else + #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" #endif #if defined(HELI) @@ -491,6 +504,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Inizializza ""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Totalize""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 @@ -532,11 +557,11 @@ #define TR_ELIMITS TR("Limiti.E","Limiti Estesi") #define TR_ETRIMS TR("Trim Ext","Trim Estesi") #define TR_TRIMINC "Passo Trim" -#define TR_DISPLAY_TRIMS "Display Trims" +#define TR_DISPLAY_TRIMS "Display Trims" #define TR_TTRACE TR("T-Source", INDENT "Sorgente Motore") #define TR_TTRIM TR("T-Trim", INDENT "Trim Motore") #define TR_BEEPCTR TR("Ctr Beep","Beep al centro") -#define TR_USE_GLOBAL_FUNCS "Use Global Funcs" +#define TR_USE_GLOBAL_FUNCS "Use Global Funcs" #define TR_PROTO TR(INDENT "Proto", INDENT "Protocollo") #define TR_PPMFRAME TR("PPM frame", INDENT "PPM frame") #define TR_MS "ms" @@ -549,8 +574,8 @@ #define OFS_CHECKTRIMS (9*FW) #define TR_SWASHTYPE "Tipo Ciclico" #define TR_COLLECTIVE TR("Collettivo","Origine Collettivo") -#define TR_AILERON "Aileron Source" -#define TR_ELEVATOR "Elevator Source" +#define TR_AILERON "Lateral cyc. source" +#define TR_ELEVATOR "Long. cyc. source" #define TR_SWASHRING "Anello Ciclico" #define TR_ELEDIRECTION TR("Direzione ELE","Direzione Long. cyc.") #define TR_AILDIRECTION TR("Direzione AIL","Direzione Lateral cyc.") @@ -618,10 +643,12 @@ #define TR_SWITCHWARNING TR("Avv. Int.", INDENT "Avviso Interr.") #define TR_POTWARNING TR("Avv. Pot.", INDENT "Avviso Pot.") #define TR_TIMEZONE "Ora locale" +#define TR_ADJUST_RTC INDENT "Adjust RTC" +#define TR_GPS "GPS" #define TR_RXCHANNELORD "Ordine ch RX" -#define TR_STICKS "Sticks" -#define TR_POTS "Pots" -#define TR_SWITCHES "Switches" +#define TR_STICKS "Sticks" +#define TR_POTS "Pots" +#define TR_SWITCHES "Switches" #define TR_SWITCHES_DELAY "Ritardo voce FV" #define TR_SLAVE "Allievo" #define TR_MODESRC "Modo\006% Origine" @@ -714,6 +741,7 @@ #define TR_PITCH_AT_ZERO INDENT "Tono a Zero" #define TR_PITCH_AT_MAX INDENT "Tono al Max" #define TR_REPEAT_AT_ZERO INDENT "Ripeti a Zero" +#define TR_POWEROFF "\027Power OFF..." #define TR_SHUTDOWN "ARRESTO.." #define TR_SAVEMODEL "Saving model settings" #define TR_BATT_CALIB "Calibra batt." @@ -780,7 +808,7 @@ #define TR_SD_SPEED "Veloc.:" #define TR_SD_SECTORS "Settori:" #define TR_SD_SIZE "Dimens:" -#define TR_TYPE "Tipo" +#define TR_TYPE INDENT "Tipo" #define TR_GLOBAL_VARS "Variabili Globali" #define TR_GLOBAL_V "V.GLOBALI" #define TR_GLOBAL_VAR "Variabile globale" @@ -834,6 +862,9 @@ #define TR_MODULE INDENT "Modulo" #define TR_TELEMETRY_TYPE "Tipo Telemetria" #define TR_TELEMETRY_SENSORS "Sensors" +#define TR_VALUE "Value" +#define TR_TOPLCDTIMER "Top LCD Timer" +#define TR_UNIT "Unit" #define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..." #define TR_CHANNELRANGE INDENT "Numero Canali" #define TR_LOWALARM INDENT "Allarme Basso" @@ -861,6 +892,8 @@ #define TR_INPUTS "Ingresso" #define TR_OUTPUTS "Uscita" #define TR_EEBACKUP "\004[ENTER Lungo] per copiare la EEPROM" +#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TO_MANY_LUA_SCRIPTS "Troppi Scripts Lua!" #if defined(MAVLINK) @@ -966,3 +999,54 @@ #define TR_UNLOCKED "Sbloccato" #define TR_ID "ID" #define TR_PRECISION "Precision" +#define TR_RATIO "Ratio" +#define TR_FORMULA "Formula" +#define TR_CELLINDEX "Cell index" +#define TR_LOGS "Logs" +#define TR_OPTIONS "Options" + +#define TR_ALTSENSOR "Alt sensor" +#define TR_CELLSENSOR "Cell sensor" +#define TR_GPSSENSOR "GPS sensor" +#define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" + +#define TR_MENU_INPUTS "\314Inputs" +#define TR_MENU_LUA "\322Lua scripts" +#define TR_MENU_STICKS "\307Sticks" +#define TR_MENU_POTS "\310Pots" +#define TR_MENU_MAX "\315MAX" +#define TR_MENU_HELI "\316Cyclic" +#define TR_MENU_TRIMS "\313Trims" +#define TR_MENU_SWITCHES "\312Switches" +#define TR_MENU_TRAINER "\317Trainer" +#define TR_MENU_CHANNELS "\320Channels" +#define TR_MENU_GVARS "\311GVars" +#define TR_MENU_TELEMETRY "\321Telemetry" + +#define ZSTR_RSSI "RSSI" +#define ZSTR_SWR "SWR" +#define ZSTR_A1 "A1" +#define ZSTR_A2 "A2" +#define ZSTR_A3 "A3" +#define ZSTR_A4 "A4" +#define ZSTR_BATT "RxBt" +#define ZSTR_ALT "Alt" +#define ZSTR_TEMP "Temp" +#define ZSTR_RPM "RPM" +#define ZSTR_FUEL "Fuel" +#define ZSTR_VSPD "VSpd" +#define ZSTR_ACCX "AccX" +#define ZSTR_ACCY "AccY" +#define ZSTR_ACCZ "AccZ" +#define ZSTR_CURR "Curr" +#define ZSTR_VFAS "VFAS" +#define ZSTR_ASPD "ASpd" +#define ZSTR_GSPD "GSpd" +#define ZSTR_HDG "Hdg" +#define ZSTR_CELLS "Cels" +#define ZSTR_GPSALT "GAlt" +#define ZSTR_GPSDATETIME "Date" +#define ZSTR_GPS "GPS" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index a45e0c107..d72ceeadb 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -82,6 +82,9 @@ #define LEN_UART3MODES "\017" #define TR_UART3MODES "Wyłącz\0 ""S-Port Mirror\0 ""Telemetry\0 ""SBUS Trainer\0 ""Debug\0" +#define LEN_SWTYPES "\006" +#define TR_SWTYPES "None\0 ""Toggle""2POS\0 ""3POS\0" + #define LEN_POTTYPES "\017" #define TR_POTTYPES "Brak\0 ""Poten z zapadką""Przeł.Wielopoz.""Potencjometr\0" @@ -362,7 +365,7 @@ #define LEN_VUNITSSYSTEM TR("\006", "\010") #define TR_VUNITSSYSTEM TR("Metr. ""Imper.", "Metryczn""Imperial") #define LEN_VTELEMUNIT "\003" - #define TR_VTELEMUNIT "-\0 ""v\0 ""A\0 ""mA\0""kts""m/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dBm""rpm""g\0 ""@\0" + #define TR_VTELEMUNIT "-\0 ""v\0 ""A\0 ""mA\0""kts""m/s""kmh""mph""m\0 ""ft\0""@C\0""@F\0""%\0 ""mAh""W\0 ""dBm""rpm""g\0 ""@\0 ""ml\0""fOz" #else #if defined(IMPERIAL_UNITS) #define LENGTH_UNIT LENGTH_UNIT_IMP @@ -441,7 +444,7 @@ #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" #endif -#define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr" +#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #if defined(PCBSKY9X) #define TR_ROTARY_ENCODERS "REa\0" @@ -454,13 +457,23 @@ #define TR_ROTENC_SWITCHES #endif -#if defined(PCBTARANIS) - #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36" - #define TR_VSWITCHES "---""SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" -#elif defined(CPUARM) - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "GAZ""SK ""SW ""LOT""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#if defined(PCBTARANIS) && defined(REV9E) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301""SI\300""SI-""SI\301""SJ\300""SJ-""SJ\301""SK\300""SK-""SK\301""SL\300""SL-""SL\301""SM\300""SM-""SM\301""SN\300""SN-""SN\301""SO\300""SO-""SO\301""SP\300""SP-""SP\301""SQ\300""SQ-""SQ\301""SR\300""SR-""SR\301" +#elif defined(PCBTARANIS) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301" #else - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "GAZ""SK ""SW ""LOT""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" + #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" +#endif + +#if defined(PCBTARANIS) + #if defined(REV9E) + #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36""S41""S42""S43""S44""S45""S46" + #else + #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36" + #endif + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#else + #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" #endif #if defined(HELI) @@ -489,6 +502,18 @@ #define TR_MAVLINK_AP_MODES "Ręczny ""Koło ""Stabilizacja ""Trening ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Sterowany ""Inicjalizacja""BŁĘDNY " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Totalize""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 @@ -547,8 +572,8 @@ #define OFS_CHECKTRIMS CENTER_OFS+(9*FW) #define TR_SWASHTYPE "Typ tarczy" #define TR_COLLECTIVE TR("Kolektyw", "Źródło Kolektywu") -#define TR_AILERON "Aileron Source" -#define TR_ELEVATOR "Elevator Source" +#define TR_AILERON "Lateral cyc. source" +#define TR_ELEVATOR "Long. cyc. source" #define TR_SWASHRING "Tarcza " #define TR_ELEDIRECTION TR("Ster Wysokośc","Dług. Kierunku cyklu") #define TR_AILDIRECTION TR("Kierunek Lotk","Lateral cyc. direction") @@ -616,6 +641,8 @@ #define TR_SWITCHWARNING TR(IF_CPUARM(INDENT) "OstrzPrzeł", INDENT "PozycjaPrzeł") #define TR_POTWARNING TR(IF_CPUARM(INDENT) "Ostrz.Poten.", INDENT "PozycjaPotencj.") #define TR_TIMEZONE TR("Strefa czasowa" ,"Strefa czasowa GPS") +#define TR_ADJUST_RTC INDENT "Adjust RTC" +#define TR_GPS "GPS" #define TR_RXCHANNELORD TR("KolejnKan.RX", "Bazowa kolejność kanałów") #define TR_STICKS "Sticks" #define TR_POTS "Pots" @@ -712,6 +739,7 @@ #define TR_PITCH_AT_ZERO INDENT "Ton przy Zerze" #define TR_PITCH_AT_MAX INDENT "Ton przy Max" #define TR_REPEAT_AT_ZERO INDENT "Powtórz przy Zerze" +#define TR_POWEROFF "\027Power OFF..." #define TR_SHUTDOWN "Wyłączanie.." #define TR_SAVEMODEL "Zapisz ustwienia modelu" #define TR_BATT_CALIB "Kalib:Baterii" @@ -778,7 +806,7 @@ #define TR_SD_SPEED "Prędkość:" #define TR_SD_SECTORS "Sektory :" #define TR_SD_SIZE "Wielkość:" -#define TR_TYPE TR_SD_TYPE +#define TR_TYPE INDENT TR_SD_TYPE #define TR_GLOBAL_VARS "Zmienne Globalne" #define TR_GLOBAL_V "Zmien.Glob." #define TR_GLOBAL_VAR "Zmienna Globalna" @@ -832,6 +860,9 @@ #define TR_MODULE INDENT "Moduł" #define TR_TELEMETRY_TYPE "Typ Telemetri" #define TR_TELEMETRY_SENSORS "Czujniki" +#define TR_VALUE "Value" +#define TR_TOPLCDTIMER "Top LCD Timer" +#define TR_UNIT "Unit" #define TR_TELEMETRY_NEWSENSOR INDENT "Dodaj nowy czujnik..." #define TR_CHANNELRANGE TR(INDENT "ZakrKn",INDENT "Zakres kanału") #define TR_LOWALARM INDENT "Alarm niski" @@ -859,6 +890,8 @@ #define TR_INPUTS "Wejścia" #define TR_OUTPUTS "Wyjścia" #define TR_EEBACKUP "\004[ENTER Długo] Backupowanie EEPROMu" +#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TO_MANY_LUA_SCRIPTS "Za dużo skryptów Lua!" #if defined(MAVLINK) @@ -964,25 +997,54 @@ #define TR_UNLOCKED "Odblokowane" #define TR_ID "ID" #define TR_PRECISION "Precyzja " +#define TR_RATIO "Ratio" +#define TR_FORMULA "Formula" +#define TR_CELLINDEX "Cell index" +#define TR_LOGS "Logs" +#define TR_OPTIONS "Options" + +#define TR_ALTSENSOR "Alt sensor" +#define TR_CELLSENSOR "Cell sensor" +#define TR_GPSSENSOR "GPS sensor" +#define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" + +#define TR_MENU_INPUTS "\314Inputs" +#define TR_MENU_LUA "\322Lua scripts" +#define TR_MENU_STICKS "\307Sticks" +#define TR_MENU_POTS "\310Pots" +#define TR_MENU_MAX "\315MAX" +#define TR_MENU_HELI "\316Cyclic" +#define TR_MENU_TRIMS "\313Trims" +#define TR_MENU_SWITCHES "\312Switches" +#define TR_MENU_TRAINER "\317Trainer" +#define TR_MENU_CHANNELS "\320Channels" +#define TR_MENU_GVARS "\311GVars" +#define TR_MENU_TELEMETRY "\321Telemetry" #define ZSTR_RSSI "RSSI" +#define ZSTR_SWR "SWR" #define ZSTR_A1 "A1" #define ZSTR_A2 "A2" -#define ZSTR_BATT "Bat." -#define ZSTR_ALT "Wysok." +#define ZSTR_A3 "A3" +#define ZSTR_A4 "A4" +#define ZSTR_BATT "RxBt" +#define ZSTR_ALT "Alt" #define ZSTR_TEMP "Temp" #define ZSTR_RPM "RPM" -#define ZSTR_FUEL "Paliwo" +#define ZSTR_FUEL "Fuel" #define ZSTR_VSPD "VSpd" #define ZSTR_ACCX "AccX" #define ZSTR_ACCY "AccY" #define ZSTR_ACCZ "AccZ" -#define ZSTR_CURR "Natęż" +#define ZSTR_CURR "Curr" #define ZSTR_VFAS "VFAS" #define ZSTR_ASPD "ASpd" #define ZSTR_GSPD "GSpd" -#define ZSTR_HDG "Kurs" -#define ZSTR_CELLS "Cele" +#define ZSTR_HDG "Hdg" +#define ZSTR_CELLS "Cels" #define ZSTR_GPSALT "GAlt" -#define ZSTR_GPSDATETIME "Data" +#define ZSTR_GPSDATETIME "Date" #define ZSTR_GPS "GPS" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 0e10202e9..88c1129f1 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -82,6 +82,9 @@ #define LEN_UART3MODES "\017" #define TR_UART3MODES "OFF\0 ""S-Port Mirror\0 ""Telemetry\0 ""SBUS Trainer\0 ""Debug\0" +#define LEN_SWTYPES "\006" +#define TR_SWTYPES "None\0 ""Toggle""2POS\0 ""3POS\0" + #define LEN_POTTYPES "\017" #define TR_POTTYPES "None\0 ""Pot with detent""Multipos Switch""Pot\0" @@ -443,7 +446,7 @@ #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" #endif -#define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr" +#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313\313d""\313\313u""\313Al""\313Ar") #if defined(PCBSKY9X) #define TR_ROTARY_ENCODERS "REa\0" @@ -456,13 +459,23 @@ #define TR_ROTENC_SWITCHES #endif -#if defined(PCBTARANIS) - #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36" - #define TR_VSWITCHES "---""SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" -#elif defined(CPUARM) - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#if defined(PCBTARANIS) && defined(REV9E) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301""SI\300""SI-""SI\301""SJ\300""SJ-""SJ\301""SK\300""SK-""SK\301""SL\300""SL-""SL\301""SM\300""SM-""SM\301""SN\300""SN-""SN\301""SO\300""SO-""SO\301""SP\300""SP-""SP\301""SQ\300""SQ-""SQ\301""SR\300""SR-""SR\301" +#elif defined(PCBTARANIS) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301" #else - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" + #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" +#endif + +#if defined(PCBTARANIS) + #if defined(REV9E) + #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36""S41""S42""S43""S44""S45""S46" + #else + #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36" + #endif + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#else + #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" #endif #if defined(HELI) @@ -491,6 +504,18 @@ #define TR_MAVLINK_AP_MODES "Manual ""Circle ""Stabilize ""Training ""Fly by Wire A""Fly by Wire A""Auto ""RTL ""Loiter ""Guided ""Initialising ""INVALID " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Totalize""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 @@ -532,11 +557,11 @@ #define TR_ELIMITS "E.Limits" #define TR_ETRIMS "E.Trims" #define TR_TRIMINC "Trim Step" -#define TR_DISPLAY_TRIMS "Display Trims" +#define TR_DISPLAY_TRIMS "Display Trims" #define TR_TTRACE TR("T-Trace", INDENT "T-Trace") #define TR_TTRIM TR("T-Trim", INDENT "T-Trim") #define TR_BEEPCTR "Ctr Beep" -#define TR_USE_GLOBAL_FUNCS "Use Global Funcs" +#define TR_USE_GLOBAL_FUNCS "Use Global Funcs" #define TR_PROTO INDENT"Proto" #define TR_PPMFRAME "PPM frame" #define TR_MS "ms" @@ -548,9 +573,9 @@ #define TR_CHECKTRIMS "\006Check\012Trims" #define OFS_CHECKTRIMS (9*FW) #define TR_SWASHTYPE "Ciclico Tipo" -#define TR_COLLECTIVE "Coletivo" -#define TR_AILERON "Aileron Source" -#define TR_ELEVATOR "Elevator Source" +#define TR_COLLECTIVE "Coletivo" +#define TR_AILERON "Lateral cyc. source" +#define TR_ELEVATOR "Long. cyc. source" #define TR_SWASHRING "Anel Coletivo" #define TR_ELEDIRECTION "PFD Sentido" #define TR_AILDIRECTION "AIL Sentido" @@ -618,10 +643,12 @@ #define TR_SWITCHWARNING TR("Avisa Chav", INDENT "Avisa Chav") #define TR_POTWARNING TR("Pot Warn.", INDENT "Pot Warning") #define TR_TIMEZONE "Time Zone" +#define TR_ADJUST_RTC INDENT "Adjust RTC" +#define TR_GPS "GPS" #define TR_RXCHANNELORD "Ordem Canal RX" -#define TR_STICKS "Sticks" -#define TR_POTS "Pots" -#define TR_SWITCHES "Switches" +#define TR_STICKS "Sticks" +#define TR_POTS "Pots" +#define TR_SWITCHES "Switches" #define TR_SWITCHES_DELAY "Switches Delay" #define TR_SLAVE "Escravo" #define TR_MODESRC "Modo\006% Fonte" @@ -714,6 +741,7 @@ #define TR_PITCH_AT_ZERO INDENT "Pitch at Zero" #define TR_PITCH_AT_MAX INDENT "Pitch at Max" #define TR_REPEAT_AT_ZERO INDENT "Repeat at Zero" +#define TR_POWEROFF "\027Power OFF..." #define TR_SHUTDOWN "DESLIGANDOo" #define TR_SAVEMODEL "Saving model settings" #define TR_BATT_CALIB "CALIBRAR BATT" @@ -780,7 +808,7 @@ #define TR_SD_SPEED "Velocidade" #define TR_SD_SECTORS "Sectores" #define TR_SD_SIZE "Tamanho" -#define TR_TYPE "Tipe" +#define TR_TYPE INDENT "Tipe" #define TR_GLOBAL_VARS "Variaveis" #define TR_GLOBAL_V "GLOBAL V." #define TR_GLOBAL_VAR "Global Variable" @@ -834,6 +862,9 @@ #define TR_MODULE INDENT "Module" #define TR_TELEMETRY_TYPE TR("Type", "Telemetry Type") #define TR_TELEMETRY_SENSORS "Sensors" +#define TR_VALUE "Value" +#define TR_TOPLCDTIMER "Top LCD Timer" +#define TR_UNIT "Unit" #define TR_TELEMETRY_NEWSENSOR INDENT "Add a new sensor..." #define TR_CHANNELRANGE INDENT "Channel Range" #define TR_LOWALARM INDENT "Low Alarm" @@ -861,6 +892,8 @@ #define TR_INPUTS "Inputs" #define TR_OUTPUTS "Outputs" #define TR_EEBACKUP "\004[ENTER Long] to backup the EEPROM" +#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TO_MANY_LUA_SCRIPTS "Too many Lua scripts!" #if defined(MAVLINK) @@ -966,3 +999,54 @@ #define TR_UNLOCKED "Unlocked" #define TR_ID "ID" #define TR_PRECISION "Precision" +#define TR_RATIO "Ratio" +#define TR_FORMULA "Formula" +#define TR_CELLINDEX "Cell index" +#define TR_LOGS "Logs" +#define TR_OPTIONS "Options" + +#define TR_ALTSENSOR "Alt sensor" +#define TR_CELLSENSOR "Cell sensor" +#define TR_GPSSENSOR "GPS sensor" +#define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" + +#define TR_MENU_INPUTS "\314Inputs" +#define TR_MENU_LUA "\322Lua scripts" +#define TR_MENU_STICKS "\307Sticks" +#define TR_MENU_POTS "\310Pots" +#define TR_MENU_MAX "\315MAX" +#define TR_MENU_HELI "\316Cyclic" +#define TR_MENU_TRIMS "\313Trims" +#define TR_MENU_SWITCHES "\312Switches" +#define TR_MENU_TRAINER "\317Trainer" +#define TR_MENU_CHANNELS "\320Channels" +#define TR_MENU_GVARS "\311GVars" +#define TR_MENU_TELEMETRY "\321Telemetry" + +#define ZSTR_RSSI "RSSI" +#define ZSTR_SWR "SWR" +#define ZSTR_A1 "A1" +#define ZSTR_A2 "A2" +#define ZSTR_A3 "A3" +#define ZSTR_A4 "A4" +#define ZSTR_BATT "RxBt" +#define ZSTR_ALT "Alt" +#define ZSTR_TEMP "Temp" +#define ZSTR_RPM "RPM" +#define ZSTR_FUEL "Fuel" +#define ZSTR_VSPD "VSpd" +#define ZSTR_ACCX "AccX" +#define ZSTR_ACCY "AccY" +#define ZSTR_ACCZ "AccZ" +#define ZSTR_CURR "Curr" +#define ZSTR_VFAS "VFAS" +#define ZSTR_ASPD "ASpd" +#define ZSTR_GSPD "GSpd" +#define ZSTR_HDG "Hdg" +#define ZSTR_CELLS "Cels" +#define ZSTR_GPSALT "GAlt" +#define ZSTR_GPSDATETIME "Date" +#define ZSTR_GPS "GPS" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index c235ae993..938175f1e 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -82,6 +82,9 @@ #define LEN_UART3MODES "\022" #define TR_UART3MODES "Av\0 ""Spegling av S-Port""Telemetri\0 ""SBUS Trainer\0 ""Debug\0" +#define LEN_SWTYPES "\006" +#define TR_SWTYPES "None\0 ""Toggle""2POS\0 ""3POS\0" + #define LEN_POTTYPES "\020" #define TR_POTTYPES "Ingen\0 ""Mittläges-pot\0 ""Flerlägesväljare""Potentiometer\0" @@ -443,7 +446,7 @@ #define TR_LOGICALSW "L1\0""L2\0""L3\0""L4\0""L5\0""L6\0""L7\0""L8\0""L9\0""L10""L11""L12" #endif -#define TR_TRIMS_SWITCHES "tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr" +#define TR_TRIMS_SWITCHES TR("tRl""tRr""tEd""tEu""tTd""tTu""tAl""tAr", "\313Rl""\313Rr""\313Ed""\313Eu""\313Td""\313Tu""\313Al""\313Ar") #if defined(PCBSKY9X) #define TR_ROTARY_ENCODERS "REa\0" @@ -456,13 +459,23 @@ #define TR_ROTENC_SWITCHES #endif -#if defined(PCBTARANIS) - #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36" - #define TR_VSWITCHES "---""SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF\301""SG\300""SG-""SG\301""SH\300""SH\301" TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "PÅ\0""En\0" -#elif defined(CPUARM) - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "PÅ\0""En\0" +#if defined(PCBTARANIS) && defined(REV9E) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301""SI\300""SI-""SI\301""SJ\300""SJ-""SJ\301""SK\300""SK-""SK\301""SL\300""SL-""SL\301""SM\300""SM-""SM\301""SN\300""SN-""SN\301""SO\300""SO-""SO\301""SP\300""SP-""SP\301""SQ\300""SQ-""SQ\301""SR\300""SR-""SR\301" +#elif defined(PCBTARANIS) + #define TR_PHYS_SWITCHES "SA\300""SA-""SA\301""SB\300""SB-""SB\301""SC\300""SC-""SC\301""SD\300""SD-""SD\301""SE\300""SE-""SE\301""SF\300""SF-""SF\301""SG\300""SG-""SG\301""SH\300""SH-""SH\301" #else - #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "PÅ\0""En\0" + #define TR_PHYS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" +#endif + +#if defined(PCBTARANIS) + #if defined(REV9E) + #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36""S41""S42""S43""S44""S45""S46" + #else + #define TR_6POS_POTS "S11""S12""S13""S14""S15""S16""S21""S22""S23""S24""S25""S26""S31""S32""S33""S34""S35""S36" + #endif + #define TR_VSWITCHES "---" TR_PHYS_SWITCHES TR_6POS_POTS TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" +#else + #define TR_VSWITCHES "---" TR_9X_3POS_SWITCHES TR_PHYS_SWITCHES TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_LOGICALSW "ON\0""One" #endif #if defined(HELI) @@ -491,6 +504,18 @@ #define TR_MAVLINK_AP_MODES "Manuell ""Cirkla ""Stabilisera ""Övning ""Fly by Wire A""Fly by Wire A""Automatisk ""Flyg Hem ""Hovra ""Guidad ""Initialiserar""OGILTIG " #endif +#define LEN_VSENSORTYPES "\012" +#define TR_VSENSORTYPES "Custom\0 ""Calculated" + +#define LEN_VFORMULAS "\010" +#define TR_VFORMULAS "Add\0 ""Average\0""Min\0 ""Max\0 ""Multiply""Totalize""Cell\0 ""Consumpt""Distance" + +#define LEN_VPREC "\005" +#define TR_VPREC "PREC0""PREC1""PREC2" + +#define LEN_VCELLINDEX "\007" +#define TR_VCELLINDEX "Lowest\0""1\0 ""2\0 ""3\0 ""4\0 ""5\0 ""6\0 ""Highest""Delta\0" + // ZERO TERMINATED STRINGS #define INDENT "\001" #define LEN_INDENT 1 @@ -532,11 +557,11 @@ #define TR_ELIMITS TR("Gränser++","Utökade Gränser") #define TR_ETRIMS TR("Trimmar++","Utökade Trimmar") #define TR_TRIMINC TR("Trimning","Trimökning") -#define TR_DISPLAY_TRIMS "Display Trims" +#define TR_DISPLAY_TRIMS "Display Trims" #define TR_TTRACE TR("Följ Gas", INDENT "Följ Gas") #define TR_TTRIM TR("Gastrim", INDENT "Gastrim") #define TR_BEEPCTR TR("Cent.pip", "Centerpip") -#define TR_USE_GLOBAL_FUNCS "Use Global Funcs" +#define TR_USE_GLOBAL_FUNCS "Use Global Funcs" #define TR_PROTO TR(INDENT "Proto", INDENT "Protokoll") #define TR_PPMFRAME TR(INDENT "PPM-paket", INDENT "PPM-paket") #define TR_MS "ms" @@ -618,10 +643,12 @@ #define TR_SWITCHWARNING TR("Bryt.varn.", INDENT "Brytarvarning") #define TR_POTWARNING TR("Rattvarn.", INDENT "Rattvarning") #define TR_TIMEZONE TR("Tidszon", "GPS Tidszon") +#define TR_ADJUST_RTC INDENT "Adjust RTC" +#define TR_GPS "GPS" #define TR_RXCHANNELORD "Kanaler i RX" -#define TR_STICKS "Sticks" -#define TR_POTS "Pots" -#define TR_SWITCHES "Switches" +#define TR_STICKS "Sticks" +#define TR_POTS "Pots" +#define TR_SWITCHES "Switches" #define TR_SWITCHES_DELAY "Brytarfördröjning" #define TR_SLAVE "Elev" #define TR_MODESRC " Läge\004% Källa" @@ -714,6 +741,7 @@ #define TR_PITCH_AT_ZERO INDENT "Ton vid Noll" #define TR_PITCH_AT_MAX INDENT "Ton vid Max" #define TR_REPEAT_AT_ZERO INDENT "Repetera vid Noll" +#define TR_POWEROFF "\027Power OFF..." #define TR_SHUTDOWN "STÄNGER AV" #define TR_SAVEMODEL "Spara modellinställn." #define TR_BATT_CALIB "Kalib. Batteri" @@ -780,7 +808,7 @@ #define TR_SD_SPEED "Hastighet:" #define TR_SD_SECTORS "Sektorer:" #define TR_SD_SIZE "Strl:" -#define TR_TYPE "Typ " +#define TR_TYPE INDENT "Typ " #define TR_GLOBAL_VARS "Globala Variabler" #define TR_GLOBAL_V "GLOBAL V." #define TR_GLOBAL_VAR "Global Variabel" @@ -834,6 +862,9 @@ #define TR_MODULE INDENT "Modul" #define TR_TELEMETRY_TYPE "Telemetrityp" #define TR_TELEMETRY_SENSORS "Sensorer" +#define TR_VALUE "Value" +#define TR_TOPLCDTIMER "Top LCD Timer" +#define TR_UNIT "Unit" #define TR_TELEMETRY_NEWSENSOR INDENT "Lägg till sensor..." #define TR_CHANNELRANGE INDENT "Kanalområde" #define TR_LOWALARM INDENT "Låg-alarm" @@ -861,6 +892,8 @@ #define TR_INPUTS "Input" #define TR_OUTPUTS "Outputs" #define TR_EEBACKUP "\004[ENTER Lång] säkerhetskopiera EEPROM" +#define TR_FACTORYRESET "\012[MENU Long]: Factory reset" +#define TR_CONFIRMRESET "Erase ALL models and settings?" #define TR_TO_MANY_LUA_SCRIPTS "För många Lua-scripts!" #if defined(MAVLINK) @@ -966,3 +999,54 @@ #define TR_UNLOCKED "Olåst" #define TR_ID "ID" #define TR_PRECISION "Precision" +#define TR_RATIO "Ratio" +#define TR_FORMULA "Formula" +#define TR_CELLINDEX "Cell index" +#define TR_LOGS "Logs" +#define TR_OPTIONS "Options" + +#define TR_ALTSENSOR "Alt sensor" +#define TR_CELLSENSOR "Cell sensor" +#define TR_GPSSENSOR "GPS sensor" +#define TR_CURRENTSENSOR "Current sensor" +#define TR_AUTOOFFSET "Auto Offset" +#define TR_FILTER "Filter" +#define TR_TELEMETRYFULL "All telemetry slots full!" + +#define TR_MENU_INPUTS "\314Inputs" +#define TR_MENU_LUA "\322Lua scripts" +#define TR_MENU_STICKS "\307Sticks" +#define TR_MENU_POTS "\310Pots" +#define TR_MENU_MAX "\315MAX" +#define TR_MENU_HELI "\316Cyclic" +#define TR_MENU_TRIMS "\313Trims" +#define TR_MENU_SWITCHES "\312Switches" +#define TR_MENU_TRAINER "\317Trainer" +#define TR_MENU_CHANNELS "\320Channels" +#define TR_MENU_GVARS "\311GVars" +#define TR_MENU_TELEMETRY "\321Telemetry" + +#define ZSTR_RSSI "RSSI" +#define ZSTR_SWR "SWR" +#define ZSTR_A1 "A1" +#define ZSTR_A2 "A2" +#define ZSTR_A3 "A3" +#define ZSTR_A4 "A4" +#define ZSTR_BATT "RxBt" +#define ZSTR_ALT "Alt" +#define ZSTR_TEMP "Temp" +#define ZSTR_RPM "RPM" +#define ZSTR_FUEL "Fuel" +#define ZSTR_VSPD "VSpd" +#define ZSTR_ACCX "AccX" +#define ZSTR_ACCY "AccY" +#define ZSTR_ACCZ "AccZ" +#define ZSTR_CURR "Curr" +#define ZSTR_VFAS "VFAS" +#define ZSTR_ASPD "ASpd" +#define ZSTR_GSPD "GSpd" +#define ZSTR_HDG "Hdg" +#define ZSTR_CELLS "Cels" +#define ZSTR_GPSALT "GAlt" +#define ZSTR_GPSDATETIME "Date" +#define ZSTR_GPS "GPS" diff --git a/radio/src/translations/tts_cz.cpp b/radio/src/translations/tts_cz.cpp index 4f45c212c..f46c10d68 100644 --- a/radio/src/translations/tts_cz.cpp +++ b/radio/src/translations/tts_cz.cpp @@ -56,6 +56,10 @@ enum CzechPrompts { CZ_PROMPT_SECONDS = CZ_PROMPT_UNITS_BASE+(UNIT_SECONDS*4), CZ_PROMPT_RPMS = CZ_PROMPT_UNITS_BASE+(UNIT_RPMS*4), CZ_PROMPT_G = CZ_PROMPT_UNITS_BASE+(UNIT_G*4), +#if defined(CPUARM) + CZ_PROMPT_MILLILITERS = CZ_PROMPT_UNITS_BASE+(UNIT_MILLILITERS*4), + CZ_PROMPT_FLOZ = CZ_PROMPT_UNITS_BASE+(UNIT_FLOZ*4), +#endif }; diff --git a/radio/src/translations/tts_de.cpp b/radio/src/translations/tts_de.cpp index 4fcc5567b..c655fd261 100644 --- a/radio/src/translations/tts_de.cpp +++ b/radio/src/translations/tts_de.cpp @@ -56,7 +56,11 @@ enum GermanPrompts { DE_PROMPT_MINUTES = DE_PROMPT_UNITS_BASE+UNIT_MINUTES, DE_PROMPT_SECONDS = DE_PROMPT_UNITS_BASE+UNIT_SECONDS, DE_PROMPT_RPMS = DE_PROMPT_UNITS_BASE+UNIT_RPMS, - DE_PROMPT_G= DE_PROMPT_UNITS_BASE+UNIT_G, + DE_PROMPT_G = DE_PROMPT_UNITS_BASE+UNIT_G, +#if defined(CPUARM) + DE_PROMPT_MILLILITERS = DE_PROMPT_UNITS_BASE+UNIT_MILLILITERS, + DE_PROMPT_FLOZ = DE_PROMPT_UNITS_BASE+UNIT_FLOZ, +#endif }; diff --git a/radio/src/translations/tts_en.cpp b/radio/src/translations/tts_en.cpp index c72ed749a..4b5e93908 100644 --- a/radio/src/translations/tts_en.cpp +++ b/radio/src/translations/tts_en.cpp @@ -65,6 +65,10 @@ enum EnglishPrompts { EN_PROMPT_SECONDS = EN_PROMPT_UNITS_BASE+(UNIT_SECONDS*2), EN_PROMPT_RPMS = EN_PROMPT_UNITS_BASE+(UNIT_RPMS*2), EN_PROMPT_G = EN_PROMPT_UNITS_BASE+(UNIT_G*2), +#if defined(CPUARM) + EN_PROMPT_MILLILITERS = EN_PROMPT_UNITS_BASE+(UNIT_MILLILITERS*2), + EN_PROMPT_FLOZ = EN_PROMPT_UNITS_BASE+(UNIT_FLOZ*2), +#endif EN_PROMPT_POINT_BASE = 160, //.0 - .9 diff --git a/radio/src/translations/tts_es.cpp b/radio/src/translations/tts_es.cpp index 4aed68a5c..b6f74ec88 100644 --- a/radio/src/translations/tts_es.cpp +++ b/radio/src/translations/tts_es.cpp @@ -80,7 +80,11 @@ enum SpanishPrompts { ES_PROMPT_MINUTES = ES_PROMPT_UNITS_BASE+UNIT_MINUTES, ES_PROMPT_SECONDS = ES_PROMPT_UNITS_BASE+UNIT_SECONDS, ES_PROMPT_RPMS = ES_PROMPT_UNITS_BASE+UNIT_RPMS, - ES_PROMPT_G= ES_PROMPT_UNITS_BASE+UNIT_G, + ES_PROMPT_G = ES_PROMPT_UNITS_BASE+UNIT_G, +#if defined(CPUARM) + ES_PROMPT_MILLILITERS = ES_PROMPT_UNITS_BASE+UNIT_MILLILITERS, + ES_PROMPT_FLOZ = ES_PROMPT_UNITS_BASE+UNIT_FLOZ, +#endif }; diff --git a/radio/src/translations/tts_fr.cpp b/radio/src/translations/tts_fr.cpp index 402fd3d39..82ebcc98c 100644 --- a/radio/src/translations/tts_fr.cpp +++ b/radio/src/translations/tts_fr.cpp @@ -62,6 +62,12 @@ enum FrenchPrompts { FR_PROMPT_HEURE = FR_PROMPT_UNITS_BASE+UNIT_HOURS, FR_PROMPT_MINUTE = FR_PROMPT_UNITS_BASE+UNIT_MINUTES, FR_PROMPT_SECONDE = FR_PROMPT_UNITS_BASE+UNIT_SECONDS, + FR_PROMPT_RPMS = FR_PROMPT_UNITS_BASE+UNIT_RPMS, + FR_PROMPT_G = FR_PROMPT_UNITS_BASE+UNIT_G, +#if defined(CPUARM) + FR_PROMPT_MILLILITERS = FR_PROMPT_UNITS_BASE+UNIT_MILLILITERS, + FR_PROMPT_FLOZ = FR_PROMPT_UNITS_BASE+UNIT_FLOZ, +#endif FR_PROMPT_VIRGULE_BASE = 180, //,0 - ,9 }; diff --git a/radio/src/translations/tts_hu.cpp b/radio/src/translations/tts_hu.cpp index 1c1763232..3d1a28a63 100644 --- a/radio/src/translations/tts_hu.cpp +++ b/radio/src/translations/tts_hu.cpp @@ -65,6 +65,10 @@ enum HungarianPrompts { HU_PROMPT_SECONDS = HU_PROMPT_UNITS_BASE+(UNIT_SECONDS*2), HU_PROMPT_RPMS = HU_PROMPT_UNITS_BASE+(UNIT_RPMS*2), HU_PROMPT_G = HU_PROMPT_UNITS_BASE+(UNIT_G*2), +#if defined(CPUARM) + HU_PROMPT_MILLILITERS = HU_PROMPT_UNITS_BASE+(UNIT_MILLILITERS*2), + HU_PROMPT_FLOZ = HU_PROMPT_UNITS_BASE+(UNIT_FLOZ*2), +#endif HU_PROMPT_POINT_BASE = 160, //.0 - .9 diff --git a/radio/src/translations/tts_it.cpp b/radio/src/translations/tts_it.cpp index 4e5dc6f5a..e178ef73f 100644 --- a/radio/src/translations/tts_it.cpp +++ b/radio/src/translations/tts_it.cpp @@ -53,6 +53,10 @@ enum ItalianPrompts { IT_PROMPT_WATTS = IT_PROMPT_UNITS_BASE+UNIT_WATTS, IT_PROMPT_FEET = IT_PROMPT_UNITS_BASE+UNIT_FEET, IT_PROMPT_KTS = IT_PROMPT_UNITS_BASE+UNIT_KTS, +#if defined(CPUARM) + IT_PROMPT_MILLILITERS = IT_PROMPT_UNITS_BASE+UNIT_MILLILITERS, + IT_PROMPT_FLOZ = IT_PROMPT_UNITS_BASE+UNIT_FLOZ, +#endif }; diff --git a/radio/src/translations/tts_pl.cpp b/radio/src/translations/tts_pl.cpp index faac6283b..85a0d909b 100644 --- a/radio/src/translations/tts_pl.cpp +++ b/radio/src/translations/tts_pl.cpp @@ -58,6 +58,10 @@ enum PolishPrompts { PL_PROMPT_SECONDS = PL_PROMPT_UNITS_BASE+(UNIT_SECONDS*4), PL_PROMPT_RPMS = PL_PROMPT_UNITS_BASE+(UNIT_RPMS*4), PL_PROMPT_G = PL_PROMPT_UNITS_BASE+(UNIT_G*4), +#if defined(CPUARM) + PL_PROMPT_MILLILITERS = PL_PROMPT_UNITS_BASE+(UNIT_MILLILITERS*4), + PL_PROMPT_FLOZ = PL_PROMPT_UNITS_BASE+(UNIT_FLOZ*4), +#endif }; #if defined(VOICE) diff --git a/radio/src/translations/tts_pt.cpp b/radio/src/translations/tts_pt.cpp index 024b20095..38bcef083 100644 --- a/radio/src/translations/tts_pt.cpp +++ b/radio/src/translations/tts_pt.cpp @@ -76,6 +76,10 @@ enum PortuguesePrompts { PT_PROMPT_WATTS = PT_PROMPT_UNITS_BASE+UNIT_WATTS, PT_PROMPT_FEET = PT_PROMPT_UNITS_BASE+UNIT_FEET, PT_PROMPT_KTS = PT_PROMPT_UNITS_BASE+UNIT_KTS, +#if defined(CPUARM) + PT_PROMPT_MILLILITERS = PT_PROMPT_UNITS_BASE+UNIT_MILLILITERS, + PT_PROMPT_FLOZ = PT_PROMPT_UNITS_BASE+UNIT_FLOZ, +#endif }; #if defined(VOICE) diff --git a/radio/src/translations/tts_se.cpp b/radio/src/translations/tts_se.cpp index b187338a5..a2021ec51 100644 --- a/radio/src/translations/tts_se.cpp +++ b/radio/src/translations/tts_se.cpp @@ -66,6 +66,10 @@ enum SwedishPrompts { SE_PROMPT_SECONDS = SE_PROMPT_UNITS_BASE+(UNIT_SECONDS*2), SE_PROMPT_RPMS = SE_PROMPT_UNITS_BASE+(UNIT_RPMS*2), SE_PROMPT_G = SE_PROMPT_UNITS_BASE+(UNIT_G*2), +#if defined(CPUARM) + SE_PROMPT_MILLILITERS = SE_PROMPT_UNITS_BASE+(UNIT_MILLILITERS*2), + SE_PROMPT_FLOZ = SE_PROMPT_UNITS_BASE+(UNIT_FLOZ*2), +#endif SE_PROMPT_POINT_BASE = 160, //.0 - .9 diff --git a/radio/src/translations/tts_sk.cpp b/radio/src/translations/tts_sk.cpp index fdea697cc..b132ca73a 100644 --- a/radio/src/translations/tts_sk.cpp +++ b/radio/src/translations/tts_sk.cpp @@ -71,6 +71,10 @@ enum SlovakPrompts { SK_PROMPT_SECONDS = SK_PROMPT_UNITS_BASE+(UNIT_SECONDS*4), SK_PROMPT_RPMS = SK_PROMPT_UNITS_BASE+(UNIT_RPMS*4), SK_PROMPT_G = SK_PROMPT_UNITS_BASE+(UNIT_G*4), +#if defined(CPUARM) + SK_PROMPT_MILLILITERS = SK_PROMPT_UNITS_BASE+(UNIT_MILLILITERS*4), + SK_PROMPT_FLOZ = SK_PROMPT_UNITS_BASE+(UNIT_FLOZ*4), +#endif }; diff --git a/radio/util/tts.py b/radio/util/tts.py index 4e9ed32fa..79cfd0909 100644 --- a/radio/util/tts.py +++ b/radio/util/tts.py @@ -151,7 +151,9 @@ def ttsEn(): "minute", "minutes", "second", "seconds", "r p m", "r p m", - "g", "g"]): + "g", "g" + "milliliter", "milliliters" + "fluid ounce", "fluid ounces"]): systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+115+i))) for i, s in enumerate(["point zero", "point one", "point two", "point three", "point four", "point five", "point six", @@ -246,7 +248,7 @@ def ttsFr(): systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+110+i))) for i, s in enumerate(["virgule", "et", "moins", "minuit", "midi"]): systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+119+i))) - for i, s in enumerate(["volts", u"ampères", u"mètres seconde", "", u"kilomètre heure", u"mètres", u"degrés", "pourcents", u"milli ampères", u"milli ampères / heure", "watt", "db", "pieds", "miles par heure", "heure", "minute", "seconde", "tours minute", "g"]): + for i, s in enumerate(["volts", u"ampères", u"mètres seconde", "", u"kilomètre heure", u"mètres", u"degrés", "pourcents", u"milli ampères", u"milli ampères / heure", "watt", "db", "pieds", "miles par heure", "heure", "minute", "seconde", "tours minute", "g", "millilitres", "onces"]): systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+125+i))) for i, s in enumerate(["timer", "", "tension", "tension", u"émission", u"réception", "altitude", "moteur", "essence", u"température", u"température", "vitesse", "distance", "altitude", u"élément lipo", @@ -306,7 +308,7 @@ def ttsIt(): systemSounds.append(("mille", filename(PROMPT_SYSTEM_BASE+102))) for i, s in enumerate(["virgola", "un", "e", "meno", "ora", "ore", "minuto", "minuti", "secondo", "secondi"]): systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+103+i))) - for i, s in enumerate(["volt", "ampere", "metri per secondo", "", "chilometri/ora", "metri", "gradi", "percento", "milliampere", "milliampere/ora", "watt", "db", "piedi", "nodi", "ore", "minuti", "secondi", "R P M", "g"]): + for i, s in enumerate(["volt", "ampere", "metri per secondo", "", "chilometri/ora", "metri", "gradi", "percento", "milliampere", "milliampere/ora", "watt", "db", "piedi", "nodi", "ore", "minuti", "secondi", "R P M", "g", "millilitri", "once"]): systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+113+i))) for s, f, a in [(u"radio inattiva controllare", "inactiv", 486), (u"batteria della radio scarica", "lowbatt", 485), @@ -388,7 +390,7 @@ def ttsPt(): systemSounds.append(("mil", filename(PROMPT_SYSTEM_BASE+110))) for i, s in enumerate(["virgula", "uma", "duas", "e", "menos", "hora", "horas", "minuto", "minutos", "segundo", "segundos"]): systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+111+i))) - for i, s in enumerate([u"Volt", u"ampére", u"metros por segundo", u"", u"quilômetros por hora", u"metros", u"graus", u"cento", u"miliamperes", u"miliamperes por hora", u"watt", u"db", u"pés", u"nós", u"horas", u"minutos", u"segundos", u"RPM", u"g"]): + for i, s in enumerate([u"Volt", u"ampére", u"metros por segundo", u"", u"quilômetros por hora", u"metros", u"graus", u"cento", u"miliamperes", u"miliamperes por hora", u"watt", u"db", u"pés", u"nós", u"horas", u"minutos", u"segundos", u"RPM", u"g", u"mililitri", u"onças"]): systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+122+i))) for s, f, a in [(u"atenção, o rádio foi esquecido ligado, por favor desligue-o", "inactiv", 486), (u"bateria do rádio fraca", "lowbatt", 485), @@ -468,7 +470,7 @@ def ttsEs(): systemSounds.append(("mil", filename(PROMPT_SYSTEM_BASE+110))) for i, s in enumerate(["coma", "un", "una", "y", "meno", "hora", "horas", "minuto", "minutos", "segundo", "segundos"]): systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+111+i))) - for i, s in enumerate([u"Voltio", u"ampério", u"metros por segundo", u"", u"kilómetro por hora", u"metros", u"grados", u"por ciento", u"miliamperios", u"miliamperios por hora", u"vatio", u"db", u"pés", u"nós", u"horas", u"minutos", u"segundos", u"RPM", u"g"]): + for i, s in enumerate([u"Voltio", u"ampério", u"metros por segundo", u"", u"kilómetro por hora", u"metros", u"grados", u"por ciento", u"miliamperios", u"miliamperios por hora", u"vatio", u"db", u"pés", u"nós", u"horas", u"minutos", u"segundos", u"RPM", u"g", u"mililitro", u"onzas"]): systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+122+i))) for s, f, a in [(u"me tienes abandonada", "inactiv", 486), (u"batería del transmisor baja", "lowbatt", 485), @@ -541,7 +543,7 @@ def ttsDe(): systemSounds.append(("tausend", filename(PROMPT_SYSTEM_BASE+101))) for i, s in enumerate(["comma", "und", "minus", "uhr", "minute", "minuten", "sekunde", "sekunden"]): systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+102+i))) - for i, s in enumerate(["Volt", "Ampere", "Meter pro sekunde", "", "kilometer pro stunde", "Meter", "Grad", "Prozent", "Milliampere", "Milliampere pro stunde", "Watt", "db", "Fuesse", "Knoten", "Uhr", "Minuten", "Secunden", "R P M", "g"]): + for i, s in enumerate(["Volt", "Ampere", "Meter pro sekunde", "", "kilometer pro stunde", "Meter", "Grad", "Prozent", "Milliampere", "Milliampere pro stunde", "Watt", "db", "Fuesse", "Knoten", "Uhr", "Minuten", "Secunden", "R P M", "g", "Milliliter", "Unze"]): systemSounds.append((s, filename(PROMPT_SYSTEM_BASE+110+i))) for s, f, a in [(u"Sender ist inaktiv,bitte Ueberpruefen Sie", "inactiv", 486), (u"Senderakku niedrig", "lowbatt", 485),