diff --git a/CREDITS.txt b/CREDITS.txt index c9f3d46c8..4d36d8d36 100644 --- a/CREDITS.txt +++ b/CREDITS.txt @@ -19,3 +19,4 @@ Grootwitbaas - 9xforums.com (mac) Adrian Amberg (splash screens) Wallaguest1 - 9xforums.com (splash screens) HC1969 - 9xforums.com (splash screens) + diff --git a/DONATIONS.txt b/DONATIONS.txt index 8436823af..ad2efa2db 100644 --- a/DONATIONS.txt +++ b/DONATIONS.txt @@ -96,7 +96,6 @@ Michael Collins Michael Manning Craig Lorentz Jonathan Modellismo - jonathan.it -Aviomotive - www.aviomotive.com André Lasseret Felipe Alexandre de Oliveira Brian Harris @@ -312,3 +311,10 @@ Dietmar Drees Bradley Murchie Richard Fahie James Kaufman +Henry Deucker +Christian Fuchs +Arold Reinders +Robert Miller +Aviomotive - www.aviomotive.com +Mark Gaskievicz +Roland Müller diff --git a/companion/src/CMakeLists.txt b/companion/src/CMakeLists.txt index 0f7ca9cd5..3a8dd26b7 100644 --- a/companion/src/CMakeLists.txt +++ b/companion/src/CMakeLists.txt @@ -156,6 +156,8 @@ SET( companion_SRCS mountlist.cpp avroutputdialog.cpp preferencesdialog.cpp + apppreferencesdialog.cpp + fwpreferencesdialog.cpp burnconfigdialog.cpp comparedialog.cpp contributorsdialog.cpp @@ -177,6 +179,8 @@ SET( companion_SRCS SET( companion_MOC_HDRS avroutputdialog.h preferencesdialog.h + apppreferencesdialog.h + fwpreferencesdialog.h burnconfigdialog.h comparedialog.h printdialog.h @@ -211,6 +215,8 @@ SET( companion_UIS fusesdialog.ui logsdialog.ui preferencesdialog.ui + apppreferencesdialog.ui + fwpreferencesdialog.ui simulatordialog.ui xsimulatordialog.ui burnconfigdialog.ui diff --git a/companion/src/apppreferencesdialog.cpp b/companion/src/apppreferencesdialog.cpp new file mode 100644 index 000000000..4b425a61b --- /dev/null +++ b/companion/src/apppreferencesdialog.cpp @@ -0,0 +1,224 @@ +#include "apppreferencesdialog.h" +#include "ui_apppreferencesdialog.h" +#include "mainwindow.h" +#include "helpers.h" +#ifdef JOYSTICKS +#include "joystick.h" +#include "joystickdialog.h" +#endif +#include +#include + +appPreferencesDialog::appPreferencesDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::appPreferencesDialog) +{ + ui->setupUi(this); + setWindowIcon(CompanionIcon("preferences.png")); + initSettings(); + connect(this, SIGNAL(accepted()), this, SLOT(writeValues())); +#ifndef JOYSTICKS + ui->joystickCB->hide(); + ui->joystickCB->setDisabled(true); + ui->joystickcalButton->hide(); + ui->joystickChkB->hide(); + ui->label_11->hide(); +#endif + resize(0,0); +} + +appPreferencesDialog::~appPreferencesDialog() +{ + delete ui; +} + +void appPreferencesDialog::writeValues() +{ + QSettings settings; + settings.setValue("startup_check_companion", ui->startupCheck_companion9x->isChecked()); + settings.setValue("startup_check_fw", ui->startupCheck_fw->isChecked()); + settings.setValue("wizardEnable", ui->wizardEnable_ChkB->isChecked()); + settings.setValue("show_splash", ui->showSplash->isChecked()); + settings.setValue("simuSW", ui->simuSW->isChecked()); + settings.setValue("history_size", ui->historySize->value()); + settings.setValue("backLight", ui->backLightColor->currentIndex()); + settings.setValue("libraryPath", ui->libraryPath->text()); + settings.setValue("gePath", ui->ge_lineedit->text()); + settings.setValue("embedded_splashes", ui->splashincludeCB->currentIndex()); + settings.setValue("backupEnable", ui->backupEnable->isChecked()); + + if (ui->joystickChkB ->isChecked() && ui->joystickCB->isEnabled()) { + settings.setValue("js_support", ui->joystickChkB ->isChecked()); + settings.setValue("js_ctrl", ui->joystickCB ->currentIndex()); + } + else { + settings.remove("js_support"); + settings.remove("js_ctrl"); + } + + MainWindow * mw = (MainWindow *)this->parent(); + mw->unloadProfile(); +} + +void appPreferencesDialog::on_snapshotPathButton_clicked() +{ + QSettings settings; + QString fileName = QFileDialog::getExistingDirectory(this,tr("Select your snapshot folder"), settings.value("snapshotPath").toString()); + if (!fileName.isEmpty()) { + settings.setValue("snapshotpath", fileName); + settings.setValue("snapshot_to_clipboard", false); + ui->snapshotPath->setText(fileName); + } +} + +void appPreferencesDialog::initSettings() +{ + QSettings settings; + ui->snapshotClipboardCKB->setChecked(settings.value("snapshot_to_clipboard", false).toBool()); + + QString Path=settings.value("snapshotPath", "").toString(); + if (QDir(Path).exists()) { + ui->snapshotPath->setText(Path); + ui->snapshotPath->setReadOnly(true); + } + if (ui->snapshotClipboardCKB->isChecked()) { + ui->snapshotPath->setDisabled(true); + ui->snapshotPathButton->setDisabled(true); + } + ui->startupCheck_companion9x->setChecked(settings.value("startup_check_companion", true).toBool()); + ui->startupCheck_fw->setChecked(settings.value("startup_check_fw", true).toBool()); + ui->wizardEnable_ChkB->setChecked(settings.value("wizardEnable", true).toBool()); + ui->showSplash->setChecked(settings.value("show_splash", true).toBool()); + ui->historySize->setValue(settings.value("history_size", 10).toInt()); + ui->backLightColor->setCurrentIndex(settings.value("backLight", 0).toInt()); + ui->simuSW->setChecked(settings.value("simuSW", false).toBool()); + + Path=settings.value("libraryPath", "").toString(); + if (QDir(Path).exists()) { + ui->libraryPath->setText(Path); + } + Path=settings.value("gePath", "").toString(); + if (QFile(Path).exists()) { + ui->ge_lineedit->setText(Path); + } + Path=settings.value("backupPath", "").toString(); + if (!Path.isEmpty()) { + if (QDir(Path).exists()) { + ui->backupPath->setText(Path); + ui->backupEnable->setEnabled(true); + ui->backupEnable->setChecked(settings.value("backupEnable", true).toBool()); + } else { + ui->backupEnable->setDisabled(true); + } + } else { + ui->backupEnable->setDisabled(true); + } + ui->splashincludeCB->setCurrentIndex(settings.value("embedded_splashes", 0).toInt()); + +#ifdef JOYSTICKS + ui->joystickChkB->setChecked(settings.value("js_support", false).toBool()); + if (ui->joystickChkB->isChecked()) { + QStringList joystickNames; + joystickNames << tr("No joysticks found"); + joystick = new Joystick(0,false,0,0); + ui->joystickcalButton->setDisabled(true); + ui->joystickCB->setDisabled(true); + + if ( joystick ) { + if ( joystick->joystickNames.count() > 0 ) { + joystickNames = joystick->joystickNames; + ui->joystickCB->setEnabled(true); + ui->joystickcalButton->setEnabled(true); + } + joystick->close(); + } + ui->joystickCB->clear(); + ui->joystickCB->insertItems(0, joystickNames); + ui->joystickCB->setCurrentIndex(settings.value("js_ctrl", 0).toInt()); + } + else { + ui->joystickCB->clear(); + ui->joystickCB->setDisabled(true); + ui->joystickcalButton->setDisabled(true); + } +#endif +} + +void appPreferencesDialog::on_libraryPathButton_clicked() +{ + QSettings settings; + QString fileName = QFileDialog::getExistingDirectory(this,tr("Select your library folder"), settings.value("libraryPath").toString()); + if (!fileName.isEmpty()) { + settings.setValue("libraryPath", fileName); + ui->libraryPath->setText(fileName); + } +} + +void appPreferencesDialog::on_snapshotClipboardCKB_clicked() +{ + QSettings settings; + if (ui->snapshotClipboardCKB->isChecked()) { + ui->snapshotPath->setDisabled(true); + ui->snapshotPathButton->setDisabled(true); + settings.setValue("snapshot_to_clipboard", true); + } else { + ui->snapshotPath->setEnabled(true); + ui->snapshotPath->setReadOnly(true); + ui->snapshotPathButton->setEnabled(true); + settings.setValue("snapshot_to_clipboard", false); + } +} + +void appPreferencesDialog::on_backupPathButton_clicked() +{ + QSettings settings; + QString fileName = QFileDialog::getExistingDirectory(this,tr("Select your Models and Settings backup folder"), settings.value("backupPath").toString()); + if (!fileName.isEmpty()) { + settings.setValue("backupPath", fileName); + ui->backupPath->setText(fileName); + } + ui->backupEnable->setEnabled(true); +} + +void appPreferencesDialog::on_ge_pathButton_clicked() +{ + QSettings settings; + QString fileName = QFileDialog::getOpenFileName(this, tr("Select Google Earth executable"),ui->ge_lineedit->text()); + if (!fileName.isEmpty()) { + ui->ge_lineedit->setText(fileName); + } +} + +#ifdef JOYSTICKS +void appPreferencesDialog::on_joystickChkB_clicked() { + if (ui->joystickChkB->isChecked()) { + QStringList joystickNames; + joystickNames << tr("No joysticks found"); + joystick = new Joystick(0,false,0,0); + ui->joystickcalButton->setDisabled(true); + ui->joystickCB->setDisabled(true); + + if ( joystick ) { + if ( joystick->joystickNames.count() > 0 ) { + joystickNames = joystick->joystickNames; + ui->joystickCB->setEnabled(true); + ui->joystickcalButton->setEnabled(true); + } + joystick->close(); + } + ui->joystickCB->clear(); + ui->joystickCB->insertItems(0, joystickNames); + } + else { + ui->joystickCB->clear(); + ui->joystickCB->setDisabled(true); + ui->joystickcalButton->setDisabled(true); + } +} + +void appPreferencesDialog::on_joystickcalButton_clicked() { + joystickDialog * jd=new joystickDialog(this, ui->joystickCB->currentIndex()); + jd->exec(); +} +#endif + diff --git a/companion/src/apppreferencesdialog.h b/companion/src/apppreferencesdialog.h new file mode 100644 index 000000000..d47682512 --- /dev/null +++ b/companion/src/apppreferencesdialog.h @@ -0,0 +1,40 @@ +#ifndef APPPREFERENCESDIALOG_H +#define APPPREFERENCESDIALOG_H + +#include +#include +#include "eeprominterface.h" + +namespace Ui { + class appPreferencesDialog; +} + +class Joystick; + +class appPreferencesDialog : public QDialog +{ + Q_OBJECT + +public: + explicit appPreferencesDialog(QWidget *parent = 0); + ~appPreferencesDialog(); + Joystick *joystick; + +private: + Ui::appPreferencesDialog *ui; + void initSettings(); + +private slots: + void writeValues(); + void on_libraryPathButton_clicked(); + void on_snapshotPathButton_clicked(); + void on_snapshotClipboardCKB_clicked(); + void on_backupPathButton_clicked(); + void on_ge_pathButton_clicked(); +#ifdef JOYSTICKS + void on_joystickChkB_clicked(); + void on_joystickcalButton_clicked(); +#endif +}; + +#endif // APPPREFERENCESDIALOG_H diff --git a/companion/src/apppreferencesdialog.ui b/companion/src/apppreferencesdialog.ui new file mode 100644 index 000000000..bc1f734f3 --- /dev/null +++ b/companion/src/apppreferencesdialog.ui @@ -0,0 +1,505 @@ + + + appPreferencesDialog + + + + 0 + 0 + 685 + 456 + + + + + 0 + 0 + + + + + 685 + 0 + + + + Application Preferences + + + + 2 + + + 6 + + + + + Open Folder + + + + + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + + + + + + 0 + 0 + + + + Joystick + + + + + + + Simulator capture folder + + + + + + + Remember simulator switch values + + + + + + + + 0 + 0 + + + + User Splash Screens + + + + + + + + 0 + 0 + + + + Files to keep + + + + + + + Offer to use wizard for new models + + + true + + + + + + + Qt::Horizontal + + + + + + + + 100 + 16777215 + + + + + Blue + + + + + Green + + + + + Red + + + + + Orange + + + + + Yellow + + + + + + + + Automatic check for Companion updates + + + true + + + + + + + Qt::Horizontal + + + + + + + true + + + true + + + + + + + Only capture to clipboard + + + + + + + + 40 + 0 + + + + + 50 + 16777215 + + + + 15 + + + 10 + + + + + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + + + + + + 250 + 0 + + + + true + + + + + + + Calibrate + + + + + + + Automatic Backup Folder + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + Open Folder + + + false + + + + + + + true + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + Simulator BackLight + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + Enable automatic backup before writing firmware + + + + + + + Show splash screen when Companion starts + + + true + + + + + + + Find Executable + + + + + + + Open Folder + + + + + + + Enable + + + + + + + Google Earth Executable + + + + + + + Automatic check for OpenTX firmware updates + + + true + + + + + + + + 0 + 0 + + + + + Include companion splashes + + + + + Only user defined splashes + + + + + + + + + 0 + 0 + + + + Splash Screen Library + + + + + + + true + + + true + + + + + startupCheck_companion9x + backupEnable + line + backupPath + line_2 + startupCheck_fw + wizardEnable_ChkB + ge_label + label_5 + showSplash + line_3 + ge_pathButton + line_4 + backupPathButton + label_3 + backLightColor + snapshotPath + snapshotPathButton + snapshotClipboardCKB + label_11 + joystickCB + joystickcalButton + ge_lineedit + simuSW + buttonBox + line_5 + joystickChkB + label_17 + label_19 + historySize + label_9 + libraryPath + libraryPathButton + line_6 + splashincludeCB + label_10 + + + buttonBox + ge_lineedit + ge_pathButton + historySize + showSplash + startupCheck_fw + startupCheck_companion9x + wizardEnable_ChkB + backupPath + backupPathButton + backupEnable + snapshotPath + snapshotPathButton + snapshotClipboardCKB + simuSW + backLightColor + joystickCB + joystickChkB + joystickcalButton + + + + + + + buttonBox + accepted() + appPreferencesDialog + accept() + + + 376 + 596 + + + 157 + 274 + + + + + buttonBox + rejected() + appPreferencesDialog + reject() + + + 396 + 596 + + + 286 + 274 + + + + + diff --git a/companion/src/companion.qrc b/companion/src/companion.qrc index acb1591a1..cdc68d4e0 100644 --- a/companion/src/companion.qrc +++ b/companion/src/companion.qrc @@ -325,7 +325,8 @@ themes/monochrome/16/print.png themes/monochrome/16/compare.png themes/monochrome/16/saveas.png - themes/monochrome/16/preferences.png + themes/monochrome/16/apppreferences.png + themes/monochrome/16/fwpreferences.png themes/monochrome/16/movedown.png themes/monochrome/16/currentmodel.png themes/monochrome/16/read_flash.png @@ -367,7 +368,8 @@ themes/monochrome/24/print.png themes/monochrome/24/compare.png themes/monochrome/24/saveas.png - themes/monochrome/24/preferences.png + themes/monochrome/24/apppreferences.png + themes/monochrome/24/fwpreferences.png themes/monochrome/24/movedown.png themes/monochrome/24/currentmodel.png themes/monochrome/24/read_flash.png @@ -409,7 +411,8 @@ themes/monochrome/32/print.png themes/monochrome/32/compare.png themes/monochrome/32/saveas.png - themes/monochrome/32/preferences.png + themes/monochrome/32/apppreferences.png + themes/monochrome/32/fwpreferences.png themes/monochrome/32/movedown.png themes/monochrome/32/currentmodel.png themes/monochrome/32/read_flash.png @@ -451,7 +454,8 @@ themes/monochrome/48/print.png themes/monochrome/48/compare.png themes/monochrome/48/saveas.png - themes/monochrome/48/preferences.png + themes/monochrome/48/apppreferences.png + themes/monochrome/48/fwpreferences.png themes/monochrome/48/movedown.png themes/monochrome/48/currentmodel.png themes/monochrome/48/read_flash.png @@ -493,7 +497,8 @@ themes/classic/16/print.png themes/classic/16/compare.png themes/classic/16/saveas.png - themes/classic/16/preferences.png + themes/classic/16/apppreferences.png + themes/classic/16/fwpreferences.png themes/classic/16/movedown.png themes/classic/16/currentmodel.png themes/classic/16/read_flash.png @@ -535,7 +540,8 @@ themes/classic/24/print.png themes/classic/24/compare.png themes/classic/24/saveas.png - themes/classic/24/preferences.png + themes/classic/24/apppreferences.png + themes/classic/24/fwpreferences.png themes/classic/24/movedown.png themes/classic/24/currentmodel.png themes/classic/24/read_flash.png @@ -577,7 +583,8 @@ themes/classic/32/print.png themes/classic/32/compare.png themes/classic/32/saveas.png - themes/classic/32/preferences.png + themes/classic/32/apppreferences.png + themes/classic/32/fwpreferences.png themes/classic/32/movedown.png themes/classic/32/currentmodel.png themes/classic/32/read_flash.png @@ -619,7 +626,8 @@ themes/classic/48/print.png themes/classic/48/compare.png themes/classic/48/saveas.png - themes/classic/48/preferences.png + themes/classic/48/apppreferences.png + themes/classic/48/fwpreferences.png themes/classic/48/movedown.png themes/classic/48/currentmodel.png themes/classic/48/read_flash.png @@ -661,7 +669,8 @@ themes/monoblue/16/print.png themes/monoblue/16/compare.png themes/monoblue/16/saveas.png - themes/monoblue/16/preferences.png + themes/monoblue/16/apppreferences.png + themes/monoblue/16/fwpreferences.png themes/monoblue/16/movedown.png themes/monoblue/16/currentmodel.png themes/monoblue/16/read_flash.png @@ -703,7 +712,8 @@ themes/monoblue/24/print.png themes/monoblue/24/compare.png themes/monoblue/24/saveas.png - themes/monoblue/24/preferences.png + themes/monoblue/24/apppreferences.png + themes/monoblue/24/fwpreferences.png themes/monoblue/24/movedown.png themes/monoblue/24/currentmodel.png themes/monoblue/24/read_flash.png @@ -745,7 +755,8 @@ themes/monoblue/32/print.png themes/monoblue/32/compare.png themes/monoblue/32/saveas.png - themes/monoblue/32/preferences.png + themes/monoblue/32/apppreferences.png + themes/monoblue/32/fwpreferences.png themes/monoblue/32/movedown.png themes/monoblue/32/currentmodel.png themes/monoblue/32/read_flash.png @@ -787,7 +798,8 @@ themes/monoblue/48/print.png themes/monoblue/48/compare.png themes/monoblue/48/saveas.png - themes/monoblue/48/preferences.png + themes/monoblue/48/apppreferences.png + themes/monoblue/48/fwpreferences.png themes/monoblue/48/movedown.png themes/monoblue/48/currentmodel.png themes/monoblue/48/read_flash.png @@ -829,7 +841,8 @@ themes/monowhite/16/print.png themes/monowhite/16/compare.png themes/monowhite/16/saveas.png - themes/monowhite/16/preferences.png + themes/monowhite/16/apppreferences.png + themes/monowhite/16/fwpreferences.png themes/monowhite/16/movedown.png themes/monowhite/16/currentmodel.png themes/monowhite/16/read_flash.png @@ -871,7 +884,8 @@ themes/monowhite/24/print.png themes/monowhite/24/compare.png themes/monowhite/24/saveas.png - themes/monowhite/24/preferences.png + themes/monowhite/24/apppreferences.png + themes/monowhite/24/fwpreferences.png themes/monowhite/24/movedown.png themes/monowhite/24/currentmodel.png themes/monowhite/24/read_flash.png @@ -913,7 +927,8 @@ themes/monowhite/32/print.png themes/monowhite/32/compare.png themes/monowhite/32/saveas.png - themes/monowhite/32/preferences.png + themes/monowhite/32/apppreferences.png + themes/monowhite/32/fwpreferences.png themes/monowhite/32/movedown.png themes/monowhite/32/currentmodel.png themes/monowhite/32/read_flash.png @@ -955,7 +970,8 @@ themes/monowhite/48/print.png themes/monowhite/48/compare.png themes/monowhite/48/saveas.png - themes/monowhite/48/preferences.png + themes/monowhite/48/apppreferences.png + themes/monowhite/48/fwpreferences.png themes/monowhite/48/movedown.png themes/monowhite/48/currentmodel.png themes/monowhite/48/read_flash.png diff --git a/companion/src/comparedialog.cpp b/companion/src/comparedialog.cpp index 6b1609c0e..1309857c4 100644 --- a/companion/src/comparedialog.cpp +++ b/companion/src/comparedialog.cpp @@ -83,7 +83,6 @@ void compareDialog::printDiff() printCurves(); printGvars(); printSwitches(); - printSafetySwitches(); printFSwitches(); printFrSky(); te->scrollToAnchor("1"); @@ -1040,9 +1039,9 @@ void compareDialog::printSwitches() QString str = ""; str.append(""); str.append(""); str.append(""); str.append(doTC(g_model->funcSw[i].swtch.toString(),"green")); - str.append(doTC(getFuncName(g_model->funcSw[i].func),"green")); - str.append(doTC(FuncParam(g_model->funcSw[i].func,g_model->funcSw[i].param,g_model->funcSw[i].paramarm, g_model->funcSw[i].adjustMode),"green")); + str.append(doTC(g_model->funcSw[i].funcToString(),"green")); + str.append(doTC(g_model->funcSw[i].paramToString(),"green")); int index=g_model->funcSw[i].func; if (index==FuncPlaySound || index==FuncPlayHaptic || index==FuncPlayValue || index==FuncPlayPrompt || index==FuncPlayBoth || index==FuncBackgroundMusic) { str.append(doTC(QString("%1").arg(g_model->funcSw[i].repeatParam),"green")); diff --git a/companion/src/simulatordialog.cpp b/companion/src/simulatordialog.cpp index 1bbddf4ef..8a26c0ecb 100644 --- a/companion/src/simulatordialog.cpp +++ b/companion/src/simulatordialog.cpp @@ -356,7 +356,7 @@ void simulatorDialog::loadParams(RadioData &radioData, const int model_idx) beepVal = 0; beepShow = 0; - switches=txInterface->getCapability(CustomSwitches); + switches=txInterface->getCapability(LogicalSwitches); if ( switches < 13) { ui->cswitch_13->hide(); ui->labelCSW_13->hide(); @@ -497,6 +497,8 @@ void simulatorDialog::setValues() { TxOutputs outputs; simulator->getValues(outputs); + Trims trims; + simulator->getTrims(trims); ui->chnout_1->setValue(chVal(outputs.chans[0])); ui->chnout_2->setValue(chVal(outputs.chans[1])); @@ -536,11 +538,11 @@ void simulatorDialog::setValues() ui->chnoutV_16->setText(QString("%1").arg((qreal)outputs.chans[15]*100/1024, 0, 'f', 1)); } - ui->leftXPerc->setText(QString("X %1%").arg((qreal)nodeLeft->getX()*100, 2, 'f', 0)); - ui->leftYPerc->setText(QString("Y %1%").arg((qreal)nodeLeft->getY()*-100, 2, 'f', 0)); + ui->leftXPerc->setText(QString("X %1%").arg((qreal)nodeLeft->getX()*100+trims.values[0]/5, 2, 'f', 0)); + ui->leftYPerc->setText(QString("Y %1%").arg((qreal)nodeLeft->getY()*-100+trims.values[1]/5, 2, 'f', 0)); - ui->rightXPerc->setText(QString("X %1%").arg((qreal)nodeRight->getX()*100, 2, 'f', 0)); - ui->rightYPerc->setText(QString("Y %1%").arg((qreal)nodeRight->getY()*-100, 2, 'f', 0)); + ui->rightXPerc->setText(QString("X %1%").arg((qreal)nodeRight->getX()*100+trims.values[2]/5, 2, 'f', 0)); + ui->rightYPerc->setText(QString("Y %1%").arg((qreal)nodeRight->getY()*-100+trims.values[3]/5, 2, 'f', 0)); #define CSWITCH_ON "QLabel { background-color: #4CC417 }" #define CSWITCH_OFF "QLabel { }" diff --git a/companion/src/themes/classic/16/add.png b/companion/src/themes/classic/16/add.png index 7976174fd..6cb5042f2 100644 Binary files a/companion/src/themes/classic/16/add.png and b/companion/src/themes/classic/16/add.png differ diff --git a/companion/src/themes/classic/16/preferences.png b/companion/src/themes/classic/16/apppreferences.png similarity index 100% rename from companion/src/themes/classic/16/preferences.png rename to companion/src/themes/classic/16/apppreferences.png diff --git a/companion/src/themes/classic/16/clear.png b/companion/src/themes/classic/16/clear.png index 12c465218..8c7ca75c5 100644 Binary files a/companion/src/themes/classic/16/clear.png and b/companion/src/themes/classic/16/clear.png differ diff --git a/companion/src/themes/classic/16/contributors.png b/companion/src/themes/classic/16/contributors.png index 439d2bcb8..d9091a350 100644 Binary files a/companion/src/themes/classic/16/contributors.png and b/companion/src/themes/classic/16/contributors.png differ diff --git a/companion/src/themes/classic/16/copy.png b/companion/src/themes/classic/16/copy.png index 0d016ee10..f34860433 100644 Binary files a/companion/src/themes/classic/16/copy.png and b/companion/src/themes/classic/16/copy.png differ diff --git a/companion/src/themes/classic/16/currentmodel.png b/companion/src/themes/classic/16/currentmodel.png index 691f8f92d..6ea21cb4c 100644 Binary files a/companion/src/themes/classic/16/currentmodel.png and b/companion/src/themes/classic/16/currentmodel.png differ diff --git a/companion/src/themes/classic/16/cut.png b/companion/src/themes/classic/16/cut.png index 600e320c6..2701f6896 100644 Binary files a/companion/src/themes/classic/16/cut.png and b/companion/src/themes/classic/16/cut.png differ diff --git a/companion/src/themes/classic/16/exit.png b/companion/src/themes/classic/16/exit.png index c188d80d8..47f127f76 100644 Binary files a/companion/src/themes/classic/16/exit.png and b/companion/src/themes/classic/16/exit.png differ diff --git a/companion/src/themes/classic/16/fwpreferences.png b/companion/src/themes/classic/16/fwpreferences.png new file mode 100644 index 000000000..e7a8ea790 Binary files /dev/null and b/companion/src/themes/classic/16/fwpreferences.png differ diff --git a/companion/src/themes/classic/16/information.png b/companion/src/themes/classic/16/information.png index aca1565dd..1a3cfc535 100644 Binary files a/companion/src/themes/classic/16/information.png and b/companion/src/themes/classic/16/information.png differ diff --git a/companion/src/themes/classic/16/library.png b/companion/src/themes/classic/16/library.png index 2a4df7457..2d8fd6f59 100644 Binary files a/companion/src/themes/classic/16/library.png and b/companion/src/themes/classic/16/library.png differ diff --git a/companion/src/themes/classic/16/movedown.png b/companion/src/themes/classic/16/movedown.png index f609f5581..0c1e7b2bb 100644 Binary files a/companion/src/themes/classic/16/movedown.png and b/companion/src/themes/classic/16/movedown.png differ diff --git a/companion/src/themes/classic/16/moveup.png b/companion/src/themes/classic/16/moveup.png index f44bf8b64..322ed7606 100644 Binary files a/companion/src/themes/classic/16/moveup.png and b/companion/src/themes/classic/16/moveup.png differ diff --git a/companion/src/themes/classic/16/new.png b/companion/src/themes/classic/16/new.png index b40281b64..bf1195557 100644 Binary files a/companion/src/themes/classic/16/new.png and b/companion/src/themes/classic/16/new.png differ diff --git a/companion/src/themes/classic/16/paste.png b/companion/src/themes/classic/16/paste.png index 7f1b0a7a8..91bf4afd6 100644 Binary files a/companion/src/themes/classic/16/paste.png and b/companion/src/themes/classic/16/paste.png differ diff --git a/companion/src/themes/classic/16/play.png b/companion/src/themes/classic/16/play.png index d4720f2d8..fdefe966b 100644 Binary files a/companion/src/themes/classic/16/play.png and b/companion/src/themes/classic/16/play.png differ diff --git a/companion/src/themes/classic/16/print.png b/companion/src/themes/classic/16/print.png index 9f1d39eee..7041c1d4b 100644 Binary files a/companion/src/themes/classic/16/print.png and b/companion/src/themes/classic/16/print.png differ diff --git a/companion/src/themes/classic/16/stop.png b/companion/src/themes/classic/16/stop.png index f2bb8792b..5c1c8a7df 100644 Binary files a/companion/src/themes/classic/16/stop.png and b/companion/src/themes/classic/16/stop.png differ diff --git a/companion/src/themes/classic/16/wizard.png b/companion/src/themes/classic/16/wizard.png index 6bb4d070b..9608315b6 100644 Binary files a/companion/src/themes/classic/16/wizard.png and b/companion/src/themes/classic/16/wizard.png differ diff --git a/companion/src/themes/classic/24/add.png b/companion/src/themes/classic/24/add.png index 073c0b2f1..39c3bb546 100644 Binary files a/companion/src/themes/classic/24/add.png and b/companion/src/themes/classic/24/add.png differ diff --git a/companion/src/themes/classic/24/preferences.png b/companion/src/themes/classic/24/apppreferences.png similarity index 100% rename from companion/src/themes/classic/24/preferences.png rename to companion/src/themes/classic/24/apppreferences.png diff --git a/companion/src/themes/classic/24/clear.png b/companion/src/themes/classic/24/clear.png index 5a2f16f23..8414751d5 100644 Binary files a/companion/src/themes/classic/24/clear.png and b/companion/src/themes/classic/24/clear.png differ diff --git a/companion/src/themes/classic/24/contributors.png b/companion/src/themes/classic/24/contributors.png index c35d8737e..0ba8ecfa5 100644 Binary files a/companion/src/themes/classic/24/contributors.png and b/companion/src/themes/classic/24/contributors.png differ diff --git a/companion/src/themes/classic/24/copy.png b/companion/src/themes/classic/24/copy.png index 714a0d590..3f2072268 100644 Binary files a/companion/src/themes/classic/24/copy.png and b/companion/src/themes/classic/24/copy.png differ diff --git a/companion/src/themes/classic/24/currentmodel.png b/companion/src/themes/classic/24/currentmodel.png index 192a227fe..91658fa44 100644 Binary files a/companion/src/themes/classic/24/currentmodel.png and b/companion/src/themes/classic/24/currentmodel.png differ diff --git a/companion/src/themes/classic/24/cut.png b/companion/src/themes/classic/24/cut.png index 33b947198..29ca2122f 100644 Binary files a/companion/src/themes/classic/24/cut.png and b/companion/src/themes/classic/24/cut.png differ diff --git a/companion/src/themes/classic/24/exit.png b/companion/src/themes/classic/24/exit.png index ba91c7bfc..3884d2a7d 100644 Binary files a/companion/src/themes/classic/24/exit.png and b/companion/src/themes/classic/24/exit.png differ diff --git a/companion/src/themes/classic/24/fwpreferences.png b/companion/src/themes/classic/24/fwpreferences.png new file mode 100644 index 000000000..e62900a4a Binary files /dev/null and b/companion/src/themes/classic/24/fwpreferences.png differ diff --git a/companion/src/themes/classic/24/information.png b/companion/src/themes/classic/24/information.png index ccf17132b..f94c8d7c1 100644 Binary files a/companion/src/themes/classic/24/information.png and b/companion/src/themes/classic/24/information.png differ diff --git a/companion/src/themes/classic/24/library.png b/companion/src/themes/classic/24/library.png index 97e9bf596..cbd6c1461 100644 Binary files a/companion/src/themes/classic/24/library.png and b/companion/src/themes/classic/24/library.png differ diff --git a/companion/src/themes/classic/24/movedown.png b/companion/src/themes/classic/24/movedown.png index 47f210256..1b2395232 100644 Binary files a/companion/src/themes/classic/24/movedown.png and b/companion/src/themes/classic/24/movedown.png differ diff --git a/companion/src/themes/classic/24/moveup.png b/companion/src/themes/classic/24/moveup.png index 1bf02bdff..6eb96ec1b 100644 Binary files a/companion/src/themes/classic/24/moveup.png and b/companion/src/themes/classic/24/moveup.png differ diff --git a/companion/src/themes/classic/24/new.png b/companion/src/themes/classic/24/new.png index 0181a1ca2..192f3a238 100644 Binary files a/companion/src/themes/classic/24/new.png and b/companion/src/themes/classic/24/new.png differ diff --git a/companion/src/themes/classic/24/paste.png b/companion/src/themes/classic/24/paste.png index 2a762fbfb..c726c08d4 100644 Binary files a/companion/src/themes/classic/24/paste.png and b/companion/src/themes/classic/24/paste.png differ diff --git a/companion/src/themes/classic/24/play.png b/companion/src/themes/classic/24/play.png index 7e1b547d9..3ec82b975 100644 Binary files a/companion/src/themes/classic/24/play.png and b/companion/src/themes/classic/24/play.png differ diff --git a/companion/src/themes/classic/24/print.png b/companion/src/themes/classic/24/print.png index edb7bcfb1..d7e15e59c 100644 Binary files a/companion/src/themes/classic/24/print.png and b/companion/src/themes/classic/24/print.png differ diff --git a/companion/src/themes/classic/24/stop.png b/companion/src/themes/classic/24/stop.png index 00f4ab1c1..9c1258365 100644 Binary files a/companion/src/themes/classic/24/stop.png and b/companion/src/themes/classic/24/stop.png differ diff --git a/companion/src/themes/classic/24/wizard.png b/companion/src/themes/classic/24/wizard.png index 63879342f..cab6ae467 100644 Binary files a/companion/src/themes/classic/24/wizard.png and b/companion/src/themes/classic/24/wizard.png differ diff --git a/companion/src/themes/classic/32/add.png b/companion/src/themes/classic/32/add.png index 9b1e2ebf3..e83f4c1a0 100644 Binary files a/companion/src/themes/classic/32/add.png and b/companion/src/themes/classic/32/add.png differ diff --git a/companion/src/themes/classic/32/preferences.png b/companion/src/themes/classic/32/apppreferences.png similarity index 100% rename from companion/src/themes/classic/32/preferences.png rename to companion/src/themes/classic/32/apppreferences.png diff --git a/companion/src/themes/classic/32/clear.png b/companion/src/themes/classic/32/clear.png index e1d481f35..9f63a08c2 100644 Binary files a/companion/src/themes/classic/32/clear.png and b/companion/src/themes/classic/32/clear.png differ diff --git a/companion/src/themes/classic/32/contributors.png b/companion/src/themes/classic/32/contributors.png index d90cc70de..5793b3e21 100644 Binary files a/companion/src/themes/classic/32/contributors.png and b/companion/src/themes/classic/32/contributors.png differ diff --git a/companion/src/themes/classic/32/copy.png b/companion/src/themes/classic/32/copy.png index a24bb4b1d..4f4ca1f70 100644 Binary files a/companion/src/themes/classic/32/copy.png and b/companion/src/themes/classic/32/copy.png differ diff --git a/companion/src/themes/classic/32/currentmodel.png b/companion/src/themes/classic/32/currentmodel.png index 6fde618ef..c52a1595f 100644 Binary files a/companion/src/themes/classic/32/currentmodel.png and b/companion/src/themes/classic/32/currentmodel.png differ diff --git a/companion/src/themes/classic/32/cut.png b/companion/src/themes/classic/32/cut.png index d68161089..89ce23045 100644 Binary files a/companion/src/themes/classic/32/cut.png and b/companion/src/themes/classic/32/cut.png differ diff --git a/companion/src/themes/classic/32/exit.png b/companion/src/themes/classic/32/exit.png index 7eb24a666..bc9e301bd 100644 Binary files a/companion/src/themes/classic/32/exit.png and b/companion/src/themes/classic/32/exit.png differ diff --git a/companion/src/themes/classic/32/fwpreferences.png b/companion/src/themes/classic/32/fwpreferences.png new file mode 100644 index 000000000..42e933b33 Binary files /dev/null and b/companion/src/themes/classic/32/fwpreferences.png differ diff --git a/companion/src/themes/classic/32/information.png b/companion/src/themes/classic/32/information.png index 47fa8f3fe..48bf9f6f3 100644 Binary files a/companion/src/themes/classic/32/information.png and b/companion/src/themes/classic/32/information.png differ diff --git a/companion/src/themes/classic/32/library.png b/companion/src/themes/classic/32/library.png index 763983830..ea07f460e 100644 Binary files a/companion/src/themes/classic/32/library.png and b/companion/src/themes/classic/32/library.png differ diff --git a/companion/src/themes/classic/32/movedown.png b/companion/src/themes/classic/32/movedown.png index 8d2671cc1..03df82943 100644 Binary files a/companion/src/themes/classic/32/movedown.png and b/companion/src/themes/classic/32/movedown.png differ diff --git a/companion/src/themes/classic/32/moveup.png b/companion/src/themes/classic/32/moveup.png index 7d52059e2..7bc850ea0 100644 Binary files a/companion/src/themes/classic/32/moveup.png and b/companion/src/themes/classic/32/moveup.png differ diff --git a/companion/src/themes/classic/32/new.png b/companion/src/themes/classic/32/new.png index 3c79b7994..b8b01bdee 100644 Binary files a/companion/src/themes/classic/32/new.png and b/companion/src/themes/classic/32/new.png differ diff --git a/companion/src/themes/classic/32/paste.png b/companion/src/themes/classic/32/paste.png index 17c82102a..d5c13a9b6 100644 Binary files a/companion/src/themes/classic/32/paste.png and b/companion/src/themes/classic/32/paste.png differ diff --git a/companion/src/themes/classic/32/play.png b/companion/src/themes/classic/32/play.png index d47a3040e..fc0f9506f 100644 Binary files a/companion/src/themes/classic/32/play.png and b/companion/src/themes/classic/32/play.png differ diff --git a/companion/src/themes/classic/32/print.png b/companion/src/themes/classic/32/print.png index 6c27107b5..ad2b82844 100644 Binary files a/companion/src/themes/classic/32/print.png and b/companion/src/themes/classic/32/print.png differ diff --git a/companion/src/themes/classic/32/stop.png b/companion/src/themes/classic/32/stop.png index a0338d139..c055e548c 100644 Binary files a/companion/src/themes/classic/32/stop.png and b/companion/src/themes/classic/32/stop.png differ diff --git a/companion/src/themes/classic/32/wizard.png b/companion/src/themes/classic/32/wizard.png index ff5161498..4ec873ee9 100644 Binary files a/companion/src/themes/classic/32/wizard.png and b/companion/src/themes/classic/32/wizard.png differ diff --git a/companion/src/themes/classic/48/add.png b/companion/src/themes/classic/48/add.png index fe8a28097..31e4124cd 100644 Binary files a/companion/src/themes/classic/48/add.png and b/companion/src/themes/classic/48/add.png differ diff --git a/companion/src/themes/classic/48/preferences.png b/companion/src/themes/classic/48/apppreferences.png similarity index 100% rename from companion/src/themes/classic/48/preferences.png rename to companion/src/themes/classic/48/apppreferences.png diff --git a/companion/src/themes/classic/48/clear.png b/companion/src/themes/classic/48/clear.png index 4cc914074..6c10e1150 100644 Binary files a/companion/src/themes/classic/48/clear.png and b/companion/src/themes/classic/48/clear.png differ diff --git a/companion/src/themes/classic/48/contributors.png b/companion/src/themes/classic/48/contributors.png index 98bc58202..be8840906 100644 Binary files a/companion/src/themes/classic/48/contributors.png and b/companion/src/themes/classic/48/contributors.png differ diff --git a/companion/src/themes/classic/48/copy.png b/companion/src/themes/classic/48/copy.png index 9bc5c654c..91f0647e7 100644 Binary files a/companion/src/themes/classic/48/copy.png and b/companion/src/themes/classic/48/copy.png differ diff --git a/companion/src/themes/classic/48/currentmodel.png b/companion/src/themes/classic/48/currentmodel.png index 860941f75..12d23c31a 100644 Binary files a/companion/src/themes/classic/48/currentmodel.png and b/companion/src/themes/classic/48/currentmodel.png differ diff --git a/companion/src/themes/classic/48/cut.png b/companion/src/themes/classic/48/cut.png index 45d111adf..e8c987802 100644 Binary files a/companion/src/themes/classic/48/cut.png and b/companion/src/themes/classic/48/cut.png differ diff --git a/companion/src/themes/classic/48/exit.png b/companion/src/themes/classic/48/exit.png index 159dccb93..cd779a402 100644 Binary files a/companion/src/themes/classic/48/exit.png and b/companion/src/themes/classic/48/exit.png differ diff --git a/companion/src/themes/classic/48/fwpreferences.png b/companion/src/themes/classic/48/fwpreferences.png new file mode 100644 index 000000000..4198f7553 Binary files /dev/null and b/companion/src/themes/classic/48/fwpreferences.png differ diff --git a/companion/src/themes/classic/48/information.png b/companion/src/themes/classic/48/information.png index e62f8ee19..d7cb2c224 100644 Binary files a/companion/src/themes/classic/48/information.png and b/companion/src/themes/classic/48/information.png differ diff --git a/companion/src/themes/classic/48/library.png b/companion/src/themes/classic/48/library.png index df4cf1e0c..59122cf0e 100644 Binary files a/companion/src/themes/classic/48/library.png and b/companion/src/themes/classic/48/library.png differ diff --git a/companion/src/themes/classic/48/movedown.png b/companion/src/themes/classic/48/movedown.png index 7f6cb094d..be856ff29 100644 Binary files a/companion/src/themes/classic/48/movedown.png and b/companion/src/themes/classic/48/movedown.png differ diff --git a/companion/src/themes/classic/48/moveup.png b/companion/src/themes/classic/48/moveup.png index 62f818d20..c2668e845 100644 Binary files a/companion/src/themes/classic/48/moveup.png and b/companion/src/themes/classic/48/moveup.png differ diff --git a/companion/src/themes/classic/48/new.png b/companion/src/themes/classic/48/new.png index 35ba8e361..3315820ae 100644 Binary files a/companion/src/themes/classic/48/new.png and b/companion/src/themes/classic/48/new.png differ diff --git a/companion/src/themes/classic/48/paste.png b/companion/src/themes/classic/48/paste.png index bbc349158..b475c74fe 100644 Binary files a/companion/src/themes/classic/48/paste.png and b/companion/src/themes/classic/48/paste.png differ diff --git a/companion/src/themes/classic/48/play.png b/companion/src/themes/classic/48/play.png index 740f36842..0cdda36c6 100644 Binary files a/companion/src/themes/classic/48/play.png and b/companion/src/themes/classic/48/play.png differ diff --git a/companion/src/themes/classic/48/print.png b/companion/src/themes/classic/48/print.png index 5bafa08d8..5586786e2 100644 Binary files a/companion/src/themes/classic/48/print.png and b/companion/src/themes/classic/48/print.png differ diff --git a/companion/src/themes/classic/48/stop.png b/companion/src/themes/classic/48/stop.png index c513babaa..34bde6e33 100644 Binary files a/companion/src/themes/classic/48/stop.png and b/companion/src/themes/classic/48/stop.png differ diff --git a/companion/src/themes/classic/48/wizard.png b/companion/src/themes/classic/48/wizard.png index 3fbd7d780..058dbb536 100644 Binary files a/companion/src/themes/classic/48/wizard.png and b/companion/src/themes/classic/48/wizard.png differ diff --git a/companion/src/themes/monoblue/16/preferences.png b/companion/src/themes/monoblue/16/apppreferences.png similarity index 100% rename from companion/src/themes/monoblue/16/preferences.png rename to companion/src/themes/monoblue/16/apppreferences.png diff --git a/companion/src/themes/monoblue/16/fwpreferences.png b/companion/src/themes/monoblue/16/fwpreferences.png new file mode 100644 index 000000000..8a1f61836 Binary files /dev/null and b/companion/src/themes/monoblue/16/fwpreferences.png differ diff --git a/companion/src/themes/monoblue/24/preferences.png b/companion/src/themes/monoblue/24/apppreferences.png similarity index 100% rename from companion/src/themes/monoblue/24/preferences.png rename to companion/src/themes/monoblue/24/apppreferences.png diff --git a/companion/src/themes/monoblue/24/fwpreferences.png b/companion/src/themes/monoblue/24/fwpreferences.png new file mode 100644 index 000000000..bf73ffb32 Binary files /dev/null and b/companion/src/themes/monoblue/24/fwpreferences.png differ diff --git a/companion/src/themes/monoblue/32/preferences.png b/companion/src/themes/monoblue/32/apppreferences.png similarity index 100% rename from companion/src/themes/monoblue/32/preferences.png rename to companion/src/themes/monoblue/32/apppreferences.png diff --git a/companion/src/themes/monoblue/32/fwpreferences.png b/companion/src/themes/monoblue/32/fwpreferences.png new file mode 100644 index 000000000..f86c56917 Binary files /dev/null and b/companion/src/themes/monoblue/32/fwpreferences.png differ diff --git a/companion/src/themes/monoblue/48/preferences.png b/companion/src/themes/monoblue/48/apppreferences.png similarity index 100% rename from companion/src/themes/monoblue/48/preferences.png rename to companion/src/themes/monoblue/48/apppreferences.png diff --git a/companion/src/themes/monoblue/48/fwpreferences.png b/companion/src/themes/monoblue/48/fwpreferences.png new file mode 100644 index 000000000..09505a474 Binary files /dev/null and b/companion/src/themes/monoblue/48/fwpreferences.png differ diff --git a/companion/src/themes/monochrome/16/preferences.png b/companion/src/themes/monochrome/16/apppreferences.png similarity index 100% rename from companion/src/themes/monochrome/16/preferences.png rename to companion/src/themes/monochrome/16/apppreferences.png diff --git a/companion/src/themes/monochrome/16/fwpreferences.png b/companion/src/themes/monochrome/16/fwpreferences.png new file mode 100644 index 000000000..63fb581eb Binary files /dev/null and b/companion/src/themes/monochrome/16/fwpreferences.png differ diff --git a/companion/src/themes/monochrome/24/preferences.png b/companion/src/themes/monochrome/24/apppreferences.png similarity index 100% rename from companion/src/themes/monochrome/24/preferences.png rename to companion/src/themes/monochrome/24/apppreferences.png diff --git a/companion/src/themes/monochrome/24/fwpreferences.png b/companion/src/themes/monochrome/24/fwpreferences.png new file mode 100644 index 000000000..1f4d9bf05 Binary files /dev/null and b/companion/src/themes/monochrome/24/fwpreferences.png differ diff --git a/companion/src/themes/monochrome/32/preferences.png b/companion/src/themes/monochrome/32/apppreferences.png similarity index 100% rename from companion/src/themes/monochrome/32/preferences.png rename to companion/src/themes/monochrome/32/apppreferences.png diff --git a/companion/src/themes/monochrome/32/fwpreferences.png b/companion/src/themes/monochrome/32/fwpreferences.png new file mode 100644 index 000000000..ad10a252c Binary files /dev/null and b/companion/src/themes/monochrome/32/fwpreferences.png differ diff --git a/companion/src/themes/monochrome/48/preferences.png b/companion/src/themes/monochrome/48/apppreferences.png similarity index 100% rename from companion/src/themes/monochrome/48/preferences.png rename to companion/src/themes/monochrome/48/apppreferences.png diff --git a/companion/src/themes/monochrome/48/fwpreferences.png b/companion/src/themes/monochrome/48/fwpreferences.png new file mode 100644 index 000000000..55e6e6a75 Binary files /dev/null and b/companion/src/themes/monochrome/48/fwpreferences.png differ diff --git a/companion/src/themes/monowhite/16/preferences.png b/companion/src/themes/monowhite/16/apppreferences.png similarity index 100% rename from companion/src/themes/monowhite/16/preferences.png rename to companion/src/themes/monowhite/16/apppreferences.png diff --git a/companion/src/themes/monowhite/16/fwpreferences.png b/companion/src/themes/monowhite/16/fwpreferences.png new file mode 100644 index 000000000..b8e5ad449 Binary files /dev/null and b/companion/src/themes/monowhite/16/fwpreferences.png differ diff --git a/companion/src/themes/monowhite/24/preferences.png b/companion/src/themes/monowhite/24/apppreferences.png similarity index 100% rename from companion/src/themes/monowhite/24/preferences.png rename to companion/src/themes/monowhite/24/apppreferences.png diff --git a/companion/src/themes/monowhite/24/fwpreferences.png b/companion/src/themes/monowhite/24/fwpreferences.png new file mode 100644 index 000000000..5a337c654 Binary files /dev/null and b/companion/src/themes/monowhite/24/fwpreferences.png differ diff --git a/companion/src/themes/monowhite/32/preferences.png b/companion/src/themes/monowhite/32/apppreferences.png similarity index 100% rename from companion/src/themes/monowhite/32/preferences.png rename to companion/src/themes/monowhite/32/apppreferences.png diff --git a/companion/src/themes/monowhite/32/fwpreferences.png b/companion/src/themes/monowhite/32/fwpreferences.png new file mode 100644 index 000000000..0982e5c48 Binary files /dev/null and b/companion/src/themes/monowhite/32/fwpreferences.png differ diff --git a/companion/src/themes/monowhite/48/preferences.png b/companion/src/themes/monowhite/48/apppreferences.png similarity index 100% rename from companion/src/themes/monowhite/48/preferences.png rename to companion/src/themes/monowhite/48/apppreferences.png diff --git a/companion/src/themes/monowhite/48/fwpreferences.png b/companion/src/themes/monowhite/48/fwpreferences.png new file mode 100644 index 000000000..cf61a3ade Binary files /dev/null and b/companion/src/themes/monowhite/48/fwpreferences.png differ diff --git a/companion/src/translations/companion_cs.ts b/companion/src/translations/companion_cs.ts index da792cef7..80ee3e522 100644 --- a/companion/src/translations/companion_cs.ts +++ b/companion/src/translations/companion_cs.ts @@ -668,32 +668,32 @@ p, li { white-space: pre-wrap; } - + Rud Směrovka - + Ele Výškovka - + Thr - + Ail Křidélka - + Rotary Encoder %1 - + GVAR%1 @@ -701,17 +701,17 @@ p, li { white-space: pre-wrap; } FlightModes - + Flight Mode %1 - + (%1) - + (default) @@ -2018,29 +2018,29 @@ Opravdu to takto chcete ? companion9x - EEPROM Editor - firmware %1 - - - - + + + + File loaded Soubor byl načten - + Display previous warning again at startup ? Chcete zobrazit předchozí upozornění i příště ? - + Checking for updates Kontroluji aktualizace - - - - - + + + + + Unable to check for updates. Nelze ověřit aktualizace. @@ -2049,21 +2049,21 @@ Opravdu to takto chcete ? Je dostupná nová verze companion9x (verze %1)<br>Chcete ji stáhnout nyní? - - - + + + Save As Uložit jako - + Executable (*.exe) Spustitelný (*.exe) - + New release available Je dostupné nové vydání @@ -2072,39 +2072,39 @@ Opravdu to takto chcete ? Je dostupné nové vydání companion9x, prosím zkontrolujte repozitář - - + + No updates available at this time. žádné aktualizace nejsou nyní dostupné. - + Would you like to launch the installer? Chcete spustit instalátor? - - - - - - - - - - - - - + + + + + + + + + + + + + Error Chyba - - - - - + + + + + Error opening file %1: %2. Chyba při otevírání souboru %1: @@ -2115,7 +2115,7 @@ Opravdu to takto chcete ? S těmito volbami se Firmware nevejde do paměti FLASH rádia. Je třeba některé funkce vypnout. Vhodné je zejména vypnout podporu loga zaškrtnutím "nosplash", to ušetří značné místo - + Compilation server termporary failure, try later Server companion je dočasně nedostupný, zkuste to později @@ -2124,7 +2124,7 @@ Opravdu to takto chcete ? companion9x - EEPROM Editor - firmware %1 - profil %2 - + Display previous message again at startup ? Chcete zobrazit předchozí zprávu i příště ? @@ -2133,13 +2133,13 @@ Opravdu to takto chcete ? Firmware s těmito vybranými součástmi, se již nevejde do paměti FLASH rádia - + Compilation server temporary failure, try later Dočasná chyba kompilačního serveru, zkuste to prosím později znovu. - - + + Compilation server too busy, try later Server companion je zaneprázdněn, zkuste to později @@ -2148,8 +2148,8 @@ Opravdu to takto chcete ? Kompilační server vyžaduje registraci. Více najdete na webu opentx. - - + + Unknown server failure, try later Neznámá chyba serveru, zkuste to později @@ -2158,7 +2158,7 @@ Opravdu to takto chcete ? Chcete nyní zapsat firmware do rádia ? - + Firmware %1 does not seem to have ever been downloaded. Version %2 is available. Do you want to download it now ? @@ -2167,31 +2167,31 @@ Verze %2 je dostupná. Chcete ho nyní stáhnout ? - - + + Yes Ano - - + + No Ne - - + + Release Notes Poznámky k vydání - - + + Do you want to download release %1 now ? Chcete nyní stáhnout vydání %1 ? - + A new version of %1 firmware is available (current %2 - newer %3). Do you want to download it now ? Nová verze firmware %1 je dostupná. @@ -2199,57 +2199,57 @@ Do you want to download it now ? Chcete ji stáhnout nyní ? - + Ignore this version (r%1)? Ignorovat tuto verzi (r%1)? - + Release notes contain very important informations. Do you want to see them now ? Poznámky k vydání mohou obsahovat důležité informace. Chcete si je přečíst nyní ? - + Open Otevřít - - + + File saved Soubor byl uložen - + Firmware updates Aktualizace firmwaru - + Current firmware does not provide release notes informations. K tomuto firmwaru nejsou poznámky k vydání. - + Cannot write file %1: %2. Nelze zapsat soubor %1: %2. - - - - - + + + + + Taranis radio not found Radio Taranis nenalezeno - - - - + + + + Impossible to identify the radio on your system, please verify the eeprom disk is connected. Nebylo možné identifikovat rádio ve vašem systému, zkontrolujte zda je eeprom disk připojen. @@ -2270,16 +2270,16 @@ nebyl rozpoznán jako platná EEPROM Chcete ji přesto naprogramovat? - - - + + + Backup is impossible Není možné zálohovat - - - + + + The backup dir set in preferences does not exist Složka pro zálohování zvolená v předvolbách neexistuje @@ -2292,8 +2292,8 @@ Chcete ji přesto naprogramovat? Nelze ověřit kompatibilitu EEprom! Mám přesto pokračovat? - - + + Warning Varování @@ -2314,7 +2314,7 @@ Chcete ji přesto naprogramovat? Zapsat do paměti FLASH rádia - + Conversion failed Porovnání selhalo @@ -2327,7 +2327,7 @@ Chcete ji přesto naprogramovat? Zapsat EEPROM do rádia - + Restore failed Zápis selhal @@ -2344,7 +2344,7 @@ Chcete ji přesto naprogramovat? Nemohu naprogramovat rádio, původní EEPROM najdete zde: %1 - + Backup failed Zálohování selhalo @@ -2369,61 +2369,85 @@ Chcete ji přesto naprogramovat? companion9x - Editor nastavení rádia a modelů - %1 - + Do you want to write the firmware to the transmitter now ? Chcete zapsat firmware do rádia nyní ? - - - - + + + + Read Models and Settings From Tx Načíst modely a nastavení z rádia - + Firmware does not longer fit in the Tx, due to selected firmware options Firmware s těmito vybranými součástmi, se již nevejde do rádia - - - + + + + Companion - Models and Settings Editor - %1 - profile %2 - - - - + + + + + Companion - Models and Settings Editor - %1 - + A new version of Companion is available (version %1)<br>Would you like to download it? - - + + Compilation server requires registration, please check OpenTX web site - + Firmware does not fit in the Tx, due to selected firmware options Firmware s těmito vybranými součástmi, se již nevejde do rádia - + + The selected language will be used the next time you start Companion. + + + + + + + OK + + + + + The new theme will be loaded the next time you start Companion. + + + + + The icon size will be used the next time you start Companion. + + + + Write Models and settings from %1 to the Tx? Zapsat modely a nastavení z %1 do rádia? - + The file %1 has not been recognized as a valid Models and Settings file Write anyway ? @@ -2432,91 +2456,126 @@ neobsahuje platná data modelů a nastavení Chcete ho přesto zapsat ? - - - - - - + + + + + + Backup Models and Settings From Tx Zálohovat modely a nastavení z rádia - + Cannot check Models and Settings compatibility! Continue anyway? Nelze ověřit kompatibilitu dat modelů a nastavení! Chcete přesto pokračovat? - + The transmitter firmware belongs to another product family, check file and preferences! Firmware patří do jiné produktové rodiny, zkontrolujte nastavení předvoleb! - + The transmitter firmware is outdated, please upgrade! Firmware rádia je zastaralý, aktualizujte ho prosím! - + Write Models and Settings To Tx Zapsat modely a nastavení do rádia - - + + Write Firmware To Tx Zapsat firmware do rádia - + Cannot convert Models and Settings for use with this firmware, original data will be used Nemohu konvertovat modely a nastavení pro použití s tímto firmwarem, budou použita původní data - + Restore Models and Settings To Tx Obnovit modely a nastavení do rádia - + Could not restore Models and Settings to TX. The models and settings data file can be found at: %1 Nelze obnovit modely a nastavení do rádia. Soubor s modely a nastavením najdete v: %1 - + Firmware write failed Zápis firmware selhal - + Could not write firmware to to transmitter. The models and settings data file can be found at: %1 Nelze zapsat firmware do rádio. Data modelů a nastavení najdete v: %1 - + Cannot backup existing Models and Settings from TX. Firmware write process aborted Nemohu zálohovat stávající modely a nastavení z rádia. Zápis firmware byl přerušen - + Save transmitter Models and Settings to File Uložit modely a nastavení do souboru - + Impossible to identify the radio on your system, please verify that the eeprom disk is connected. Nebylo možné identifikovat rádio ve vašem systému, zkontrolujte zda je eeprom disk připojen. - + Read Tx Firmware to File Načíst firmware z rádia a uložit do souboru - + Copyright + + + &Old Preferences Dialog... + + + + + Used the old Preferences Dialog + + + + + &Application Preferences... + + + + + Edit application preferences + + + + + &Download Firmware and Voice... + + + + + Download firmware and voice files + + + + + Configure transmitter start screen... + + Version %1 (revision %2), %3 Verze %1 (revize %2), %3 @@ -2538,88 +2597,86 @@ Chcete ho přesto zapsat ? O aplikaci Companion9x - - + + &%1 %2 - + &New &Nový - + Create a new file Vytvořit nový soubor - + &Open... &Otevřít... - + Open an existing file Otevřít existující soubor - + &loadBackup... &Načíst zálohu... - + Load backup from file Načíst zálohu ze souboru - + &Save &Uložit - + Save the document to disk Uložit dokument na disk - + Save &As... Uložit j&ako... - + Save the document under a new name Uložit dokument s novým jménem - + Lo&gs Lo&gy - + Ctrl+G - + Open log file Otevřít soubor s logy - &Preferences... - &Předvolby... + &Předvolby... - Edit general preferences - Nastavení obecných předvoleb + Nastavení obecných předvoleb - + &Check for updates... &Zkontrolovat aktualizace... @@ -2628,7 +2685,7 @@ Chcete ho přesto zapsat ? Zkontolovat dostupnost nové verze companion9x/er9x - + Contributors &List... &Seznam přispěvatelů... @@ -2637,7 +2694,7 @@ Chcete ho přesto zapsat ? Zobrazit seznam přispěvatelů companion9x - + ChangeLog... Změny... @@ -2646,203 +2703,397 @@ Chcete ho přesto zapsat ? Zobrazit změny ve verzích companion9x - + A new release of Companion is available please check the OpenTX website! - + OpenTX Home Page: <a href='%1'>%1</a> - + The OpenTX Companion project was originally forked from <a href='%2'>eePe</a> - + If you've found this program useful, please support by <a href='%1'>donating</a> - + Version %1, %3 - + About Companion - + Check for new version of Companion - + Show Companion contributors list - + Show Companion changelog - + Firmware ChangeLog... Změny firmware... - + Show firmware changelog Zobrazit změny ve firmware - + Compare... Porovnat... - + Compare models Porovnat modely - Customize your &TX... - &Přizpůsobení loga... + &Přizpůsobení loga... - + Customize the splash screen of your TX Přizpůsobení úvodního logo vašeho rádia - + E&xit U&končit - + Exit the application Ukončit aplikaci companion9x - + Cu&t &Vyjmout - + Cut the current selection's contents to the clipboard Vyjmout aktuální výběr a uložit do schránky - + &Copy &Kopírovat - + Copy the current selection's contents to the clipboard Kopírovat aktuální výběr do schránky - + &Paste &Vložit - + Paste the clipboard's contents into the current selection Vložit obsah schránky na aktuální pozici - + &Write Models and Settings To Tx &Zapsat modely a nastavení do rádia - + Write Models and Settings to transmitter Zapsat modely a nastavení do rádia - + &Read Models and Settings From Tx &Načíst modely a nastavení z rádia - + Read Models and Settings from transmitter Načíst modely a nastavení z rádia - + Write Firmware Zapsat firmware - + Write firmware to transmitter Zapsat firmware do rádia - + Write Models and Settings from file to Tx Zapsat modely a nastavení ze souboru do rádia - + Write Models and Settings from file to transmitter Zapsat modely a nastavení ze souboru do rádia - + Save transmitter Models and Settings to file Uložit modely a nastavení z rádia do souboru - + Save the Models and Settings from the transmitter to a file Uložit modely a nastavení z rádia do souboru - + Read Firmware Načíst firmware - + Read firmware from transmitter Načíst firmware z rádia - + + &Configure connection software... + + + + Configure software for reading from and writing to the transmitter Nastavení softwaru pro čtení a zápis do rádia - + + Classic + + + + + The multicolor classical Companion icon theme + + + + + A monochrome black icon theme + + + + + A monochrome white icon theme + + + + + A monochrome blue icon theme + + + + + Small + + + + + Use small toolbar icons + + + + + Use normal size toolbar icons + + + + + Normal + Normální + + + + Use big toolbar icons + + + + + Big + + + + + Use huge toolbar icons + + + + + Huge + + + + + System default language + + + + + Use system default language in menus + + + + + Czech + + + + + Use Czech in menus + + + + + German + + + + + Use German in menus + + + + + English + + + + + Use English in menus + + + + + French + + + + + Use French in menus + + + + + Italian + + + + + Use Italian in menus + + + + + Hebrew + + + + + Use Hebrew in menus + + + + + Polish + + + + + Use Polish in menus + + + + + Portuguese + + + + + Use Portuguese in menus + + + + + Swedish + + + + + Use Swedish in menus + + + + + Russian + + + + + Use Russian in menus + + + + + Set Icon Theme + + + + + Set Icon Size + + + + + &Settings + + + + &Read/Write Čtení/&Zápis - + Write Zápis - - + + Invalid Models and Settings File %1 Neplatný soubor modelů a nastavení %1 - + Invalid binary Models and Settings File %1 Neplatný binární soubor modelů a nastavení %1 @@ -2851,7 +3102,7 @@ Chcete ho přesto zapsat ? &Zapsat do EEPROM rádia - + Ctrl+Alt+W @@ -2864,7 +3115,7 @@ Chcete ho přesto zapsat ? &Načíst EEPROM z rádia - + Ctrl+Alt+R @@ -2905,61 +3156,60 @@ Chcete ho přesto zapsat ? Načíst paměť FLASH z rádia - &Configure... - &Konfigurace... + &Konfigurace... Configure burning software Konfigurace programátoru - + &List programmers &Seznam programátorů - + List available programmers Seznam použitelných programátorů - + &Fuses... Pojistky &mikrokontroléru... - + Show fuses dialog Zobrazit dialog nastavení pojistek mikrokontroléru - + &Simulate &Simulátor - + Alt+S - + Simulate selected model. Simulovat vybraný model. - + &Print &Tisk - + Ctrl+P - + Print current model. Vytisknout aktuální model. @@ -3012,12 +3262,12 @@ Chcete ho přesto zapsat ? Aktivovat předchozí okno - + &About &O aplikaci - + Show the application's About box O aplikaci companion9x @@ -3030,24 +3280,29 @@ Chcete ho přesto zapsat ? Přepnout styl rozložení panelu vlevo/vpravo - - + + Recent Files Nedávné soubory - - + + Firmware Profiles Profily firmwaru - + + Set Menu Language + + + + &File &Soubor - + &Edit &Úpravy @@ -3060,17 +3315,17 @@ Chcete ho přesto zapsat ? &Okno - + &Help &Nápověda - + File Soubor - + Edit Úpravy @@ -3079,17 +3334,17 @@ Chcete ho přesto zapsat ? Programátor - + Help Nápověda - + Ready Připraven - + Unable to find file %1! Nemohu nalézt soubor %1! @@ -3098,7 +3353,7 @@ Chcete ho přesto zapsat ? Neplatný soubor EEPROM %1 - + Error reading file %1: %2. Chyba při otevírání souboru %1: @@ -6289,7 +6544,7 @@ Funkce trimu bude opačná, stejně tak i varování polohy páky plynu. - + ON ZAPNUTO @@ -6299,7 +6554,7 @@ Funkce trimu bude opačná, stejně tak i varování polohy páky plynu. - + OFF VYPNUTO @@ -6329,12 +6584,12 @@ Funkce trimu bude opačná, stejně tak i varování polohy páky plynu. - + th9x - + er9x @@ -6854,7 +7109,7 @@ Nastavení hodnoty se provádí přímo v seznamu proměnných, nebo pomocí Fun Funkce pro heli, nastavení typu mechaniky - + ersky9x @@ -7189,123 +7444,123 @@ Nastavení hodnoty se provádí přímo v seznamu proměnných, nebo pomocí Fun Letový režim %1 - + Yellow Žlutá - + Orange Oranžová - + Red Červená - + Winged Shadow How High - + Winged Shadow How High (not supported) Winged Shadow How High (nepodporován) - + FrSky Sensor Hub FrSky Senzor Hub - - + + None Žádný - + Imperial Imperiální - + Metric Metrické - + Extra Fine Extra jemný - + Fine Jemný - + Medium Střední - + Coarse Hrubý - + Exponential Exponenciální - + Count Up Přičítat - + Count Down Odečítat - + %1:%2, - + : %1 Channels, %2usec Delay : %1 Kanálů, %2us pauza - + Flight modes(%1) - + Flight mode(%1) - + Rudder Směrovka - + Elevator Výškovka - + Throttle Plyn - + Aileron Křidélka @@ -7316,7 +7571,7 @@ Nastavení hodnoty se provádí přímo v seznamu proměnných, nebo pomocí Fun - + --- @@ -7479,45 +7734,43 @@ Nastavení hodnoty se provádí přímo v seznamu proměnných, nebo pomocí Fun Dif - Own trim - Vlastní trim + Vlastní trim - Flight mode %1 trim Flight phase %1 trim - Trim režimu LR%1 + Trim režimu LR%1 - + Own value Vlastní hodnota - + Flight mode %1 value Flight phase %1 value Hodnota režimu LR%1 - + Keys Klávesy - + Sticks Páky - + Keys + Sticks Klávesy i páky - - + + -GV%1 -GP%1 @@ -7527,8 +7780,8 @@ Nastavení hodnoty se provádí přímo v seznamu proměnných, nebo pomocí Fun - - + + GV%1 GP%1 @@ -7575,25 +7828,25 @@ Nastavení hodnoty se provádí přímo v seznamu proměnných, nebo pomocí Fun Open9x nepodporuje tuto funkci na desce 9X/9XR - + openTx only accepts %1 points in all curves openTx oumožňuje pouze %1 bodů ve všech křivkách dohromady - - - + + + OpenTX on this board doesn't accept this function OpenTX nepodporuje tuto funkci na této zákl. desce - - + + OpenTX doesn't accept this protocol OpenTX nepodporuje tento protokol - + OpenTX doesn't allow this number of channels V OpenTX nelze použít tento počet kanálů @@ -7713,6 +7966,26 @@ We are really appreciative for that! The OpenTX/Companion Team. + + + Trim disabled + + + + + Own Trim + + + + + Use Trim from Flight mode %1 + + + + + Use Trim from Flight mode %1 + Own Trim as an offset + + Setup @@ -8299,6 +8572,172 @@ Funkce trimu bude opačná, stejně tak i varování polohy páky plynu. + + appPreferencesDialog + + + Application Preferences + + + + + Simulator capture folder + Složka pro snímky obrazovky Simu + + + + Remember simulator switch values + + + + + + + Open Folder + Vybrat složku + + + + User Splash Screens + + + + + Blue + Modrá + + + + Green + Zelená + + + + Red + Červená + + + + Orange + Oranžová + + + + Yellow + Žlutá + + + + Include companion splashes + Zahrnout i výchozí loga + + + + Only user defined splashes + Jen vlastní loga + + + + Splash Screen Library + + + + + Files to keep + + + + + Simulator BackLight + + + + + Automatic Backup Folder + Složka pro automatické zálohy + + + + Only capture to clipboard + + + + + Joystick + + + + + Find Executable + + + + + Google Earth Executable + + + + + Calibrate + Kalibrovat + + + + Enable + + + + + Show splash screen when Companion starts + + + + + Automatic check for OpenTX firmware updates + + + + + Automatic check for Companion updates + + + + + Offer to use wizard for new models + + + + + Enable automatic backup before writing firmware + + + + + Select your snapshot folder + Vyberte složku pro snímky obrazovky simulátoru + + + + + No joysticks found + Joystick nenalezen + + + + Select your library folder + Vyberte složkus s logy + + + + Select your Models and Settings backup folder + Zvolte složku pro automatické zálohy modelů a nastavení + + + + Select Google Earth executable + + + avrOutputDialog @@ -9697,64 +10136,79 @@ na jehož základech companion9x vznikl. customizeSplashDialog - Customize Splash - Přizpůsobení loga + Přizpůsobení loga + + + + Transmitter Splash Screen Editor + + + + + + Invert + Invertovat + + + + + Load FW + + + + + + Load Pict + + + + + + Save + - Save Image - Uložit logo + Uložit logo - Invert Color - Invertovat barvu + Invertovat barvu - - <!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:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - - Load Firmware - Otevřít firmware + Otevřít firmware - Load Image - Otevřít logo + Otevřít logo - + + Open Splash Library Otevřít knihovnu s logy - + + + + ... - Save Firmware Save To Hex - Uložit firmware + Uložit firmware - - - Select an original firmware file - Vyberte soubor s firmwarem + Vyberte soubor s firmwarem - + Open Otevřít @@ -9763,71 +10217,75 @@ p, li { white-space: pre-wrap; } soubory HEX (*.hex);; - Select an image to customize your splash <br />or save actual firmware splash - Vyberte obrázek kterým chcete upravit vaše úvodní logo, <br />nebo vložte aktuální logo do firmwaru + Vyberte obrázek kterým chcete upravit vaše úvodní logo, <br />nebo vložte aktuální logo do firmwaru - - - - + + + + + + Error Chyba - + Could not find bitmap to replace in file Nemohu nalézt pozici loga k nahrazení v souboru. Obsahuje firmware podporu loga? - + Open Image to load Otevřít soubor s logem - + Images (%1) obrázky (%1) - - + + Cannot load %1. Nemohu načíst %1. - - + + + Could not store image in firmware file %1 + + + + + The image file %1 could not be stored + + + Save your custimized firmware - Uložte upravený firmware + Uložte upravený firmware - - Write to file - Uložit do souboru + Uložit do souboru - Error reading file %1 - Chyba při otevírání souboru %1 + Chyba při otevírání souboru %1 - Firmware correctly saved. - Firmware bylo v pořádku uloženo. + Firmware bylo v pořádku uloženo. - Firmware not saved. - Firmware nebylo uloženo. + Firmware nebylo uloženo. - PNG images (*.png);; - obrázky PNG (*.png);; + obrázky PNG (*.png);; @@ -9954,6 +10412,321 @@ p, li { white-space: pre-wrap; } <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Provádějte pouze pokud opravdu víte co děláte.</p></body></html> + + fwPreferencesDialog + + + Download Firmware and Voice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CheckBox + + + + + Set language of voice. +May be different from firmware language + Vyberte jazykovou verzi hlasu tts(voice). +Může být jiná než verze firmwaru + + + + SD Structure path + Cesta k obsahu SD karty + + + + Processor ID + ID procesoru + + + Language + Jazyk + + + + Default Stick Mode + Výchozí mód vysílačky + + + Voice + Hlas tts + + + + Channel Order + + + + + Mode selection: + +Mode 1: + Left stick: Elevator, Rudder + Right stick: Throttle, Aileron + +Mode 2: + Left stick: Throttle, Rudder + Right stick: Elevator, Aileron + +Mode 3: + Left stick: Elevator, Aileron + Right stick: Throttle, Rudder + +Mode 4: + Left stick: Throttle, Aileron + Right stick: Elevator, Rudder + + + Výběr módu: + +Mode 1: + Levá páka : Výškovka, Směrovka + Pravá páka: Plyn, Křidélka + +Mode 2: + Levá páka : Plyn, Směrovka + Pravá páka: Výškovka, Křidélka + +Mode 3: + Levá páka : Výškovka, Křidélka + Pravá páka: Plyn, Směrovka + +Mode 4: + Levá páka : Plyn, Křidélka + Pravá páka: Výškovka, Směrovka + + + + + + Mode 1 (RUD ELE THR AIL) + + + + + Mode 2 (RUD THR ELE AIL) + + + + + Mode 3 (AIL ELE THR RUD) + + + + + Mode 4 (AIL THR ELE RUD) + + + + + Options + + + + + Channel order + +This is used by the templated to determine which channel goes to what number output. + Pořadí kanálů + +Toto je použito šablonami k určení +který kanál patří ke kterému výstupu. + + + + Open Folder + Vybrat složku + + + + Offer to write FW to Tx after download + + + + + Profile Splash Screen + + + + + Profile Name + Název profilu + + + + Import + + + + + Export + + + + + Save Profile + Uložit profil + + + + Menu Language + + + + + Voice Language + Jazyk hlasových zpráv + + + + Profile Number + + + + + Firmware Type + + + + + Append version number to FW file name + + + + + Download Voice + + + + + FwInfo + + + + + Open Image + Načíst obrázek + + + + Clear Image + + + + + Download FW + + + + + Check for updates + Zkontrolovat aktualizace + + + + Last downloaded release: %1 + Naposledy stažené vydání: %1 + + + + The selected firmware has never been downloaded by Companion. + + + + + The selected firmware cannot be downloaded by Companion. + + + + + Select the folder replicating your SD structure + Vyberte složku která představuje obsah SD karty rádia + + + + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? + Název profilu je prázdný, slot %1 bude smazán.<br>Jste si jist ? + + + + Export profile As + Exportovat profil jako + + + + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? + Slot profilu není prázdný, slot %1 bude přepsán.<br>Jste si jist ? + + + + Open Profile to import + Zvolte profil k importu + + + + Open Image to load + + + + + Images (%1) + obrázky (%1) + + + + Error + Chyba + + + + Cannot load %1. + Nemohu načíst %1. + + joystickDialog @@ -10712,93 +11485,103 @@ Tlačítkem Zrušit přerušíte kalibraci preferencesDialog + Preferences Předvolby - + Check for selected Fw updates Aktualizace vybraného firmware - + Ask use of wizard for new models Zeptat se na použití průvodce pro nový model - + + Invert Pixels Invertovat - - + + + + ... - + Remember switches in simulator Pamatovat si přepínače v simulátoru - + + Enable Povolit - + + Calibrate Kalibrovat - - - - + + + + + + Open Folder Vybrat složku - + FwInfo - + Check for updates Zkontrolovat aktualizace - + + Open Image Načíst obrázek - + Language Jazyk - - + + Download Stáhnout - + Set language of voice. May be different from firmware language Vyberte jazykovou verzi hlasu tts(voice). Může být jiná než verze firmwaru - + Voice Hlas tts + @@ -10840,73 +11623,83 @@ Může být jiná než verze firmwaru - CheckBox - + Ask for flashing after Download Po stažení firmwaru se zeptat, zda ho hned zapsat do rádia - + Export Profile Exportovat profil - + Import Profile Importovat profil - + Profile Name Název profilu - + Automatically add version number to the filename after download Přidat číslo verze do názvu souboru staženého firmwaru - + Save Profile Uložit profil - + Show Splash At Start - + + Simu BackLight BackLight Color Barva podsvětlení Simu - + + Remember simulator switches + + + + + Blue Modrá - + + Green Zelená - + + Red Červená - + + Orange Oranžová - + + Yellow Žlutá @@ -10915,22 +11708,22 @@ Může být jiná než verze firmwaru Kontrolovat aktualizace vybraného firmwaru - + Check for updates on startup Aktualizace při spuštění - Language (requires restart) - Jazyk companion (vyžaduje restart) + Jazyk companion (vyžaduje restart) - + + Custom TX splash screen Vlastní úvodní logo - + Channel order This is used by the templated to determine which channel goes to what number output. @@ -10940,17 +11733,17 @@ Toto je použito šablonami k určení který kanál patří ke kterému výstupu. - + Firmware - + Default Stick Mode Výchozí mód vysílačky - + Default Channel Order Výchozí pořadí kanálů @@ -10959,7 +11752,8 @@ který kanál patří ke kterému výstupu. Zobrazit úvodní logo - + + Personal splash library Vlastní knihovna s logy @@ -10968,7 +11762,7 @@ který kanál patří ke kterému výstupu. Pamatovat polohu přepínačů - + Mode selection: Mode 1: @@ -11009,133 +11803,85 @@ Mode 4: - + Mode 1 (RUD ELE THR AIL) Mode 1 (Směr.Výšk.Plyn.Křid) - + Mode 2 (RUD THR ELE AIL) Mode 2 (Směr.Plyn.Výšk.Křid) - + Mode 3 (AIL ELE THR RUD) Mode 3 (Křid.Výšk.Plyn.Směr) - + Mode 4 (AIL THR ELE RUD) Mode 4 (Křid.Plyn.Výšk.Směr) - - Theme - - - - - - Requires restart - - - - - Classic - - - - - Monochrome - - - - - MonoWhite - - - - - MonoBlue - - - - - Icon size - - - - - Small - - - - Normal - Normální + Normální - - Big - - - - - Huge - - - - + + Joystick - + + Include companion splashes Zahrnout i výchozí loga - + + Only user defined splashes Jen vlastní loga - + + Splash library behaviour Chování knihovny s logy - + Automatic Backup Folder Složka pro automatické zálohy - + SD Structure path Cesta k obsahu SD karty - + Processor ID ID procesoru - + Recent History Size Počet položek nedávné historie - + Find Executable - + Google Earth Executable - + Profile slot Slot profilu @@ -11144,7 +11890,7 @@ Mode 4: Složka pro zálohy EEprom - + auto backup before write zálohovat před zápisem @@ -11153,17 +11899,19 @@ Mode 4: Složka zvukových dat - + + Simulator capture folder Složka pro snímky obrazovky Simu - + + Use clipboard only Kopírovat pouze do schránky - + Last downloaded release: %1 Naposledy stažené vydání: %1 @@ -11176,43 +11924,43 @@ Mode 4: Companion9x nemůže stáhnout zvolený firmware. - + The selected firmware has never been downloaded by Companion. - + The selected firmware cannot be downloaded by Companion. - + Image stored in settings Logo nastavené v předvolbách - - + + No joysticks found Joystick nenalezen - + Select your Models and Settings backup folder Zvolte složku pro automatické zálohy modelů a nastavení - + Select Google Earth executable - + Select the folder replicating your SD structure Vyberte složku která představuje obsah SD karty rádia - + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? Název profilu je prázdný, slot %1 bude smazán.<br>Jste si jist ? @@ -11279,7 +12027,7 @@ zatim ve zkušební verzi Podpora DSM2 modulů s použitím PPM místo sériového protokolu - + Select your library folder Support for SD memory card Vyberte složkus s logy @@ -11358,7 +12106,7 @@ nutno zastavět hlasový modul Bez uživatelsky definovatelných křivek - + Select your snapshot folder Vyberte složku pro snímky obrazovky simulátoru @@ -11367,14 +12115,14 @@ nutno zastavět hlasový modul Vyber složku pro zálohování eeprom - - + + Error Chyba - - + + Cannot load %1. Nemohu načíst %1. @@ -11387,27 +12135,27 @@ nutno zastavět hlasový modul Název profilu je prázdný, slot %1 bude odstraněn.<br>Souhlasíte ? - + Export profile As Exportovat profil jako - + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? Slot profilu není prázdný, slot %1 bude přepsán.<br>Jste si jist ? - + Open Profile to import Zvolte profil k importu - + Open Image to load Otevřít soubor - + Images (%1) obrázky (%1) diff --git a/companion/src/translations/companion_de.ts b/companion/src/translations/companion_de.ts index f609f3fc0..71a69049e 100644 --- a/companion/src/translations/companion_de.ts +++ b/companion/src/translations/companion_de.ts @@ -6,7 +6,7 @@ Name - Name + Name @@ -59,12 +59,12 @@ Diff - Diff + Diff Expo - Expo + Expo @@ -74,7 +74,7 @@ Curve - Kurve + Kurve @@ -117,7 +117,7 @@ Curve %1 - Kurve %1 + Kurve %1 @@ -132,7 +132,7 @@ Editing curve %1 - Kurve %1 bearbeiten + Kurve %1 bearbeiten @@ -145,7 +145,7 @@ Switch - Schalter + Schalter @@ -160,7 +160,7 @@ Enable - aktivieren + Aktivieren @@ -170,7 +170,7 @@ Error - Fehler + Fehler @@ -180,17 +180,17 @@ &Delete - &Löschen + &Löschen Delete - Löschen + Löschen &Copy - &Kopieren + &Kopieren @@ -200,7 +200,7 @@ &Cut - &Ausschneiden + &Ausschneiden @@ -259,17 +259,17 @@ &Delete - &Löschen + &Löschen Delete - Löschen + Löschen &Copy - &Kopieren + &Kopieren @@ -279,7 +279,7 @@ &Cut - &Ausschneiden + &Ausschneiden @@ -317,17 +317,17 @@ Both - + Beide x>0 - + x>0 x<0 - + x<0 @@ -565,12 +565,12 @@ Anzahl Sekunden fest, welche der Mischer für einen Durchgang von -100 bis +100 No - Nein + Nein Yes - Ja + Ja @@ -651,60 +651,60 @@ Anzahl Sekunden fest, welche der Mischer für einen Durchgang von -100 bis +100 Name - Name + Name Switch - Schalter + Schalter trim1 - Trimmung1 + Trimmung1 trim2 - Trimmung2 + Trimmung2 trim4 - Trimmung4 + Trimmung4 trim3 - Trimmung3 + Trimmung3 - + Rud Rud - + Ele Ele - + Thr Thr - + Ail Ail - + Rotary Encoder %1 - + GVAR%1 @@ -712,17 +712,17 @@ Anzahl Sekunden fest, welche der Mischer für einen Durchgang von -100 bis +100 FlightModes - + Flight Mode %1 - + (%1) - + (default) @@ -2092,10 +2092,10 @@ Are you sure ? eePe EEPROM Editor - - - - + + + + File loaded Datei geladen @@ -2108,11 +2108,11 @@ Are you sure ? Eine neue Version des ER9X ist vorhanden. Möchtest Du diese herunterladen ? - - - + + + Save As Speichern unter @@ -2121,17 +2121,17 @@ Are you sure ? EEPROM hex Datei (*.hex);;EEPROM bin Datei (*.bin) - - + + No updates available at this time. Kein Update vorhanden. - - - - - + + + + + Unable to check for updates. Kann nicht auf Updates überprüfen. @@ -2144,35 +2144,35 @@ Are you sure ? Eine neue Version von ER9x(%2) ist vorhanden(r%1)<br>Möchtest Du diese herunterladen ? - + Executable (*.exe) Anwendung (*.exe) - + A new release of Companion is available please check the OpenTX website! - + Would you like to launch the installer? Möchtest Du das Installationsprogramm starten ? - - + + Compilation server requires registration, please check OpenTX web site - + A new version of %1 firmware is available (current %2 - newer %3). Do you want to download it now ? Eine neue Version der %1-Firmware ist verfügbar (aktuell %2 - neueste %3).. Möchten Sie sie jetzt herunterladen? - + Open Öffnen @@ -2181,8 +2181,8 @@ Möchten Sie sie jetzt herunterladen? EEPROM Dateien (*.bin *.hex);;BIN Dateien (*.bin);;HEX Dateien (*.hex) - - + + File saved Datei gespeichert @@ -2223,7 +2223,7 @@ Möchten Sie sie jetzt herunterladen? Lese Flash und speichere in Datei - + Copyright Copyright @@ -2241,8 +2241,8 @@ Möchten Sie sie jetzt herunterladen? Über eePe - - + + &%1 %2 &%1 %2 @@ -2251,57 +2251,55 @@ Möchten Sie sie jetzt herunterladen? %1 %2 - + &New &Neu - + Create a new file Neue Datei erstellen - + &Open... Datei ö&ffnen... - + Open an existing file Öffne eine bestehende Datei - + &Save Datei &speichern - + Save the document to disk Speichere das Dokument auf Festplatte - + Save &As... Speichern &unter... - + Save the document under a new name Speichere das Dokument unter einem neuen Namen - &Preferences... - &Einstellungen... + &Einstellungen... - Edit general preferences - Bearbeite generelle Einstellungen + Bearbeite generelle Einstellungen - + &Check for updates... &Überprüfe auf Updates... @@ -2310,7 +2308,7 @@ Möchten Sie sie jetzt herunterladen? Überprüfe auf eine neue Version von eePe/er9x - + Display previous warning again at startup ? @@ -2320,97 +2318,99 @@ Möchten Sie sie jetzt herunterladen? Eine neue Version von companion9x ist verfügbar (version %1)<br>Möchten Sie sie herunterladen? - + New release available - - - - - - - - - - - - - + + + + + + + + + + + + + Error Fehler - - - - - + + + + + Error opening file %1: %2. Fehler beim Öffnen der Datei %1: %2. - + Compilation server termporary failure, try later - + Display previous message again at startup ? - - - + + + + Companion - Models and Settings Editor - %1 - profile %2 - - - - + + + + + Companion - Models and Settings Editor - %1 - + A new version of Companion is available (version %1)<br>Would you like to download it? - + Firmware does not longer fit in the Tx, due to selected firmware options - + Compilation server temporary failure, try later - - + + Compilation server too busy, try later - - + + Unknown server failure, try later - + Firmware does not fit in the Tx, due to selected firmware options - + Firmware %1 does not seem to have ever been downloaded. Version %2 is available. Do you want to download it now ? @@ -2419,68 +2419,125 @@ Version %2 ist verfügbar. Möchten Sie sie jetzt herunterladen? - - + + Yes - Ja - - - - - No - Nein + Ja + No + Nein + + + + Release Notes - - + + Do you want to download release %1 now ? - + Release notes contain very important informations. Do you want to see them now ? - + + The selected language will be used the next time you start Companion. + + + + + + + OK + + + + + The new theme will be loaded the next time you start Companion. + + + + + The icon size will be used the next time you start Companion. + + + + Firmware updates - + Current firmware does not provide release notes informations. - + Cannot write file %1: %2. Kann Datei %1: %2 nicht schreiben. - - - - - + + + + + Taranis radio not found - - - - + + + + Impossible to identify the radio on your system, please verify the eeprom disk is connected. + + + &Old Preferences Dialog... + + + + + Used the old Preferences Dialog + + + + + &Application Preferences... + + + + + Edit application preferences + + + + + &Download Firmware and Voice... + + + + + Download firmware and voice files + + + + + Configure transmitter start screen... + + The file %1 has not been recognized as a valid EEPROM @@ -2490,16 +2547,16 @@ wurde nicht als gültige EEPROM Datei erkannt. Trotzdem brennen? - - - + + + Backup is impossible - - - + + + The backup dir set in preferences does not exist @@ -2508,8 +2565,8 @@ Trotzdem brennen? Sicherung EEPROM von Tx - - + + Warning Warnung @@ -2518,7 +2575,7 @@ Trotzdem brennen? Brenne Flash in den Tx - + Conversion failed Umwandlung gescheitert @@ -2531,7 +2588,7 @@ Trotzdem brennen? EEPROM in Tx zurückspeichern - + Restore failed Zurückspeicherung gescheitert @@ -2548,7 +2605,7 @@ Trotzdem brennen? Flashen des Tx nicht möglich, ursprüngliche EEProm Dateil ist verfügbar unter: %1 - + Backup failed Sicherung fehlgeschlagen @@ -2557,108 +2614,108 @@ Trotzdem brennen? Sicherung des bestehenden EEEPROMs vom Tx gescheitert, Flash Prozess abgebrochen - + Do you want to write the firmware to the transmitter now ? - - - - + + + + Read Models and Settings From Tx - + Write Models and settings from %1 to the Tx? - + The file %1 has not been recognized as a valid Models and Settings file Write anyway ? - - - - - - + + + + + + Backup Models and Settings From Tx - + Cannot check Models and Settings compatibility! Continue anyway? - + The transmitter firmware belongs to another product family, check file and preferences! - + The transmitter firmware is outdated, please upgrade! - + Write Models and Settings To Tx - - + + Write Firmware To Tx - + Cannot convert Models and Settings for use with this firmware, original data will be used - + Restore Models and Settings To Tx - + Could not restore Models and Settings to TX. The models and settings data file can be found at: %1 - + Firmware write failed - + Could not write firmware to to transmitter. The models and settings data file can be found at: %1 - + Cannot backup existing Models and Settings from TX. Firmware write process aborted - + Save transmitter Models and Settings to File - + Impossible to identify the radio on your system, please verify that the eeprom disk is connected. - + Read Tx Firmware to File @@ -2679,27 +2736,27 @@ Write anyway ? Über companion9x - + &loadBackup... - + Load backup from file - + Lo&gs - + Ctrl+G - + Open log file @@ -2708,7 +2765,7 @@ Write anyway ? Überprüfe auf neue Version von companion9x/er9x - + Contributors &List... &Mitwirkende... @@ -2717,193 +2774,387 @@ Write anyway ? Zeige die Liste der Mitwirkenden von 'companion9x' - + ChangeLog... - + OpenTX Home Page: <a href='%1'>%1</a> - + The OpenTX Companion project was originally forked from <a href='%2'>eePe</a> - + If you've found this program useful, please support by <a href='%1'>donating</a> - + Version %1, %3 - + About Companion - + Check for new version of Companion - + Show Companion contributors list - + Show Companion changelog - + Firmware ChangeLog... - + Show firmware changelog - + Compare... - + Compare models - Customize your &TX... - Passe Deinen &TX an... + Passe Deinen &TX an... - + Customize the splash screen of your TX Persönliche Anpassung des Tx Startbildschirmes - + E&xit Be&enden - + Exit the application Beendet die Anwendung - + Cu&t &Ausschneiden - + Cut the current selection's contents to the clipboard Scheidet die momentane Auwahl aus und kopiert den Inhalt in den Zwischenspeicher - + &Copy &Kopieren - + Copy the current selection's contents to the clipboard Kopiert die momentane Auswahl in den Zwischenspeicher - + &Paste &Einfügen - + Paste the clipboard's contents into the current selection Fügt den Inhalt des Zwischenspeichers in die momentane Auswahl ein - + &Write Models and Settings To Tx - + Write Models and Settings to transmitter - + &Read Models and Settings From Tx - + Read Models and Settings from transmitter - + Write Firmware - + Write firmware to transmitter - + Write Models and Settings from file to Tx - + Write Models and Settings from file to transmitter - + Save transmitter Models and Settings to file - + Save the Models and Settings from the transmitter to a file - + Read Firmware - + Read firmware from transmitter - + + &Configure connection software... + + + + Configure software for reading from and writing to the transmitter - - + + Classic + + + + + The multicolor classical Companion icon theme + + + + + A monochrome black icon theme + + + + + A monochrome white icon theme + + + + + A monochrome blue icon theme + + + + + Small + + + + + Use small toolbar icons + + + + + Use normal size toolbar icons + + + + + Normal + Normal + + + + Use big toolbar icons + + + + + Big + + + + + Use huge toolbar icons + + + + + Huge + + + + + System default language + + + + + Use system default language in menus + + + + + Czech + + + + + Use Czech in menus + + + + + German + Deutch + + + + Use German in menus + + + + + English + + + + + Use English in menus + + + + + French + + + + + Use French in menus + + + + + Italian + + + + + Use Italian in menus + + + + + Hebrew + + + + + Use Hebrew in menus + + + + + Polish + + + + + Use Polish in menus + + + + + Portuguese + + + + + Use Portuguese in menus + + + + + Swedish + + + + + Use Swedish in menus + + + + + Russian + + + + + Use Russian in menus + + + + + Set Icon Theme + + + + + Set Icon Size + + + + + &Settings + + + + + Invalid Models and Settings File %1 - + Invalid binary Models and Settings File %1 @@ -2912,7 +3163,7 @@ Write anyway ? &Schreibe EEPROM in den Sender - + Ctrl+Alt+W Ctrl+Alt+W @@ -2925,7 +3176,7 @@ Write anyway ? &Lese EEPROM vom Sender - + Ctrl+Alt+R Ctrl+Alt+R @@ -2966,61 +3217,60 @@ Write anyway ? Lese Flash Speicher und schreibe in den Sender - &Configure... - &Einstellungen... + &Einstellungen... Configure burning software Einstellungen Brennsoftware - + &List programmers &Programmiergeräte - + List available programmers Programmiergeräte - + &Fuses... &Fuses... - + Show fuses dialog Zeige Fuses Einstellungen - + &Simulate &Simulation - + Alt+S Alt+S - + Simulate selected model. Simuliert das ausgewählte Modell. - + &Print &Drucken - + Ctrl+P Ctrl+P - + Print current model. Drucke momentane Modelleinstellungen. @@ -3073,33 +3323,38 @@ Write anyway ? Vorhergehendes Fenster aufrufen - + &About &Über - + Show the application's About box Zeige das Infofenster - - + + Recent Files Letzte Dateien - + + Set Menu Language + + + + &Read/Write - + Write - + Unable to find file %1! Kann die Datei %1 nicht finden ! @@ -3108,7 +3363,7 @@ Write anyway ? Ungültige EEPROM Datei %1 - + Error reading file %1: %2. Fehler beim Lesen der Datei %1: @@ -3131,13 +3386,13 @@ Write anyway ? Schalte Layout um Rechts/Links - - + + Firmware Profiles - + &File &Datei @@ -3150,12 +3405,12 @@ Write anyway ? companion9x - EEPROM Editor - + Checking for updates Überprüfe auf Updates - + Ignore this version (r%1)? Diese Version ignorieren (%1)? @@ -3164,7 +3419,7 @@ Write anyway ? Eine neue Version von eePe ist vorhanden /r%1)<br>Möchtest Du diese herunterladen ? - + &Edit &Bearbeiten @@ -3177,17 +3432,17 @@ Write anyway ? &Fenster - + &Help &Hilfe - + File Datei - + Edit Bearbeiten @@ -3196,12 +3451,12 @@ Write anyway ? Brennen - + Help Hilfe - + Ready Fertig @@ -5753,7 +6008,7 @@ Right - + --- --- @@ -5800,7 +6055,7 @@ Right German - + Deutch @@ -5982,133 +6237,128 @@ Right - - Flight mode %1 trim - - - - + Flight mode %1 value - + Yellow - + Orange orange - + Red - + Winged Shadow How High Winged Shadow How High - + Winged Shadow How High (not supported) Winged Shadow How High (nicht unterstützt) - + FrSky Sensor Hub FrSky Sensor Hub - - + + None - + Imperial Imperial - + Metric Metrisch - + Extra Fine Sehr fein - + Fine Fein - + Medium Mittel - + Coarse - + Exponential Exponential - + Count Up Hinaufzählen - + Count Down Herunterzählen - + %1:%2, %1:%2, - + : %1 Channels, %2usec Delay : %1 Kanäle, %2usec Verzögerung {1 ?} {2u?} - + Flight modes(%1) - + Flight mode(%1) - + Rudder Seitenruder - + Elevator Höhenruder - + Throttle Gas - + Aileron Querruder @@ -6120,45 +6370,40 @@ Right Expo Expo - - - Own trim - - Flight phase %1 trim FPHase %1 Trimmung - + Own value - + Keys - + Sticks - + Keys + Sticks - - + + -GV%1 - - + + GV%1 @@ -7203,7 +7448,7 @@ Right - + ersky9x @@ -7402,12 +7647,12 @@ Right open9x akzeptiert nur %1 Expos - + th9x th9x - + er9x er9x @@ -7481,13 +7726,13 @@ Right - + ON - + OFF AUS @@ -7525,25 +7770,25 @@ Right - + openTx only accepts %1 points in all curves - - - + + + OpenTX on this board doesn't accept this function - - + + OpenTX doesn't accept this protocol - + OpenTX doesn't allow this number of channels @@ -7556,6 +7801,26 @@ We are really appreciative for that! The OpenTX/Companion Team. + + + Trim disabled + + + + + Own Trim + + + + + Use Trim from Flight mode %1 + + + + + Use Trim from Flight mode %1 + Own Trim as an offset + + Setup @@ -8139,6 +8404,172 @@ Wenn dieses angewählt wurde ist der Knüppelweg für Gas reversiert. Leerlaufst + + appPreferencesDialog + + + Application Preferences + + + + + Simulator capture folder + + + + + Remember simulator switch values + + + + + + + Open Folder + Verzeichnis öffnen + + + + User Splash Screens + + + + + Blue + blau + + + + Green + grün + + + + Red + + + + + Orange + orange + + + + Yellow + + + + + Include companion splashes + 'companion' Startbilder einschliessen + + + + Only user defined splashes + Nur Benutzer Startbilder + + + + Splash Screen Library + + + + + Files to keep + + + + + Simulator BackLight + + + + + Automatic Backup Folder + + + + + Only capture to clipboard + + + + + Joystick + Joystick + + + + Find Executable + + + + + Google Earth Executable + + + + + Calibrate + kalibrieren + + + + Enable + + + + + Show splash screen when Companion starts + + + + + Automatic check for OpenTX firmware updates + + + + + Automatic check for Companion updates + + + + + Offer to use wizard for new models + + + + + Enable automatic backup before writing firmware + + + + + Select your snapshot folder + + + + + + No joysticks found + kein Joystick gefunden + + + + Select your library folder + + + + + Select your Models and Settings backup folder + + + + + Select Google Earth executable + + + avrOutputDialog @@ -9581,68 +10012,91 @@ Husterer (th9x) und auch Erez Raviv (er9x) und sein fantastisches customizeSplashDialog - Customize Splash - Startbildschirm anpassen + Startbildschirm anpassen + + + + Transmitter Splash Screen Editor + + + + + + Invert + Invertieren + + + + + Load FW + + + + + + Load Pict + + + + + + Save + - Save Image - Bild sichern + Bild sichern - Invert Color - Farben umkehren + Farben umkehren - Load Firmware - Firmware laden + Firmware laden - Load Image - Bild laden + Bild laden - + + Open Splash Library Splash Bibliothek öffnen - + + + + ... ... - Save Firmware Save To Hex - in HexFormat sichern + in HexFormat sichern - <!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:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <!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:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - Select an original firmware file - Bitte eine original Firmware Datei auswählen + Bitte eine original Firmware Datei auswählen - + Open Öffnen @@ -9651,70 +10105,74 @@ p, li { white-space: pre-wrap; } HEX files (*.hex);; - Select an image to customize your splash <br />or save actual firmware splash - Bitte Bild zum Bearbeiten des Startbildschirms auswählen<br />oder aktueller Startbildschirm sichern + Bitte Bild zum Bearbeiten des Startbildschirms auswählen<br />oder aktueller Startbildschirm sichern - - - - + + + + + + Error Fehler - + Could not find bitmap to replace in file Konnte zu ersetzendes Bitmap in der Datei nicht finden - + Open Image to load Bilddatei öffnen - + Images (%1) Bilder (%1) - - + + Cannot load %1. Kann %1 nicht laden. - - + + + Could not store image in firmware file %1 + + + + + The image file %1 could not be stored + + + Save your custimized firmware - die angepasste Firmware sichern + die angepasste Firmware sichern - - Write to file - Datei sichern + Datei sichern - Error reading file %1 - Fehler beim Lesen der Datei %1 + Fehler beim Lesen der Datei %1 - Firmware correctly saved. - Firmware erfolgreich gespeichert. + Firmware erfolgreich gespeichert. - Firmware not saved. - Firmware nicht gespeichert. + Firmware nicht gespeichert. - PNG images (*.png);; - PNG images (*.png);; + PNG images (*.png);; @@ -9928,6 +10386,309 @@ p, li { white-space: pre-wrap; } Mache nur weiter, wenn Du weißt was Du machst + + fwPreferencesDialog + + + Download Firmware and Voice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CheckBox + CheckBox + + + + Set language of voice. +May be different from firmware language + + + + + SD Structure path + + + + + Processor ID + + + + + Default Stick Mode + Standard Knüppelmodus + + + + Channel Order + + + + + Mode selection: + +Mode 1: + Left stick: Elevator, Rudder + Right stick: Throttle, Aileron + +Mode 2: + Left stick: Throttle, Rudder + Right stick: Elevator, Aileron + +Mode 3: + Left stick: Elevator, Aileron + Right stick: Throttle, Rudder + +Mode 4: + Left stick: Throttle, Aileron + Right stick: Elevator, Rudder + + + Modusauswahl: + +Mode 1: + Linker Knüppel: Höhe, Seite + Rechter Knüppel: Gas, Quer + +Mode 2: + Linker Knüppel: Gas, Seite + Rechter Knüppel: Höhe, Quer + +Mode 3: + Linker Knüppel: Höhe, Quer + Rechter Knüppel: Gas, Seite + +Mode 4: + Linker Knüpple: Gas, Quer + Rechter Knüppel: Höhe, Seite + + + + + + Mode 1 (RUD ELE THR AIL) + Mode 1 (RUD ELE THR AIL) + + + + Mode 2 (RUD THR ELE AIL) + Mode 2 (RUD THR ELE AIL) + + + + Mode 3 (AIL ELE THR RUD) + Mode 3 (AIL ELE THR RUD) + + + + Mode 4 (AIL THR ELE RUD) + Mode 4 (AIL THR ELE RUD) + + + + Options + + + + + Channel order + +This is used by the templated to determine which channel goes to what number output. + + + + + Open Folder + Verzeichnis öffnen + + + + Offer to write FW to Tx after download + + + + + Profile Splash Screen + + + + + Profile Name + + + + + Import + + + + + Export + + + + + Save Profile + + + + + Menu Language + + + + + Voice Language + + + + + Profile Number + + + + + Firmware Type + + + + + Append version number to FW file name + + + + + Download Voice + + + + + FwInfo + FwInfo + + + + Open Image + Bild öffnen + + + + Clear Image + + + + + Download FW + + + + + Check for updates + Prüfe für Updates + + + + Last downloaded release: %1 + Letzte geladene Version: %1 + + + + The selected firmware has never been downloaded by Companion. + + + + + The selected firmware cannot be downloaded by Companion. + + + + + Select the folder replicating your SD structure + + + + + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? + + + + + Export profile As + + + + + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? + + + + + Open Profile to import + + + + + Open Image to load + + + + + Images (%1) + Bilder (%1) + + + + Error + Fehler + + + + Cannot load %1. + Kann %1 nicht laden. + + joystickDialog @@ -10682,14 +11443,14 @@ Wähle "abbrechen", um die Kalibration abzubrechen preferencesDialog + Preferences Einstellungen - Language (requires restart) - Sprache (Benötigt Neustart) + Sprache (Benötigt Neustart) er9x @@ -10720,23 +11481,23 @@ Wähle "abbrechen", um die Kalibration abzubrechen er9x - Ardupilot - + Recent History Size Anzahl zuletzt geöffnete Dateien - - + + Download Download - + Default Channel Order Standardeinstellung Kanalzuordnung - + Channel order This is used by the templated to determine which channel goes to what number output. @@ -10745,12 +11506,12 @@ This is used by the templated to determine which channel goes to what number out Hier wird die Zuordnung der Kanäle zum Ausgang festgelegt. - + Default Stick Mode Standard Knüppelmodus - + Mode selection: Mode 1: @@ -10795,177 +11556,143 @@ Mode 4: Prüfe ausgewählte Fw Updates - + Mode 1 (RUD ELE THR AIL) Mode 1 (RUD ELE THR AIL) - + Mode 2 (RUD THR ELE AIL) Mode 2 (RUD THR ELE AIL) - + Mode 3 (AIL ELE THR RUD) Mode 3 (AIL ELE THR RUD) - + Mode 4 (AIL THR ELE RUD) Mode 4 (AIL THR ELE RUD) - + Automatic Backup Folder - + Automatically add version number to the filename after download - + Voice - + Set language of voice. May be different from firmware language - + Firmware Firmware - - Theme - - - - - - Requires restart - - - - - Classic - - - - - Monochrome - - - - - MonoWhite - - - - - MonoBlue - - - - - Icon size - - - - - Small - - - - Normal - Normal + Normal - - Big - - - - - Huge - - - - + Check for updates on startup Überprüfe auf Aktualisierung beim Start - - + + + + ... ... - + + Splash library behaviour Verhalten Startbild Bibliothek - + + Remember simulator switches + + + + + Include companion splashes 'companion' Startbilder einschliessen - + + Only user defined splashes Nur Benutzer Startbilder - + + Custom TX splash screen Benutzer Startbild - + + Personal splash library Benutzer Startbild Bibliothek - + + Joystick Joystick - - - - + + + + + + Open Folder Verzeichnis öffnen - + SD Structure path - + Processor ID - + + Simulator capture folder - + + Use clipboard only + @@ -11007,133 +11734,142 @@ May be different from firmware language - CheckBox CheckBox - + Check for updates Prüfe für Updates - + Language - + Profile Name - + Export Profile - + Save Profile - + Import Profile - + + Simu BackLight - + Check for selected Fw updates - + Ask use of wizard for new models - + Show Splash At Start - + Remember switches in simulator - + + Blue Blu blau - + + Green grün - + + Red rot - + + Orange orange - + + Yellow gelb - + Profile slot - + auto backup before write - + Find Executable - + Google Earth Executable - + Ask for flashing after Download - + + Enable aktivieren - + + Calibrate kalibrieren - + + Open Image Bild öffnen - + + Invert Pixels Pixel invertieren @@ -11142,12 +11878,12 @@ May be different from firmware language HG Beleuchtung - + FwInfo FwInfo - + Last downloaded release: %1 Letzte geladene Version: %1 @@ -11160,48 +11896,48 @@ May be different from firmware language Die gewählte Firmware kann von companio9x nicht geladen werden. - + Image stored in settings Gewähltes Bild in Einstellungen - - + + No joysticks found kein Joystick gefunden - + Select your Models and Settings backup folder - + Select Google Earth executable - + Select the folder replicating your SD structure - + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? - + Export profile As - + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? - + Open Profile to import @@ -11210,44 +11946,44 @@ May be different from firmware language Bitte Bibliothek Verzeichnis wählen - + Open Image to load Bilddatei öffnen - + Images (%1) Bilder (%1) - - + + Error Fehler - + The selected firmware has never been downloaded by Companion. - + The selected firmware cannot be downloaded by Companion. - + Select your library folder - + Select your snapshot folder - - + + Cannot load %1. Kann %1 nicht laden. diff --git a/companion/src/translations/companion_fr.ts b/companion/src/translations/companion_fr.ts index f693dd9da..21808da81 100644 --- a/companion/src/translations/companion_fr.ts +++ b/companion/src/translations/companion_fr.ts @@ -648,32 +648,32 @@ p, li { white-space: pre-wrap; } - + Rud Dir - + Ele Prf - + Thr Gaz - + Ail Ail - + Rotary Encoder %1 - + GVAR%1 @@ -681,17 +681,17 @@ p, li { white-space: pre-wrap; } FlightModes - + Flight Mode %1 - + (%1) - + (default) @@ -1990,7 +1990,7 @@ Are you sure ? MainWindow - + &New &Nouveau @@ -1999,17 +1999,17 @@ Are you sure ? Flasher - + Cu&t C&ouper - + Edit Edition - + File Fichier @@ -2018,12 +2018,12 @@ Are you sure ? companion9x - Éditeur d'EEPROM - Firmware %1 - + Display previous warning again at startup ? Afficher les alertes précédentes lors du prochain démarrage ? - + New release available Nouvelle version disponible @@ -2032,28 +2032,28 @@ Are you sure ? Une nouvelle version de companion9x est disponible, veuillez vérifier dans l'espace de téléchargement - - - - - - - - - - - - - + + + + + + + + + + + + + Error Erreur - - - - - + + + + + Error opening file %1: %2. Erreur à l'ouverture du fichier %1: @@ -2064,7 +2064,7 @@ Are you sure ? Ce firmware est trop gros, trop d'options choisies - + Compilation server termporary failure, try later Erreur temporaire du serveur de compilation @@ -2073,7 +2073,7 @@ Are you sure ? companion9x - Editeur d'EEPROM - firmware %1 - profil %2 - + Display previous message again at startup ? Afficher les alertes précédentes lors du prochain démarrage ? @@ -2082,13 +2082,13 @@ Are you sure ? Les options sélectionnées prennent trop de place par rapport à la taille de flash disponible - + Compilation server temporary failure, try later Erreur temporaire du serveur de compilation - - + + Compilation server too busy, try later Serveur de compilation trop occupé @@ -2097,8 +2097,8 @@ Are you sure ? Le serveur de compilation nécessite d'être enregistré, veuillez vous référer au site web d'openTx - - + + Unknown server failure, try later Erreur inconnue du serveur de compilation @@ -2107,70 +2107,70 @@ Are you sure ? Voulez-vous flasher ce firmware maintenant ? - - + + Yes Oui - - + + No Non - - + + Release Notes Release Notes - - + + Do you want to download release %1 now ? Voulez-vous télécharger la release %1 ? - + Release notes contain very important informations. Do you want to see them now ? Les notes de version contiennent des informations très importantes. Voulez-vous les voir maintenant? - + Open Ouvrir - + Firmware updates Mises à jour de firmware - + Current firmware does not provide release notes informations. Le firmware actuel ne contient pas de notes de version. - + Cannot write file %1: %2. Ecriture fichier %1 impossible: %2. - - - - - + + + + + Taranis radio not found Radio Taranis non détectée - - - - + + + + Impossible to identify the radio on your system, please verify the eeprom disk is connected. Impossible de trouver la radio, vérifiez qu'elle est bien sous tension et connectée. @@ -2181,16 +2181,16 @@ Burn anyway ? Le fichier %1 n'est pas reconnu comme une EEPROM valide. Confirmer le transfert ? - - - + + + Backup is impossible Sauvegarde impossible - - - + + + The backup dir set in preferences does not exist Le dossier de sauvegarde configuré dans les préférences n'existe pas @@ -2203,8 +2203,8 @@ Burn anyway ? Impossible de vérifier la compatibilité de l'EEPROM! Continuer quand même? - - + + Warning Avertissement @@ -2225,7 +2225,7 @@ Burn anyway ? Flasher l'émetteur - + Conversion failed La conversion a échoué @@ -2238,7 +2238,7 @@ Burn anyway ? Restaurer l'EEPROM vers l'émetteur - + Restore failed Erreur lors de la restauration @@ -2255,7 +2255,7 @@ Burn anyway ? Impossible de flasher l'émetteur, l'EEPROM d'origine se trouve dans : %1 - + Backup failed Erreur lors de la sauvegarde @@ -2264,32 +2264,62 @@ Burn anyway ? Impossible de sauvegarder l'EEPROM. Flashage annulé - + &loadBackup... c&harger sauvegarde... - + Load backup from file Charger une sauvegarde à partir du fichier - + Lo&gs - + Ctrl+G - + Open log file Ouvrir fichier de log - + + &Old Preferences Dialog... + + + + + Used the old Preferences Dialog + + + + + &Application Preferences... + + + + + Edit application preferences + + + + + &Download Firmware and Voice... + + + + + Download firmware and voice files + + + + ChangeLog... Historique des changements... @@ -2298,47 +2328,247 @@ Burn anyway ? Historique des changements de companion9x - + Firmware ChangeLog... Historique des changements du firmware... - + Show firmware changelog Montrer l'historique des changements du firmware - + Compare... Comparer... - + Compare models Comparer les modèles - + + Configure transmitter start screen... + + + + + &Configure connection software... + + + + Configure software for reading from and writing to the transmitter Configure le programme pour communiquer correctement avec la radio - + Show fuses dialog Afficher les réglages des fusibles - + + Classic + + + + + The multicolor classical Companion icon theme + + + + + A monochrome black icon theme + + + + + A monochrome white icon theme + + + + + A monochrome blue icon theme + + + + + Small + + + + + Use small toolbar icons + + + + + Use normal size toolbar icons + + + + + Normal + Normal + + + + Use big toolbar icons + + + + + Big + + + + + Use huge toolbar icons + + + + + Huge + + + + + System default language + + + + + Use system default language in menus + + + + + Czech + Tchèque + + + + Use Czech in menus + + + + + German + Allemand + + + + Use German in menus + + + + + English + Anglais + + + + Use English in menus + + + + + French + Français + + + + Use French in menus + + + + + Italian + Italien + + + + Use Italian in menus + + + + + Hebrew + + + + + Use Hebrew in menus + + + + + Polish + + + + + Use Polish in menus + + + + + Portuguese + Portugais + + + + Use Portuguese in menus + + + + + Swedish + Suédois + + + + Use Swedish in menus + + + + + Russian + + + + + Use Russian in menus + + + + + Set Icon Theme + + + + + Set Icon Size + + + + + &Settings + + + + &Read/Write &Lire/Ecrire - + Write Ecrire - + Unable to find file %1! Fichier %1 introuvable! @@ -2347,7 +2577,7 @@ Burn anyway ? Fichier EEPROM %1 invalide - + Error reading file %1: %2. Fichier %1 corrompu: @@ -2366,27 +2596,27 @@ Burn anyway ? Fl&asher - + &Copy &Copier - + &Edit Éditio&n - + &File &Fichier - + &Help &Aide - + &Save &Enregistrer @@ -2395,88 +2625,90 @@ Burn anyway ? &Mosaïque - + E&xit &Quitter - + Alt+S - + &Simulate &Simulation - - - + + + + Companion - Models and Settings Editor - %1 - profile %2 - - - - + + + + + Companion - Models and Settings Editor - %1 - + A new version of Companion is available (version %1)<br>Would you like to download it? - + Firmware does not longer fit in the Tx, due to selected firmware options Le firmware sélectionné est trop gros pour la mémoire de la radio, veuillez sélectionner moins d'options - - + + Compilation server requires registration, please check OpenTX web site - + Firmware does not fit in the Tx, due to selected firmware options Le firmware sélectionné est trop gros pour la mémoire de la radio, veuillez sélectionner moins d'options - + Write Models and settings from %1 to the Tx? Ecrire les réglages et modèles de %1 dans la radio? - + OpenTX Home Page: <a href='%1'>%1</a> - + The OpenTX Companion project was originally forked from <a href='%2'>eePe</a> - + If you've found this program useful, please support by <a href='%1'>donating</a> - + Version %1, %3 - + Show Companion contributors list - + Show Companion changelog @@ -2485,13 +2717,13 @@ Burn anyway ? Sui&vante - - + + Firmware Profiles Profils de firmware - + Ready Prêt @@ -2500,38 +2732,38 @@ Burn anyway ? Enregistrer la mémoire Flash sous - + Show the application's About box Afficher la fenêtre "A propos" de l'application - - + + &%1 %2 - + &About &À Propos - + A new release of Companion is available please check the OpenTX website! - + &Paste Co&ller - + &Print Im&primer - + Save &As... Enregistrer &Sous... @@ -2544,31 +2776,30 @@ Burn anyway ? Lire la mémoire Flash - + Paste the clipboard's contents into the current selection Coller le contenu du presse-papier à l'emplacement sélectionné - + Open an existing file Ouvrir un fichier existant - &Configure... - &Configurer la communication... + &Configurer la communication... Cl&ose &Fermer - + Ctrl+P - + Print current model. Imprimer les données du modèle sélectionné. @@ -2589,12 +2820,12 @@ Burn anyway ? don - + &Open... &Ouvrir... - + Create a new file Créer un nouveau fichier @@ -2603,16 +2834,16 @@ Burn anyway ? Fermer la fenêtre active - - - - + + + + File loaded Fichier chargé - - + + File saved Fichier sauvegardé @@ -2629,7 +2860,7 @@ Burn anyway ? P&récédente - + Exit the application Quitter l'application @@ -2638,12 +2869,12 @@ Burn anyway ? Écrire la mémoire Flash - + List available programmers Lister les programmateurs supportés - + Save the document to disk Enregistrer sur le disque @@ -2656,7 +2887,7 @@ Burn anyway ? &Cascade - + Simulate selected model. Simuler le modèle sélectionné @@ -2669,7 +2900,7 @@ Burn anyway ? Lire la mémoire Flash de l'émetteur - + Save the document under a new name Enregistrer sous un nom différent @@ -2678,26 +2909,24 @@ Burn anyway ? Fe&nêtre - Edit general preferences - Définir les préférences générales + Définir les préférences générales - &Preferences... - &Préférences... + &Préférences... About companion9x À propos de companion9x - + &Fuses... &Fusibles... - + Copy the current selection's contents to the clipboard Copier la sélection dans le presse-papier @@ -2706,7 +2935,7 @@ Burn anyway ? Activer la fenêtre suivante - + &List programmers &Programmateurs supportés @@ -2715,17 +2944,17 @@ Burn anyway ? Transférer l'EEPROM vers l'émetteur - + Cut the current selection's contents to the clipboard Couper la sélection et la copier dans le presse-papier - + Ctrl+Alt+R - + Ctrl+Alt+W @@ -2754,12 +2983,11 @@ Burn anyway ? Le projet companion9x a été créé à partir de eePe - Customize your &TX... - &Personnaliser votre émetteur... + &Personnaliser votre émetteur... - + Customize the splash screen of your TX Personnaliser l'écran de démarrage de votre émetteur @@ -2780,41 +3008,41 @@ Burn anyway ? Enregistrer l'EEPROM de l'émetteur dans un fichier - - - + + + Save As Enregistrer Sous - + Executable (*.exe) Exécutable (*.exe) - - + + No updates available at this time. Aucune mise à jour disponible. - - - - - + + + + + Unable to check for updates. Impossible de rechercher des mises à jour. - + Would you like to launch the installer? Voulez-vous lancer l'installation ? - + A new version of %1 firmware is available (current %2 - newer %3). Do you want to download it now ? Une nouvelle version du firmware %1 est disponible (courante %2 - nouvelle %3). @@ -2825,7 +3053,7 @@ Voulez vous la télécharger maintenant ? Transférer %1 dans la mémoire EEPROM de l'émetteur ? - + &Check for updates... Re&chercher des mises à jour... @@ -2834,7 +3062,7 @@ Voulez vous la télécharger maintenant ? Vérifier l'existence d'une nouvelle version de companion9x et du firmware sélectionné - + Copyright Copyright @@ -2843,17 +3071,17 @@ Voulez vous la télécharger maintenant ? Inverser l'interface gauche/droite - + Ignore this version (r%1)? Ignorer cette version (r%1)? - + Help Aide - + Checking for updates Recherche de mises à jour @@ -2870,12 +3098,12 @@ Voulez vous la télécharger maintenant ? Une nouvelle version de companion9x est disponible (r%1)<br>Voulez-vous la télécharger ? - + Do you want to write the firmware to the transmitter now ? Voulez-vous vraiment flasher le firmware de la radio? - + Firmware %1 does not seem to have ever been downloaded. Version %2 is available. Do you want to download it now ? @@ -2884,15 +3112,37 @@ La version %2 est disponible. Voulez-vous la télécharger maintenant ? - - - - + + The selected language will be used the next time you start Companion. + + + + + + + OK + + + + + The new theme will be loaded the next time you start Companion. + + + + + The icon size will be used the next time you start Companion. + + + + + + + Read Models and Settings From Tx Lire les réglages et modèles depuis la radio - + The file %1 has not been recognized as a valid Models and Settings file Write anyway ? @@ -2901,83 +3151,83 @@ n'a pas été reconnu comme un fichier de réglage et modèles valide. Ecrire quand même? - - - - - - + + + + + + Backup Models and Settings From Tx Sauvegarder les réglages et modèles depuis la radio - + Cannot check Models and Settings compatibility! Continue anyway? Impossible de vérifier la compatibilité des réglages et modèles. Continuer quand même? - + The transmitter firmware belongs to another product family, check file and preferences! Le firmware sélectionné est destiné à un différent type de radio, veuillez vérifier le fichier et les préférences! - + The transmitter firmware is outdated, please upgrade! Le firmware de la radio est obsolète, veuillez mettre à jour! - + Write Models and Settings To Tx Ecrire les réglages et modèles dans la radio - - + + Write Firmware To Tx Flasher le firmware de la radio - + Cannot convert Models and Settings for use with this firmware, original data will be used Impossible de convertir les réglages et modèles pour ce firmware, les données originales vont être utilisées - + Restore Models and Settings To Tx Restaurer une sauvegarde de réglages et modèles - + Could not restore Models and Settings to TX. The models and settings data file can be found at: %1 Impossible de restaurerles réglages et modèles. Une copie du fichier est placée ici: %1 - + Firmware write failed L'écriture du firmware a échoué. - + Could not write firmware to to transmitter. The models and settings data file can be found at: %1 Impossible de flasher le firmware. Une copie du fichier de réglages et modèles est placée ici: %1 - + Cannot backup existing Models and Settings from TX. Firmware write process aborted Impossible de sauvegarder les réglages et modèles de la radio. Le flashage est abandonné. - + Save transmitter Models and Settings to File Sauvegarder les réglages et modèles depuis la radio dans un fichier - + Impossible to identify the radio on your system, please verify that the eeprom disk is connected. Impossible de trouver la radio, veuillez vérifier que la radio est sous tension sur la page d'accueil et connectée. - + Read Tx Firmware to File Sauvegarder le firmware de la radio dans un fichier @@ -2986,17 +3236,17 @@ Ecrire quand même? Si vous trouvez ce programme utile, merci d'apporter votre soutien en effectuant un - + About Companion - + Check for new version of Companion - + Contributors &List... &Liste des contributeurs... @@ -3005,62 +3255,62 @@ Ecrire quand même? Lister les contributeurs de companion9x - + &Write Models and Settings To Tx &Transférer les réglages et modèles à la radio - + Write Models and Settings to transmitter Transférer les réglages et modèles à la radio - + &Read Models and Settings From Tx &Lire les réglages et modèles depuis la radio - + Read Models and Settings from transmitter Lire les réglages et modèles depuis la radio - + Write Firmware Flasher le firmware - + Write firmware to transmitter Flasher le firmware de la radio - + Write Models and Settings from file to Tx Restaurer les réglages et modèles depuis un fichier - + Write Models and Settings from file to transmitter Restaurer les réglages et modèles depuis un fichier - + Save transmitter Models and Settings to file Sauvegarder les réglages et modèles dans un fichier - + Save the Models and Settings from the transmitter to a file Sauvegarder les réglages et modèles dans un fichier - + Read Firmware Lire le firmware de la radio - + Read firmware from transmitter Lire le firmware de la radio @@ -3073,19 +3323,24 @@ Ecrire quand même? Configure le programme pour communiquer correctement avec la radio - - + + Recent Files Derniers documents utilisés - - + + Set Menu Language + + + + + Invalid Models and Settings File %1 Fichier de réglages et modèles invalide: %1 - + Invalid binary Models and Settings File %1 Fichier binaire de réglages et modèles invalide: %1 @@ -5611,7 +5866,7 @@ Si cette option est cochée, la voie des gaz est inversée: le ralenti est &apo - + --- --- @@ -5828,45 +6083,43 @@ Si cette option est cochée, la voie des gaz est inversée: le ralenti est &apo Expo - Own trim - Trim indépendant + Trim indépendant - Flight mode %1 trim Flight phase %1 trim - Trim de la phase de vol %1 + Trim de la phase de vol %1 - + Own value Valeur indépendante - + Flight mode %1 value Flight phase %1 value Valeur de la phase de vol %1 - + Keys Touches - + Sticks Manches - + Keys + Sticks Touches + manches - - + + -GV%1 -VG%1 @@ -5885,130 +6138,130 @@ Si cette option est cochée, la voie des gaz est inversée: le ralenti est &apo - + Yellow Jaune - + Orange Orange - + Red Rouge - + Winged Shadow How High Winged Shadow How High - + Winged Shadow How High (not supported) Winged Shadow How High (non supporté) - + FrSky Sensor Hub Sensor Hub FrSky - - + + None Aucun - + Imperial Impérial - + Metric Métrique - + Extra Fine Extra fin - + Fine Fin - + Medium Moyen - + Coarse Grossier - + Exponential Exponentiel - + Count Up Croissant - + Count Down Décroissant - + %1:%2, %1:%2, - + : %1 Channels, %2usec Delay : %1 voies, délai de %2us - + Flight modes(%1) - + Flight mode(%1) - + Rudder Direction - + Elevator Profondeur - + Throttle Gaz - + Aileron Ailerons - - + + GV%1 VG%1 @@ -6769,13 +7022,13 @@ Si cette option est cochée, la voie des gaz est inversée: le ralenti est &apo - + ON - + OFF @@ -7193,7 +7446,7 @@ Si cette option est cochée, la voie des gaz est inversée: le ralenti est &apo Activer le menu hélico et les mixages CCPM - + ersky9x @@ -7319,12 +7572,12 @@ Si cette option est cochée, la voie des gaz est inversée: le ralenti est &apo open9x accepte jusqu'à %1 expos - + th9x - + er9x er9x @@ -7451,25 +7704,25 @@ Si cette option est cochée, la voie des gaz est inversée: le ralenti est &apo PV %1 - + openTx only accepts %1 points in all curves openTx ne supporte que %1 points répartis entre toutes les courbes - - - + + + OpenTX on this board doesn't accept this function openTx ne supporte pas cette fonction sur cette carte - - + + OpenTX doesn't accept this protocol openTx ne supporte pas ce protocole - + OpenTX doesn't allow this number of channels openTx ne supporte pas ce nombre de canaux @@ -7500,6 +7753,26 @@ We are really appreciative for that! The OpenTX/Companion Team. + + + Trim disabled + + + + + Own Trim + + + + + Use Trim from Flight mode %1 + + + + + Use Trim from Flight mode %1 + Own Trim as an offset + + Setup @@ -8085,6 +8358,172 @@ Si cette option est cochée, la voie des gaz est inversée: le ralenti est &apo + + appPreferencesDialog + + + Application Preferences + + + + + Simulator capture folder + Dossier de sauvegarde des captures d'écran + + + + Remember simulator switch values + + + + + + + Open Folder + Ouvrir le répertoire + + + + User Splash Screens + + + + + Blue + Bleu + + + + Green + Vert + + + + Red + Rouge + + + + Orange + Orange + + + + Yellow + Jaune + + + + Include companion splashes + Inclure les écrans d'accueil de companion9x + + + + Only user defined splashes + Seulement vos écrans d'accueil + + + + Splash Screen Library + + + + + Files to keep + + + + + Simulator BackLight + + + + + Automatic Backup Folder + Dossier de sauvegardes automatiques + + + + Only capture to clipboard + + + + + Joystick + Joystick + + + + Find Executable + + + + + Google Earth Executable + + + + + Calibrate + Calibrer + + + + Enable + Actif + + + + Show splash screen when Companion starts + + + + + Automatic check for OpenTX firmware updates + + + + + Automatic check for Companion updates + + + + + Offer to use wizard for new models + + + + + Enable automatic backup before writing firmware + + + + + Select your snapshot folder + Sélectionner le dossier où stocker les captures d'écran + + + + + No joysticks found + Aucun joystick + + + + Select your library folder + Sélectionner le dossier de bibliothèque + + + + Select your Models and Settings backup folder + Sélectionner le dossier dans lequel une sauvegarde des réglages et modèles sera placée automatiquement lors de chaque opération + + + + Select Google Earth executable + + + avrOutputDialog @@ -9371,132 +9810,151 @@ Egalement à Erez Raviv (er9x) et son fantastique programme eePe d'où est customizeSplashDialog - Customize Splash - Personnaliser l'écran d'accueil + Personnaliser l'écran d'accueil + + + + Transmitter Splash Screen Editor + + + + + + Invert + Inversion + + + + + Load FW + + + + + + Load Pict + + + + + + Save + - Save Image - Enregistrer l'image + Enregistrer l'image - Invert Color - Inverser les couleurs + Inverser les couleurs - Load Firmware - Charger le firmware + Charger le firmware - Load Image - Charger une image + Charger une image - + + Open Splash Library Ouvrir la bibliothèque de Splashes - + + + + ... - Save Firmware Save To Hex - Sauvegarder le firmware + Sauvegarder le firmware - - <!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:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - - - - Select an original firmware file - Choisissez un fichier de firmware + Choisissez un fichier de firmware - + Open Ouvrir - Select an image to customize your splash <br />or save actual firmware splash - Choisir une image pour personnaliser votre Splash <br/> ou enregistrer le Splash de votre firmware courant + Choisir une image pour personnaliser votre Splash <br/> ou enregistrer le Splash de votre firmware courant - - - - + + + + + + Error Erreur - + Could not find bitmap to replace in file Impossible de trouver l'image à remplacer dans le fichier - + Open Image to load Ouvrir l'image à charger - + Images (%1) Images (%1) - - + + Cannot load %1. Impossible de charger %1. - - + + + Could not store image in firmware file %1 + + + + + The image file %1 could not be stored + + + Save your custimized firmware - Enregistrer votre firmware personnalisé + Enregistrer votre firmware personnalisé - - Write to file - Ecrire vers le fichier + Ecrire vers le fichier - Error reading file %1 - Fichier %1 corrompu! {1?} + Fichier %1 corrompu! {1?} - Firmware correctly saved. - Firmware enregistré. + Firmware enregistré. - Firmware not saved. - Firmware non enregistré. + Firmware non enregistré. - PNG images (*.png);; - Images PNG (*.png);; + Images PNG (*.png);; @@ -9642,6 +10100,318 @@ p, li { white-space: pre-wrap; } Lire Fusibles + + fwPreferencesDialog + + + Download Firmware and Voice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CheckBox + + + + + Set language of voice. +May be different from firmware language + Langue des voix. +Peut être différente de la langue du firmware + + + + SD Structure path + Chemin de la structure de la carte SD + + + + Processor ID + ID du processeur + + + Language + Langue + + + + Default Stick Mode + Mode par défaut + + + Voice + Voix + + + + Channel Order + + + + + Mode selection: + +Mode 1: + Left stick: Elevator, Rudder + Right stick: Throttle, Aileron + +Mode 2: + Left stick: Throttle, Rudder + Right stick: Elevator, Aileron + +Mode 3: + Left stick: Elevator, Aileron + Right stick: Throttle, Rudder + +Mode 4: + Left stick: Throttle, Aileron + Right stick: Elevator, Rudder + + + Choix du mode: + +Mode 1: +Manche Gauche: Profondeur, Direction +Manche Droit: Gaz, Ailerons + +Mode 2: +Manche Gauche: Gaz, Direction +Manche Droit: Profondeur, Ailerons + +Mode 3: +Manche Gauche: Profondeur, Ailerons +Manche Droit: Gaz, Direction + +Mode 4: +Manche Gauche: Gaz, Ailerons +Manche Droit: Profondeur, Direction + + + + + + Mode 1 (RUD ELE THR AIL) + Mode 1 (DIR PROF GAZ AIL) + + + + Mode 2 (RUD THR ELE AIL) + Mode 2 (DIR GAZ PROF AIL) + + + + Mode 3 (AIL ELE THR RUD) + Mode 3 (AIL PROF GAZ DIR) + + + + Mode 4 (AIL THR ELE RUD) + Mode 4 (AIL GAZ PROF DIR) + + + + Options + + + + + Channel order + +This is used by the templated to determine which channel goes to what number output. + + + + + Open Folder + Ouvrir le répertoire + + + + Offer to write FW to Tx after download + + + + + Profile Splash Screen + + + + + Profile Name + Nom du profil + + + + Import + + + + + Export + + + + + Save Profile + Sauvegarder profil + + + + Menu Language + + + + + Voice Language + Langue audio + + + + Profile Number + + + + + Firmware Type + + + + + Append version number to FW file name + + + + + Download Voice + + + + + FwInfo + + + + + Open Image + Charger une image + + + + Clear Image + + + + + Download FW + + + + + Check for updates + Vérifier les mises à jour + + + + Last downloaded release: %1 + Dernière version téléchargée : %1 + + + + The selected firmware has never been downloaded by Companion. + + + + + The selected firmware cannot be downloaded by Companion. + + + + + Select the folder replicating your SD structure + Sélectionner un dossier contenant une copie des dossiers de la carte SD + + + + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? + Le nom du profil est vide, le profil %1 va être effacé.<br>Etes-vous sûr? + + + + Export profile As + Exporter le profil sous + + + + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? + L'emplacement %1 n'est pas vide, il va être écrasé. Continuer? + + + + Open Profile to import + Ouvrir le profil à importer + + + + Open Image to load + + + + + Images (%1) + Images (%1) + + + + Error + Erreur + + + + Cannot load %1. + Impossible de charger %1. + + joystickDialog @@ -10397,17 +11167,17 @@ Press cancel to abort joystick calibration preferencesDialog - + Mode 2 (RUD THR ELE AIL) Mode 2 (DIR GAZ PROF AIL) - + Mode 4 (AIL THR ELE RUD) Mode 4 (AIL GAZ PROF DIR) - + Mode selection: Mode 1: @@ -10448,92 +11218,107 @@ Manche Droit: Profondeur, Direction - + Mode 3 (AIL ELE THR RUD) Mode 3 (AIL PROF GAZ DIR) - + Firmware - - + + + + ... - + + Enable Actif - + + Remember simulator switches + + + + + Calibrate Calibrer - - - - + + + + + + Open Folder Ouvrir le répertoire - + Set language of voice. May be different from firmware language Langue des voix. Peut être différente de la langue du firmware - + Export Profile Exporter le profil - + Import Profile Importer le profil - + + Custom TX splash screen Personnaliser l'écran d'accueil - + Automatic Backup Folder Dossier de sauvegardes automatiques - + Automatically add version number to the filename after download Ajouter le numéro de version au nom de fichier après téléchargement - + SD Structure path Chemin de la structure de la carte SD - + Processor ID ID du processeur - + + Simulator capture folder Dossier de sauvegarde des captures d'écran - + + Use clipboard only Utiliser le presse-papiers + @@ -10575,17 +11360,16 @@ Peut être différente de la langue du firmware - CheckBox - + Check for updates Vérifier les mises à jour - + Channel order This is used by the templated to determine which channel goes to what number output. @@ -10593,149 +11377,104 @@ This is used by the templated to determine which channel goes to what number out Indique l'affectation voie / numéro de canal par défaut utilisée lors de la création d'un modèle. - + Language Langue - + Voice Voix - + Profile Name Nom du profil - + Save Profile Sauvegarder profil - + + Simu BackLight Rétroéclairage simu - + Check for selected Fw updates Vérifier les mises à jour de firmwares au démarrage - + Ask use of wizard for new models Utiliser l'assistant de configuration de modèle - + Show Splash At Start - + Remember switches in simulator Mémoriser les inters pour le simulateur - + + Blue Blu Bleu - + + Green Vert - + + Red Rouge - + + Orange Orange - + + Yellow Jaune - + + Personal splash library Bibliothèque de splashs personnalisés - + Profile slot Numéro de profil - - Theme - - - - - - Requires restart - - - - - Classic - - - - - Monochrome - - - - - MonoWhite - - - - - MonoBlue - - - - - Icon size - - - - - Small - - - - Normal - Normal + Normal - - Big - - - - - Huge - - - - + Find Executable - + Google Earth Executable @@ -10744,78 +11483,84 @@ Indique l'affectation voie / numéro de canal par défaut utilisée lors de Dossier de sauvegarde de l'EEPROM - + auto backup before write Sauvegarde automatique avant programmation - + Ask for flashing after Download Demander pour flasher après téléchargement - + + Splash library behaviour Utilisation de la bibliothèque de Splashes - + + Include companion splashes Inclure les écrans d'accueil de companion9x - + + Only user defined splashes Seulement vos écrans d'accueil - + + Joystick Joystick - + + Open Image Charger une image - + + Invert Pixels Inverser les couleurs - + FwInfo - Language (requires restart) Version française par Pascal Dugué / Octobre 2010. - Langue (nécessite un redémarrage de companion9x) + Langue (nécessite un redémarrage de companion9x) - + Default Channel Order Ordre des voies par défaut + Preferences Préférences - + Default Stick Mode Mode par défaut - + Mode 1 (RUD ELE THR AIL) Mode 1 (DIR PROF GAZ AIL) - + Check for updates on startup Vérifier les mises à jour au démarrage @@ -10824,18 +11569,18 @@ Indique l'affectation voie / numéro de canal par défaut utilisée lors de Afficher l'écran d'accueil au démarrage - + Recent History Size Taille de l'historique des derniers documents utilisés - - + + Download Télécharger - + Last downloaded release: %1 Dernière version téléchargée : %1 @@ -10848,84 +11593,84 @@ Indique l'affectation voie / numéro de canal par défaut utilisée lors de Le firmware sélectionné ne peut pas être téléchargé par companion9x. - + Image stored in settings Image enregistrée dans les paramètres - - + + No joysticks found Aucun joystick - + Select your Models and Settings backup folder Sélectionner le dossier dans lequel une sauvegarde des réglages et modèles sera placée automatiquement lors de chaque opération - + Select Google Earth executable - + Select the folder replicating your SD structure Sélectionner un dossier contenant une copie des dossiers de la carte SD - + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? Le nom du profil est vide, le profil %1 va être effacé.<br>Etes-vous sûr? - + Export profile As Exporter le profil sous - + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? L'emplacement %1 n'est pas vide, il va être écrasé. Continuer? - + Open Profile to import Ouvrir le profil à importer - + Open Image to load Ouvre l'image à charger - + Images (%1) Images (%1) - - + + Error Erreur - + The selected firmware has never been downloaded by Companion. - + The selected firmware cannot be downloaded by Companion. - + Select your library folder Sélectionner le dossier de bibliothèque - + Select your snapshot folder Sélectionner le dossier où stocker les captures d'écran @@ -10934,8 +11679,8 @@ Indique l'affectation voie / numéro de canal par défaut utilisée lors de Sélectionner le dossier de sauvegarde d'EEPROM - - + + Cannot load %1. Impossible de charger %1. diff --git a/companion/src/translations/companion_he.ts b/companion/src/translations/companion_he.ts index d50bb0331..cc2a7a7af 100644 --- a/companion/src/translations/companion_he.ts +++ b/companion/src/translations/companion_he.ts @@ -608,32 +608,32 @@ p, li { white-space: pre-wrap; } - + Rud - + Ele - + Thr - + Ail - + Rotary Encoder %1 - + GVAR%1 @@ -641,17 +641,17 @@ p, li { white-space: pre-wrap; } FlightModes - + Flight Mode %1 - + (%1) - + (default) @@ -1870,816 +1870,1055 @@ Are you sure ? MainWindow - - - - + + + + File loaded - - - + + + Save As - - + + No updates available at this time. - - - - - + + + + + Unable to check for updates. - + Checking for updates - + Executable (*.exe) - + Would you like to launch the installer? - + Do you want to write the firmware to the transmitter now ? - + Firmware %1 does not seem to have ever been downloaded. Version %2 is available. Do you want to download it now ? - + Open - - + + File saved - + OpenTX Home Page: <a href='%1'>%1</a> - + The OpenTX Companion project was originally forked from <a href='%2'>eePe</a> - + If you've found this program useful, please support by <a href='%1'>donating</a> - + Version %1, %3 - + Copyright - - + + &%1 %2 - + &New - + Create a new file - + &Open... - + Open an existing file - + &Save - + Save the document to disk - + Save &As... - + Save the document under a new name - - &Preferences... - - - - - Edit general preferences - - - - + &Check for updates... - + Display previous warning again at startup ? - + New release available - - - - - - - - - - - - - + + + + + + + + + + + + + Error - - - - - + + + + + Error opening file %1: %2. - + Compilation server termporary failure, try later - + Display previous message again at startup ? - + A new release of Companion is available please check the OpenTX website! - + Firmware does not longer fit in the Tx, due to selected firmware options - + Compilation server temporary failure, try later - - + + Compilation server too busy, try later - - + + Unknown server failure, try later - + Firmware does not fit in the Tx, due to selected firmware options - - + + Yes - - - - No - - + No + + + + + Release Notes - - + + Do you want to download release %1 now ? - + A new version of %1 firmware is available (current %2 - newer %3). Do you want to download it now ? - + Ignore this version (r%1)? - + Release notes contain very important informations. Do you want to see them now ? - + Firmware updates - + Current firmware does not provide release notes informations. - + Cannot write file %1: %2. - - - - - + + + + + Taranis radio not found - - - - + + + + Impossible to identify the radio on your system, please verify the eeprom disk is connected. - + Write Models and settings from %1 to the Tx? - - - + + + Backup is impossible - - - + + + The backup dir set in preferences does not exist - - + + Warning - + Conversion failed - + Restore failed - + Backup failed - + &loadBackup... - + Load backup from file - + Lo&gs - + Ctrl+G - + Open log file - + + &Old Preferences Dialog... + + + + + Used the old Preferences Dialog + + + + + &Application Preferences... + + + + + Edit application preferences + + + + + &Download Firmware and Voice... + + + + + Download firmware and voice files + + + + Contributors &List... - + ChangeLog... - + Firmware ChangeLog... - + Show firmware changelog - + Compare... - + Compare models - - Customize your &TX... - - - - + Customize the splash screen of your TX - + E&xit - + Exit the application - + Cu&t - + Cut the current selection's contents to the clipboard - + &Copy - + Copy the current selection's contents to the clipboard - + &Paste - + Paste the clipboard's contents into the current selection - + Ctrl+Alt+W - + Ctrl+Alt+R - - &Configure... - - - - + Configure software for reading from and writing to the transmitter - + &List programmers - + List available programmers - + &Fuses... - + Show fuses dialog - + &Simulate - + Alt+S - + Simulate selected model. - + &Print - + Ctrl+P - + Print current model. - + &About - + Show the application's About box - - + + Recent Files - + + Set Menu Language + + + + &Read/Write - + Write - + Unable to find file %1! - + Error reading file %1: %2. - + &File - - - + + + + Companion - Models and Settings Editor - %1 - profile %2 - - - - + + + + + Companion - Models and Settings Editor - %1 - + A new version of Companion is available (version %1)<br>Would you like to download it? - - + + Compilation server requires registration, please check OpenTX web site - - - - + + The selected language will be used the next time you start Companion. + + + + + + + OK + + + + + The new theme will be loaded the next time you start Companion. + + + + + The icon size will be used the next time you start Companion. + + + + + + + Read Models and Settings From Tx - + The file %1 has not been recognized as a valid Models and Settings file Write anyway ? - - - - - - + + + + + + Backup Models and Settings From Tx - + Cannot check Models and Settings compatibility! Continue anyway? - + The transmitter firmware belongs to another product family, check file and preferences! - + The transmitter firmware is outdated, please upgrade! - + Write Models and Settings To Tx - - + + Write Firmware To Tx - + Cannot convert Models and Settings for use with this firmware, original data will be used - + Restore Models and Settings To Tx - + Could not restore Models and Settings to TX. The models and settings data file can be found at: %1 - + Firmware write failed - + Could not write firmware to to transmitter. The models and settings data file can be found at: %1 - + Cannot backup existing Models and Settings from TX. Firmware write process aborted - + Save transmitter Models and Settings to File - + Impossible to identify the radio on your system, please verify that the eeprom disk is connected. - + Read Tx Firmware to File - + About Companion - + Check for new version of Companion - + Show Companion contributors list - + Show Companion changelog - + + Configure transmitter start screen... + + + + &Write Models and Settings To Tx - + Write Models and Settings to transmitter - + &Read Models and Settings From Tx - + Read Models and Settings from transmitter - + Write Firmware - + Write firmware to transmitter - + Write Models and Settings from file to Tx - + Write Models and Settings from file to transmitter - + Save transmitter Models and Settings to file - + Save the Models and Settings from the transmitter to a file - + Read Firmware - + Read firmware from transmitter - - - Firmware Profiles + + &Configure connection software... - - &Edit + + Classic - - - Invalid Models and Settings File %1 + + The multicolor classical Companion icon theme - - Invalid binary Models and Settings File %1 + + A monochrome black icon theme - - &Help + + A monochrome white icon theme + + + + + A monochrome blue icon theme + + + + + Small + + + + + Use small toolbar icons + + + + + Use normal size toolbar icons + + + + + Normal + + + + + Use big toolbar icons + + + + + Big + + + + + Use huge toolbar icons + + + + + Huge + + + + + System default language + Use system default language in menus + + + + + Czech + + + + + Use Czech in menus + + + + + German + + + + + Use German in menus + + + + + English + + + + + Use English in menus + + + + + French + + + + + Use French in menus + + + + + Italian + + + + + Use Italian in menus + + + + + Hebrew + + + + + Use Hebrew in menus + + + + + Polish + + + + + Use Polish in menus + + + + + Portuguese + + + + + Use Portuguese in menus + + + + + Swedish + + + + + Use Swedish in menus + + + + + Russian + + + + + Use Russian in menus + + + + + + Firmware Profiles + + + + + Set Icon Theme + + + + + Set Icon Size + + + + + &Edit + + + + + &Settings + + + + + + Invalid Models and Settings File %1 + + + + + Invalid binary Models and Settings File %1 + + + + + &Help + + + + File - + Edit - + Help - + Ready @@ -3755,7 +3994,7 @@ p, li { white-space: pre-wrap; } - + --- @@ -3968,133 +4207,128 @@ p, li { white-space: pre-wrap; } - - Flight mode %1 trim - - - - + Flight mode %1 value - + Yellow - + Orange - + Red - + Winged Shadow How High - + Winged Shadow How High (not supported) - + FrSky Sensor Hub - - + + None - + Imperial - + Metric - + Extra Fine - + Fine - + Medium - + Coarse - + Exponential - + Count Up - + Count Down - + %1:%2, - + : %1 Channels, %2usec Delay - + Flight modes(%1) - + Flight mode(%1) - + Rudder - + Elevator - + Throttle - + Aileron @@ -4126,32 +4360,27 @@ p, li { white-space: pre-wrap; } - Own trim - - - - Own value - + Keys - + Sticks - + Keys + Sticks - - + + -GV%1 @@ -4590,12 +4819,12 @@ p, li { white-space: pre-wrap; } - + th9x - + er9x @@ -4821,8 +5050,8 @@ p, li { white-space: pre-wrap; } - - + + GV%1 @@ -4834,13 +5063,13 @@ p, li { white-space: pre-wrap; } - + ON - + OFF @@ -5256,7 +5485,7 @@ p, li { white-space: pre-wrap; } - + ersky9x @@ -5286,25 +5515,25 @@ p, li { white-space: pre-wrap; } - + openTx only accepts %1 points in all curves - - - + + + OpenTX on this board doesn't accept this function - - + + OpenTX doesn't accept this protocol - + OpenTX doesn't allow this number of channels @@ -5317,6 +5546,26 @@ We are really appreciative for that! The OpenTX/Companion Team. + + + Trim disabled + + + + + Own Trim + + + + + Use Trim from Flight mode %1 + + + + + Use Trim from Flight mode %1 + Own Trim as an offset + + Setup @@ -5899,6 +6148,172 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi + + appPreferencesDialog + + + Application Preferences + + + + + Simulator capture folder + + + + + Remember simulator switch values + + + + + + + Open Folder + + + + + User Splash Screens + + + + + Blue + + + + + Green + + + + + Red + + + + + Orange + + + + + Yellow + + + + + Include companion splashes + + + + + Only user defined splashes + + + + + Splash Screen Library + + + + + Files to keep + + + + + Simulator BackLight + + + + + Automatic Backup Folder + + + + + Only capture to clipboard + + + + + Joystick + + + + + Find Executable + + + + + Google Earth Executable + + + + + Calibrate + + + + + Enable + + + + + Show splash screen when Companion starts + + + + + Automatic check for OpenTX firmware updates + + + + + Automatic check for Companion updates + + + + + Offer to use wizard for new models + + + + + Enable automatic backup before writing firmware + + + + + Select your snapshot folder + + + + + + No joysticks found + + + + + Select your library folder + + + + + Select your Models and Settings backup folder + + + + + Select Google Earth executable + + + avrOutputDialog @@ -7072,131 +7487,93 @@ m2560 for v4.1 boards customizeSplashDialog - - Customize Splash + + Transmitter Splash Screen Editor - - Save Image + + + Invert - - Invert Color + + + Load FW - - Load Firmware + + + Load Pict - - Load Image + + + Save - + + Open Splash Library - + + + + ... - - Save Firmware - Save To Hex - - - - - <!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:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - - - - - Select an original firmware file - - - - + Open - - Select an image to customize your splash <br />or save actual firmware splash - - - - - - - + + + + + + Error - + Could not find bitmap to replace in file - + Open Image to load - + Images (%1) - - + + Cannot load %1. - - - Save your custimized firmware + + + Could not store image in firmware file %1 - - - Write to file - - - - - Error reading file %1 - - - - - Firmware correctly saved. - - - - - Firmware not saved. - - - - - PNG images (*.png);; + + The image file %1 could not be stored @@ -7315,6 +7692,291 @@ p, li { white-space: pre-wrap; } + + fwPreferencesDialog + + + Download Firmware and Voice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CheckBox + + + + + Set language of voice. +May be different from firmware language + + + + + SD Structure path + + + + + Processor ID + + + + + Default Stick Mode + + + + + Channel Order + + + + + Mode selection: + +Mode 1: + Left stick: Elevator, Rudder + Right stick: Throttle, Aileron + +Mode 2: + Left stick: Throttle, Rudder + Right stick: Elevator, Aileron + +Mode 3: + Left stick: Elevator, Aileron + Right stick: Throttle, Rudder + +Mode 4: + Left stick: Throttle, Aileron + Right stick: Elevator, Rudder + + + + + + + Mode 1 (RUD ELE THR AIL) + + + + + Mode 2 (RUD THR ELE AIL) + + + + + Mode 3 (AIL ELE THR RUD) + + + + + Mode 4 (AIL THR ELE RUD) + + + + + Options + + + + + Channel order + +This is used by the templated to determine which channel goes to what number output. + + + + + Open Folder + + + + + Offer to write FW to Tx after download + + + + + Profile Splash Screen + + + + + Profile Name + + + + + Import + + + + + Export + + + + + Save Profile + + + + + Menu Language + + + + + Voice Language + + + + + Profile Number + + + + + Firmware Type + + + + + Append version number to FW file name + + + + + Download Voice + + + + + FwInfo + + + + + Open Image + + + + + Clear Image + + + + + Download FW + + + + + Check for updates + + + + + Last downloaded release: %1 + + + + + The selected firmware has never been downloaded by Companion. + + + + + The selected firmware cannot be downloaded by Companion. + + + + + Select the folder replicating your SD structure + + + + + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? + + + + + Export profile As + + + + + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? + + + + + Open Profile to import + + + + + Open Image to load + + + + + Images (%1) + + + + + Error + + + + + Cannot load %1. + + + joystickDialog @@ -8059,70 +8721,68 @@ Press cancel to abort joystick calibration preferencesDialog + Preferences - - Language (requires restart) - - - - + SD Structure path - + Processor ID - + + Simulator capture folder - + + Use clipboard only - + Recent History Size - - + + Download - + Default Channel Order - + Default Stick Mode - + Channel order This is used by the templated to determine which channel goes to what number output. - + FwInfo - + Mode selection: Mode 1: @@ -8145,167 +8805,127 @@ Mode 4: - + Mode 1 (RUD ELE THR AIL) - + Mode 2 (RUD THR ELE AIL) - + Mode 3 (AIL ELE THR RUD) - + Mode 4 (AIL THR ELE RUD) - + Automatic Backup Folder - + Automatically add version number to the filename after download - + Voice - + Set language of voice. May be different from firmware language - + Firmware - - Theme - - - - - - Requires restart - - - - - Classic - - - - - Monochrome - - - - - MonoWhite - - - - - MonoBlue - - - - - Icon size - - - - - Small - - - - - Normal - - - - - Big - - - - - Huge - - - - + Find Executable - + Google Earth Executable - + Check for updates on startup - - + + + + ... - + + Splash library behaviour - + + Remember simulator switches + + + + + Include companion splashes - + + Only user defined splashes - + + Custom TX splash screen - + + Personal splash library - + + Joystick - - - - + + + + + + Open Folder + @@ -8347,216 +8967,225 @@ May be different from firmware language - CheckBox - + Check for updates - + Language - + Profile Name - + Export Profile - + Save Profile - + Import Profile - + + Blue Blu - + + Simu BackLight - + Check for selected Fw updates - + Ask use of wizard for new models - + Show Splash At Start - + Remember switches in simulator - + + Green - + + Red - + + Orange - + + Yellow - + Profile slot - + auto backup before write - + Ask for flashing after Download - + + Enable - + + Calibrate - + + Open Image - + + Invert Pixels - + Last downloaded release: %1 - + Image stored in settings - - + + No joysticks found - + Select your Models and Settings backup folder - + Select Google Earth executable - + Select the folder replicating your SD structure - + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? - + Export profile As - + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? - + Open Profile to import - + Open Image to load - + Images (%1) - - + + Error - + The selected firmware has never been downloaded by Companion. - + The selected firmware cannot be downloaded by Companion. - + Select your library folder - + Select your snapshot folder - - + + Cannot load %1. diff --git a/companion/src/translations/companion_it.ts b/companion/src/translations/companion_it.ts index e510c9c16..698605044 100644 --- a/companion/src/translations/companion_it.ts +++ b/companion/src/translations/companion_it.ts @@ -648,32 +648,32 @@ If blank then the input is considered to be "ON" all the time.trim3 - + Rud Direzionale - + Ele Elevatore - + Thr Motore - + Ail Alettoni - + Rotary Encoder %1 - + GVAR%1 @@ -681,17 +681,17 @@ If blank then the input is considered to be "ON" all the time. FlightModes - + Flight Mode %1 - + (%1) - + (default) @@ -1997,29 +1997,29 @@ Siete sicuri ? MainWindow - - - - + + + + File loaded Documento caricato - + Display previous warning again at startup ? Mostrare il precedente avviso all'avvio ? - + Checking for updates Controllo aggiornamenti - - - - - + + + + + Unable to check for updates. Impossibile controllare gli aggiornamenti. @@ -2028,21 +2028,21 @@ Siete sicuri ? Una nuova versione di companion9x è disponibile (versione %1)<br>Desiderate scaricarla ? - - - + + + Save As Salva come - + Executable (*.exe) Eseguibili (*.exe) - + New release available Nuova versione disponibile @@ -2051,22 +2051,22 @@ Siete sicuri ? Una nuova versione di companion9x è stata rilasciata, controllate il repository SVN - - + + No updates available at this time. Nessun aggiornamento disponibile. - + Would you like to launch the installer? Desiderate eseguire l'aggiornamento ? - - - - - + + + + + Error opening file %1: %2. Errore durante l'apertura del file %1: @@ -2077,13 +2077,13 @@ Siete sicuri ? Il firmware richiesto è troppo grande per la flash a causa delle opzioni selezionate - + Compilation server termporary failure, try later Guasto temporaneo del server di compilazione, riprovate più tardi - - + + Compilation server too busy, try later Il server di compilazione è occupato, provate più tardi @@ -2100,8 +2100,8 @@ Siete sicuri ? Il firmware selezionato è diventato troppo grande per la memoria della radio, a causa delle opzioni selezionate - - + + Unknown server failure, try later Errore del server sconosciuto, provare più tardi @@ -2110,7 +2110,7 @@ Siete sicuri ? Volete scrivere il nuovo firmware sulla radio ora ? - + Firmware %1 does not seem to have ever been downloaded. Version %2 is available. Do you want to download it now ? @@ -2119,42 +2119,42 @@ E' disponibile la versione %2. Volete scaricarla adesso ? - + A new version of %1 firmware is available (current %2 - newer %3). Do you want to download it now ? Una nuova versione del firmware %1 è disponibile (attuale %2 - nuova %3). Volete scaricarla ora ? - + Ignore this version (r%1)? Ignorare questa versione (r%1) ? - + Open Apri - - + + File saved Documento salvato - - - - - - - - - - - - - + + + + + + + + + + + + + Error Errore @@ -2167,7 +2167,7 @@ Volete scaricarla ora ? Companion9x - EEPROM Editor - firmware %1 - + Display previous message again at startup ? Mostrare il precedente avviso all'avvio ? @@ -2176,7 +2176,7 @@ Volete scaricarla ora ? Il firmware selezionato è diventato troppo grande per la flash, a causa delle opzioni slezionate - + Compilation server temporary failure, try later Guasto temporaneo del server di compilazione, riprovate più tardi @@ -2189,70 +2189,70 @@ Volete scaricarla ora ? Il firmware richiesto è troppo grande per la memoria della radio a causa delle opzioni selezionate - + Do you want to write the firmware to the transmitter now ? Volete scrivere il nuovo firmware sulla radio ora ? - - + + Yes Si - - + + No No - - + + Release Notes Note di aggiornamento - - + + Do you want to download release %1 now ? Volete scaricare la versione %1 adesso ? - + Release notes contain very important informations. Do you want to see them now ? Le note di rilascio includono informazioni molto importanti. Volete vederle ora ? - + Firmware updates Aggiornamenti firmware - + Current firmware does not provide release notes informations. Il firmware selezionato non fornisce note di aggiornamento. - + Cannot write file %1: %2. Non posso scrivere il file %1: %2. - - - - - + + + + + Taranis radio not found Radio taranis non trovata - - - - + + + + Impossible to identify the radio on your system, please verify the eeprom disk is connected. Impossibile identificare la radio sul vostro sistema, verificate che il disco della eeprom sia connesso. @@ -2273,16 +2273,16 @@ non è stato riconosciuto come una EEProm valida Scriverlo ugualmente ? - - - + + + Backup is impossible Impossibile effettuare il Backup - - - + + + The backup dir set in preferences does not exist La directory per i backup impostata in preferenze non esiste @@ -2295,8 +2295,8 @@ Scriverlo ugualmente ? Non posso controllare la compatibilità delle impostazioni! Continuare ugualmente ? - - + + Warning Avviso @@ -2317,7 +2317,7 @@ Scriverlo ugualmente ? Scrivi il fimware sulla radio - + Conversion failed Conversione fallita @@ -2330,7 +2330,7 @@ Scriverlo ugualmente ? Ripristina memoria sulla Radio - + Restore failed Ripristino fallito @@ -2347,7 +2347,7 @@ Scriverlo ugualmente ? Non posso aggiornare il firmware, la memoria dei settaggi originale può essere trovata in %1 - + Backup failed Salvataggio fallito @@ -2364,10 +2364,10 @@ Scriverlo ugualmente ? Scrivi il firmware in un documento - - - - + + + + Read Models and Settings From Tx Leggi le impostazioni dalla radio @@ -2376,22 +2376,44 @@ Scriverlo ugualmente ? Scrivere %1 nella memoria della radio ? - + Firmware does not longer fit in the Tx, due to selected firmware options Il firmware selezionato è diventato troppo grande per la radio, a causa delle opzioni selezionate - + Firmware does not fit in the Tx, due to selected firmware options Il firmware richiesto è troppo grande per la radio a causa delle opzioni selezionate - + + The selected language will be used the next time you start Companion. + + + + + + + OK + + + + + The new theme will be loaded the next time you start Companion. + + + + + The icon size will be used the next time you start Companion. + + + + Write Models and settings from %1 to the Tx? Scrivere le impostazioni sulla radio da %1? - + The file %1 has not been recognized as a valid Models and Settings file Write anyway ? @@ -2400,91 +2422,306 @@ non è stato riconosciuto come un file di impostazioni valido. Scriverlo ugualmente ? - - - - - - + + + + + + Backup Models and Settings From Tx Salva impostazioni della radio - + Cannot check Models and Settings compatibility! Continue anyway? Non posso controllare la compatibilità delle impostazioni! Continuare ugualmente ? - + The transmitter firmware belongs to another product family, check file and preferences! Il firmware nella radio è di una famiglia differente\n rispetto a quello delle impostazioni che si stanno scrivendo.\n Controllare il documento e le preferenze! - + The transmitter firmware is outdated, please upgrade! Il firmware della radio è obsoleto, pianificate un aggiornamento! - + Write Models and Settings To Tx Scrivi le impostazioni nella radio - - + + Write Firmware To Tx Scrivi il fimware sulla radio - + Cannot convert Models and Settings for use with this firmware, original data will be used Non posso convertire le impostazioni per questo firmware, verranno usate le impostazioni originali - + Restore Models and Settings To Tx Ripristina le impostazioni sulla Radio - + Could not restore Models and Settings to TX. The models and settings data file can be found at: %1 Non posso ripristinare le impostazioni sulla radio, il file originale può essere trovato in %1 - + Firmware write failed Scrittura del firmware fallita - + Could not write firmware to to transmitter. The models and settings data file can be found at: %1 Non posso aggiornare il firmware, le impostazioni originali possono essere trovate nel file %1 - + Cannot backup existing Models and Settings from TX. Firmware write process aborted Non riesco a salvare le impostazioni della radio, l'aggiornamento firmware viene annullato - + Save transmitter Models and Settings to File Salva le impostazioni dalla radio e scrivile in un documento - + Impossible to identify the radio on your system, please verify that the eeprom disk is connected. Impossibile identificare la radio sul vostro sistema, verificate che il disco della eeprom sia connesso. - + Read Tx Firmware to File Scrivi il firmware in un documento - + Copyright Copyright + + + &Old Preferences Dialog... + + + + + Used the old Preferences Dialog + + + + + &Application Preferences... + + + + + Edit application preferences + + + + + &Download Firmware and Voice... + + + + + Download firmware and voice files + + + + + Classic + + + + + The multicolor classical Companion icon theme + + + + + A monochrome black icon theme + + + + + A monochrome white icon theme + + + + + A monochrome blue icon theme + + + + + Small + + + + + Use small toolbar icons + + + + + Use normal size toolbar icons + + + + + Normal + Normale + + + + Use big toolbar icons + + + + + Big + + + + + Use huge toolbar icons + + + + + Huge + + + + + System default language + + + + + Use system default language in menus + + + + + Czech + Ceco + + + + Use Czech in menus + + + + + German + Tedesco + + + + Use German in menus + + + + + English + Inglese + + + + Use English in menus + + + + + French + Francese + + + + Use French in menus + + + + + Italian + Italiano + + + + Use Italian in menus + + + + + Hebrew + + + + + Use Hebrew in menus + + + + + Polish + + + + + Use Polish in menus + + + + + Portuguese + Portoghese + + + + Use Portuguese in menus + + + + + Swedish + Svedese + + + + Use Swedish in menus + + + + + Russian + + + + + Use Russian in menus + + + + + Set Menu Language + + + + + &Settings + + Version %1 (revision %2), %3 Versione %1 (revisione %2), %3 @@ -2506,88 +2743,86 @@ Scriverlo ugualmente ? Informazioni su companion9x - - + + &%1 %2 - + &New &Nuovo - + Create a new file Crea un nuovo documento - + &Open... &Apri... - + Open an existing file Apri un documente esistente - + &loadBackup... carica&Backup... - + Load backup from file Carica backup da file - + &Save &Salva - + Save the document to disk Salva il documento su disco - + Save &As... S&alva come... - + Save the document under a new name Salva il documento con un nuovo nome - + Lo&gs Lo&gs - + Ctrl+G - + Open log file Apri file di log - &Preferences... - &Preferenze... + &Preferenze... - Edit general preferences - Modifica preferenze + Modifica preferenze - + &Check for updates... &Controlla aggiornamenti... @@ -2596,7 +2831,7 @@ Scriverlo ugualmente ? Controlla per nuove versioni di companion9x - + Contributors &List... E&lenco collaboratori... @@ -2605,7 +2840,7 @@ Scriverlo ugualmente ? Mostra l'elenco di quelli che hanno contribuito a companion9x - + ChangeLog... Cambiamenti... @@ -2614,162 +2849,166 @@ Scriverlo ugualmente ? Mostra l'elenco dei cambiamenti in Companion9x - + A new release of Companion is available please check the OpenTX website! - + OpenTX Home Page: <a href='%1'>%1</a> - + The OpenTX Companion project was originally forked from <a href='%2'>eePe</a> - + If you've found this program useful, please support by <a href='%1'>donating</a> - + Version %1, %3 - + Firmware ChangeLog... Cambiamenti del firmware... - + Show firmware changelog Mostra l'elenco dei cambiamenti del firmware - + Compare... Confronta... - + Compare models Confronta due modelli - Customize your &TX... - Personalizza il &TX... + Personalizza il &TX... - + Customize the splash screen of your TX Personalizza la schermata di avvio della radio - + E&xit Es&ci - + Exit the application Esci dall'applicazione - + Cu&t Ta&glia - + Cut the current selection's contents to the clipboard Taglia la selezione negli appunti - + &Copy &Copia - + Copy the current selection's contents to the clipboard Copia la selezione negli appunti - + &Paste &Incolla - + Paste the clipboard's contents into the current selection Incolla gli appunti nella selezione corrente - + &Write Models and Settings To Tx Scri&vi le impostazioni nella radio - + Write Models and Settings to transmitter Scrivi le impostazioni nella radio - + &Read Models and Settings From Tx &Leggi le impostazioni dalla radio - + Read Models and Settings from transmitter Leggi le impostazioni dalla radio - + Write Firmware Scrivi il fimware - + Write firmware to transmitter Scrivi il firmware nella radio - + Write Models and Settings from file to Tx Scrivi le impostazioni nella radio da un documento - + Write Models and Settings from file to transmitter Scrivi le impostazioni nella radio da un documento - + Save transmitter Models and Settings to file Salva le impostazioni dalla radio e scrivile in un documento - + Save the Models and Settings from the transmitter to a file Leggi le impostazioni dalla radio e scrivile in un file - + Read Firmware Leggi firmware - + Read firmware from transmitter Leggi il firmware dalla radio - + + &Configure connection software... + + + + Configure software for reading from and writing to the transmitter Configura il software per la lettura/scrittura del microprocessore @@ -2782,23 +3021,23 @@ Scriverlo ugualmente ? Configura il programmatore del microprocessore - + &Read/Write &Leggi/Scrivi - + Write Scrivi - - + + Invalid Models and Settings File %1 File impostazioni non valido %1 - + Invalid binary Models and Settings File %1 File binario delle impostazioni non valido %1 @@ -2807,7 +3046,7 @@ Scriverlo ugualmente ? &Scrivi la memoria nella radio - + Ctrl+Alt+W Ctrl+Alt+W @@ -2820,7 +3059,7 @@ Scriverlo ugualmente ? &Leggi la memoria dalla radio - + Ctrl+Alt+R Ctrl+Alt+R @@ -2861,107 +3100,113 @@ Scriverlo ugualmente ? Leggi il firmware dalla radio - &Configure... - &Configura... + &Configura... Configure burning software Configura il programmatore del microprocessore - - - + + + + Companion - Models and Settings Editor - %1 - profile %2 - - - - + + + + + Companion - Models and Settings Editor - %1 - + A new version of Companion is available (version %1)<br>Would you like to download it? - - + + Compilation server requires registration, please check OpenTX web site - + About Companion - + Check for new version of Companion - + Show Companion contributors list - + Show Companion changelog - + + Configure transmitter start screen... + + + + &List programmers E&lenco programmatori - + List available programmers Lista dei programmatori supportati - + &Fuses... &Fuses... - + Show fuses dialog Mostra finestra di dialogo Fuses - + &Simulate Si&mula - + Alt+S - + Simulate selected model. Simula modello selezionato. - + &Print Stam&pa - + Ctrl+P - + Print current model. Stampa modello corrente. @@ -3014,12 +3259,12 @@ Scriverlo ugualmente ? Sposta il fuoco sulla finestra precedente - + &About &Informazioni su - + Show the application's About box Mostra la finestra Informazioni Su @@ -3032,24 +3277,34 @@ Scriverlo ugualmente ? Cambia orientazione Sinistra/Destra - - + + Recent Files Documenti Recenti - - + + Firmware Profiles Profili personalizzati - + + Set Icon Theme + + + + + Set Icon Size + + + + &File &Documento - + &Edit &Modifica @@ -3062,17 +3317,17 @@ Scriverlo ugualmente ? &Finestra - + &Help &Aiuto - + File Documento - + Edit Modifica @@ -3081,17 +3336,17 @@ Scriverlo ugualmente ? Scrivi - + Help Aiuto - + Ready Pronto - + Unable to find file %1! Impossibile trovare il file %1! @@ -3100,7 +3355,7 @@ Scriverlo ugualmente ? File impostazioni non valido %1 - + Error reading file %1: %2. Error durante la lettura del file %1: @@ -5740,7 +5995,7 @@ Se l'opzione selezionata lo stick motore verrà rovesciato. Il minimo sarà - + --- --- @@ -5949,43 +6204,41 @@ Se l'opzione selezionata lo stick motore verrà rovesciato. Il minimo sarà Fase di volo %1 - Own trim - Legato alla fase + Legato alla fase - Flight mode %1 trim - Trim Fase di Volo %1 + Trim Fase di Volo %1 - + Own value Legato alla fase - + Flight mode %1 value Valore Fase di Volo %1 - + Keys Tasti - + Sticks Leve - + Keys + Sticks Tasti + Leve - - + + -GV%1 -VG%1 @@ -6004,130 +6257,130 @@ Se l'opzione selezionata lo stick motore verrà rovesciato. Il minimo sarà - + Yellow Giallo - + Orange Arancione - + Red Rosso - + Winged Shadow How High Winged Shadow How High - + Winged Shadow How High (not supported) Winged Shadow How High (non supportato) - + FrSky Sensor Hub FrSky Sensor Hub - - + + None Nessuno - + Imperial Imperiale - + Metric Sistema Metrico - + Extra Fine Extra Fine - + Fine Fine - + Medium Medio - + Coarse Ampio - + Exponential Esponenziale - + Count Up Incrementa - + Count Down Decrementa - + %1:%2, %1:%2, - + : %1 Channels, %2usec Delay : %1 Canali, %2usec Ritardo - + Flight modes(%1) - + Flight mode(%1) - + Rudder Direzionale - + Elevator Elevatore - + Throttle Motore - + Aileron Alettoni - - + + GV%1 VG%1 @@ -6355,25 +6608,25 @@ Se l'opzione selezionata lo stick motore verrà rovesciato. Il minimo sarà open9x accetta solamente %1 punti in tutte le curve - + openTx only accepts %1 points in all curves openTx accetta solamente %1 punti in tutte le curve - - - + + + OpenTX on this board doesn't accept this function OpenTX in questa piattaforma non accetta la funzione - - + + OpenTX doesn't accept this protocol OpenTX non accetta questo protocollo - + OpenTX doesn't allow this number of channels OpenTX non consente questo numero di canali @@ -6399,12 +6652,12 @@ Se l'opzione selezionata lo stick motore verrà rovesciato. Il minimo sarà open9x accetta solamente %1 esponenziali - + th9x - + er9x @@ -6822,7 +7075,7 @@ la eeprom è 4096 bytes ma solo 2048 vengono utilizzati Abilita il menù HELI e le funzioni del piatto ciclico - + ersky9x @@ -7496,13 +7749,13 @@ la eeprom è 4096 bytes ma solo 2048 vengono utilizzati - + ON - + OFF @@ -7632,6 +7885,26 @@ We are really appreciative for that! The OpenTX/Companion Team. + + + Trim disabled + + + + + Own Trim + + + + + Use Trim from Flight mode %1 + + + + + Use Trim from Flight mode %1 + Own Trim as an offset + + Setup @@ -8217,6 +8490,172 @@ Se l'opzione selezionata lo stick motore verrà rovesciato. Il minimo sarà + + appPreferencesDialog + + + Application Preferences + + + + + Simulator capture folder + Cartella per cattura schermate + + + + Remember simulator switch values + + + + + + + Open Folder + Apri Cartella + + + + User Splash Screens + + + + + Blue + Blu + + + + Green + Verde + + + + Red + Rosso + + + + Orange + Arancione + + + + Yellow + Giallo + + + + Include companion splashes + Includi sfondi predefiniti + + + + Only user defined splashes + Solamente sfondi utente + + + + Splash Screen Library + + + + + Files to keep + + + + + Simulator BackLight + + + + + Automatic Backup Folder + Cartella per backup + + + + Only capture to clipboard + + + + + Joystick + Joystick + + + + Find Executable + + + + + Google Earth Executable + + + + + Calibrate + Calibrazione + + + + Enable + Abilita + + + + Show splash screen when Companion starts + + + + + Automatic check for OpenTX firmware updates + + + + + Automatic check for Companion updates + + + + + Offer to use wizard for new models + + + + + Enable automatic backup before writing firmware + + + + + Select your snapshot folder + Selezionare la cartella per le schermate del simulatore + + + + + No joysticks found + Nessun joystick trovato + + + + Select your library folder + Selezionare la cartella degli sfondi + + + + Select your Models and Settings backup folder + Selezionare la cartella per i backup + + + + Select Google Earth executable + + + avrOutputDialog @@ -9498,131 +9937,150 @@ companion9x. customizeSplashDialog - Customize Splash - Personalizza schermata di avvio + Personalizza schermata di avvio + + + + Transmitter Splash Screen Editor + + + + + + Invert + + + + + + Load FW + + + + + + Load Pict + + + + + + Save + - Save Image - Salva immagine + Salva immagine - Invert Color - Negativo + Negativo - Load Firmware - Carica Firmware + Carica Firmware - Load Image - Apri immagine + Apri immagine - + + Open Splash Library Apri libreria sfondi - + + + + ... - Save Firmware - Salva firmware + Salva firmware - - <!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:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - - - - Select an original firmware file - Seleziona un firmware (possibilmente non modificato) + Seleziona un firmware (possibilmente non modificato) - + Open Apri - Select an image to customize your splash <br />or save actual firmware splash - Selezionare un'immagine personalizzata <br/>o salvare l'immagine nel firmware caricato + Selezionare un'immagine personalizzata <br/>o salvare l'immagine nel firmware caricato - - - - + + + + + + Error Errore - + Could not find bitmap to replace in file Immagine non trovata nel firmware - + Open Image to load Apri l'immagine da caricare - + Images (%1) Immagini (%1) - - + + Cannot load %1. Non posso caricare %1. - - + + + Could not store image in firmware file %1 + + + + + The image file %1 could not be stored + + + Save your custimized firmware - Salva il firmware personalizzato + Salva il firmware personalizzato - - Write to file - Scrivi in un file + Scrivi in un file - Error reading file %1 - Error durante la lettura del file %1 + Error durante la lettura del file %1 - Firmware correctly saved. - Firmware salvato correttamente. + Firmware salvato correttamente. - Firmware not saved. - Firmware non slavato correttamente. + Firmware non slavato correttamente. - PNG images (*.png);; - Immagini PNG (*.png);; + Immagini PNG (*.png);; @@ -9781,6 +10239,320 @@ p, li { white-space: pre-wrap; } <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Proseguire solo se si sa cosa si sta facendo.</p></body></html> + + fwPreferencesDialog + + + Download Firmware and Voice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CheckBox + CheckBox + + + + Set language of voice. +May be different from firmware language + Impostazione del linguaggio della voce. +Può essere differente dalla lingua del firmware + + + + SD Structure path + Cartella Struttura Scheda SD + + + + Processor ID + ID del processore + + + Language + Lingua + + + + Default Stick Mode + Modalità Stick + + + Voice + Voce + + + + Channel Order + + + + + Mode selection: + +Mode 1: + Left stick: Elevator, Rudder + Right stick: Throttle, Aileron + +Mode 2: + Left stick: Throttle, Rudder + Right stick: Elevator, Aileron + +Mode 3: + Left stick: Elevator, Aileron + Right stick: Throttle, Rudder + +Mode 4: + Left stick: Throttle, Aileron + Right stick: Elevator, Rudder + + + Modalità stick: + +Modo 1: + Stick sinistro: Elevatore, Direzionale + Stick destro: Motore, Alettoni + +Mode 2: + Stick sinistro: Motore, Direzionale + Stick destro: Elevatore, Alettoni + +Mode 3: + Stick sinistro: Elevatore, Alettoni + Stick destro: Motore, Direzionale + +Mode 4: + Stick sinistro: Motore, Alettoni + Stick destro: Elevatore, Direzionale + + + + + + Mode 1 (RUD ELE THR AIL) + Modo 1 (DIR ELE MOT ALE) + + + + Mode 2 (RUD THR ELE AIL) + Modo 2 (DIR MOTO ELE ALE) + + + + Mode 3 (AIL ELE THR RUD) + Modo 3 (ALE ELE MOT DIR) + + + + Mode 4 (AIL THR ELE RUD) + Modo 4 (ALE MOT ELE DIR) + + + + Options + + + + + Channel order + +This is used by the templated to determine which channel goes to what number output. + Ordinamento canali + +Utilizzato dai Modelli per stabilire quale uscita viene assegnata ai canali. + + + + Open Folder + Apri Cartella + + + + Offer to write FW to Tx after download + + + + + Profile Splash Screen + + + + + Profile Name + Descrizione + + + + Import + + + + + Export + + + + + Save Profile + Salva Profilo + + + + Menu Language + + + + + Voice Language + Lingua per le voci + + + + Profile Number + + + + + Firmware Type + + + + + Append version number to FW file name + + + + + Download Voice + + + + + FwInfo + + + + + Open Image + Apri immagine + + + + Clear Image + + + + + Download FW + + + + + Check for updates + Verifica aggiornamenti + + + + Last downloaded release: %1 + Ultima versione scaricata: %1 + + + + The selected firmware has never been downloaded by Companion. + + + + + The selected firmware cannot be downloaded by Companion. + + + + + Select the folder replicating your SD structure + Selezionare la cartella contenente la struttura della scheda SD + + + + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? + La descrizione del profilo è vuota. Il profilo %1 sarà cancellato.<br>Siete sicuri ? + + + + Export profile As + Esporta il profilo come + + + + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? + La descrizione del profilo è vuota. Il profilo %1 sarà sovrascritto.<br>Siete sicuri ? + + + + Open Profile to import + Apri il profile da importare + + + + Open Image to load + Apri l'immagine da caricare + + + + Images (%1) + Immagini (%1) + + + + Error + Errore + + + + Cannot load %1. + Non posso caricare %1. + + joystickDialog @@ -10536,27 +11308,27 @@ Premere annulla per cancellare l'operazione preferencesDialog + Preferences Preferenze - Language (requires restart) - Lingua (richiede il riavvio) + Lingua (richiede il riavvio) - + Firmware Firmware - + Check for updates on startup Controllo aggiornamenti all'avvio - + FwInfo @@ -10565,23 +11337,23 @@ Premere annulla per cancellare l'operazione Mostra schermata iniziale - + Recent History Size File recenti - - + + Download Scarica - + Default Channel Order Ordine canali predefinito - + Channel order This is used by the templated to determine which channel goes to what number output. @@ -10590,12 +11362,12 @@ This is used by the templated to determine which channel goes to what number out Utilizzato dai Modelli per stabilire quale uscita viene assegnata ai canali. - + Default Stick Mode Modalità Stick - + Mode selection: Mode 1: @@ -10636,63 +11408,75 @@ Mode 4: - - + + + + ... - + + Enable Abilita - + + Remember simulator switches + + + + + Calibrate Calibrazione - - - - + + + + + + Open Folder Apri Cartella - + Automatic Backup Folder Cartella per backup - + Set language of voice. May be different from firmware language Impostazione del linguaggio della voce. Può essere differente dalla lingua del firmware - + Voice Voce - + Ask for flashing after Download Scrivere dopo aggiornamento - + Export Profile Esporta Profilo - + Import Profile Importa Profilo - + + Custom TX splash screen Schermo personalizzato @@ -10701,36 +11485,39 @@ Può essere differente dalla lingua del firmware Cartella per backup - + auto backup before write Esegui backup prima di ogni scrittura - + Automatically add version number to the filename after download Aggiungi automaticamente il numero di versione al nome del file dopo il download - + SD Structure path Cartella Struttura Scheda SD - + Processor ID ID del processore - + + Simulator capture folder Cartella per cattura schermate - + + Use clipboard only Usa solo gli appunti + @@ -10772,208 +11559,168 @@ Può essere differente dalla lingua del firmware - CheckBox CheckBox - + Check for updates Verifica aggiornamenti - + Check for selected Fw updates Controlla aggiornamenti Fw - + Ask use of wizard for new models Chiedi l'utilizzo dell'assistente per i nuovi modelli - + Remember switches in simulator Ricorda la posizione degli switches nel simulatore - + Mode 1 (RUD ELE THR AIL) Modo 1 (DIR ELE MOT ALE) - + Mode 2 (RUD THR ELE AIL) Modo 2 (DIR MOTO ELE ALE) - + Mode 3 (AIL ELE THR RUD) Modo 3 (ALE ELE MOT DIR) - + Mode 4 (AIL THR ELE RUD) Modo 4 (ALE MOT ELE DIR) - + Profile slot Profilo personalizzato - + Find Executable - + Google Earth Executable - + Profile Name Descrizione - + Save Profile Salva Profilo - + + Blue Blu - + Language Lingua - + + Green Verde - + Show Splash At Start - + + Red Rosso - + + Orange Arancione - + + Yellow Giallo - + + Personal splash library Libreria sfondi personale - + + Splash library behaviour Caratteristiche libreria sfondi - + + Include companion splashes Includi sfondi predefiniti - + + Only user defined splashes Solamente sfondi utente - - Theme - - - - - - Requires restart - - - - - Classic - - - - - Monochrome - - - - - MonoWhite - - - - - MonoBlue - - - - - Icon size - - - - - Small - - - - Normal - Normale + Normale - - Big - - - - - Huge - - - - + + Joystick Joystick - + + Open Image Apri immagine - + + Invert Pixels Negativo - + + Simu BackLight Colore Retroilluminazione - + Last downloaded release: %1 Ultima versione scaricata: %1 @@ -10986,48 +11733,48 @@ Può essere differente dalla lingua del firmware Il firmware selezionato non può essere scaricato da companion9x. - + Image stored in settings Immagine predefinita - - + + No joysticks found Nessun joystick trovato - + Select your Models and Settings backup folder Selezionare la cartella per i backup - + Select Google Earth executable - + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? La descrizione del profilo è vuota. Il profilo %1 sarà cancellato.<br>Siete sicuri ? - + Select your library folder Selezionare la cartella degli sfondi - + The selected firmware has never been downloaded by Companion. - + The selected firmware cannot be downloaded by Companion. - + Select your snapshot folder Selezionare la cartella per le schermate del simulatore @@ -11036,44 +11783,44 @@ Può essere differente dalla lingua del firmware Selezionare la cartella per i backup - + Select the folder replicating your SD structure Selezionare la cartella contenente la struttura della scheda SD - + Export profile As Esporta il profilo come - + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? La descrizione del profilo è vuota. Il profilo %1 sarà sovrascritto.<br>Siete sicuri ? - + Open Profile to import Apri il profile da importare - + Open Image to load Apri l'immagine da caricare - + Images (%1) Immagini (%1) - - + + Error Errore - - + + Cannot load %1. Non posso caricare %1. diff --git a/companion/src/translations/companion_pl.ts b/companion/src/translations/companion_pl.ts index 9a73c401b..351ce03ed 100644 --- a/companion/src/translations/companion_pl.ts +++ b/companion/src/translations/companion_pl.ts @@ -618,32 +618,32 @@ p, li { white-space: pre-wrap; } trymer 3 - + Rud SK - + Ele SW - + Thr Gaz - + Ail Lotki - + Rotary Encoder %1 Pokrętło %1 - + GVAR%1 ZmGl%1 @@ -651,17 +651,17 @@ p, li { white-space: pre-wrap; } FlightModes - + Flight Mode %1 Faza lotu %1 - + (%1) (%1) - + (default) (bazowa) @@ -1936,119 +1936,119 @@ Jesteś pewien ? MainWindow - - - - + + + + File loaded Plik załadowany - + Display previous warning again at startup ? Wyświetlić poprzednie ostrzeżenie przy uruchomieniu? - + Checking for updates Sprawdź aktualizacje - - - - - + + + + + Unable to check for updates. Nie mogę sprawdzić aktualizacji. - - - + + + Save As Zapisz jako - + Executable (*.exe) Wykonywalny (*.exe) - + New release available Dostępne jest nowe wydanie - - + + No updates available at this time. Brak aktualizacji dostępnych teraz. - + Would you like to launch the installer? Chcesz uruchomić instalator? - - - - - - - - - - - - - + + + + + + + + + + + + + Error Błąd - - - - - + + + + + Error opening file %1: %2. Błąd otwarcia pliku %1: %2. - + Compilation server termporary failure, try later Serwer kompilacji chwilowo nieczynny, spróbuj później - + Display previous message again at startup ? Czy ponownie wyświetlić poprzednią informację przy uruchomieniu? - + Compilation server temporary failure, try later Serwer kompilacji chwilowo nieczynny, spróbuj później - - + + Compilation server too busy, try later Serwer kompilacji zbyt zajęty, spróbuj później - - + + Unknown server failure, try later Nieznany błąd serwera, spróbuj później - + Firmware %1 does not seem to have ever been downloaded. Version %2 is available. Do you want to download it now ? @@ -2058,31 +2058,31 @@ Pobrać teraz? - - + + Yes Tak - - + + No Nie - - + + Release Notes Informacje o wydaniu - - + + Do you want to download release %1 now ? Chcesz pobrać wydanie %1 teraz? - + A new version of %1 firmware is available (current %2 - newer %3). Do you want to download it now ? Jest dostępna nowa wersja firmware %1 @@ -2090,167 +2090,395 @@ Do you want to download it now ? Chcesz pobrać teraz? - + Ignore this version (r%1)? Zignorować wersję (r%1)? - + Release notes contain very important informations. Do you want to see them now ? Opis wydania zawiera bardzo ważne informacje. Chcesz je przeczytać teraz? - - + + File saved Plik zapisany - + Firmware updates Aktualizacja firmware - + Current firmware does not provide release notes informations. Aktualny firmware nie zawiera opisu wydania. - + Cannot write file %1: %2. Nie mogę zapisać pliku %1: %2. - - - - - + + + + + Taranis radio not found Nie znaleziono Radia Taranis - - - - + + + + Impossible to identify the radio on your system, please verify the eeprom disk is connected. Identyfikacja radia niemożliwa w Twoim systemie, proszę sprawdzić podłączony dysk eeprom. - - - + + + Backup is impossible Backup jest niemożliwy do wykonania - - - + + + The backup dir set in preferences does not exist Brak ustawień ścieżki backupu - - + + Warning Ostrzeżenie - + Conversion failed Konwersja nieudana - + Restore failed Zapis nieudany - + Backup failed Backup nieudany - + Copyright - - + &General Preferences... + &Główne Preferencje... + + + + Configure transmitter start screen... + Ustawienia ekranu startowego radia... + + + + &Configure connection software... + &Ustawienia oprogramowania łączącego... + + + + Classic + Klasyczna + + + + The multicolor classical Companion icon theme + Wielokolorowy klasyczny wygląd ikon Companion + + + + A monochrome black icon theme + Monochromatyczny czarny wygląd ikon + + + + A monochrome white icon theme + Monochromatyczny biały wygląd ikon + + + + A monochrome blue icon theme + Monochromatyczny niebieski wygląd ikon + + + + Small + Małe + + + + Use small toolbar icons + Użyj małych ikon paska narzędzi + + + + Use normal size toolbar icons + Użyj normalnych ikon paska narzędzi + + + + Normal + Normalne + + + + Use big toolbar icons + Użyj dużych ikon paska narzędzi + + + + Big + Duże + + + + Use huge toolbar icons + Użyj olbrzymich ikon paska narzędzi + + + + Huge + Olbrzymie + + + + System default language + Podstawowy język systemu + + + + Use system default language in menus + Użyj podstawowego języka systemu w menu + + + + Czech + Czeski + + + + Use Czech in menus + Użyj Czeskiego w menu + + + + German + Niemiecki + + + + Use German in menus + Użyj Niemieckiego w menu + + + + English + Angielski + + + + Use English in menus + Użyj Angielskiego w menu + + + + French + Francuski + + + + Use French in menus + Użyj Francuskiego w menu + + + + Italian + Włoski + + + + Use Italian in menus + Użyj Włoskiego w menu + + + + Hebrew + Hebrajski + + + + Use Hebrew in menus + Użyj Hebrajskiego w menu + + + + Polish + Polski + + + + Use Polish in menus + Użyj Polskiego w menu + + + + Portuguese + Portugalski + + + + Use Portuguese in menus + Użyj Portualskiego w menu + + + + Swedish + Szwedzki + + + + Use Swedish in menus + Użyj Szwedzkiego w menu + + + + Russian + Rosyjski + + + + Use Russian in menus + Użyj Rosyjskiego w menu + + + + Set Icon Theme + Ustaw wygląd ikon + + + + Set Icon Size + Ustaw wielkość ikon + + + + &Settings + &Ustawienia + + + + &%1 %2 - - - + + + + Companion - Models and Settings Editor - %1 - profile %2 Companion - Edytor Modeli i Ustawień - %1 - profil %2 - - - - + + + + + Companion - Models and Settings Editor - %1 Companion - Edytor Modeli i Ustawień - %1 - + A new version of Companion is available (version %1)<br>Would you like to download it? Dostępna jest nowy Companion (wersja %1)<br>Chcesz ją pobrać ? - + A new release of Companion is available please check the OpenTX website! Nowe wydanie Companion jest dostępne, proszę sprawdzić stronę OpenTX! - + Firmware does not longer fit in the Tx, due to selected firmware options Firmware już nie mieści się w pamięci radia ze względu na wybrane parametry - - + + Compilation server requires registration, please check OpenTX web site Serwer kompilacji wymaga rejestracji, proszę odwiedzić stronę OpenTX - + Firmware does not fit in the Tx, due to selected firmware options Firmware już nie mieści się w pamięci radia ze względu na wybrane parametry - + Do you want to write the firmware to the transmitter now ? Chcesz wgrać firmware do radia teraz? + + + The selected language will be used the next time you start Companion. + Wybrany język będzie użyty po ponownym uruchomieniu Comapnion. + + + + OK + OK + + + + The new theme will be loaded the next time you start Companion. + Wybrany wygląd będzie użyty po ponownym uruchomieniu Comapnion. + + + + The icon size will be used the next time you start Companion. + Wybrana wiekość ikon będzie użyta po ponownym uruchomieniu Comapnion. + + + Open Otwórz - - - - + + + + Read Models and Settings From Tx Wczytaj Modele i Ustawienia z radia - + Write Models and settings from %1 to the Tx? Czy zapisać Modele i Ustawienia z %1 do radia ? - + The file %1 has not been recognized as a valid Models and Settings file Write anyway ? @@ -2259,501 +2487,520 @@ nie został rozpoznany jako prawidłowy pli Modeli i Ustawień. Czy mimo wszystko zapisać? - - - - - - + + + + + + Backup Models and Settings From Tx Zbakupuj Modele i Ustawienia z radia - + Cannot check Models and Settings compatibility! Continue anyway? Nie mogę potwierdzić kompatybilności Modeli i Ustawień. Kontynuować? - + The transmitter firmware belongs to another product family, check file and preferences! Firmwqare radia nalezy do innej rodziny produktów, sprawdź plik i preferencje ! - + The transmitter firmware is outdated, please upgrade! Firmware radia jest przestarzały, proszę zaktualizować! - + Write Models and Settings To Tx Zapisz Modele i Ustawienia do radia - - + + Write Firmware To Tx Zapisz firmware do radia - + Cannot convert Models and Settings for use with this firmware, original data will be used Nie mogę skonwertować Modeli i Ustawień na ten rodzaj firmware, zostaną użyte oryginalne dane - + Restore Models and Settings To Tx Odtwórz Modele i Ustawienia do radia - + Could not restore Models and Settings to TX. The models and settings data file can be found at: %1 Nie mogę odtworzyć Modeli i Ustawień do radia. Plik modeli i ustawień mozna znaleźć w: %1 - + Firmware write failed Zapis firmawe nie powiódł się - + Could not write firmware to to transmitter. The models and settings data file can be found at: %1 Nie mogę zapisać Firmware do radia. Plik modeli i ustawień mozna znaleźć w: %1 - + Cannot backup existing Models and Settings from TX. Firmware write process aborted Nie mogę zbackupować Modeli i Ustawień z radia, Zapis Firmawe przerwany - + Save transmitter Models and Settings to File Zapisz Modele i Ustawienia z radia do pliku - + Impossible to identify the radio on your system, please verify that the eeprom disk is connected. Identyfikacja radia niemożliwa w Twoim systemie, proszę sprawdzić podłączony dysk eeprom. - + Read Tx Firmware to File Odczytaj firmware z radia do pliku - + OpenTX Home Page: <a href='%1'>%1</a> Strona domowa OpenTX: <a href='%1'>%1</a> - + The OpenTX Companion project was originally forked from <a href='%2'>eePe</a> Projekt Companion odłączony z oryginalnego <a href='%2'>eePe</a> - + If you've found this program useful, please support by <a href='%1'>donating</a> Jeśli uważasz, że ten program jest użyteczny, wesprzyj poprzez <a href='%1'>donację</a> - + Version %1, %3 Wersja %1, %3 - + About Companion O aplikacji Companion - + &New &Nowy - + Create a new file Utwórz nowy plik - + &Open... &Otwórz... - + Open an existing file Otwórz istniejący plik - + &loadBackup... &Załaduj backup... - + Load backup from file Załaduj backup z pliku - + &Save &Zapisz - + Save the document to disk Zapisz dokument na dysku - + Save &As... Zapisz j&ako... - + Save the document under a new name Zapisz dokument pod nową nazwą - + Lo&gs Lo&gi - + Ctrl+G - + Open log file Otwórz plik logów - - &Preferences... - &Preferencje... - - - Edit general preferences - Edycja głównych ustawień + Edycja głównych ustawień - + &Check for updates... &Sprawdź aktualizacje... - + Check for new version of Companion Sprawdź nową wersję Companion - + Show Companion contributors list Pokaz listę twórców Companion - + Show Companion changelog Zobacz zmiany w Companion - + &Write Models and Settings To Tx &Zapisz Modele i Ustawienia do radia - + Write Models and Settings to transmitter Zapisz Modele i Ustawienia do radia - + &Read Models and Settings From Tx &Wczytaj Modele i Ustawienia z radia - + Read Models and Settings from transmitter Wczytaj Modele i Ustawienia z radia - + Write Firmware Zapisz firmware - + Write firmware to transmitter Zapisz firmware do radia - + Write Models and Settings from file to Tx Zapisz Modele i Ustawienia z pliku do radia - + Write Models and Settings from file to transmitter Zapisz Modele i Ustawienia z pliku do radia - + Save transmitter Models and Settings to file Zapisz Modele i Ustawienia do pliku - + Save the Models and Settings from the transmitter to a file Zapisz Modele i Ustawienia z radia do pliku - + Read Firmware Wczytaj Firmware - + Read firmware from transmitter Wczytaj Firmware z radia - + Configure software for reading from and writing to the transmitter Ustawienia oprogramowania do odczytu i zapisu radia - + &Read/Write &Odczyt/Zapis - + Write Zapis - - + + Invalid Models and Settings File %1 Błędny plik %1 Modeli i Ustawień - + Invalid binary Models and Settings File %1 Błędny binarny plik %1 Modeli i Ustawień - + Contributors &List... &Lista twórców... - + + &Old Preferences Dialog... + + + + + Used the old Preferences Dialog + + + + + &Application Preferences... + + + + + Edit application preferences + + + + + &Download Firmware and Voice... + + + + + Download firmware and voice files + + + + ChangeLog... Zmiany... - + Firmware ChangeLog... Zmiany firmware... - + Show firmware changelog Zobacz zmiany w firmware - + Compare... Porównaj... - + Compare models Porównaj modele - - Customize your &TX... - &Personalizuj swoje radio... - - - + Customize the splash screen of your TX Personalizuj obrazek na swoim radiu - + E&xit Za&kończ - + Exit the application Zakończ aplikację companion9x - + Cu&t &Wytnij - + Cut the current selection's contents to the clipboard Wytnij zaznaczenie do schowka - + &Copy &Kopiuj - + Copy the current selection's contents to the clipboard Kopiuj zaznaczenie do schowka - + &Paste &Wklej - + Paste the clipboard's contents into the current selection Wklej zawartość schowka na aktualnej pozycji - + Ctrl+Alt+W - + Ctrl+Alt+R - - &Configure... - &Konfiguracja... - - - + &List programmers &Lista programatorów - + List available programmers Lista dostępnych programatorów - + &Fuses... Ustawienia &mikro-kontrolera... - + Show fuses dialog Pokaż okno ustawień mikro-kontrolera - + &Simulate &Symulator - + Alt+S - + Simulate selected model. Symulacja wybranego modelu. - + &Print &Drukuj - + Ctrl+P - + Print current model. Wydrukuj aktualny model. - + &About &O aplikacji - + Show the application's About box O aplikacji companion9x - - + + Recent Files Poprzednie pliki - - + + Firmware Profiles Profile firmware - + + Set Menu Language + Ustaw język menu + + + &File &Plik - + &Edit &Edycja - + &Help &Pomoc - + File Plik - + Edit Edycja - + Help Pomoc - + Ready Gotowe - + Unable to find file %1! Nie mogę znaleźć pliku %1! - + Error reading file %1: %2. Błąd odczytu pliku %1: @@ -4373,13 +4620,13 @@ p, li { white-space: pre-wrap; } - + ON Włącz - + OFF Wyłącz @@ -4409,12 +4656,12 @@ p, li { white-space: pre-wrap; } !Krzywa(%1) - + th9x - + er9x @@ -4835,7 +5082,7 @@ p, li { white-space: pre-wrap; } Uaktywnij menu HELI i cyklicznych mikserów - + ersky9x @@ -5059,123 +5306,123 @@ p, li { white-space: pre-wrap; } Faza lotu %1 - + Yellow Żółty - + Orange Pomarańczowy - + Red Czerwony - + Winged Shadow How High - + Winged Shadow How High (not supported) Winged Shadow How High (nie obsługiwane) - + FrSky Sensor Hub Hub sensora FrSky - - + + None Żaden - + Imperial Imperialne - + Metric Metryczne - + Extra Fine Bardzo dokładne - + Fine Dokładne - + Medium Średni - + Coarse Gruby - + Exponential Eksponencjalny - + Count Up Licz - + Count Down Odliczaj - + %1:%2, - + : %1 Channels, %2usec Delay :Kanały %1, opóźnienie %2usX - + Flight modes(%1) Fazy lotu(%1) - + Flight mode(%1) Faza lotu (%1) - + Rudder SK - + Elevator SW - + Throttle Gaz - + Aileron Lotki @@ -5186,7 +5433,7 @@ p, li { white-space: pre-wrap; } - + --- @@ -5317,52 +5564,50 @@ p, li { white-space: pre-wrap; } Zwiększanie - Own trim - Własne trymery + Własne trymery - Flight mode %1 trim Flight phase %1 trim - Trymer fazy lotu FL%1 + Trymer fazy lotu FL%1 - + Own value Własny Wartość - + Flight mode %1 value Flight phase %1 value Wartość Fazy lotu FL%1 - + Keys Przyciski - + Sticks Drążki - + Keys + Sticks Przyciski i Drążki - - + + -GV%1 -ZG%1 - - + + GV%1 ZG%1 @@ -5380,25 +5625,25 @@ p, li { white-space: pre-wrap; } Równoległe użycie expo i krzywych nie jest dłużej wspierane - + openTx only accepts %1 points in all curves openTx dopuszcza tylko %1 punktów dla wszystkich krzywych - - - + + + OpenTX on this board doesn't accept this function OpenTX na tej platformie nie dopuszcza tej funkcji - - + + OpenTX doesn't accept this protocol OpenTX nie obsługuje tego protokołu - + OpenTX doesn't allow this number of channels OpenTX nie obsługuje tej ilości kanałów @@ -5425,6 +5670,26 @@ Bardzo nam na tym zależy i są to dla nas bardzo wazne elementy Zespół OpenTX/Companion. + + + Trim disabled + + + + + Own Trim + + + + + Use Trim from Flight mode %1 + + + + + Use Trim from Flight mode %1 + Own Trim as an offset + + Setup @@ -6009,6 +6274,172 @@ Wolne obroty będą na górze, trymer i ostrzeżenie o otwartym gazie również Odlicznie + + appPreferencesDialog + + + Application Preferences + + + + + Simulator capture folder + Katalog zapisu symulatora + + + + Remember simulator switch values + + + + + + + Open Folder + Otwórz katalog + + + + User Splash Screens + + + + + Blue + Niebieski + + + + Green + Zielony + + + + Red + Czerwony + + + + Orange + Pomarańczowy + + + + Yellow + Żółty + + + + Include companion splashes + Załącz bazowe logo + + + + Only user defined splashes + Własne logo + + + + Splash Screen Library + + + + + Files to keep + + + + + Simulator BackLight + + + + + Automatic Backup Folder + Automatyczny Katalog Backupów + + + + Only capture to clipboard + + + + + Joystick + + + + + Find Executable + Znajdź wykonywalny plik + + + + Google Earth Executable + Wykonywalny plik Google Earth + + + + Calibrate + Kalibruj + + + + Enable + + + + + Show splash screen when Companion starts + + + + + Automatic check for OpenTX firmware updates + + + + + Automatic check for Companion updates + + + + + Offer to use wizard for new models + + + + + Enable automatic backup before writing firmware + + + + + Select your snapshot folder + Katalog obrazków dla symulatora + + + + + No joysticks found + Brak oysticka + + + + Select your library folder + Wybierz katalog bibliteki + + + + Select your Models and Settings backup folder + Wybierz folder do backupowania Modeli i Ustawień + + + + Select Google Earth executable + Wybierz wykonywalny plik Google Earth + + avrOutputDialog @@ -7210,132 +7641,151 @@ m2560 dla platformy V4 customizeSplashDialog - Customize Splash - Zrób własne loga + Zrób własne loga + + + + Transmitter Splash Screen Editor + + + + + + Invert + + + + + + Load FW + + + + + + Load Pict + + + + + + Save + - Save Image - Zapisz logo + Zapisz logo - Invert Color - Odwróć kolory + Odwróć kolory - - <!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:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - - Load Firmware - Otwórz firmware + Otwórz firmware - Load Image - Otwórz logo + Otwórz logo - + + Open Splash Library Otwórz bibliotekę obrazków - + + + + ... - Save Firmware Save To Hex - Zapisz firmware + Zapisz firmware - - - Select an original firmware file - Wybierz oryginalny plik z firmware + Wybierz oryginalny plik z firmware - + Open Otwórz - Select an image to customize your splash <br />or save actual firmware splash - Wybierz obrazek do spersonalizowania twojego ekranu <br />lub wgraj aktualny obrazek do firmware + Wybierz obrazek do spersonalizowania twojego ekranu <br />lub wgraj aktualny obrazek do firmware - - - - + + + + + + Error Błąd - + Could not find bitmap to replace in file Nie mogę znaleźć bitmapy w celu zastąpienia pliku - + Open Image to load Otwórz obrazek do załadowania - + Images (%1) Obrazki (%1) - - + + Cannot load %1. Nie mogę wczytać %1. - - + + + Could not store image in firmware file %1 + + + + + The image file %1 could not be stored + + + Save your custimized firmware - Zgraj spersonalizowane firmware + Zgraj spersonalizowane firmware - - Write to file - Zapis do pliku + Zapis do pliku - Error reading file %1 - Błąd otwarcia pliku %1 + Błąd otwarcia pliku %1 - Firmware correctly saved. - Firmware zostało prawidłowo zapisane. + Firmware zostało prawidłowo zapisane. - Firmware not saved. - Firmware nie zostało zapisane. + Firmware nie zostało zapisane. - PNG images (*.png);; - Obrazki PNG (*.png);; + Obrazki PNG (*.png);; @@ -7502,6 +7952,300 @@ p, li { white-space: pre-wrap; } <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Rób to tylko wtedy gdy masz absolutną pewność i wiedzę.</p></body></html> + + fwPreferencesDialog + + + Download Firmware and Voice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CheckBox + + + + + Set language of voice. +May be different from firmware language + Ustaw język komuniaktów głosowych (). +Moze być inny od języka firmware + + + + SD Structure path + Struktura karty SD + + + + Processor ID + ID procesora + + + Language + Język + + + + Default Stick Mode + Bazowy mod drążków + + + Voice + Komuniakty głosowe + + + + Channel Order + + + + + Mode selection: + +Mode 1: + Left stick: Elevator, Rudder + Right stick: Throttle, Aileron + +Mode 2: + Left stick: Throttle, Rudder + Right stick: Elevator, Aileron + +Mode 3: + Left stick: Elevator, Aileron + Right stick: Throttle, Rudder + +Mode 4: + Left stick: Throttle, Aileron + Right stick: Elevator, Rudder + + + + + + + Mode 1 (RUD ELE THR AIL) + Mod 1 (SK.SW.Gaz.Lot) + + + + Mode 2 (RUD THR ELE AIL) + Mod 2 (SK.Gaz.SW.Lot) + + + + Mode 3 (AIL ELE THR RUD) + + + + + Mode 4 (AIL THR ELE RUD) + Mod 4 (Lot.Gaz.SW.SK) + + + + Options + + + + + Channel order + +This is used by the templated to determine which channel goes to what number output. + + + + + Open Folder + Otwórz katalog + + + + Offer to write FW to Tx after download + + + + + Profile Splash Screen + + + + + Profile Name + Nazwa profilu + + + + Import + + + + + Export + + + + + Save Profile + Zapisz profil + + + + Menu Language + + + + + Voice Language + Język komunikatów + + + + Profile Number + + + + + Firmware Type + + + + + Append version number to FW file name + + + + + Download Voice + + + + + FwInfo + + + + + Open Image + Otwórz obrazek + + + + Clear Image + + + + + Download FW + + + + + Check for updates + Sprawdź aktualizacje + + + + Last downloaded release: %1 + Ostatnie pobrane wydanie: %1 + + + + The selected firmware has never been downloaded by Companion. + Wybrany firmware nie został nigdy pobrany przez Companion. + + + + The selected firmware cannot be downloaded by Companion. + Companion nie moze pobrac wybranego firmware. + + + + Select the folder replicating your SD structure + Wybierz folder do zreplikowania struktury Twojej karty SD + + + + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? + Nazwa profilu jest pusta, slot %1 będzie skasowany.<br>Jesteś pewien ? + + + + Export profile As + Wyeksportuj profil jako + + + + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? + Slot profilu nie jest pusty, slot %1 zostanie zapisany.<br>Jesteś pewien ? + + + + Open Profile to import + Otworzyć PRofil do zaimportowania + + + + Open Image to load + + + + + Images (%1) + Obrazki (%1) + + + + Error + Błąd + + + + Cannot load %1. + + + joystickDialog @@ -8252,93 +8996,103 @@ Tlačítkem Zrušit přerušíte kalibraci preferencesDialog + Preferences Preferencje - + Check for selected Fw updates Sprawdź aktualizacje firmware - + Ask use of wizard for new models Zapytać czy używać konfiguratora nowych modeli - + + Invert Pixels Odwrócić piksele - - + + + + ... - + Remember switches in simulator Zapamietać przaełaczniki w symulatorze - + + Enable Włącz - + + Calibrate Kalibruj - - - - + + + + + + Open Folder Otwórz katalog - + FwInfo - + Check for updates Sprawdź aktualizacje - + + Open Image Otwórz obrazek - + Language Język - - + + Download Pobierz - + Set language of voice. May be different from firmware language Ustaw język komuniaktów głosowych (). Moze być inny od języka firmware - + Voice Komuniakty głosowe + @@ -8380,164 +9134,114 @@ Moze być inny od języka firmware - CheckBox - + Ask for flashing after Download Zapytaj o flaszowanie po pobraniu - + Export Profile Eksport profili - + Import Profile Import profili - + Profile Name Nazwa profilu - + Automatically add version number to the filename after download Automatycznie dodaj numer wersji do nazwy pliku po pobraniu - + Save Profile Zapisz profil - + Show Splash At Start Pokazuj ekran startowy z logo - + Automatic Backup Folder Automatyczny Katalog Backupów - + + Simu BackLight BackLight Color Kolor podświetlenia - + + Remember simulator switches + + + + + Blue Niebieski - + + Green Zielony - + + Red Czerwony - + + Orange Pomarańczowy - + + Yellow Żółty - - Theme - Skórka - - - - - Requires restart - Wymagany restart - - - - Classic - Klasyczna - - - - Monochrome - Monochromatyczna - - - - MonoWhite - Mono-Biała - - - - MonoBlue - Mono-Niebieska - - - - Icon size - Wielkość Ikon - - - - Small - Mała - - - - Normal - Normalna - - - - Big - Duża - - - - Huge - Olbrzymia - - - + Check for updates on startup Sprawdź aktualizacje na przy uruchomieniu - + Google Earth Executable Wykonywalny plik Google Earth - + Find Executable Znajdź wykonywalny plik - - Language (requires restart) - Język programu (wymaga restartu) - - - + + Custom TX splash screen Własny obrazek na wyświetlaczu - + Channel order This is used by the templated to determine which channel goes to what number output. @@ -8545,27 +9249,28 @@ This is used by the templated to determine which channel goes to what number out To ustawienie jest używane przez szablony, jakie wyjście przypisane jest do kanałów. - + Firmware - + Default Stick Mode Bazowy mod drążków - + Default Channel Order Bazowa kolejność kanałów - + + Personal splash library Własna biblioteka obrazków - + Mode selection: Mode 1: @@ -8606,171 +9311,177 @@ Mode 4: - + Mode 1 (RUD ELE THR AIL) Mod 1 (SK.SW.Gaz.Lot) - + Mode 2 (RUD THR ELE AIL) Mod 2 (SK.Gaz.SW.Lot) - + Mode 3 (AIL ELE THR RUD) Mod 3 (LOT.SW.Gaz.SK) - + Mode 4 (AIL THR ELE RUD) Mod 4 (Lot.Gaz.SW.SK) - + + Joystick - + + Include companion splashes Załącz bazowe logo - + + Only user defined splashes Własne logo - + + Splash library behaviour Zachowanie bibliteki obrazków - + SD Structure path Struktura karty SD - + Processor ID ID procesora - + Recent History Size Wielkość zapamietanej historii - + Profile slot Slot profilu - + auto backup before write Automatyczny backup przed zapisem - + + Simulator capture folder Katalog zapisu symulatora - + + Use clipboard only Użycie schowka do kopiowania - + Last downloaded release: %1 Ostatnie pobrane wydanie: %1 - + Image stored in settings Logo zapamietane w ustawieniach - - + + No joysticks found Brak oysticka - + Select the folder replicating your SD structure Wybierz folder do zreplikowania struktury Twojej karty SD - + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? Nazwa profilu jest pusta, slot %1 będzie skasowany.<br>Jesteś pewien ? - + Select your library folder Support for SD memory card Wybierz katalog bibliteki - + Select your snapshot folder Katalog obrazków dla symulatora - + The selected firmware has never been downloaded by Companion. Wybrany firmware nie został nigdy pobrany przez Companion. - + The selected firmware cannot be downloaded by Companion. Companion nie moze pobrac wybranego firmware. - + Select your Models and Settings backup folder Wybierz folder do backupowania Modeli i Ustawień - + Select Google Earth executable Wybierz wykonywalny plik Google Earth - - + + Error Błąd - - + + Cannot load %1. nie mogę wczytać %1. - + Export profile As Wyeksportuj profil jako - + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? Slot profilu nie jest pusty, slot %1 zostanie zapisany.<br>Jesteś pewien ? - + Open Profile to import Otworzyć PRofil do zaimportowania - + Open Image to load Otworzyć obrazek - + Images (%1) Obrazki (%1) @@ -9354,282 +10065,162 @@ Mode 4: LS1 - PL1 + PL1 LS2 - PL2 + PL2 LS3 - PL3 + PL3 LS4 - PL4 + PL4 LS5 - PL5 + PL5 LS6 - PL6 + PL6 LS7 - PL7 + PL7 LS8 - PL8 + PL8 LS9 - PL9 + PL9 LSA - PLA + PLA LSB - PLB + PLB LSC - PLC + PLC LSD - PLD + PLD LSE - PLE + PLE LSF - PLF + PLF LSG - PLG + PLG LSH - PLH + PLH LSI - PLI + PLI LSJ - PLJ + PLJ LSK - PLK + PLK LSL - PLL + PLL LSM - PLM, + PLM, LSN - PLN + PLN LSO - PLO + PLO LSP - PLP + PLP LSQ - PLQ + PLQ LSR - PLR + PLR LSS - PLS + PLS LST - PLT + PLT LSU - PLU + PLU LSV - PLV + PLV LSW - PLW - - - CS1 - PL1 - - - CS2 - PL2 - - - CS3 - PL3 - - - CS4 - PL4 - - - CS5 - PL5 - - - CS6 - PL6 - - - CS7 - PL7 - - - CS8 - PL8 - - - CS9 - PL9 - - - CSA - PLA - - - CSB - PLB - - - CSC - PLC - - - CSD - PLD - - - CSE - PLE - - - CSF - PLF - - - CSG - PLG - - - CSH - PLH - - - CSI - PLI - - - CSJ - PLJ - - - CSL - PLL - - - CSM - PLM - - - CSN - PLN - - - CSO - PLO - - - CSP - PLP - - - CSQ - PLQ - - - CSR - PLR - - - CSS - PLS - - - CST - PLT - - - CSU - PLU - - - CSV - PLV + PLW @@ -9641,16 +10232,6 @@ Mode 4: Companion Simulator Symulator Companion - - CSK - SWK - PLK - - - CSW - SWW - PLW - CH1 @@ -10055,290 +10636,162 @@ Mode 4: LSK - PLK + PLK LSC - PLC + PLC LSD - PLD + PLD LS7 - PL7 + PL7 LSL - PLL + PLL LSB - PLB + PLB LS1 - PL1 + PL1 LSH - PLH + PLH LSG - PLG + PLG LSE - PLE + PLE LSF - PLF + PLF LS8 - PL8 + PL8 LS9 - PL9 + PL9 LSA - PLA + PLA LSM - PLM, + PLM, LSJ - PLJ + PLJ LSI - PLI + PLI LS4 - PL4 + PL4 LS5 - PL5 + PL5 LS2 - PL2 + PL2 LS3 - PL3 + PL3 LS6 - PL6 + PL6 LSN - PLN + PLN LSO - PLO + PLO LSP - PLP + PLP LSQ - PLQ + PLQ LSR - PLR + PLR LSS - PLS + PLS LST - PLT + PLT LSU - PLU + PLU LSV - PLV + PLV LSW - PLW - - - CSK - PLK - - - CSC - PLC - - - CSD - PLD - - - CS7 - PL7 - - - CSL - PLL - - - CSB - PLB - - - CS1 - PL1 - - - CSH - PLH - - - CSG - PLG - - - CSE - PLE - - - CSF - PLF - - - CS8 - PL8 - - - CS9 - PL9 - - - CSA - PLA - - - CSM - PLM - - - CSJ - PLJ - - - CSI - PLI - - - CS4 - PL4 - - - CS5 - PL5 - - - CS2 - PL2 - - - CS3 - PL3 - - - CS6 - PL6 - - - CSN - PLN - - - CSO - PLO - - - CSP - PLP - - - CSQ - PLQ - - - CSR - PLR - - - CSS - PLS - - - CST - PLT - - - CSU - PLU - - - CSV - PLV - - - CSW - PLW + PLW diff --git a/companion/src/translations/companion_pt.ts b/companion/src/translations/companion_pt.ts index 4112ecd3d..c69aba5ab 100644 --- a/companion/src/translations/companion_pt.ts +++ b/companion/src/translations/companion_pt.ts @@ -616,32 +616,32 @@ p, li { white-space: pre-wrap; } - + Rud - + Ele - + Thr - + Ail - + Rotary Encoder %1 - + GVAR%1 @@ -649,17 +649,17 @@ p, li { white-space: pre-wrap; } FlightModes - + Flight Mode %1 - + (%1) - + (default) @@ -1970,10 +1970,10 @@ Are you sure ? companion9x - Editor de EEPROM - - - - + + + + File loaded Ficheiro carregado @@ -1982,11 +1982,11 @@ Are you sure ? companion9x - - - + + + Save As Gravar Como @@ -1995,27 +1995,27 @@ Are you sure ? Ficheiros EEPROM hex (*.hex);;EEPROM bin files (*.bin) - - + + No updates available at this time. - - - - - + + + + + Unable to check for updates. - + Executable (*.exe) - + Would you like to launch the installer? @@ -2024,13 +2024,13 @@ Are you sure ? Ficheiros EEPROM (*.bin *.hex);;BIN files (*.bin);;HEX files (*.hex) - + Open Abrir - - + + File saved Ficheiro gravado @@ -2051,214 +2051,216 @@ Are you sure ? Ficheiros HEX (*.hex);;BIN files (*.bin);;FLASH files (*.bin *.hex) - + Copyright - + Display previous warning again at startup ? - + New release available - - - - - - - - - - - - - + + + + + + + + + + + + + Error Erro - - - - - + + + + + Error opening file %1: %2. - + Compilation server termporary failure, try later - + Display previous message again at startup ? - - - + + + + Companion - Models and Settings Editor - %1 - profile %2 - - - - + + + + + Companion - Models and Settings Editor - %1 - + A new release of Companion is available please check the OpenTX website! - + Firmware does not longer fit in the Tx, due to selected firmware options - + Compilation server temporary failure, try later - - + + Compilation server too busy, try later - - + + Unknown server failure, try later - + Firmware does not fit in the Tx, due to selected firmware options - - + + Yes - - - - No - - + No + + + + + Release Notes - - + + Do you want to download release %1 now ? - + A new version of %1 firmware is available (current %2 - newer %3). Do you want to download it now ? - + Ignore this version (r%1)? - + Release notes contain very important informations. Do you want to see them now ? - + Firmware updates - + Current firmware does not provide release notes informations. - + Cannot write file %1: %2. - - - - - + + + + + Taranis radio not found - - - - + + + + Impossible to identify the radio on your system, please verify the eeprom disk is connected. - + Write Models and settings from %1 to the Tx? - - - + + + Backup is impossible - - - + + + The backup dir set in preferences does not exist - - + + Warning Aviso - + Conversion failed - + Restore failed - + Backup failed @@ -2271,8 +2273,8 @@ Do you want to download it now ? Sobre o companion9x - - + + &%1 %2 &%1 %2 @@ -2281,198 +2283,201 @@ Do you want to download it now ? %1 %2 - + OpenTX Home Page: <a href='%1'>%1</a> - + The OpenTX Companion project was originally forked from <a href='%2'>eePe</a> - + If you've found this program useful, please support by <a href='%1'>donating</a> - + Version %1, %3 - + &New &Novo - + Create a new file Criar um novo ficheiro - + &Open... &Abrir... - + Open an existing file Abrir um ficheiro existente - + &loadBackup... - + Load backup from file - + &Save &Gravar - + Save the document to disk Gravar o documento no disco - + Save &As... Gravar &Como... - + Save the document under a new name Gravar o documento com um novo nome - + Lo&gs - + Ctrl+G - + Open log file - &Preferences... - &Preferências + &Preferências - Edit general preferences - Editar preferências gerais + Editar preferências gerais - + &Check for updates... - + Contributors &List... - + ChangeLog... - + Firmware ChangeLog... - + Show firmware changelog - + Compare... - + Compare models - - Customize your &TX... - - - - + Customize the splash screen of your TX - + E&xit &Sair - + Exit the application Sair da aplicação - + Cu&t Cor&tar - + Cut the current selection's contents to the clipboard Cortar a selecção corrente para a zona de transferência - + &Copy &Copiar - + Copy the current selection's contents to the clipboard Copiar a selecção corrente para a zona de transferência - + &Paste Co&lar - + Paste the clipboard's contents into the current selection Colar o conteúdo na zona de transferência para a selecção corrente - + Configure software for reading from and writing to the transmitter - - + + Set Menu Language + + + + + &Settings + + + + + Invalid Models and Settings File %1 - + Invalid binary Models and Settings File %1 @@ -2481,7 +2486,7 @@ Do you want to download it now ? &Gravar EEPROM no Rádio - + Ctrl+Alt+W Ctrl+Alt+W @@ -2494,7 +2499,7 @@ Do you want to download it now ? &Ler EEPROM do Rádio - + Ctrl+Alt+R Ctrl-Alt-R @@ -2519,61 +2524,60 @@ Do you want to download it now ? Ler memória Flash do Rádio - &Configure... - &Configurar... + &Configurar... Configure burning software Configurar aplicação de gravação do Rádio - + &List programmers &Listar programadores - + List available programmers Lista os programadores disponíveis - + &Fuses... - + Show fuses dialog - + &Simulate &Simular - + Alt+S Alt+S - + Simulate selected model. Simular o modelo seleccionado - + &Print &Imprimir - + Ctrl+P Ctrl+P - + Print current model. Imprimir o modelo corrente @@ -2626,38 +2630,38 @@ Do you want to download it now ? Selecciona janela anterior - + &About A&cerca - + Show the application's About box Sobre a aplicação - - + + Recent Files - + &Read/Write - + Write - + Unable to find file %1! Impossível encontrar o ficheiro %1! - + Error reading file %1: %2. @@ -2671,7 +2675,7 @@ Do you want to download it now ? Lista de contribuidores do er9x/companion9x - + &File &Ficheiro @@ -2680,217 +2684,464 @@ Do you want to download it now ? Mudar apresentação dos menus - + Checking for updates - + A new version of Companion is available (version %1)<br>Would you like to download it? - - + + Compilation server requires registration, please check OpenTX web site - + Do you want to write the firmware to the transmitter now ? - + Firmware %1 does not seem to have ever been downloaded. Version %2 is available. Do you want to download it now ? - - - - + + The selected language will be used the next time you start Companion. + + + + + + + OK + + + + + The new theme will be loaded the next time you start Companion. + + + + + The icon size will be used the next time you start Companion. + + + + + + + Read Models and Settings From Tx - + The file %1 has not been recognized as a valid Models and Settings file Write anyway ? - - - - - - + + + + + + Backup Models and Settings From Tx - + Cannot check Models and Settings compatibility! Continue anyway? - + The transmitter firmware belongs to another product family, check file and preferences! - + The transmitter firmware is outdated, please upgrade! - + Write Models and Settings To Tx - - + + Write Firmware To Tx - + Cannot convert Models and Settings for use with this firmware, original data will be used - + Restore Models and Settings To Tx - + Could not restore Models and Settings to TX. The models and settings data file can be found at: %1 - + Firmware write failed - + Could not write firmware to to transmitter. The models and settings data file can be found at: %1 - + Cannot backup existing Models and Settings from TX. Firmware write process aborted - + Save transmitter Models and Settings to File - + Impossible to identify the radio on your system, please verify that the eeprom disk is connected. - + Read Tx Firmware to File - + About Companion - - Check for new version of Companion - - - - - Show Companion contributors list - - - - - Show Companion changelog - - - - - &Write Models and Settings To Tx - - - - - Write Models and Settings to transmitter - - - - - &Read Models and Settings From Tx - - - - - Read Models and Settings from transmitter - - - - - Write Firmware - - - - - Write firmware to transmitter + + &Old Preferences Dialog... - Write Models and Settings from file to Tx + Used the old Preferences Dialog - - Write Models and Settings from file to transmitter + + &Application Preferences... - Save transmitter Models and Settings to file + Edit application preferences - - Save the Models and Settings from the transmitter to a file + + &Download Firmware and Voice... - Read Firmware + Download firmware and voice files - - Read firmware from transmitter + + Check for new version of Companion + + + + + Show Companion contributors list + + + + + Show Companion changelog + + + + + Configure transmitter start screen... + + + + + &Write Models and Settings To Tx + + + + + Write Models and Settings to transmitter + &Read Models and Settings From Tx + + + + + Read Models and Settings from transmitter + + + + + Write Firmware + + + + + Write firmware to transmitter + + + + + Write Models and Settings from file to Tx + + + + + Write Models and Settings from file to transmitter + + + + + Save transmitter Models and Settings to file + + + + + Save the Models and Settings from the transmitter to a file + + + + + Read Firmware + + + + + Read firmware from transmitter + + + + + &Configure connection software... + + + + + Classic + + + + + The multicolor classical Companion icon theme + + + + + A monochrome black icon theme + + + + + A monochrome white icon theme + + + + + A monochrome blue icon theme + + + + + Small + + + + + Use small toolbar icons + + + + + Use normal size toolbar icons + + + + + Normal + + + + + Use big toolbar icons + + + + + Big + + + + + Use huge toolbar icons + + + + + Huge + + + + + System default language + + + + + Use system default language in menus + + + + + Czech + + + + + Use Czech in menus + + + + + German + + + + + Use German in menus + + + + + English + + + + + Use English in menus + + + + + French + + + + + Use French in menus + + + + Italian + + + + + Use Italian in menus + + + + + Hebrew + + + + + Use Hebrew in menus + + + + + Polish + + + + + Use Polish in menus + + + + + Portuguese + + + + + Use Portuguese in menus + + + + + Swedish + + + + + Use Swedish in menus + + + + + Russian + + + + + Use Russian in menus + + + + + Firmware Profiles - + + Set Icon Theme + + + + + Set Icon Size + + + + &Edit &Editar @@ -2899,17 +3150,17 @@ Write anyway ? &Janela - + &Help &Ajuda - + File Ficheiro - + Edit Editar @@ -2918,12 +3169,12 @@ Write anyway ? Gravar - + Help - + Ready Pronto @@ -4723,7 +4974,7 @@ p, li { white-space: pre-wrap; } - + --- @@ -4936,133 +5187,128 @@ p, li { white-space: pre-wrap; } - - Flight mode %1 trim - - - - + Flight mode %1 value - + Yellow - + Orange - + Red - + Winged Shadow How High - + Winged Shadow How High (not supported) - + FrSky Sensor Hub - - + + None - + Imperial - + Metric - + Extra Fine Extra-fino - + Fine Fino - + Medium Médio - + Coarse Aberto - + Exponential Exponencial - + Count Up Contagem progressiva - + Count Down Contagem regressiva - + %1:%2, %1:%2, - + : %1 Channels, %2usec Delay :%1 Canais, Atraso de %3 mseg {1 ?} {2m?} {1 ?} {2u?} - + Flight modes(%1) - + Flight mode(%1) - + Rudder Leme - + Elevator Elevador - + Throttle Acelerador - + Aileron Aileron @@ -5094,32 +5340,27 @@ p, li { white-space: pre-wrap; } - Own trim - - - - Own value - + Keys - + Sticks - + Keys + Sticks - - + + -GV%1 @@ -5749,8 +5990,8 @@ p, li { white-space: pre-wrap; } - - + + GV%1 @@ -6166,7 +6407,7 @@ p, li { white-space: pre-wrap; } - + ersky9x @@ -6270,12 +6511,12 @@ p, li { white-space: pre-wrap; } - + th9x - + er9x @@ -6321,13 +6562,13 @@ p, li { white-space: pre-wrap; } - + ON - + OFF OFF @@ -6357,25 +6598,25 @@ p, li { white-space: pre-wrap; } - + openTx only accepts %1 points in all curves - - - + + + OpenTX on this board doesn't accept this function - - + + OpenTX doesn't accept this protocol - + OpenTX doesn't allow this number of channels @@ -6388,6 +6629,26 @@ We are really appreciative for that! The OpenTX/Companion Team. + + + Trim disabled + + + + + Own Trim + + + + + Use Trim from Flight mode %1 + + + + + Use Trim from Flight mode %1 + Own Trim as an offset + + Setup @@ -6970,6 +7231,172 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi + + appPreferencesDialog + + + Application Preferences + + + + + Simulator capture folder + + + + + Remember simulator switch values + + + + + + + Open Folder + + + + + User Splash Screens + + + + + Blue + + + + + Green + + + + + Red + + + + + Orange + + + + + Yellow + + + + + Include companion splashes + + + + + Only user defined splashes + + + + + Splash Screen Library + + + + + Files to keep + + + + + Simulator BackLight + + + + + Automatic Backup Folder + + + + + Only capture to clipboard + + + + + Joystick + + + + + Find Executable + + + + + Google Earth Executable + + + + + Calibrate + + + + + Enable + + + + + Show splash screen when Companion starts + + + + + Automatic check for OpenTX firmware updates + + + + + Automatic check for Companion updates + + + + + Offer to use wizard for new models + + + + + Enable automatic backup before writing firmware + + + + + Select your snapshot folder + + + + + + No joysticks found + + + + + Select your library folder + + + + + Select your Models and Settings backup folder + + + + + Select Google Earth executable + + + avrOutputDialog @@ -8245,132 +8672,98 @@ m2560 for v4.1 boards customizeSplashDialog - - Customize Splash + + Transmitter Splash Screen Editor - - Save Image + + + Invert + Inverter + + + + + Load FW - - Invert Color + + + Load Pict - - Load Firmware + + + Save - - Load Image - - - - + + Open Splash Library - + + + + ... - - Save Firmware - Save To Hex - - - - - <!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:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - - - - - Select an original firmware file - - - - + Open Abrir - - Select an image to customize your splash <br />or save actual firmware splash - - - - - - - + + + + + + Error Erro - + Could not find bitmap to replace in file - + Open Image to load - + Images (%1) - - + + Cannot load %1. - - - Save your custimized firmware + + + Could not store image in firmware file %1 - - - Write to file + + The image file %1 could not be stored - Error reading file %1 - Erro ao ler o ficheiro %1! {1?} - - - - Firmware correctly saved. - - - - - Firmware not saved. - - - - - PNG images (*.png);; - + Erro ao ler o ficheiro %1! {1?} @@ -8499,6 +8892,291 @@ p, li { white-space: pre-wrap; } + + fwPreferencesDialog + + + Download Firmware and Voice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CheckBox + + + + + Set language of voice. +May be different from firmware language + + + + + SD Structure path + + + + + Processor ID + + + + + Default Stick Mode + Modo do Rádio por Defeito + + + + Channel Order + + + + + Mode selection: + +Mode 1: + Left stick: Elevator, Rudder + Right stick: Throttle, Aileron + +Mode 2: + Left stick: Throttle, Rudder + Right stick: Elevator, Aileron + +Mode 3: + Left stick: Elevator, Aileron + Right stick: Throttle, Rudder + +Mode 4: + Left stick: Throttle, Aileron + Right stick: Elevator, Rudder + + + + + + + Mode 1 (RUD ELE THR AIL) + Modo 1 (RUD ELE THR AIL) + + + + Mode 2 (RUD THR ELE AIL) + Modo 2 (RUD THR ELE AIL) + + + + Mode 3 (AIL ELE THR RUD) + Modo 3 (AIL ELE THR RUD) + + + + Mode 4 (AIL THR ELE RUD) + Modo 4 (AIL THR ELE RUD) + + + + Options + + + + + Channel order + +This is used by the templated to determine which channel goes to what number output. + + + + + Open Folder + + + + + Offer to write FW to Tx after download + + + + + Profile Splash Screen + + + + + Profile Name + + + + + Import + + + + + Export + + + + + Save Profile + + + + + Menu Language + + + + + Voice Language + + + + + Profile Number + + + + + Firmware Type + + + + + Append version number to FW file name + + + + + Download Voice + + + + + FwInfo + + + + + Open Image + + + + + Clear Image + + + + + Download FW + + + + + Check for updates + + + + + Last downloaded release: %1 + + + + + The selected firmware has never been downloaded by Companion. + + + + + The selected firmware cannot be downloaded by Companion. + + + + + Select the folder replicating your SD structure + + + + + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? + + + + + Export profile As + + + + + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? + + + + + Open Profile to import + + + + + Open Image to load + + + + + Images (%1) + + + + + Error + Erro + + + + Cannot load %1. + + + joystickDialog @@ -9247,38 +9925,38 @@ Press cancel to abort joystick calibration preferencesDialog + Preferences Preferências - Language (requires restart) - Língua (necessita uma reinicialização) + Língua (necessita uma reinicialização) - + Recent History Size - - + + Download - + Default Channel Order Ordem dos Canais por Defeito - + Default Stick Mode Modo do Rádio por Defeito - + Channel order This is used by the templated to determine which channel goes to what number output. @@ -9289,7 +9967,7 @@ This is used by the templated to determine which channel goes to what number out companion9x - + Mode selection: Mode 1: @@ -9312,187 +9990,149 @@ Mode 4: - + Mode 1 (RUD ELE THR AIL) Modo 1 (RUD ELE THR AIL) - + Mode 2 (RUD THR ELE AIL) Modo 2 (RUD THR ELE AIL) - + Mode 3 (AIL ELE THR RUD) Modo 3 (AIL ELE THR RUD) - + Mode 4 (AIL THR ELE RUD) Modo 4 (AIL THR ELE RUD) - + Automatic Backup Folder - + Automatically add version number to the filename after download - + Voice - + Set language of voice. May be different from firmware language - + Firmware - - Theme - - - - - - Requires restart - - - - - Classic - - - - - Monochrome - - - - - MonoWhite - - - - - MonoBlue - - - - - Icon size - - - - - Small - - - - - Normal - - - - - Big - - - - - Huge - - - - + Find Executable - + Google Earth Executable - + Check for updates on startup - - + + + + ... - + + Splash library behaviour - + + Remember simulator switches + + + + + Include companion splashes - + + Only user defined splashes - + + Custom TX splash screen - + + Personal splash library - + + Joystick - - - - + + + + + + Open Folder - + SD Structure path - + Processor ID - + + Simulator capture folder - + + Use clipboard only + @@ -9534,221 +10174,230 @@ May be different from firmware language - CheckBox - + Check for updates - + Language - + Profile Name - + Export Profile - + Save Profile - + Import Profile - + + Simu BackLight - + Check for selected Fw updates - + Ask use of wizard for new models - + Show Splash At Start - + Remember switches in simulator - + + Blue Blu - + + Green - + + Red - + + Orange - + + Yellow - + Profile slot - + auto backup before write - + Ask for flashing after Download - + + Enable - + + Calibrate - + + Open Image - + + Invert Pixels - + FwInfo - + Last downloaded release: %1 - + Image stored in settings - - + + No joysticks found - + Select your snapshot folder - + Select your Models and Settings backup folder - + Select Google Earth executable - + Select the folder replicating your SD structure - + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? - + Export profile As - + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? - + Open Profile to import - + Open Image to load - + Images (%1) - - + + Error Erro - + The selected firmware has never been downloaded by Companion. - + The selected firmware cannot be downloaded by Companion. - + Select your library folder - - + + Cannot load %1. diff --git a/companion/src/translations/companion_ru.ts b/companion/src/translations/companion_ru.ts index d57799c1a..78181e6a2 100644 --- a/companion/src/translations/companion_ru.ts +++ b/companion/src/translations/companion_ru.ts @@ -615,32 +615,32 @@ p, li { white-space: pre-wrap; } - + Rud - + Ele - + Thr - + Ail - + Rotary Encoder %1 - + GVAR%1 @@ -648,17 +648,17 @@ p, li { white-space: pre-wrap; } FlightModes - + Flight Mode %1 - + (%1) - + (default) @@ -1968,44 +1968,44 @@ Are you sure ? MainWindow - - - - + + + + File loaded Файл загружен - - - + + + Save As Сохранить как... - - + + No updates available at this time. - - - - - + + + + + Unable to check for updates. - + Executable (*.exe) - + Would you like to launch the installer? @@ -2014,13 +2014,13 @@ Are you sure ? файлы EEPROM (*.bin *.hex);;файлы BIN (*.bin);;файлы HEX (*.hex) - + Open Открыть - - + + File saved Файл записан @@ -2049,7 +2049,7 @@ Are you sure ? Считать прошивку в файл - + Copyright @@ -2067,401 +2067,418 @@ Are you sure ? О eePe - - + + &%1 %2 - + &New Новый - + Create a new file Создать новый файл - + &Open... Открыть - + Open an existing file Открыть файл - + &Save Сохранить - + Save the document to disk Записать на диск - + Save &As... Сохранить как... - + Save the document under a new name Записать с другим именем - &Preferences... - Настройки + Настройки - Edit general preferences - Редактировать основные настройки + Редактировать основные настройки - + &Check for updates... - + Display previous warning again at startup ? - + New release available - - - - - - - - - - - - - + + + + + + + + + + + + + Error Ошибка - - - - - + + + + + Error opening file %1: %2. - + Compilation server termporary failure, try later - + Display previous message again at startup ? - - - + + + + Companion - Models and Settings Editor - %1 - profile %2 - - - - + + + + + Companion - Models and Settings Editor - %1 - + A new release of Companion is available please check the OpenTX website! - + Firmware does not longer fit in the Tx, due to selected firmware options - + Compilation server temporary failure, try later - - + + Compilation server too busy, try later - - + + Unknown server failure, try later - + Firmware does not fit in the Tx, due to selected firmware options - - + + Yes - - - - No - - + No + + + + + Release Notes - - + + Do you want to download release %1 now ? - + A new version of %1 firmware is available (current %2 - newer %3). Do you want to download it now ? - + Ignore this version (r%1)? - + Release notes contain very important informations. Do you want to see them now ? - + + The selected language will be used the next time you start Companion. + + + + + + + OK + + + + + The new theme will be loaded the next time you start Companion. + + + + + The icon size will be used the next time you start Companion. + + + + Firmware updates - + Current firmware does not provide release notes informations. - + Cannot write file %1: %2. Не удается записать файл %1: %2. - - - - - + + + + + Taranis radio not found - - - - + + + + Impossible to identify the radio on your system, please verify the eeprom disk is connected. - + Write Models and settings from %1 to the Tx? - - - + + + Backup is impossible - - - + + + The backup dir set in preferences does not exist - - + + Warning Звук - + Conversion failed - + Restore failed - + Backup failed - + OpenTX Home Page: <a href='%1'>%1</a> - + The OpenTX Companion project was originally forked from <a href='%2'>eePe</a> - + If you've found this program useful, please support by <a href='%1'>donating</a> - + Version %1, %3 - + &loadBackup... - + Load backup from file - + Lo&gs - + Ctrl+G - + Open log file - + Contributors &List... - + ChangeLog... - + Firmware ChangeLog... - + Show firmware changelog - + Compare... - + Compare models - - Customize your &TX... - - - - + Customize the splash screen of your TX - + E&xit Выход - + Exit the application Выйти из программы - + Cu&t Вырезать - + Cut the current selection's contents to the clipboard Вырезать выделение в буфер обмена - + &Copy Копировать - + Copy the current selection's contents to the clipboard Копировать выделение в буфер обмена - + &Paste Вставить - + Paste the clipboard's contents into the current selection Вставить выделение из буфера обмена - + Configure software for reading from and writing to the transmitter @@ -2470,7 +2487,7 @@ Do you want to download it now ? Записать EEPROM в TX - + Ctrl+Alt+W @@ -2483,7 +2500,7 @@ Do you want to download it now ? Считать EEPROM из TX - + Ctrl+Alt+R @@ -2524,61 +2541,60 @@ Do you want to download it now ? Считать прошивку из передатчика - &Configure... - Настройка + Настройка Configure burning software Настроить программатор - + &List programmers Список программаторов - + List available programmers Показать список программаторов - + &Fuses... Фьюзы - + Show fuses dialog Показать диалог установки фьюзов - + &Simulate Симуляция - + Alt+S - + Simulate selected model. Запустить симуляцию - + &Print Печать - + Ctrl+P - + Print current model. Распечатать текущую модель @@ -2631,38 +2647,43 @@ Do you want to download it now ? Переместить фокус на предыдущее окно - + &About О программе - + Show the application's About box Показать окно "О программе" - - + + Recent Files - + + Set Menu Language + + + + &Read/Write - + Write - + Unable to find file %1! Невозможно найти файл %1! - + Error reading file %1: %2. Ошибка при считывании файла %1: @@ -2673,7 +2694,7 @@ Do you want to download it now ? Авторы - + &File Файл @@ -2682,228 +2703,458 @@ Do you want to download it now ? Зеркало - + Checking for updates - + A new version of Companion is available (version %1)<br>Would you like to download it? - - + + Compilation server requires registration, please check OpenTX web site - + Do you want to write the firmware to the transmitter now ? - + Firmware %1 does not seem to have ever been downloaded. Version %2 is available. Do you want to download it now ? - - - - + + + + Read Models and Settings From Tx - + The file %1 has not been recognized as a valid Models and Settings file Write anyway ? - - - - - - + + + + + + Backup Models and Settings From Tx - + Cannot check Models and Settings compatibility! Continue anyway? - + The transmitter firmware belongs to another product family, check file and preferences! - + The transmitter firmware is outdated, please upgrade! - + Write Models and Settings To Tx - - + + Write Firmware To Tx - + Cannot convert Models and Settings for use with this firmware, original data will be used - + Restore Models and Settings To Tx - + Could not restore Models and Settings to TX. The models and settings data file can be found at: %1 - + Firmware write failed - + Could not write firmware to to transmitter. The models and settings data file can be found at: %1 - + Cannot backup existing Models and Settings from TX. Firmware write process aborted - + Save transmitter Models and Settings to File - + Impossible to identify the radio on your system, please verify that the eeprom disk is connected. - + Read Tx Firmware to File - + About Companion - - Check for new version of Companion - - - - - Show Companion contributors list - - - - - Show Companion changelog - - - - - &Write Models and Settings To Tx - - - - - Write Models and Settings to transmitter - - - - - &Read Models and Settings From Tx - - - - - Read Models and Settings from transmitter - - - - - Write Firmware - - - - - Write firmware to transmitter + + &Old Preferences Dialog... - Write Models and Settings from file to Tx + Used the old Preferences Dialog - - Write Models and Settings from file to transmitter + + &Application Preferences... - Save transmitter Models and Settings to file + Edit application preferences - - Save the Models and Settings from the transmitter to a file + + &Download Firmware and Voice... - Read Firmware + Download firmware and voice files - - Read firmware from transmitter + + Check for new version of Companion + + + + + Show Companion contributors list + + + + + Show Companion changelog + + + + + Configure transmitter start screen... + + + + + &Write Models and Settings To Tx + + + + + Write Models and Settings to transmitter + &Read Models and Settings From Tx + + + + + Read Models and Settings from transmitter + + + + + Write Firmware + + + + + Write firmware to transmitter + + + + + Write Models and Settings from file to Tx + + + + + Write Models and Settings from file to transmitter + + + + + Save transmitter Models and Settings to file + + + + + Save the Models and Settings from the transmitter to a file + + + + + Read Firmware + + + + + Read firmware from transmitter + + + + + &Configure connection software... + + + + + Classic + + + + + The multicolor classical Companion icon theme + + + + + A monochrome black icon theme + + + + + A monochrome white icon theme + + + + + A monochrome blue icon theme + + + + + Small + + + + + Use small toolbar icons + + + + + Use normal size toolbar icons + + + + + Normal + нормально + + + + Use big toolbar icons + + + + + Big + + + + + Use huge toolbar icons + + + + + Huge + + + + + System default language + + + + + Use system default language in menus + + + + + Czech + + + + + Use Czech in menus + + + + + German + + + + + Use German in menus + + + + + English + + + + + Use English in menus + + + + + French + + + + + Use French in menus + + + + Italian + + + + + Use Italian in menus + + + + + Hebrew + + + + + Use Hebrew in menus + + + + + Polish + + + + + Use Polish in menus + + + + + Portuguese + + + + + Use Portuguese in menus + + + + + Swedish + + + + + Use Swedish in menus + + + + + Russian + + + + + Use Russian in menus + + + + + Firmware Profiles - + + Set Icon Theme + + + + + Set Icon Size + + + + &Edit Правка - - + + &Settings + + + + + Invalid Models and Settings File %1 - + Invalid binary Models and Settings File %1 @@ -2916,17 +3167,17 @@ Write anyway ? Окна - + &Help Помощь - + File Файл - + Edit Правка @@ -2935,12 +3186,12 @@ Write anyway ? Запись - + Help - + Ready Готово @@ -4545,7 +4796,7 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi - + --- @@ -4758,133 +5009,128 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi - - Flight mode %1 trim - - - - + Flight mode %1 value - + Yellow - + Orange - + Red - + Winged Shadow How High - + Winged Shadow How High (not supported) - + FrSky Sensor Hub - - + + None - + Imperial - + Metric - + Extra Fine очень точно - + Fine точно - + Medium средне - + Coarse грубо - + Exponential экспонента - + Count Up Прямой отсчет - + Count Down Обратный отсчет - + %1:%2, - + : %1 Channels, %2usec Delay - + Flight modes(%1) - + Flight mode(%1) - + Rudder Руддер - + Elevator Элеватор - + Throttle Газ - + Aileron Элероны @@ -4916,32 +5162,27 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi - Own trim - - - - Own value - + Keys - + Sticks - + Keys + Sticks - - + + -GV%1 @@ -5086,12 +5327,12 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi - + th9x - + er9x @@ -5614,8 +5855,8 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi - - + + GV%1 @@ -5627,13 +5868,13 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi - + ON - + OFF ВЫКЛ @@ -6049,7 +6290,7 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi - + ersky9x @@ -6079,25 +6320,25 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi - + openTx only accepts %1 points in all curves - - - + + + OpenTX on this board doesn't accept this function - - + + OpenTX doesn't accept this protocol - + OpenTX doesn't allow this number of channels @@ -6110,6 +6351,26 @@ We are really appreciative for that! The OpenTX/Companion Team. + + + Trim disabled + + + + + Own Trim + + + + + Use Trim from Flight mode %1 + + + + + Use Trim from Flight mode %1 + Own Trim as an offset + + Setup @@ -6692,6 +6953,172 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi + + appPreferencesDialog + + + Application Preferences + + + + + Simulator capture folder + + + + + Remember simulator switch values + + + + + + + Open Folder + + + + + User Splash Screens + + + + + Blue + + + + + Green + + + + + Red + + + + + Orange + + + + + Yellow + + + + + Include companion splashes + + + + + Only user defined splashes + + + + + Splash Screen Library + + + + + Files to keep + + + + + Simulator BackLight + + + + + Automatic Backup Folder + + + + + Only capture to clipboard + + + + + Joystick + + + + + Find Executable + + + + + Google Earth Executable + + + + + Calibrate + + + + + Enable + + + + + Show splash screen when Companion starts + + + + + Automatic check for OpenTX firmware updates + + + + + Automatic check for Companion updates + + + + + Offer to use wizard for new models + + + + + Enable automatic backup before writing firmware + + + + + Select your snapshot folder + + + + + + No joysticks found + + + + + Select your library folder + + + + + Select your Models and Settings backup folder + + + + + Select Google Earth executable + + + avrOutputDialog @@ -7925,132 +8352,98 @@ m2560 for v4.1 boards customizeSplashDialog - - Customize Splash + + Transmitter Splash Screen Editor - - Save Image + + + Invert + Инверт + + + + + Load FW - - Invert Color + + + Load Pict - - Load Firmware + + + Save - - Load Image - - - - + + Open Splash Library - + + + + ... - - Save Firmware - Save To Hex - - - - - <!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:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - - - - - Select an original firmware file - - - - + Open Открыть - - Select an image to customize your splash <br />or save actual firmware splash - - - - - - - + + + + + + Error Ошибка - + Could not find bitmap to replace in file - + Open Image to load - + Images (%1) - - + + Cannot load %1. - - - Save your custimized firmware + + + Could not store image in firmware file %1 - - - Write to file + + The image file %1 could not be stored - Error reading file %1 - Ошибка при считывании файла %1! {1?} - - - - Firmware correctly saved. - - - - - Firmware not saved. - - - - - PNG images (*.png);; - + Ошибка при считывании файла %1! {1?} @@ -8175,6 +8568,291 @@ p, li { white-space: pre-wrap; } + + fwPreferencesDialog + + + Download Firmware and Voice + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CheckBox + + + + + Set language of voice. +May be different from firmware language + + + + + SD Structure path + + + + + Processor ID + + + + + Default Stick Mode + Режим стиков + + + + Channel Order + + + + + Mode selection: + +Mode 1: + Left stick: Elevator, Rudder + Right stick: Throttle, Aileron + +Mode 2: + Left stick: Throttle, Rudder + Right stick: Elevator, Aileron + +Mode 3: + Left stick: Elevator, Aileron + Right stick: Throttle, Rudder + +Mode 4: + Left stick: Throttle, Aileron + Right stick: Elevator, Rudder + + + + + + + Mode 1 (RUD ELE THR AIL) + + + + + Mode 2 (RUD THR ELE AIL) + + + + + Mode 3 (AIL ELE THR RUD) + + + + + Mode 4 (AIL THR ELE RUD) + + + + + Options + + + + + Channel order + +This is used by the templated to determine which channel goes to what number output. + + + + + Open Folder + + + + + Offer to write FW to Tx after download + + + + + Profile Splash Screen + + + + + Profile Name + + + + + Import + + + + + Export + + + + + Save Profile + + + + + Menu Language + + + + + Voice Language + + + + + Profile Number + + + + + Firmware Type + + + + + Append version number to FW file name + + + + + Download Voice + + + + + FwInfo + + + + + Open Image + + + + + Clear Image + + + + + Download FW + + + + + Check for updates + + + + + Last downloaded release: %1 + + + + + The selected firmware has never been downloaded by Companion. + + + + + The selected firmware cannot be downloaded by Companion. + + + + + Select the folder replicating your SD structure + + + + + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? + + + + + Export profile As + + + + + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? + + + + + Open Profile to import + + + + + Open Image to load + + + + + Images (%1) + + + + + Error + Ошибка + + + + Cannot load %1. + + + joystickDialog @@ -8920,38 +9598,38 @@ Press cancel to abort joystick calibration preferencesDialog + Preferences Настройки - Language (requires restart) - Язык (треб. перезапуск) + Язык (треб. перезапуск) - + Recent History Size - - + + Download - + Default Channel Order Порядок следов. каналов - + Default Stick Mode Режим стиков - + Channel order This is used by the templated to determine which channel goes to what number output. @@ -8960,12 +9638,12 @@ This is used by the templated to determine which channel goes to what number out Шаблон для определения порядка следования каналов. - + FwInfo - + Mode selection: Mode 1: @@ -8988,187 +9666,153 @@ Mode 4: - + Mode 1 (RUD ELE THR AIL) - + Mode 2 (RUD THR ELE AIL) - + Mode 3 (AIL ELE THR RUD) - + Mode 4 (AIL THR ELE RUD) - + Automatic Backup Folder - + Automatically add version number to the filename after download - + Voice - + Set language of voice. May be different from firmware language - + Firmware - - Theme - - - - - - Requires restart - - - - - Classic - - - - - Monochrome - - - - - MonoWhite - - - - - MonoBlue - - - - - Icon size - - - - - Small - - - - Normal - нормально + нормально - - Big - - - - - Huge - - - - + Find Executable - + Google Earth Executable - + Check for updates on startup Проверять обновления - - + + + + ... - + + Splash library behaviour - + + Remember simulator switches + + + + + Include companion splashes - + + Only user defined splashes - + + Custom TX splash screen - + + Personal splash library - + + Joystick - - - - + + + + + + Open Folder - + SD Structure path - + Processor ID - + + Simulator capture folder - + + Use clipboard only + @@ -9210,216 +9854,225 @@ May be different from firmware language - CheckBox - + Check for updates - + Language - + Profile Name - + Export Profile - + Save Profile - + Import Profile - + + Simu BackLight - + Check for selected Fw updates - + Ask use of wizard for new models - + Show Splash At Start - + Remember switches in simulator - + + Blue Blu - + + Green - + + Red - + + Orange - + + Yellow - + Profile slot - + auto backup before write - + Ask for flashing after Download - + + Enable - + + Calibrate - + + Open Image - + + Invert Pixels - + Last downloaded release: %1 - + Image stored in settings - - + + No joysticks found - + Select your snapshot folder - + Select your Models and Settings backup folder - + Select Google Earth executable - + Select the folder replicating your SD structure - + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? - + Export profile As - + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? - + Open Profile to import - + Open Image to load - + Images (%1) - - + + Error Ошибка - + The selected firmware has never been downloaded by Companion. - + The selected firmware cannot be downloaded by Companion. - + Select your library folder - - + + Cannot load %1. diff --git a/companion/src/translations/companion_sv.ts b/companion/src/translations/companion_sv.ts index a215a0c56..f01bdcaba 100644 --- a/companion/src/translations/companion_sv.ts +++ b/companion/src/translations/companion_sv.ts @@ -619,7 +619,7 @@ Om fältet lämnas tomt så är filtret aktivt hela tiden. trim3 - + Rud Rod @@ -639,7 +639,7 @@ Om fältet lämnas tomt så är filtret aktivt hela tiden. Ske - + Rotary Encoder %1 Inmatningshjul %1 @@ -652,7 +652,7 @@ Om fältet lämnas tomt så är filtret aktivt hela tiden. FlightModes - + Flight Mode %1 Flygläge %1 @@ -684,7 +684,7 @@ Dessa inställningar gäller för alla modeller. Setup - Sändarinställningar + Välj Sändarens Startbild @@ -1939,15 +1939,15 @@ FAI-funktionen kan inte slås av i sändaren. MainWindow - - + + - + File loaded Filen har laddats - + @@ -1993,7 +1993,7 @@ Do you want to download it now ? Vill du ladda ned den nya versionen nu ? - + Open Öppna @@ -2004,18 +2004,18 @@ Vill du ladda ned den nya versionen nu ? Filen sparades - + Copyright Copyright - + &%1 %2 &%1 %2 - + &New &Ny @@ -2055,22 +2055,12 @@ Vill du ladda ned den nya versionen nu ? Spara dokumentet under nytt namn - - &Preferences... - &Inställningar... - - - - Edit general preferences - Redigera sändarens generella inställningarna - - - + &Check for updates... &Sök efter uppdateringar... - + Display previous message again at startup ? Skall föregående varning visas igen vid uppstart ? @@ -2099,7 +2089,7 @@ Version %2 finns tillgänglig. Vill du ladda ned den nu ? - + Write Models and settings from %1 to the Tx? Skriv Modeller och Inställningar från %1 till sändaren? @@ -2119,14 +2109,9 @@ Vill du ladda ned den nu ? Säkerhetskopieringen misslyckades - - Customize your &TX... - Sändari&nställningar... - - - + Customize the splash screen of your TX - Ställ in din sändares startlbild + Ställ din sändares startbild @@ -2179,12 +2164,7 @@ Vill du ladda ned den nu ? Ctrl+Alt+R - - &Configure... - &Kommunikationsinställningar... - - - + Configure software for reading from and writing to the transmitter Inställningar för mjukvaran som kommunicerar med sändaren @@ -2249,33 +2229,35 @@ Vill du ladda ned den nu ? Visa information om programmet - - + + Recent Files Senaste Filer - + &File &Arkiv - - + + + Companion - Models and Settings Editor - %1 - profile %2 Companion - Editor för Modeller och Inställningar - %1 - profile %2 - - + + + Companion - Models and Settings Editor - %1 Companion - Editor för Modeller och Inställningar - %1 - + Checking for updates Letar efter uppdateringar @@ -2290,7 +2272,7 @@ Vill du ladda ned den nu ? Ladda inte ned versionen (r%1)? - + OpenTX Home Page: <a href='%1'>%1</a> OpenTX Hemsida: <a href='%1'>%1</a> @@ -2310,7 +2292,35 @@ Vill du ladda ned den nu ? Version %1, %3 - + + &Old Preferences Dialog... + Den &Gamla Inställningsdialogen... + + + + Used the old Preferences Dialog + Använde den gamla inställningsdialogen + + + + &Application Preferences... + &Programmets Inställningar... + + + + Edit application preferences + Redigera programmets inställningar + + + &Download Firmware and Voice... + &Ladda ned Firmware och Ljud... + + + Download firmware and voice files + Ladda ned Firmware- och Ljud-filer + + + Show Companion changelog Visa en lista med förändringar av Companion @@ -2375,12 +2385,17 @@ Vill du ladda ned den nu ? Läs firmware från sändaren - + + Set Menu Language + Ställ in Menyspråk + + + &Edit &Redigera - + &Help &Hjälp @@ -2390,7 +2405,7 @@ Vill du ladda ned den nu ? Arkiv - + Edit Redigera @@ -2405,12 +2420,12 @@ Vill du ladda ned den nu ? Redo - + Contributors &List... &Bidragsgivare... - + Display previous warning again at startup ? SKall föregående varning visas igen vid uppstart ? @@ -2419,8 +2434,8 @@ Vill du ladda ned den nu ? - - + + @@ -2432,21 +2447,21 @@ Vill du ladda ned den nu ? Fel - + Cannot write file %1: %2. Filen %1 kunde inte skrivas: %2. - + New release available En ny version finns tillgänglig - + Error opening file %1: @@ -2455,7 +2470,7 @@ Vill du ladda ned den nu ? %2. - + Compilation server termporary failure, try later Tillfälligt fel i byggservern. Försök igen senare @@ -2472,7 +2487,7 @@ Vill du ladda ned den nu ? Okänt server-fel. Försök igen senare - + Compare... Jämför... @@ -2482,7 +2497,7 @@ Vill du ladda ned den nu ? Jämför modeller - + Backup is impossible @@ -2502,8 +2517,8 @@ Vill du ladda ned den nu ? Varning - - + + Firmware Profiles Profiler för Firmware @@ -2518,7 +2533,7 @@ Vill du ladda ned den nu ? Skriv - + Unable to find file %1! Kan inte hitta filen %1 ! @@ -2530,7 +2545,7 @@ Vill du ladda ned den nu ? %2. - + &loadBackup... ladda&Backup... @@ -2572,7 +2587,7 @@ Vill du ladda ned den nu ? Det går inte att identifiera sändaren. Verifiera att EEPOROM-skivan är ansluteten. - + Yes Ja @@ -2612,7 +2627,29 @@ Vill du ladda ned den nu ? Release notes innehåller väldigt viktig information. Vill du läsa dem nu? - + + The selected language will be used the next time you start Companion. + Språket som valts kommer att användas nästa gång Companion startas. + + + + + + OK + OK + + + + The new theme will be loaded the next time you start Companion. + De nya ikonerna kommer att användas nästa gång Companion startas. + + + + The icon size will be used the next time you start Companion. + Ikonernas storlek kommer att justeras nästa gång Companion startas. + + + Firmware updates Firmware-uppdatering @@ -2725,7 +2762,17 @@ Starta skrivningen i alla fall ? Om Companion - + + &Downloads and Profiles... + &Nedladdningar och Profiler... + + + + Firmware and voice file downloads as well as profile definition. + Ladda ned firmware och röstfiler. Definera profildata. + + + Check for new version of Companion Sök efter ny version av Companion @@ -2750,7 +2797,207 @@ Starta skrivningen i alla fall ? Visa firmware-förändringar - + + Configure transmitter start screen... + Konfigurera sändarens startbild... + + + + &Configure connection software... + Inställningar för &kommunikation... + + + + Classic + Klassiskt + + + + The multicolor classical Companion icon theme + Det flerfärgade klassiska Companion-temat + + + + A monochrome black icon theme + Ett monokromt svart tema + + + + A monochrome white icon theme + Ett monokromt vitt tema + + + + A monochrome blue icon theme + Ett monokromt blått tema + + + + Small + Liten + + + + Use small toolbar icons + Använd små ikoner i verktygsfälten + + + + Use normal size toolbar icons + Använd normalstora ikoner i verktygsfälten + + + + Normal + Normal + + + + Use big toolbar icons + Använd stora ikoner i verktygsfälten + + + + Big + Stor + + + + Use huge toolbar icons + Använd mycket stora ikoner i verktygsfälten + + + + Huge + Mycket Stor + + + + System default language + Systemspråk + + + + Use system default language in menus + Använd systemspråket i menyerna (om tillgängligt) + + + + Czech + Czeckiska + + + + Use Czech in menus + Använd Tjeckiska i menyerna + + + + German + Tyska + + + + Use German in menus + Använd Tyska i menyerna + + + + English + Engelska + + + + Use English in menus + Använd Engelska i menyerna + + + + French + Franska + + + + Use French in menus + Använd Franska i menyerna + + + + Italian + Italienska + + + + Use Italian in menus + Använd Italienska i menyerna + + + + Hebrew + Hebreiska + + + + Use Hebrew in menus + Använd Hebreiska i menyerna + + + + Polish + Polska + + + + Use Polish in menus + Använd Polska i menyerna + + + + Portuguese + Portugisiska + + + + Use Portuguese in menus + Använd Portugisiska i menyerna + + + + Swedish + Svenska + + + + Use Swedish in menus + Använd Svenska i menyerna + + + + Russian + Ryska + + + + Use Russian in menus + Använd Ryska i menyerna + + + + Set Icon Theme + Ställ in Ikontema + + + + Set Icon Size + Ställ in Ikonstorlek + + + + &Settings + &Inställningar + + + Invalid Models and Settings File %1 Filen innehåller inte Modeller och Inställningar: %1 @@ -2884,7 +3131,7 @@ Vill du spara förändringarna? The backup dir set in preferences does not exist - Katalog för säkerhetskopiering saknas i inställningarna + Den katalog som konfigurerats för säkerhetskopiering existerar inte @@ -2907,7 +3154,7 @@ Vill du spara förändringarna? Firmware in radio is of a different family of eeprom written, check file and preferences! - sändarens firmware är av en annan typ än den aktuella. Kontrollera Arkiv och Inställningar! + sändarens firmware är av en annan typ än den aktuella. Kontrollera konfigurationen! @@ -3797,7 +4044,7 @@ p, li { white-space: pre-wrap; } T2 - + th9x th9x @@ -3847,7 +4094,7 @@ p, li { white-space: pre-wrap; } Starta loggning - + @@ -3906,7 +4153,7 @@ p, li { white-space: pre-wrap; } Modelldata sparades, men med dessa varningar: - + ersky9x ersky9x @@ -3918,7 +4165,7 @@ p, li { white-space: pre-wrap; } Det finns ännu ingen simulator för denna typ av firmware - + REa REa @@ -4177,41 +4424,9 @@ p, li { white-space: pre-wrap; } THR GAS - - RUD - ROD - - - ELE - HÖJ - - - ID0 - ID0 - - - ID1 - ID1 - - - ID2 - ID2 - - - AIL - SKE - - - GEA - LAN - - - TRN - TRN - - + ON @@ -4222,7 +4437,7 @@ p, li { white-space: pre-wrap; } Av - + Safety %1 Säkring %1 @@ -4409,12 +4624,11 @@ p, li { white-space: pre-wrap; } Belysning - Own trim - Egen trim + Egen trim - + Keys Knappar @@ -4672,13 +4886,13 @@ p, li { white-space: pre-wrap; } GV%1 - - + + --- ---- - + Rud Trim Rod.Trim @@ -4743,7 +4957,7 @@ p, li { white-space: pre-wrap; } Inmatningshjul - + Own value Eget värde @@ -4777,7 +4991,7 @@ p, li { white-space: pre-wrap; } - + S1 S1 @@ -4918,7 +5132,7 @@ p, li { white-space: pre-wrap; } Ökning - + Yellow Gul @@ -5209,7 +5423,7 @@ p, li { white-space: pre-wrap; } !Kurva(%1) - + FM%1 FM%1 @@ -5270,17 +5484,16 @@ p, li { white-space: pre-wrap; } Flygläge %1 - Flight mode %1 trim - Fligmod %1 trim + Fligmod %1 trim - + Flight mode %1 value Flygläge %1 värde - + openTx only accepts %1 points in all curves openTX accepterar bar %1 punkter i alla kurvor @@ -5450,6 +5663,26 @@ Vi uppskattar ert stöd! Gruppen bakom OpenTX/Companion. + + + Trim disabled + Trim inaktiv + + + + Own Trim + Egen trim + + + + Use Trim from Flight mode %1 + Använd trim från flygläge %1 + + + + Use Trim from Flight mode %1 + Own Trim as an offset + Använd trim från flygläge %1 + Eget trim som offset + Setup @@ -5803,62 +6036,6 @@ Gasen reverseras om alternativet väljs. Tomgång ligger då uppåt. Trim och ga Persistent mAh Bestående mAh - - Telemetry screen 1 - Telemetriskärm 1 - - - Custom Screen Type - Visa data som - - - Nums - Nummer - - - Bars - Staplar - - - Source - Källa - - - Min - Min - - - Gauge - Mätare - - - Max - Max - - - Gauge 1 - Mätare 1 - - - Gauge 2 - Mätare 2 - - - Gauge 3 - Mätare 3 - - - Gauge 4 - Mätare 4 - - - Telemetry screen 2 - Telemetriskärm 2 - - - Telemetry screen 3 - Telemetriskärm 3 - TelemetryAnalog @@ -6091,6 +6268,172 @@ Gasen reverseras om alternativet väljs. Tomgång ligger då uppåt. Trim och ga Nedräkning + + appPreferencesDialog + + + Application Preferences + Programmets Inställningar + + + + Simulator capture folder + Lagra simulatorbilder i + + + + Remember simulator switch values + Spara läget för alla brytare i simulatorn + + + + + + Open Folder + Öppna katalog + + + + User Splash Screens + Egna Startbilder + + + + Blue + Blå + + + + Green + Grön + + + + Red + Röd + + + + Orange + Orange + + + + Yellow + Gul + + + + Include companion splashes + Användarens bilder och Companion-bilder + + + + Only user defined splashes + Enbart användarens bilder + + + + Splash Screen Library + Bibliotek för startbilder + + + + Files to keep + Behåll filer + + + + Simulator BackLight + Simulatorbelysning + + + + Automatic Backup Folder + Säkerhetskopiera till folder + + + + Only capture to clipboard + Spara bara bilder till Urklipp + + + + Joystick + Joystick + + + + Find Executable + Sök Program + + + + Google Earth Executable + Sökväg till Google Earth + + + + Calibrate + Kalibrera + + + + Enable + Aktivera + + + + Show splash screen when Companion starts + Visa en start-bild då Companion startas + + + + Automatic check for OpenTX firmware updates + Sök automatiskt efter uppdateringar av OpenTX + + + + Automatic check for Companion updates + Sök automatiskt efter uppdateringar av Companion + + + + Offer to use wizard for new models + Erbjud användning av modellguiden för nya modeller + + + + Enable automatic backup before writing firmware + Säkerhetskopiera innan firmware-skrivning + + + + Select your snapshot folder + Välj katalog för snapshots av Tx-simulatorn + + + + + No joysticks found + Ingen joystick hittades + + + + Select your library folder + Välj bibliotekskatalog + + + + Select your Models and Settings backup folder + Välj folder för automatisk säkerhetskopiering + + + + Select Google Earth executable + Sökväg till Google Earth + + avrOutputDialog @@ -6468,7 +6811,7 @@ m2560 för v4.1-kort Customize Splash - Välj Startbild + Välj Sändarens Startbild @@ -7291,67 +7634,104 @@ m2560 för v4.1-kort customizeSplashDialog - Customize Splash - Ställ in Startbild + Ställ in Startbild + + + <!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:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';"><br /></span></p></body></html> + <!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:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Sans Serif';"><br /></span></p></body></html> + + + + Transmitter Splash Screen Editor + Startbildsredigerare + + + + + Invert + Invertera + + + + + Load FW + Ladda FW + + + + + Load Pict + Ladda Bild + + + + + Load Profile + Ladda Profil + + + + + Save + Spara - Save Image - Spara bild + Spara bild - - Invert Color - Invertera bild - - - Load Firmware - Ladda firmware + Ladda firmware - Load Image - Ladda bild + Ladda bild - + + Open Splash Library Öppna bildbibliotek - - - Select an original firmware file - Välj original-firmware + Välj original-firmware - + Open Öppna - Select an image to customize your splash <br />or save actual firmware splash - Välj vilken bild som skall visas när sändaren slås på<br/>eller spara bilden som finns i firmware + Välj vilken bild som skall visas när sändaren slås på<br/>eller spara bilden som finns i firmware + + + + - - - + Error Fel - + Could not find bitmap to replace in file Det finns ingen bild att byta i firmware-filen - + Open Image to load Öppna bild för laddning @@ -7361,65 +7741,57 @@ m2560 för v4.1-kort Bilder (%1) - - + + Cannot load %1. Kunde inte ladda %1. - - - Save your custimized firmware - Spara din modifierade firmware-fil + + + Could not store image in firmware file %1 + Det gick inte att spara bilden i firmware-filen %1 - + The image file %1 could not be stored + Det gick inte att spara bilden i filen %1 + + + Save your custimized firmware + Spara din modifierade firmware-fil + + Write to file - Skriv till fil + Skriv till fil - Error reading file %1 - Fel vid läsning från filen %1 + Fel vid läsning från filen %1 - Firmware correctly saved. - Firmware sparades. + Firmware sparades. - Firmware not saved. - Firmware sparades inte. + Firmware sparades inte. - PNG images (*.png);; - PNG bilder (*.png);; + PNG bilder (*.png);; - + + + + ... ... - - <!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:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - <!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:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - Save Firmware - Spara Firmware + Spara Firmware @@ -7586,6 +7958,339 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'MS Shell Dlg 2'; font-size:8pt;">Om du ändå råkar låsa sändaren så googla på &quot;dealing with Fuse Bricks&quot;.</span></p></body></html> + + fwPreferencesDialog + + Download Firmware and Voice + Ladda ned Firmware och Ljud + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CheckBox + Kryssruta + + + Hardware Profile Name + Hårdvaruprofil-namn + + + + Set language of voice. +May be different from firmware language + Välj språk för röstfunktioner. +Får skilja från språket för firmware + + + + SD Structure path + Sökväg till SD-struktur + + + + Processor ID + Processortyp + + + Language + Språk + + + + Default Stick Mode + Spaktilldelning + + + Voice + Röst + + + + Channel Order + Kanalordning + + + + Mode selection: + +Mode 1: + Left stick: Elevator, Rudder + Right stick: Throttle, Aileron + +Mode 2: + Left stick: Throttle, Rudder + Right stick: Elevator, Aileron + +Mode 3: + Left stick: Elevator, Aileron + Right stick: Throttle, Rudder + +Mode 4: + Left stick: Throttle, Aileron + Right stick: Elevator, Rudder + + + Välj Mode: + +Mode 1: + Vänster spak: Höjdroder, Sidroder + Höger spak: Gas, Skevroder + +Mode 2: + Vänster spak: Gas, Sidroder + Höger spak: Höjdroder, Skevroder + +Mode 3: + Vänster spak: Höjdroder, Skevroder + Höger spak: Gas, Sidroder + +Mode 4: + Vänster spak: Gas, Skevroder + Höger spak: Höjdroder, Sidroder + + + + + + Mode 1 (RUD ELE THR AIL) + Mode 1 (ROD HÖJ GAS SKE) + + + + Mode 2 (RUD THR ELE AIL) + Mode 2 (ROD GAS HÖJ SKE) + + + + Mode 3 (AIL ELE THR RUD) + Mode 3 (SKE HÖJ GAS ROD) + + + + Mode 4 (AIL THR ELE RUD) + Mode 4 (SKE GAS HÖJ ROD) + + + Storage Position + Profilposition + + + + Options + Val + + + Firmware Type + Firmware-typer + + + + Channel order + +This is used by the templated to determine which channel goes to what number output. + Kanalordning + +Används av mallarna för att koppla ihop kanaler med numrerade utgångar. + + + + Open Folder + Öppna Katalog + + + + Offer to write FW to Tx after download + Skriv FW till Tx efter nedladdning + + + + Profile Splash Screen + Profilens startbild + + + Profile Name + Profilnamn + + + + Import + Import + + + + Export + Export + + + + Downloads and Profiles + Nedladdning och Profiler + + + + Save Profile + Spara Profil + + + + Menu Language + Menyspråk + + + + Profile + Profil + + + + Voice Language + Röstspråk + + + Profile Number + Profilnummer + + + + Firmware Type + Firmware-typ + + + + Append version number to FW file name + Addera versionsnumret till FW-filnamnet + + + + Download Voice + Ladda Röstfiler + + + + FwInfo + --- + + + + Open Image + Öppna bild + + + + Clear Image + Ta bort Bild + + + + Download FW + Ladda ned Firmware + + + + Check for updates + Sök efter uppdateringar + + + + Last downloaded release: %1 + Senast nedladdade release: %1 + + + + The selected firmware has never been downloaded by Companion. + Firmware-filen har aldrig laddats ned av Companion. + + + + The selected firmware cannot be downloaded by Companion. + Firmware-filen kan inte laddas ned av Companion. + + + + Select the folder replicating your SD structure + Välj katalog med en kopia av din SD-struktur + + + + Profile name is empty, profile slot %1 will be deleted.<br>Are you sure ? + Profilnamn saknas, profilplats %1 kommer att raderas.<br> Är du säker? + + + + Export profile As + Exportera profil Som + + + + Profile slot is not empty, profile slot %1 will we overwritten.<br>Are you sure ? + Det finns redan en profil i position %1,. Den kommer att skrivas över.<br> Är du säker ? + + + + Open Profile to import + Öppna profil för import + + + + Open Image to load + Öppna bildfil för laddning + + + + Images (%1) + Bilder (%1) + + + + Error + Fel + + + + Cannot load %1. + Kan inte ladda %1. + + joystickDialog @@ -8336,17 +9041,13 @@ Tryck på Avbryt för att avburyta kalibreringen preferencesDialog + Preferences - Inställningar + Konfiguration - - Language (requires restart) - Språk (kräver omstart) - - - + Recent History Size Loggstorlek @@ -8357,7 +9058,7 @@ Tryck på Avbryt för att avburyta kalibreringen Nedladdning - + Default Channel Order Kanalordning @@ -8371,17 +9072,17 @@ This is used by the templated to determine which channel goes to what number out Detta används av mallen för att koppla kanal till output-nummer. - + Show Splash At Start Visa Startbild - + Default Stick Mode Spaktilldelning - + Mode selection: Mode 1: @@ -8442,73 +9143,17 @@ Mode 4: Mode 4 (SKE GAS HÖJ ROD) - + Automatic Backup Folder Säkerhetskopiera till folder - + Firmware Firmware - - Theme - Tema - - - - - Requires restart - Kräver omstart - - - - Classic - Klassiskt - - - - Monochrome - Monokromt - - - - MonoWhite - Monokromt Vitt - - - - MonoBlue - Monokromt Blått - - - - Icon size - Ikonstorlek - - - - Small - Liten - - - - Normal - Normal - - - - Big - Stor - - - - Huge - Enorm - - - + Find Executable Sök Program @@ -8523,36 +9168,43 @@ Mode 4: Sök efter uppdateringar vid start - - + + + + ... ... - + + Splash library behaviour Beteende för bildbibliotek - + + Personal splash library Personligt bildbibliotek - + + Joystick Joystick - - + + + + - + Open Folder Öppna katalog - + @@ -8598,69 +9250,83 @@ Mode 4: Kryssruta - + Check for updates Sök efter uppdateringar - + + Blue Blu Blå + Green Grön + Red Röd + Orange Orange + Yellow Gul - + + Enable Slå på - + + Remember simulator switches + Spara läget simulator-brytarna + + + + Calibrate Kalibrera - + + Open Image Öppna bild - + + Invert Pixels Invertera bild - + FwInfo Firmware-info - + Last downloaded release: %1 Senast nedladdade release: %1 - - + + No joysticks found Ingen joystick hittades @@ -8691,7 +9357,7 @@ Mode 4: Fel - + The selected firmware has never been downloaded by Companion. Firmware-filen har aldrig laddats ned av Companion. @@ -8701,43 +9367,46 @@ Mode 4: Firmware-filen kan inte laddas ned av Companion. - + Cannot load %1. %1 kunde inte laddas. - + Image stored in settings Bilden lagras i inställningar - + + Include companion splashes Användarens bilder och companion-bilder + Only user defined splashes Enbart användarens bilder - + + Custom TX splash screen Egen uppstartsbild - + Ask for flashing after Download Fråga om skrivning efter Nedladdning - + Language Språk - + Profile Name Profilnamn @@ -8747,22 +9416,22 @@ Mode 4: Spara Profil - + Profile slot Profilplats - + auto backup before write säkerhetskopiera innan skrivning - + Select your library folder Välj bibliotekskatalog - + Export Profile Exportera Profil @@ -8772,7 +9441,7 @@ Mode 4: Importera Profil - + Automatically add version number to the filename after download Lägg automatiskt till ett versionsnummer till filnamnet @@ -8804,22 +9473,25 @@ Får skilja från språket för mjukvaran Öppna profil för import - + + Simu BackLight Simulatorbelysning - + Processor ID Processortyp - + + Simulator capture folder Katalog för simulator-data - + + Use clipboard only Använd bara clipboard @@ -8834,12 +9506,12 @@ Får skilja från språket för mjukvaran Profilnamn saknas, profilplats %1 kommer att raderas.<br> Är du säker? - + Check for selected Fw updates Sök efter updatering av vald FW - + Ask use of wizard for new models Använd modell-guiden för nya modeller @@ -8849,7 +9521,7 @@ Får skilja från språket för mjukvaran Minns brytare i simulator - + SD Structure path Sökväg till SD-struktur @@ -9739,134 +10411,6 @@ Får skilja från språket för mjukvaran - Flight mode: %1(%2) - Fligmod: %1(%2) - - CS1 - LB1 - - - CS2 - LB2 - - - CS3 - LB3 - - - CS4 - LB4 - - - CS5 - LB5 - - - CS6 - LB6 - - - CS7 - LB7 - - - CS8 - LB8 - - - CS9 - LB9 - - - CSA - LBA - - - CSB - LBB - - - CSC - LBC - - - CSD - LBD - - - CSE - LBE - - - CSF - LBF - - - CSG - LBG - - - CSH - LBH - - - CSI - LBI - - - CSJ - LBJ - - - CSK - LBK - - - CSL - LBL - - - CSM - LBM - - - CSN - LBN - - - CSO - LBO - - - CSP - LBP - - - CSQ - LBQ - - - CSR - LBR - - - CSS - LBS - - - CST - LBT - - - CSU - LBU - - - CSV - LBV - - - CSW - LBW - splashLibrary @@ -10328,133 +10872,5 @@ Får skilja från språket för mjukvaran - Flight mode: %1(%2) - Fligmod: %1(%2) - - CSK - LBK - - - CSC - LBC - - - CSD - LBD - - - CS7 - LB7 - - - CSL - LBL - - - CSB - LBB - - - CS1 - LB1 - - - CSH - LBH - - - CSG - LBG - - - CSE - LBE - - - CSF - LBF - - - CS8 - LB8 - - - CS9 - LB9 - - - CSA - LBA - - - CSM - LBM - - - CSJ - LBJ - - - CSI - LBI - - - CS4 - LB4 - - - CS5 - LB5 - - - CS2 - LB2 - - - CS3 - LB3 - - - CS6 - LB6 - - - CSN - LBN - - - CSO - LBO - - - CSP - LBP - - - CSQ - LBQ - - - CSR - LBR - - - CSS - LBS - - - CST - LBT - - - CSU - LBU - - - CSV - LBV - - - CSW - LBW - diff --git a/companion/src/xsimulatordialog.cpp b/companion/src/xsimulatordialog.cpp index 488439715..07524bb04 100644 --- a/companion/src/xsimulatordialog.cpp +++ b/companion/src/xsimulatordialog.cpp @@ -383,6 +383,9 @@ void xsimulatorDialog::setValues() { TxOutputs outputs; simulator->getValues(outputs); + + Trims trims; + simulator->getTrims(trims); ui->chnout_1->setValue(chVal(outputs.chans[0])); ui->chnout_2->setValue(chVal(outputs.chans[1])); @@ -422,11 +425,11 @@ void xsimulatorDialog::setValues() ui->chnoutV_16->setText(QString("%1").arg((qreal)outputs.chans[15]*100/1024, 0, 'f', 1)); } - ui->leftXPerc->setText(QString("X %1%").arg((qreal)nodeLeft->getX()*100, 2, 'f', 0)); - ui->leftYPerc->setText(QString("Y %1%").arg((qreal)nodeLeft->getY()*-100, 2, 'f', 0)); + ui->leftXPerc->setText(QString("X %1%").arg((qreal)nodeLeft->getX()*100+trims.values[0]/5, 2, 'f', 0)); + ui->leftYPerc->setText(QString("Y %1%").arg((qreal)nodeLeft->getY()*-100+trims.values[1]/5, 2, 'f', 0)); - ui->rightXPerc->setText(QString("X %1%").arg((qreal)nodeRight->getX()*100, 2, 'f', 0)); - ui->rightYPerc->setText(QString("Y %1%").arg((qreal)nodeRight->getY()*-100, 2, 'f', 0)); + ui->rightXPerc->setText(QString("X %1%").arg((qreal)nodeRight->getX()*100+trims.values[2]/5, 2, 'f', 0)); + ui->rightYPerc->setText(QString("Y %1%").arg((qreal)nodeRight->getY()*-100+trims.values[3]/5, 2, 'f', 0)); #define CSWITCH_ON "QLabel { background-color: #4CC417 }" #define CSWITCH_OFF "QLabel { }" diff --git a/radio/src/.gitignore b/radio/src/.gitignore index 0f2d1136d..abbd8a427 100644 --- a/radio/src/.gitignore +++ b/radio/src/.gitignore @@ -7,3 +7,6 @@ /simu.d /snapshot_*.png /*.sh +/*.o +/*.bin +/*.lst diff --git a/radio/src/Makefile b/radio/src/Makefile index 97083ad00..12fb145b1 100644 --- a/radio/src/Makefile +++ b/radio/src/Makefile @@ -285,7 +285,7 @@ ifeq ($(PCB), $(filter $(PCB), STD 9X 9XR)) ARCH = AVR TRGT = avr- MCU = atmega64 - OPT = s + OPT = s SDCARD = NO THR_TRACE = NO INCDIRS += targets/stock diff --git a/radio/src/audio_arm.cpp b/radio/src/audio_arm.cpp index dc16ff64a..5d2fb1be9 100644 --- a/radio/src/audio_arm.cpp +++ b/radio/src/audio_arm.cpp @@ -571,7 +571,7 @@ void AudioQueue::wakeup() } // mix the background context - if (!isFunctionActive(FUNC_BACKGND_MUSIC_PAUSE)) { + if (!isFunctionActive(FUNCTION_BACKGND_MUSIC_PAUSE)) { result = mixAudioContext(backgroundContext, buffer, g_eeGeneral.varioVolume, g_eeGeneral.backgroundVolume, fade); if (result > 0) { size = max(size, result); diff --git a/radio/src/eeprom_conversions.cpp b/radio/src/eeprom_conversions.cpp index 8b3de2718..99bd2c841 100644 --- a/radio/src/eeprom_conversions.cpp +++ b/radio/src/eeprom_conversions.cpp @@ -124,7 +124,7 @@ PACK(typedef struct { }) TimerData_v215; PACK(typedef struct { - TRIMS_ARRAY; + int16_t trim[4]; int8_t swtch; // swtch of phase[0] is not used char name[LEN_FP_NAME]; uint8_t fadeIn; @@ -170,7 +170,7 @@ PACK(typedef struct { int16_t curves[16]; int8_t points[NUM_POINTS]; - CustomSwData customSw[NUM_CSW]; + LogicalSwitchData customSw[NUM_CSW]; CustomFnData funcSw[NUM_CFN]; SwashRingData swashR; PhaseData_v215 phaseData[MAX_PHASES]; @@ -198,15 +198,18 @@ void ConvertGeneralSettings_215_to_216(EEGeneral &settings) #if defined(PCBTARANIS) int ConvertSwitch_215_to_216(int swtch) { - if (swtch < SWSRC_ON) + if (swtch <= SWSRC_LAST_SWITCH) return swtch; else - return swtch + (2*6); // 2 * 6-pos pots added as switches + return swtch + (2*4) + (2*6); // 4 trims and 2 * 6-pos added as switches } #else inline int ConvertSwitch_215_to_216(int swtch) { - return swtch; + if (swtch <= SWSRC_LAST_SWITCH) + return swtch; + else + return swtch + (2*4) + 1; // 4 trims and REa added } #endif @@ -221,7 +224,7 @@ void ConvertModel_215_to_216(ModelData &model) // Custom Switches: better precision for x when A comes from telemetry // Main View: altitude in top bar // Mixes: GVARS in weight moved from 512 to 4096 and -512 to -4096, because GVARS may be used in limits [-1250:1250] - // Switches: two 6-pos pots added + // Switches: two 6-pos pots added, REa added to Sky9x TRACE("Model conversion from v215 to v216"); @@ -378,15 +381,15 @@ void ConvertModel_215_to_216(ModelData &model) for (uint8_t i=0; i<32; i++) { g_model.customSw[i] = oldModel.customSw[i]; #if defined(PCBTARANIS) - CustomSwData * cs = &g_model.customSw[i]; + LogicalSwitchData * cs = &g_model.customSw[i]; uint8_t cstate = cswFamily(cs->func); - if (cstate == CS_VOFS || cstate == CS_VCOMP || cstate == CS_VDIFF) { + if (cstate == LS_FAMILY_OFS || cstate == LS_FAMILY_COMP || cstate == LS_FAMILY_DIFF) { if (cs->v1 > 0) cs->v1 += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS; if (cs->v1 > MIXSRC_GVAR1+4) cs->v1 += 4; } - if (cstate == CS_VOFS || cstate == CS_VDIFF) { + if (cstate == LS_FAMILY_OFS || cstate == LS_FAMILY_DIFF) { if (cs->v1 >= MIXSRC_FIRST_TELEM) { - switch (cs->v1) { + switch ((uint8_t)cs->v1) { case MIXSRC_FIRST_TELEM + TELEM_TM1-1: case MIXSRC_FIRST_TELEM + TELEM_TM2-1: cs->v2 = (cs->v2+128) * 3; @@ -428,7 +431,7 @@ void ConvertModel_215_to_216(ModelData &model) } } } - if (cstate == CS_VCOMP) { + if (cstate == LS_FAMILY_COMP) { if (cs->v2 > 0) cs->v2 += MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS; if (cs->v2 > MIXSRC_GVAR1+4) cs->v2 += 4; } @@ -437,7 +440,7 @@ void ConvertModel_215_to_216(ModelData &model) for (uint8_t i=0; i<32; i++) { g_model.funcSw[i] = oldModel.funcSw[i]; CustomFnData *sd = &g_model.funcSw[i]; - if (CFN_FUNC(sd) == FUNC_PLAY_VALUE || CFN_FUNC(sd) == FUNC_VOLUME || (IS_ADJUST_GV_FUNCTION(sd) && CFN_GVAR_MODE(sd) == FUNC_ADJUST_GVAR_SOURCE)) { + if (CFN_FUNC(sd) == FUNC_PLAY_VALUE || CFN_FUNC(sd) == FUNC_VOLUME || (IS_ADJUST_GV_FUNC(CFN_FUNC(sd)) && CFN_GVAR_MODE(sd) == FUNC_ADJUST_GVAR_SOURCE)) { #if defined(PCBTARANIS) CFN_PARAM(sd) += 1 + MAX_INPUTS + MAX_SCRIPTS*MAX_SCRIPT_OUTPUTS; #endif @@ -455,6 +458,22 @@ void ConvertModel_215_to_216(ModelData &model) for (uint8_t i=0; i<9; i++) { memcpy(&g_model.phaseData[i], &oldModel.phaseData[i], sizeof(oldModel.phaseData[i])); // the last 4 gvars will remain blank +#if defined(PCBTARANIS) + for (uint8_t t=0; t<4; t++) { + int trim = oldModel.phaseData[i].trim[t]; + if (trim > 500) { + trim -= 501; + if (trim >= i) + trim += 1; + g_model.phaseData[i].trim[t].mode = 2*trim; + g_model.phaseData[i].trim[t].value = 0; + } + else { + g_model.phaseData[i].trim[t].mode = 2*i; + g_model.phaseData[i].trim[t].value = trim; + } + } +#endif } g_model.thrTraceSrc = oldModel.thrTraceSrc; g_model.switchWarningStates = oldModel.switchWarningStates >> 1; diff --git a/radio/src/eeprom_raw.cpp b/radio/src/eeprom_raw.cpp index 5439e89a9..718fe3558 100644 --- a/radio/src/eeprom_raw.cpp +++ b/radio/src/eeprom_raw.cpp @@ -383,7 +383,6 @@ void eeLoadModel(uint8_t id) resumePulses(); } - activeSwitches = 0; activeFnSwitches = 0; activeFunctions = 0; memclear(lastFunctionTime, sizeof(lastFunctionTime)); diff --git a/radio/src/eeprom_rlc.cpp b/radio/src/eeprom_rlc.cpp index a56834186..f6f62502e 100644 --- a/radio/src/eeprom_rlc.cpp +++ b/radio/src/eeprom_rlc.cpp @@ -948,7 +948,6 @@ void eeLoadModel(uint8_t id) resumePulses(); } - activeSwitches = 0; activeFnSwitches = 0; activeFunctions = 0; memclear(lastFunctionTime, sizeof(lastFunctionTime)); diff --git a/radio/src/gtests.cpp b/radio/src/gtests.cpp index fe6cb1a0a..5530d21a2 100644 --- a/radio/src/gtests.cpp +++ b/radio/src/gtests.cpp @@ -304,8 +304,8 @@ TEST(getSwitch, circularCSW) { MODEL_RESET(); MIXER_RESET(); - g_model.customSw[0] = { SWSRC_SW1, SWSRC_SW1, CS_OR }; - g_model.customSw[1] = { SWSRC_SW1, SWSRC_SW1, CS_AND }; + g_model.customSw[0] = { SWSRC_SW1, SWSRC_SW1, LS_FUNC_OR }; + g_model.customSw[1] = { SWSRC_SW1, SWSRC_SW1, LS_FUNC_AND }; EXPECT_EQ(getSwitch(SWSRC_SW1), false); EXPECT_EQ(getSwitch(-SWSRC_SW1), true); EXPECT_EQ(getSwitch(SWSRC_SW2), false); @@ -324,8 +324,8 @@ TEST(getSwitch, recursiveSW) MODEL_RESET(); MIXER_RESET(); - g_model.customSw[0] = { SWSRC_RUD, -SWSRC_SW2, CS_OR }; - g_model.customSw[1] = { SWSRC_ELE, -SWSRC_SW1, CS_OR }; + g_model.customSw[0] = { SWSRC_RUD, -SWSRC_SW2, LS_FUNC_OR }; + g_model.customSw[1] = { SWSRC_ELE, -SWSRC_SW1, LS_FUNC_OR }; EXPECT_EQ(getSwitch(SWSRC_SW1), false); EXPECT_EQ(getSwitch(SWSRC_SW2), true); diff --git a/radio/src/gui/menu_general.cpp b/radio/src/gui/menu_general.cpp index 28656db26..25c9a28c5 100644 --- a/radio/src/gui/menu_general.cpp +++ b/radio/src/gui/menu_general.cpp @@ -1037,19 +1037,17 @@ void menuGeneralVersion(uint8_t event) { SIMPLE_MENU(STR_MENUVERSION, menuTabDiag, e_Vers, 1); - lcd_putsLeft(2*FH, stamp1); - lcd_putsLeft(3*FH, stamp2); - lcd_putsLeft(4*FH, stamp3); + lcd_putsLeft(2*FH, vers_stamp); + #if defined(PCBSKY9X) && !defined(REVA) if (Coproc_valid == 1) { - lcd_putsLeft(5*FH, PSTR("CoPr:")); - lcd_outdez8(10*FW, 5*FH, Coproc_read); + lcd_putsLeft(6*FH, PSTR("CoPr:")); + lcd_outdez8(10*FW, 6*FH, Coproc_read); } else { - lcd_putsLeft(5*FH, PSTR("CoPr: ---")); + lcd_putsLeft(6*FH, PSTR("CoPr: ---")); } -#endif - lcd_putsLeft(7*FH, eeprom_stamp); +#endif } void displayKeyState(uint8_t x, uint8_t y, EnumKeys key) diff --git a/radio/src/gui/menu_model.cpp b/radio/src/gui/menu_model.cpp index 914678779..df0cd3105 100644 --- a/radio/src/gui/menu_model.cpp +++ b/radio/src/gui/menu_model.cpp @@ -55,7 +55,7 @@ enum EnumTabModel { #if LCD_W >= 212 IF_GVARS(e_GVars) #endif - e_CustomSwitches, + e_LogicalSwitches, e_CustomFunctions, #if defined(LUA_MODEL_SCRIPTS) e_CustomScripts, @@ -74,7 +74,7 @@ void menuModelMixAll(uint8_t event); void menuModelLimits(uint8_t event); void menuModelCurvesAll(uint8_t event); void menuModelGVars(uint8_t event); -void menuModelCustomSwitches(uint8_t event); +void menuModelLogicalSwitches(uint8_t event); void menuModelCustomFunctions(uint8_t event); void menuModelCustomScripts(uint8_t event); void menuModelTelemetry(uint8_t event); @@ -93,7 +93,7 @@ const MenuFuncP_PROGMEM menuTabModel[] PROGMEM = { #if LCD_W >= 212 && defined(GVARS) && defined(FLIGHT_MODES) IF_GVARS(menuModelGVars) #endif - menuModelCustomSwitches, + menuModelLogicalSwitches, menuModelCustomFunctions, #if defined(LUA_MODEL_SCRIPTS) menuModelCustomScripts, @@ -1057,7 +1057,7 @@ void menuModelSetup(uint8_t event) } else { putsStrIdx(0*FW, y, STR_TIMER, k>=ITEM_MODEL_TIMER2 ? 2 : 1); - putsTmrMode(MODEL_SETUP_2ND_COLUMN, y, timer->mode, m_posHorz==0 ? attr : 0); + putsTimerMode(MODEL_SETUP_2ND_COLUMN, y, timer->mode, m_posHorz==0 ? attr : 0); putsTime(MODEL_SETUP_2ND_COLUMN+5*FW-2+5*FWNUM+1, y, timer->start, m_posHorz==1 ? attr : 0, m_posHorz==2 ? attr : 0); #if defined(PCBTARANIS) if (attr && m_posHorz < 0) lcd_filled_rect(MODEL_SETUP_2ND_COLUMN, y, LCD_W-MODEL_SETUP_2ND_COLUMN-MENUS_SCROLLBAR_WIDTH, 8); @@ -1066,7 +1066,7 @@ void menuModelSetup(uint8_t event) div_t qr = div(timer->start, 60); switch (m_posHorz) { case 0: - CHECK_INCDEC_MODELVAR(event, timer->mode, -2*(NUM_PSWITCH+NUM_CSW), TMR_VAROFS-1+2*(NUM_PSWITCH+NUM_CSW)); + CHECK_INCDEC_MODELVAR(event, timer->mode, SWSRC_FIRST, TMR_VAROFS+SWSRC_LAST-1/*--- which is OFF*/); break; case 1: CHECK_INCDEC_MODELVAR_ZERO(event, qr.quot, 59); @@ -1799,86 +1799,34 @@ FlightModesType editFlightModes(uint8_t x, uint8_t y, uint8_t event, FlightModes return value; } -#if LCD_W >= 212 +#if defined(PCBTARANIS) enum FlightModesItems { ITEM_PHASES_NAME, ITEM_PHASES_SWITCH, - ITEM_PHASES_TRIMS, + ITEM_PHASES_TRIM_RUD, + ITEM_PHASES_TRIM_ELE, + ITEM_PHASES_TRIM_THR, + ITEM_PHASES_TRIM_AIL, ITEM_PHASES_FADE_IN, ITEM_PHASES_FADE_OUT, ITEM_PHASES_COUNT, ITEM_PHASES_LAST = ITEM_PHASES_COUNT-1 }; -void editPhaseTrims(uint8_t x, uint8_t y, uint8_t phase, uint8_t event, uint8_t active) +bool isTrimModeAvailable(int16_t mode) { - static uint8_t cursorPos = 0; - - for (uint8_t t=0; t 0) { - if (p1valdiff || IS_ROTARY_RIGHT(event) || IS_ROTARY_LEFT(event) || event==EVT_KEY_FIRST(KEY_DOWN) || event==EVT_KEY_FIRST(KEY_UP) - || event==EVT_KEY_REPT(KEY_DOWN) || event==EVT_KEY_REPT(KEY_UP)) { - int16_t v = getRawTrimValue(phase, cur); - if (v < TRIM_EXTENDED_MAX) v = TRIM_EXTENDED_MAX; - v = checkIncDec(event, v, TRIM_EXTENDED_MAX, TRIM_EXTENDED_MAX+MAX_PHASES-1, EE_MODEL); - if (checkIncDec_Ret) { - if (v == TRIM_EXTENDED_MAX) v = 0; - setTrimValue(phase, cur, v); - } - } - - switch (event) { -#if defined(ROTARY_ENCODER_NAVIGATION) || defined(PCBTARANIS) - case EVT_ROTARY_BREAK: - if (s_editMode == EDIT_MODIFY_FIELD) { - s_editMode = EDIT_MODIFY_STRING; - cur = 0; - } - else if (cur0) cur--; - break; - case EVT_KEY_BREAK(KEY_RIGHT): - if (cur 0) { posHorz += 2; } + if (sub==0 && posHorz > 0) { posHorz += 5; } if (sub=0) { displayColumnHeader(STR_PHASES_HEADERS, posHorz); @@ -1905,35 +1853,41 @@ void menuModelFlightModesAll(uint8_t event) for (uint8_t j=0; j0) ? BLINK|INVERS : INVERS) : 0); uint8_t active = (attr && (s_editMode>0 || p1valdiff)) ; - switch(j) - { + switch (j) { case ITEM_PHASES_NAME: - editName(4*FW, y, p->name, sizeof(p->name), event, attr); + editName(4*FW-1, y, p->name, sizeof(p->name), event, attr); break; case ITEM_PHASES_SWITCH: if (k == 0) { - lcd_puts((5+LEN_FP_NAME)*FW+FW/2, y, STR_DEFAULT); + lcd_puts((5+LEN_FP_NAME)*FW, y, STR_DEFAULT); } else { putsSwitches((5+LEN_FP_NAME)*FW+FW/2, y, p->swtch, attr); - if (active) CHECK_INCDEC_MODELSWITCH(event, p->swtch, -NUM_SWITCH, NUM_SWITCH); + if (active) CHECK_INCDEC_MODELSWITCH(event, p->swtch, SWSRC_FIRST, SWSRC_LAST); } break; - case ITEM_PHASES_TRIMS: + case ITEM_PHASES_TRIM_RUD: + case ITEM_PHASES_TRIM_ELE: + case ITEM_PHASES_TRIM_THR: + case ITEM_PHASES_TRIM_AIL: if (k != 0) { - editPhaseTrims((10+LEN_FP_NAME)*FW+FW/2, y, k, event, attr); + uint8_t t = j-ITEM_PHASES_TRIM_RUD; + putsTrimMode((4+LEN_FP_NAME)*FW+j*(5*FW/2), y, k, t, attr); + if (active) { + trim_t & v = p->trim[t]; + v.mode = checkIncDec(event, v.mode==TRIM_MODE_NONE ? -1 : v.mode, -1, 2*MAX_PHASES-1, EE_MODEL, isTrimModeAvailable); + } } break; - case ITEM_PHASES_FADE_IN: - lcd_outdezAtt(29*FW, y, (10/DELAY_STEP)*p->fadeIn, attr|PREC1); + lcd_outdezAtt(32*FW-2, y, (10/DELAY_STEP)*p->fadeIn, attr|PREC1); if (active) p->fadeIn = checkIncDec(event, p->fadeIn, 0, DELAY_MAX, EE_MODEL|NO_INCDEC_MARKS); break; case ITEM_PHASES_FADE_OUT: - lcd_outdezAtt(34*FW, y, (10/DELAY_STEP)*p->fadeOut, attr|PREC1); + lcd_outdezAtt(35*FW, y, (10/DELAY_STEP)*p->fadeOut, attr|PREC1); if (active) p->fadeOut = checkIncDec(event, p->fadeOut, 0, DELAY_MAX, EE_MODEL|NO_INCDEC_MARKS); break; @@ -1942,7 +1896,7 @@ void menuModelFlightModesAll(uint8_t event) } } -#else // LCD_W >= 212 +#else // PCBTARANIS enum menuModelPhaseItems { ITEM_MODEL_PHASE_NAME, @@ -2348,7 +2302,8 @@ void DrawCurve(uint8_t offset=0) uint8_t i = 0; do { - point_t point = getPoint(i++); + point_t point = getPoint(i); + i++; if (point.x == 0) break; lcd_filled_rect(point.x-offset, point.y-1, 3, 3, SOLID, FORCE); // do markup square } while(1); @@ -2985,7 +2940,7 @@ void menuModelExpoOne(uint8_t event) case EXPO_FIELD_SCALE: lcd_putsLeft(y, STR_SCALE); putsTelemetryChannel(EXPO_ONE_2ND_COLUMN, y, ed->srcRaw - MIXSRC_FIRST_TELEM, 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, NULL); + if (attr) ed->scale = checkIncDec(event, ed->scale, 0, maxTelemValue(ed->srcRaw - MIXSRC_FIRST_TELEM + 1), EE_MODEL); break; #endif @@ -3316,7 +3271,7 @@ static uint8_t s_copySrcCh; #define MIX_LINE_SRC_POS 4*FW-1 #if LCD_W >= 212 - #define EXPO_LINE_WEIGHT_POS 8*FW+1 + #define EXPO_LINE_WEIGHT_POS 8*FW+3 #define EXPO_LINE_SRC_POS 9*FW-2 #define EXPO_LINE_CURVE_POS 12*FW+4 #define EXPO_LINE_SWITCH_POS 17*FW-1 @@ -3328,7 +3283,7 @@ static uint8_t s_copySrcCh; #define MIX_LINE_SWITCH_POS 16*FW+1 #define MIX_LINE_DELAY_POS 19*FW+2 #elif defined(CPUARM) - #define EXPO_LINE_WEIGHT_POS 7*FW-1 + #define EXPO_LINE_WEIGHT_POS 7*FW+1 #define EXPO_LINE_EXPO_POS 10*FW+5 #define EXPO_LINE_SWITCH_POS 11*FW+2 #define EXPO_LINE_SIDE_POS 14*FW+2 @@ -3340,7 +3295,7 @@ static uint8_t s_copySrcCh; #define MIX_LINE_SWITCH_POS 16*FW #define MIX_LINE_DELAY_POS 19*FW+7 #else - #define EXPO_LINE_WEIGHT_POS 7*FW-1 + #define EXPO_LINE_WEIGHT_POS 7*FW+1 #define EXPO_LINE_EXPO_POS 11*FW #define EXPO_LINE_SWITCH_POS 11*FW+4 #if MAX_PHASES == 6 @@ -4246,25 +4201,28 @@ void menuModelGVars(uint8_t event) #define CHECK_INCDEC_PARAM(event, var, min, max) checkIncDec(event, var, min, max, incdecFlag) #endif -enum CustomSwitchFields { - CSW_FIELD_FUNCTION, - CSW_FIELD_V1, - CSW_FIELD_V2, - CSW_FIELD_ANDSW, -#if defined(CPUARM) - CSW_FIELD_DURATION, - CSW_FIELD_DELAY, +enum LogicalSwitchFields { + LS_FIELD_FUNCTION, + LS_FIELD_V1, + LS_FIELD_V2, +#if defined(PCBTARANIS) + LS_FIELD_V3, #endif - CSW_FIELD_COUNT, - CSW_FIELD_LAST = CSW_FIELD_COUNT-1 + LS_FIELD_ANDSW, +#if defined(CPUARM) + LS_FIELD_DURATION, + LS_FIELD_DELAY, +#endif + LS_FIELD_COUNT, + LS_FIELD_LAST = LS_FIELD_COUNT-1 }; #if LCD_W >= 212 #define CSW_1ST_COLUMN (4*FW-3) - #define CSW_2ND_COLUMN (8*FW+1) - #define CSW_3RD_COLUMN (14*FW) - #define CSW_4TH_COLUMN (21*FW+1) - #define CSW_5TH_COLUMN (26*FW+1) + #define CSW_2ND_COLUMN (8*FW+2+FW/2) + #define CSW_3RD_COLUMN (14*FW+1+FW/2) + #define CSW_4TH_COLUMN (22*FW) + #define CSW_5TH_COLUMN (26*FW+3) #define CSW_6TH_COLUMN (31*FW+1) #else #define CSW_1ST_COLUMN (4*FW-3) @@ -4277,14 +4235,15 @@ enum CustomSwitchFields { #define CSWONE_2ND_COLUMN (11*FW) -void menuModelCustomSwitchOne(uint8_t event) +void menuModelLogicalSwitchOne(uint8_t event) { TITLE(STR_MENUCUSTOMSWITCH); - CustomSwData * cs = cswAddress(s_currIdx); + LogicalSwitchData * cs = cswAddress(s_currIdx); uint8_t sw = SWSRC_SW1+s_currIdx; putsSwitches(14*FW, 0, sw, (getSwitch(sw) ? BOLD : 0)); - SIMPLE_SUBMENU_NOTITLE(CSW_FIELD_COUNT); + + SUBMENU_NOTITLE(LS_FIELD_COUNT, {0, 0, 1, 0 /*, 0...*/}); int8_t sub = m_posVert; @@ -4294,26 +4253,34 @@ void menuModelCustomSwitchOne(uint8_t event) uint8_t attr = (sub==i ? (s_editMode>0 ? BLINK|INVERS : INVERS) : 0); uint8_t cstate = cswFamily(cs->func); switch(i) { - case CSW_FIELD_FUNCTION: + case LS_FIELD_FUNCTION: lcd_putsLeft(y, STR_FUNC); lcd_putsiAtt(CSWONE_2ND_COLUMN, y, STR_VCSWFUNC, cs->func, attr); if (attr) { - CHECK_INCDEC_MODELVAR_ZERO(event, cs->func, CS_MAXF); - if (cstate != cswFamily(cs->func)) { - cs->v1 = 0; - cs->v2 = 0; + cs->func = checkIncDec(event, cs->func, 0, LS_FUNC_MAX, EE_MODEL, isLogicalSwitchFunctionAvailable); + uint8_t new_cstate = cswFamily(cs->func); + if (cstate != new_cstate) { + if (new_cstate == LS_FAMILY_TIMER) { + cs->v1 = cs->v2 = -119; + } + else if (new_cstate == LS_FAMILY_STAY) { + cs->v1 = 0; cs->v2 = -129; cs->v3 = 0; + } + else { + cs->v1 = cs->v2 = 0; + } } } break; - case CSW_FIELD_V1: + case LS_FIELD_V1: { lcd_putsLeft(y, STR_V1); int8_t v1_min=0, v1_max=MIXSRC_LAST_TELEM; - if (cstate == CS_VBOOL) { + if (cstate == LS_FAMILY_BOOL || cstate == LS_FAMILY_STICKY || cstate == LS_FAMILY_STAY) { putsSwitches(CSWONE_2ND_COLUMN, y, cs->v1, attr); v1_min = SWSRC_OFF+1; v1_max = SWSRC_ON-1; } - else if (cstate == CS_VTIMER) { + else if (cstate == LS_FAMILY_TIMER) { lcd_outdezAtt(CSWONE_2ND_COLUMN, y, cs->v1+1, LEFT|attr); v1_max = 99; } @@ -4325,19 +4292,35 @@ void menuModelCustomSwitchOne(uint8_t event) } break; } - case CSW_FIELD_V2: + case LS_FIELD_V2: { lcd_putsLeft(y, STR_V2); - int8_t v2_min=0, v2_max=MIXSRC_LAST_TELEM; - if (cstate == CS_VBOOL) { + int16_t v2_min=0, v2_max=MIXSRC_LAST_TELEM; + if (cstate == LS_FAMILY_BOOL || cstate == LS_FAMILY_STICKY) { putsSwitches(CSWONE_2ND_COLUMN, y, cs->v2, attr); v2_min = SWSRC_OFF+1; v2_max = SWSRC_ON-1; } - else if (cstate == CS_VTIMER) { + else if (cstate == LS_FAMILY_TIMER) { lcd_outdezAtt(CSWONE_2ND_COLUMN, y, cs->v2+1, LEFT|attr); v2_max = 99; } - else if (cstate == CS_VCOMP) { + else if (cstate == LS_FAMILY_STAY) { + lcd_putc(CSWONE_2ND_COLUMN-4, y, '['); + lcd_outdezAtt(CSWONE_2ND_COLUMN, y, cswTimerValue(cs->v2), LEFT|PREC1|(m_posHorz==0 ? attr : 0)); + lcd_putc(lcdLastPos, y, ':'); + if (cs->v3 == 0) + lcd_putsAtt(lcdLastPos+3, y, "--", (m_posHorz==1 ? attr : 0)); + else + lcd_outdezAtt(lcdLastPos+3, y, cswTimerValue(cs->v2+cs->v3), LEFT|PREC1|(m_posHorz==1 ? attr : 0)); + lcd_putc(lcdLastPos, y, ']'); + if (s_editMode <= 0) continue; + if (attr && m_posHorz==1) { + CHECK_INCDEC_MODELVAR(event, cs->v3, 0, 222 - cs->v2); + break; + } + v2_min=-129; v2_max = 122; + } + else if (cstate == LS_FAMILY_COMP) { putsMixerSource(CSWONE_2ND_COLUMN, y, cs->v2, attr); } else { @@ -4345,7 +4328,7 @@ void menuModelCustomSwitchOne(uint8_t event) if (cs->v1 >= MIXSRC_FIRST_TELEM) { putsTelemetryChannel(CSWONE_2ND_COLUMN, y, cs->v1 - MIXSRC_FIRST_TELEM, convertCswTelemValue(cs), attr|LEFT); v2_max = maxTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1); - if (cstate == CS_VOFS) { + if (cstate == LS_FAMILY_OFS) { v2_min = -128; v2_max -= 128; } @@ -4371,34 +4354,34 @@ void menuModelCustomSwitchOne(uint8_t event) } break; } - case CSW_FIELD_ANDSW: + case LS_FIELD_ANDSW: lcd_putsLeft(y, STR_AND_SWITCH); putsSwitches(CSWONE_2ND_COLUMN, y, cs->andsw, attr); - if (attr) CHECK_INCDEC_MODELVAR(event, cs->andsw, -NUM_SWITCH, NUM_SWITCH); + if (attr) CHECK_INCDEC_MODELVAR(event, cs->andsw, -MAX_LS_ANDSW, MAX_LS_ANDSW); break; - case CSW_FIELD_DURATION: + case LS_FIELD_DURATION: lcd_putsLeft(y, STR_DURATION); if (cs->duration > 0) lcd_outdezAtt(CSWONE_2ND_COLUMN, y, 5*cs->duration, attr|PREC1|LEFT); else lcd_putsiAtt(CSWONE_2ND_COLUMN, y, STR_MMMINV, 0, attr); - if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, cs->duration, MAX_CSW_DURATION); + if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, cs->duration, MAX_LS_DURATION); break; - case CSW_FIELD_DELAY: + case LS_FIELD_DELAY: lcd_putsLeft(y, STR_DELAY); if (cs->delay > 0) lcd_outdezAtt(CSWONE_2ND_COLUMN, y, 5*cs->delay, attr|PREC1|LEFT); else lcd_putsiAtt(CSWONE_2ND_COLUMN, y, STR_MMMINV, 0, attr); - if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, cs->delay, MAX_CSW_DELAY); + if (attr) CHECK_INCDEC_MODELVAR_ZERO(event, cs->delay, MAX_LS_DELAY); break; } } } -void menuModelCustomSwitches(uint8_t event) +void menuModelLogicalSwitches(uint8_t event) { - SIMPLE_MENU(STR_MENUCUSTOMSWITCHES, menuTabModel, e_CustomSwitches, NUM_CSW+1); + SIMPLE_MENU(STR_MENUCUSTOMSWITCHES, menuTabModel, e_LogicalSwitches, NUM_CSW+1); uint8_t y = 0; uint8_t k = 0; @@ -4412,7 +4395,7 @@ void menuModelCustomSwitches(uint8_t event) case EVT_KEY_FIRST(KEY_ENTER): if (sub >= 0) { s_currIdx = sub; - pushMenu(menuModelCustomSwitchOne); + pushMenu(menuModelLogicalSwitchOne); } break; } @@ -4420,7 +4403,7 @@ void menuModelCustomSwitches(uint8_t event) for (uint8_t i=0; ifunc); - if (cstate == CS_VBOOL) { + if (cstate == LS_FAMILY_BOOL || cstate == LS_FAMILY_STICKY) { putsSwitches(CSW_2ND_COLUMN, y, cs->v1, 0); putsSwitches(CSW_3RD_COLUMN, y, cs->v2, 0); } - else if (cstate == CS_VCOMP) { + else if (cstate == LS_FAMILY_COMP) { putsMixerSource(CSW_2ND_COLUMN, y, cs->v1, 0); putsMixerSource(CSW_3RD_COLUMN, y, cs->v2, 0); } - else if (cstate == CS_VTIMER) { + else if (cstate == LS_FAMILY_STAY) { + putsSwitches(CSW_2ND_COLUMN, y, cs->v1, 0); + lcd_putc(CSW_3RD_COLUMN-4, y, '['); + lcd_outdezAtt(CSW_3RD_COLUMN, y, cswTimerValue(cs->v2), LEFT|PREC1); + lcd_putc(lcdLastPos, y, ':'); + if (cs->v3 == 0) + lcd_puts(lcdLastPos+3, y, "--"); + else + lcd_outdezAtt(lcdLastPos+3, y, cswTimerValue(cs->v2+cs->v3), LEFT|PREC1); + lcd_putc(lcdLastPos-1, y, ']'); + } + else if (cstate == LS_FAMILY_TIMER) { lcd_outdezAtt(CSW_2ND_COLUMN, y, cs->v1+1, LEFT); lcd_outdezAtt(CSW_3RD_COLUMN, y, cs->v2+1, LEFT); } @@ -4474,17 +4468,17 @@ enum ClipboardType { struct Clipboard { ClipboardType type; union { - CustomSwData csw; + LogicalSwitchData csw; CustomFnData cfn; } data; }; Clipboard clipboard; -void onCustomSwitchesMenu(const char *result) +void onLogicalSwitchesMenu(const char *result) { int8_t sub = m_posVert-1; - CustomSwData * cs = cswAddress(sub); + LogicalSwitchData * cs = cswAddress(sub); if (result == STR_COPY) { clipboard.type = CLIPBOARD_TYPE_CUSTOM_SWITCH; @@ -4495,17 +4489,17 @@ void onCustomSwitchesMenu(const char *result) eeDirty(EE_MODEL); } else if (result == STR_DELETE) { - memset(cs, 0, sizeof(CustomSwData)); + memset(cs, 0, sizeof(LogicalSwitchData)); eeDirty(EE_MODEL); } } #endif -void menuModelCustomSwitches(uint8_t event) +void menuModelLogicalSwitches(uint8_t event) { INCDEC_DECLARE_VARS(); - MENU(STR_MENUCUSTOMSWITCHES, menuTabModel, e_CustomSwitches, NUM_CSW+1, {0, NAVIGATION_LINE_BY_LINE|CSW_FIELD_LAST/*repeated...*/}); + MENU(STR_MENUCUSTOMSWITCHES, menuTabModel, e_LogicalSwitches, NUM_CSW+1, {0, NAVIGATION_LINE_BY_LINE|LS_FIELD_LAST/*repeated...*/}); uint8_t y = 0; uint8_t k = 0; @@ -4519,15 +4513,15 @@ void menuModelCustomSwitches(uint8_t event) #endif #if defined(PCBTARANIS) - if (sub>=0 && horz<0 && event==EVT_KEY_LONG(KEY_ENTER) && !READ_ONLY()) { - killEvents(event); - CustomSwData * cs = cswAddress(sub); - if (cs->func) MENU_ADD_ITEM(STR_COPY); - if (clipboard.type == CLIPBOARD_TYPE_CUSTOM_SWITCH) - MENU_ADD_ITEM(STR_PASTE); - if (cs->func || cs->v1 || cs->v2 || cs->delay || cs->duration || cs->andsw) MENU_ADD_ITEM(STR_DELETE); - menuHandler = onCustomSwitchesMenu; - } + if (sub>=0 && horz<0 && event==EVT_KEY_LONG(KEY_ENTER) && !READ_ONLY()) { + killEvents(event); + LogicalSwitchData * cs = cswAddress(sub); + if (cs->func) MENU_ADD_ITEM(STR_COPY); + if (clipboard.type == CLIPBOARD_TYPE_CUSTOM_SWITCH) + MENU_ADD_ITEM(STR_PASTE); + if (cs->func || cs->v1 || cs->v2 || cs->delay || cs->duration || cs->andsw) MENU_ADD_ITEM(STR_DELETE); + menuHandler = onLogicalSwitchesMenu; + } #endif for (uint8_t i=0; i0) ? BLINK|INVERS : INVERS) : 0); uint8_t attr1 = (horz==1 ? attr : 0); uint8_t attr2 = (horz==2 ? attr : 0); - CustomSwData * cs = cswAddress(k); + LogicalSwitchData * cs = cswAddress(k); // CSW name uint8_t sw = SWSRC_SW1+k; @@ -4549,25 +4543,50 @@ void menuModelCustomSwitches(uint8_t event) uint8_t cstate = cswFamily(cs->func); #if defined(CPUARM) int16_t v1_min=0, v1_max=MIXSRC_LAST_TELEM, v2_min=0, v2_max=MIXSRC_LAST_TELEM; + int16_t v3_min=0, v3_max=100; #else int8_t v1_min=0, v1_max=MIXSRC_LAST_TELEM, v2_min=0, v2_max=MIXSRC_LAST_TELEM; #endif - if (cstate == CS_VBOOL) { + if (cstate == LS_FAMILY_BOOL || cstate == LS_FAMILY_STICKY) { putsSwitches(CSW_2ND_COLUMN, y, cs->v1, attr1); putsSwitches(CSW_3RD_COLUMN, y, cs->v2, attr2); v1_min = SWSRC_OFF+1; v1_max = SWSRC_ON-1; v2_min = SWSRC_OFF+1; v2_max = SWSRC_ON-1; INCDEC_SET_FLAG(INCDEC_SWITCH); - INCDEC_ENABLE_CHECK(NULL); + INCDEC_ENABLE_CHECK(isSwitchAvailableInLogicalSwitches); } - else if (cstate == CS_VCOMP) { +#if defined(CPUARM) + else if (cstate == LS_FAMILY_STAY) { + putsSwitches(CSW_2ND_COLUMN, y, cs->v1, attr1); + lcd_putc(CSW_3RD_COLUMN-4, y, '['); + lcd_outdezAtt(CSW_3RD_COLUMN, y, cswTimerValue(cs->v2), LEFT|PREC1|attr2); + lcd_putc(lcdLastPos, y, ':'); + if (cs->v3 == 0) + lcd_putsAtt(lcdLastPos+3, y, "--", (horz==LS_FIELD_V3 ? attr : 0)); + else + lcd_outdezAtt(lcdLastPos+3, y, cswTimerValue(cs->v2+cs->v3), LEFT|PREC1|(horz==LS_FIELD_V3 ? attr : 0)); + lcd_putc(lcdLastPos, y, ']'); + v1_min = SWSRC_OFF+1; v1_max = SWSRC_ON-1; + v2_min=-129; v2_max = 122; + v3_max = 222 - cs->v2; + if (horz == 1) { + INCDEC_SET_FLAG(INCDEC_SWITCH); + INCDEC_ENABLE_CHECK(isSwitchAvailable); + } + else { + INCDEC_SET_FLAG(0); + INCDEC_ENABLE_CHECK(NULL); + } + } +#endif + else if (cstate == LS_FAMILY_COMP) { putsMixerSource(CSW_2ND_COLUMN, y, cs->v1, attr1); putsMixerSource(CSW_3RD_COLUMN, y, cs->v2, attr2); INCDEC_SET_FLAG(INCDEC_SOURCE); INCDEC_ENABLE_CHECK(isSourceAvailable); } - else if (cstate == CS_VTIMER) { + else if (cstate == LS_FAMILY_TIMER) { lcd_outdezAtt(CSW_2ND_COLUMN, y, cswTimerValue(cs->v1), LEFT|PREC1|attr1); lcd_outdezAtt(CSW_3RD_COLUMN, y, cswTimerValue(cs->v2), LEFT|PREC1|attr2); v1_min = v2_min = -128; @@ -4596,7 +4615,7 @@ void menuModelCustomSwitches(uint8_t event) eeDirty(EE_MODEL); } #else - if (cstate == CS_VOFS) { + if (cstate == LS_FAMILY_OFS) { v2_min = -128; v2_max -= 128; } @@ -4626,43 +4645,79 @@ void menuModelCustomSwitches(uint8_t event) #endif } - // CSW and switch - putsSwitches(CSW_4TH_COLUMN, y, cs->andsw, horz==3 ? attr : 0); + // CSW AND switch +#if defined(CPUARM) + putsSwitches(CSW_4TH_COLUMN, y, cs->andsw, horz==LS_FIELD_ANDSW ? attr : 0); +#else + uint8_t andsw = cs->andsw; + if (andsw > SWSRC_LAST_SWITCH) { + andsw += SWSRC_SW1-SWSRC_LAST_SWITCH-1; + } + putsSwitches(CSW_4TH_COLUMN, y, andsw, horz==LS_FIELD_ANDSW ? attr : 0); +#endif #if defined(CPUARM) // CSW duration if (cs->duration > 0) - lcd_outdezAtt(CSW_5TH_COLUMN, y, 5*cs->duration, (horz==4 ? attr : 0)|PREC1|LEFT); + lcd_outdezAtt(CSW_5TH_COLUMN, y, 5*cs->duration, (horz==LS_FIELD_DURATION ? attr : 0)|PREC1|LEFT); else - lcd_putsiAtt(CSW_5TH_COLUMN, y, STR_MMMINV, 0, horz==4 ? attr : 0); + lcd_putsiAtt(CSW_5TH_COLUMN, y, STR_MMMINV, 0, horz==LS_FIELD_DURATION ? attr : 0); // CSW delay - if (cs->delay > 0) - lcd_outdezAtt(CSW_6TH_COLUMN, y, 5*cs->delay, (horz==5 ? attr : 0)|PREC1|LEFT); - else - lcd_putsiAtt(CSW_6TH_COLUMN, y, STR_MMMINV, 0, horz==5 ? attr : 0); + if (cstate == LS_FAMILY_STAY) { + lcd_puts(CSW_6TH_COLUMN, y, "N/A"); + if (attr && horz == LS_FIELD_DELAY) { + REPEAT_LAST_CURSOR_MOVE(); + } + } + else if (cs->delay > 0) { + lcd_outdezAtt(CSW_6TH_COLUMN, y, 5*cs->delay, (horz==LS_FIELD_DELAY ? attr : 0)|PREC1|LEFT); + } + else { + lcd_putsiAtt(CSW_6TH_COLUMN, y, STR_MMMINV, 0, horz==LS_FIELD_DELAY ? attr : 0); + } + + if (attr && horz == LS_FIELD_V3 && cstate != LS_FAMILY_STAY) { + REPEAT_LAST_CURSOR_MOVE(); + } #endif if ((s_editMode>0 || p1valdiff) && attr) { switch (horz) { - case CSW_FIELD_FUNCTION: + case LS_FIELD_FUNCTION: { - CHECK_INCDEC_MODELVAR_ZERO(event, cs->func, CS_MAXF); +#if defined(CPUARM) + cs->func = checkIncDec(event, cs->func, 0, LS_FUNC_MAX, EE_MODEL, isLogicalSwitchFunctionAvailable); +#else + CHECK_INCDEC_MODELVAR_ZERO(event, cs->func, LS_FUNC_MAX); +#endif uint8_t new_cstate = cswFamily(cs->func); - if (cstate != new_cstate) - cs->v1 = cs->v2 = (new_cstate==CS_VTIMER ? -119/*1.0*/ : 0); + if (cstate != new_cstate) { +#if defined(CPUARM) + if (new_cstate == LS_FAMILY_TIMER) { + cs->v1 = cs->v2 = -119; + } + else if (new_cstate == LS_FAMILY_STAY) { + cs->v1 = 0; cs->v2 = -129; cs->v3 = 0; + } + else { + cs->v1 = cs->v2 = 0; + } +#else + cs->v1 = cs->v2 = (new_cstate==LS_FAMILY_TIMER ? -119/*1.0*/ : 0); +#endif + } break; } - case CSW_FIELD_V1: + case LS_FIELD_V1: cs->v1 = CHECK_INCDEC_PARAM(event, cs->v1, v1_min, v1_max); break; - case CSW_FIELD_V2: + case LS_FIELD_V2: cs->v2 = CHECK_INCDEC_PARAM(event, cs->v2, v2_min, v2_max); #if defined(PCBTARANIS) - if (cstate==CS_VOFS && cs->v1!=0 && event==EVT_KEY_LONG(KEY_ENTER)) { + if (cstate==LS_FAMILY_OFS && cs->v1!=0 && event==EVT_KEY_LONG(KEY_ENTER)) { killEvents(event); getvalue_t x = getValue(cs->v1); - TRACE("AUTO x=%d", x); if (cs->v1 < MIXSRC_GVAR1) cs->v2 = calcRESXto100(x); else if (cs->v1 - MIXSRC_FIRST_TELEM + 1 == TELEM_ALT) @@ -4671,19 +4726,26 @@ void menuModelCustomSwitches(uint8_t event) } #endif break; - case CSW_FIELD_ANDSW: #if defined(CPUARM) - CHECK_INCDEC_MODELSWITCH(event, cs->andsw, -MAX_CSW_ANDSW, MAX_CSW_ANDSW); + case LS_FIELD_V3: + cs->v3 = CHECK_INCDEC_PARAM(event, cs->v3, v3_min, v3_max); + break; +#endif + case LS_FIELD_ANDSW: +#if defined(CPUARM) + INCDEC_SET_FLAG(INCDEC_SWITCH); + INCDEC_ENABLE_CHECK(isSwitchAvailableInLogicalSwitches); + cs->andsw = CHECK_INCDEC_PARAM(event, cs->andsw, -MAX_LS_ANDSW, MAX_LS_ANDSW); #else - CHECK_INCDEC_MODELVAR_ZERO(event, cs->andsw, MAX_CSW_ANDSW); + CHECK_INCDEC_MODELVAR_ZERO(event, cs->andsw, MAX_LS_ANDSW); #endif break; #if defined(CPUARM) - case CSW_FIELD_DURATION: - CHECK_INCDEC_MODELVAR_ZERO(event, cs->duration, MAX_CSW_DURATION); + case LS_FIELD_DURATION: + CHECK_INCDEC_MODELVAR_ZERO(event, cs->duration, MAX_LS_DURATION); break; - case CSW_FIELD_DELAY: - CHECK_INCDEC_MODELVAR_ZERO(event, cs->delay, MAX_CSW_DELAY); + case LS_FIELD_DELAY: + CHECK_INCDEC_MODELVAR_ZERO(event, cs->delay, MAX_LS_DELAY); break; #endif } @@ -4693,9 +4755,9 @@ void menuModelCustomSwitches(uint8_t event) #endif #if LCD_W >= 212 - #define MODEL_CUSTOM_FUNC_1ST_COLUMN (5+4*FW) - #define MODEL_CUSTOM_FUNC_2ND_COLUMN (9*FW) - #define MODEL_CUSTOM_FUNC_3RD_COLUMN (21*FW) + #define MODEL_CUSTOM_FUNC_1ST_COLUMN (5+3*FW) + #define MODEL_CUSTOM_FUNC_2ND_COLUMN (8*FW) + #define MODEL_CUSTOM_FUNC_3RD_COLUMN (20*FW) #define MODEL_CUSTOM_FUNC_4TH_COLUMN (33*FW-3) #define MODEL_CUSTOM_FUNC_4TH_COLUMN_ONOFF (34*FW-3) #else @@ -4718,14 +4780,14 @@ void onCustomFunctionsFileSelectionMenu(const char *result) if (result == STR_UPDATE_LIST) { char directory[] = SOUNDS_PATH; strncpy(directory+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); - if (!listSdFiles(directory, SOUNDS_EXT, sizeof(g_model.funcSw[sub].param), NULL)) { + if (!listSdFiles(directory, SOUNDS_EXT, sizeof(g_model.funcSw[sub].play.name), NULL)) { POPUP_WARNING(STR_NO_SOUNDS_ON_SD); s_menu_flags = 0; } } else { // The user choosed a wav file in the list - memcpy(g_model.funcSw[sub].param.name, result, sizeof(g_model.funcSw[sub].param.name)); + memcpy(g_model.funcSw[sub].play.name, result, sizeof(g_model.funcSw[sub].play.name)); eeDirty(EE_MODEL); } } @@ -4765,7 +4827,7 @@ void onCustomFunctionsMenu(const char *result) void menuModelCustomFunctions(uint8_t event) { - MENU(STR_MENUCUSTOMFUNC, menuTabModel, e_CustomFunctions, NUM_CFN+1, {0, NAVIGATION_LINE_BY_LINE|3/*repeated*/}); + MENU(STR_MENUCUSTOMFUNC, menuTabModel, e_CustomFunctions, NUM_CFN+1, {0, NAVIGATION_LINE_BY_LINE|4/*repeated*/}); uint8_t y; uint8_t k = 0; @@ -4798,239 +4860,239 @@ void menuModelCustomFunctions(uint8_t event) #endif CustomFnData *sd = &g_model.funcSw[k]; - for (uint8_t j=0; j<4; j++) { + uint8_t func = CFN_FUNC(sd); + for (uint8_t j=0; j<5; j++) { uint8_t attr = ((sub==k && m_posHorz==j) ? ((s_editMode>0) ? BLINK|INVERS : INVERS) : 0); uint8_t active = (attr && (s_editMode>0 || p1valdiff)); switch (j) { case 0: - putsSwitches(MODEL_CUSTOM_FUNC_1ST_COLUMN, y, sd->swtch, attr | ((activeFnSwitches & ((MASK_CFN_TYPE)1 << k)) ? BOLD : 0)); - if (active || AUTOSWITCH_ENTER_LONG()) CHECK_INCDEC_MODELSWITCH(event, sd->swtch, SWSRC_FIRST, SWSRC_LAST); + putsSwitches(MODEL_CUSTOM_FUNC_1ST_COLUMN, y, CFN_SWITCH(sd), attr | ((activeFnSwitches & ((MASK_CFN_TYPE)1 << k)) ? BOLD : 0)); + if (active || AUTOSWITCH_ENTER_LONG()) CHECK_INCDEC_MODELSWITCH(event, CFN_SWITCH(sd), SWSRC_FIRST, SWSRC_LAST); break; case 1: - if (sd->swtch) { - uint8_t func_displayed; - if (CFN_FUNC(sd) < FUNC_TRAINER) { - func_displayed = 0; - putsChn(MODEL_CUSTOM_FUNC_2ND_COLUMN+6*FW, y, CFN_CH_NUMBER(sd)+1, attr); - } - else if (CFN_FUNC(sd) <= FUNC_TRAINER + NUM_STICKS) { - func_displayed = 1; - if (CFN_FUNC(sd) != FUNC_TRAINER) - putsMixerSource(MODEL_CUSTOM_FUNC_2ND_COLUMN+7*FW, y, MIXSRC_Rud+CFN_FUNC(sd)-FUNC_TRAINER-1, attr); - } -#if defined(DEBUG) - else if (CFN_FUNC(sd) == FUNC_TEST) { -#if defined(GVARS) - func_displayed = FUNC_TEST - FUNC_TRAINER - NUM_STICKS - MAX_GVARS + 2; -#else - func_displayed = FUNC_TEST - FUNC_TRAINER - NUM_STICKS + 1; -#endif - } -#endif -#if defined(GVARS) - else if (CFN_FUNC(sd) >= FUNC_ADJUST_GV1) { - func_displayed = FUNC_ADJUST_GV1 - FUNC_TRAINER - NUM_STICKS + 1; - putsStrIdx(MODEL_CUSTOM_FUNC_2ND_COLUMN+7*FW, y, STR_GV, CFN_FUNC(sd)-FUNC_ADJUST_GV1+1, attr); - } -#endif - else { - func_displayed = 2 + CFN_FUNC(sd) - FUNC_TRAINER - NUM_STICKS - 1; - } - lcd_putsiAtt(MODEL_CUSTOM_FUNC_2ND_COLUMN, y, STR_VFSWFUNC, func_displayed, attr); + if (CFN_SWITCH(sd)) { + lcd_putsiAtt(MODEL_CUSTOM_FUNC_2ND_COLUMN, y, STR_VFSWFUNC, func, attr); if (active) { #if defined(CPUARM) - CHECK_INCDEC_MODELVAR_ZERO(event, CFN_FUNC(sd), FUNC_MAX-1); + CFN_FUNC(sd) = checkIncDec(event, CFN_FUNC(sd), 0, FUNC_MAX-1, EE_MODEL, isAssignableFunctionAvailable); #else - if (CFN_FUNC(sd) < FUNC_TRAINER) { - CHECK_INCDEC_MODELVAR_ZERO(event, sd->internal.func_safety.func, 16); - } - else { - CHECK_INCDEC_MODELVAR_ZERO(event, CFN_FUNC(sd), FUNC_MAX-1); - if (CFN_FUNC(sd) < FUNC_TRAINER) - sd->internal.func_safety.func = 15; - } + CHECK_INCDEC_MODELVAR_ZERO(event, CFN_FUNC(sd), FUNC_MAX-1); #endif if (checkIncDec_Ret) CFN_RESET(sd); } } - else if (attr) { - REPEAT_LAST_CURSOR_MOVE(); + else { + j = 4; // skip other fields + if (sub==k && m_posHorz > 0) { + REPEAT_LAST_CURSOR_MOVE(); + } } break; case 2: - if (sd->swtch) { - INCDEC_DECLARE_VARS(); - int16_t val_displayed = CFN_PARAM(sd); - int8_t val_min = 0; - uint8_t val_max = 255; - if (CFN_FUNC(sd) == FUNC_PLAY_SOUND) { -#if defined(AUDIO) - val_max = AU_FRSKY_LAST-AU_FRSKY_FIRST-1; - lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_FUNCSOUNDS, val_displayed, attr); + { + int8_t maxParam = NUM_CHNOUT-1; + if (func == FUNC_SAFETY_CHANNEL) { + putsChn(lcdNextPos, y, CFN_CH_INDEX(sd)+1, attr); + } + else if (func == FUNC_TRAINER) { + maxParam = 4; +#if defined(CPUARM) + putsMixerSource(lcdNextPos, y, CFN_CH_INDEX(sd)==0 ? 0 : MIXSRC_Rud+CFN_CH_INDEX(sd)-1, attr); #else - break; + putsMixerSource(lcdNextPos, y, MIXSRC_Rud+CFN_CH_INDEX(sd)-1, attr); #endif - } -#if defined(HAPTIC) - else if (CFN_FUNC(sd) == FUNC_HAPTIC) { - val_max = 3; - lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT); - } -#endif -#if defined(CPUARM) && defined(SDCARD) - else if (CFN_FUNC(sd) == FUNC_PLAY_TRACK || CFN_FUNC(sd) == FUNC_BACKGND_MUSIC) { -#if LCD_W >= 212 - xcoord_t x = MODEL_CUSTOM_FUNC_3RD_COLUMN; -#else - xcoord_t x = (CFN_FUNC(sd) == FUNC_PLAY_TRACK ? MODEL_CUSTOM_FUNC_2ND_COLUMN + FW + FW*strlen(TR_PLAY_TRACK) : MODEL_CUSTOM_FUNC_3RD_COLUMN); -#endif - if (ZEXIST(sd->param.name)) - lcd_putsnAtt(x, y, sd->param.name, sizeof(sd->param.name), attr); - else - lcd_putsiAtt(x, y, STR_VCSWFUNC, 0, attr); - if (active && event==EVT_KEY_BREAK(KEY_ENTER)) { - s_editMode = 0; - char directory[] = SOUNDS_PATH; - strncpy(directory+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); - if (listSdFiles(directory, SOUNDS_EXT, sizeof(sd->param.name), sd->param.name)) { - menuHandler = onCustomFunctionsFileSelectionMenu; - } - else { - POPUP_WARNING(STR_NO_SOUNDS_ON_SD); - s_menu_flags = 0; - } - } - break; - } - else if (CFN_FUNC(sd) == FUNC_PLAY_VALUE) { - val_max = MIXSRC_FIRST_TELEM + TELEM_DISPLAY_MAX - 1; - putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr); - INCDEC_ENABLE_CHECK(isSourceAvailable); - } + } +#if defined(GVARS) + else if (func == FUNC_ADJUST_GVAR) { + maxParam = MAX_GVARS-1; + putsStrIdx(lcdNextPos, y, STR_GV, CFN_GVAR_INDEX(sd)+1, attr); + if (active) CHECK_INCDEC_MODELVAR_ZERO(event, CFN_GVAR_INDEX(sd), maxParam); + break; + } #endif #if defined(CPUARM) - else if (CFN_FUNC(sd) == FUNC_VOLUME) { - val_max = MIXSRC_LAST_CH; - putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr); - INCDEC_ENABLE_CHECK(isSourceAvailable); - } -#elif defined(VOICE) - else if (CFN_FUNC(sd) == FUNC_PLAY_TRACK) { -#if defined(GVARS) - if (attr && event==EVT_KEY_LONG(KEY_ENTER)) { - killEvents(event); - s_editMode = !s_editMode; - active = true; - val_displayed = (val_displayed > 250 ? 0 : 251); - } - if (val_displayed > 250) { - putsStrIdx(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_GV, val_displayed-250, attr); - } - else { - lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+PROMPT_CUSTOM_BASE, attr|LEFT); - } -#else - lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+PROMPT_CUSTOM_BASE, attr|LEFT); -#endif - } - else if (CFN_FUNC(sd) == FUNC_PLAY_BOTH) { - lcd_putcAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN+3*FWNUM, y, '|', attr); - lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN+3*FWNUM, y, val_displayed+PROMPT_CUSTOM_BASE, attr); - lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN+2+3*FWNUM, y, (val_displayed+PROMPT_CUSTOM_BASE+1)%10, attr|LEFT); - } - else if (CFN_FUNC(sd) == FUNC_PLAY_VALUE) { - val_max = MIXSRC_FIRST_TELEM + TELEM_DISPLAY_MAX - 1; - putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr); - INCDEC_ENABLE_CHECK(isSourceAvailable); - } -#endif -#if defined(SDCARD) - else if (CFN_FUNC(sd) == FUNC_LOGS) { - if (val_displayed) { - lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|PREC1|LEFT); - lcd_putc(lcdLastPos, y, 's'); - } - else { - lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_MMMINV, 0, attr); - } - } -#endif - else if (CFN_FUNC(sd) == FUNC_RESET) { - val_max = FUNC_RESET_PARAM_LAST; - lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VFSWRESET, CFN_PARAM(sd), attr); - } - else if (CFN_FUNC(sd) < FUNC_TRAINER) { - val_displayed = (int8_t)CFN_PARAM(sd); - val_min = -125; val_max = 125; - lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT); - } -#if defined(GVARS) - else if (CFN_FUNC(sd) >= FUNC_ADJUST_GV1 -#if defined(DEBUG) - && CFN_FUNC(sd) <= FUNC_ADJUST_GVLAST -#endif - ) { - switch (CFN_GVAR_MODE(sd)) { - case FUNC_ADJUST_GVAR_CONSTANT: - val_displayed = (int8_t)CFN_PARAM(sd); - val_min = -125; val_max = 125; - lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT); - break; - case FUNC_ADJUST_GVAR_SOURCE: - val_max = MIXSRC_LAST_CH; - putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr); - INCDEC_ENABLE_CHECK(isSourceAvailable); - break; - case FUNC_ADJUST_GVAR_GVAR: - val_max = MAX_GVARS-1; - putsStrIdx(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_GV, val_displayed+1, attr); - break; - default: // FUNC_ADJUST_GVAR_INC - val_max = 1; - lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, PSTR("\002-1+1"), val_displayed, attr); - break; - } - - if (attr && event==EVT_KEY_LONG(KEY_ENTER)) { - killEvents(event); - s_editMode = !s_editMode; - active = true; - CFN_GVAR_MODE(sd) += 1; - val_displayed = 0; - } - } -#endif - else { - if (attr) m_posHorz = (CURSOR_MOVED_LEFT(event) ? 1 : 3); - break; - } - - if (active) { - CFN_PARAM(sd) = CHECK_INCDEC_PARAM(event, val_displayed, val_min, val_max); - } + else if (func == FUNC_SET_TIMER) { + maxParam = 1; + putsStrIdx(lcdNextPos, y, STR_TIMER, CFN_TIMER_INDEX(sd)+1, attr); + if (active) CHECK_INCDEC_MODELVAR_ZERO(event, CFN_TIMER_INDEX(sd), maxParam); + break; } +#endif else if (attr) { REPEAT_LAST_CURSOR_MOVE(); } + if (active) CHECK_INCDEC_MODELVAR_ZERO(event, CFN_CH_INDEX(sd), maxParam); break; + } case 3: - if (sd->swtch && (CFN_FUNC(sd) <= FUNC_INSTANT_TRIM || CFN_FUNC(sd) == FUNC_RESET -#if defined(GVARS) - // TODO #define - || CFN_FUNC(sd) >= FUNC_ADJUST_GV1 + { + INCDEC_DECLARE_VARS(); + int16_t val_displayed = CFN_PARAM(sd); + int8_t val_min = 0; +#if defined(CPUARM) + int16_t val_max = 255; +#else + uint8_t val_max = 255; +#endif + if (func == FUNC_SAFETY_CHANNEL) { + val_displayed = (int8_t)CFN_PARAM(sd); + val_min = -125; val_max = 125; + lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT); + } +#if defined(CPUARM) + else if (func == FUNC_SET_TIMER) { + val_max = 59*60+59; + putsTime(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT, attr); + } +#endif +#if defined(AUDIO) + else if (func == FUNC_PLAY_SOUND) { + val_max = AU_FRSKY_LAST-AU_FRSKY_FIRST-1; + lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_FUNCSOUNDS, val_displayed, attr); + } +#endif +#if defined(HAPTIC) + else if (func == FUNC_HAPTIC) { + val_max = 3; + lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT); + } +#endif +#if defined(CPUARM) && defined(SDCARD) + else if (func == FUNC_PLAY_TRACK || func == FUNC_BACKGND_MUSIC) { +#if LCD_W >= 212 + xcoord_t x = MODEL_CUSTOM_FUNC_3RD_COLUMN; +#else + xcoord_t x = (func == FUNC_PLAY_TRACK ? MODEL_CUSTOM_FUNC_2ND_COLUMN + FW + FW*strlen(TR_PLAY_TRACK) : MODEL_CUSTOM_FUNC_3RD_COLUMN); +#endif + if (ZEXIST(sd->play.name)) + lcd_putsnAtt(x, y, sd->play.name, sizeof(sd->play.name), attr); + else + lcd_putsiAtt(x, y, STR_VCSWFUNC, 0, attr); + if (active && event==EVT_KEY_BREAK(KEY_ENTER)) { + s_editMode = 0; + char directory[] = SOUNDS_PATH; + strncpy(directory+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); + if (listSdFiles(directory, SOUNDS_EXT, sizeof(sd->play.name), sd->play.name)) { + menuHandler = onCustomFunctionsFileSelectionMenu; + } + else { + POPUP_WARNING(STR_NO_SOUNDS_ON_SD); + s_menu_flags = 0; + } + } + break; + } + else if (func == FUNC_PLAY_VALUE) { + val_max = MIXSRC_FIRST_TELEM + TELEM_DISPLAY_MAX - 1; + putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr); + INCDEC_ENABLE_CHECK(isSourceAvailable); + } #endif #if defined(CPUARM) - // TODO #define - || CFN_FUNC(sd) == FUNC_VOLUME + else if (func == FUNC_VOLUME) { + val_max = MIXSRC_LAST_CH; + putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr); + INCDEC_ENABLE_CHECK(isSourceAvailable); + } +#elif defined(VOICE) + else if (func == FUNC_PLAY_TRACK) { +#if defined(GVARS) + if (attr && event==EVT_KEY_LONG(KEY_ENTER)) { + killEvents(event); + s_editMode = !s_editMode; + active = true; + val_displayed = (val_displayed > 250 ? 0 : 251); + } + if (val_displayed > 250) { + putsStrIdx(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_GV, val_displayed-250, attr); + } + else { + lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+PROMPT_CUSTOM_BASE, attr|LEFT); + } +#else + lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed+PROMPT_CUSTOM_BASE, attr|LEFT); #endif - )) { + } + else if (func == FUNC_PLAY_BOTH) { + lcd_putcAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN+3*FWNUM, y, '|', attr); + lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN+3*FWNUM, y, val_displayed+PROMPT_CUSTOM_BASE, attr); + lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN+2+3*FWNUM, y, (val_displayed+PROMPT_CUSTOM_BASE+1)%10, attr|LEFT); + } + else if (func == FUNC_PLAY_VALUE) { + val_max = MIXSRC_FIRST_TELEM + TELEM_DISPLAY_MAX - 1; + putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr); + INCDEC_ENABLE_CHECK(isSourceAvailable); + } +#endif +#if defined(SDCARD) + else if (func == FUNC_LOGS) { + if (val_displayed) { + lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|PREC1|LEFT); + lcd_putc(lcdLastPos, y, 's'); + } + else { + lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_MMMINV, 0, attr); + } + } +#endif + else if (func == FUNC_RESET) { + val_max = FUNC_RESET_PARAM_LAST; + lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_VFSWRESET, CFN_PARAM(sd), attr); + } +#if defined(GVARS) + else if (func == FUNC_ADJUST_GVAR) { + switch (CFN_GVAR_MODE(sd)) { + case FUNC_ADJUST_GVAR_CONSTANT: + val_displayed = (int8_t)CFN_PARAM(sd); + val_min = -125; val_max = 125; + lcd_outdezAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr|LEFT); + break; + case FUNC_ADJUST_GVAR_SOURCE: + val_max = MIXSRC_LAST_CH; + putsMixerSource(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, val_displayed, attr); + INCDEC_ENABLE_CHECK(isSourceAvailable); + break; + case FUNC_ADJUST_GVAR_GVAR: + val_max = MAX_GVARS-1; + putsStrIdx(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, STR_GV, val_displayed+1, attr); + break; + default: // FUNC_ADJUST_GVAR_INC + val_max = 1; + lcd_putsiAtt(MODEL_CUSTOM_FUNC_3RD_COLUMN, y, PSTR("\002-1+1"), val_displayed, attr); + break; + } + + if (attr && event==EVT_KEY_LONG(KEY_ENTER)) { + killEvents(event); + s_editMode = !s_editMode; + active = true; + CFN_GVAR_MODE(sd) += 1; +#if defined(CPUARM) + CFN_GVAR_MODE(sd) &= 0x03; +#endif + val_displayed = 0; + } + } +#endif + else if (attr) { + REPEAT_LAST_CURSOR_MOVE(); + } + + if (active) { + CFN_PARAM(sd) = CHECK_INCDEC_PARAM(event, val_displayed, val_min, val_max); + } + break; + } + + case 4: + if (HAS_ENABLE_PARAM(func)) { menu_lcd_onoff(MODEL_CUSTOM_FUNC_4TH_COLUMN_ONOFF, y, CFN_ACTIVE(sd), attr); if (active) CHECK_INCDEC_MODELVAR_ZERO(event, CFN_ACTIVE(sd), 1); } - else if (sd->swtch && HAS_REPEAT_PARAM(sd)) { + else if (HAS_REPEAT_PARAM(sd)) { if (CFN_PLAY_REPEAT(sd) == 0) { #if LCD_W >= 212 lcd_putsAtt(MODEL_CUSTOM_FUNC_4TH_COLUMN+2, y, "1x", attr); diff --git a/radio/src/gui/menus.cpp b/radio/src/gui/menus.cpp index 9277f05b3..5bdbeb484 100644 --- a/radio/src/gui/menus.cpp +++ b/radio/src/gui/menus.cpp @@ -228,18 +228,6 @@ int16_t checkIncDec(uint8_t event, int16_t val, int16_t i_min, int16_t i_max, ui #endif } } - - if (event == EVT_KEY_LONG(KEY_ENTER) && i_max > SWSRC_ON) { - s_editMode = !s_editMode; - if (newval > SWSRC_ON) - newval -= (NUM_SWITCH+1); - else if (newval > 0) - newval += (NUM_SWITCH+1); - else if (newval < SWSRC_OFF) - newval += (NUM_SWITCH+1); - else if (newval < 0) - newval -= (NUM_SWITCH+1); - } } #endif @@ -976,7 +964,7 @@ int8_t switchMenuItem(uint8_t x, uint8_t y, int8_t value, LcdFlags attr, uint8_t { lcd_putsColumnLeft(x, y, STR_SWITCH); putsSwitches(x, y, value, attr); - if (attr) CHECK_INCDEC_MODELSWITCH(event, value, -NUM_SWITCH, NUM_SWITCH); + if (attr) CHECK_INCDEC_MODELSWITCH(event, value, SWSRC_FIRST, SWSRC_LAST); return value; } @@ -1046,6 +1034,16 @@ int16_t gvarMenuItem(uint8_t x, uint8_t y, int16_t value, int16_t min, int16_t m } #endif +void repeatLastCursorMove(uint8_t event) +{ + if (CURSOR_MOVED_LEFT(event) || CURSOR_MOVED_RIGHT(event)) { + putEvent(event); + } + else { + m_posHorz = 0; + } +} + #if LCD_W >= 212 #define MENU_X 30 #define MENU_Y 16 @@ -1221,8 +1219,8 @@ bool isSourceAvailable(int16_t source) } if (source>=MIXSRC_SW1 && source<=MIXSRC_LAST_CSW) { - CustomSwData * cs = cswAddress(source-MIXSRC_SW1); - return (cs->func != CS_OFF); + LogicalSwitchData * cs = cswAddress(source-MIXSRC_SW1); + return (cs->func != LS_FUNC_NONE); } #if !defined(GVARS) @@ -1250,7 +1248,7 @@ bool isInputSourceAvailable(int16_t source) return false; } -bool isSwitchAvailable(int16_t swtch) +bool isSwitchAvailableInLogicalSwitches(int16_t swtch) { if (swtch < 0) { if (swtch <= -SWSRC_ON) @@ -1276,11 +1274,45 @@ bool isSwitchAvailable(int16_t swtch) } #endif + return true; +} + +bool isSwitchAvailable(int16_t swtch) +{ + if (!isSwitchAvailableInLogicalSwitches(swtch)) { + return false; + } + if (swtch >= SWSRC_FIRST_CSW && swtch <= SWSRC_LAST_CSW) { - CustomSwData * cs = cswAddress(swtch-SWSRC_FIRST_CSW); - return (cs->func != CS_OFF); + LogicalSwitchData * cs = cswAddress(swtch-SWSRC_FIRST_CSW); + return (cs->func != LS_FUNC_NONE); } return true; } + +// Not available yet, will be needed if we implement the Range function later... +bool isLogicalSwitchFunctionAvailable(int16_t function) +{ + return function != LS_FUNC_RANGE; +} + +bool isAssignableFunctionAvailable(int16_t function) +{ + switch (function) { + +#if !defined(HAPTIC) + case FUNC_HAPTIC: + return false; +#endif + +#if !defined(GVARS) + case FUNC_ADJUST_GVAR: + return false; +#endif + + default: + return true; + } +} #endif diff --git a/radio/src/gui/menus.h b/radio/src/gui/menus.h index 124f84a24..02ae64ca6 100644 --- a/radio/src/gui/menus.h +++ b/radio/src/gui/menus.h @@ -190,7 +190,10 @@ int8_t checkIncDecGen(uint8_t event, int8_t i_val, int8_t i_min, int8_t i_max); var = checkIncDecModelZero(event,var,max) #if defined(CPUARM) + bool isLogicalSwitchFunctionAvailable(int16_t function); + bool isAssignableFunctionAvailable(int16_t function); bool isSwitchAvailable(int16_t swtch); + bool isSwitchAvailableInLogicalSwitches(int16_t swtch); #define AUTOSWITCH_ENTER_LONG() (attr && event==EVT_KEY_LONG(KEY_ENTER)) #define CHECK_INCDEC_MODELSWITCH(event, var, min, max) \ var = checkIncDec(event,var,min,max,EE_MODEL|INCDEC_SWITCH|NO_INCDEC_MARKS, isSwitchAvailable) @@ -401,7 +404,8 @@ bool modelHasNotes(); #define REPEAT_LAST_CURSOR_MOVE() { if (EVT_KEY_MASK(event) >= 0x0e) putEvent(event); else m_posHorz = 0; } #define MOVE_CURSOR_FROM_HERE() if (m_posHorz > 0) REPEAT_LAST_CURSOR_MOVE() #else - #define REPEAT_LAST_CURSOR_MOVE() m_posHorz = 0; + void repeatLastCursorMove(uint8_t event); + #define REPEAT_LAST_CURSOR_MOVE() repeatLastCursorMove(event) #define MOVE_CURSOR_FROM_HERE() REPEAT_LAST_CURSOR_MOVE() #endif diff --git a/radio/src/gui/view_main.cpp b/radio/src/gui/view_main.cpp index 93c6e0dfa..a0ba1fbe8 100644 --- a/radio/src/gui/view_main.cpp +++ b/radio/src/gui/view_main.cpp @@ -295,7 +295,7 @@ void displayTopBar() x -= 12; } - if (isFunctionActive(FUNC_LOGS)) { + if (isFunctionActive(FUNCTION_LOGS)) { LCD_NOTIF_ICON(x, ICON_LOGS); x -= 12; } @@ -343,7 +343,7 @@ void displayTimers() if (g_model.timers[0].mode) { TimerState & timerState = timersStates[0]; putsTime(TIMERS_X, TIMER1_Y, timerState.val, MIDSIZE|LEFT, MIDSIZE|LEFT); - putsTmrMode(TIMERS_X, TIMER1_Y-6, g_model.timers[0].mode, STRCONDENSED|SMLSIZE); + putsTimerMode(TIMERS_X, TIMER1_Y-6, g_model.timers[0].mode, SMLSIZE); if (g_model.timers[0].persistent) lcd_putcAtt(TIMERS_R, TIMER1_Y+1, 'P', SMLSIZE); if (timerState.val < 0) { if (BLINK_ON_PHASE) { @@ -356,7 +356,7 @@ void displayTimers() if (g_model.timers[1].mode) { TimerState & timerState = timersStates[1]; putsTime(TIMERS_X, TIMER2_Y, timerState.val, MIDSIZE|LEFT, MIDSIZE|LEFT); - putsTmrMode(TIMERS_X, TIMER2_Y-6, g_model.timers[1].mode, STRCONDENSED|SMLSIZE); + putsTimerMode(TIMERS_X, TIMER2_Y-6, g_model.timers[1].mode, SMLSIZE); if (g_model.timers[1].persistent) lcd_putcAtt(TIMERS_R, TIMER2_Y+1, 'P', SMLSIZE); if (timerState.val < 0) { if (BLINK_ON_PHASE) { @@ -373,7 +373,7 @@ void displayTimers() TimerState & timerState = timersStates[0]; uint8_t att = DBLSIZE | (timerState.val<0 ? BLINK|INVERS : 0); putsTime(12*FW+2+10*FWNUM-4, FH*2, timerState.val, att, att); - putsTmrMode(timerState.val >= 0 ? 9*FW-FW/2+3 : 9*FW-FW/2-4, FH*3, g_model.timers[0].mode, STRCONDENSED); + putsTimerMode(timerState.val >= 0 ? 9*FW-FW/2+3 : 9*FW-FW/2-4, FH*3, g_model.timers[0].mode); } } #endif @@ -818,7 +818,7 @@ void menuMainView(uint8_t event) } else { // timer2 putsTime(33+FW+2+10*FWNUM-4, FH*5, timersStates[1].val, DBLSIZE, DBLSIZE); - putsTmrMode(timersStates[1].val >= 0 ? 20-FW/2+5 : 20-FW/2-2, FH*6, g_model.timers[1].mode, STRCONDENSED); + putsTimerMode(timersStates[1].val >= 0 ? 20-FW/2+5 : 20-FW/2-2, FH*6, g_model.timers[1].mode); // lcd_outdezNAtt(33+11*FW, FH*6, s_timerVal_10ms[1], LEADING0, 2); // 1/100s } #endif // PCBTARANIS diff --git a/radio/src/gui/view_statistics.cpp b/radio/src/gui/view_statistics.cpp index b352b85da..10573b8bd 100644 --- a/radio/src/gui/view_statistics.cpp +++ b/radio/src/gui/view_statistics.cpp @@ -57,15 +57,13 @@ void menuStatisticsView(uint8_t event) return; } - lcd_puts( 1*FW, FH*1, STR_TM1TM2); + lcd_puts( 1*FW, FH*0, STR_TOTTM1TM2THRTHP); putsTime( 5*FW+5*FWNUM+1, FH*1, timersStates[0].val, 0, 0); putsTime( 12*FW+5*FWNUM+1, FH*1, timersStates[1].val, 0, 0); - lcd_puts( 1*FW, FH*2, STR_THRTHP); putsTime( 5*FW+5*FWNUM+1, FH*2, s_timeCumThr, 0, 0); putsTime( 12*FW+5*FWNUM+1, FH*2, s_timeCum16ThrP/16, 0, 0); - lcd_puts( 17*FW, FH*0, STR_TOT); putsTime( 12*FW+5*FWNUM+1, FH*0, s_timeCumTot, 0, 0); #if defined(PCBTARANIS) diff --git a/radio/src/lcd.cpp b/radio/src/lcd.cpp index e1de61641..e076fd278 100644 --- a/radio/src/lcd.cpp +++ b/radio/src/lcd.cpp @@ -64,7 +64,8 @@ void lcd_img(xcoord_t x, uint8_t y, const pm_uchar * img, uint8_t idx, LcdFlags for (uint8_t yb = 0; yb < hb; yb++) { uint8_t *p = &displayBuf[ (y / 8 + yb) * LCD_W + x ]; for (xcoord_t i=0; i= LCD_H) break; } -#endif else { x += (c*FW/2); //EXTENDED SPACE } s++; - len--; } lcdLastPos = x; lcdNextPos = x; @@ -671,7 +669,7 @@ void lcd_hlineStip(xcoord_t x, uint8_t y, xcoord_t w, uint8_t pat, LcdFlags att) uint8_t *p = &displayBuf[ y / 8 * LCD_W + x ]; uint8_t msk = BITMASK(y%8); - while(w) { + while(w--) { if(pat&1) { lcd_mask(p, msk, att); pat = (pat >> 1) | 0x80; @@ -679,7 +677,6 @@ void lcd_hlineStip(xcoord_t x, uint8_t y, xcoord_t w, uint8_t pat, LcdFlags att) else { pat = pat >> 1; } - w--; p++; } } @@ -1043,41 +1040,6 @@ void putsSwitches(xcoord_t x, uint8_t y, int8_t idx, LcdFlags att) lcd_vlineStip(x-2, y, 8, 0x5E/*'!'*/); idx = -idx; } - -#if ROTARY_ENCODERS > 0 - else if (idx >= SWSRC_FIRST_ROTENC_SWITCH) { - idx -= SWSRC_FIRST_ROTENC_SWITCH; - char suffix = (idx & 1) ? CHR_LONG : CHR_SHORT; - lcd_putsiAtt(x, y, STR_VRENCODERS, idx/2, att); - return lcd_putcAtt(lcdLastPos, y, suffix, att); - } -#endif - -#if !defined(PCBSTD) - else if (idx >= SWSRC_TRAINER_SHORT) { - idx -= SWSRC_TRAINER_SHORT; - char suffix = (idx & 1) ? CHR_LONG : CHR_SHORT; -#if ROTARY_ENCODERS > 0 - if (idx >= 2) { - idx -= 2; - lcd_putsiAtt(x, y, STR_VRENCODERS, idx/2, att); - } - else -#endif - { - lcd_putsiAtt(x, y, STR_VSWITCHES, SWSRC_TRAINER-1, att); - } - return lcd_putcAtt(lcdLastPos, y, suffix, att); - } -#endif - - if (idx > SWSRC_ON) { - idx -= SWSRC_ON; - if (idx != SWSRC_ON && (~att & STRCONDENSED)) { - lcd_putsiAtt(x, y, STR_VSWITCHES, idx-1, att); - return lcd_putcAtt(lcdLastPos, y, CHR_TOGGLE, att); - } - } lcd_putsiAtt(x, y, STR_VSWITCHES, idx-1, att); } @@ -1144,27 +1106,39 @@ void putsCurve(xcoord_t x, uint8_t y, int8_t idx, LcdFlags att) } #endif -void putsTmrMode(xcoord_t x, uint8_t y, int8_t mode, LcdFlags att) +void putsTimerMode(xcoord_t x, uint8_t y, int8_t mode, LcdFlags att) { - if (mode < 0) { - mode = TMR_VAROFS - mode - 1; - lcd_putcAtt(x-1*FW, y, '!', att); + if (mode >= 0) { + if (mode < TMR_VAROFS) + return lcd_putsiAtt(x, y, STR_VTMRMODES, mode, att); + else + mode -= (TMR_VAROFS-1); } - else if (mode < TMR_VAROFS) { - lcd_putsiAtt(x, y, STR_VTMRMODES, mode, att); - return; - } - - if (mode >= TMR_VAROFS+NUM_PSWITCH+NUM_CSW) { - mode++; - } - - putsSwitches(x, y, mode-(TMR_VAROFS-1), att); + putsSwitches(x, y, mode, att); } +#if defined(PCBTARANIS) void putsTrimMode(xcoord_t x, uint8_t y, uint8_t phase, uint8_t idx, LcdFlags att) { - int16_t v = getRawTrimValue(phase, idx); + trim_t v = getRawTrimValue(phase, idx); + unsigned int mode = v.mode; + unsigned int p = mode >> 1; + + if (mode == TRIM_MODE_NONE) { + lcd_putsAtt(x, y, "--", att); + } + else { + if (mode % 2 == 0) + lcd_putcAtt(x, y, ':', att|FIXEDWIDTH); + else + lcd_putcAtt(x, y, '+', att|FIXEDWIDTH); + lcd_putcAtt(lcdNextPos, y, '0'+p, att); + } +} +#else +void putsTrimMode(xcoord_t x, uint8_t y, uint8_t phase, uint8_t idx, LcdFlags att) +{ + trim_t v = getRawTrimValue(phase, idx); if (v > TRIM_EXTENDED_MAX) { uint8_t p = v - TRIM_EXTENDED_MAX - 1; @@ -1175,6 +1149,7 @@ void putsTrimMode(xcoord_t x, uint8_t y, uint8_t phase, uint8_t idx, LcdFlags at putsChnLetter(x, y, idx+1, att); } } +#endif #if ROTARY_ENCODERS > 0 void putsRotaryEncoderMode(xcoord_t x, uint8_t y, uint8_t phase, uint8_t idx, LcdFlags att) diff --git a/radio/src/lcd.h b/radio/src/lcd.h index 223901be7..5becc5c57 100644 --- a/radio/src/lcd.h +++ b/radio/src/lcd.h @@ -83,7 +83,6 @@ /* no 0x80 here because of "GV"1 which is aligned LEFT */ /* no 0x10 here because of "MODEL"01 which uses LEADING0 */ #define BSS 0x20 -#define STRCONDENSED 0x80 /* means that THRm will be displayed as THR */ #define ZCHAR 0x80 /* lcd outdez flags */ @@ -174,7 +173,7 @@ void putsFlightPhase(xcoord_t x, uint8_t y, int8_t idx, LcdFlags att=0); void putsCurveRef(xcoord_t x, uint8_t y, CurveRef &curve, LcdFlags att); #endif void putsCurve(xcoord_t x, uint8_t y, int8_t idx, LcdFlags att=0); -void putsTmrMode(xcoord_t x, uint8_t y, int8_t mode, LcdFlags att); +void putsTimerMode(xcoord_t x, uint8_t y, int8_t mode, LcdFlags att=0); void putsTrimMode(xcoord_t x, uint8_t y, uint8_t phase, uint8_t idx, LcdFlags att); #if defined(ROTARY_ENCODERS) void putsRotaryEncoderMode(xcoord_t x, uint8_t y, uint8_t phase, uint8_t idx, LcdFlags att); diff --git a/radio/src/logs.cpp b/radio/src/logs.cpp index 58c47eacc..41cf29b8d 100644 --- a/radio/src/logs.cpp +++ b/radio/src/logs.cpp @@ -175,7 +175,7 @@ void writeLogs() { static const pm_char * error_displayed = NULL; - if (isFunctionActive(FUNC_LOGS) && logDelay > 0) { + if (isFunctionActive(FUNCTION_LOGS) && logDelay > 0) { tmr10ms_t tmr10ms = get_tmr10ms(); if (lastLogTime == 0 || (tmr10ms_t)(tmr10ms - lastLogTime) >= (tmr10ms_t)logDelay*10) { lastLogTime = tmr10ms; diff --git a/radio/src/maths.cpp b/radio/src/maths.cpp index 6cee8d2d7..346a7dba7 100644 --- a/radio/src/maths.cpp +++ b/radio/src/maths.cpp @@ -120,7 +120,7 @@ void varioWakeup() static tmr10ms_t s_varioTmr; tmr10ms_t tmr10ms = get_tmr10ms(); - if (isFunctionActive(FUNC_VARIO)) { + if (isFunctionActive(FUNCTION_VARIO)) { #if defined(AUDIO) cli(); int16_t verticalSpeed = frskyData.hub.varioSpeed; diff --git a/radio/src/myeeprom.h b/radio/src/myeeprom.h index 29518f446..ed9a62510 100644 --- a/radio/src/myeeprom.h +++ b/radio/src/myeeprom.h @@ -668,82 +668,110 @@ PACK( union u_int8int16_t { #endif +enum LogicalSwitchesFunctions { + LS_FUNC_NONE, + LS_FUNC_VEQUAL, // v==offset + LS_FUNC_VPOS, // v>offset + LS_FUNC_VNEG, // voffset + LS_FUNC_ANEG, // |v|= FUNC_ADJUST_GV1 && CFN_FUNC(sd) <= FUNC_ADJUST_GVLAST) +#define HAS_ENABLE_PARAM(func) (func < FUNC_FIRST_WITHOUT_ENABLE) + +#if defined(CPUARM) + #define IS_PLAY_BOTH_FUNC(func) (0) + #define IS_VOLUME_FUNC(func) (func == FUNC_VOLUME) #else - #define IS_ADJUST_GV_FUNCTION(sd) (0) + #define IS_PLAY_BOTH_FUNC(func) (func == FUNC_PLAY_BOTH) + #define IS_VOLUME_FUNC(func) (0) +#endif + +#if defined(GVARS) + #define IS_ADJUST_GV_FUNC(func) (func == FUNC_ADJUST_GVAR) +#else + #define IS_ADJUST_GV_FUNC(func) (0) #endif #if defined(VOICE) @@ -786,56 +814,70 @@ PACK(typedef struct t_CustomFnData { // Function Switches data int8_t swtch; uint8_t func; PACK(union { - char name[LEN_CFN_NAME]; + struct { + char name[LEN_CFN_NAME]; + } play; + struct { int16_t val; - int16_t ext1; - int16_t ext2; - } composite; - }) param; - uint8_t mode:2; - uint8_t active:6; + uint8_t mode; + uint8_t param; + int16_t spare2; + } all; + + struct { + int32_t val1; + int16_t val2; + } clear; + }); + uint8_t active; }) CustomFnData; #define CFN_EMPTY(p) (!(p)->swtch) +#define CFN_SWITCH(p) ((p)->swtch) #define CFN_FUNC(p) ((p)->func) #define CFN_ACTIVE(p) ((p)->active) -#define CFN_CH_NUMBER(p) (CFN_FUNC(p)) +#define CFN_CH_INDEX(p) ((p)->all.param) +#define CFN_GVAR_INDEX(p) ((p)->all.param) +#define CFN_TIMER_INDEX(p) ((p)->all.param) #define CFN_PLAY_REPEAT(p) ((p)->active) #define CFN_PLAY_REPEAT_MUL 1 #define CFN_PLAY_REPEAT_NOSTART 0x3F -#define CFN_GVAR_MODE(p) ((p)->mode) -#define CFN_PARAM(p) ((p)->param.composite.val) -#define CFN_RESET(p) (p->active = 0, memset(&(p)->param, 0, sizeof((p)->param))) +#define CFN_GVAR_MODE(p) ((p)->all.mode) +#define CFN_PARAM(p) ((p)->all.val) +#define CFN_RESET(p) ((p)->active=0, (p)->clear.val1=0, (p)->clear.val2=0) #else PACK(typedef struct t_CustomFnData { - int8_t swtch; // input - union { + PACK(union { struct { - uint8_t param:3; - uint8_t func:5; - } func_param; + int8_t swtch:6; + uint16_t func:4; + uint8_t mode:2; + uint8_t param:3; + uint8_t active:1; + } gvar; struct { - uint8_t active:1; - uint8_t param:2; - uint8_t func:5; - } func_param_enable; + int8_t swtch:6; + uint16_t func:4; + uint8_t param:4; + uint8_t spare:1; + uint8_t active:1; + } all; + }); - struct { - uint8_t active:1; - uint8_t func:7; - } func_safety; - } internal; - uint8_t param; + uint8_t value; }) CustomFnData; -#define CFN_FUNC(p) ((p)->internal.func_param.func) -#define CFN_ACTIVE(p) ((p)->internal.func_param_enable.active) -#define CFN_CH_NUMBER(p) ((p)->internal.func_safety.func) -#define CFN_PLAY_REPEAT(p) ((p)->internal.func_param.param) +#define CFN_SWITCH(p) ((p)->all.swtch) +#define CFN_FUNC(p) ((p)->all.func) +#define CFN_ACTIVE(p) ((p)->all.active) +#define CFN_CH_INDEX(p) ((p)->all.param) +#define CFN_TIMER_INDEX(p) ((p)->all.param) +#define CFN_GVAR_INDEX(p) ((p)->gvar.param) +#define CFN_PLAY_REPEAT(p) ((p)->all.param) #define CFN_PLAY_REPEAT_MUL 10 -#define CFN_GVAR_MODE(p) ((p)->internal.func_param_enable.param) -#define CFN_PARAM(p) ((p)->param) -#define CFN_RESET(p) ((p)->internal.func_param_enable.active = 0, CFN_PARAM(p) = 0) +#define CFN_GVAR_MODE(p) ((p)->gvar.mode) +#define CFN_PARAM(p) ((p)->value) +#define CFN_RESET(p) ((p)->all.active = 0, CFN_PARAM(p) = 0) #endif enum TelemetryUnit { @@ -1101,8 +1143,18 @@ PACK(typedef struct t_SwashRingData { // Swash Ring data #if defined(PCBSTD) #define TRIMS_ARRAY int8_t trim[4]; int8_t trim_ext:8 #define TRIMS_ARRAY_SIZE 5 + #define trim_t int16_t #else - #define TRIMS_ARRAY int16_t trim[4] + #if defined(PCBTARANIS) + PACK(typedef struct { + int16_t value:11; + uint16_t mode:5; + }) trim_t; + #define TRIM_MODE_NONE 0x1F // 0b11111 + #else + #define trim_t int16_t + #endif + #define TRIMS_ARRAY trim_t trim[4] #define TRIMS_ARRAY_SIZE 8 #endif @@ -1156,6 +1208,7 @@ enum SwitchSources { SWSRC_SG2, SWSRC_SH0, SWSRC_SH2, + SWSRC_TRAINER = SWSRC_SH2, #else SWSRC_ID0 = SWSRC_FIRST_SWITCH, SWSRC_ID1, @@ -1171,11 +1224,37 @@ enum SwitchSources { SWSRC_AIL, SWSRC_GEA, SWSRC_TRN, + SWSRC_TRAINER = SWSRC_TRN, +#endif + + SWSRC_LAST_SWITCH = SWSRC_TRAINER, + +#if defined(PCBTARANIS) + SWSRC_P11, + SWSRC_P16 = SWSRC_P11+5, + SWSRC_P21, + SWSRC_P26 = SWSRC_P21+5, +#endif + + SWSRC_FIRST_TRIM, + SWSRC_TrimRudLeft = SWSRC_FIRST_TRIM, + SWSRC_TrimRudRight, + SWSRC_TrimEleDown, + SWSRC_TrimEleUp, + SWSRC_TrimThrDown, + SWSRC_TrimThrUp, + SWSRC_TrimAilLeft, + SWSRC_TrimAilRight, + SWSRC_LAST_TRIM = SWSRC_TrimAilRight, + +#if defined(PCBSKY9X) + SWSRC_REa, +#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) + SWSRC_REa, + SWSRC_REb, #endif SWSRC_FIRST_CSW, - SWSRC_LAST_SWITCH = SWSRC_FIRST_CSW-1, - SWSRC_SW1 = SWSRC_FIRST_CSW, SWSRC_SW2, SWSRC_SW3, @@ -1190,34 +1269,11 @@ enum SwitchSources { SWSRC_SWC, SWSRC_LAST_CSW = SWSRC_SW1+NUM_CSW-1, -#if defined(PCBTARANIS) - SWSRC_P11, - SWSRC_P16 = SWSRC_P11+5, - SWSRC_P21, - SWSRC_P26 = SWSRC_P21+5, -#endif - SWSRC_ON, - - SWSRC_FIRST_MOMENT_SWITCH, - SWSRC_LAST_MOMENT_SWITCH = SWSRC_FIRST_MOMENT_SWITCH+SWSRC_LAST_CSW, - -#if !defined(PCBSTD) - SWSRC_TRAINER_SHORT, - SWSRC_TRAINER_LONG, -#endif - -#if ROTARY_ENCODERS > 0 - SWSRC_FIRST_ROTENC_SWITCH, - SWSRC_LAST_ROTENC_SWITCH = SWSRC_FIRST_ROTENC_SWITCH+(2*ROTARY_ENCODERS)-1, -#endif - - SWSRC_COUNT, - SWSRC_FIRST = -SWSRC_LAST_MOMENT_SWITCH, - SWSRC_LAST = SWSRC_COUNT-1, - SWSRC_OFF = -SWSRC_ON, - SWSRC_TRAINER = SWSRC_SW1-1, + + SWSRC_FIRST = SWSRC_OFF, + SWSRC_LAST = SWSRC_ON }; enum MixSources { @@ -1485,7 +1541,7 @@ PACK(typedef struct t_ModelData { CURVDATA curves[MAX_CURVES]; int8_t points[NUM_POINTS]; - CustomSwData customSw[NUM_CSW]; + LogicalSwitchData customSw[NUM_CSW]; CustomFnData funcSw[NUM_CFN]; SwashRingData swashR; PhaseData phaseData[MAX_PHASES]; diff --git a/radio/src/opentx.cpp b/radio/src/opentx.cpp index 9c753eda1..c08c030ab 100644 --- a/radio/src/opentx.cpp +++ b/radio/src/opentx.cpp @@ -441,17 +441,30 @@ CurveInfo curveInfo(uint8_t idx) } #endif -CustomSwData *cswAddress(uint8_t idx) +LogicalSwitchData *cswAddress(uint8_t idx) { return &g_model.customSw[idx]; } uint8_t cswFamily(uint8_t func) { - return (funcsrcRaw = i+1; - if (!isSourceAvailable(mix->srcRaw)) { - mix->srcRaw = MIXSRC_Rud - 1 + stick_index; - } #else mix->srcRaw = MIXSRC_Rud - 1 + channel_order(i+1); #endif @@ -573,13 +583,9 @@ void modelDefault(uint8_t id) g_model.frsky.channels[0].ratio = 132; #endif -#if defined(CPUARM) - g_model.nSwToWarn = 0x7F; -#endif - -#ifdef MAVLINK - g_model.mavlink.rc_rssi_scale = 15; - g_model.mavlink.pc_rssi_en = 1; +#if defined(MAVLINK) + g_model.mavlink.rc_rssi_scale = 15; + g_model.mavlink.pc_rssi_en = 1; #endif } @@ -1347,7 +1353,6 @@ void getSwitchesPosition() CHECK_2POS(SW_SH); switchesPos = newPos; -#if defined(PCBTARANIS) for (int i=0; i= SWSRC_P11 && cs_idx <= SWSRC_P26) { + else if (cs_idx <= SWSRC_P26) { result = POT_POSITION(cs_idx-SWSRC_P11); } +#endif + else if (cs_idx <= SWSRC_LAST_TRIM) { + result = trimDown(cs_idx-SWSRC_FIRST_TRIM); + } +#if ROTARY_ENCODERS > 0 + else if (cs_idx == SWSRC_REa) { + result = REA_DOWN(); + } +#endif +#if ROTARY_ENCODERS > 1 + else if (cs_idx == SWSRC_REb) { + result = REB_DOWN(); + } #endif else { cs_idx -= SWSRC_FIRST_CSW; @@ -1406,42 +1423,57 @@ bool getSwitch(int8_t swtch) else { s_last_switch_used |= mask; - CustomSwData * cs = cswAddress(cs_idx); + LogicalSwitchData * cs = cswAddress(cs_idx); +#if defined(CPUARM) + int8_t s = cs->andsw; +#else uint8_t s = cs->andsw; - if (cs->func == CS_OFF || (s && !getSwitch(s))) { + if (s > SWSRC_LAST_SWITCH) { + s += SWSRC_SW1-SWSRC_LAST_SWITCH-1; + } +#endif + if (cs->func == LS_FUNC_NONE || (s && !getSwitch(s))) { csLastValue[cs_idx] = CS_LAST_VALUE_INIT; result = false; } - else if ((s=cswFamily(cs->func)) == CS_VBOOL) { + else if ((s=cswFamily(cs->func)) == LS_FAMILY_BOOL) { bool res1 = getSwitch(cs->v1); bool res2 = getSwitch(cs->v2); switch (cs->func) { - case CS_AND: + case LS_FUNC_AND: result = (res1 && res2); break; - case CS_OR: + case LS_FUNC_OR: result = (res1 || res2); break; - // case CS_XOR: + // case LS_FUNC_XOR: default: result = (res1 ^ res2); break; } } - else if (s == CS_VTIMER) { - result = csLastValue[cs_idx] <= 0; + else if (s == LS_FAMILY_TIMER) { + result = (csLastValue[cs_idx] <= 0); } + else if (s == LS_FAMILY_STICKY) { + result = (csLastValue[cs_idx] & (1<<0)); + } +#if defined(CPUARM) + else if (s == LS_FAMILY_STAY) { + result = (csLastValue[cs_idx] & (1<<0)); + } +#endif else { getvalue_t x = getValue(cs->v1); getvalue_t y; - if (s == CS_VCOMP) { + if (s == LS_FAMILY_COMP) { y = getValue(cs->v2); switch (cs->func) { - case CS_EQUAL: + case LS_FUNC_EQUAL: result = (x==y); break; - case CS_GREATER: + case LS_FUNC_GREATER: result = (x>y); break; default: @@ -1459,7 +1491,7 @@ bool getSwitch(int8_t swtch) y = convertCswTelemValue(cs); #if defined(FRSKY_HUB) && defined(GAUGES) - if (s == CS_VOFS) { + if (s == LS_FAMILY_OFS) { uint8_t idx = cs->v1-MIXSRC_FIRST_TELEM+1-TELEM_ALT; if (idx < THLD_MAX) { // Fill the threshold array @@ -1487,7 +1519,7 @@ bool getSwitch(int8_t swtch) #endif switch (cs->func) { - case CS_VEQUAL: + case LS_FUNC_VEQUAL: #if defined(GVARS) if (cs->v1 >= MIXSRC_GVAR1 && cs->v1 <= MIXSRC_LAST_GVAR) result = (x==y); @@ -1495,16 +1527,16 @@ bool getSwitch(int8_t swtch) #endif result = (abs(x-y) < (1024 / STICK_TOLERANCE)); break; - case CS_VPOS: + case LS_FUNC_VPOS: result = (x>y); break; - case CS_VNEG: + case LS_FUNC_VNEG: result = (xy); break; - case CS_ANEG: + case LS_FUNC_ANEG: result = (abs(x)func == CS_DIFFEGREATER) + if (cs->func == LS_FUNC_DIFFEGREATER) result = (y >= 0 ? (diff >= y) : (diff <= y)); else result = (abs(diff) >= y); @@ -1534,15 +1566,20 @@ bool getSwitch(int8_t swtch) cswDelays[cs_idx] = get_tmr10ms() + (cs->delay*50); } } + if (cs->duration) { - if (result && !cswStates[cs_idx]) + if (result && !cswStates[cs_idx]) { cswDurations[cs_idx] = get_tmr10ms() + (cs->duration*50); + } cswStates[cs_idx] = result; + result = false; if (cswDurations[cs_idx] > get_tmr10ms()) { result = true; - if (cs->delay) cswDelays[cs_idx] = get_tmr10ms() + (cs->delay*50); + } + else if (s == LS_FAMILY_STICKY) { + csLastValue[cs_idx] &= ~(1<<0); } } #endif @@ -1669,38 +1706,82 @@ uint8_t getFlightPhase() } #endif -int16_t getRawTrimValue(uint8_t phase, uint8_t idx) +trim_t getRawTrimValue(uint8_t phase, uint8_t idx) { PhaseData *p = phaseAddress(phase); #if defined(PCBSTD) - return (((int16_t)p->trim[idx]) << 2) + ((p->trim_ext >> (2*idx)) & 0x03); + return (((trim_t)p->trim[idx]) << 2) + ((p->trim_ext >> (2*idx)) & 0x03); #else return p->trim[idx]; #endif } -int16_t getTrimValue(uint8_t phase, uint8_t idx) +int getTrimValue(uint8_t phase, uint8_t idx) { +#if defined(PCBTARANIS) + int result = 0; + for (uint8_t i=0; i> 1; + if (p == phase || phase == 0) { + return result + v.value; + } + else { + phase = p; + if (v.mode % 2 != 0) { + result += v.value; + } + } + } + } + return 0; +#else return getRawTrimValue(getTrimFlightPhase(phase, idx), idx); +#endif } -void setTrimValue(uint8_t phase, uint8_t idx, int16_t trim) +void setTrimValue(uint8_t phase, uint8_t idx, int trim) { +#if defined(PCBTARANIS) + for (uint8_t i=0; itrim[idx]; + if (v.mode < 0) + return; + unsigned int p = v.mode >> 1; + if (p == phase || phase == 0) { + v.value = trim; + break;; + } + else if (v.mode % 2 == 0) { + phase = p; + } + else { + v.value = limit(TRIM_EXTENDED_MIN, trim - getTrimValue(p, idx), TRIM_EXTENDED_MAX); + break; + } + } +#elif defined(PCBSTD) PhaseData *p = phaseAddress(phase); -#if defined(PCBSTD) p->trim[idx] = (int8_t)(trim >> 2); - p->trim_ext = (p->trim_ext & ~(0x03 << (2*idx))) + (((trim & 0x03) << (2*idx))); + idx <<= 1; + p->trim_ext = (p->trim_ext & ~(0x03 << idx)) + (((trim & 0x03) << idx)); #else + PhaseData *p = phaseAddress(phase); p->trim[idx] = trim; #endif eeDirty(EE_MODEL); } +#if !defined(PCBTARANIS) uint8_t getTrimFlightPhase(uint8_t phase, uint8_t idx) { for (uint8_t i=0; i= phase) result++; @@ -1708,6 +1789,7 @@ uint8_t getTrimFlightPhase(uint8_t phase, uint8_t idx) } return 0; } +#endif #if defined(ROTARY_ENCODERS) uint8_t getRotaryEncoderFlightPhase(uint8_t idx) @@ -1843,7 +1925,7 @@ void setGVarValue(uint8_t idx, int16_t value, int8_t phase) #endif #if defined(FRSKY) -csw_telemetry_value_t minTelemValue(uint8_t channel) +ls_telemetry_value_t minTelemValue(uint8_t channel) { switch (channel) { case TELEM_FUEL: @@ -1862,7 +1944,7 @@ csw_telemetry_value_t minTelemValue(uint8_t channel) } } -csw_telemetry_value_t maxTelemValue(uint8_t channel) +ls_telemetry_value_t maxTelemValue(uint8_t channel) { switch (channel) { case TELEM_FUEL: @@ -1883,7 +1965,7 @@ csw_telemetry_value_t maxTelemValue(uint8_t channel) #endif #if defined(CPUARM) -getvalue_t convert16bitsTelemValue(uint8_t channel, csw_telemetry_value_t value) +getvalue_t convert16bitsTelemValue(uint8_t channel, ls_telemetry_value_t value) { getvalue_t result; switch (channel) { @@ -1897,13 +1979,13 @@ getvalue_t convert16bitsTelemValue(uint8_t channel, csw_telemetry_value_t value) return result; } -csw_telemetry_value_t max8bitsTelemValue(uint8_t channel) +ls_telemetry_value_t max8bitsTelemValue(uint8_t channel) { - return min(255, maxTelemValue(channel)); + return min(255, maxTelemValue(channel)); } #endif -getvalue_t convert8bitsTelemValue(uint8_t channel, csw_telemetry_value_t value) +getvalue_t convert8bitsTelemValue(uint8_t channel, ls_telemetry_value_t value) { getvalue_t result; switch (channel) { @@ -1955,13 +2037,13 @@ getvalue_t convert8bitsTelemValue(uint8_t channel, csw_telemetry_value_t value) return result; } -getvalue_t convertCswTelemValue(CustomSwData * cs) +getvalue_t convertCswTelemValue(LogicalSwitchData * cs) { getvalue_t val; #if defined(CPUARM) val = convert16bitsTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, cs->v2); #else - if (cswFamily(cs->func)==CS_VOFS) + if (cswFamily(cs->func)==LS_FAMILY_OFS) val = convert8bitsTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, 128+cs->v2); else val = convert8bitsTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, 128+cs->v2) - convert8bitsTelemValue(cs->v1 - MIXSRC_FIRST_TELEM + 1, 128); @@ -2034,7 +2116,7 @@ void checkBacklight() backlightOn(); } - bool backlightOn = (g_eeGeneral.backlightMode == e_backlight_mode_on || lightOffCounter || isFunctionActive(FUNC_BACKLIGHT)); + bool backlightOn = (g_eeGeneral.backlightMode == e_backlight_mode_on || lightOffCounter || isFunctionActive(FUNCTION_BACKLIGHT)); if (flashCounter) backlightOn = !backlightOn; if (backlightOn) BACKLIGHT_ON(); @@ -2419,7 +2501,7 @@ uint8_t checkTrim(uint8_t event) // LH_DWN LH_UP LV_DWN LV_UP RV_DWN RV_UP RH_DWN RH_UP uint8_t idx = CONVERT_MODE((uint8_t)k/2); uint8_t phase; - int16_t before; + int before; bool thro; #if defined(GVARS) @@ -2435,13 +2517,21 @@ uint8_t checkTrim(uint8_t event) } else { phase = getTrimFlightPhase(s_perout_flight_phase, idx); +#if defined(PCBTARANIS) + before = getTrimValue(phase, idx); +#else before = getRawTrimValue(phase, idx); +#endif thro = (idx==THR_STICK && g_model.thrTrim); } #else #define TRIM_REUSED() 0 phase = getTrimFlightPhase(s_perout_flight_phase, idx); +#if defined(PCBTARANIS) + before = getTrimValue(phase, idx); +#else before = getRawTrimValue(phase, idx); +#endif thro = (idx==THR_STICK && g_model.thrTrim); #endif int8_t trimInc = g_model.trimInc + 1; @@ -2915,7 +3005,7 @@ void evalInputs(uint8_t mode) } if (ch < NUM_STICKS) { //only do this for sticks - if (mode <= e_perout_mode_inactive_phase && (isFunctionActive(FUNC_TRAINER) || isFunctionActive(FUNC_TRAINER_RUD+ch))) { + if (mode <= e_perout_mode_inactive_phase && isFunctionActive(FUNCTION_TRAINER+ch)) { // trainer mode TrainerMix* td = &g_eeGeneral.trainer.mix[ch]; if (td->mode) { @@ -2973,7 +3063,6 @@ void testFunc() #endif MASK_FUNC_TYPE activeFunctions = 0; -MASK_CFN_TYPE activeSwitches = 0; MASK_CFN_TYPE activeFnSwitches = 0; tmr10ms_t lastFunctionTime[NUM_CFN] = { 0 }; @@ -3118,10 +3207,10 @@ uint8_t fnSwitchDuration[NUM_CFN] = { 0 }; inline void playCustomFunctionFile(CustomFnData *sd, uint8_t id) { - char filename[sizeof(SOUNDS_PATH)+sizeof(sd->param.name)+sizeof(SOUNDS_EXT)] = SOUNDS_PATH "/"; + char filename[sizeof(SOUNDS_PATH)+sizeof(sd->play.name)+sizeof(SOUNDS_EXT)] = SOUNDS_PATH "/"; strncpy(filename+SOUNDS_PATH_LNG_OFS, currentLanguagePack->id, 2); - strncpy(filename+sizeof(SOUNDS_PATH), sd->param.name, sizeof(sd->param.name)); - filename[sizeof(SOUNDS_PATH)+sizeof(sd->param.name)] = '\0'; + strncpy(filename+sizeof(SOUNDS_PATH), sd->play.name, sizeof(sd->play.name)); + filename[sizeof(SOUNDS_PATH)+sizeof(sd->play.name)] = '\0'; strcat(filename+sizeof(SOUNDS_PATH), SOUNDS_EXT); PLAY_FILE(filename, sd->func==FUNC_BACKGND_MUSIC ? PLAY_BACKGROUND : 0, id); } @@ -3134,300 +3223,251 @@ bool evalFunctionsFirstTime = true; void evalFunctions() { MASK_FUNC_TYPE newActiveFunctions = 0; - MASK_CFN_TYPE newActiveSwitches = 0; MASK_CFN_TYPE newActiveFnSwitches = 0; #if defined(ROTARY_ENCODERS) && defined(GVARS) static rotenc_t rePreviousValues[ROTARY_ENCODERS]; #endif - for (uint8_t i=0; iswtch; + int8_t swtch = CFN_SWITCH(sd); if (swtch) { - MASK_FUNC_TYPE function_mask = (CFN_FUNC(sd) >= FUNC_TRAINER ? ((MASK_FUNC_TYPE)1 << (CFN_FUNC(sd)-FUNC_TRAINER)) : 0); MASK_CFN_TYPE switch_mask = ((MASK_CFN_TYPE)1 << i); - uint8_t momentary = 0; - -#if !defined(PCBSTD) - - #define MOMENTARY_START_TEST() ( (momentary && !(activeSwitches & switch_mask) && active) || \ - (short_long==1 && !active && mSwitchDuration[mswitch]>0 && mSwitchDuration[mswitch] NUM_SWITCH+1) { - momentary = 1; - swtch -= NUM_SWITCH+1; - } - if (swtch < -NUM_SWITCH-1) { - momentary = 1; - swtch += NUM_SWITCH+1; - } bool active = getSwitch(swtch); - if (active) newActiveSwitches |= switch_mask; - if (momentary || short_long) { -#if !defined(PCBSTD) - bool swState = active; -#endif - - if (MOMENTARY_START_TEST()) { - - if (short_long) { - active = false; - momentary = true; - } - else { - active = !(activeFnSwitches & switch_mask); -#if !defined(CPUARM) - if (CFN_FUNC(sd) == FUNC_PLAY_BOTH && !active) { - momentary = true; - } - else -#endif - { - momentary = false; - } - } - } - else if (swtch == SWSRC_ON) { - active = false; - momentary = false; - } - else { - active = (activeFnSwitches & switch_mask); - momentary = false; - } -#if !defined(PCBSTD) - if (short_long && !(mSwitchDurationIncremented & (1< 0) { + mask = (1<<(CFN_CH_INDEX(sd)-1)); + } + newActiveFunctions |= mask; + break; } - if (!(activeFunctions & function_mask)) { - if (CFN_FUNC(sd) == FUNC_INSTANT_TRIM) { + case FUNC_INSTANT_TRIM: + if (!isFunctionActive(FUNCTION_INSTANT_TRIM)) { + newActiveFunctions |= (1 << FUNCTION_INSTANT_TRIM); if (g_menuStack[0] == menuMainView #if defined(FRSKY) || g_menuStack[0] == menuTelemetryFrsky #endif - ) + ) instantTrim(); } - } - } - else if (CFN_FUNC(sd) <= FUNC_INSTANT_TRIM || CFN_FUNC(sd) == FUNC_RESET) { - active = false; - } + break; - if (CFN_FUNC(sd) == FUNC_RESET) { - switch (CFN_PARAM(sd)) { - case FUNC_RESET_TIMER1: - case FUNC_RESET_TIMER2: - resetTimer(CFN_PARAM(sd)); - break; - case FUNC_RESET_ALL: - resetAll(); - break; + case FUNC_RESET: + switch (CFN_PARAM(sd)) { + case FUNC_RESET_TIMER1: + case FUNC_RESET_TIMER2: + resetTimer(CFN_PARAM(sd)); + break; + case FUNC_RESET_ALL: + resetAll(); + break; #if defined(FRSKY) - case FUNC_RESET_TELEMETRY: - resetTelemetry(); - break; + case FUNC_RESET_TELEMETRY: + resetTelemetry(); + break; #endif #if ROTARY_ENCODERS > 0 - case FUNC_RESET_ROTENC1: + case FUNC_RESET_ROTENC1: #if ROTARY_ENCODERS > 1 - case FUNC_RESET_ROTENC2: + case FUNC_RESET_ROTENC2: #endif - g_rotenc[CFN_PARAM(sd)-FUNC_RESET_ROTENC1] = 0; - break; + g_rotenc[CFN_PARAM(sd)-FUNC_RESET_ROTENC1] = 0; + break; #endif - } - } + } + break; -#if defined(SDCARD) - else if (CFN_FUNC(sd) == FUNC_LOGS) { - logDelay = CFN_PARAM(sd); - } -#endif - -#if defined(HAPTIC) - else if (CFN_FUNC(sd) == FUNC_HAPTIC) { - haptic.event(AU_FRSKY_LAST+CFN_PARAM(sd)); - } -#endif - -#if defined(CPUARM) && defined(SDCARD) - else if (CFN_FUNC(sd) == FUNC_PLAY_SOUND || CFN_FUNC(sd) == FUNC_PLAY_TRACK || CFN_FUNC(sd) == FUNC_PLAY_VALUE) { - tmr10ms_t tmr10ms = get_tmr10ms(); - uint8_t repeatParam = CFN_PLAY_REPEAT(sd); - if (evalFunctionsFirstTime && repeatParam == CFN_PLAY_REPEAT_NOSTART) - lastFunctionTime[i] = tmr10ms; - if (!lastFunctionTime[i] || (repeatParam && repeatParam!=CFN_PLAY_REPEAT_NOSTART && (signed)(tmr10ms-lastFunctionTime[i])>=100*repeatParam)) { - if (!IS_PLAYING(i+1)) { - lastFunctionTime[i] = tmr10ms; - if (CFN_FUNC(sd) == FUNC_PLAY_SOUND) { - AUDIO_PLAY(AU_FRSKY_FIRST+CFN_PARAM(sd)); - } - else if (CFN_FUNC(sd) == FUNC_PLAY_VALUE) { - PLAY_VALUE(CFN_PARAM(sd), i+1); - } - else { - playCustomFunctionFile(sd, i+1); - } - } +#if defined(CPUARM) + case FUNC_SET_TIMER: + { + TimerState & timerState = timersStates[CFN_TIMER_INDEX(sd)]; + timerState.state = TMR_OFF; // is changed to RUNNING dep from mode + timerState.val = CFN_PARAM(sd); + timerState.val_10ms = 0 ; + break; } - } - else if (CFN_FUNC(sd) == FUNC_BACKGND_MUSIC) { - if (!IS_PLAYING(i+1)) { - playCustomFunctionFile(sd, i+1); - } - } - else if (CFN_FUNC(sd) == FUNC_VOLUME) { - if (CFN_ACTIVE(sd)) { - getvalue_t raw = getValue(CFN_PARAM(sd)); - //only set volume if input changed more than hysteresis - if (abs(requiredSpeakerVolumeRawLast - raw) > VOLUME_HYSTERESIS) { - requiredSpeakerVolumeRawLast = raw; - } - requiredSpeakerVolume = ((1024 + requiredSpeakerVolumeRawLast) * VOLUME_LEVEL_MAX) / 2048; - } - else { - active = false; - } - } -#elif defined(VOICE) - else if (CFN_FUNC(sd) == FUNC_PLAY_SOUND || CFN_FUNC(sd) == FUNC_PLAY_TRACK || CFN_FUNC(sd) == FUNC_PLAY_BOTH || CFN_FUNC(sd) == FUNC_PLAY_VALUE) { - tmr10ms_t tmr10ms = get_tmr10ms(); - uint8_t repeatParam = CFN_PLAY_REPEAT(sd); - if (!lastFunctionTime[i] || (CFN_FUNC(sd)==FUNC_PLAY_BOTH && active!=(bool)(activeFnSwitches&switch_mask)) || (repeatParam && (signed)(tmr10ms-lastFunctionTime[i])>=1000*repeatParam)) { - lastFunctionTime[i] = tmr10ms; - uint8_t param = CFN_PARAM(sd); - if (CFN_FUNC(sd) == FUNC_PLAY_SOUND) { - AUDIO_PLAY(AU_FRSKY_FIRST+param); - } - else if (CFN_FUNC(sd) == FUNC_PLAY_VALUE) { - PLAY_VALUE(param, i+1); - } - else { -#if defined(GVARS) - if (CFN_FUNC(sd) == FUNC_PLAY_TRACK && param > 250) - param = GVAR_VALUE(param-251, getGVarFlightPhase(s_perout_flight_phase, param-251)); -#endif - PUSH_CUSTOM_PROMPT(active ? param : param+1, i+1); - } - } - } -#else - else if (CFN_FUNC(sd) == FUNC_PLAY_SOUND) { - tmr10ms_t tmr10ms = get_tmr10ms(); - uint8_t repeatParam = CFN_PLAY_REPEAT(sd); - if (!lastFunctionTime[i] || (repeatParam && (signed)(tmr10ms-lastFunctionTime[i])>=1000*repeatParam)) { - lastFunctionTime[i] = tmr10ms; - AUDIO_PLAY(AU_FRSKY_FIRST+CFN_PARAM(sd)); - } - } -#endif - -#if defined(DEBUG) - else if (CFN_FUNC(sd) == FUNC_TEST) { - testFunc(); - } #endif #if defined(GVARS) - else if (CFN_FUNC(sd) >= FUNC_ADJUST_GV1) { - if (CFN_ACTIVE(sd)) { + case FUNC_ADJUST_GVAR: if (CFN_GVAR_MODE(sd) == 0) { - SET_GVAR(CFN_FUNC(sd)-FUNC_ADJUST_GV1, CFN_PARAM(sd), s_perout_flight_phase); + SET_GVAR(CFN_GVAR_INDEX(sd), CFN_PARAM(sd), s_perout_flight_phase); } else if (CFN_GVAR_MODE(sd) == 2) { - SET_GVAR(CFN_FUNC(sd)-FUNC_ADJUST_GV1, GVAR_VALUE(CFN_PARAM(sd), s_perout_flight_phase), s_perout_flight_phase); + SET_GVAR(CFN_GVAR_INDEX(sd), GVAR_VALUE(CFN_PARAM(sd), s_perout_flight_phase), s_perout_flight_phase); } else if (CFN_GVAR_MODE(sd) == 3) { if (!(activeFnSwitches & switch_mask)) { - SET_GVAR(CFN_FUNC(sd)-FUNC_ADJUST_GV1, GVAR_VALUE(CFN_FUNC(sd)-FUNC_ADJUST_GV1, getGVarFlightPhase(s_perout_flight_phase, CFN_FUNC(sd)-FUNC_ADJUST_GV1)) + (CFN_PARAM(sd) ? +1 : -1), s_perout_flight_phase); + SET_GVAR(CFN_GVAR_INDEX(sd), GVAR_VALUE(CFN_GVAR_INDEX(sd), getGVarFlightPhase(s_perout_flight_phase, CFN_GVAR_INDEX(sd))) + (CFN_PARAM(sd) ? +1 : -1), s_perout_flight_phase); } } else if (CFN_PARAM(sd) >= MIXSRC_TrimRud && CFN_PARAM(sd) <= MIXSRC_TrimAil) { - trimGvar[CFN_PARAM(sd)-MIXSRC_TrimRud] = CFN_FUNC(sd)-FUNC_ADJUST_GV1; + trimGvar[CFN_PARAM(sd)-MIXSRC_TrimRud] = CFN_GVAR_INDEX(sd); } #if defined(ROTARY_ENCODERS) else if (CFN_PARAM(sd) >= MIXSRC_REa && CFN_PARAM(sd) < MIXSRC_TrimRud) { int8_t scroll = rePreviousValues[CFN_PARAM(sd)-MIXSRC_REa] - (g_rotenc[CFN_PARAM(sd)-MIXSRC_REa] / ROTARY_ENCODER_GRANULARITY); if (scroll) { - SET_GVAR(CFN_FUNC(sd)-FUNC_ADJUST_GV1, GVAR_VALUE(CFN_FUNC(sd)-FUNC_ADJUST_GV1, getGVarFlightPhase(s_perout_flight_phase, CFN_FUNC(sd)-FUNC_ADJUST_GV1)) + scroll, s_perout_flight_phase); + SET_GVAR(CFN_GVAR_INDEX(sd), GVAR_VALUE(CFN_GVAR_INDEX(sd), getGVarFlightPhase(s_perout_flight_phase, CFN_GVAR_INDEX(sd))) + scroll, s_perout_flight_phase); } } #endif else { - SET_GVAR(CFN_FUNC(sd)-FUNC_ADJUST_GV1, limit((getvalue_t)-1250, getValue(CFN_PARAM(sd)), (getvalue_t)1250) / 10, s_perout_flight_phase); + SET_GVAR(CFN_GVAR_INDEX(sd), limit((getvalue_t)-1250, getValue(CFN_PARAM(sd)), (getvalue_t)1250) / 10, s_perout_flight_phase); } - } - else { - active = false; - } - } + break; #endif - if (active) { - newActiveFnSwitches |= switch_mask; - newActiveFunctions |= function_mask; +#if defined(CPUARM) && defined(SDCARD) + case FUNC_VOLUME: + { + getvalue_t raw = getValue(CFN_PARAM(sd)); + //only set volume if input changed more than hysteresis + if (abs(requiredSpeakerVolumeRawLast - raw) > VOLUME_HYSTERESIS) { + requiredSpeakerVolumeRawLast = raw; + } + requiredSpeakerVolume = ((1024 + requiredSpeakerVolumeRawLast) * VOLUME_LEVEL_MAX) / 2048; + break; + } +#endif + +#if defined(CPUARM) && defined(SDCARD) + case FUNC_PLAY_SOUND: + case FUNC_PLAY_TRACK: + case FUNC_PLAY_VALUE: + { + tmr10ms_t tmr10ms = get_tmr10ms(); + uint8_t repeatParam = CFN_PLAY_REPEAT(sd); + if (evalFunctionsFirstTime && repeatParam == CFN_PLAY_REPEAT_NOSTART) + lastFunctionTime[i] = tmr10ms; + if (!lastFunctionTime[i] || (repeatParam && repeatParam!=CFN_PLAY_REPEAT_NOSTART && (signed)(tmr10ms-lastFunctionTime[i])>=100*repeatParam)) { + if (!IS_PLAYING(i+1)) { + lastFunctionTime[i] = tmr10ms; + if (CFN_FUNC(sd) == FUNC_PLAY_SOUND) { + AUDIO_PLAY(AU_FRSKY_FIRST+CFN_PARAM(sd)); + } + else if (CFN_FUNC(sd) == FUNC_PLAY_VALUE) { + PLAY_VALUE(CFN_PARAM(sd), i+1); + } + else { + playCustomFunctionFile(sd, i+1); + } + } + } + break; + } + + case FUNC_BACKGND_MUSIC: + newActiveFunctions |= (1 << FUNCTION_BACKGND_MUSIC); + if (!IS_PLAYING(i+1)) { + playCustomFunctionFile(sd, i+1); + } + break; + + case FUNC_BACKGND_MUSIC_PAUSE: + newActiveFunctions |= (1 << FUNCTION_BACKGND_MUSIC_PAUSE); + break; + +#elif defined(VOICE) + case FUNC_PLAY_SOUND: + case FUNC_PLAY_TRACK: + case FUNC_PLAY_BOTH: + case FUNC_PLAY_VALUE: + { + tmr10ms_t tmr10ms = get_tmr10ms(); + uint8_t repeatParam = CFN_PLAY_REPEAT(sd); + if (!lastFunctionTime[i] || (CFN_FUNC(sd)==FUNC_PLAY_BOTH && active!=(bool)(activeFnSwitches&switch_mask)) || (repeatParam && (signed)(tmr10ms-lastFunctionTime[i])>=1000*repeatParam)) { + lastFunctionTime[i] = tmr10ms; + uint8_t param = CFN_PARAM(sd); + if (CFN_FUNC(sd) == FUNC_PLAY_SOUND) { + AUDIO_PLAY(AU_FRSKY_FIRST+param); + } + else if (CFN_FUNC(sd) == FUNC_PLAY_VALUE) { + PLAY_VALUE(param, i+1); + } + else { +#if defined(GVARS) + if (CFN_FUNC(sd) == FUNC_PLAY_TRACK && param > 250) + param = GVAR_VALUE(param-251, getGVarFlightPhase(s_perout_flight_phase, param-251)); +#endif + PUSH_CUSTOM_PROMPT(active ? param : param+1, i+1); + } + } + break; + } +#else + case FUNC_PLAY_SOUND: + { + tmr10ms_t tmr10ms = get_tmr10ms(); + uint8_t repeatParam = CFN_PLAY_REPEAT(sd); + if (!lastFunctionTime[i] || (repeatParam && (signed)(tmr10ms-lastFunctionTime[i])>=1000*repeatParam)) { + lastFunctionTime[i] = tmr10ms; + AUDIO_PLAY(AU_FRSKY_FIRST+CFN_PARAM(sd)); + } + break; + } +#endif + +#if defined(FRSKY) && defined(VARIO) + case FUNC_VARIO: + newActiveFunctions |= (1 << FUNCTION_VARIO); + break; +#endif + +#if defined(HAPTIC) + case FUNC_HAPTIC: + haptic.event(AU_FRSKY_LAST+CFN_PARAM(sd)); + break; +#endif + +#if defined(SDCARD) + case FUNC_LOGS: + newActiveFunctions |= (1 << FUNCTION_LOGS); + logDelay = CFN_PARAM(sd); + break; +#endif + + case FUNC_BACKLIGHT: + newActiveFunctions |= (1 << FUNCTION_BACKLIGHT); + break; + +#if defined(DEBUG) + case FUNC_TEST: + testFunc(); + break; +#endif } + + newActiveFnSwitches |= switch_mask; } else { lastFunctionTime[i] = 0; @@ -3435,7 +3475,7 @@ void evalFunctions() fnSwitchDuration[i] = 0; #endif #if defined(CPUARM) && defined(SDCARD) - if (CFN_FUNC(sd) == FUNC_BACKGND_MUSIC && isFunctionActive(FUNC_BACKGND_MUSIC)) { + if (CFN_FUNC(sd) == FUNC_BACKGND_MUSIC && isFunctionActive(FUNCTION_BACKGND_MUSIC)) { STOP_PLAY(i+1); } #endif @@ -3443,13 +3483,13 @@ void evalFunctions() } } - activeSwitches = newActiveSwitches; activeFnSwitches = newActiveFnSwitches; activeFunctions = newActiveFunctions; #if defined(ROTARY_ENCODERS) && defined(GVARS) - for (uint8_t i=0; isum = 0; } - uint8_t atm = (tm >= 0 ? tm : TMR_VAROFS-tm-1); - // value for time described in timer->mode // OFFABSTHsTH%THt - if (atm == TMRMODE_THR_REL) { + if (tm == TMRMODE_THR_REL) { timerState->cnt++; timerState->sum+=val; } - if (atm>=(TMR_VAROFS+NUM_SWITCH)){ // toggeled switch - if(!(timerState->toggled | timerState->sum | timerState->cnt | timerState->lastPos)) { timerState->lastPos = tm < 0; timerState->sum = 1; } // if initializing then init the lastPos - uint8_t swPos = getSwitch(tm>0 ? tm-(TMR_VAROFS+NUM_SWITCH-1) : tm+NUM_SWITCH); - if (swPos && !timerState->lastPos) timerState->toggled = !timerState->toggled; // if switch is flipped first time -> change counter state - timerState->lastPos = swPos; - } - if ((timerState->val_10ms += tick10ms) >= 100) { timerState->val_10ms -= 100 ; int16_t newTimerVal = timerState->val; if (tv) newTimerVal = tv - newTimerVal; - if (atm==TMRMODE_ABS) { + if (tm == TMRMODE_ABS) { newTimerVal++; } - else if (atm==TMRMODE_THR) { + else if (tm == TMRMODE_THR) { if (val) newTimerVal++; } - else if (atm==TMRMODE_THR_REL) { + else if (tm == TMRMODE_THR_REL) { // @@@ open.20.fsguruh: why so complicated? we have already a s_sum field; use it for the half seconds (not showable) as well // check for s_cnt[i]==0 is not needed because we are shure it is at least 1 #if defined(ACCURAT_THROTTLE_TIMER) @@ -4050,19 +4079,17 @@ void doMixerCalculations() #endif timerState->cnt=0; } - else if (atm==TMRMODE_THR_TRG) { + else if (tm == TMRMODE_THR_TRG) { if (val || newTimerVal > 0) newTimerVal++; } else { - if (atm<(TMR_VAROFS+NUM_SWITCH)) - timerState->toggled = tm>0 ? getSwitch(tm-(TMR_VAROFS-1)) : !getSwitch(-tm); // normal switch - if (timerState->toggled) + if (tm > 0) tm -= (TMR_VAROFS-1); + if (getSwitch(tm)) newTimerVal++; } - switch(timerState->state) - { + switch (timerState->state) { case TMR_RUNNING: if (tv && newTimerVal>=(int16_t)tv) { AUDIO_TIMER_00(g_model.timers[i].countdownBeep); @@ -4106,8 +4133,8 @@ void doMixerCalculations() s_cnt_1s += 1; for (uint8_t i=0; ifunc == CS_TIMER) { + LogicalSwitchData * cs = cswAddress(i); + if (cs->func == LS_FUNC_TIMER) { int16_t *lastValue = &csLastValue[i]; if (*lastValue == 0 || *lastValue == CS_LAST_VALUE_INIT) { *lastValue = -cswTimerValue(cs->v1); @@ -4120,6 +4147,55 @@ void doMixerCalculations() *lastValue -= 1; } } + else if (cs->func == LS_FUNC_STICKY) { + PACK(typedef struct { + bool state; + bool last; + }) cs_sticky_struct; + cs_sticky_struct & lastValue = (cs_sticky_struct &)csLastValue[i]; + bool before = lastValue.last & 0x01; + if (lastValue.state) { + bool now = getSwitch(cs->v2); + if (now != before) { + lastValue.last ^= true; + if (!before) { + lastValue.state = false; + } + } + } + else { + bool now = getSwitch(cs->v1); + if (before != now) { + lastValue.last ^= true; + if (!before) { + lastValue.state = true; + } + } + } + } +#if defined(CPUARM) + else if (cs->func == LS_FUNC_STAY) { + PACK(typedef struct { + uint8_t state:1; + uint16_t duration:15; + }) cs_stay_struct; + + cs_stay_struct & lastValue = (cs_stay_struct &)csLastValue[i]; + lastValue.state = false; + bool state = getSwitch(cs->v1); + if (state) { + if (cs->v3 == 0 && lastValue.duration == cswTimerValue(cs->v2)) + lastValue.state = true; + if (lastValue.duration < 1000) + lastValue.duration++; + } + else { + if (lastValue.duration > cswTimerValue(cs->v2) && lastValue.duration <= cswTimerValue(cs->v2+cs->v3)) + lastValue.state = true; + lastValue.duration = 0; + } + } +#endif } if (s_cnt_1s >= 10) { // 1sec @@ -4289,6 +4365,17 @@ void opentxClose() hapticOff(); #endif +#if defined(CPUARM) && defined(FRSKY) + if((g_model.frsky.mAhPersistent) && (g_model.frsky.storedMah != frskyData.hub.currentConsumption)) { + g_model.frsky.storedMah = frskyData.hub.currentConsumption; + eeDirty(EE_MODEL); + } + else if((!g_model.frsky.mAhPersistent) && (g_model.frsky.storedMah != 0)){ + g_model.frsky.storedMah = 0; + eeDirty(EE_MODEL); + } +#endif + saveTimers(); #if defined(PCBSKY9X) @@ -4803,7 +4890,7 @@ void instantTrim() if (i!=THR_STICK) { // don't instant trim the throttle stick uint8_t trim_phase = getTrimFlightPhase(s_perout_flight_phase, i); - int16_t trim = limit((int16_t)TRIM_EXTENDED_MIN, (int16_t)((anas[i] + trims[i]) / 2), (int16_t)TRIM_EXTENDED_MAX); + int16_t trim = limit(TRIM_EXTENDED_MIN, (anas[i] + trims[i]) / 2, TRIM_EXTENDED_MAX); setTrimValue(trim_phase, i, trim); } } @@ -4861,9 +4948,16 @@ void moveTrimsToOffsets() // copy state of 3 primary to subtrim if (i!=THR_STICK || !g_model.thrTrim) { int16_t original_trim = getTrimValue(s_perout_flight_phase, i); for (uint8_t phase=0; phase q ) + while ( p > q ) { *p-- = 0x55 ; + } } uint16_t stack_free() @@ -4977,10 +5072,7 @@ uint16_t stack_free() unsigned char *p ; p = &__bss_end + 1 ; - while ( *p == 0x55 ) - { - p+= 1 ; - } + while ( *p++ == 0x55 ); return p - &__bss_end ; } #endif diff --git a/radio/src/opentx.h b/radio/src/opentx.h index 981d360bd..f282209a0 100644 --- a/radio/src/opentx.h +++ b/radio/src/opentx.h @@ -397,7 +397,6 @@ enum EnumKeys { #define NUM_PSWITCH (SWSRC_LAST_SWITCH-SWSRC_FIRST_SWITCH+1) #define NUM_POTSSW (NUM_XPOTS*6) -#define NUM_SWITCH (NUM_PSWITCH+NUM_CSW+NUM_POTSSW) #if defined(PCBTARANIS) #define KEY_RIGHT KEY_PLUS @@ -623,33 +622,6 @@ enum BaseCurves { #define SWASH_TYPE_90 4 #define SWASH_TYPE_NUM 4 -enum CswFunctions { - CS_OFF, - CS_VEQUAL, // v==offset - CS_VPOS, // v>offset - CS_VNEG, // voffset - CS_ANEG, // |v|> 3; - - for (int i=1; i<7; i++) - { - //INP_B_KEY_MEN 1 .. INP_B_KEY_LFT 6 - keys[enuk].input(in & (1< 0 - #define rotencDown() (!(PIOB->PIO_PDSR & 0x40)) + #define REA_DOWN() (!(PIOB->PIO_PDSR & 0x40)) #else - #define rotencDown() 0 + #define REA_DOWN() (0) #endif // Debug driver diff --git a/radio/src/targets/sky9x/keys_driver.cpp b/radio/src/targets/sky9x/keys_driver.cpp index 604db4f8b..7851a447e 100644 --- a/radio/src/targets/sky9x/keys_driver.cpp +++ b/radio/src/targets/sky9x/keys_driver.cpp @@ -113,9 +113,14 @@ uint32_t readTrims() return result; } +uint8_t trimDown(uint8_t idx) +{ + return readTrims() & (1 << idx); +} + uint8_t keyDown() { - return (~readKeys() & 0x7E) || rotencDown(); + return (~readKeys() & 0x7E) || REA_DOWN(); } void readKeysAndTrims() @@ -123,7 +128,7 @@ void readKeysAndTrims() register uint32_t i; #if ROTARY_ENCODERS > 0 - keys[BTN_REa].input(rotencDown(), BTN_REa); + keys[BTN_REa].input(REA_DOWN(), BTN_REa); #endif uint8_t enuk = KEY_MENU; diff --git a/radio/src/targets/stock/board_stock.cpp b/radio/src/targets/stock/board_stock.cpp index 8f1fd72eb..eaf5f2201 100644 --- a/radio/src/targets/stock/board_stock.cpp +++ b/radio/src/targets/stock/board_stock.cpp @@ -234,37 +234,38 @@ bool switchState(EnumKeys enuk) return result; } -#ifndef SIMU -FORCEINLINE -#endif -void readKeysAndTrims() +// Trim switches ... +static const pm_uchar crossTrim[] PROGMEM ={ + 1<func = func; cs->v1 = v1; cs->v2 = v2; @@ -198,8 +198,8 @@ void applyTemplate(uint8_t idx) md=setDest(13, MIXSRC_CH14); // md->weight= 100; done by setDest anyway md=setDest(13, MIXSRC_MAX); mixSetWeight(md, -100); md->swtch=SWSRC_SWB; md->mltpx=MLTPX_REP; md=setDest(13, MIXSRC_MAX); /* md->weight= 100;*/ md->swtch=SWSRC_THR; md->mltpx=MLTPX_REP; - setSwitch(11, CS_VNEG, STK_THR, -99); - setSwitch(12, CS_VPOS, MIXSRC_CH14, 0); + setSwitch(11, LS_FUNC_VNEG, STK_THR, -99); + setSwitch(12, LS_FUNC_VPOS, MIXSRC_CH14, 0); break; // V-Tail @@ -283,7 +283,7 @@ void applyTemplate(uint8_t idx) // Servo Test case TMPL_SERVO_TEST: md=setDest(NUM_CHNOUT-1, MIXSRC_SW1, true); md->weight=110; md->mltpx=MLTPX_ADD; md->delayUp = 6; md->delayDown = 6; md->speedUp = 8; md->speedDown = 8; - setSwitch(1, CS_VNEG, MIXSRC_LAST_CH, 0); + setSwitch(1, LS_FUNC_VNEG, MIXSRC_LAST_CH, 0); break; default: diff --git a/radio/src/translations.cpp b/radio/src/translations.cpp index 91ed7bc6a..786c0c059 100644 --- a/radio/src/translations.cpp +++ b/radio/src/translations.cpp @@ -245,9 +245,7 @@ const pm_char STR_RXBATT[] PROGMEM = TR_RXBATT; const pm_char STR_TX[] PROGMEM = TR_TXnRX; const pm_char STR_ACCEL[] PROGMEM = TR_ACCEL; const pm_char STR_NODATA[] PROGMEM = TR_NODATA; -const pm_char STR_TM1TM2[] PROGMEM = TR_TM1TM2; -const pm_char STR_THRTHP[] PROGMEM = TR_THRTHP; -const pm_char STR_TOT[] PROGMEM = TR_TOT; +const pm_char STR_TOTTM1TM2THRTHP[] PROGMEM = TR_TOTTM1TM2THRTHP; const pm_char STR_TMR1LATMAXUS[] PROGMEM = TR_TMR1LATMAXUS; const pm_char STR_TMR1LATMINUS[] PROGMEM = TR_TMR1LATMINUS; const pm_char STR_TMR1JITTERUS[] PROGMEM = TR_TMR1JITTERUS; diff --git a/radio/src/translations.h b/radio/src/translations.h index 411432ab2..ceeda44b7 100644 --- a/radio/src/translations.h +++ b/radio/src/translations.h @@ -399,9 +399,7 @@ extern const pm_char STR_TX[]; #define STR_RX (STR_TX+OFS_RX) extern const pm_char STR_ACCEL[]; extern const pm_char STR_NODATA[]; -extern const pm_char STR_TM1TM2[]; -extern const pm_char STR_THRTHP[]; -extern const pm_char STR_TOT[]; +extern const pm_char STR_TOTTM1TM2THRTHP[]; extern const pm_char STR_TMR1LATMAXUS[]; extern const pm_char STR_TMR1LATMINUS[]; extern const pm_char STR_TMR1JITTERUS[]; diff --git a/radio/src/translations/cz.h.txt b/radio/src/translations/cz.h.txt index e2e883690..3d718ec79 100644 --- a/radio/src/translations/cz.h.txt +++ b/radio/src/translations/cz.h.txt @@ -35,7 +35,7 @@ */ /* Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) - * \036 -newline (ARM boards only) + * \036 -newline * \001 to \035 -extended spacing (value * FW/2) * \0 -ends actual string */ @@ -150,8 +150,25 @@ #define LEN_VMIXTRIMS "\004" #define TR_VMIXTRIMS "VYP\0""ZAP\0""Směr""Výšk""Plyn""Křid" +#if defined(PCBTARANIS) + #define TR_CSWTIMER "Timer" + #define TR_CSWSTICKY "Stcky" + #define TR_CSWRANGE "Range" + #define TR_CSWSTAY "Edge\0" +#else + #define TR_CSWTIMER "Tim\0 " + #define TR_CSWSTICKY "Glue\0" + #if defined(CPUARM) + #define TR_CSWRANGE "Rnge\0" + #define TR_CSWSTAY "Edge\0" + #else + #define TR_CSWRANGE + #define TR_CSWSTAY + #endif +#endif + #define LEN_VCSWFUNC "\005" -#define TR_VCSWFUNC "---\0 ""a{x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb ""REc ""REd " -#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS <= 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb " + #define TR_ROTARY_ENCODERS "REa\0" + #define TR_ROTENC_SWITCHES "REa" +#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) + #define TR_ROTARY_ENCODERS "REa\0""REb\0" + #define TR_ROTENC_SWITCHES "REa""REb" #else - #define TR_ROTARY_ENCODERS_VSRCRAW + #define TR_ROTARY_ENCODERS + #define TR_ROTENC_SWITCHES +#endif + +#if defined(PCBTARANIS) + #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26" + #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_CUSTOMSW +#elif defined(CPUARM) + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW +#else + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW #endif #if defined(HELI) @@ -356,7 +375,7 @@ #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_VSRCRAW "MAX\0" TR_CYC_VSRCRAW "TrmS" "TrmV" "TrmP" "TrmK" TR_SW_VSRCRAW +#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 #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "VYP""ABS""THs""TH%""THt" @@ -495,17 +514,15 @@ #define TR_CAL "Kal." #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART CENTER "\007" TR_ENTER " = START" -#define TR_SETMIDPOINT TR(CENTER "\001Nastav páky na střed", CENTER "\002Nastav páky na střed") -#define TR_MOVESTICKSPOTS TR(CENTER "\004Hýbej pákami/poty", "\007Hýbej pákami i potenciometry") +#define TR_MENUTOSTART CENTER "\010" TR_ENTER " = START" +#define TR_SETMIDPOINT TR(CENTER "\003Nastav páky na střed", CENTER "\004Nastav páky na střed") +#define TR_MOVESTICKSPOTS TR(CENTER "\005Hýbej pákami/poty", "\010Hýbej pákami i potenciometry") #define TR_RXBATT "Rx Bat.:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_ACCEL "Acc:" #define TR_NODATA CENTER "NO DATA" -#define TR_TM1TM2 "TM1\037\146TM2" -#define TR_THRTHP "THR\037\146TH%" -#define TR_TOT "TOT" +#define TR_TOTTM1TM2THRTHP "\037\146TOT\036TM1\037\146TM2\036THR\037\146TH%" #define TR_TMR1LATMAXUS "Tmr1Lat max\037\124us" #define STR_US (STR_TMR1LATMAXUS+13) #define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" @@ -717,7 +734,7 @@ // Taranis column headers #define TR_PHASES_HEADERS { " Jméno ", " Spínač ", " Trimy ", " Přechod Zap ", " Přechod Vyp " } #define TR_LIMITS_HEADERS { " Jméno ", " Subtrim ", " Min ", " Max ", " Směr ", " Křivka ", " Střed PPM ", " Symetrické " } -#define TR_CSW_HEADERS { " Funkce ", " Hodnota 1 ", " Hodnota 2 ", " AND Spínač ", " Trvání ", " Zpoždění " } +#define TR_CSW_HEADERS { " Funkce ", " Hodnota 1 ", " Hodnota 2 ", " Hodnota 2 ", " AND Spínač ", " Trvání ", " Zpoždění " } //Taranis About screen #define TR_ABOUTUS TR(" O nás ", "O nás") @@ -770,7 +787,7 @@ #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' #define TR_CHR_HOUR 'h' -#define TR_CHR_INPUT 'I' // Values between A-I will work +#define TR_CHR_INPUT 'I' // Values between A-I will work #define TR_BEEP_VOLUME "Pípání" #define TR_WAV_VOLUME "Zvuky WAV" diff --git a/radio/src/translations/de.h.txt b/radio/src/translations/de.h.txt index cf8672cee..8b0b2d5ec 100644 --- a/radio/src/translations/de.h.txt +++ b/radio/src/translations/de.h.txt @@ -35,7 +35,7 @@ */ /* Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) - * \036 -newline (ARM boards only) + * \036 -newline * \001 to \035 -extended spacing (value * FW/2) * \0 -ends actual string */ @@ -150,8 +150,25 @@ #define LEN_VMIXTRIMS "\003" #define TR_VMIXTRIMS "AUS""EIN""Sei""H\203e""Gas""Que" //Mixer Trim Werte +#if defined(PCBTARANIS) + #define TR_CSWTIMER "Timer" + #define TR_CSWSTICKY "Stcky" + #define TR_CSWRANGE "Range" + #define TR_CSWSTAY "Edge\0" +#else + #define TR_CSWTIMER "Tim\0 " + #define TR_CSWSTICKY "Glue\0" + #if defined(CPUARM) + #define TR_CSWRANGE "Rnge\0" + #define TR_CSWSTAY "Edge\0" + #else + #define TR_CSWRANGE + #define TR_CSWSTAY + #endif +#endif + #define LEN_VCSWFUNC "\005" -#define TR_VCSWFUNC "---\0 ""a{x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "DGa ""DGb ""DGc ""DGd " -#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS <= 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "DGa ""DGb " + #define TR_ROTARY_ENCODERS "DGa\0" + #define TR_ROTENC_SWITCHES "DGa" +#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) + #define TR_ROTARY_ENCODERS "DGa\0""DGb\0" + #define TR_ROTENC_SWITCHES "DGa""DGb" #else - #define TR_ROTARY_ENCODERS_VSRCRAW + #define TR_ROTARY_ENCODERS + #define TR_ROTENC_SWITCHES +#endif + +#if defined(PCBTARANIS) + #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26" + #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_CUSTOMSW +#elif defined(CPUARM) + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW +#else + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW #endif #if defined(HELI) @@ -356,7 +375,7 @@ #define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" #endif -#define TR_VSRCRAW "---\0""Sei\0""H\203h\0""Gas\0""Que\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS_VSRCRAW "MAX\0" TR_CYC_VSRCRAW "TrmS" "TrmH" "TrmG" "TrmQ" TR_SW_VSRCRAW +#define TR_VSRCRAW "---\0""Sei\0""H\203h\0""Gas\0""Que\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW "TrmS" "TrmH" "TrmG" "TrmQ" TR_SW_VSRCRAW #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "AUS""ABS""GSs""GS%""GSt" @@ -390,7 +409,7 @@ #define TR_POPUPS TR_ENTER"\010[EXIT]" #define OFS_EXIT sizeof(TR_ENTER) -#define TR_MENUWHENDONE CENTER"\006"TR_ENTER" > Weiter" +#define TR_MENUWHENDONE CENTER"\010"TR_ENTER" > Weiter" #define TR_FREE "frei" #define TR_DELETEMODEL "Modell l\203schen?" #define TR_COPYINGMODEL "Kopiere Modell" @@ -495,17 +514,15 @@ #define TR_CAL "Kal." #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART CENTER"\006"TR_ENTER" zum Start" -#define TR_SETMIDPOINT CENTER"Sticks+Potis auf Mitte" -#define TR_MOVESTICKSPOTS CENTER"Sticks+Potis bewegen" +#define TR_MENUTOSTART CENTER"\007"TR_ENTER" zum Start" +#define TR_SETMIDPOINT CENTER"\002Sticks+Potis auf Mitte" +#define TR_MOVESTICKSPOTS CENTER"\003Sticks+Potis bewegen" #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_ACCEL "Acc:" #define TR_NODATA CENTER"NO DATA" -#define TR_TM1TM2 "TM1\037\146TM2" -#define TR_THRTHP "THR\037\146TH%" -#define TR_TOT "TOT" +#define TR_TOTTM1TM2THRTHP "\037\146TOT\036TM1\037\146TM2\036THR\037\146TH%" #define TR_TMR1LATMAXUS "Tmr1Lat max\037\124us" #define STR_US (STR_TMR1LATMAXUS+13) #define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" @@ -717,7 +734,7 @@ // Taranis column headers #define TR_PHASES_HEADERS { " Name ", " Schalter ", " Trimmung ", " Fade In ", " Fade Out " } #define TR_LIMITS_HEADERS { " Name ", " Subtrim ", " Min ", " Max ", " Richtung ", " Kurve ", " PPM Mitte ", " Subtrim Mode " } -#define TR_CSW_HEADERS { " Funktion ", " Var1 ", " Var2 ", " UND Schalter ", " Dauer ", " Delay " } +#define TR_CSW_HEADERS { " Funktion ", " Var1 ", " Var2 ", " Var2 ", " UND Schalter ", " Dauer ", " Delay " } //Taranis About screen #define TR_ABOUTUS "Über OpenTx" @@ -770,7 +787,7 @@ #define TR_CHR_LONG 'l' //Taste long #define TR_CHR_TOGGLE 't' //Taste als togglefunktion = Ein Aus Ein #define TR_CHR_HOUR 'h' //Stunden -#define TR_CHR_INPUT 'I' // Values between A-I will work +#define TR_CHR_INPUT 'I' // Values between A-I will work #define TR_BEEP_VOLUME "Beep Lautst" #define TR_WAV_VOLUME "Wav Lautst" diff --git a/radio/src/translations/en.h b/radio/src/translations/en.h index 931259b41..ed29c91a3 100644 --- a/radio/src/translations/en.h +++ b/radio/src/translations/en.h @@ -35,7 +35,7 @@ */ /* Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) - * \036 -newline (ARM boards only) + * \036 -newline * \001 to \035 -extended spacing (value * FW/2) * \0 -ends actual string */ @@ -150,8 +150,25 @@ #define LEN_VMIXTRIMS "\003" #define TR_VMIXTRIMS "OFF""ON\0""Rud""Ele""Thr""Ail" +#if defined(PCBTARANIS) + #define TR_CSWTIMER "Timer" + #define TR_CSWSTICKY "Stcky" + #define TR_CSWRANGE "Range" + #define TR_CSWSTAY "Edge\0" +#else + #define TR_CSWTIMER "Tim\0 " + #define TR_CSWSTICKY "Glue\0" + #if defined(CPUARM) + #define TR_CSWRANGE "Rnge\0" + #define TR_CSWSTAY "Edge\0" + #else + #define TR_CSWRANGE + #define TR_CSWSTAY + #endif +#endif + #define LEN_VCSWFUNC "\005" -#define TR_VCSWFUNC "---\0 ""a{x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb ""REc ""REd " -#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS <= 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb " -#else - #define TR_ROTARY_ENCODERS_VSRCRAW + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW #endif #if defined(HELI) @@ -356,7 +375,7 @@ #define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" #endif -#define TR_VSRCRAW "---\0""Rud\0""Ele\0""Thr\0""Ail\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS_VSRCRAW "MAX\0" TR_CYC_VSRCRAW "TrmR" "TrmE" "TrmT" "TrmA" TR_SW_VSRCRAW +#define TR_VSRCRAW "---\0""Rud\0""Ele\0""Thr\0""Ail\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW "TrmR" "TrmE" "TrmT" "TrmA" TR_SW_VSRCRAW #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "OFF""ABS""THs""TH%""THt" @@ -407,13 +426,13 @@ #define TR_EXPONAME "Expo Name" #endif #define TR_BITMAP "Model Image" -#define TR_TIMER TR("Timer","Timer ") -#define TR_ELIMITS TR("E.Limits","Extended Limits") -#define TR_ETRIMS TR("E.Trims","Extended Trims") +#define TR_TIMER TR("Timer", "Timer ") +#define TR_ELIMITS TR("E.Limits", "Extended Limits") +#define TR_ETRIMS TR("E.Trims", "Extended Trims") #define TR_TRIMINC "Trim Step" -#define TR_TTRACE TR("T-Source","Throttle Source") -#define TR_TTRIM TR("T-Trim","Throttle Trim") -#define TR_BEEPCTR TR("Ctr Beep","Center Beep") +#define TR_TTRACE TR("T-Source", "Throttle Source") +#define TR_TTRIM TR("T-Trim", "Throttle Trim") +#define TR_BEEPCTR TR("Ctr Beep", "Center Beep") #define TR_PROTO TR(INDENT "Proto", INDENT "Protocol") #define TR_PPMFRAME TR("PPM frame", INDENT "PPM frame") #define TR_MS "ms" @@ -495,17 +514,15 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART CENTER "\006" TR_ENTER " TO START" -#define TR_SETMIDPOINT TR(CENTER "\003SET STICKS MIDPOINT",CENTER "\003CENTER STICKS/SLIDERS") +#define TR_MENUTOSTART CENTER "\010" TR_ENTER " TO START" +#define TR_SETMIDPOINT TR(CENTER "\004SET STICKS MIDPOINT",CENTER "\004CENTER STICKS/SLIDERS") #define TR_MOVESTICKSPOTS CENTER "\006MOVE STICKS/POTS" #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_ACCEL "Acc:" #define TR_NODATA CENTER "NO DATA" -#define TR_TM1TM2 "TM1\037\146TM2" -#define TR_THRTHP "THR\037\146TH%" -#define TR_TOT "TOT" +#define TR_TOTTM1TM2THRTHP "\037\146TOT\036TM1\037\146TM2\036THR\037\146TH%" #define TR_TMR1LATMAXUS "Tmr1Lat max\037\124us" #define STR_US (STR_TMR1LATMAXUS+13) #define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" @@ -715,9 +732,9 @@ #endif // Taranis column headers -#define TR_PHASES_HEADERS { " Name ", " Switch ", " Trims ", " Fade In ", " Fade Out " } +#define TR_PHASES_HEADERS { " Name ", " Switch ", " Rudder Trim ", " Elevator Trim ", " Throttle Trim ", " Aileron Trim ", " Fade In ", " Fade Out " } #define TR_LIMITS_HEADERS { " Name ", " Subtrim ", " Min ", " Max ", " Direction ", " Curve ", " PPM Center ", " Subtrim mode " } -#define TR_CSW_HEADERS { " Function ", " V1 ", " V2 ", " AND Switch ", " Duration ", " Delay " } +#define TR_CSW_HEADERS { " Function ", " V1 ", " V2 ", " V2 ", " AND Switch ", " Duration ", " Delay " } // About screen #define TR_ABOUTUS TR(" ABOUT ", "ABOUT") @@ -770,7 +787,7 @@ #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' #define TR_CHR_HOUR 'h' -#define TR_CHR_INPUT 'I' // Values between A-I will work +#define TR_CHR_INPUT 'I' // Values between A-I will work #define TR_BEEP_VOLUME "Beep Volume" #define TR_WAV_VOLUME "Wav Volume" diff --git a/radio/src/translations/es.h.txt b/radio/src/translations/es.h.txt index 1c016fdcd..7bcaa93c9 100644 --- a/radio/src/translations/es.h.txt +++ b/radio/src/translations/es.h.txt @@ -35,7 +35,7 @@ */ /* Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) - * \036 -newline (ARM boards only) + * \036 -newline * \001 to \035 -extended spacing (value * FW/2) * \0 -ends actual string */ @@ -150,8 +150,25 @@ #define LEN_VMIXTRIMS "\003" #define TR_VMIXTRIMS "OFF""ON\0""Dir""Ele""Ace""Ale" +#if defined(PCBTARANIS) + #define TR_CSWTIMER "Timer" + #define TR_CSWSTICKY "Stcky" + #define TR_CSWRANGE "Range" + #define TR_CSWSTAY "Edge\0" +#else + #define TR_CSWTIMER "Tim\0 " + #define TR_CSWSTICKY "Glue\0" + #if defined(CPUARM) + #define TR_CSWRANGE "Rnge\0" + #define TR_CSWSTAY "Edge\0" + #else + #define TR_CSWRANGE + #define TR_CSWSTAY + #endif +#endif + #define LEN_VCSWFUNC "\005" -#define TR_VCSWFUNC "---\0 ""a{x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb ""REc ""REd " -#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS <= 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb " + #define TR_ROTARY_ENCODERS "REa\0" + #define TR_ROTENC_SWITCHES "REa" +#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) + #define TR_ROTARY_ENCODERS "REa\0""REb\0" + #define TR_ROTENC_SWITCHES "REa""REb" #else - #define TR_ROTARY_ENCODERS_VSRCRAW + #define TR_ROTARY_ENCODERS + #define TR_ROTENC_SWITCHES +#endif + +#if defined(PCBTARANIS) + #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26" + #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_CUSTOMSW +#elif defined(CPUARM) + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW +#else + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW #endif #if defined(HELI) @@ -356,7 +375,7 @@ #define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" #endif -#define TR_VSRCRAW "---\0""Dir\0""Ele\0""Thr\0""Ale\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS_VSRCRAW "MAX\0" TR_CYC_VSRCRAW "TrmR" "TrmE" "TrmT" "TrmA" TR_SW_VSRCRAW +#define TR_VSRCRAW "---\0""Dir\0""Ele\0""Thr\0""Ale\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW "TrmR" "TrmE" "TrmT" "TrmA" TR_SW_VSRCRAW #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "OFF""ABS""THs""TH%""THt" @@ -390,7 +409,7 @@ #define TR_POPUPS TR_ENTER "\010[SALIR]" #define OFS_EXIT sizeof(TR_ENTER) -#define TR_MENUWHENDONE CENTER "\006" TR_ENTER "AL ACABAR " +#define TR_MENUWHENDONE CENTER "\007" TR_ENTER " AL ACABAR " #define TR_FREE "libre" #define TR_DELETEMODEL "BORRAR MODELO" #define TR_COPYINGMODEL "Copiando modelo.." @@ -495,17 +514,15 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART CENTER "\006" TR_ENTER "EMPEZAR" -#define TR_SETMIDPOINT CENTER "\003STICKS AL CENTRO" +#define TR_MENUTOSTART CENTER "\010" TR_ENTER " EMPEZAR" +#define TR_SETMIDPOINT TR(CENTER "\007STICKS AL CENTRO",CENTER "\010STICKS AL CENTRO") #define TR_MOVESTICKSPOTS CENTER "\006MOVER STICKS/POTS" #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_ACCEL "Acc:" #define TR_NODATA CENTER "SIN DATOS" -#define TR_TM1TM2 "TM1\037\146TM2" -#define TR_THRTHP "THR\037\146TH%" -#define TR_TOT "TOT" +#define TR_TOTTM1TM2THRTHP "\037\146TOT\036TM1\037\146TM2\036THR\037\146TH%" #define TR_TMR1LATMAXUS "Tmr1Lat max\037\124us" #define STR_US (STR_TMR1LATMAXUS+13) #define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" @@ -528,7 +545,7 @@ #define TR_EEPROMLOWMEM "EEPROM mem.baja" #define TR_ALERT "\016ALERTA" #define TR_PRESSANYKEYTOSKIP "Pulsar tecla omitir" -#define TR_THROTTLENOTIDLE "Aceler.Activado" +#define TR_THROTTLENOTIDLE "Aceler. Activado" #define TR_ALARMSDISABLED "Alarmas Desact." #define TR_PRESSANYKEY TR("\010Pulsa una Tecla", "Pulsa una Tecla") #define TR_BADEEPROMDATA "Datos EEprom mal" @@ -717,7 +734,7 @@ // Taranis column headers #define TR_PHASES_HEADERS { " Nombre ", " Interrup.", " Trims ", " Aparecer ", " Desparecer " } #define TR_LIMITS_HEADERS { " Nombre ", " Compensacion", " Min ", " Max ", " Direccion ", " Curve ", " Centrado PPM ", " Simetrica " } -#define TR_CSW_HEADERS { " Funcion ", " V1 ", " V2 ", " AND Interrup. ", " Duracion ", " Retardo " } +#define TR_CSW_HEADERS { " Funcion ", " V1 ", " V2 ", " V2 ", " AND Interrup. ", " Duracion ", " Retardo " } //Taranis About screen #define TR_ABOUTUS "Nosotros" @@ -770,7 +787,7 @@ #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' #define TR_CHR_HOUR 'h' -#define TR_CHR_INPUT 'I' // Values between A-I will work +#define TR_CHR_INPUT 'I' // Values between A-I will work #define TR_BEEP_VOLUME "Volumen Beep" #define TR_WAV_VOLUME "Volumen Wav" diff --git a/radio/src/translations/fr.h.txt b/radio/src/translations/fr.h.txt index 346b93c35..8af0f3fc5 100644 --- a/radio/src/translations/fr.h.txt +++ b/radio/src/translations/fr.h.txt @@ -35,7 +35,7 @@ */ /* Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) - * \036 -newline (ARM boards only) + * \036 -newline * \001 to \035 -extended spacing (value * FW/2) * \0 -ends actual string */ @@ -150,8 +150,25 @@ #define LEN_VMIXTRIMS "\003" #define TR_VMIXTRIMS "OFF""ON\0""Dir""Prf""Gaz""Ail" +#if defined(PCBTARANIS) + #define TR_CSWTIMER "Tempo" + #define TR_CSWSTICKY "Bist." + #define TR_CSWRANGE "Plage" + #define TR_CSWSTAY "Flanc" +#else + #define TR_CSWTIMER "Temp\0" + #define TR_CSWSTICKY "Bist\0" + #if defined(CPUARM) + #define TR_CSWRANGE "Zone\0" + #define TR_CSWSTAY "Flnc\0" + #else + #define TR_CSWRANGE + #define TR_CSWSTAY + #endif +#endif + #define LEN_VCSWFUNC "\005" -#define TR_VCSWFUNC "---\0 ""a{x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb ""REc ""REd " -#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS <= 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb " -#else - #define TR_ROTARY_ENCODERS_VSRCRAW + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW #endif #if defined(HELI) @@ -356,7 +375,7 @@ #define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" #endif -#define TR_VSRCRAW "---\0""Dir\0""Prf\0""Gaz\0""Ail\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS_VSRCRAW "MAX\0" TR_CYC_VSRCRAW "TrmD" "TrmP" "TrmG" "TrmA" TR_SW_VSRCRAW +#define TR_VSRCRAW "---\0""Dir\0""Prf\0""Gaz\0""Ail\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODER "MAX\0" TR_CYC_VSRCRAW "TrmD" "TrmP" "TrmG" "TrmA" TR_SW_VSRCRAW #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "OFF""ABS""GZs""GZ%""GZt" @@ -503,9 +522,7 @@ #define OFS_RX 4 #define TR_ACCEL "Acc:" #define TR_NODATA "NO DATA" -#define TR_TM1TM2 "TM1\037\146TM2" -#define TR_THRTHP "THR\037\146TH%" -#define TR_TOT "TOT" +#define TR_TOTTM1TM2THRTHP "\037\146TOT\036TM1\037\146TM2\036THR\037\146TH%" #define TR_TMR1LATMAXUS "Tmr1Lat max\037\124us" #define STR_US (STR_TMR1LATMAXUS+13) #define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" @@ -717,7 +734,7 @@ // Taranis column headers #define TR_PHASES_HEADERS { " Nom ", " Inter ", " Trims ", " Fondu ON ", " Fondu OFF " } #define TR_LIMITS_HEADERS { " Nom ", " Subtrim ", " Min ", " Max ", " Direction ", " Curve ", " Neutre PPM ", " Mode subtrim " } -#define TR_CSW_HEADERS { " Fonction ", " V1 ", " V2 ", " ET suppl. ", " Durée ", " Délai " } +#define TR_CSW_HEADERS { " Fonction ", " V1 ", " V2 ", " V2 ", " ET suppl. ", " Durée ", " Délai " } //Taranis About screen #define TR_ABOUTUS TR(" A PROPOS ","A PROPOS") @@ -770,7 +787,7 @@ #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' #define TR_CHR_HOUR 'h' -#define TR_CHR_INPUT 'I' // Values between A-I will work +#define TR_CHR_INPUT 'E' // Values between A-I will work #define TR_BEEP_VOLUME "Beep Volume" #define TR_WAV_VOLUME "Wav Volume" diff --git a/radio/src/translations/it.h.txt b/radio/src/translations/it.h.txt index 64e45ec80..9a5571c86 100644 --- a/radio/src/translations/it.h.txt +++ b/radio/src/translations/it.h.txt @@ -35,7 +35,7 @@ */ /* Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) - * \036 -newline (ARM boards only) + * \036 -newline * \001 to \035 -extended spacing (value * FW/2) * \0 -ends actual string */ @@ -150,8 +150,25 @@ #define LEN_VMIXTRIMS "\003" #define TR_VMIXTRIMS "OFF""ON ""Rud""Ele""Thr""Ail" +#if defined(PCBTARANIS) + #define TR_CSWTIMER "Timer" + #define TR_CSWSTICKY "Stcky" + #define TR_CSWRANGE "Range" + #define TR_CSWSTAY "Edge\0" +#else + #define TR_CSWTIMER "Tim\0 " + #define TR_CSWSTICKY "Glue\0" + #if defined(CPUARM) + #define TR_CSWRANGE "Rnge\0" + #define TR_CSWSTAY "Edge\0" + #else + #define TR_CSWRANGE + #define TR_CSWSTAY + #endif +#endif + #define LEN_VCSWFUNC "\005" -#define TR_VCSWFUNC "---\0 ""a{x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a 2 -#define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb ""REc ""REd " -#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS <= 2 -#define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb " + #define TR_ROTARY_ENCODERS "REa\0" + #define TR_ROTENC_SWITCHES "REa" +#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) + #define TR_ROTARY_ENCODERS "REa\0""REb\0" + #define TR_ROTENC_SWITCHES "REa""REb" #else -#define TR_ROTARY_ENCODERS_VSRCRAW + #define TR_ROTARY_ENCODERS + #define TR_ROTENC_SWITCHES +#endif + +#if defined(PCBTARANIS) + #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26" + #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_CUSTOMSW +#elif defined(CPUARM) + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW +#else + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW #endif #if defined(HELI) @@ -356,7 +375,7 @@ #define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" #endif -#define TR_VSRCRAW "---\0""Rud\0""Ele\0""Thr\0""Ail\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS_VSRCRAW "MAX\0" TR_CYC_VSRCRAW "TrmR" "TrmE" "TrmT" "TrmA" TR_SW_VSRCRAW +#define TR_VSRCRAW "---\0""Rud\0""Ele\0""Thr\0""Ail\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW "TrmR" "TrmE" "TrmT" "TrmA" TR_SW_VSRCRAW #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "OFF""ABS""THs""TH%""THt" @@ -390,7 +409,7 @@ #define TR_POPUPS TR_ENTER"\004[EXIT]" #define OFS_EXIT sizeof(TR_ENTER) -#define TR_MENUWHENDONE CENTER"\006"TR_ENTER" Conferma" +#define TR_MENUWHENDONE CENTER"\007"TR_ENTER" Conferma" #define TR_FREE " Disp." #define TR_DELETEMODEL "Elimina modello?" #define TR_COPYINGMODEL "Copia in corso.." @@ -495,17 +514,15 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART CENTER"\006" TR_ENTER " per Cal." -#define TR_SETMIDPOINT CENTER"\011SETTA CENTRO" -#define TR_MOVESTICKSPOTS CENTER"\006MUOVI STICK/POT" +#define TR_MENUTOSTART CENTER"\011" TR_ENTER " per Cal." +#define TR_SETMIDPOINT CENTER"\012SETTA CENTRO" +#define TR_MOVESTICKSPOTS CENTER"\010MUOVI STICK/POT" #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_ACCEL "Acc:" #define TR_NODATA CENTER"DATI ASSENTI" -#define TR_TM1TM2 "TM1\037\146TM2" -#define TR_THRTHP "THR\037\146TH%" -#define TR_TOT "TOT" +#define TR_TOTTM1TM2THRTHP "\037\146TOT\036TM1\037\146TM2\036THR\037\146TH%" #define TR_TMR1LATMAXUS "Tmr1Lat max\037\124us" #define STR_US (STR_TMR1LATMAXUS+13) #define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" @@ -717,7 +734,7 @@ // Taranis column headers #define TR_PHASES_HEADERS { " Nome ", " Switch ", " Trims ", " Fade In ", " Fade Out " } #define TR_LIMITS_HEADERS { " Nome ", " Offset ", " Min ", " Max ", " Direzione ", " Curve ", " Centro PPM ", " Simmetria " } -#define TR_CSW_HEADERS { " Funzione ", " V1 ", " V2 ", " AND Switch ", " Durata ", " Ritardo " } +#define TR_CSW_HEADERS { " Funzione ", " V1 ", " V2 ", " V2 ", " AND Switch ", " Durata ", " Ritardo " } //Taranis About screen #define TR_ABOUTUS "Info su" @@ -770,7 +787,7 @@ #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' #define TR_CHR_HOUR 'h' -#define TR_CHR_INPUT 'I' // Values between A-I will work +#define TR_CHR_INPUT 'I' // Values between A-I will work #define TR_BEEP_VOLUME "Beep Volume" #define TR_WAV_VOLUME "Wav Volume" diff --git a/radio/src/translations/pl.h.txt b/radio/src/translations/pl.h.txt index 626436dbe..87a6a3627 100644 --- a/radio/src/translations/pl.h.txt +++ b/radio/src/translations/pl.h.txt @@ -35,7 +35,7 @@ */ /* Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) - * \036 -newline (ARM boards only) + * \036 -newline * \001 to \035 -extended spacing (value * FW/2) * \0 -ends actual string */ @@ -150,8 +150,25 @@ #define LEN_VMIXTRIMS "\004" #define TR_VMIXTRIMS "WYł\0""ZAŁ\0""SK\0 ""SW\0 ""GAZ\0""Lotk" +#if defined(PCBTARANIS) + #define TR_CSWTIMER "Timer" + #define TR_CSWSTICKY "Stcky" + #define TR_CSWRANGE "Range" + #define TR_CSWSTAY "Edge\0" +#else + #define TR_CSWTIMER "Tim\0 " + #define TR_CSWSTICKY "Glue\0" + #if defined(CPUARM) + #define TR_CSWRANGE "Rnge\0" + #define TR_CSWSTAY "Edge\0" + #else + #define TR_CSWRANGE + #define TR_CSWSTAY + #endif +#endif + #define LEN_VCSWFUNC "\005" -#define TR_VCSWFUNC "---\0 ""a{x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb ""REc ""REd " -#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS <= 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb " + #define TR_ROTARY_ENCODERS "REa\0" + #define TR_ROTENC_SWITCHES "REa" +#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) + #define TR_ROTARY_ENCODERS "REa\0""REb\0" + #define TR_ROTENC_SWITCHES "REa""REb" #else - #define TR_ROTARY_ENCODERS_VSRCRAW + #define TR_ROTARY_ENCODERS + #define TR_ROTENC_SWITCHES +#endif + +#if defined(PCBTARANIS) + #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26" + #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_CUSTOMSW +#elif defined(CPUARM) + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW +#else + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW #endif #if defined(HELI) @@ -356,7 +375,7 @@ #define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" #endif -#define TR_VSRCRAW "---\0""SK\0 ""SW\0 ""Gaz\0""Lotk" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS_VSRCRAW "MAX\0" TR_CYC_VSRCRAW "TrmK" "TrmW" "TrmG" "TrmL" TR_SW_VSRCRAW +#define TR_VSRCRAW "---\0""SK\0 ""SW\0 ""Gaz\0""Lotk" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW "TrmK" "TrmW" "TrmG" "TrmL" TR_SW_VSRCRAW #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "WYŁ""ABS""THs""TH%""THt" @@ -390,7 +409,7 @@ #define TR_POPUPS TR_ENTER"\010[WYJŚCIE]" #define OFS_EXIT sizeof(TR_ENTER) -#define TR_MENUWHENDONE CENTER "\007"TR_ENTER" > DALEJ" +#define TR_MENUWHENDONE CENTER "\012"TR_ENTER" > DALEJ" #define TR_FREE TR("wolne:", "wolne") #define TR_DELETEMODEL "SKASUJ MODEL" #define TR_COPYINGMODEL "Kopiuj model.." @@ -495,17 +514,15 @@ #define TR_CAL "Kal." #define TR_VTRIM "Trymer- +" #define TR_BG "BG:" -#define TR_MENUTOSTART CENTER "\007" TR_ENTER " = START" -#define TR_SETMIDPOINT TR(CENTER "\001Ustaw drążki/potencj na środku","\005Ustaw drązki/potencj na środku") -#define TR_MOVESTICKSPOTS TR(CENTER "\004Poruszaj drążkami i potenc.","\010Poruszaj drążkami i potenc.") +#define TR_MENUTOSTART CENTER "\011" TR_ENTER " = START" +#define TR_SETMIDPOINT TR(CENTER "\002Ustaw drążki/potencj","\010Ustaw drązki/potencj na środku") +#define TR_MOVESTICKSPOTS TR(CENTER "Poruszaj drążkami i pot","\014Poruszaj drążkami i potenc.") #define TR_RXBATT "Rx Bat.:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_ACCEL "Acc:" #define TR_NODATA CENTER "NO DATA" -#define TR_TM1TM2 "TM1\037\146TM2" -#define TR_THRTHP "THR\037\146TH%" -#define TR_TOT "TOT" +#define TR_TOTTM1TM2THRTHP "\037\146TOT\036TM1\037\146TM2\036THR\037\146TH%" #define TR_TMR1LATMAXUS "Tmr1Lat max\037\124us" #define STR_US (STR_TMR1LATMAXUS+12) #define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" @@ -689,14 +706,14 @@ #define TR_POT2TYPE "Typ S2" #if defined(MAVLINK) - #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Max RSSI" + #define TR_MAVLINK_RC_RSSI_SCALE_LABEL "Maks RSSI" #define TR_MAVLINK_PC_RSSI_EN_LABEL "PC RSSI EN" #define TR_MAVMENUSETUP_TITLE "Ustawienia Mavlink" #define TR_MAVLINK_BAUD_LABEL "Baudrate" #define TR_MAVLINK_INFOS "INFO" #define TR_MAVLINK_MODE "TRYB" #define TR_MAVLINK_CUR_MODE "Aktualy Tryb" - #define TR_MAVLINK_ARMED "Armed" + #define TR_MAVLINK_ARMED "Aktywny" #define TR_MAVLINK_BAT_MENU_TITLE "BAT RSSI" #define TR_MAVLINK_BATTERY_LABEL "Status bateri" #define TR_MAVLINK_RC_RSSI_LABEL "RC RSSI" @@ -717,7 +734,7 @@ // Taranis column headers #define TR_PHASES_HEADERS { " Nazwa ", " Przełącznik ", " Trymery ", " Pojawianie się ", " Zanikanie " } #define TR_LIMITS_HEADERS { " Nazwa ", " Subtrim ", " Min ", " Max ", " Kierunek ", " Krzywa ", " Środek PPM ", " Tryb subtrim " } -#define TR_CSW_HEADERS { " Funkcja ", " Param. 1 ", " Param 2 ", " AND Przełącznik ", " Czas trwania ", " Opóźnienie " } +#define TR_CSW_HEADERS { " Funkcja ", " Param. 1 ", " Param 2 ", " Param 2 ", " AND Przełącznik ", " Czas trwania ", " Opóźnienie " } //Taranis About screen #define TR_ABOUTUS TR(" O ", " O") @@ -770,7 +787,7 @@ #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' #define TR_CHR_HOUR 'h' -#define TR_CHR_INPUT 'I' // Values between A-I will work +#define TR_CHR_INPUT 'I' // Values between A-I will work #define TR_BEEP_VOLUME "Głośność pikania" #define TR_WAV_VOLUME "Głośność wav" diff --git a/radio/src/translations/pt.h.txt b/radio/src/translations/pt.h.txt index 6c7acb1e1..41ac94296 100644 --- a/radio/src/translations/pt.h.txt +++ b/radio/src/translations/pt.h.txt @@ -35,7 +35,7 @@ */ /* Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) - * \036 -newline (ARM boards only) + * \036 -newline * \001 to \035 -extended spacing (value * FW/2) * \0 -ends actual string */ @@ -150,8 +150,25 @@ #define LEN_VMIXTRIMS "\003" #define TR_VMIXTRIMS "OFF""ON\0""Lem""Pfd""Mot""Ail" +#if defined(PCBTARANIS) + #define TR_CSWTIMER "Timer" + #define TR_CSWSTICKY "Stcky" + #define TR_CSWRANGE "Range" + #define TR_CSWSTAY "Edge\0" +#else + #define TR_CSWTIMER "Tim\0 " + #define TR_CSWSTICKY "Glue\0" + #if defined(CPUARM) + #define TR_CSWRANGE "Rnge\0" + #define TR_CSWSTAY "Edge\0" + #else + #define TR_CSWRANGE + #define TR_CSWSTAY + #endif +#endif + #define LEN_VCSWFUNC "\005" -#define TR_VCSWFUNC "---\0 ""a{x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb ""REc ""REd " -#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS <= 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb " + #define TR_ROTARY_ENCODERS "REa\0" + #define TR_ROTENC_SWITCHES "REa" +#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) + #define TR_ROTARY_ENCODERS "REa\0""REb\0" + #define TR_ROTENC_SWITCHES "REa""REb" #else - #define TR_ROTARY_ENCODERS_VSRCRAW + #define TR_ROTARY_ENCODERS + #define TR_ROTENC_SWITCHES +#endif + +#if defined(PCBTARANIS) + #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26" + #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_CUSTOMSW +#elif defined(CPUARM) + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW +#else + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW #endif #if defined(HELI) @@ -356,7 +375,7 @@ #define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" #endif -#define TR_VSRCRAW "---\0""Lem\0""Pfd\0""Mot\0""Ail\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS_VSRCRAW "MAX\0" TR_CYC_VSRCRAW "TrmL" "TrmP" "TrmM" "TrmA" TR_SW_VSRCRAW +#define TR_VSRCRAW "---\0""Lem\0""Pfd\0""Mot\0""Ail\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW "TrmL" "TrmP" "TrmM" "TrmA" TR_SW_VSRCRAW #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "OFF""ABS""MTs""MT%""MTt" @@ -495,17 +514,15 @@ #define TR_CAL "Cal" #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART CENTER"\006" TR_ENTER " INICIAR" -#define TR_SETMIDPOINT CENTER"\005CENTRAR STICK/POT" -#define TR_MOVESTICKSPOTS CENTER"\005MOVER STICKS/POTs" +#define TR_MENUTOSTART CENTER"\011" TR_ENTER " INICIAR" +#define TR_SETMIDPOINT TR(CENTER"\005CENTRAR STICK/POT",CENTER"\006CENTRAR STICK/POT") +#define TR_MOVESTICKSPOTS TR(CENTER"\005MOVER STICKS/POTs",CENTER"\006MOVER STICKS/POTs") #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_ACCEL "Acc:" #define TR_NODATA CENTER"SEM DADOS" -#define TR_TM1TM2 "TM1\037\146TM2" -#define TR_THRTHP "THR\037\146TH%" -#define TR_TOT "TOT" +#define TR_TOTTM1TM2THRTHP "\037\146TOT\036TM1\037\146TM2\036THR\037\146TH%" #define TR_TMR1LATMAXUS "Tmr1Lat max\037\124us" #define STR_US (STR_TMR1LATMAXUS+13) #define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" @@ -717,7 +734,7 @@ // Taranis column headers #define TR_PHASES_HEADERS { " Name ", " Switch ", " Trims ", " Fade In ", " Fade Out " } #define TR_LIMITS_HEADERS { " Name ", " Offset ", " Min ", " Max ", " Direction ", " Curve ", " PPM Center ", " Symmetrical " } -#define TR_CSW_HEADERS { " Function ", " V1 ", " V2 ", " AND Switch ", " Duration ", " Delay " } +#define TR_CSW_HEADERS { " Function ", " V1 ", " V2 ", " V2 ", " AND Switch ", " Duration ", " Delay " } //Taranis About screen #define TR_ABOUTUS "ABOUT US" @@ -770,7 +787,7 @@ #define TR_CHR_LONG 'l' #define TR_CHR_TOGGLE 't' #define TR_CHR_HOUR 'h' -#define TR_CHR_INPUT 'I' // Values between A-I will work +#define TR_CHR_INPUT 'I' // Values between A-I will work #define TR_BEEP_VOLUME "Beep Volume" #define TR_WAV_VOLUME "Wav Volume" diff --git a/radio/src/translations/se.h.txt b/radio/src/translations/se.h.txt index d32ebb1f6..5e117d67c 100644 --- a/radio/src/translations/se.h.txt +++ b/radio/src/translations/se.h.txt @@ -35,7 +35,7 @@ */ /* Formatting octal codes available in TR_ strings: * \037\x -sets LCD x-coord (x value in octal) - * \036 -newline (ARM boards only) + * \036 -newline * \001 to \035 -extended spacing (value * FW/2) * \0 -ends actual string */ @@ -150,8 +150,25 @@ #define LEN_VMIXTRIMS "\003" #define TR_VMIXTRIMS "Av\0""På\0""Rod""Hjd""Gas""Ske" +#if defined(PCBTARANIS) + #define TR_CSWTIMER "Timer" + #define TR_CSWSTICKY "Stcky" + #define TR_CSWRANGE "Range" + #define TR_CSWSTAY "Edge\0" +#else + #define TR_CSWTIMER "Tim\0 " + #define TR_CSWSTICKY "Glue\0" + #if defined(CPUARM) + #define TR_CSWRANGE "Rnge\0" + #define TR_CSWSTAY "Edge\0" + #else + #define TR_CSWRANGE + #define TR_CSWSTAY + #endif +#endif + #define LEN_VCSWFUNC "\005" -#define TR_VCSWFUNC "---\0 ""a{x\0 ""a>x\0 ""ax""|a|b\0 ""ax\0 ""ax""|a|b\0 ""a 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb ""REc ""REd " -#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS <= 2 - #define TR_ROTARY_ENCODERS_VSRCRAW "REa ""REb " + #define TR_ROTARY_ENCODERS "REa\0" + #define TR_ROTENC_SWITCHES "REa" +#elif defined(PCBGRUVIN9X) || defined(PCBMEGA2560) + #define TR_ROTARY_ENCODERS "REa\0""REb\0" + #define TR_ROTENC_SWITCHES "REa""REb" #else - #define TR_ROTARY_ENCODERS_VSRCRAW + #define TR_ROTARY_ENCODERS + #define TR_ROTENC_SWITCHES +#endif + +#if defined(PCBTARANIS) + #define TR_6POS_POTS "P11""P12""P13""P14""P15""P16""P21""P22""P23""P24""P25""P26" + #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_CUSTOMSW +#elif defined(CPUARM) + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW +#else + #define TR_VSWITCHES TR_9X_3POS_SWITCHES "THR""RUD""ELE""AIL""GEA""TRN" TR_TRIMS_SWITCHES TR_ROTENC_SWITCHES TR_CUSTOMSW #endif #if defined(HELI) @@ -356,13 +375,13 @@ #define TR_CYC_VSRCRAW "[C1]""[C2]""[C3]" #endif -#define TR_VSRCRAW "---\0""Rod\0""Höj\0""Gas\0""Ske\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS_VSRCRAW "MAX " TR_CYC_VSRCRAW "TrmR" "TrmH" "TrmG" "TrmS" TR_SW_VSRCRAW +#define TR_VSRCRAW "---\0""Rod\0""Höj\0""Gas\0""Ske\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODER "MAX " TR_CYC_VSRCRAW "TrmR" "TrmH" "TrmG" "TrmS" TR_SW_VSRCRAW #define LEN_VTMRMODES "\003" #define TR_VTMRMODES "Av\0""ABS""GAs""GA%""GAt" #define LEN_VTRAINERMODES "\006" -#define TR_VTRAINERMODES "Master""Slav\0." +#define TR_VTRAINERMODES "Lärare""Elev\0." #define LEN_VFAILSAFE "\011" #define TR_VFAILSAFE "Håll\0 ""Special\0 ""Pulsfritt" @@ -390,7 +409,7 @@ #define TR_POPUPS TR_ENTER"\010[EXIT]" #define OFS_EXIT sizeof(TR_ENTER) -#define TR_MENUWHENDONE CENTER "\006" TR_ENTER " Avslutar " +#define TR_MENUWHENDONE CENTER "\011" TR_ENTER " Avslutar " #define TR_FREE "kvar" #define TR_DELETEMODEL "Radera Modell" #define TR_COPYINGMODEL "Kopierar Modell " @@ -489,23 +508,21 @@ #define TR_POTWARNING TR("Pot Warn.","Pot Warning") #define TR_TIMEZONE TR("Tidszon","GPS Tidszon") #define TR_RXCHANNELORD "Kanaler i RX" -#define TR_SLAVE "Slav" +#define TR_SLAVE "Elev" #define TR_MODESRC " Läge\004% Källa" #define TR_MULTIPLIER "Styrka" #define TR_CAL "Kalib." #define TR_VTRIM "Trim- +" #define TR_BG "BG:" -#define TR_MENUTOSTART CENTER "\006" TR_ENTER " Startar " -#define TR_SETMIDPOINT CENTER "\010Centrera Allt" -#define TR_MOVESTICKSPOTS CENTER "\004Rör Rattar/Spakar" +#define TR_MENUTOSTART CENTER "\011" TR_ENTER " Startar " +#define TR_SETMIDPOINT TR(CENTER "\012Centrera Allt",CENTER "\013Centrera Allt") +#define TR_MOVESTICKSPOTS TR(CENTER "\005Rör Rattar/Spakar",CENTER "\006Rör Rattar/Spakar") #define TR_RXBATT "Rx Batt:" #define TR_TXnRX "Tx:\0Rx:" #define OFS_RX 4 #define TR_ACCEL "Acc:" #define TR_NODATA CENTER "NO DATA" -#define TR_TM1TM2 "TM1\037\146TM2" -#define TR_THRTHP "THR\037\146TH%" -#define TR_TOT "TOT" +#define TR_TOTTM1TM2THRTHP "\037\146TOT\036TM1\037\146TM2\036THR\037\146TH%" #define TR_TMR1LATMAXUS "Tmr1Lat max\037\124us" #define STR_US (STR_TMR1LATMAXUS+13) #define TR_TMR1LATMINUS "Tmr1Lat min\037\124us" @@ -549,7 +566,7 @@ #define TR_MENUHELISETUP "Helikopter" #if defined(PCBTARANIS) - #define TR_MENUINPUTS "Filter" + #define TR_MENUINPUTS TR("Filter","Filtrerad Insignal") #define TR_MENULIMITS "Gränser" #elif defined(PPM_CENTER_ADJUSTABLE) || defined(PPM_LIMITS_SYMETRICAL) // The right menu titles for the gurus ... #define TR_MENUINPUTS "Spakar" @@ -717,7 +734,7 @@ // Taranis column headers #define TR_PHASES_HEADERS { " Namn ", " Brytare ", " Trimmar ", " Tona Upp ", " Tona Ned " } #define TR_LIMITS_HEADERS { " Namn ", " Offset ", " Min ", " Max ", " Riktning ", " PPM-centrum ", " Symmetriskt " } -#define TR_CSW_HEADERS { " Funktion ", " V1 ", " V2 ", " AND Brytare ", " Tidslängd ", " Fördröj " } +#define TR_CSW_HEADERS { " Funktion ", " V1 ", " V2 ", " V2 ", " AND Brytare ", " Tidslängd ", " Fördröj " } // About screen #define TR_ABOUTUS "Om Oss"

"+tr("Logical Switches")+"

"); - for (int i=0; igetCapability(CustomSwitches); i++) { - QString sw1 = getCustomSwitchStr(&g_model1->customSw[i], *g_model1); - QString sw2 = getCustomSwitchStr(&g_model2->customSw[i], *g_model2); + for (int i=0; igetCapability(LogicalSwitches); i++) { + QString sw1 = g_model1->customSw[i].toString(*g_model1); + QString sw2 = g_model2->customSw[i].toString(*g_model2); if (!(sw1.isEmpty() && sw2.isEmpty())) { str.append(""); color=getColor1(sw1,sw2); @@ -1096,8 +1095,8 @@ void compareDialog::printFSwitches() str.append(""); if (g_model1->funcSw[i].swtch.type) { str.append(doTC(g_model1->funcSw[i].swtch.toString(),color1)); - str.append(doTC(getFuncName(g_model1->funcSw[i].func),color1)); - str.append(doTC(FuncParam(g_model1->funcSw[i].func,g_model1->funcSw[i].param,g_model1->funcSw[i].paramarm, g_model1->funcSw[i].adjustMode),color1)); + str.append(doTC(g_model1->funcSw[i].funcToString(),color1)); + str.append(doTC(g_model1->funcSw[i].paramToString(),color1)); int index=g_model1->funcSw[i].func; if (index==FuncPlaySound || index==FuncPlayHaptic || index==FuncPlayValue || index==FuncPlayPrompt || index==FuncPlayBoth || index==FuncBackgroundMusic) { str.append(doTC(QString("%1").arg(g_model1->funcSw[i].repeatParam),color1)); @@ -1115,8 +1114,8 @@ void compareDialog::printFSwitches() str.append(doTC(tr("CF")+QString("%1").arg(i+1),"",true)); if (g_model2->funcSw[i].swtch.type) { str.append(doTC(g_model2->funcSw[i].swtch.toString(),color2)); - str.append(doTC(getFuncName(g_model2->funcSw[i].func),color2)); - str.append(doTC(FuncParam(g_model2->funcSw[i].func,g_model2->funcSw[i].param,g_model2->funcSw[i].paramarm, g_model2->funcSw[i].adjustMode),color2)); + str.append(doTC(g_model2->funcSw[i].funcToString(),color2)); + str.append(doTC(g_model2->funcSw[i].paramToString(),color2)); int index=g_model2->funcSw[i].func; if (index==FuncPlaySound || index==FuncPlayHaptic || index==FuncPlayValue || index==FuncPlayPrompt || index==FuncPlayBoth || index==FuncBackgroundMusic) { str.append(doTC(QString("%1").arg(g_model2->funcSw[i].repeatParam),color2)); @@ -1142,55 +1141,6 @@ void compareDialog::printFSwitches() te->append(str); } -void compareDialog::printSafetySwitches() -{ - QString color1; - QString color2; - int sc=0; - QString str = "
"; - str.append(""); - str.append("

"+tr("Safety Switches")+"

"); - str.append(""); - str.append(""); - str.append(""); - str.append(""); - str.append(""); - str.append(""); - for(int i=0; igetCapability(Outputs); i++) - { - if ((g_model1->safetySw[i].swtch.type!=SWITCH_TYPE_NONE)||(g_model2->safetySw[i].swtch.type!=SWITCH_TYPE_NONE)) { - if ((g_model1->safetySw[i].swtch!=g_model2->safetySw[i].swtch)||(g_model1->safetySw[i].val!=g_model2->safetySw[i].val)) { - color1="green"; - color2="red"; - } else { - color1="grey"; - color2="grey"; - } - str.append(""); - if (g_model1->safetySw[i].swtch.type) { - str.append(doTC(g_model1->safetySw[i].swtch.toString(),color1)); - str.append(doTC(QString::number(g_model1->safetySw[i].val),color1)); - } - else { - str.append(""); - } - str.append(doTC(tr("CH")+QString("%1").arg(i+1),"",true)); - if (g_model2->safetySw[i].swtch.type) { - str.append(doTC(g_model2->safetySw[i].swtch.toString(),color2)); - str.append(doTC(QString::number(g_model2->safetySw[i].val),color2)); - } else { - str.append(""); - } - str.append(""); - sc++; - } -} - str.append("
"+tr("Switch")+""+tr("Value")+" "+tr("Switch")+""+tr("Value")+"
    
"); - str.append("
"); - if (sc!=0) - te->append(str); -} - void compareDialog::printFrSky() { QString color; diff --git a/companion/src/customizesplashdialog.cpp b/companion/src/customizesplashdialog.cpp index 30762142f..070fe3dc0 100644 --- a/companion/src/customizesplashdialog.cpp +++ b/companion/src/customizesplashdialog.cpp @@ -7,14 +7,39 @@ #include "splashlibrary.h" #include "flashinterface.h" +Side::Side(){ + imageLabel = 0; + fileNameEdit = 0; + saveButton = 0; + source=new Source; + *source = UNDEFINED; +} + +void Side::copyImage( Side side ){ + if ((*source!=UNDEFINED) && (*side.source!=UNDEFINED)) + imageLabel->setPixmap(*side.imageLabel->pixmap()); +} + customizeSplashDialog::customizeSplashDialog(QWidget *parent) : QDialog(parent), ui(new Ui::customizeSplashDialog) { ui->setupUi(this); - ui->libraryButton->setIcon(CompanionIcon("library.png")); - ui->HowToLabel->clear(); - ui->HowToLabel->append("
" + tr("Select an original firmware file") + "
"); + ui->leftLibraryButton->setIcon(CompanionIcon("library.png")); + ui->rightLibraryButton->setIcon(CompanionIcon("library.png")); + + left.imageLabel = ui->leftImageLabel; + right.imageLabel = ui->rightImageLabel; + left.fileNameEdit = ui->leftFileNameEdit; + right.fileNameEdit = ui->rightFileNameEdit; + left.saveButton = ui->leftSaveButton; + right.saveButton = ui->rightSaveButton; + left.libraryButton = ui->leftLibraryButton; + right.libraryButton = ui->rightLibraryButton; + left.invertButton = ui->leftInvertButton; + right.invertButton = ui->rightInvertButton; + + resize(0,0); } customizeSplashDialog::~customizeSplashDialog() @@ -22,92 +47,101 @@ customizeSplashDialog::~customizeSplashDialog() delete ui; } -void customizeSplashDialog::on_FlashLoadButton_clicked() +void customizeSplashDialog::on_copyRightToLeftButton_clicked() { + left.copyImage(right); +} +void customizeSplashDialog::on_copyLeftToRightButton_clicked() { +right.copyImage(left); +} + + +void customizeSplashDialog::on_leftLoadFwButton_clicked() {loadFirmware(left);} +void customizeSplashDialog::on_rightLoadFwButton_clicked() {loadFirmware(right);} +void customizeSplashDialog::loadFirmware(Side side) { QSettings settings; QString fileName = QFileDialog::getOpenFileName(this, tr("Open"), settings.value("lastFlashDir").toString(), FLASH_FILES_FILTER); if (!fileName.isEmpty()) { - ui->ImageLoadButton->setDisabled(true); - ui->libraryButton->setDisabled(true); - ui->SaveFlashButton->setDisabled(true); - ui->SaveImageButton->setDisabled(true); - ui->ImageFileName->clear(); - ui->imageLabel->clear(); - ui->HowToLabel->clear(); - ui->HowToLabel->setStyleSheet("background:rgb(255, 255, 0)"); QFile file(fileName); - if (!file.exists()) { - ui->FWFileName->clear(); - ui->HowToLabel->append("
" + tr("Select an original firmware file") + "
"); + if (fileName.isEmpty() || !file.exists()) return; - } - if (fileName.isEmpty()) { - ui->FWFileName->clear(); - ui->HowToLabel->append("
" + tr("Select an original firmware file") + "
"); - return; - } - - ui->FWFileName->setText(fileName); + FlashInterface flash(fileName); - if (flash.hasSplash()) { - ui->HowToLabel->append("
" + tr("Select an image to customize your splash
or save actual firmware splash") + "
"); - ui->ImageLoadButton->setEnabled(true); - ui->libraryButton->setEnabled(true); - ui->SaveImageButton->setEnabled(true); - ui->imageLabel->setPixmap(QPixmap::fromImage(flash.getSplash())); - ui->imageLabel->setFixedSize(flash.getSplashWidth()*2,flash.getSplashHeight()*2); - } else { + if (!flash.hasSplash()) { QMessageBox::information(this, tr("Error"), tr("Could not find bitmap to replace in file")); return; } + + side.saveButton->setEnabled(true); + side.imageLabel->setPixmap(QPixmap::fromImage(flash.getSplash())); + side.imageLabel->setFixedSize(flash.getSplashWidth()*2,flash.getSplashHeight()*2); + side.fileNameEdit->setText(fileName); settings.setValue("lastFlashDir", QFileInfo(fileName).dir().absolutePath()); + *side.source=FW; + side.saveButton->setEnabled(true); + side.libraryButton->setEnabled(true); + side.invertButton->setEnabled(true); } } -void customizeSplashDialog::on_ImageLoadButton_clicked() { +void customizeSplashDialog::on_leftLoadPictButton_clicked() {loadPicture(left);} +void customizeSplashDialog::on_rightLoadPictButton_clicked() {loadPicture(right);} +void customizeSplashDialog::loadPicture(Side side) +{ QString supportedImageFormats; for (int formatIndex = 0; formatIndex < QImageReader::supportedImageFormats().count(); formatIndex++) { supportedImageFormats += QLatin1String(" *.") + QImageReader::supportedImageFormats()[formatIndex]; } - QSettings settings; QString fileName = QFileDialog::getOpenFileName(this, tr("Open Image to load"), settings.value("lastImagesDir").toString(), tr("Images (%1)").arg(supportedImageFormats)); - if (!fileName.isEmpty()) { - settings.setValue("lastImagesDir", QFileInfo(fileName).dir().absolutePath()); - QImage image(fileName); - if (image.isNull()) { - QMessageBox::critical(this, tr("Error"), tr("Cannot load %1.").arg(fileName)); - return; - } - ui->HowToLabel->clear(); - ui->ImageFileName->setText(fileName); - if (ui->imageLabel->width()==424) { - image=image.convertToFormat(QImage::Format_RGB32); - QRgb col; - int gray; - int width = image.width(); - int height = image.height(); - for (int i = 0; i < width; ++i) - { - for (int j = 0; j < height; ++j) - { - col = image.pixel(i, j); - gray = qGray(col); - image.setPixel(i, j, qRgb(gray, gray, gray)); - } - } - ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width()/2, ui->imageLabel->height()/2))); - } else { - ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width()/2, ui->imageLabel->height()/2).convertToFormat(QImage::Format_Mono))); - } - ui->SaveFlashButton->setEnabled(true); - ui->HowToLabel->append("
" + tr("Save your custimized firmware") + "
"); + if (fileName.isEmpty()){ + return; } + QImage image(fileName); + if (image.isNull()) { + QMessageBox::critical(this, tr("Error"), tr("Cannot load %1.").arg(fileName)); + return; + } + if (side.imageLabel->width()==424) { + image=image.convertToFormat(QImage::Format_RGB32); + QRgb col; + int gray; + int width = image.width(); + int height = image.height(); + for (int i = 0; i < width; ++i) + { + for (int j = 0; j < height; ++j) + { + col = image.pixel(i, j); + gray = qGray(col); + image.setPixel(i, j, qRgb(gray, gray, gray)); + } + } + side.imageLabel->setPixmap(QPixmap::fromImage(image.scaled(side.imageLabel->width()/2, side.imageLabel->height()/2))); + } else { + side.imageLabel->setPixmap(QPixmap::fromImage(image.scaled(side.imageLabel->width()/2, side.imageLabel->height()/2).convertToFormat(QImage::Format_Mono))); + } + + settings.setValue("lastImagesDir", QFileInfo(fileName).dir().absolutePath()); + side.fileNameEdit->setText(fileName); + *side.source=PICT; + side.saveButton->setEnabled(true); + side.libraryButton->setEnabled(true); + side.invertButton->setEnabled(true); } -void customizeSplashDialog::on_libraryButton_clicked() { +void customizeSplashDialog::on_leftLoadProfileButton_clicked() {loadProfile(left);} +void customizeSplashDialog::on_rightLoadProfileButton_clicked() {loadProfile(right);} +void customizeSplashDialog::loadProfile(Side side) +{ +} + +void customizeSplashDialog::on_leftLibraryButton_clicked(){libraryButton_clicked(left);} +void customizeSplashDialog::on_rightLibraryButton_clicked(){libraryButton_clicked(right);} +void customizeSplashDialog::libraryButton_clicked( Side side ) +{ QString fileName; splashLibrary *ld = new splashLibrary(this,&fileName); @@ -118,9 +152,7 @@ void customizeSplashDialog::on_libraryButton_clicked() { QMessageBox::critical(this, tr("Error"), tr("Cannot load %1.").arg(fileName)); return; } - ui->HowToLabel->clear(); - ui->ImageFileName->setText(fileName); - if (ui->imageLabel->width()==424) { + if (side.imageLabel->width()==424) { image=image.convertToFormat(QImage::Format_RGB32); QRgb col; int gray; @@ -135,57 +167,52 @@ void customizeSplashDialog::on_libraryButton_clicked() { image.setPixel(i, j, qRgb(gray, gray, gray)); } } - ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width()/2, ui->imageLabel->height()/2))); + side.imageLabel->setPixmap(QPixmap::fromImage(image.scaled(side.imageLabel->width()/2, side.imageLabel->height()/2))); } else { - ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width()/2, ui->imageLabel->height()/2).convertToFormat(QImage::Format_Mono))); + side.imageLabel->setPixmap(QPixmap::fromImage(image.scaled(side.imageLabel->width()/2, side.imageLabel->height()/2).convertToFormat(QImage::Format_Mono))); } - ui->SaveFlashButton->setEnabled(true); - ui->HowToLabel->append("
" + tr("Save your custimized firmware") + "
"); } } -void customizeSplashDialog::on_SaveFlashButton_clicked() +void customizeSplashDialog::on_leftSaveButton_clicked(){saveButton_clicked(left);} +void customizeSplashDialog::on_rightSaveButton_clicked(){saveButton_clicked(right);} +void customizeSplashDialog::saveButton_clicked(Side side) { - QString fileName; QSettings settings; - ui->HowToLabel->clear(); - fileName = QFileDialog::getSaveFileName(this, tr("Write to file"), settings.value("lastFlashDir").toString(), FLASH_FILES_FILTER, 0, QFileDialog::DontConfirmOverwrite); - if (fileName.isEmpty()) { - return; + QString fileName = side.fileNameEdit->text(); + + if (*side.source == FW) + { + FlashInterface flash(fileName); + if (!flash.hasSplash()) { + QMessageBox::critical(this, tr("Error"), tr("Could not store image in firmware file %1").arg(fileName)); + return; + } + QImage image = side.imageLabel->pixmap()->toImage().scaled(flash.getSplashWidth(), flash.getSplashHeight()); + if (flash.setSplash(image) && (flash.saveFlash(fileName) > 0)) + settings.setValue("lastFlashDir", QFileInfo(fileName).dir().absolutePath()); + else + QMessageBox::critical(this, tr("Error"), tr("Could not store image in firmware file %1").arg(fileName)); } - FlashInterface flash(ui->FWFileName->text()); - if (!flash.hasSplash()) { - QMessageBox::critical(this, tr("Error"), tr("Error reading file %1").arg(fileName)); - return; - } - settings.setValue("lastFlashDir", QFileInfo(fileName).dir().absolutePath()); - QImage image = ui->imageLabel->pixmap()->toImage().scaled(flash.getSplashWidth(), flash.getSplashHeight()); - flash.setSplash(image); - if (flash.saveFlash(fileName) > 0) { - ui->HowToLabel->setStyleSheet("background:rgb(0,255.0);"); - ui->HowToLabel->append("
" + tr("Firmware correctly saved.") + "
"); - } else { - ui->HowToLabel->setStyleSheet("background:rgb(255.0.0);"); - ui->HowToLabel->append("
" + tr("Firmware not saved.") + "
"); + else if (*side.source == PICT) + { + if (!fileName.isEmpty()) { + QImage image = side.imageLabel->pixmap()->toImage().scaled(side.imageLabel->width()/2, side.imageLabel->height()/2).convertToFormat(QImage::Format_Indexed8); + if (image.save(fileName)) + settings.setValue("lastImagesDir", QFileInfo(fileName).dir().absolutePath()); + else + QMessageBox::critical(this, tr("Error"), tr("The image file %1 could not be stored").arg(fileName)); + } } } -void customizeSplashDialog::on_InvertColorButton_clicked() +void customizeSplashDialog::on_leftInvertButton_clicked(){invertButton_clicked(left);} +void customizeSplashDialog::on_rightInvertButton_clicked(){invertButton_clicked(right);} +void customizeSplashDialog::invertButton_clicked(Side side) { - QImage image = ui->imageLabel->pixmap()->toImage(); + QImage image = side.imageLabel->pixmap()->toImage(); image.invertPixels(); - ui->imageLabel->setPixmap(QPixmap::fromImage(image)); + side.imageLabel->setPixmap(QPixmap::fromImage(image)); } -void customizeSplashDialog::on_SaveImageButton_clicked() -{ - QString fileName; - QSettings settings; - fileName = QFileDialog::getSaveFileName(this, tr("Write to file"), settings.value("lastImagesDir").toString(), tr("PNG images (*.png);;"), 0, QFileDialog::DontConfirmOverwrite); - if (!fileName.isEmpty()) { - settings.setValue("lastImagesDir", QFileInfo(fileName).dir().absolutePath()); - QImage image = ui->imageLabel->pixmap()->toImage().scaled(ui->imageLabel->width()/2, ui->imageLabel->height()/2).convertToFormat(QImage::Format_Indexed8); - image.save(fileName, "PNG"); - } -} diff --git a/companion/src/customizesplashdialog.h b/companion/src/customizesplashdialog.h index f5a7acd6d..8ae954d1c 100644 --- a/companion/src/customizesplashdialog.h +++ b/companion/src/customizesplashdialog.h @@ -10,24 +10,61 @@ namespace Ui class customizeSplashDialog; } +enum Source {FW, PICT, PROFILE, UNDEFINED}; + +class Side +{ +public: + Side(); + void copyImage( Side ); + + QLabel *imageLabel; + QLineEdit *fileNameEdit; + QPushButton *saveButton; + QPushButton *invertButton; + QToolButton *libraryButton; + + Source *source; +}; + class customizeSplashDialog : public QDialog { Q_OBJECT + Side left; + Side right; public: explicit customizeSplashDialog(QWidget *parent = 0); ~customizeSplashDialog(); private slots: - void on_FlashLoadButton_clicked(); - void on_ImageLoadButton_clicked(); - void on_libraryButton_clicked(); - void on_SaveFlashButton_clicked(); - void on_InvertColorButton_clicked(); - void on_SaveImageButton_clicked(); + void on_leftLoadFwButton_clicked(); + void on_leftLoadPictButton_clicked(); + void on_leftLoadProfileButton_clicked(); + void on_leftLibraryButton_clicked(); + void on_leftSaveButton_clicked(); + void on_leftInvertButton_clicked(); + + void on_rightLoadFwButton_clicked(); + void on_rightLoadPictButton_clicked(); + void on_rightLoadProfileButton_clicked(); + void on_rightLibraryButton_clicked(); + void on_rightSaveButton_clicked(); + void on_rightInvertButton_clicked(); + + void on_copyRightToLeftButton_clicked(); + void on_copyLeftToRightButton_clicked(); private: + void loadFirmware( Side ); + void loadPicture( Side ); + void loadProfile( Side ); + void libraryButton_clicked( Side ); + void saveButton_clicked( Side ); + void invertButton_clicked( Side ); + Ui::customizeSplashDialog *ui; + enum sideEnum { LEFT, RIGHT }; }; #endif // CUSTOMIZESPLASHDIALOG_H diff --git a/companion/src/customizesplashdialog.ui b/companion/src/customizesplashdialog.ui index 15a803656..b98d87907 100644 --- a/companion/src/customizesplashdialog.ui +++ b/companion/src/customizesplashdialog.ui @@ -2,88 +2,508 @@ customizeSplashDialog + + true + 0 0 - 366 - 303 + 1086 + 285 - + 0 0 - Customize Splash + Transmitter Splash Screen Editor :/icon.png:/icon.png - - - + + + 6 + + + 3 + + + 0 + + + 3 + + + 3 + + + + + 0 + - + - Qt::Horizontal + Qt::Vertical - - - 40 - 20 - - - + - + - - - - 0 - 0 - - - - - 256 - 128 - - - - - 424 - 128 - - - - QFrame::Panel - - - QFrame::Raised - - - - - - :/images/customize.png - - - true + + + Qt::Horizontal - + + + 6 + - + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + true + + + + 424 + 0 + + + + + 426 + 16777215 + + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Horizontal + + + + + + + 6 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 424 + 128 + + + + + 424 + 128 + + + + QFrame::Panel + + + QFrame::Plain + - Save Image + + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Horizontal + + + + + + + + + false + + + Invert + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + Open Splash Library + + + ... + + + + 24 + 24 + + + + + + + + + + Qt::Horizontal + + + + + + + + + Load FW + + + + + + + Load Pict + + + + + + + false + + + Load Profile + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + Save + + + + + + + + + Qt::Horizontal + + + + + + + + + Qt::Vertical + + + + + + + + + ... + + + Qt::LeftArrow + + + + + + + ... + + + Qt::RightArrow + + + + + + + + + Qt::Vertical + + + + + + + + + Qt::Horizontal + + + + + + + 6 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + true + + + + 426 + 0 + + + + + 424 + 16777215 + + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Horizontal + + + + + + + 6 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + + 424 + 128 + + + + + 424 + 128 + + + + QFrame::Panel + + + QFrame::Plain + + + + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Horizontal + + + + + + + + + false + + + Invert @@ -101,164 +521,120 @@ - + + + false + + + Open Splash Library + - Invert Color + ... + + + + 24 + 24 + + + + + Qt::Horizontal + + + + + + + + + true + + + Load FW + + + + + + + Load Pict + + + + + + + false + + + Load Profile + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + Save + + + + + + + + + Qt::Horizontal + + + - + - Qt::Horizontal - - - - 50 - 20 - - - - - - - - - - - 0 - 0 - - - - - 16777215 - 40 - - - - background:rgb(255, 255, 0); - - - Qt::ScrollBarAlwaysOff - - - Qt::ScrollBarAlwaysOff - - - true - - - <!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:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> - - - true - - - - - - - - - true - - - true - - - - - - - Load Firmware - - - - - - - true - - - true - - - - - - - false - - - Load Image - - - - - - - Open Splash Library - - - ... - - - - 16 - 16 - - - - - - - - Qt::Horizontal - - - - 208 - 20 - - - - - - - - false - - - Save Firmware + Qt::Vertical - - - - Qt::Vertical - - - - 20 - 1 - - - - + + leftFileNameEdit + leftInvertButton + leftLoadPictButton + leftSaveButton + copyLeftToRightButton + copyRightToLeftButton + rightFileNameEdit + rightInvertButton + rightLoadFwButton + rightLoadPictButton + rightSaveButton + diff --git a/companion/src/eepromimportexport.h b/companion/src/eepromimportexport.h index ed5ab9ff5..91eda318c 100644 --- a/companion/src/eepromimportexport.h +++ b/companion/src/eepromimportexport.h @@ -93,6 +93,17 @@ class DataField { const char *name; }; +class ProxyField: public DataField { + public: + ProxyField(): + DataField("Proxy") + { + } + + virtual DataField * getField() = 0; + +}; + template class UnsignedField: public DataField { public: @@ -273,9 +284,10 @@ class SpareBitsField: public UnsignedField { template class CharField: public DataField { public: - CharField(char *field): + CharField(char *field, bool truncate=true): DataField("Char"), - field(field) + field(field), + truncate(truncate) { } @@ -283,7 +295,7 @@ class CharField: public DataField { { output.resize(N*8); int b = 0; - int len = strlen(field); + int len = truncate ? strlen(field) : N; for (int i=0; i=len ? 0 : field[i]); for (int j=0; j<8; j++, b++) { @@ -313,6 +325,7 @@ class CharField: public DataField { protected: char * field; + bool truncate; }; int8_t char2idx(char c); diff --git a/companion/src/eeprominterface.cpp b/companion/src/eeprominterface.cpp index 9b5126780..3864b9f41 100644 --- a/companion/src/eeprominterface.cpp +++ b/companion/src/eeprominterface.cpp @@ -268,62 +268,52 @@ QString RawSwitch::toString() QObject::tr("S21"), QObject::tr("S22"), QObject::tr("S23"), QObject::tr("S24"), QObject::tr("S25"), QObject::tr("S26") }; - switch(type) { - case SWITCH_TYPE_SWITCH: - if (IS_TARANIS(GetEepromInterface()->getBoard())) - return index > 0 ? CHECK_IN_ARRAY(switchesX9D, index-1) : QString("!") + CHECK_IN_ARRAY(switchesX9D, -index-1); - else - return index > 0 ? CHECK_IN_ARRAY(switches9X, index-1) : QString("!") + CHECK_IN_ARRAY(switches9X, -index-1); - case SWITCH_TYPE_VIRTUAL: - return index > 0 ? CHECK_IN_ARRAY(virtualSwitches, index-1) : QString("!") + CHECK_IN_ARRAY(virtualSwitches, -index-1); - case SWITCH_TYPE_MULTIPOS_POT: - return CHECK_IN_ARRAY(multiposPots, index); - case SWITCH_TYPE_ON: - return QObject::tr("ON"); - case SWITCH_TYPE_ONM: - if (index==0) { - return QObject::tr("ONE"); - } - else if (index==1) { - return QObject::tr("!ONE"); - } - break; - case SWITCH_TYPE_TRN: - if (index==0) { - if (IS_TARANIS(GetEepromInterface()->getBoard())) - return SwitchDn('H')+"s"; - else - return QObject::tr("TRNs"); - } else if (index==1) { - if (IS_TARANIS(GetEepromInterface()->getBoard())) - return SwitchDn('H')+"l"; - else - return QObject::tr("TRNl"); - } - break; - case SWITCH_TYPE_REA: - if (index==0) { - if (GetEepromInterface()->getBoard() == BOARD_SKY9X) - return QObject::tr("REAs"); - } else if (index==1) { - if (GetEepromInterface()->getBoard() == BOARD_SKY9X) - return QObject::tr("REAl"); - } - break; - case SWITCH_TYPE_OFF: - return QObject::tr("OFF"); - case SWITCH_TYPE_MOMENT_SWITCH: - if (IS_TARANIS(GetEepromInterface()->getBoard())) - return index > 0 ? CHECK_IN_ARRAY(switchesX9D, index-1)+QString("t") : QString("!")+CHECK_IN_ARRAY(switchesX9D, -index-1)+QString("t"); - else - return index > 0 ? CHECK_IN_ARRAY(switches9X, index-1)+QString("t") : QString("!")+CHECK_IN_ARRAY(switches9X, -index-1)+QString("t"); - case SWITCH_TYPE_MOMENT_VIRTUAL: - return index > 0 ? CHECK_IN_ARRAY(virtualSwitches, index-1)+QString("t") : QString("!")+CHECK_IN_ARRAY(virtualSwitches, -index-1)+QString("t"); - default: - break; - } + static const QString trimsSwitches[] = { + QObject::tr("RudTrim Left"), QObject::tr("RudTrim Right"), + QObject::tr("EleTrim Down"), QObject::tr("EleTrim Up"), + QObject::tr("ThrTrim Down"), QObject::tr("ThrTrim Up"), + QObject::tr("AilTrim Left"), QObject::tr("AilTrim Right") + }; - return QObject::tr("----"); + static const QString rotaryEncoders[] = { + QObject::tr("REa"), QObject::tr("REb") + }; + + static const QString timerModes[] = { + QObject::tr("OFF"), QObject::tr("ABS"), + QObject::tr("THs"), QObject::tr("TH%"), QObject::tr("THt") + }; + + if (index < 0) { + return QString("!") + RawSwitch(type, -index).toString(); + } + else { + switch(type) { + case SWITCH_TYPE_SWITCH: + if (IS_TARANIS(GetEepromInterface()->getBoard())) + return CHECK_IN_ARRAY(switchesX9D, index-1); + else + return CHECK_IN_ARRAY(switches9X, index-1); + case SWITCH_TYPE_VIRTUAL: + return CHECK_IN_ARRAY(virtualSwitches, index-1); + case SWITCH_TYPE_MULTIPOS_POT: + return CHECK_IN_ARRAY(multiposPots, index-1); + case SWITCH_TYPE_TRIM: + return CHECK_IN_ARRAY(trimsSwitches, index-1); + case SWITCH_TYPE_ROTARY_ENCODER: + return CHECK_IN_ARRAY(rotaryEncoders, index-1); + case SWITCH_TYPE_ON: + return QObject::tr("ON"); + case SWITCH_TYPE_OFF: + return QObject::tr("OFF"); + case SWITCH_TYPE_NONE: + return QObject::tr("----"); + case SWITCH_TYPE_TIMER_MODE: + return CHECK_IN_ARRAY(timerModes, index); + default: + return QObject::tr("???"); + } + } } QString CurveReference::toString() @@ -345,6 +335,392 @@ QString CurveReference::toString() } } +CSFunctionFamily LogicalSwitchData::getFunctionFamily() +{ + if (func == LS_FN_STAY) + return LS_FAMILY_STAY; + else if (func == LS_FN_TIMER) + return LS_FAMILY_TIMER; + else if (func == LS_FN_STICKY) + return LS_FAMILY_STICKY; + else if (func < LS_FN_AND || func > LS_FN_ELESS) + return LS_FAMILY_VOFS; + else if (func < LS_FN_EQUAL) + return LS_FAMILY_VBOOL; + else + return LS_FAMILY_VCOMP; +} + +QString LogicalSwitchData::funcToString() +{ + switch (func) { + case LS_FN_OFF: + return QObject::tr("---"); + case LS_FN_VPOS: + return QObject::tr("a>x"); + case LS_FN_VNEG: + return QObject::tr("ax"); + case LS_FN_ANEG: + return QObject::tr("|a|b"); + case LS_FN_LESS: + return QObject::tr("a=b"); + case LS_FN_ELESS: + return QObject::tr("a<=b"); + case LS_FN_DPOS: + return QObject::tr("d>=x"); + case LS_FN_DAPOS: + return QObject::tr("|d|>=x"); + case LS_FN_VEQUAL: + return QObject::tr("a~x"); + case LS_FN_TIMER: + return QObject::tr("Timer"); + case LS_FN_STICKY: + return QObject::tr("Sticky"); + case LS_FN_STAY: + return QObject::tr("Stay"); + default: + return QObject::tr("Unknown"); + } +} + +QString LogicalSwitchData::toString(const ModelData & model) +{ + QString result = ""; + + if (!func) + return result; + + if (andsw!=0) { + result +="( "; + } + switch (getFunctionFamily()) { + case LS_FAMILY_STAY: + result = QObject::tr("STAY(%1, [%2:%3])").arg(RawSwitch(val1).toString()).arg(ValToTim(val2)).arg(ValToTim(val2+val3)); + break; + case LS_FAMILY_STICKY: + result = QObject::tr("STICKY(%1, %2)").arg(RawSwitch(val1).toString()).arg(RawSwitch(val2).toString()); + break; + case LS_FAMILY_TIMER: + result = QObject::tr("TIMER(%1, %2)").arg(ValToTim(val1)).arg(ValToTim(val2)); + break; + case LS_FAMILY_VOFS: { + RawSource source = RawSource(val1, &model); + RawSourceRange range = source.getRange(); + if (val1) + result += source.toString(); + else + result += "0"; + result.remove(" "); + if (func == LS_FN_APOS || func == LS_FN_ANEG) + result = "|" + result + "|"; + else if (func == LS_FN_DAPOS) + result = "|d(" + result + ")|"; + else if (func == LS_FN_DPOS) result = "d(" + result + ")"; + if (func == LS_FN_APOS || func == LS_FN_VPOS || func == LS_FN_DAPOS || func == LS_FN_DPOS) + result += " > "; + else if (func == LS_FN_ANEG || func == LS_FN_VNEG) + result += " < "; + result += QString::number(range.step * (val2 /*TODO+ source.getRawOffset(model)*/) + range.offset); + break; + } + case LS_FAMILY_VBOOL: + result = RawSwitch(val1).toString(); + switch (func) { + case LS_FN_AND: + result += " AND "; + break; + case LS_FN_OR: + result += " OR "; + break; + case LS_FN_XOR: + result += " XOR "; + break; + default: + break; + } + result += RawSwitch(val2).toString(); + break; + + case LS_FAMILY_VCOMP: + if (val1) + result += RawSource(val1).toString(); + else + result += "0"; + switch (func) { + case LS_FN_EQUAL: + result += " = "; + break; + case LS_FN_NEQUAL: + result += " != "; + break; + case LS_FN_GREATER: + result += " > "; + break; + case LS_FN_LESS: + result += " < "; + break; + case LS_FN_EGREATER: + result += " >= "; + break; + case LS_FN_ELESS: + result += " <= "; + break; + default: + break; + } + if (val2) + result += RawSource(val2).toString(); + else + result += "0"; + break; + } + + if (andsw!=0) { + result +=" ) AND "; + result += RawSwitch(andsw).toString(); + } + + if (GetEepromInterface()->getCapability(LogicalSwitchesExt)) { + if (delay) + result += QObject::tr(" Delay %1 sec").arg(delay/2.0); + if (duration) + result += QObject::tr(" Duration %1 sec").arg(duration/2.0); + } + + return result; +} + +#if 0 +QStringList FuncSwData::toStringList() +{ + QStringList result; + QStringList qs; + + result << swtch.toString(); + result << funcToString(); + + if (func < FuncInstantTrim) { + result << QString("%1").arg(param); + } + else if (func==FuncPlaySound) { + qs <<"Beep 1" << "Beep 2" << "Beep 3" << "Warn1" << "Warn2" << "Cheep" << "Ratata" << "Tick" << "Siren" << "Ring" ; + qs << "SciFi" << "Robot" << "Chirp" << "Tada" << "Crickt" << "AlmClk" ; + if (param>=0 && param<(int)qs.count()) + result << qs.at(param); + else + result << QObject::tr("Inconsistent parameter"); + } + else if (func==FuncPlayHaptic) { + qs << "0" << "1" << "2" << "3"; + if (param>=0 && param<(int)qs.count()) + result << qs.at(param); + else + result << QObject::tr("Inconsistent parameter"); + } + else if (func==FuncReset) { + qs.append( QObject::tr("Timer1")); + qs.append( QObject::tr("Timer2")); + qs.append( QObject::tr("All")); + qs.append( QObject::tr("Telemetry")); + if (param>=0 && param<(int)qs.count()) + result << qs.at(param); + else + result << QObject::tr("Inconsistent parameter"); + } + else if ((func==FuncVolume)|| (func==FuncPlayValue)) { + RawSource item(param); + result << item.toString(); + } + else if ((func==FuncPlayPrompt) || (func==FuncPlayBoth)) { + if ( GetEepromInterface()->getCapability(VoicesAsNumbers)) { + result << QString("%1").arg(param); + } else { + result << paramarm; + } + } + else if ((func>FuncBackgroundMusicPause) && (funcfuncSw[i].repeatParam),"green")); + } else { + str.append(doTC( " ","green")); + } + if ((index<=FuncInstantTrim) || (index>FuncBackgroundMusicPause)) { + str.append(doTC((g_model->funcSw[i].enabled ? "ON" : "OFF"),"green")); + } else { + str.append(doTC( "---","green")); + } + + return result; +} +#endif + +QString FuncSwData::funcToString() +{ + if (func >= FuncSafetyCh1 && func <= FuncSafetyCh32) + return QObject::tr("Safety %1").arg(RawSource(SOURCE_TYPE_CH, func).toString()); + else if (func == FuncTrainer) + return QObject::tr("Trainer"); + else if (func == FuncTrainerRUD) + return QObject::tr("Trainer RUD"); + else if (func == FuncTrainerELE) + return QObject::tr("Trainer ELE"); + else if (func == FuncTrainerTHR) + return QObject::tr("Trainer THR"); + else if (func == FuncTrainerAIL) + return QObject::tr("Trainer AIL"); + else if (func == FuncInstantTrim) + return QObject::tr("Instant Trim"); + else if (func == FuncPlaySound) + return QObject::tr("Play Sound"); + else if (func == FuncPlayHaptic) + return QObject::tr("Play Haptic"); + else if (func == FuncReset) + return QObject::tr("Reset"); + else if (func >= FuncSetTimer1 && func <= FuncSetTimer2) + return QObject::tr("Set Timer %1").arg(func-FuncSetTimer1+1); + else if (func == FuncVario) + return QObject::tr("Vario"); + else if (func == FuncPlayPrompt) + return QObject::tr("Play Track"); + else if (func == FuncPlayBoth) + return QObject::tr("Play Both"); + else if (func == FuncPlayValue) + return QObject::tr("Play Value"); + else if (func == FuncLogs) + return QObject::tr("Start Logs"); + else if (func == FuncVolume) + return QObject::tr("Volume"); + else if (func == FuncBacklight) + return QObject::tr("Backlight"); + else if (func == FuncBackgroundMusic) + return QObject::tr("Background Music"); + else if (func == FuncBackgroundMusicPause) + return QObject::tr("Background Music Pause"); + else if (func >= FuncAdjustGV1 && func <= FuncAdjustGVLast) + return QObject::tr("Adjust GV%1").arg(func-FuncAdjustGV1+1); + else { + return QString("???"); // Highlight unknown functions with output of question marks.(BTW should not happen that we do not know what a function is) + } +} + +QString FuncSwData::paramToString() +{ + QStringList qs; + if (func <= FuncInstantTrim) { + return QString("%1").arg(param); + } + else if (func==FuncPlaySound) { + qs <<"Beep 1" << "Beep 2" << "Beep 3" << "Warn1" << "Warn2" << "Cheep" << "Ratata" << "Tick" << "Siren" << "Ring" ; + qs << "SciFi" << "Robot" << "Chirp" << "Tada" << "Crickt" << "AlmClk" ; + if (param>=0 && param<(int)qs.count()) + return qs.at(param); + else + return QObject::tr("Inconsistent parameter"); + } + else if (func==FuncPlayHaptic) { + qs << "0" << "1" << "2" << "3"; + if (param>=0 && param<(int)qs.count()) + return qs.at(param); + else + return QObject::tr("Inconsistent parameter"); + } + else if (func==FuncReset) { + qs.append( QObject::tr("Timer1")); + qs.append( QObject::tr("Timer2")); + qs.append( QObject::tr("All")); + qs.append( QObject::tr("Telemetry")); + if (param>=0 && param<(int)qs.count()) + return qs.at(param); + else + return QObject::tr("Inconsistent parameter"); + } + else if ((func==FuncVolume)|| (func==FuncPlayValue)) { + RawSource item(param); + return item.toString(); + } + else if ((func==FuncPlayPrompt) || (func==FuncPlayBoth)) { + if ( GetEepromInterface()->getCapability(VoicesAsNumbers)) { + return QString("%1").arg(param); + } else { + return paramarm; + } + } + else if ((func>FuncBackgroundMusicPause) && (funcgetBoard()) ? 5 : 10; + return QObject::tr("%1 sec").arg(step*repeatParam); + } +} + GeneralSettings::GeneralSettings() { memset(this, 0, sizeof(GeneralSettings)); @@ -497,7 +873,8 @@ void ModelData::clear() if (IS_TARANIS(board)) { moduleData[0].protocol=PXX_XJT_X16; moduleData[1].protocol=OFF; - } else { + } + else { moduleData[0].protocol=PPM; moduleData[1].protocol=OFF; } @@ -505,20 +882,17 @@ void ModelData::clear() phaseData[i].clear(); clearInputs(); clearMixes(); - for(int i=0; i<4; i++){ - mixData[i].destCh = i+1; - mixData[i].srcRaw = RawSource(SOURCE_TYPE_STICK, i); - mixData[i].weight = 100; - } + for (int i=0; i 500) + trim = 500; + break; + } + } +} + void ModelData::removeGlobalVar(int & var) { if (var >= 126 && var <= 130) diff --git a/companion/src/eeprominterface.h b/companion/src/eeprominterface.h index 898b7a576..4c5780b82 100644 --- a/companion/src/eeprominterface.h +++ b/companion/src/eeprominterface.h @@ -72,7 +72,6 @@ const uint8_t modn12x3[4][4]= { #define C9X_MAX_POINTS 17 #define C9X_MAX_GVARS 9 #define C9X_MAX_ENCODERS 2 -#define NUM_SAFETY_CHNOUT 16 #define C9X_NUM_CHNOUT 32 // number of real output channels #define C9X_NUM_CSW 32 // number of custom switches #define C9X_MAX_CUSTOM_FUNCTIONS 32 // number of functions assigned to switches @@ -147,44 +146,6 @@ enum EnumKeys { #endif }; -enum CSFunction { - CS_FN_OFF, - CS_FN_VPOS, - CS_FN_VNEG, - CS_FN_APOS, - CS_FN_ANEG, - CS_FN_AND, - CS_FN_OR, - CS_FN_XOR, - CS_FN_EQUAL, - CS_FN_NEQUAL, - CS_FN_GREATER, - CS_FN_LESS, - CS_FN_EGREATER, - CS_FN_ELESS, - CS_FN_DPOS, - CS_FN_DAPOS, - CS_FN_VEQUAL, // added at the end to avoid everything renumbered - CS_FN_TIM, - CS_FN_MAXF -}; - -enum CSFunctionFamily { - CS_FAMILY_VOFS, - CS_FAMILY_VBOOL, - CS_FAMILY_VCOMP, - CS_FAMILY_TIMERS -}; - -inline CSFunctionFamily getCSFunctionFamily(int fn) -{ - if (fn==CS_FN_TIM) { - return (CS_FAMILY_TIMERS); - } else { - return ((fnCS_FN_ELESS) ? CS_FAMILY_VOFS : (fnfunc = func; + } + unsigned int func; + int val1; + int val2; + int val3; + unsigned int delay; + unsigned int duration; + int andsw; + void clear() { memset(this, 0, sizeof(LogicalSwitchData)); } + CSFunctionFamily getFunctionFamily(); + QString funcToString(); + QString toString(const ModelData & model); }; enum AssignFunc { FuncSafetyCh1 = 0, - FuncSafetyCh16 = FuncSafetyCh1+15, + FuncSafetyCh32 = FuncSafetyCh1+C9X_NUM_CHNOUT-1, FuncTrainer, FuncTrainerRUD, FuncTrainerELE, @@ -650,6 +642,8 @@ enum AssignFunc { FuncPlaySound, FuncPlayHaptic, FuncReset, + FuncSetTimer1, + FuncSetTimer2, FuncVario, FuncPlayPrompt, FuncPlayBoth, @@ -666,7 +660,7 @@ enum AssignFunc { class FuncSwData { // Function Switches data public: - FuncSwData() { clear(); } + FuncSwData(AssignFunc func=FuncSafetyCh1) { clear(); this->func = func; } RawSwitch swtch; AssignFunc func; int param; @@ -675,12 +669,17 @@ class FuncSwData { // Function Switches data unsigned int adjustMode; int repeatParam; void clear() { memset(this, 0, sizeof(FuncSwData)); } + QString funcToString(); + QString paramToString(); + QString repeatToString(); + QStringList toStringList(); }; class PhaseData { public: PhaseData() { clear(); } - int trimRef[NUM_STICKS]; // + int trimMode[NUM_STICKS]; + int trimRef[NUM_STICKS]; int trim[NUM_STICKS]; RawSwitch swtch; char name[10+1]; @@ -688,7 +687,7 @@ class PhaseData { unsigned int fadeOut; int rotaryEncoders[2]; int gvars[C9X_MAX_GVARS]; - void clear() { memset(this, 0, sizeof(PhaseData)); for (int i=0; i off, abs, THs, TH%, THt, sw/!sw, !m_sw/!m_sw + RawSwitch mode; bool minuteBeep; unsigned int countdownBeep; bool dir; // 0=>Count Down, 1=>Count Up unsigned int val; bool persistent; int pvalue; - void clear() { memset(this, 0, sizeof(TimerData)); } + void clear() { memset(this, 0, sizeof(TimerData)); mode = RawSwitch(SWITCH_TYPE_TIMER_MODE, 0); } }; enum Protocol { @@ -894,13 +878,11 @@ class ModelData { ExpoData expoData[C9X_MAX_EXPOS]; CurveData curves[C9X_MAX_CURVES]; - CustomSwData customSw[C9X_NUM_CSW]; + LogicalSwitchData customSw[C9X_NUM_CSW]; FuncSwData funcSw[C9X_MAX_CUSTOM_FUNCTIONS]; - SafetySwData safetySw[C9X_NUM_CHNOUT]; SwashRingData swashRingData; unsigned int thrTraceSrc; int8_t traineron; // 0 disable trainer, 1 allow trainer - int8_t t2throttle; // Start timer2 using throttle unsigned int modelId; unsigned int switchWarningStates; unsigned int nSwToWarn; @@ -928,8 +910,9 @@ class ModelData { void clear(); bool isempty(); void setDefault(uint8_t id); - unsigned int getTrimFlightPhase(uint8_t idx, int8_t phase); + int getTrimValue(int phaseIdx, int trimIdx); + void setTrimValue(int phaseIdx, int trimIdx, int value); ModelData removeGlobalVars(); void clearMixes(); @@ -965,10 +948,10 @@ enum Capability { Pots, Switches, SwitchesPositions, - CustomSwitches, + LogicalSwitches, CustomAndSwitches, HasNegAndSwitches, - CustomSwitchesExt, + LogicalSwitchesExt, RotaryEncoders, Outputs, ChannelsName, @@ -1018,7 +1001,6 @@ enum Capability { GvarsInCS, GvarsAreNamed, GvarsFlightPhases, - GvarsHaveSources, GvarsName, NoTelemetryProtocol, TelemetryCustomScreens, @@ -1104,10 +1086,6 @@ class EEPROMInterface virtual int isAvailable(Protocol proto, int port=0) = 0; - virtual bool isAvailable(const RawSwitch & swtch, UseContext context) { return true; } - - virtual bool isAvailable(const RawSource & source, UseContext context) { return true; } - virtual SimulatorInterface * getSimulator() = 0; virtual const int getEEpromSize() = 0; @@ -1189,14 +1167,14 @@ inline void applyStickModeToModel(ModelData &model, unsigned int mode) // virtual switches for (int i=0; i 0 ? sw-22 : sw+22); + return RawSwitch(SWITCH_TYPE_SWITCH, sw > 0 ? sw-22 : sw+22); else - return RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, sw > 0 ? sw-22-9 : sw+22+9); + return RawSwitch(SWITCH_TYPE_VIRTUAL, sw > 0 ? sw-22-9 : sw+22+9); } t_Er9xTrainerMix::t_Er9xTrainerMix() @@ -269,22 +269,22 @@ RawSource er9xToSource(int8_t value) } } -Er9xCustomSwData::operator CustomSwData () +Er9xLogicalSwitchData::operator LogicalSwitchData () { - CustomSwData c9x; + LogicalSwitchData c9x; c9x.func = func; c9x.val1 = v1; c9x.val2 = v2; - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { + if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) { c9x.val1 = er9xToSource(v1).toValue(); } - if (c9x.func >= CS_FN_EQUAL) { + if (c9x.func >= LS_FN_EQUAL) { c9x.val2 = er9xToSource(v2).toValue(); } - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { + if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) { c9x.val1 = er9xToSwitch(v1).toValue(); c9x.val2 = er9xToSwitch(v2).toValue(); } @@ -298,14 +298,6 @@ t_Er9xSafetySwData::t_Er9xSafetySwData() memset(this, 0, sizeof(t_Er9xSafetySwData)); } -t_Er9xSafetySwData::operator SafetySwData () -{ - SafetySwData c9x; - c9x.swtch = er9xToSwitch(swtch); - c9x.val = val; - return c9x; -} - t_Er9xFrSkyChannelData::t_Er9xFrSkyChannelData() { memset(this, 0, sizeof(t_Er9xFrSkyChannelData)); @@ -343,10 +335,11 @@ t_Er9xFrSkyData::operator FrSkyData () return c9x; } -TimerMode getEr9xTimerMode(int mode) +RawSwitch getEr9xTimerMode(int mode) { + /* if (mode <= -33) - return TimerMode(TMRMODE_FIRST_NEG_MOMENT_SWITCH+(mode+33)); + return TimerMode(TMRMODE_FIRST_NEG_SWITCH+(mode+33)); else if (mode <= -1) return TimerMode(TMRMODE_FIRST_NEG_SWITCH+(mode+1)); else if (mode < 16) @@ -354,7 +347,9 @@ TimerMode getEr9xTimerMode(int mode) else if (mode < 16+21) return TimerMode(TMRMODE_FIRST_SWITCH+(mode-16)); else - return TimerMode(TMRMODE_FIRST_MOMENT_SWITCH+(mode-16-21)); + return TimerMode(TMRMODE_FIRST_SWITCH+(mode-16-21)); + */ + return RawSwitch(); } t_Er9xModelData::operator ModelData () @@ -381,7 +376,7 @@ t_Er9xModelData::operator ModelData () break; } c9x.traineron= traineron; - c9x.t2throttle = t2throttle; + // c9x.t2throttle = t2throttle; c9x.moduleData[0].ppmFrameLength=ppmFrameLength; c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH; c9x.thrTrim = thrTrim; @@ -471,8 +466,8 @@ t_Er9xModelData::operator ModelData () for (int i=0; i 0 ? sw-34 : sw+34); + return RawSwitch(SWITCH_TYPE_SWITCH, sw > 0 ? sw-34 : sw+34); else - return RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, sw > 0 ? sw-34-9 : sw+34+9); + return RawSwitch(SWITCH_TYPE_VIRTUAL, sw > 0 ? sw-34-9 : sw+34+9); } t_Ersky9xTrainerMix::t_Ersky9xTrainerMix() @@ -355,22 +353,22 @@ RawSource ersky9xToSource_v11(int8_t value) } } -Ersky9xCustomSwData_v10::operator CustomSwData () +Ersky9xLogicalSwitchData_v10::operator LogicalSwitchData () { - CustomSwData c9x; + LogicalSwitchData c9x; c9x.func = func; c9x.val1 = v1; c9x.val2 = v2; - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { + if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) { c9x.val1 = ersky9xToSource_v10(v1).toValue(); } - if (c9x.func >= CS_FN_EQUAL) { + if (c9x.func >= LS_FN_EQUAL) { c9x.val2 = ersky9xToSource_v10(v2).toValue(); } - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { + if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) { c9x.val1 = er9xToSwitch(v1).toValue(); c9x.val2 = er9xToSwitch(v2).toValue(); } @@ -378,22 +376,22 @@ Ersky9xCustomSwData_v10::operator CustomSwData () return c9x; } -Ersky9xCustomSwData_v11::operator CustomSwData () +Ersky9xLogicalSwitchData_v11::operator LogicalSwitchData () { - CustomSwData c9x; + LogicalSwitchData c9x; c9x.func = func; c9x.val1 = v1; c9x.val2 = v2; - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { + if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) { c9x.val1 = ersky9xToSource_v11(v1).toValue(); } - if (c9x.func >= CS_FN_EQUAL) { + if (c9x.func >= LS_FN_EQUAL) { c9x.val2 = ersky9xToSource_v11(v2).toValue(); } - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { + if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) { c9x.val1 = er9xToSwitch(v1).toValue(); c9x.val2 = er9xToSwitch(v2).toValue(); } @@ -406,27 +404,11 @@ t_Ersky9xSafetySwData_v10::t_Ersky9xSafetySwData_v10() memset(this, 0, sizeof(t_Ersky9xSafetySwData_v10)); } -t_Ersky9xSafetySwData_v10::operator SafetySwData () -{ - SafetySwData c9x; - c9x.swtch = er9xToSwitch(swtch); - c9x.val = val; - return c9x; -} - t_Ersky9xSafetySwData_v11::t_Ersky9xSafetySwData_v11() { memset(this, 0, sizeof(t_Ersky9xSafetySwData_v11)); } -t_Ersky9xSafetySwData_v11::operator SafetySwData () -{ - SafetySwData c9x; - c9x.swtch = ersky9xToSwitch(opt.ss.swtch); - c9x.val = opt.ss.val; - return c9x; -} - t_Ersky9xFrSkyChannelData_v10::t_Ersky9xFrSkyChannelData_v10() { memset(this, 0, sizeof(t_Ersky9xFrSkyChannelData_v10)); @@ -612,8 +594,8 @@ t_Ersky9xModelData_v10::operator ModelData () for (int i=0; i #include "eeprominterface.h" -extern TimerMode getEr9xTimerMode(int mode); -extern int setEr9xTimerMode(TimerMode mode); +extern RawSwitch getEr9xTimerMode(int mode); //eeprom data #define ERSKY9X_MAX_MIXERS_V10 32 @@ -186,31 +185,30 @@ PACK(typedef struct t_Ersky9xMixData_v11 { t_Ersky9xMixData_v11(); }) Ersky9xMixData_v11; -PACK(typedef struct t_Ersky9xCustomSwData_v10 { // Custom Switches data +PACK(typedef struct t_Ersky9xLogicalSwitchData_v10 { // Custom Switches data int8_t v1; //input int8_t v2; //offset uint8_t func; - operator CustomSwData(); - t_Ersky9xCustomSwData_v10() { memset(this, 0, sizeof(t_Ersky9xCustomSwData_v10)); } -}) Ersky9xCustomSwData_v10; + operator LogicalSwitchData(); + t_Ersky9xLogicalSwitchData_v10() { memset(this, 0, sizeof(t_Ersky9xLogicalSwitchData_v10)); } +}) Ersky9xLogicalSwitchData_v10; -PACK(typedef struct t_Ersky9xCustomSwData_v11 { // Custom Switches data +PACK(typedef struct t_Ersky9xLogicalSwitchData_v11 { // Custom Switches data int8_t v1; //input int8_t v2; //offset uint8_t func; uint8_t andsw; uint8_t res ; - operator CustomSwData(); - t_Ersky9xCustomSwData_v11() { memset(this, 0, sizeof(t_Ersky9xCustomSwData_v11)); } -}) Ersky9xCustomSwData_v11; + operator LogicalSwitchData(); + t_Ersky9xLogicalSwitchData_v11() { memset(this, 0, sizeof(t_Ersky9xLogicalSwitchData_v11)); } +}) Ersky9xLogicalSwitchData_v11; PACK(typedef struct t_Ersky9xSafetySwData_v10 { // Custom Switches data int8_t swtch; int8_t val; - operator SafetySwData(); t_Ersky9xSafetySwData_v10(); }) Ersky9xSafetySwData_v10; @@ -230,7 +228,6 @@ PACK(typedef struct t_Ersky9xSafetySwData_v11 { // Custom Switches data } vs ; } opt ; - operator SafetySwData(); t_Ersky9xSafetySwData_v11(); }) Ersky9xSafetySwData_v11; @@ -363,7 +360,7 @@ PACK(typedef struct t_Ersky9xModelData_v10 { int8_t trim[4]; int8_t curves5[ERSKY9X_MAX_CURVE5][5]; int8_t curves9[ERSKY9X_MAX_CURVE9][9]; - Ersky9xCustomSwData_v10 customSw[ERSKY9X_NUM_CSW_V10]; + Ersky9xLogicalSwitchData_v10 customSw[ERSKY9X_NUM_CSW_V10]; uint8_t frSkyVoltThreshold ; uint8_t res3[2]; Ersky9xSafetySwData_v10 safetySw[ERSKY9X_NUM_CHNOUT_V10]; @@ -412,7 +409,7 @@ PACK(typedef struct t_Ersky9xModelData_v11 { int8_t curves5[ERSKY9X_MAX_CURVE5][5]; int8_t curves9[ERSKY9X_MAX_CURVE9][9]; int8_t curvexy[18]; - Ersky9xCustomSwData_v11 customSw[ERSKY9X_NUM_CSW_V11]; + Ersky9xLogicalSwitchData_v11 customSw[ERSKY9X_NUM_CSW_V11]; uint8_t frSkyVoltThreshold ; uint8_t bt_telemetry; uint8_t numVoice; // 0-16, rest are Safety switches diff --git a/companion/src/firmwares/ersky9x/ersky9xinterface.cpp b/companion/src/firmwares/ersky9x/ersky9xinterface.cpp index 8405bff8f..dd65c0c92 100644 --- a/companion/src/firmwares/ersky9x/ersky9xinterface.cpp +++ b/companion/src/firmwares/ersky9x/ersky9xinterface.cpp @@ -74,11 +74,11 @@ inline void applyStickModeToModel(Ersky9xModelData_v10 & model, unsigned int mod for (int i=0; i= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { + if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) { c9x.val1 = gruvin9xToSource(v1).toValue(); } - if (c9x.func >= CS_FN_EQUAL) { + if (c9x.func >= LS_FN_EQUAL) { c9x.val2 = gruvin9xToSource(v2).toValue(); } - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { + if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) { c9x.val1 = gruvin9xToSwitch(v1).toValue(); c9x.val2 = gruvin9xToSwitch(v2).toValue(); } @@ -332,14 +332,6 @@ Gruvin9xFuncSwData::operator FuncSwData () return c9x; } -t_Gruvin9xSafetySwData::operator SafetySwData () -{ - SafetySwData c9x; - c9x.swtch = gruvin9xToSwitch(swtch); - c9x.val = val; - return c9x; -} - t_Gruvin9xSwashRingData::t_Gruvin9xSwashRingData() { memset(this, 0, sizeof(t_Gruvin9xSwashRingData)); @@ -381,7 +373,7 @@ t_Gruvin9xPhaseData_v106::operator PhaseData () return c9x; } -extern TimerMode getEr9xTimerMode(int mode); +extern RawSwitch getEr9xTimerMode(int mode); t_Gruvin9xTimerData::operator TimerData () { @@ -489,8 +481,8 @@ t_Gruvin9xModelData_v102::operator ModelData () for (int i=0; i= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { + if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) { c9x.val1 = open9xV4207ToSource(v1).toValue(); } - if (c9x.func >= CS_FN_EQUAL) { + if (c9x.func >= LS_FN_EQUAL) { c9x.val2 = open9xV4207ToSource(v2).toValue(); } - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { + if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) { c9x.val1 = open9xStockToSwitch(v1).toValue(); c9x.val2 = open9xStockToSwitch(v2).toValue(); } @@ -316,22 +316,22 @@ Open9xGruvin9xCustomSwData_v207::operator CustomSwData () return c9x; } -Open9xGruvin9xCustomSwData_v209::operator CustomSwData () +Open9xGruvin9xLogicalSwitchData_v209::operator LogicalSwitchData () { - CustomSwData c9x; + LogicalSwitchData c9x; c9x.func = func; c9x.val1 = v1; c9x.val2 = v2; - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { + if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) { c9x.val1 = open9xV4209ToSource(v1).toValue(); } - if (c9x.func >= CS_FN_EQUAL && c9x.func <= CS_FN_ELESS) { + if (c9x.func >= LS_FN_EQUAL && c9x.func <= LS_FN_ELESS) { c9x.val2 = open9xV4209ToSource(v2).toValue(); } - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { + if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) { c9x.val1 = open9xStockToSwitch(v1).toValue(); c9x.val2 = open9xStockToSwitch(v2).toValue(); } diff --git a/companion/src/firmwares/opentx/open9xGruvin9xeeprom.h b/companion/src/firmwares/opentx/open9xGruvin9xeeprom.h index c95dc6742..214e2ef6d 100644 --- a/companion/src/firmwares/opentx/open9xGruvin9xeeprom.h +++ b/companion/src/firmwares/opentx/open9xGruvin9xeeprom.h @@ -110,27 +110,27 @@ PACK(typedef struct t_Open9xGruvin9xMixData_v211 { t_Open9xGruvin9xMixData_v211() { memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v211)); } }) Open9xGruvin9xMixData_v211; -PACK(typedef struct t_Open9xGruvin9xCustomSwData_v207 { // Custom Switches data +PACK(typedef struct t_Open9xGruvin9xLogicalSwitchData_v207 { // Custom Switches data int8_t v1; //input int8_t v2; //offset uint8_t func; - operator CustomSwData(); - t_Open9xGruvin9xCustomSwData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xCustomSwData_v207)); } + operator LogicalSwitchData(); + t_Open9xGruvin9xLogicalSwitchData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xLogicalSwitchData_v207)); } int8_t fromSource(RawSource source); RawSource toSource(int8_t value); -}) Open9xGruvin9xCustomSwData_v207; +}) Open9xGruvin9xLogicalSwitchData_v207; -PACK(typedef struct t_Open9xGruvin9xCustomSwData_v209 { // Custom Switches data +PACK(typedef struct t_Open9xGruvin9xLogicalSwitchData_v209 { // Custom Switches data int8_t v1; //input int8_t v2; //offset uint8_t func; - operator CustomSwData(); - t_Open9xGruvin9xCustomSwData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xCustomSwData_v209)); } + operator LogicalSwitchData(); + t_Open9xGruvin9xLogicalSwitchData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xLogicalSwitchData_v209)); } int8_t fromSource(RawSource source); RawSource toSource(int8_t value); -}) Open9xGruvin9xCustomSwData_v209; +}) Open9xGruvin9xLogicalSwitchData_v209; PACK(typedef struct t_Open9xGruvin9xFuncSwData_v203 { // Function Switches data int8_t swtch; // input @@ -194,7 +194,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v207 { Open9xExpoData_v201 expoData[O9X_MAX_EXPOS]; int8_t curves5[O9X_209_MAX_CURVE5][5]; int8_t curves9[O9X_209_MAX_CURVE9][9]; - Open9xGruvin9xCustomSwData_v207 customSw[O9X_NUM_CSW]; + Open9xGruvin9xLogicalSwitchData_v207 customSw[O9X_NUM_CSW]; Open9xFuncSwData_v203 funcSw[O9X_NUM_FSW]; Open9xGruvin9xSwashRingData_v208 swashR; Open9xGruvin9xPhaseData_v207 phaseData[O9X_MAX_PHASES]; @@ -228,7 +228,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v208 { Open9xExpoData_v201 expoData[O9X_MAX_EXPOS]; int8_t curves5[O9X_209_MAX_CURVE5][5]; int8_t curves9[O9X_209_MAX_CURVE9][9]; - Open9xGruvin9xCustomSwData_v207 customSw[O9X_NUM_CSW]; + Open9xGruvin9xLogicalSwitchData_v207 customSw[O9X_NUM_CSW]; Open9xGruvin9xFuncSwData_v203 funcSw[O9X_NUM_FSW]; Open9xGruvin9xSwashRingData_v208 swashR; Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_PHASES]; @@ -267,7 +267,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v209 { Open9xExpoData_v201 expoData[O9X_MAX_EXPOS]; int8_t curves5[O9X_209_MAX_CURVE5][5]; int8_t curves9[O9X_209_MAX_CURVE9][9]; - Open9xGruvin9xCustomSwData_v209 customSw[O9X_NUM_CSW]; + Open9xGruvin9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW]; Open9xGruvin9xFuncSwData_v203 funcSw[O9X_NUM_FSW]; Open9xGruvin9xSwashRingData_v209 swashR; Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_PHASES]; @@ -307,7 +307,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v210 { Open9xExpoData_v201 expoData[O9X_MAX_EXPOS]; int8_t curves[O9X_MAX_CURVES]; int8_t points[O9X_NUM_POINTS]; - Open9xGruvin9xCustomSwData_v209 customSw[O9X_NUM_CSW]; + Open9xGruvin9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW]; Open9xGruvin9xFuncSwData_v210 funcSw[O9X_NUM_FSW]; Open9xGruvin9xSwashRingData_v209 swashR; Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_PHASES]; @@ -345,7 +345,7 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v211 { Open9xExpoData_v211 expoData[O9X_MAX_EXPOS]; int8_t curves[O9X_MAX_CURVES]; int8_t points[O9X_NUM_POINTS]; - Open9xGruvin9xCustomSwData_v209 customSw[O9X_NUM_CSW]; + Open9xGruvin9xLogicalSwitchData_v209 customSw[O9X_NUM_CSW]; Open9xGruvin9xFuncSwData_v210 funcSw[O9X_NUM_FSW]; Open9xGruvin9xSwashRingData_v209 swashR; Open9xGruvin9xPhaseData_v208 phaseData[O9X_MAX_PHASES]; diff --git a/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp b/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp index b9ebaae7a..01a7a01b2 100644 --- a/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp +++ b/companion/src/firmwares/opentx/open9xSky9xeeprom.cpp @@ -19,13 +19,13 @@ RawSwitch open9xArmToSwitch(int8_t sw) else if (sw == 42) return RawSwitch(SWITCH_TYPE_ON); else if (sw == 84) - return RawSwitch(SWITCH_TYPE_ONM); + return RawSwitch(SWITCH_TYPE_ON); else if (sw == -42) return RawSwitch(SWITCH_TYPE_OFF); else if (swa <= 42+9) - return RawSwitch(SWITCH_TYPE_MOMENT_SWITCH, sw > 0 ? sw-42 : sw+42); + return RawSwitch(SWITCH_TYPE_SWITCH, sw > 0 ? sw-42 : sw+42); else - return RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, sw > 0 ? sw-42-9 : sw+42+9); + return RawSwitch(SWITCH_TYPE_VIRTUAL, sw > 0 ? sw-42-9 : sw+42+9); } RawSource open9xArm208ToSource(int8_t value) @@ -124,9 +124,9 @@ RawSource open9xArm210ToSource(int8_t value) t_Open9xArmTimerData_v202::operator TimerData () { TimerData c9x; - +/* if (mode <= -42) - c9x.mode = TimerMode(TMRMODE_FIRST_NEG_MOMENT_SWITCH+(mode+22)); + c9x.mode = TimerMode(TMRMODE_FIRST_NEG_SWITCH+(mode+22)); else if (mode <= -1) c9x.mode = TimerMode(TMRMODE_FIRST_NEG_SWITCH+(mode+1)); else if (mode < 5) @@ -134,8 +134,8 @@ t_Open9xArmTimerData_v202::operator TimerData () else if (mode < 5+41) c9x.mode = TimerMode(TMRMODE_FIRST_SWITCH+(mode-5)); else - c9x.mode = TimerMode(TMRMODE_FIRST_MOMENT_SWITCH+(mode-5-21)); - + c9x.mode = TimerMode(TMRMODE_FIRST_SWITCH+(mode-5-21)); +*/ c9x.val = val; c9x.persistent = false; c9x.dir = (val == 0); @@ -501,22 +501,22 @@ t_Open9xArmMixData_v212::operator MixData () return c9x; } -t_Open9xArmCustomSwData_v208::operator CustomSwData () +t_Open9xArmLogicalSwitchData_v208::operator LogicalSwitchData () { - CustomSwData c9x; + LogicalSwitchData c9x; c9x.func = func; c9x.val1 = v1; c9x.val2 = v2; - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { + if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) { c9x.val1 = open9xArm208ToSource(v1).toValue(); } - if (c9x.func >= CS_FN_EQUAL) { + if (c9x.func >= LS_FN_EQUAL) { c9x.val2 = open9xArm208ToSource(v2).toValue(); } - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { + if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) { c9x.val1 = open9xArmToSwitch(v1).toValue(); c9x.val2 = open9xArmToSwitch(v2).toValue(); } @@ -524,22 +524,22 @@ t_Open9xArmCustomSwData_v208::operator CustomSwData () return c9x; } -t_Open9xArmCustomSwData_v209::operator CustomSwData () +t_Open9xArmLogicalSwitchData_v209::operator LogicalSwitchData () { - CustomSwData c9x; + LogicalSwitchData c9x; c9x.func = func; c9x.val1 = v1; c9x.val2 = v2; - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { + if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) { c9x.val1 = open9xArm209ToSource(v1).toValue(); } - if (c9x.func >= CS_FN_EQUAL) { + if (c9x.func >= LS_FN_EQUAL) { c9x.val2 = open9xArm209ToSource(v2).toValue(); } - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { + if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) { c9x.val1 = open9xArmToSwitch(v1).toValue(); c9x.val2 = open9xArmToSwitch(v2).toValue(); } @@ -547,24 +547,24 @@ t_Open9xArmCustomSwData_v209::operator CustomSwData () return c9x; } -t_Open9xArmCustomSwData_v210::operator CustomSwData () +t_Open9xArmLogicalSwitchData_v210::operator LogicalSwitchData () { - CustomSwData c9x; + LogicalSwitchData c9x; c9x.func = func; c9x.val1 = v1; c9x.val2 = v2; c9x.delay = delay; c9x.duration = duration; - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { + if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) { c9x.val1 = open9xArm210ToSource(v1).toValue(); } - if (c9x.func >= CS_FN_EQUAL && c9x.func <= CS_FN_ELESS) { + if (c9x.func >= LS_FN_EQUAL && c9x.func <= LS_FN_ELESS) { c9x.val2 = open9xArm210ToSource(v2).toValue(); } - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { + if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) { c9x.val1 = open9xArmToSwitch(v1).toValue(); c9x.val2 = open9xArmToSwitch(v2).toValue(); } @@ -577,7 +577,7 @@ t_Open9xArmFuncSwData_v208::operator FuncSwData () FuncSwData c9x; c9x.swtch = open9xArmToSwitch(swtch); c9x.func = (AssignFunc)(func); - if (c9x.func <= FuncSafetyCh16) { + if (c9x.func <= FuncSafetyCh32) { c9x.enabled=param & 0x01; c9x.param = (param>>1)<<1; } diff --git a/companion/src/firmwares/opentx/open9xSky9xeeprom.h b/companion/src/firmwares/opentx/open9xSky9xeeprom.h index b313169b8..fdb3974ee 100644 --- a/companion/src/firmwares/opentx/open9xSky9xeeprom.h +++ b/companion/src/firmwares/opentx/open9xSky9xeeprom.h @@ -190,34 +190,34 @@ PACK(typedef struct t_Open9xArmPhaseData_v212 { t_Open9xArmPhaseData_v212() { memset(this, 0, sizeof(t_Open9xArmPhaseData_v212)); } }) Open9xArmPhaseData_v212; -PACK(typedef struct t_Open9xArmCustomSwData_v208 { // Custom Switches data +PACK(typedef struct t_Open9xArmLogicalSwitchData_v208 { // Custom Switches data int8_t v1; //input int8_t v2; //offset uint8_t func; - operator CustomSwData(); - t_Open9xArmCustomSwData_v208() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v208)); } -}) Open9xArmCustomSwData_v208; + operator LogicalSwitchData(); + t_Open9xArmLogicalSwitchData_v208() { memset(this, 0, sizeof(t_Open9xArmLogicalSwitchData_v208)); } +}) Open9xArmLogicalSwitchData_v208; -PACK(typedef struct t_Open9xArmCustomSwData_v209 { // Custom Switches data +PACK(typedef struct t_Open9xArmLogicalSwitchData_v209 { // Custom Switches data int8_t v1; //input int8_t v2; //offset uint8_t func; - operator CustomSwData(); - t_Open9xArmCustomSwData_v209() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v209)); } -}) Open9xArmCustomSwData_v209; + operator LogicalSwitchData(); + t_Open9xArmLogicalSwitchData_v209() { memset(this, 0, sizeof(t_Open9xArmLogicalSwitchData_v209)); } +}) Open9xArmLogicalSwitchData_v209; -PACK(typedef struct t_Open9xArmCustomSwData_v210 { // Custom Switches data +PACK(typedef struct t_Open9xArmLogicalSwitchData_v210 { // Custom Switches data int8_t v1; //input int8_t v2; //offset uint8_t func; uint8_t delay; uint8_t duration; - operator CustomSwData(); - t_Open9xArmCustomSwData_v210() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v210)); } -}) Open9xArmCustomSwData_v210; + operator LogicalSwitchData(); + t_Open9xArmLogicalSwitchData_v210() { memset(this, 0, sizeof(t_Open9xArmLogicalSwitchData_v210)); } +}) Open9xArmLogicalSwitchData_v210; PACK(typedef struct t_Open9xArmFuncSwData_v208 { // Function Switches data int8_t swtch; // input @@ -343,7 +343,7 @@ PACK(typedef struct t_Open9xArmModelData_v208 { Open9xArmExpoData_v208 expoData[O9X_ARM_MAX_EXPOS]; int8_t curves5[O9X_209_MAX_CURVE5][5]; int8_t curves9[O9X_209_MAX_CURVE9][9]; - Open9xArmCustomSwData_v208 customSw[O9X_ARM_NUM_CSW]; + Open9xArmLogicalSwitchData_v208 customSw[O9X_ARM_NUM_CSW]; Open9xArmFuncSwData_v208 funcSw[O9X_ARM_NUM_FSW]; Open9xArmSwashRingData_v208 swashR; Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_PHASES]; @@ -382,7 +382,7 @@ PACK(typedef struct t_Open9xArmModelData_v209 { Open9xArmExpoData_v208 expoData[O9X_ARM_MAX_EXPOS]; int8_t curves5[O9X_209_MAX_CURVE5][5]; int8_t curves9[O9X_209_MAX_CURVE9][9]; - Open9xArmCustomSwData_v209 customSw[O9X_ARM_NUM_CSW]; + Open9xArmLogicalSwitchData_v209 customSw[O9X_ARM_NUM_CSW]; Open9xArmFuncSwData_v208 funcSw[O9X_ARM_NUM_FSW]; Open9xArmSwashRingData_v209 swashR; Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_PHASES]; @@ -422,7 +422,7 @@ PACK(typedef struct t_Open9xArmModelData_v210 { Open9xArmExpoData_v210 expoData[O9X_ARM_MAX_EXPOS]; int8_t curves5[O9X_209_MAX_CURVE5][5]; int8_t curves9[O9X_209_MAX_CURVE9][9]; - Open9xArmCustomSwData_v210 customSw[O9X_ARM_NUM_CSW]; + Open9xArmLogicalSwitchData_v210 customSw[O9X_ARM_NUM_CSW]; Open9xArmFuncSwData_v210 funcSw[O9X_ARM_NUM_FSW]; Open9xArmSwashRingData_v209 swashR; Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_PHASES]; @@ -461,7 +461,7 @@ PACK(typedef struct t_Open9xArmModelData_v211 { Open9xArmExpoData_v210 expoData[O9X_ARM_MAX_EXPOS]; int16_t curves[O9X_ARM_MAX_CURVES]; int8_t points[O9X_ARM_NUM_POINTS]; - Open9xArmCustomSwData_v210 customSw[O9X_ARM_NUM_CSW]; + Open9xArmLogicalSwitchData_v210 customSw[O9X_ARM_NUM_CSW]; Open9xArmFuncSwData_v211 funcSw[O9X_ARM_NUM_FSW]; Open9xArmSwashRingData_v209 swashR; Open9xArmPhaseData_v208 phaseData[O9X_ARM_MAX_PHASES]; @@ -499,7 +499,7 @@ PACK(typedef struct t_Open9xArmModelData_v212 { Open9xArmExpoData_v212 expoData[O9X_ARM_MAX_EXPOS]; int16_t curves[O9X_ARM_MAX_CURVES]; int8_t points[O9X_ARM_NUM_POINTS]; - Open9xArmCustomSwData_v210 customSw[O9X_ARM_NUM_CSW]; + Open9xArmLogicalSwitchData_v210 customSw[O9X_ARM_NUM_CSW]; Open9xArmFuncSwData_v211 funcSw[O9X_ARM_NUM_FSW]; Open9xArmSwashRingData_v210 swashR; Open9xArmPhaseData_v212 phaseData[O9X_ARM_MAX_PHASES]; diff --git a/companion/src/firmwares/opentx/open9xStockeeprom.cpp b/companion/src/firmwares/opentx/open9xStockeeprom.cpp index 9989cf8c5..73cb22164 100644 --- a/companion/src/firmwares/opentx/open9xStockeeprom.cpp +++ b/companion/src/firmwares/opentx/open9xStockeeprom.cpp @@ -74,13 +74,13 @@ RawSwitch open9xStockToSwitch(int8_t sw) else if (sw == 22) return RawSwitch(SWITCH_TYPE_ON); else if (sw == 44) - return RawSwitch(SWITCH_TYPE_ONM); + return RawSwitch(SWITCH_TYPE_ON); else if (sw == -22) return RawSwitch(SWITCH_TYPE_OFF); else if (swa <= 22+9) - return RawSwitch(SWITCH_TYPE_MOMENT_SWITCH, sw > 0 ? sw-22 : sw+22); + return RawSwitch(SWITCH_TYPE_SWITCH, sw > 0 ? sw-22 : sw+22); else - return RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, sw > 0 ? sw-22-9 : sw+22+9); + return RawSwitch(SWITCH_TYPE_VIRTUAL, sw > 0 ? sw-22-9 : sw+22+9); } t_Open9xExpoData_v201::operator ExpoData () @@ -518,22 +518,22 @@ RawSource open9xStock209ToSource(int8_t value) } } -Open9xCustomSwData_v208::operator CustomSwData () +Open9xLogicalSwitchData_v208::operator LogicalSwitchData () { - CustomSwData c9x; + LogicalSwitchData c9x; c9x.func = func; c9x.val1 = v1; c9x.val2 = v2; - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { + if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) { c9x.val1 = open9x208ToSource(v1).toValue(); } - if (c9x.func >= CS_FN_EQUAL) { + if (c9x.func >= LS_FN_EQUAL) { c9x.val2 = open9x208ToSource(v2).toValue(); } - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { + if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) { c9x.val1 = open9xStockToSwitch(v1).toValue(); c9x.val2 = open9xStockToSwitch(v2).toValue(); } @@ -541,22 +541,22 @@ Open9xCustomSwData_v208::operator CustomSwData () return c9x; } -Open9xCustomSwData_v209::operator CustomSwData () +Open9xLogicalSwitchData_v209::operator LogicalSwitchData () { - CustomSwData c9x; + LogicalSwitchData c9x; c9x.func = func; c9x.val1 = v1; c9x.val2 = v2; - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { + if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) { c9x.val1 = open9xStock209ToSource(v1).toValue(); } - if (c9x.func >= CS_FN_EQUAL && c9x.func <= CS_FN_ELESS) { + if (c9x.func >= LS_FN_EQUAL && c9x.func <= LS_FN_ELESS) { c9x.val2 = open9xStock209ToSource(v2).toValue(); } - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { + if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) { c9x.val1 = open9xStockToSwitch(v1).toValue(); c9x.val2 = open9xStockToSwitch(v2).toValue(); } @@ -662,14 +662,6 @@ t_Open9xFuncSwData_v210::operator FuncSwData () return c9x; } -t_Open9xSafetySwData::operator SafetySwData () -{ - SafetySwData c9x; - c9x.swtch = open9xStockToSwitch(swtch); - c9x.val = val; - return c9x; -} - t_Open9xSwashRingData_v208::operator SwashRingData () { SwashRingData c9x; @@ -709,7 +701,7 @@ t_Open9xPhaseData_v201::operator PhaseData () t_Open9xTimerData_v201::operator TimerData () { TimerData c9x; - c9x.mode = TMRMODE_OFF; + // c9x.mode = TMRMODE_OFF; c9x.val = val; c9x.persistent = persistent; c9x.dir = dir; @@ -719,9 +711,9 @@ t_Open9xTimerData_v201::operator TimerData () t_Open9xTimerData_v202::operator TimerData () { TimerData c9x; - +/* if (mode <= -22) - c9x.mode = TimerMode(TMRMODE_FIRST_NEG_MOMENT_SWITCH+(mode+22)); + c9x.mode = TimerMode(TMRMODE_FIRST_NEG_SWITCH+(mode+22)); else if (mode <= -1) c9x.mode = TimerMode(TMRMODE_FIRST_NEG_SWITCH+(mode+1)); else if (mode < 5) @@ -729,8 +721,8 @@ t_Open9xTimerData_v202::operator TimerData () else if (mode < 5+21) c9x.mode = TimerMode(TMRMODE_FIRST_SWITCH+(mode-5)); else - c9x.mode = TimerMode(TMRMODE_FIRST_MOMENT_SWITCH+(mode-5-21)); - + c9x.mode = TimerMode(TMRMODE_FIRST_SWITCH+(mode-5-21)); +*/ c9x.val = val; c9x.persistent = false; c9x.dir = (val == 0); @@ -993,8 +985,8 @@ t_Open9xModelData_v201::operator ModelData () c9x.customSw[i] = customSw[i]; for (int i=0; i<12; i++) c9x.funcSw[i] = funcSw[i]; - for (int i=0; i= 216) { - for (int i=0; i<2; i++) { - for (int j=0; j<6; j++) { - addConversion(RawSwitch(SWITCH_TYPE_MULTIPOS_POT, i*6+j), val++); - } + if (version >= 216) { + for (int i=1; i<=GetEepromInterface()->getCapability(MultiposPots) * GetEepromInterface()->getCapability(MultiposPotsPositions); i++) { + addConversion(RawSwitch(SWITCH_TYPE_MULTIPOS_POT, -i), -val+offset); + addConversion(RawSwitch(SWITCH_TYPE_MULTIPOS_POT, i), val++); } } - addConversion(RawSwitch(SWITCH_TYPE_OFF), -val); - addConversion(RawSwitch(SWITCH_TYPE_ON), val++); + if (version >= 216) { + for (int i=1; i<=8; i++) { + addConversion(RawSwitch(SWITCH_TYPE_TRIM, -i), -val+offset); + addConversion(RawSwitch(SWITCH_TYPE_TRIM, i), val++); + } + } - for (int i=1; i<=MAX_SWITCHES_POSITION(board); i++) { - int s = switchIndex(i, board, version); - // addConversion(RawSwitch(SWITCH_TYPE_MOMENT_SWITCH, -s), -val); - addConversion(RawSwitch(SWITCH_TYPE_MOMENT_SWITCH, s), val++); + if (version >= 216) { + for (int i=1; i<=MAX_ROTARY_ENCODERS(board); i++) { + addConversion(RawSwitch(SWITCH_TYPE_ROTARY_ENCODER, -i), -val+offset); + addConversion(RawSwitch(SWITCH_TYPE_ROTARY_ENCODER, i), val++); + } } for (int i=1; i<=MAX_CUSTOM_SWITCHES(board, version); i++) { - // addConversion(RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, -i), -val); - addConversion(RawSwitch(SWITCH_TYPE_MOMENT_VIRTUAL, i), val++); + addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, -i), -val+offset); + addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, i), val++); } - // addConversion(RawSwitch(SWITCH_TYPE_ONM, 1 ), -val); - addConversion(RawSwitch(SWITCH_TYPE_ONM, 0 ), val++); - addConversion(RawSwitch(SWITCH_TYPE_TRN, 0), val++); - addConversion(RawSwitch(SWITCH_TYPE_TRN, 1), val++); - addConversion(RawSwitch(SWITCH_TYPE_REA, 0), val++); - addConversion(RawSwitch(SWITCH_TYPE_REA, 1), val++); + addConversion(RawSwitch(SWITCH_TYPE_OFF), -val+offset); + addConversion(RawSwitch(SWITCH_TYPE_ON), val++); + + if (version < 216) { + // previous "moment" switches + for (int i=1; i<=MAX_SWITCHES_POSITION(board); i++) { + int s = switchIndex(i, board, version); + addConversion(RawSwitch(SWITCH_TYPE_SWITCH, s), val++); + } + + for (int i=1; i<=MAX_CUSTOM_SWITCHES(board, version); i++) { + addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, i), val++); + } + + // previous "One" switch + addConversion(RawSwitch(SWITCH_TYPE_ON), val++); + } } protected: @@ -264,59 +282,6 @@ class SourcesConversionTable: public ConversionTable { } }; -class TimerModeConversionTable: public ConversionTable { - - public: - TimerModeConversionTable(BoardEnum board, unsigned int version, unsigned long flags=0) - { - int val=0; - - addConversion(TMRMODE_OFF, val++); - addConversion(TMRMODE_ABS, val++); - addConversion(TMRMODE_THs, val++); - addConversion(TMRMODE_THp, val++); - addConversion(TMRMODE_THt, val++); - - int swCount = MAX_SWITCHES_POSITION(board) + MAX_CUSTOM_SWITCHES(board, version); - - for (int i=0; i > { - public: - TimerModeField(TimerMode & mode, BoardEnum board, unsigned int version, unsigned long flags=0): - ConversionField< SignedField<8> >(_mode, &conversionTable, "TimerMode"), - conversionTable(board, version, flags), - mode(mode), - _mode(0) - { - } - - virtual void beforeExport() - { - _mode = mode; - ConversionField< SignedField<8> >::beforeExport(); - } - - virtual void afterImport() - { - ConversionField< SignedField<8> >::afterImport(); - mode = (TimerMode)_mode; - } - - protected: - TimerModeConversionTable conversionTable; - TimerMode & mode; - int _mode; -}; - template class SwitchField: public ConversionField< SignedField > { public: @@ -433,6 +398,12 @@ class PhaseField: public TransformedField { for (int i=0; i(trimExt[i])); } + else if (board == BOARD_TARANIS && version >= 216) { + for (int i=0; i(phase.trim[i])); + internalField.Append(new UnsignedField<5>(trimMode[i])); + } + } else { for (int i=0; i(trimBase[i])); @@ -467,19 +438,27 @@ class PhaseField: public TransformedField { virtual void beforeExport() { for (int i=0; i= 0) { - trim = 501 + phase.trimRef[i] - (phase.trimRef[i] >= index ? 1 : 0); + if (board == BOARD_TARANIS && version >= 216) { + if (phase.trimMode[i] < 0) + trimMode[i] = TRIM_MODE_NONE; + else + trimMode[i] = 2*phase.trimRef[i] + phase.trimMode[i]; } else { - trim = std::max(-500, std::min(500, phase.trim[i])); - } - if (board == BOARD_STOCK || (board == BOARD_M128 && version >= 215)) { - trimBase[i] = trim >> 2; - trimExt[i] = (trim & 0x03); - } - else { - trimBase[i] = trim; + int trim; + if (phase.trimMode[i] < 0) + trim = 0; + else if (phase.trimRef[i] != index) + trim = 501 + phase.trimRef[i] - (phase.trimRef[i] > index ? 1 : 0); + else + trim = std::max(-500, std::min(500, phase.trim[i])); + if (board == BOARD_STOCK || (board == BOARD_M128 && version >= 215)) { + trimBase[i] = trim >> 2; + trimExt[i] = (trim & 0x03); + } + else { + trimBase[i] = trim; + } } } } @@ -487,21 +466,31 @@ class PhaseField: public TransformedField { virtual void afterImport() { for (int i=0; i= 215)) - trim = ((trimBase[i]) << 2) + (trimExt[i] & 0x03); - else - trim = trimBase[i]; - if (trim > 500) { - phase.trimRef[i] = trim - 501; - if (phase.trimRef[i] >= index) - phase.trimRef[i] += 1; - phase.trim[i] = 0; + if (board == BOARD_TARANIS && version >= 216) { + if (trimMode[i] == TRIM_MODE_NONE) { + phase.trimMode[i] = -1; + } + else { + phase.trimMode[i] = trimMode[i] % 2; + phase.trimRef[i] = trimMode[i] / 2; + } } else { - phase.trim[i] = trim; + int trim; + if (board == BOARD_STOCK || (board == BOARD_M128 && version >= 215)) + trim = ((trimBase[i]) << 2) + (trimExt[i] & 0x03); + else + trim = trimBase[i]; + if (trim > 500) { + phase.trimRef[i] = trim - 501; + if (phase.trimRef[i] >= index) + phase.trimRef[i] += 1; + phase.trim[i] = 0; + } + else { + phase.trim[i] = trim; + } } - } } @@ -514,6 +503,7 @@ class PhaseField: public TransformedField { int rotencCount; int trimBase[NUM_STICKS]; int trimExt[NUM_STICKS]; + unsigned int trimMode[NUM_STICKS]; }; @@ -1055,42 +1045,46 @@ class CurvesField: public TransformedField { int _points[C9X_MAX_CURVES*C9X_MAX_POINTS*2]; }; -class CustomSwitchesFunctionsTable: public ConversionTable { +class LogicalSwitchesFunctionsTable: public ConversionTable { public: - CustomSwitchesFunctionsTable(BoardEnum board, unsigned int version) + LogicalSwitchesFunctionsTable(BoardEnum board, unsigned int version) { int val=0; bool afterrelease21March2013 = IS_AFTER_RELEASE_21_MARCH_2013(board, version); - addConversion(CS_FN_OFF, val++); - if (afterrelease21March2013) - addConversion(CS_FN_VEQUAL, val++); - addConversion(CS_FN_VPOS, val++); - addConversion(CS_FN_VNEG, val++); - addConversion(CS_FN_APOS, val++); - addConversion(CS_FN_ANEG, val++); - addConversion(CS_FN_AND, val++); - addConversion(CS_FN_OR, val++); - addConversion(CS_FN_XOR, val++); - addConversion(CS_FN_EQUAL, val++); - if (!afterrelease21March2013) - addConversion(CS_FN_NEQUAL, val++); - addConversion(CS_FN_GREATER, val++); - addConversion(CS_FN_LESS, val++); - if (!afterrelease21March2013) { - addConversion(CS_FN_EGREATER, val++); - addConversion(CS_FN_ELESS, val++); + addConversion(LS_FN_OFF, val++); + if (release21March2013) + addConversion(LS_FN_VEQUAL, val++); + addConversion(LS_FN_VPOS, val++); + addConversion(LS_FN_VNEG, val++); + if (IS_ARM(board) && version >= 216) val++; // later RANGE + addConversion(LS_FN_APOS, val++); + addConversion(LS_FN_ANEG, val++); + addConversion(LS_FN_AND, val++); + addConversion(LS_FN_OR, val++); + addConversion(LS_FN_XOR, val++); + if (IS_ARM(board) && version >= 216) addConversion(LS_FN_STAY, val++); + addConversion(LS_FN_EQUAL, val++); + if (!release21March2013) + addConversion(LS_FN_NEQUAL, val++); + addConversion(LS_FN_GREATER, val++); + addConversion(LS_FN_LESS, val++); + if (!release21March2013) { + addConversion(LS_FN_EGREATER, val++); + addConversion(LS_FN_ELESS, val++); } - addConversion(CS_FN_DPOS, val++); - addConversion(CS_FN_DAPOS, val++); - addConversion(CS_FN_TIM, val++); + addConversion(LS_FN_DPOS, val++); + addConversion(LS_FN_DAPOS, val++); + addConversion(LS_FN_TIMER, val++); + if (version >= 216) + addConversion(LS_FN_STICKY, val++); } }; -class CustomSwitchesAndSwitchesConversionTable: public ConversionTable { +class AndSwitchesConversionTable: public ConversionTable { public: - CustomSwitchesAndSwitchesConversionTable(BoardEnum board, unsigned int version) + AndSwitchesConversionTable(BoardEnum board, unsigned int version) { int val=0; addConversion(RawSwitch(SWITCH_TYPE_NONE), val++); @@ -1128,6 +1122,29 @@ class CustomSwitchesAndSwitchesConversionTable: public ConversionTable { } } + static ConversionTable * getInstance(BoardEnum board, unsigned int version) + { + if (IS_ARM(board) && version >= 216) + return new SwitchesConversionTable(board, version); + else + return new AndSwitchesConversionTable(board, version); + +#if 0 + static std::list internalCache; + + for (std::list::iterator it=internalCache.begin(); it!=internalCache.end(); it++) { + Cache element = *it; + if (element.board == board && element.version == version && element.flags == flags) + return element.table; + } + + Cache element(board, version, flags, new SwitchesConversionTable(board, version, flags)); + internalCache.push_back(element); + return element.table; +#endif + } + + protected: void addConversion(const RawSwitch & sw, const int b) @@ -1136,11 +1153,11 @@ class CustomSwitchesAndSwitchesConversionTable: public ConversionTable { } }; -class CustomSwitchField: public TransformedField { +class LogicalSwitchField: public TransformedField { public: - CustomSwitchField(CustomSwData & csw, BoardEnum board, unsigned int version, unsigned int variant): + LogicalSwitchField(LogicalSwitchData & csw, BoardEnum board, unsigned int version, unsigned int variant): TransformedField(internalField), - internalField("CustomSwitch"), + internalField("LogicalSwitch"), csw(csw), board(board), version(version), @@ -1148,9 +1165,14 @@ class CustomSwitchField: public TransformedField { functionsConversionTable(board, version), sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, (version >= 214 || (!IS_ARM(board) && version >= 213)) ? 0 : FLAG_NOSWITCHES)), switchesConversionTable(SwitchesConversionTable::getInstance(board, version)), - andswitchesConversionTable(board, version) + andswitchesConversionTable(AndSwitchesConversionTable::getInstance(board, version)) { - if (IS_ARM(board) && version >= 215) { + if (IS_ARM(board) && version >= 216) { + internalField.Append(new SignedField<8>(v1)); + internalField.Append(new SignedField<16>(v2)); + internalField.Append(new SignedField<16>(v3)); + } + else if (IS_ARM(board) && version >= 215) { internalField.Append(new SignedField<16>(v1)); internalField.Append(new SignedField<16>(v2)); } @@ -1164,13 +1186,13 @@ class CustomSwitchField: public TransformedField { internalField.Append(new UnsignedField<8>(csw.delay)); internalField.Append(new UnsignedField<8>(csw.duration)); if (version >= 214) { - internalField.Append(new ConversionField< SignedField<8> >((int &)csw.andsw, &andswitchesConversionTable, "AND switch")); + internalField.Append(new ConversionField< SignedField<8> >((int &)csw.andsw, andswitchesConversionTable, "AND switch")); } } else { if (version >= 213) { internalField.Append(new ConversionField< UnsignedField<4> >(csw.func, &functionsConversionTable, "Function")); - internalField.Append(new ConversionField< UnsignedField<4> >(csw.andsw, &andswitchesConversionTable, "AND switch")); + internalField.Append(new ConversionField< UnsignedField<4> >((unsigned int &)csw.andsw, andswitchesConversionTable, "AND switch")); } else { internalField.Append(new ConversionField< UnsignedField<8> >(csw.func, &functionsConversionTable, "Function")); @@ -1180,54 +1202,65 @@ class CustomSwitchField: public TransformedField { virtual void beforeExport() { - v1 = csw.val1; - v2 = csw.val2; - - if ((csw.func >= CS_FN_VPOS && csw.func <= CS_FN_ANEG) || (csw.func >= CS_FN_EQUAL && csw.func!=CS_FN_TIM)) { - sourcesConversionTable->exportValue(csw.val1, v1); + if (csw.func == LS_FN_STAY) { + switchesConversionTable->exportValue(csw.val1, v1); + v2 = csw.val2; + v3 = csw.val3; } - - if (csw.func >= CS_FN_EQUAL && csw.func <= CS_FN_ELESS) { - sourcesConversionTable->exportValue(csw.val2, v2); - } - - if (csw.func >= CS_FN_AND && csw.func <= CS_FN_XOR) { + else if ((csw.func >= LS_FN_AND && csw.func <= LS_FN_XOR) || csw.func == LS_FN_STICKY) { switchesConversionTable->exportValue(csw.val1, v1); switchesConversionTable->exportValue(csw.val2, v2); } + else if (csw.func >= LS_FN_EQUAL && csw.func <= LS_FN_ELESS) { + sourcesConversionTable->exportValue(csw.val1, v1); + sourcesConversionTable->exportValue(csw.val2, v2); + } + else { + if ((csw.func >= LS_FN_VPOS && csw.func <= LS_FN_ANEG) || (csw.func >= LS_FN_EQUAL && csw.func!=LS_FN_TIMER)) + sourcesConversionTable->exportValue(csw.val1, v1); + else + v1 = csw.val1; + v2 = csw.val2; + } } virtual void afterImport() { - csw.val1 = v1; - csw.val2 = v2; - - if ((csw.func >= CS_FN_VPOS && csw.func <= CS_FN_ANEG) || (csw.func >= CS_FN_EQUAL && csw.func!=CS_FN_TIM)) { - sourcesConversionTable->importValue(v1, csw.val1); + if (csw.func == LS_FN_STAY) { + switchesConversionTable->importValue(v1, csw.val1); + csw.val2 = v2; + csw.val3 = v3; } - - if (csw.func >= CS_FN_EQUAL && csw.func <= CS_FN_ELESS) { - sourcesConversionTable->importValue(v2, csw.val2); - } - - if (csw.func >= CS_FN_AND && csw.func <= CS_FN_XOR) { + else if ((csw.func >= LS_FN_AND && csw.func <= LS_FN_XOR) || csw.func == LS_FN_STICKY) { switchesConversionTable->importValue(v1, csw.val1); switchesConversionTable->importValue(v2, csw.val2); } + else if (csw.func >= LS_FN_EQUAL && csw.func <= LS_FN_ELESS) { + sourcesConversionTable->importValue(v1, csw.val1); + sourcesConversionTable->importValue(v2, csw.val2); + } + else { + if ((csw.func >= LS_FN_VPOS && csw.func <= LS_FN_ANEG) || (csw.func >= LS_FN_EQUAL && csw.func!=LS_FN_TIMER)) + sourcesConversionTable->importValue(v1, csw.val1); + else + csw.val1 = v1; + csw.val2 = v2; + } } protected: StructField internalField; - CustomSwData & csw; + LogicalSwitchData & csw; BoardEnum board; unsigned int version; unsigned int variant; - CustomSwitchesFunctionsTable functionsConversionTable; + LogicalSwitchesFunctionsTable functionsConversionTable; SourcesConversionTable * sourcesConversionTable; SwitchesConversionTable * switchesConversionTable; - CustomSwitchesAndSwitchesConversionTable andswitchesConversionTable; + ConversionTable * andswitchesConversionTable; int v1; int v2; + int v3; }; class CustomFunctionsConversionTable: public ConversionTable { @@ -1237,7 +1270,13 @@ class CustomFunctionsConversionTable: public ConversionTable { { int val=0; - if (IS_ARM(board) || version < 213) { + if (version >= 216) { + for (int i=0; i<32; i++) { + addConversion(i, val); + } + val++; + } + else if (IS_ARM(board) || version < 213) { for (int i=0; i<16; i++) { addConversion(val, val); val++; @@ -1249,32 +1288,72 @@ class CustomFunctionsConversionTable: public ConversionTable { } val+=4; } - addConversion(FuncTrainer, val++); - addConversion(FuncTrainerRUD, val++); - addConversion(FuncTrainerELE, val++); - addConversion(FuncTrainerTHR, val++); - addConversion(FuncTrainerAIL, val++); - addConversion(FuncInstantTrim, val++); - addConversion(FuncPlaySound, val++); - if (!IS_TARANIS(board)) - addConversion(FuncPlayHaptic, val++); - addConversion(FuncReset, val++); - addConversion(FuncVario, val++); - addConversion(FuncPlayPrompt, val++); - if (version >= 213 && !IS_ARM(board)) - addConversion(FuncPlayBoth, val++); - addConversion(FuncPlayValue, val++); - if (board == BOARD_GRUVIN9X || IS_ARM(board) ) - addConversion(FuncLogs, val++); - if (IS_ARM(board)) - addConversion(FuncVolume, val++); - addConversion(FuncBacklight, val++); - if (IS_ARM(board)) { - addConversion(FuncBackgroundMusic, val++); - addConversion(FuncBackgroundMusicPause, val++); + + if (version >= 216) { + addConversion(FuncTrainer, val); + addConversion(FuncTrainerRUD, val); + addConversion(FuncTrainerELE, val); + addConversion(FuncTrainerTHR, val); + addConversion(FuncTrainerAIL, val); + val++; + } + else { + addConversion(FuncTrainer, val++); + addConversion(FuncTrainerRUD, val++); + addConversion(FuncTrainerELE, val++); + addConversion(FuncTrainerTHR, val++); + addConversion(FuncTrainerAIL, val++); + } + addConversion(FuncInstantTrim, val++); + if (version >= 216) { + addConversion(FuncReset, val++); + if (IS_ARM(board)) { + addConversion(FuncSetTimer1, val); + addConversion(FuncSetTimer2, val); + val++; + } + for (int i=0; i= 213 && !IS_ARM(board)) + addConversion(FuncPlayBoth, val++); + addConversion(FuncPlayValue, val++); + if (IS_ARM(board)) { + addConversion(FuncBackgroundMusic, val++); + addConversion(FuncBackgroundMusicPause, val++); + } + addConversion(FuncVario, val++); + addConversion(FuncPlayHaptic, val++); + if (board == BOARD_GRUVIN9X || IS_ARM(board) ) + addConversion(FuncLogs, val++); + addConversion(FuncBacklight, val++); + } + else { + addConversion(FuncPlaySound, val++); + if (!IS_TARANIS(board)) + addConversion(FuncPlayHaptic, val++); + addConversion(FuncReset, val++); + addConversion(FuncVario, val++); + addConversion(FuncPlayPrompt, val++); + if (version >= 213 && !IS_ARM(board)) + addConversion(FuncPlayBoth, val++); + addConversion(FuncPlayValue, val++); + if (board == BOARD_GRUVIN9X || IS_ARM(board) ) + addConversion(FuncLogs, val++); + if (IS_ARM(board)) + addConversion(FuncVolume, val++); + addConversion(FuncBacklight, val++); + if (IS_ARM(board)) { + addConversion(FuncBackgroundMusic, val++); + addConversion(FuncBackgroundMusicPause, val++); + } + for (int i=0; i<5; i++) + addConversion(FuncAdjustGV1+i, val++); } - for (int i=0; i<5; i++) - addConversion(FuncAdjustGV1+i, val++); } }; @@ -1317,9 +1396,9 @@ class SwitchesWarningField: public TransformedField { unsigned int version; }; -class CustomFunctionField: public TransformedField { +class ArmCustomFunctionField: public TransformedField { public: - CustomFunctionField(FuncSwData & fn, BoardEnum board, unsigned int version, unsigned int variant): + ArmCustomFunctionField(FuncSwData & fn, BoardEnum board, unsigned int version, unsigned int variant): TransformedField(internalField), internalField("CustomFunction"), fn(fn), @@ -1327,201 +1406,334 @@ class CustomFunctionField: public TransformedField { version(version), variant(variant), functionsConversionTable(board, version), - sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, FLAG_NONONE)), - _param(0), - _delay(0), - _union_param(0) + sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, version >= 216 ? 0 : FLAG_NONONE)), + _active(0) { - memset(_arm_param, 0, sizeof(_arm_param)); + memset(_param, 0, sizeof(_param)); internalField.Append(new SwitchField<8>(fn.swtch, board, version)); - if (IS_ARM(board)) { - internalField.Append(new ConversionField< UnsignedField<8> >((unsigned int &)fn.func, &functionsConversionTable, "Function", ::QObject::tr("OpenTX on this board doesn't accept this function"))); - if (IS_TARANIS(board)) - internalField.Append(new CharField<10>(_arm_param)); - else - internalField.Append(new CharField<6>(_arm_param)); - if (version >= 214) { - internalField.Append(new UnsignedField<2>(_mode)); - internalField.Append(new SignedField<6>(_delay)); - } - else { - internalField.Append(new UnsignedField<8>((unsigned int &)_delay)); - } - if (version < 214) - internalField.Append(new SpareBitsField<8>()); + internalField.Append(new ConversionField< UnsignedField<8> >((unsigned int &)fn.func, &functionsConversionTable, "Function", ::QObject::tr("OpenTX on this board doesn't accept this function"))); + + if (IS_TARANIS(board)) + internalField.Append(new CharField<10>(_param, false)); + else + internalField.Append(new CharField<6>(_param, false)); + + if (version >= 216) { + internalField.Append(new UnsignedField<8>(_active)); + } + else if (version >= 214) { + internalField.Append(new UnsignedField<2>(_mode)); + internalField.Append(new UnsignedField<6>(_active)); } else { - if (version >= 213) { - internalField.Append(new UnsignedField<3>(_union_param)); - internalField.Append(new ConversionField< UnsignedField<5> >((unsigned int &)fn.func, &functionsConversionTable, "Function", ::QObject::tr("OpenTX on this board doesn't accept this function"))); - } - else { - internalField.Append(new ConversionField< UnsignedField<7> >((unsigned int &)fn.func, &functionsConversionTable, "Function", ::QObject::tr("OpenTX on this board doesn't accept this function"))); - internalField.Append(new BoolField<1>((bool &)fn.enabled)); - } - internalField.Append(new UnsignedField<8>(_param)); + internalField.Append(new UnsignedField<8>((unsigned int &)_active)); + internalField.Append(new SpareBitsField<8>()); } } virtual void beforeExport() { - if (IS_ARM(board)) { - _mode = 0; - if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue) - _delay = (version >= 216 ? fn.repeatParam : (fn.repeatParam/5)); - else - _delay = (fn.enabled ? 1 : 0); - if (fn.func <= FuncInstantTrim) { - *((uint32_t *)_arm_param) = fn.param; - } - else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic) { - memcpy(_arm_param, fn.paramarm, sizeof(_arm_param)); - } - else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) { - unsigned int value; - if (version >= 214) { - _mode = fn.adjustMode; - if (fn.adjustMode == 1) - sourcesConversionTable->exportValue(fn.param, (int &)value); - else if (fn.adjustMode == 2) - value = RawSource(fn.param).index; - else - value = fn.param; - } - else { - unsigned int value; - sourcesConversionTable->exportValue(fn.param, (int &)value); - } - *((uint32_t *)_arm_param) = value; - } - else if (fn.func == FuncPlayValue || fn.func == FuncVolume) { - unsigned int value; - sourcesConversionTable->exportValue(fn.param, (int &)value); - *((uint32_t *)_arm_param) = value; + _mode = 0; + + if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue) + _active = (version >= 216 ? fn.repeatParam : (fn.repeatParam/5)); + else + _active = (fn.enabled ? 1 : 0); + + if (fn.func >= FuncSafetyCh1 && fn.func <= FuncSafetyCh32) { + if (version >= 216) { + *((uint16_t *)_param) = fn.param; + *((uint8_t *)(_param+3)) = fn.func - FuncSafetyCh1; } else { - *((uint32_t *)_arm_param) = fn.param; + *((uint32_t *)_param) = fn.param; } } + else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerAIL) { + if (version >= 216) + *((uint8_t *)(_param+3)) = fn.func - FuncTrainer; + } + else if (fn.func >= FuncSetTimer1 && fn.func <= FuncSetTimer2) { + if (version >= 216) { + *((uint16_t *)_param) = fn.param; + *((uint8_t *)(_param+3)) = fn.func - FuncSetTimer1; + } + } + else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic) { + memcpy(_param, fn.paramarm, sizeof(_param)); + } + else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) { + if (version >= 216) { + *((uint8_t *)(_param+2)) = fn.adjustMode; + *((uint8_t *)(_param+3)) = fn.func - FuncAdjustGV1; + unsigned int value; + if (fn.adjustMode == 1) + sourcesConversionTable->exportValue(fn.param, (int &)value); + else if (fn.adjustMode == 2) + value = RawSource(fn.param).index; + else + value = fn.param; + *((uint16_t *)_param) = value; + } + else if (version >= 214) { + unsigned int value; + _mode = fn.adjustMode; + if (fn.adjustMode == 1) + sourcesConversionTable->exportValue(fn.param, (int &)value); + else if (fn.adjustMode == 2) + value = RawSource(fn.param).index; + else + value = fn.param; + *((uint32_t *)_param) = value; + } + else { + unsigned int value; + sourcesConversionTable->exportValue(fn.param, (int &)value); + *((uint32_t *)_param) = value; + } + } + else if (fn.func == FuncPlayValue || fn.func == FuncVolume) { + unsigned int value; + sourcesConversionTable->exportValue(fn.param, (int &)value); + if (version >= 216) + *((uint16_t *)_param) = value; + else + *((uint32_t *)_param) = value; + } else { - /* the default behavior */ - _param = fn.param; - _union_param = (fn.enabled ? 1 : 0); - if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) { - if (version >= 213) { - _union_param += (fn.adjustMode << 1); - if (fn.adjustMode == 1) - sourcesConversionTable->exportValue(fn.param, (int &)_param); - else if (fn.adjustMode == 2) - _param = RawSource(fn.param).index; - } - else { - sourcesConversionTable->exportValue(fn.param, (int &)_param); - } - } - else if (fn.func == FuncPlayValue) { - if (version >= 213) { - _union_param = fn.repeatParam / 10; - sourcesConversionTable->exportValue(fn.param, (int &)_param); - } - else { - SourcesConversionTable::getInstance(board, version, variant, FLAG_NONONE|FLAG_NOSWITCHES)->exportValue(fn.param, (int &)_param); - } - } - else if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayBoth) { - if (version >= 213) - _union_param = fn.repeatParam / 10; - } - else if (fn.func <= FuncSafetyCh16) { - if (version >= 213) - _union_param += ((fn.func % 4) << 1); - } + *((uint32_t *)_param) = fn.param; } } virtual void afterImport() { - if (IS_ARM(board)) { - if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue) - fn.repeatParam = (version >= 216 ? _delay : (_delay*5)); - else - fn.enabled = (_delay & 0x01); + if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue) + fn.repeatParam = (version >= 216 ? _active : (_active*5)); + else + fn.enabled = (_active & 0x01); - unsigned int value = *((uint32_t *)_arm_param); - if (fn.func <= FuncTrainer) { - fn.param = (int)value; - } - else if (fn.func <= FuncInstantTrim) { - fn.param = value; - } - else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic) { - memcpy(fn.paramarm, _arm_param, sizeof(fn.paramarm)); - } - else if (fn.func == FuncVolume) { - sourcesConversionTable->importValue(value, (int &)fn.param); - } - else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) { - if (version >= 214) { - fn.adjustMode = _mode; - if (fn.adjustMode == 1) - sourcesConversionTable->importValue(value, (int &)fn.param); - else if (fn.adjustMode == 2) - fn.param = RawSource(SOURCE_TYPE_GVAR, value).toValue(); - else - fn.param = value; - } - else { - sourcesConversionTable->importValue(value, (int &)fn.param); - } - } - else if (fn.func == FuncPlayValue) { - if (version >= 213) - sourcesConversionTable->importValue(value, (int &)fn.param); - else - SourcesConversionTable::getInstance(board, version, variant, FLAG_NONONE|FLAG_NOSWITCHES)->importValue(value, (int &)fn.param); - } - else { - fn.param = value; - } + unsigned int value=0, mode=0, index=0; + if (version >= 216) { + value = *((uint16_t *)_param); + mode = *((uint8_t *)(_param+2)); + index = *((uint8_t *)(_param+3)); } else { - fn.param = _param; - if (version >= 213) { - fn.enabled = (_union_param & 0x01); + value = *((uint32_t *)_param); + } + + if (fn.func >= FuncSafetyCh1 && fn.func <= FuncSafetyCh32) { + fn.func = AssignFunc(fn.func + index); + fn.param = (int)value; + } + else if (fn.func >= FuncSetTimer1 && fn.func <= FuncSetTimer2) { + fn.func = AssignFunc(fn.func + index); + fn.param = (int)value; + } + else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerAIL) { + fn.func = AssignFunc(fn.func + index); + fn.param = value; + } + else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic) { + memcpy(fn.paramarm, _param, sizeof(fn.paramarm)); + } + else if (fn.func == FuncVolume) { + sourcesConversionTable->importValue(value, (int &)fn.param); + } + else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) { + if (version >= 216) { + fn.func = AssignFunc(fn.func + index); + fn.adjustMode = mode; + if (fn.adjustMode == 1) + sourcesConversionTable->importValue(value, (int &)fn.param); + else if (fn.adjustMode == 2) + fn.param = RawSource(SOURCE_TYPE_GVAR, value).toValue(); + else + fn.param = value; } - if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) { - if (version >= 213) { - fn.adjustMode = ((_union_param >> 1) & 0x03); - if (fn.adjustMode == 1) - sourcesConversionTable->importValue(_param, (int &)fn.param); - else if (fn.adjustMode == 2) - fn.param = RawSource(SOURCE_TYPE_GVAR, _param).toValue(); - } - else { - sourcesConversionTable->importValue(_param, (int &)fn.param); - } + else if (version >= 214) { + fn.adjustMode = _mode; + if (fn.adjustMode == 1) + sourcesConversionTable->importValue(value, (int &)fn.param); + else if (fn.adjustMode == 2) + fn.param = RawSource(SOURCE_TYPE_GVAR, value).toValue(); + else + fn.param = value; } - else if (fn.func == FuncPlayValue) { - if (version >= 213) { - fn.repeatParam = _union_param * 10; - sourcesConversionTable->importValue(_param, (int &)fn.param); - } - else { - SourcesConversionTable::getInstance(board, version, variant, FLAG_NONONE|FLAG_NOSWITCHES)->importValue(_param, (int &)fn.param); - } - } - else if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayBoth) { - if (version >= 213) - fn.repeatParam = _union_param * 10; - } - else if (fn.func <= FuncSafetyCh16) { - if (version >= 213) { - fn.func = AssignFunc(((fn.func >> 2) << 2) + ((_union_param >> 1) & 0x03)); - } - fn.param = (int8_t)fn.param; + else { + sourcesConversionTable->importValue(value, (int &)fn.param); } } + else if (fn.func == FuncPlayValue) { + if (version >= 213) + sourcesConversionTable->importValue(value, (int &)fn.param); + else + SourcesConversionTable::getInstance(board, version, variant, FLAG_NONONE|FLAG_NOSWITCHES)->importValue(value, (int &)fn.param); + } + else { + fn.param = value; + } + } + + protected: + StructField internalField; + FuncSwData & fn; + BoardEnum board; + unsigned int version; + unsigned int variant; + CustomFunctionsConversionTable functionsConversionTable; + SourcesConversionTable * sourcesConversionTable; + char _param[10]; + unsigned int _active; + unsigned int _mode; +}; + +class AvrCustomFunctionField: public TransformedField { + public: + AvrCustomFunctionField(FuncSwData & fn, BoardEnum board, unsigned int version, unsigned int variant): + TransformedField(internalField), + internalField("CustomFunction"), + fn(fn), + board(board), + version(version), + variant(variant), + functionsConversionTable(board, version), + sourcesConversionTable(SourcesConversionTable::getInstance(board, version, variant, version >= 216 ? 0 : FLAG_NONONE)), + _param(0), + _union_param(0), + _active(0) + { + if (version >= 216) { + internalField.Append(new SwitchField<6>(fn.swtch, board, version)); + internalField.Append(new ConversionField< UnsignedField<4> >((unsigned int &)fn.func, &functionsConversionTable, "Function", ::QObject::tr("OpenTX on this board doesn't accept this function"))); + internalField.Append(new UnsignedField<5>(_union_param)); + internalField.Append(new UnsignedField<1>(_active)); + } + if (version >= 213) { + internalField.Append(new SwitchField<8>(fn.swtch, board, version)); + internalField.Append(new UnsignedField<3>(_union_param)); + internalField.Append(new ConversionField< UnsignedField<5> >((unsigned int &)fn.func, &functionsConversionTable, "Function", ::QObject::tr("OpenTX on this board doesn't accept this function"))); + } + else { + internalField.Append(new SwitchField<8>(fn.swtch, board, version)); + internalField.Append(new ConversionField< UnsignedField<7> >((unsigned int &)fn.func, &functionsConversionTable, "Function", ::QObject::tr("OpenTX on this board doesn't accept this function"))); + internalField.Append(new BoolField<1>((bool &)fn.enabled)); + } + internalField.Append(new UnsignedField<8>(_param)); + } + + virtual void beforeExport() + { + _param = fn.param; + _active = (fn.enabled ? 1 : 0); + + if (fn.func >= FuncSafetyCh1 && fn.func <= FuncSafetyCh32) { + if (version >= 216) + _union_param = fn.func - FuncSafetyCh1; + else if (version >= 213) + _active += ((fn.func % 4) << 1); + } + else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerAIL) { + if (version >= 216) + _union_param = fn.func - FuncTrainer; + } + else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) { + if (version >= 216) { + _union_param = fn.adjustMode; + _union_param += (fn.func - FuncAdjustGV1) << 2; + if (fn.adjustMode == 1) + sourcesConversionTable->exportValue(fn.param, (int &)_param); + else if (fn.adjustMode == 2) + _param = RawSource(fn.param).index; + } + else if (version >= 213) { + _active += (fn.adjustMode << 1); + if (fn.adjustMode == 1) + sourcesConversionTable->exportValue(fn.param, (int &)_param); + else if (fn.adjustMode == 2) + _param = RawSource(fn.param).index; + } + else { + sourcesConversionTable->exportValue(fn.param, (int &)_param); + } + } + else if (fn.func == FuncPlayValue) { + if (version >= 216) { + _union_param = fn.repeatParam / 10; + sourcesConversionTable->exportValue(fn.param, (int &)_param); + } + else if (version >= 213) { + _active = fn.repeatParam / 10; + sourcesConversionTable->exportValue(fn.param, (int &)_param); + } + else { + SourcesConversionTable::getInstance(board, version, variant, FLAG_NONONE|FLAG_NOSWITCHES)->exportValue(fn.param, (int &)_param); + } + } + else if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayBoth) { + if (version >= 216) { + _union_param = fn.repeatParam / 10; + } + else if (version >= 213) { + _active = fn.repeatParam / 10; + } + } + } + + virtual void afterImport() + { + fn.param = _param; + if (version >= 213) { + fn.enabled = (_active & 0x01); + } + + if (fn.func >= FuncSafetyCh1 && fn.func <= FuncSafetyCh32) { + if (version >= 216) + fn.func = AssignFunc(fn.func + _union_param); + else if (version >= 213) + fn.func = AssignFunc(((fn.func >> 2) << 2) + ((_active >> 1) & 0x03)); + fn.param = (int8_t)fn.param; + } + else if (fn.func >= FuncTrainer && fn.func <= FuncTrainerAIL) { + if (version >= 216) + fn.func = AssignFunc(fn.func + _union_param); + } + else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) { + if (version >= 216) { + fn.func = AssignFunc(fn.func + (_union_param >> 2)); + fn.adjustMode = (_union_param & 0x03); + } + else if (version >= 213) { + fn.adjustMode = ((_active >> 1) & 0x03); + if (fn.adjustMode == 1) + sourcesConversionTable->importValue(_param, (int &)fn.param); + else if (fn.adjustMode == 2) + fn.param = RawSource(SOURCE_TYPE_GVAR, _param).toValue(); + } + else { + sourcesConversionTable->importValue(_param, (int &)fn.param); + } + } + else if (fn.func == FuncPlayValue) { + if (version >= 216) { + fn.repeatParam = _union_param * 10; + sourcesConversionTable->importValue(_param, (int &)fn.param); + } + else if (version >= 213) { + fn.repeatParam = _active * 10; + sourcesConversionTable->importValue(_param, (int &)fn.param); + } + else { + SourcesConversionTable::getInstance(board, version, variant, FLAG_NONONE|FLAG_NOSWITCHES)->importValue(_param, (int &)fn.param); + } + } + else if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayBoth) { + if (version >= 216) + fn.repeatParam = _union_param * 10; + else if (version >= 213) + fn.repeatParam = _active * 10; + } } protected: @@ -1532,11 +1744,10 @@ class CustomFunctionField: public TransformedField { unsigned int variant; CustomFunctionsConversionTable functionsConversionTable; SourcesConversionTable * sourcesConversionTable; - char _arm_param[10]; unsigned int _param; - int _delay; unsigned int _mode; unsigned int _union_param; + unsigned int _active; }; class FrskyScreenField: public DataField { @@ -1812,7 +2023,7 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u } for (int i=0; i(modelData.timers[i].mode, board, version, POPULATE_TIMER_MODES)); if ((IS_ARM(board) || IS_2560(board)) && version >= 216) { internalField.Append(new UnsignedField<16>(modelData.timers[i].val)); internalField.Append(new UnsignedField<2>(modelData.timers[i].countdownBeep)); @@ -1888,9 +2099,13 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u internalField.Append(new ExpoField(modelData.expoData[i], board, version)); internalField.Append(new CurvesField(modelData.curves, board, version)); for (int i=0; i= 216) { + int count = 0; + for (int i=0; iaddOptions(ext_options); open9x->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); open9x->addOption("templates", QObject::tr("Enable TEMPLATES menu")); @@ -1052,7 +1052,7 @@ void RegisterOpen9xFirmwares() firmwares.push_back(open9x); /* 9x board with M128 chip */ - open9x = new Open9xFirmware("opentx-9x128", QObject::tr("openTx for M128 / 9X board"), new Open9xInterface(BOARD_M128), geturl(BOARD_M128), getstamp(BOARD_M128),getrnurl(BOARD_M128), false); + open9x = new Open9xFirmware("opentx-9x128", QObject::tr("OpenTX for M128 / 9X board"), new Open9xInterface(BOARD_M128), geturl(BOARD_M128), getstamp(BOARD_M128),getrnurl(BOARD_M128), false); open9x->addOptions(ext_options); open9x->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); open9x->addOption("templates", QObject::tr("Enable TEMPLATES menu")); @@ -1084,7 +1084,7 @@ void RegisterOpen9xFirmwares() firmwares.push_back(open9x); /* 9XR board */ - open9x = new Open9xFirmware("opentx-9xr", QObject::tr("openTx for 9XR"), new Open9xInterface(BOARD_STOCK), geturl(BOARD_STOCK), getstamp(BOARD_STOCK),getrnurl(BOARD_STOCK), false); + open9x = new Open9xFirmware("opentx-9xr", QObject::tr("OpenTX for 9XR"), new Open9xInterface(BOARD_STOCK), geturl(BOARD_STOCK), getstamp(BOARD_STOCK),getrnurl(BOARD_STOCK), false); open9x->addOptions(extr_options); open9x->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); open9x->addOption("templates", QObject::tr("Enable TEMPLATES menu")); @@ -1118,7 +1118,7 @@ void RegisterOpen9xFirmwares() firmwares.push_back(open9x); /* 9XR board with M128 chip */ - open9x = new Open9xFirmware("opentx-9xr128", QObject::tr("openTx for 9XR with M128 chip"), new Open9xInterface(BOARD_M128), geturl(BOARD_M128), getstamp(BOARD_M128),getrnurl(BOARD_M128), false); + open9x = new Open9xFirmware("opentx-9xr128", QObject::tr("OpenTX for 9XR with M128 chip"), new Open9xInterface(BOARD_M128), geturl(BOARD_M128), getstamp(BOARD_M128),getrnurl(BOARD_M128), false); open9x->addOptions(extr_options); open9x->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); open9x->addOption("templates", QObject::tr("Enable TEMPLATES menu")); @@ -1148,7 +1148,7 @@ void RegisterOpen9xFirmwares() firmwares.push_back(open9x); /* Gruvin9x board */ - open9x = new Open9xFirmware("opentx-gruvin9x", QObject::tr("openTx for Gruvin9x board / 9X"), new Open9xInterface(BOARD_GRUVIN9X), geturl(BOARD_GRUVIN9X), getstamp(BOARD_GRUVIN9X),getrnurl(BOARD_GRUVIN9X), false); + open9x = new Open9xFirmware("opentx-gruvin9x", QObject::tr("OpenTX for Gruvin9x board / 9X"), new Open9xInterface(BOARD_GRUVIN9X), geturl(BOARD_GRUVIN9X), getstamp(BOARD_GRUVIN9X),getrnurl(BOARD_GRUVIN9X), false); open9x->setVariantBase(FRSKY_VARIANT); open9x->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); open9x->addOption("templates", QObject::tr("Enable TEMPLATES menu")); @@ -1178,7 +1178,7 @@ void RegisterOpen9xFirmwares() #ifndef __APPLE__ /* SKY9X board */ - open9x = new Open9xFirmware("opentx-sky9x", QObject::tr("openTx for Sky9x board / 9X"), new Open9xInterface(BOARD_SKY9X), geturl(BOARD_SKY9X), getstamp(BOARD_SKY9X),getrnurl(BOARD_SKY9X), true); + open9x = new Open9xFirmware("opentx-sky9x", QObject::tr("OpenTX for Sky9x board / 9X"), new Open9xInterface(BOARD_SKY9X), geturl(BOARD_SKY9X), getstamp(BOARD_SKY9X),getrnurl(BOARD_SKY9X), true); open9x->setVariantBase(FRSKY_VARIANT); open9x->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support")); open9x->addOption("templates", QObject::tr("Enable TEMPLATES menu")); @@ -1203,7 +1203,7 @@ void RegisterOpen9xFirmwares() #endif /* Taranis board */ - open9x = new Open9xFirmware("opentx-taranis", QObject::tr("openTx for FrSky Taranis"), new Open9xInterface(BOARD_TARANIS), geturl(BOARD_TARANIS), getstamp(BOARD_TARANIS),getrnurl(BOARD_TARANIS), true); + open9x = new Open9xFirmware("opentx-taranis", QObject::tr("OpenTX for FrSky Taranis"), new Open9xInterface(BOARD_TARANIS), geturl(BOARD_TARANIS), getstamp(BOARD_TARANIS),getrnurl(BOARD_TARANIS), true); open9x->addOption("noheli", QObject::tr("Disable HELI menu and cyclic mix support")); open9x->addOption("notemplates", QObject::tr("Disable TEMPLATES menu")); open9x->addOption("nogvars", QObject::tr("Disable Global variables")); @@ -1215,7 +1215,7 @@ void RegisterOpen9xFirmwares() QSettings settings; int rev4a = settings.value("rev4asupport",0).toInt(); if (rev4a) { - open9x = new Open9xFirmware("opentx-taranisrev4a", QObject::tr("openTx for FrSky Taranis Rev4a"), new Open9xInterface(BOARD_TARANIS_REV4a), geturl(BOARD_TARANIS_REV4a), getstamp(BOARD_TARANIS_REV4a),getrnurl(BOARD_TARANIS), true); + open9x = new Open9xFirmware("opentx-taranisrev4a", QObject::tr("OpenTX for FrSky Taranis Rev4a"), new Open9xInterface(BOARD_TARANIS_REV4a), geturl(BOARD_TARANIS_REV4a), getstamp(BOARD_TARANIS_REV4a),getrnurl(BOARD_TARANIS), true); open9x->addOption("noheli", QObject::tr("Disable HELI menu and cyclic mix support")); open9x->addOption("notemplates", QObject::tr("Disable TEMPLATES menu")); open9x->addOption("nogvars", QObject::tr("Disable Global variables")); diff --git a/companion/src/firmwares/th9x/th9xeeprom.cpp b/companion/src/firmwares/th9x/th9xeeprom.cpp index 8df98e04b..daafb48b2 100644 --- a/companion/src/firmwares/th9x/th9xeeprom.cpp +++ b/companion/src/firmwares/th9x/th9xeeprom.cpp @@ -2,18 +2,6 @@ #include "helpers.h" #include "th9xeeprom.h" -int8_t th9xFromSwitch(const RawSwitch & sw) -{ - switch (sw.type) { - case SWITCH_TYPE_SWITCH: - return sw.index; - case SWITCH_TYPE_VIRTUAL: - return sw.index > 0 ? (9 + sw.index) : (-9 -sw.index); - default: - return 0; - } -} - RawSwitch th9xToSwitch(int8_t sw) { if (sw == 0) @@ -181,22 +169,22 @@ t_Th9xMixData::operator MixData () return c9x; } -t_Th9xCustomSwData::operator CustomSwData () +t_Th9xLogicalSwitchData::operator LogicalSwitchData () { - CustomSwData c9x; + LogicalSwitchData c9x; c9x.func = opCmp; c9x.val1 = val1; c9x.val2 = val2; - if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) { + if ((c9x.func >= LS_FN_VPOS && c9x.func <= LS_FN_ANEG) || c9x.func >= LS_FN_EQUAL) { c9x.val1 = toSource(val1).toValue(); } - if (c9x.func >= CS_FN_EQUAL) { + if (c9x.func >= LS_FN_EQUAL) { c9x.val2 = toSource(val2).toValue(); } - if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) { + if (c9x.func >= LS_FN_AND && c9x.func <= LS_FN_XOR) { c9x.val1 = th9xToSwitch(val1).toValue(); c9x.val2 = th9xToSwitch(val2).toValue(); } @@ -204,7 +192,7 @@ t_Th9xCustomSwData::operator CustomSwData () return c9x; } -int8_t t_Th9xCustomSwData::fromSource(RawSource source) +int8_t t_Th9xLogicalSwitchData::fromSource(RawSource source) { int v1 = 0; if (source.type == SOURCE_TYPE_STICK) @@ -228,7 +216,7 @@ int8_t t_Th9xCustomSwData::fromSource(RawSource source) return v1; } -RawSource t_Th9xCustomSwData::toSource(int8_t value) +RawSource t_Th9xLogicalSwitchData::toSource(int8_t value) { if (value == 0) { return RawSource(SOURCE_TYPE_NONE); @@ -266,7 +254,7 @@ t_Th9xModelData::operator ModelData () ModelData c9x; c9x.used = true; getEEPROMString(c9x.name, name, sizeof(name)); - switch(tmrMode) { + /*switch(tmrMode) { case 1: c9x.timers[0].mode = TMRMODE_ABS; break; @@ -279,7 +267,7 @@ t_Th9xModelData::operator ModelData () default: c9x.timers[0].mode = TMRMODE_OFF; break; - } + }*/ // c9x.timers[0].dir = tmrDir; c9x.timers[0].val = tmrVal; /*c9x.protocol = (Protocol)protocol; diff --git a/companion/src/firmwares/th9x/th9xeeprom.h b/companion/src/firmwares/th9x/th9xeeprom.h index 294a33a0c..467b09c68 100644 --- a/companion/src/firmwares/th9x/th9xeeprom.h +++ b/companion/src/firmwares/th9x/th9xeeprom.h @@ -138,18 +138,18 @@ PACK(typedef struct t_Th9xMixData { t_Th9xMixData(); }) Th9xMixData; -PACK(typedef struct t_Th9xCustomSwData { +PACK(typedef struct t_Th9xLogicalSwitchData { uint8_t sw:3; // 0..7 uint8_t opCmp:2; // < & | ^ uint8_t opRes:3; // 0 => 1=> 0=> !=> & | ^ int8_t val1; int8_t val2; - operator CustomSwData(); - t_Th9xCustomSwData() { memset(this, 0, sizeof(t_Th9xCustomSwData)); } + operator LogicalSwitchData(); + t_Th9xLogicalSwitchData() { memset(this, 0, sizeof(t_Th9xLogicalSwitchData)); } int8_t fromSource(RawSource source); RawSource toSource(int8_t value); -}) Th9xCustomSwData; +}) Th9xLogicalSwitchData; PACK(typedef struct t_Th9xTrimData { int8_t itrim:6; //trim index @@ -173,7 +173,7 @@ PACK(typedef struct t_Th9xModelData { int8_t curves3[TH9X_MAX_CURVES3][3]; // 9 new143 int8_t curves5[TH9X_MAX_CURVES5][5]; // 10 int8_t curves9[TH9X_MAX_CURVES9][9]; // 18 - Th9xCustomSwData switchTab[TH9X_MAX_SWITCHES];// + Th9xLogicalSwitchData switchTab[TH9X_MAX_SWITCHES];// Th9xTrimData trimData[NUM_STICKS]; // 3*4 -> 1*4 operator ModelData(); t_Th9xModelData(); diff --git a/companion/src/firmwares/th9x/th9xinterface.cpp b/companion/src/firmwares/th9x/th9xinterface.cpp index 9bd0cbc4a..8e3e36ab6 100644 --- a/companion/src/firmwares/th9x/th9xinterface.cpp +++ b/companion/src/firmwares/th9x/th9xinterface.cpp @@ -157,7 +157,7 @@ int Th9xInterface::getCapability(const Capability capability) return 9; case CustomFunctions: return 0; - case CustomSwitches: + case LogicalSwitches: return TH9X_MAX_SWITCHES; case Outputs: return 8; diff --git a/companion/src/fwpreferencesdialog.cpp b/companion/src/fwpreferencesdialog.cpp new file mode 100644 index 000000000..2dfce0e73 --- /dev/null +++ b/companion/src/fwpreferencesdialog.cpp @@ -0,0 +1,507 @@ +#include "fwpreferencesdialog.h" +#include "ui_fwpreferencesdialog.h" +#include "mainwindow.h" +#include "eeprominterface.h" +#include "helpers.h" +#include +#include + +fwPreferencesDialog::fwPreferencesDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::fwPreferencesDialog), + updateLock(false) +{ + ui->setupUi(this); + setWindowIcon(CompanionIcon("preferences.png")); + + QCheckBox * OptionCheckBox[]= { + ui->optionCheckBox_1, ui->optionCheckBox_2, ui->optionCheckBox_3, ui->optionCheckBox_4, ui->optionCheckBox_5, ui->optionCheckBox_6, ui->optionCheckBox_7, + ui->optionCheckBox_8, ui->optionCheckBox_9, ui->optionCheckBox_10, ui->optionCheckBox_11, ui->optionCheckBox_12, ui->optionCheckBox_13, ui->optionCheckBox_14, + ui->optionCheckBox_15,ui->optionCheckBox_16, ui->optionCheckBox_17, ui->optionCheckBox_18, ui->optionCheckBox_19, ui->optionCheckBox_20, ui->optionCheckBox_21, + ui->optionCheckBox_22, ui->optionCheckBox_23, ui->optionCheckBox_24, ui->optionCheckBox_25, ui->optionCheckBox_26, ui->optionCheckBox_27, ui->optionCheckBox_28, + ui->optionCheckBox_29, ui->optionCheckBox_30, ui->optionCheckBox_31, ui->optionCheckBox_32, ui->optionCheckBox_33, ui->optionCheckBox_34, ui->optionCheckBox_35, + ui->optionCheckBox_36, ui->optionCheckBox_37, ui->optionCheckBox_38, ui->optionCheckBox_39, ui->optionCheckBox_40, ui->optionCheckBox_41, ui->optionCheckBox_42, + NULL }; + + voice=NULL; + + connect(ui->langCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(firmwareLangChanged())); + connect(ui->voiceCombo, SIGNAL(currentIndexChanged(int)), this, SLOT(firmwareLangChanged())); + + for (int i=0; OptionCheckBox[i]; i++) { + optionsCheckBoxes.push_back(OptionCheckBox[i]); + connect(OptionCheckBox[i], SIGNAL(toggled(bool)), this, SLOT(firmwareOptionChanged(bool))); + } + + initSettings(); + + connect(ui->downloadVerCB, SIGNAL(currentIndexChanged(int)), this, SLOT(baseFirmwareChanged())); + connect(this, SIGNAL(accepted()), this, SLOT(writeValues())); + + resize(0,0); +} + + +fwPreferencesDialog::~fwPreferencesDialog() +{ + delete ui; +} + +void fwPreferencesDialog::baseFirmwareChanged() +{ + QVariant selected_firmware = ui->downloadVerCB->itemData(ui->downloadVerCB->currentIndex()); + voice=NULL; + foreach(FirmwareInfo * firmware, firmwares) { + if (firmware->id == selected_firmware) { + if (firmware->voice) { + ui->voiceLabel->show(); + ui->voiceCombo->show(); + ui->voice_dnld->show(); + ui->sdPathButton->show(); + ui->sdPath->show(); + ui->sdPathLabel->show(); + ui->voiceLabel->setEnabled(true); + ui->voiceCombo->setEnabled(true); + ui->voice_dnld->setEnabled(true); + ui->sdPathButton->setEnabled(true); + ui->sdPath->setEnabled(true); + } else { + ui->voiceLabel->hide(); + ui->voiceCombo->hide(); + ui->voice_dnld->hide(); + ui->sdPathButton->hide(); + ui->sdPath->hide(); + ui->sdPathLabel->hide(); + } + populateFirmwareOptions(firmware); + break; + } + } + firmwareChanged(); +} + +FirmwareVariant fwPreferencesDialog::getFirmwareVariant() +{ + QVariant selected_firmware = ui->downloadVerCB->itemData(ui->downloadVerCB->currentIndex()); + bool voice=false; + foreach(FirmwareInfo * firmware, firmwares) { + if (firmware->id == selected_firmware) { + QString id = firmware->id; + foreach(QCheckBox *cb, optionsCheckBoxes) { + if (cb->isChecked()) { + if (cb->text()=="voice" && cb->isChecked()) + voice=true; + id += QString("-") + cb->text(); + } + } + if (! firmware->eepromInterface->getCapability(MultiLangVoice)) { + if (ui->voiceCombo->count() && (voice || firmware->voice)) + id += QString("-tts") + ui->voiceCombo->currentText(); + } + if (ui->langCombo->count()) + id += QString("-") + ui->langCombo->currentText(); + + return GetFirmwareVariant(id); + } + } + + // Should never occur... + return default_firmware_variant; +} + +void fwPreferencesDialog::firmwareLangChanged() +{ + firmwareChanged(); +} + +void fwPreferencesDialog::firmwareOptionChanged(bool state) +{ + QCheckBox *cb = qobject_cast(sender()); + FirmwareInfo * firmware=NULL; + if (cb && state) { + QVariant selected_firmware = ui->downloadVerCB->itemData(ui->downloadVerCB->currentIndex()); + foreach(firmware, firmwares) { + if (firmware->id == selected_firmware) { + foreach(QList

"+tr("Logical Switches")+"

"); - for (int i=0; igetCapability(CustomSwitches); i++) { + for (int i=0; igetCapability(LogicalSwitches); i++) { if (g_model->customSw[i].func) { str.append(""); if (i<9) { @@ -651,7 +650,7 @@ void printDialog::printSwitches() } else { str.append(""); } - QString tstr = getCustomSwitchStr(&g_model->customSw[i], *g_model); + QString tstr = g_model->customSw[i].toString(*g_model); str.append(doTC(tstr,"green")); str.append(""); sc++; @@ -693,33 +692,6 @@ void printDialog::printGvars() } } -void printDialog::printSafetySwitches() -{ - int sc=0; - QString str = "
"+tr("LS")+('A'+(i-9))+"
"; - str.append(""); - str.append("

"+tr("Safety Switches")+"

"); - str.append(""); - str.append(doTC(tr("Switch"), "", true)); - str.append(doTL(tr("Value"), "", true)); - str.append(""); - for(int i=0; igetCapability(Outputs); i++) - { - if (g_model->safetySw[i].swtch.type) { - str.append(""); - str.append(doTC(tr("CH")+QString("%1").arg(i+1),"",true)); - str.append(doTC(g_model->safetySw[i].swtch.toString(),"green")); - str.append(doTC(QString::number(g_model->safetySw[i].val),"green")); - str.append(""); - sc++; - } - } - str.append("
 
"); - str.append("
"); - if (sc!=0) - te->append(str); -} - void printDialog::printFSwitches() { int sc=0; @@ -736,8 +708,8 @@ void printDialog::printFSwitches() if (g_model->funcSw[i].swtch.type!=SWITCH_TYPE_NONE) { str.append("