1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-23 08:15:17 +03:00

Merge branch 'next' of https://github.com/opentx/opentx into kilrah/Switch_and_pot_warnings

Conflicts:
	companion/src/firmwares/opentx/opentxeeprom.cpp
	radio/src/gui/menu_model.cpp
	radio/src/opentx.cpp
	radio/src/telemetry/frsky.cpp
	radio/src/translations.cpp
	radio/src/translations.h
	radio/src/translations/cz.h.txt
	radio/src/translations/de.h.txt
	radio/src/translations/en.h
	radio/src/translations/es.h.txt
	radio/src/translations/fr.h.txt
	radio/src/translations/it.h.txt
	radio/src/translations/pl.h.txt
	radio/src/translations/pt.h.txt
	radio/src/translations/se.h.txt
This commit is contained in:
Andre Bernet 2014-02-01 13:19:27 +01:00
commit 856ffd4ed7
1067 changed files with 20220 additions and 8907 deletions

View file

@ -95,8 +95,8 @@ Heinrich Illig
Michael Collins
Michael Manning
Craig Lorentz
Jonathan Modellismo - http://jonathan.it
Aviomotive - http://www.aviomotive.com
Jonathan Modellismo - jonathan.it
Aviomotive - www.aviomotive.com
André Lasseret
Felipe Alexandre de Oliveira
Brian Harris
@ -126,7 +126,7 @@ Larisa Filocamo
Alex Calderhead
Hartmut Sahm
Åke Brodin
Aloft Hobbies - http://www.alofthobbies.com
Aloft Hobbies - www.alofthobbies.com
Ted Moss
Filippos Tigarakis
Chewytm
@ -288,3 +288,25 @@ Josep Clodas Sola
Thierry Martin
Peter Mauro
Mitchell Brenner
Ulach Green
Lluis Bullich Rañe
Steffen Rohr
Eric Jacquin
Harvest Lane
Ville Kuvaja
DK-System
Heinz Vogel
Heung Jin Choi
MMJS van der Helm
Dan Neelands
Yashiro Masayuki
Isaac Sloan
Harold Baird
Roy Bender
Bradley Murchie
Maximilian Süß
Dean Jansa
Ronald Donker
Paul Oldenkamp
Dietmar Drees
Bradley Murchie

8
README.md Normal file
View file

@ -0,0 +1,8 @@
##OpenTX Next Branch
You have found your way to the GitHub repository site for the OpenTX Next Branch. This code branch holds the source code for the ongoing development.
The stable release code is not here, it is in the master branch.
Under no circumstances build and use software from this branch for real world application. At times you will be more or less guaranteed to crash your plane and destroy all your model settings.
Refer to the opentx.wiki for information about setting up the tool chains for building OpenTX and OpenTX Companion as well as other development related issues.

View file

@ -1 +0,0 @@
[to be written]

View file

@ -1,7 +1,7 @@
PROJECT( companion )
SET( C9X_VERSION_MAJOR "1" )
SET( C9X_VERSION_MINOR "51" )
SET( C9X_VERSION_MINOR "52" )
SET( C9X_VERSION ${C9X_VERSION_MAJOR}.${C9X_VERSION_MINOR} )
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )
@ -109,6 +109,15 @@ add_custom_command(
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/firmwares/ersky9x/ersky9xsimulator.cpp
)
set(RADIO_SRC_DIRECTORY ${PROJECT_SOURCE_DIR}/../../radio/src)
add_custom_command(
OUTPUT ${RADIO_SRC_DIRECTORY}/bitmaps/sticks.lbm
COMMAND make lbm
DEPENDS ${RADIO_SRC_DIRECTORY}/bitmaps/sticks_4x1.xbm
WORKING_DIRECTORY ${RADIO_SRC_DIRECTORY}
)
add_subdirectory(modeledit)
SET( companion_SRCS
@ -139,6 +148,7 @@ SET( companion_SRCS
firmwares/ersky9x/ersky9xeeprom.cpp
firmwares/ersky9x/ersky9xinterface.cpp
${ERSKY9X_CHECKOUT_DIRECTORY}/ersky9xsimulator.cpp
${RADIO_SRC_DIRECTORY}/bitmaps/sticks.lbm
helpers.cpp
mdichild.cpp
generaledit.cpp
@ -286,7 +296,7 @@ INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR} )
INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR} )
SET( LANGUAGES he pt ru de fr it sv cs )
SET( LANGUAGES he pl pt ru de fr it sv cs )
FOREACH( language ${LANGUAGES} )
SET( companion_TS ${companion_TS} translations/companion_${language}.ts )
ENDFOREACH( language )
@ -309,6 +319,9 @@ TARGET_LINK_LIBRARIES( ${PROJECT_NAME} modeledit ${QT_LIBRARIES} ${QT_QTMAIN_LIB
IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
INSTALL( TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin )
INSTALL( FILES companion.desktop DESTINATION share/applications )
INSTALL( FILES images/linuxicons/16x16/companion.png DESTINATION /usr/share/icons/hicolor/16x16/apps )
INSTALL( FILES images/linuxicons/22x22/companion.png DESTINATION /usr/share/icons/hicolor/22x22/apps )
INSTALL( FILES images/linuxicons/24x24/companion.png DESTINATION /usr/share/icons/hicolor/24x24/apps )
INSTALL( FILES images/linuxicons/32x32/companion.png DESTINATION /usr/share/icons/hicolor/32x32/apps )
INSTALL( FILES images/linuxicons/48x48/companion.png DESTINATION /usr/share/icons/hicolor/48x48/apps )
INSTALL( FILES images/linuxicons/128x128/companion.png DESTINATION /usr/share/icons/hicolor/128x128/apps )

View file

@ -2,6 +2,7 @@
#include "ui_burnconfigdialog.h"
#include "avroutputdialog.h"
#include "eeprominterface.h"
#include "helpers.h"
#include <QtGui>
#if !defined WIN32 && defined __GNUC__
@ -82,7 +83,7 @@ burnConfigDialog::~burnConfigDialog()
void burnConfigDialog::getSettings()
{
QSettings settings("companion9x", "companion9x");
QSettings settings;
#if defined WIN32 || !defined __GNUC__
avrLoc = settings.value("avrdude_location", QFileInfo("avrdude.exe").absoluteFilePath()).toString();
sambaLoc = settings.value("samba_location", QFileInfo("sam-ba.exe").absoluteFilePath()).toString();
@ -136,7 +137,7 @@ void burnConfigDialog::getSettings()
void burnConfigDialog::putSettings()
{
QSettings settings("companion9x", "companion9x");
QSettings settings;
settings.setValue("avrdude_location", avrLoc);
settings.setValue("programmer", avrProgrammer);
settings.setValue("mcu", avrMCU);
@ -278,8 +279,9 @@ void burnConfigDialog::listProgrammers()
QStringList arguments;
arguments << "-c?";
avrOutputDialog *ad = new avrOutputDialog(this, ui->avrdude_location->text(), arguments, "List available programmers", AVR_DIALOG_KEEP_OPEN, TRUE);
ad->setWindowIcon(QIcon(":/images/list.png"));
ad->setWindowIcon(CompanionIcon("list.png"));
ad->show();
delete ad;
}
void burnConfigDialog::on_pushButton_3_clicked()
@ -295,8 +297,9 @@ void burnConfigDialog::on_pushButton_4_clicked()
arguments << "-?";
avrOutputDialog *ad = new avrOutputDialog(this, ui->avrdude_location->text(), arguments, "Show help", AVR_DIALOG_KEEP_OPEN,TRUE);
ad->setWindowIcon(QIcon(":/images/configure.png"));
ad->setWindowIcon(CompanionIcon("configure.png"));
ad->show();
delete ad;
}
@ -312,8 +315,9 @@ void burnConfigDialog::readFuses()
arguments << "-c" << avrProgrammer << "-p" << avrMCU << args << str;
avrOutputDialog *ad = new avrOutputDialog(this, avrLoc, arguments, "Read Fuses",AVR_DIALOG_KEEP_OPEN,TRUE);
ad->setWindowIcon(QIcon(":/images/fuses.png"));
ad->setWindowIcon(CompanionIcon("fuses.png"));
ad->show();
delete ad;
}
void burnConfigDialog::restFuses(bool eeProtect)
@ -324,7 +328,6 @@ void burnConfigDialog::restFuses(bool eeProtect)
//avrdude -c usbasp -p m64 -U efuse:w:<0xFF>:m
QMessageBox::StandardButton ret = QMessageBox::No;
ret = QMessageBox::warning(this, tr("Companion"),
tr("<b><u>WARNING!</u></b><br>This will reset the fuses of %1 to the factory settings.<br>Writing fuses can mess up your radio.<br>Do this only if you are sure they are wrong!<br>Are you sure you want to continue?").arg(avrMCU),
QMessageBox::Yes | QMessageBox::No);
@ -338,7 +341,8 @@ void burnConfigDialog::restFuses(bool eeProtect)
QString erStr = eeProtect ? "hfuse:w:0x11:m" : "hfuse:w:0x19:m";
str << "-U" << "lfuse:w:0xD7:m" << "-U" << erStr << "-U" << "efuse:w:0xFC:m";
//use hfuse = 0x81 to prevent eeprom being erased with every flashing
} else {
}
else {
QString tempDir = QDir::tempPath();
QString tempFile;
QString lfuses;
@ -346,8 +350,9 @@ void burnConfigDialog::restFuses(bool eeProtect)
QStringList argread;
argread << "-c" << avrProgrammer << "-p" << avrMCU << args <<"-U" << "lfuse:r:"+tempFile+":r" ;
avrOutputDialog *ad = new avrOutputDialog(this, avrLoc, argread, "Reset Fuses",AVR_DIALOG_CLOSE_IF_SUCCESSFUL,FALSE);
ad->setWindowIcon(QIcon(":/images/fuses.png"));
ad->setWindowIcon(CompanionIcon("fuses.png"));
ad->exec();
delete ad;
QFile file(tempFile);
if (file.exists() && file.size()==1) {
file.open(QIODevice::ReadOnly);
@ -355,12 +360,14 @@ void burnConfigDialog::restFuses(bool eeProtect)
file.read(bin_flash, 1);
if (bin_flash[0]==0x0E) {
lfuses="lfuse:w:0x0E:m";
} else {
}
else {
lfuses="lfuse:w:0x3F:m";
}
file.close();
unlink(tempFile.toAscii());
} else {
}
else {
lfuses="lfuse:w:0x3F:m";
}
@ -371,12 +378,14 @@ void burnConfigDialog::restFuses(bool eeProtect)
QStringList arguments;
if (avrMCU=="m2560") {
arguments << "-c" << avrProgrammer << "-p" << avrMCU << args << "-u" << str;
} else {
}
else {
arguments << "-c" << avrProgrammer << "-p" << avrMCU << args << "-B" << "100" << "-u" << str;
}
avrOutputDialog *ad = new avrOutputDialog(this, avrLoc, arguments, "Reset Fuses",AVR_DIALOG_KEEP_OPEN,TRUE);
ad->setWindowIcon(QIcon(":/images/fuses.png"));
ad->setWindowIcon(CompanionIcon("fuses.png"));
ad->show();
delete ad;
}
}
@ -388,24 +397,29 @@ void burnConfigDialog::on_advCtrChkB_toggled(bool checked)
if (IS_TARANIS(eepromInterface->getBoard())) {
ui->label_dfu2->show();
ui->dfuArgs->show();
} else if (eepromInterface->getBoard()==BOARD_SKY9X) {
}
else if (eepromInterface->getBoard()==BOARD_SKY9X) {
ui->label_sb2->show();
ui->arm_mcu->show();
} else {
}
else {
ui->label_av3->show();
ui->avrdude_mcu->show();
QMessageBox::warning(this, tr("Companion"),
tr("<b><u>WARNING!</u></b><br>Normally CPU type is automatically selected according to the chosen firmware.<br>If you change the CPU type the resulting eeprom could be inconsistent."),
QMessageBox::Ok);
}
} else {
}
else {
if (IS_TARANIS(eepromInterface->getBoard())) {
ui->label_dfu2->hide();
ui->dfuArgs->hide();
} else if (eepromInterface->getBoard()==BOARD_SKY9X) {
}
else if (eepromInterface->getBoard()==BOARD_SKY9X) {
ui->label_sb2->hide();
ui->arm_mcu->hide();
} else {
}
else {
ui->label_av3->hide();
ui->avrdude_mcu->hide();
}

View file

@ -27,7 +27,7 @@
</property>
<property name="windowIcon">
<iconset resource="companion.qrc">
<normaloff>:/images/configure.png</normaloff>:/images/configure.png</iconset>
<normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="2" column="0">

View file

@ -16,6 +16,7 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac
hexType(Type)
{
ui->setupUi(this);
ui->libraryButton->setIcon(CompanionIcon("library.png"));
ui->SplashFrame->hide();
ui->FramFWInfo->hide();
ui->EEbackupCB->hide();
@ -26,11 +27,12 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac
ui->patchcalib_CB->hide();
ui->patchhw_CB->hide();
ui->InvertColorButton->setDisabled(true);
this->setWindowTitle(tr("Write firmware to TX"));
setWindowTitle(tr("Write firmware to TX"));
if (IS_TARANIS(GetEepromInterface()->getBoard())) {
ui->EEbackupCB->hide();
}
} else {
}
else {
ui->FlashLoadButton->setText(tr("Browse for file"));
ui->profile_label->hide();
ui->patchcalib_CB->hide();
@ -51,11 +53,12 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac
ui->BurnFlashButton->setDisabled(true);
ui->EEbackupCB->hide();
if (DocName.isEmpty()) {
this->setWindowTitle(tr("Write Models and Settings to TX"));
} else {
this->setWindowTitle(tr("Write Models and Settings in %1 to TX").arg(DocName));
setWindowTitle(tr("Write Models and Settings to TX"));
}
QSettings settings("companion9x", "companion9x");
else {
setWindowTitle(tr("Write Models and Settings in %1 to TX").arg(DocName));
}
QSettings settings;
int profileid=settings.value("profileId", 1).toInt();
settings.beginGroup("Profiles");
QString profile=QString("profile%1").arg(profileid);
@ -69,10 +72,11 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac
ui->FWFileName->setText(*hexfileName);
if (Type==2) {
checkFw(*hexfileName);
} else {
}
else {
burnraw=false;
if (checkeEprom(*hexfileName)) {
QSettings settings("companion9x", "companion9x");
QSettings settings;
int profileid=settings.value("profileId", 1).toInt();
settings.beginGroup("Profiles");
QString profile=QString("profile%1").arg(profileid);
@ -97,12 +101,14 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac
if (!((DisplaySet.length()==6) && (BeeperSet.length()==4) && (HapticSet.length()==6) && (SpeakerSet.length()==6))) {
ui->patchhw_CB->setDisabled(true);
}
} else {
}
else {
ui->profile_label->hide();
}
if (!IS_TARANIS(GetEepromInterface()->getBoard())) {
ui->EEpromCB->show();
} else {
}
else {
ui->EEpromCB->setChecked(false);
}
ui->BurnFlashButton->setEnabled(true);
@ -113,7 +119,7 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac
hexfileName->clear();
}
else if (Type==2) {
QSettings settings("companion9x", "companion9x");
QSettings settings;
QString FileName;
FileName = settings.value("lastFw").toString();
QFile file(FileName);
@ -124,14 +130,15 @@ burnDialog::burnDialog(QWidget *parent, int Type, QString * fileName, bool * bac
resize(0, 0);
}
burnDialog::~burnDialog() {
burnDialog::~burnDialog()
{
delete ui;
}
void burnDialog::on_FlashLoadButton_clicked()
{
QString fileName;
QSettings settings("companion9x", "companion9x");
QSettings settings;
ui->ImageLoadButton->setDisabled(true);
ui->libraryButton->setDisabled(true);
ui->InvertColorButton->setDisabled(true);
@ -150,7 +157,8 @@ void burnDialog::on_FlashLoadButton_clicked()
if (hexType==2) {
fileName = QFileDialog::getOpenFileName(this, tr("Open"), settings.value("lastFlashDir").toString(), FLASH_FILES_FILTER);
checkFw(fileName);
} else {
}
else {
QString fileName = QFileDialog::getOpenFileName(this,tr("Choose file to load Models and Settings from"), settings.value("lastDir").toString(), tr(EXTERNAL_EEPROM_FILES_FILTER));
if (checkeEprom(fileName)) {
if (burnraw==false) {
@ -160,10 +168,12 @@ void burnDialog::on_FlashLoadButton_clicked()
ui->patchhw_CB->show();
if (!IS_TARANIS(GetEepromInterface()->getBoard())) {
ui->EEpromCB->show();
} else {
}
else {
ui->EEpromCB->setChecked(false);
}
} else {
}
else {
ui->BurnFlashButton->setEnabled(true);
ui->profile_label->hide();
ui->patchcalib_CB->setChecked(false);
@ -181,10 +191,11 @@ void burnDialog::checkFw(QString fileName)
if (fileName.isEmpty()) {
return;
}
QSettings settings("companion9x", "companion9x");
QSettings settings;
if (!IS_TARANIS(GetEepromInterface()->getBoard())) {
ui->EEbackupCB->show();
} else {
}
else {
ui->EEbackupCB->setChecked(false);
*backup=false;
}
@ -223,23 +234,27 @@ void burnDialog::checkFw(QString fileName)
ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()).convertToFormat(flash.getSplashFormat())));
ui->PatchFWCB->setEnabled(true);
ui->PatchFWCB->setChecked(PatchFwCB);
} else {
}
else {
ui->PatchFWCB->setDisabled(true);
ui->PatchFWCB->setChecked(false);
ui->PreferredImageCB->setDisabled(true);
}
} else {
}
else {
ui->PatchFWCB->setDisabled(true);
ui->PatchFWCB->setChecked(false);
ui->PreferredImageCB->setDisabled(true);
}
}
} else {
}
else {
ui->FwImage->hide();
ui->ImageFileName->setText("");
ui->SplashFrame->hide();
}
} else {
}
else {
QMessageBox::warning(this, tr("Warning"), tr("%1 is not a known firmware").arg(fileName));
ui->BurnFlashButton->setText(tr("Burn anyway !"));
ui->BurnFlashButton->setEnabled(true);
@ -267,7 +282,8 @@ bool burnDialog::checkeEprom(QString fileName)
}
QTextStream inputStream(&file);
XmlInterface(inputStream).load(radioData);
} else if (fileType==FILE_TYPE_HEX || fileType==FILE_TYPE_EEPE) { //read HEX file
}
else if (fileType==FILE_TYPE_HEX || fileType==FILE_TYPE_EEPE) { //read HEX file
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { //reading HEX TEXT file
QMessageBox::critical(this, tr("Error"),tr("Error opening file %1:\n%2.").arg(fileName).arg(file.errorString()));
return false;
@ -310,7 +326,8 @@ bool burnDialog::checkeEprom(QString fileName)
ui->FWFileName->setText(fileName);
return true;
}
} else if (fileType==FILE_TYPE_BIN) { //read binary
}
else if (fileType==FILE_TYPE_BIN) { //read binary
int eeprom_size = file.size();
if (!file.open(QFile::ReadOnly)) { //reading binary file - TODO HEX support
QMessageBox::critical(this, tr("Error"),tr("Error opening file %1:\n%2.").arg(fileName).arg(file.errorString()));
@ -343,7 +360,7 @@ void burnDialog::on_ImageLoadButton_clicked()
supportedImageFormats += QLatin1String(" *.") + QImageReader::supportedImageFormats()[formatIndex];
}
QSettings settings("companion9x", "companion9x");
QSettings settings;
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open Image to load"), settings.value("lastImagesDir").toString(), tr("Images (%1)").arg(supportedImageFormats));
@ -365,17 +382,16 @@ void burnDialog::on_ImageLoadButton_clicked()
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));
}
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(), ui->imageLabel->height())));
} else {
}
else {
ui->imageLabel->setPixmap(QPixmap::fromImage(image.scaled(ui->imageLabel->width(), ui->imageLabel->height()).convertToFormat(QImage::Format_Mono)));
}
ui->PatchFWCB->setEnabled(true);
@ -426,7 +442,7 @@ void burnDialog::on_BurnFlashButton_clicked()
if (hexType==2) {
QString fileName=ui->FWFileName->text();
if (!fileName.isEmpty()) {
QSettings settings("companion9x", "companion9x");
QSettings settings;
settings.setValue("lastFlashDir", QFileInfo(fileName).dir().absolutePath());
settings.setValue("lastFw", fileName);
if (ui->PatchFWCB->isChecked()) {
@ -463,7 +479,7 @@ void burnDialog::on_BurnFlashButton_clicked()
}
}
if (hexType==1) {
QSettings settings("companion9x", "companion9x");
QSettings settings;
int profileid=settings.value("profileId", 1).toInt();
settings.beginGroup("Profiles");
QString profile=QString("profile%1").arg(profileid);
@ -640,7 +656,7 @@ void burnDialog::on_PreferredImageCB_toggled(bool checked)
{
QString tmpFileName;
if (checked) {
QSettings settings("companion9x", "companion9x");
QSettings settings;
QString ImageStr = settings.value("SplashImage", "").toString();
if (!ImageStr.isEmpty()) {
QImage Image = qstring2image(ImageStr);

View file

@ -26,8 +26,8 @@
<string>Customize Splash</string>
</property>
<property name="windowIcon">
<iconset>
<normaloff>:/images/c_home.png</normaloff>:/images/c_home.png</iconset>
<iconset resource="companion.qrc">
<normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout_7">
<item row="1" column="0">
@ -455,10 +455,6 @@
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="companion.qrc">
<normaloff>:/images/library.png</normaloff>:/images/library.png</iconset>
</property>
<property name="iconSize">
<size>
<width>16</width>

View file

@ -1,5 +1,6 @@
<RCC>
<qresource prefix="/">
<file>images/customize.png</file>
<file>icon.png</file>
<file>../../CREDITS.txt</file>
<file>../../DONATIONS.txt</file>
@ -37,55 +38,13 @@
<file>images/9xcursmin.png</file>
<file>images/9xcursdown.png</file>
<file>images/9xcursphoto.png</file>
<file>images/copy.png</file>
<file>images/cut.png</file>
<file>images/currentmodel.png</file>
<file>images/new.png</file>
<file>images/open.png</file>
<file>images/paste.png</file>
<file>images/save.png</file>
<file>images/saveas.png</file>
<file>images/screenshot.png</file>
<file>images/splash.png</file>
<file>images/splasht.png</file>
<file>images/companion-title.png</file>
<file>images/read_eeprom.png</file>
<file>images/write_eeprom.png</file>
<file>images/write_flash.png</file>
<file>images/read_flash.png</file>
<file>images/simulate.png</file>
<file>images/configure.png</file>
<file>images/customize.png</file>
<file>images/print.png</file>
<file>images/clear.png</file>
<file>images/add.png</file>
<file>images/edit.png</file>
<file>images/wizard.png</file>
<file>images/duplicate.png</file>
<file>images/fuses.png</file>
<file>images/list.png</file>
<file>images/maps.png</file>
<file>images/track.png</file>
<file>images/track0.png</file>
<file>images/play.png</file>
<file>images/stop.png</file>
<file>images/read_eeprom_file.png</file>
<file>images/write_eeprom_file.png</file>
<file>images/moveup.png</file>
<file>images/movedown.png</file>
<file>images/update.png</file>
<file>images/contributors.png</file>
<file>images/changelog.png</file>
<file>images/preferences.png</file>
<file>images/switch_dir.png</file>
<file>images/exit.png</file>
<file>images/recentdocument.png</file>
<file>images/profiles.png</file>
<file>images/library.png</file>
<file>images/logs.png</file>
<file>images/arrow-left.png</file>
<file>images/arrow-right.png</file>
<file>images/compare.png</file>
<file>images/x9b0.png</file>
<file>images/x9l0.png</file>
<file>images/x9l1.png</file>
@ -334,5 +293,677 @@
<file>images/library/30002.png</file>
<file>images/library/30003.png</file>
<file>images/library/30004.png</file>
<file>themes/monochrome/16/paintbrush.png</file>
<file>themes/monochrome/16/open.png</file>
<file>themes/monochrome/16/edit.png</file>
<file>themes/monochrome/16/information.png</file>
<file>themes/monochrome/16/configure.png</file>
<file>themes/monochrome/16/list.png</file>
<file>themes/monochrome/16/wizard.png</file>
<file>themes/monochrome/16/logs.png</file>
<file>themes/monochrome/16/new.png</file>
<file>themes/monochrome/16/save.png</file>
<file>themes/monochrome/16/recentdocument.png</file>
<file>themes/monochrome/16/simulate.png</file>
<file>themes/monochrome/16/changelog.png</file>
<file>themes/monochrome/16/copy.png</file>
<file>themes/monochrome/16/write_flash.png</file>
<file>themes/monochrome/16/read_eeprom_file.png</file>
<file>themes/monochrome/16/clear.png</file>
<file>themes/monochrome/16/play.png</file>
<file>themes/monochrome/16/fuses.png</file>
<file>themes/monochrome/16/arrow-right.png</file>
<file>themes/monochrome/16/exit.png</file>
<file>themes/monochrome/16/moveup.png</file>
<file>themes/monochrome/16/read_eeprom.png</file>
<file>themes/monochrome/16/cut.png</file>
<file>themes/monochrome/16/arrow-left.png</file>
<file>themes/monochrome/16/write_eeprom_file.png</file>
<file>themes/monochrome/16/library.png</file>
<file>themes/monochrome/16/profiles.png</file>
<file>themes/monochrome/16/paste.png</file>
<file>themes/monochrome/16/print.png</file>
<file>themes/monochrome/16/compare.png</file>
<file>themes/monochrome/16/saveas.png</file>
<file>themes/monochrome/16/preferences.png</file>
<file>themes/monochrome/16/movedown.png</file>
<file>themes/monochrome/16/currentmodel.png</file>
<file>themes/monochrome/16/read_flash.png</file>
<file>themes/monochrome/16/duplicate.png</file>
<file>themes/monochrome/16/add.png</file>
<file>themes/monochrome/16/update.png</file>
<file>themes/monochrome/16/contributors.png</file>
<file>themes/monochrome/16/stop.png</file>
<file>themes/monochrome/16/write_eeprom.png</file>
<file>themes/monochrome/24/paintbrush.png</file>
<file>themes/monochrome/24/open.png</file>
<file>themes/monochrome/24/edit.png</file>
<file>themes/monochrome/24/information.png</file>
<file>themes/monochrome/24/configure.png</file>
<file>themes/monochrome/24/list.png</file>
<file>themes/monochrome/24/wizard.png</file>
<file>themes/monochrome/24/logs.png</file>
<file>themes/monochrome/24/new.png</file>
<file>themes/monochrome/24/save.png</file>
<file>themes/monochrome/24/recentdocument.png</file>
<file>themes/monochrome/24/simulate.png</file>
<file>themes/monochrome/24/changelog.png</file>
<file>themes/monochrome/24/copy.png</file>
<file>themes/monochrome/24/write_flash.png</file>
<file>themes/monochrome/24/read_eeprom_file.png</file>
<file>themes/monochrome/24/clear.png</file>
<file>themes/monochrome/24/play.png</file>
<file>themes/monochrome/24/fuses.png</file>
<file>themes/monochrome/24/arrow-right.png</file>
<file>themes/monochrome/24/exit.png</file>
<file>themes/monochrome/24/moveup.png</file>
<file>themes/monochrome/24/read_eeprom.png</file>
<file>themes/monochrome/24/cut.png</file>
<file>themes/monochrome/24/arrow-left.png</file>
<file>themes/monochrome/24/write_eeprom_file.png</file>
<file>themes/monochrome/24/library.png</file>
<file>themes/monochrome/24/profiles.png</file>
<file>themes/monochrome/24/paste.png</file>
<file>themes/monochrome/24/print.png</file>
<file>themes/monochrome/24/compare.png</file>
<file>themes/monochrome/24/saveas.png</file>
<file>themes/monochrome/24/preferences.png</file>
<file>themes/monochrome/24/movedown.png</file>
<file>themes/monochrome/24/currentmodel.png</file>
<file>themes/monochrome/24/read_flash.png</file>
<file>themes/monochrome/24/duplicate.png</file>
<file>themes/monochrome/24/add.png</file>
<file>themes/monochrome/24/update.png</file>
<file>themes/monochrome/24/contributors.png</file>
<file>themes/monochrome/24/stop.png</file>
<file>themes/monochrome/24/write_eeprom.png</file>
<file>themes/monochrome/32/paintbrush.png</file>
<file>themes/monochrome/32/open.png</file>
<file>themes/monochrome/32/edit.png</file>
<file>themes/monochrome/32/information.png</file>
<file>themes/monochrome/32/configure.png</file>
<file>themes/monochrome/32/list.png</file>
<file>themes/monochrome/32/wizard.png</file>
<file>themes/monochrome/32/logs.png</file>
<file>themes/monochrome/32/new.png</file>
<file>themes/monochrome/32/save.png</file>
<file>themes/monochrome/32/recentdocument.png</file>
<file>themes/monochrome/32/simulate.png</file>
<file>themes/monochrome/32/changelog.png</file>
<file>themes/monochrome/32/copy.png</file>
<file>themes/monochrome/32/write_flash.png</file>
<file>themes/monochrome/32/read_eeprom_file.png</file>
<file>themes/monochrome/32/clear.png</file>
<file>themes/monochrome/32/play.png</file>
<file>themes/monochrome/32/fuses.png</file>
<file>themes/monochrome/32/arrow-right.png</file>
<file>themes/monochrome/32/exit.png</file>
<file>themes/monochrome/32/moveup.png</file>
<file>themes/monochrome/32/read_eeprom.png</file>
<file>themes/monochrome/32/cut.png</file>
<file>themes/monochrome/32/arrow-left.png</file>
<file>themes/monochrome/32/write_eeprom_file.png</file>
<file>themes/monochrome/32/library.png</file>
<file>themes/monochrome/32/profiles.png</file>
<file>themes/monochrome/32/paste.png</file>
<file>themes/monochrome/32/print.png</file>
<file>themes/monochrome/32/compare.png</file>
<file>themes/monochrome/32/saveas.png</file>
<file>themes/monochrome/32/preferences.png</file>
<file>themes/monochrome/32/movedown.png</file>
<file>themes/monochrome/32/currentmodel.png</file>
<file>themes/monochrome/32/read_flash.png</file>
<file>themes/monochrome/32/duplicate.png</file>
<file>themes/monochrome/32/add.png</file>
<file>themes/monochrome/32/update.png</file>
<file>themes/monochrome/32/contributors.png</file>
<file>themes/monochrome/32/stop.png</file>
<file>themes/monochrome/32/write_eeprom.png</file>
<file>themes/monochrome/48/paintbrush.png</file>
<file>themes/monochrome/48/open.png</file>
<file>themes/monochrome/48/edit.png</file>
<file>themes/monochrome/48/information.png</file>
<file>themes/monochrome/48/configure.png</file>
<file>themes/monochrome/48/list.png</file>
<file>themes/monochrome/48/wizard.png</file>
<file>themes/monochrome/48/logs.png</file>
<file>themes/monochrome/48/new.png</file>
<file>themes/monochrome/48/save.png</file>
<file>themes/monochrome/48/recentdocument.png</file>
<file>themes/monochrome/48/simulate.png</file>
<file>themes/monochrome/48/changelog.png</file>
<file>themes/monochrome/48/copy.png</file>
<file>themes/monochrome/48/write_flash.png</file>
<file>themes/monochrome/48/read_eeprom_file.png</file>
<file>themes/monochrome/48/clear.png</file>
<file>themes/monochrome/48/play.png</file>
<file>themes/monochrome/48/fuses.png</file>
<file>themes/monochrome/48/arrow-right.png</file>
<file>themes/monochrome/48/exit.png</file>
<file>themes/monochrome/48/moveup.png</file>
<file>themes/monochrome/48/read_eeprom.png</file>
<file>themes/monochrome/48/cut.png</file>
<file>themes/monochrome/48/arrow-left.png</file>
<file>themes/monochrome/48/write_eeprom_file.png</file>
<file>themes/monochrome/48/library.png</file>
<file>themes/monochrome/48/profiles.png</file>
<file>themes/monochrome/48/paste.png</file>
<file>themes/monochrome/48/print.png</file>
<file>themes/monochrome/48/compare.png</file>
<file>themes/monochrome/48/saveas.png</file>
<file>themes/monochrome/48/preferences.png</file>
<file>themes/monochrome/48/movedown.png</file>
<file>themes/monochrome/48/currentmodel.png</file>
<file>themes/monochrome/48/read_flash.png</file>
<file>themes/monochrome/48/duplicate.png</file>
<file>themes/monochrome/48/add.png</file>
<file>themes/monochrome/48/update.png</file>
<file>themes/monochrome/48/contributors.png</file>
<file>themes/monochrome/48/stop.png</file>
<file>themes/monochrome/48/write_eeprom.png</file>
<file>themes/classic/16/paintbrush.png</file>
<file>themes/classic/16/open.png</file>
<file>themes/classic/16/edit.png</file>
<file>themes/classic/16/information.png</file>
<file>themes/classic/16/configure.png</file>
<file>themes/classic/16/list.png</file>
<file>themes/classic/16/wizard.png</file>
<file>themes/classic/16/logs.png</file>
<file>themes/classic/16/new.png</file>
<file>themes/classic/16/save.png</file>
<file>themes/classic/16/recentdocument.png</file>
<file>themes/classic/16/simulate.png</file>
<file>themes/classic/16/changelog.png</file>
<file>themes/classic/16/copy.png</file>
<file>themes/classic/16/write_flash.png</file>
<file>themes/classic/16/read_eeprom_file.png</file>
<file>themes/classic/16/clear.png</file>
<file>themes/classic/16/play.png</file>
<file>themes/classic/16/fuses.png</file>
<file>themes/classic/16/arrow-right.png</file>
<file>themes/classic/16/exit.png</file>
<file>themes/classic/16/moveup.png</file>
<file>themes/classic/16/read_eeprom.png</file>
<file>themes/classic/16/cut.png</file>
<file>themes/classic/16/arrow-left.png</file>
<file>themes/classic/16/write_eeprom_file.png</file>
<file>themes/classic/16/library.png</file>
<file>themes/classic/16/profiles.png</file>
<file>themes/classic/16/paste.png</file>
<file>themes/classic/16/print.png</file>
<file>themes/classic/16/compare.png</file>
<file>themes/classic/16/saveas.png</file>
<file>themes/classic/16/preferences.png</file>
<file>themes/classic/16/movedown.png</file>
<file>themes/classic/16/currentmodel.png</file>
<file>themes/classic/16/read_flash.png</file>
<file>themes/classic/16/duplicate.png</file>
<file>themes/classic/16/add.png</file>
<file>themes/classic/16/update.png</file>
<file>themes/classic/16/contributors.png</file>
<file>themes/classic/16/stop.png</file>
<file>themes/classic/16/write_eeprom.png</file>
<file>themes/classic/24/paintbrush.png</file>
<file>themes/classic/24/open.png</file>
<file>themes/classic/24/edit.png</file>
<file>themes/classic/24/information.png</file>
<file>themes/classic/24/configure.png</file>
<file>themes/classic/24/list.png</file>
<file>themes/classic/24/wizard.png</file>
<file>themes/classic/24/logs.png</file>
<file>themes/classic/24/new.png</file>
<file>themes/classic/24/save.png</file>
<file>themes/classic/24/recentdocument.png</file>
<file>themes/classic/24/simulate.png</file>
<file>themes/classic/24/changelog.png</file>
<file>themes/classic/24/copy.png</file>
<file>themes/classic/24/write_flash.png</file>
<file>themes/classic/24/read_eeprom_file.png</file>
<file>themes/classic/24/clear.png</file>
<file>themes/classic/24/play.png</file>
<file>themes/classic/24/fuses.png</file>
<file>themes/classic/24/arrow-right.png</file>
<file>themes/classic/24/exit.png</file>
<file>themes/classic/24/moveup.png</file>
<file>themes/classic/24/read_eeprom.png</file>
<file>themes/classic/24/cut.png</file>
<file>themes/classic/24/arrow-left.png</file>
<file>themes/classic/24/write_eeprom_file.png</file>
<file>themes/classic/24/library.png</file>
<file>themes/classic/24/profiles.png</file>
<file>themes/classic/24/paste.png</file>
<file>themes/classic/24/print.png</file>
<file>themes/classic/24/compare.png</file>
<file>themes/classic/24/saveas.png</file>
<file>themes/classic/24/preferences.png</file>
<file>themes/classic/24/movedown.png</file>
<file>themes/classic/24/currentmodel.png</file>
<file>themes/classic/24/read_flash.png</file>
<file>themes/classic/24/duplicate.png</file>
<file>themes/classic/24/add.png</file>
<file>themes/classic/24/update.png</file>
<file>themes/classic/24/contributors.png</file>
<file>themes/classic/24/stop.png</file>
<file>themes/classic/24/write_eeprom.png</file>
<file>themes/classic/32/paintbrush.png</file>
<file>themes/classic/32/open.png</file>
<file>themes/classic/32/edit.png</file>
<file>themes/classic/32/information.png</file>
<file>themes/classic/32/configure.png</file>
<file>themes/classic/32/list.png</file>
<file>themes/classic/32/wizard.png</file>
<file>themes/classic/32/logs.png</file>
<file>themes/classic/32/new.png</file>
<file>themes/classic/32/save.png</file>
<file>themes/classic/32/recentdocument.png</file>
<file>themes/classic/32/simulate.png</file>
<file>themes/classic/32/changelog.png</file>
<file>themes/classic/32/copy.png</file>
<file>themes/classic/32/write_flash.png</file>
<file>themes/classic/32/read_eeprom_file.png</file>
<file>themes/classic/32/clear.png</file>
<file>themes/classic/32/play.png</file>
<file>themes/classic/32/fuses.png</file>
<file>themes/classic/32/arrow-right.png</file>
<file>themes/classic/32/exit.png</file>
<file>themes/classic/32/moveup.png</file>
<file>themes/classic/32/read_eeprom.png</file>
<file>themes/classic/32/cut.png</file>
<file>themes/classic/32/arrow-left.png</file>
<file>themes/classic/32/write_eeprom_file.png</file>
<file>themes/classic/32/library.png</file>
<file>themes/classic/32/profiles.png</file>
<file>themes/classic/32/paste.png</file>
<file>themes/classic/32/print.png</file>
<file>themes/classic/32/compare.png</file>
<file>themes/classic/32/saveas.png</file>
<file>themes/classic/32/preferences.png</file>
<file>themes/classic/32/movedown.png</file>
<file>themes/classic/32/currentmodel.png</file>
<file>themes/classic/32/read_flash.png</file>
<file>themes/classic/32/duplicate.png</file>
<file>themes/classic/32/add.png</file>
<file>themes/classic/32/update.png</file>
<file>themes/classic/32/contributors.png</file>
<file>themes/classic/32/stop.png</file>
<file>themes/classic/32/write_eeprom.png</file>
<file>themes/classic/48/paintbrush.png</file>
<file>themes/classic/48/open.png</file>
<file>themes/classic/48/edit.png</file>
<file>themes/classic/48/information.png</file>
<file>themes/classic/48/configure.png</file>
<file>themes/classic/48/list.png</file>
<file>themes/classic/48/wizard.png</file>
<file>themes/classic/48/logs.png</file>
<file>themes/classic/48/new.png</file>
<file>themes/classic/48/save.png</file>
<file>themes/classic/48/recentdocument.png</file>
<file>themes/classic/48/simulate.png</file>
<file>themes/classic/48/changelog.png</file>
<file>themes/classic/48/copy.png</file>
<file>themes/classic/48/write_flash.png</file>
<file>themes/classic/48/read_eeprom_file.png</file>
<file>themes/classic/48/clear.png</file>
<file>themes/classic/48/play.png</file>
<file>themes/classic/48/fuses.png</file>
<file>themes/classic/48/arrow-right.png</file>
<file>themes/classic/48/exit.png</file>
<file>themes/classic/48/moveup.png</file>
<file>themes/classic/48/read_eeprom.png</file>
<file>themes/classic/48/cut.png</file>
<file>themes/classic/48/arrow-left.png</file>
<file>themes/classic/48/write_eeprom_file.png</file>
<file>themes/classic/48/library.png</file>
<file>themes/classic/48/profiles.png</file>
<file>themes/classic/48/paste.png</file>
<file>themes/classic/48/print.png</file>
<file>themes/classic/48/compare.png</file>
<file>themes/classic/48/saveas.png</file>
<file>themes/classic/48/preferences.png</file>
<file>themes/classic/48/movedown.png</file>
<file>themes/classic/48/currentmodel.png</file>
<file>themes/classic/48/read_flash.png</file>
<file>themes/classic/48/duplicate.png</file>
<file>themes/classic/48/add.png</file>
<file>themes/classic/48/update.png</file>
<file>themes/classic/48/contributors.png</file>
<file>themes/classic/48/stop.png</file>
<file>themes/classic/48/write_eeprom.png</file>
<file>themes/monoblue/16/paintbrush.png</file>
<file>themes/monoblue/16/open.png</file>
<file>themes/monoblue/16/edit.png</file>
<file>themes/monoblue/16/information.png</file>
<file>themes/monoblue/16/configure.png</file>
<file>themes/monoblue/16/list.png</file>
<file>themes/monoblue/16/wizard.png</file>
<file>themes/monoblue/16/logs.png</file>
<file>themes/monoblue/16/new.png</file>
<file>themes/monoblue/16/save.png</file>
<file>themes/monoblue/16/recentdocument.png</file>
<file>themes/monoblue/16/simulate.png</file>
<file>themes/monoblue/16/changelog.png</file>
<file>themes/monoblue/16/copy.png</file>
<file>themes/monoblue/16/write_flash.png</file>
<file>themes/monoblue/16/read_eeprom_file.png</file>
<file>themes/monoblue/16/clear.png</file>
<file>themes/monoblue/16/play.png</file>
<file>themes/monoblue/16/fuses.png</file>
<file>themes/monoblue/16/arrow-right.png</file>
<file>themes/monoblue/16/exit.png</file>
<file>themes/monoblue/16/moveup.png</file>
<file>themes/monoblue/16/read_eeprom.png</file>
<file>themes/monoblue/16/cut.png</file>
<file>themes/monoblue/16/arrow-left.png</file>
<file>themes/monoblue/16/write_eeprom_file.png</file>
<file>themes/monoblue/16/library.png</file>
<file>themes/monoblue/16/profiles.png</file>
<file>themes/monoblue/16/paste.png</file>
<file>themes/monoblue/16/print.png</file>
<file>themes/monoblue/16/compare.png</file>
<file>themes/monoblue/16/saveas.png</file>
<file>themes/monoblue/16/preferences.png</file>
<file>themes/monoblue/16/movedown.png</file>
<file>themes/monoblue/16/currentmodel.png</file>
<file>themes/monoblue/16/read_flash.png</file>
<file>themes/monoblue/16/duplicate.png</file>
<file>themes/monoblue/16/add.png</file>
<file>themes/monoblue/16/update.png</file>
<file>themes/monoblue/16/contributors.png</file>
<file>themes/monoblue/16/stop.png</file>
<file>themes/monoblue/16/write_eeprom.png</file>
<file>themes/monoblue/24/paintbrush.png</file>
<file>themes/monoblue/24/open.png</file>
<file>themes/monoblue/24/edit.png</file>
<file>themes/monoblue/24/information.png</file>
<file>themes/monoblue/24/configure.png</file>
<file>themes/monoblue/24/list.png</file>
<file>themes/monoblue/24/wizard.png</file>
<file>themes/monoblue/24/logs.png</file>
<file>themes/monoblue/24/new.png</file>
<file>themes/monoblue/24/save.png</file>
<file>themes/monoblue/24/recentdocument.png</file>
<file>themes/monoblue/24/simulate.png</file>
<file>themes/monoblue/24/changelog.png</file>
<file>themes/monoblue/24/copy.png</file>
<file>themes/monoblue/24/write_flash.png</file>
<file>themes/monoblue/24/read_eeprom_file.png</file>
<file>themes/monoblue/24/clear.png</file>
<file>themes/monoblue/24/play.png</file>
<file>themes/monoblue/24/fuses.png</file>
<file>themes/monoblue/24/arrow-right.png</file>
<file>themes/monoblue/24/exit.png</file>
<file>themes/monoblue/24/moveup.png</file>
<file>themes/monoblue/24/read_eeprom.png</file>
<file>themes/monoblue/24/cut.png</file>
<file>themes/monoblue/24/arrow-left.png</file>
<file>themes/monoblue/24/write_eeprom_file.png</file>
<file>themes/monoblue/24/library.png</file>
<file>themes/monoblue/24/profiles.png</file>
<file>themes/monoblue/24/paste.png</file>
<file>themes/monoblue/24/print.png</file>
<file>themes/monoblue/24/compare.png</file>
<file>themes/monoblue/24/saveas.png</file>
<file>themes/monoblue/24/preferences.png</file>
<file>themes/monoblue/24/movedown.png</file>
<file>themes/monoblue/24/currentmodel.png</file>
<file>themes/monoblue/24/read_flash.png</file>
<file>themes/monoblue/24/duplicate.png</file>
<file>themes/monoblue/24/add.png</file>
<file>themes/monoblue/24/update.png</file>
<file>themes/monoblue/24/contributors.png</file>
<file>themes/monoblue/24/stop.png</file>
<file>themes/monoblue/24/write_eeprom.png</file>
<file>themes/monoblue/32/paintbrush.png</file>
<file>themes/monoblue/32/open.png</file>
<file>themes/monoblue/32/edit.png</file>
<file>themes/monoblue/32/information.png</file>
<file>themes/monoblue/32/configure.png</file>
<file>themes/monoblue/32/list.png</file>
<file>themes/monoblue/32/wizard.png</file>
<file>themes/monoblue/32/logs.png</file>
<file>themes/monoblue/32/new.png</file>
<file>themes/monoblue/32/save.png</file>
<file>themes/monoblue/32/recentdocument.png</file>
<file>themes/monoblue/32/simulate.png</file>
<file>themes/monoblue/32/changelog.png</file>
<file>themes/monoblue/32/copy.png</file>
<file>themes/monoblue/32/write_flash.png</file>
<file>themes/monoblue/32/read_eeprom_file.png</file>
<file>themes/monoblue/32/clear.png</file>
<file>themes/monoblue/32/play.png</file>
<file>themes/monoblue/32/fuses.png</file>
<file>themes/monoblue/32/arrow-right.png</file>
<file>themes/monoblue/32/exit.png</file>
<file>themes/monoblue/32/moveup.png</file>
<file>themes/monoblue/32/read_eeprom.png</file>
<file>themes/monoblue/32/cut.png</file>
<file>themes/monoblue/32/arrow-left.png</file>
<file>themes/monoblue/32/write_eeprom_file.png</file>
<file>themes/monoblue/32/library.png</file>
<file>themes/monoblue/32/profiles.png</file>
<file>themes/monoblue/32/paste.png</file>
<file>themes/monoblue/32/print.png</file>
<file>themes/monoblue/32/compare.png</file>
<file>themes/monoblue/32/saveas.png</file>
<file>themes/monoblue/32/preferences.png</file>
<file>themes/monoblue/32/movedown.png</file>
<file>themes/monoblue/32/currentmodel.png</file>
<file>themes/monoblue/32/read_flash.png</file>
<file>themes/monoblue/32/duplicate.png</file>
<file>themes/monoblue/32/add.png</file>
<file>themes/monoblue/32/update.png</file>
<file>themes/monoblue/32/contributors.png</file>
<file>themes/monoblue/32/stop.png</file>
<file>themes/monoblue/32/write_eeprom.png</file>
<file>themes/monoblue/48/paintbrush.png</file>
<file>themes/monoblue/48/open.png</file>
<file>themes/monoblue/48/edit.png</file>
<file>themes/monoblue/48/information.png</file>
<file>themes/monoblue/48/configure.png</file>
<file>themes/monoblue/48/list.png</file>
<file>themes/monoblue/48/wizard.png</file>
<file>themes/monoblue/48/logs.png</file>
<file>themes/monoblue/48/new.png</file>
<file>themes/monoblue/48/save.png</file>
<file>themes/monoblue/48/recentdocument.png</file>
<file>themes/monoblue/48/simulate.png</file>
<file>themes/monoblue/48/changelog.png</file>
<file>themes/monoblue/48/copy.png</file>
<file>themes/monoblue/48/write_flash.png</file>
<file>themes/monoblue/48/read_eeprom_file.png</file>
<file>themes/monoblue/48/clear.png</file>
<file>themes/monoblue/48/play.png</file>
<file>themes/monoblue/48/fuses.png</file>
<file>themes/monoblue/48/arrow-right.png</file>
<file>themes/monoblue/48/exit.png</file>
<file>themes/monoblue/48/moveup.png</file>
<file>themes/monoblue/48/read_eeprom.png</file>
<file>themes/monoblue/48/cut.png</file>
<file>themes/monoblue/48/arrow-left.png</file>
<file>themes/monoblue/48/write_eeprom_file.png</file>
<file>themes/monoblue/48/library.png</file>
<file>themes/monoblue/48/profiles.png</file>
<file>themes/monoblue/48/paste.png</file>
<file>themes/monoblue/48/print.png</file>
<file>themes/monoblue/48/compare.png</file>
<file>themes/monoblue/48/saveas.png</file>
<file>themes/monoblue/48/preferences.png</file>
<file>themes/monoblue/48/movedown.png</file>
<file>themes/monoblue/48/currentmodel.png</file>
<file>themes/monoblue/48/read_flash.png</file>
<file>themes/monoblue/48/duplicate.png</file>
<file>themes/monoblue/48/add.png</file>
<file>themes/monoblue/48/update.png</file>
<file>themes/monoblue/48/contributors.png</file>
<file>themes/monoblue/48/stop.png</file>
<file>themes/monoblue/48/write_eeprom.png</file>
<file>themes/monowhite/16/paintbrush.png</file>
<file>themes/monowhite/16/open.png</file>
<file>themes/monowhite/16/edit.png</file>
<file>themes/monowhite/16/information.png</file>
<file>themes/monowhite/16/configure.png</file>
<file>themes/monowhite/16/list.png</file>
<file>themes/monowhite/16/wizard.png</file>
<file>themes/monowhite/16/logs.png</file>
<file>themes/monowhite/16/new.png</file>
<file>themes/monowhite/16/save.png</file>
<file>themes/monowhite/16/recentdocument.png</file>
<file>themes/monowhite/16/simulate.png</file>
<file>themes/monowhite/16/changelog.png</file>
<file>themes/monowhite/16/copy.png</file>
<file>themes/monowhite/16/write_flash.png</file>
<file>themes/monowhite/16/read_eeprom_file.png</file>
<file>themes/monowhite/16/clear.png</file>
<file>themes/monowhite/16/play.png</file>
<file>themes/monowhite/16/fuses.png</file>
<file>themes/monowhite/16/arrow-right.png</file>
<file>themes/monowhite/16/exit.png</file>
<file>themes/monowhite/16/moveup.png</file>
<file>themes/monowhite/16/read_eeprom.png</file>
<file>themes/monowhite/16/cut.png</file>
<file>themes/monowhite/16/arrow-left.png</file>
<file>themes/monowhite/16/write_eeprom_file.png</file>
<file>themes/monowhite/16/library.png</file>
<file>themes/monowhite/16/profiles.png</file>
<file>themes/monowhite/16/paste.png</file>
<file>themes/monowhite/16/print.png</file>
<file>themes/monowhite/16/compare.png</file>
<file>themes/monowhite/16/saveas.png</file>
<file>themes/monowhite/16/preferences.png</file>
<file>themes/monowhite/16/movedown.png</file>
<file>themes/monowhite/16/currentmodel.png</file>
<file>themes/monowhite/16/read_flash.png</file>
<file>themes/monowhite/16/duplicate.png</file>
<file>themes/monowhite/16/add.png</file>
<file>themes/monowhite/16/update.png</file>
<file>themes/monowhite/16/contributors.png</file>
<file>themes/monowhite/16/stop.png</file>
<file>themes/monowhite/16/write_eeprom.png</file>
<file>themes/monowhite/24/paintbrush.png</file>
<file>themes/monowhite/24/open.png</file>
<file>themes/monowhite/24/edit.png</file>
<file>themes/monowhite/24/information.png</file>
<file>themes/monowhite/24/configure.png</file>
<file>themes/monowhite/24/list.png</file>
<file>themes/monowhite/24/wizard.png</file>
<file>themes/monowhite/24/logs.png</file>
<file>themes/monowhite/24/new.png</file>
<file>themes/monowhite/24/save.png</file>
<file>themes/monowhite/24/recentdocument.png</file>
<file>themes/monowhite/24/simulate.png</file>
<file>themes/monowhite/24/changelog.png</file>
<file>themes/monowhite/24/copy.png</file>
<file>themes/monowhite/24/write_flash.png</file>
<file>themes/monowhite/24/read_eeprom_file.png</file>
<file>themes/monowhite/24/clear.png</file>
<file>themes/monowhite/24/play.png</file>
<file>themes/monowhite/24/fuses.png</file>
<file>themes/monowhite/24/arrow-right.png</file>
<file>themes/monowhite/24/exit.png</file>
<file>themes/monowhite/24/moveup.png</file>
<file>themes/monowhite/24/read_eeprom.png</file>
<file>themes/monowhite/24/cut.png</file>
<file>themes/monowhite/24/arrow-left.png</file>
<file>themes/monowhite/24/write_eeprom_file.png</file>
<file>themes/monowhite/24/library.png</file>
<file>themes/monowhite/24/profiles.png</file>
<file>themes/monowhite/24/paste.png</file>
<file>themes/monowhite/24/print.png</file>
<file>themes/monowhite/24/compare.png</file>
<file>themes/monowhite/24/saveas.png</file>
<file>themes/monowhite/24/preferences.png</file>
<file>themes/monowhite/24/movedown.png</file>
<file>themes/monowhite/24/currentmodel.png</file>
<file>themes/monowhite/24/read_flash.png</file>
<file>themes/monowhite/24/duplicate.png</file>
<file>themes/monowhite/24/add.png</file>
<file>themes/monowhite/24/update.png</file>
<file>themes/monowhite/24/contributors.png</file>
<file>themes/monowhite/24/stop.png</file>
<file>themes/monowhite/24/write_eeprom.png</file>
<file>themes/monowhite/32/paintbrush.png</file>
<file>themes/monowhite/32/open.png</file>
<file>themes/monowhite/32/edit.png</file>
<file>themes/monowhite/32/information.png</file>
<file>themes/monowhite/32/configure.png</file>
<file>themes/monowhite/32/list.png</file>
<file>themes/monowhite/32/wizard.png</file>
<file>themes/monowhite/32/logs.png</file>
<file>themes/monowhite/32/new.png</file>
<file>themes/monowhite/32/save.png</file>
<file>themes/monowhite/32/recentdocument.png</file>
<file>themes/monowhite/32/simulate.png</file>
<file>themes/monowhite/32/changelog.png</file>
<file>themes/monowhite/32/copy.png</file>
<file>themes/monowhite/32/write_flash.png</file>
<file>themes/monowhite/32/read_eeprom_file.png</file>
<file>themes/monowhite/32/clear.png</file>
<file>themes/monowhite/32/play.png</file>
<file>themes/monowhite/32/fuses.png</file>
<file>themes/monowhite/32/arrow-right.png</file>
<file>themes/monowhite/32/exit.png</file>
<file>themes/monowhite/32/moveup.png</file>
<file>themes/monowhite/32/read_eeprom.png</file>
<file>themes/monowhite/32/cut.png</file>
<file>themes/monowhite/32/arrow-left.png</file>
<file>themes/monowhite/32/write_eeprom_file.png</file>
<file>themes/monowhite/32/library.png</file>
<file>themes/monowhite/32/profiles.png</file>
<file>themes/monowhite/32/paste.png</file>
<file>themes/monowhite/32/print.png</file>
<file>themes/monowhite/32/compare.png</file>
<file>themes/monowhite/32/saveas.png</file>
<file>themes/monowhite/32/preferences.png</file>
<file>themes/monowhite/32/movedown.png</file>
<file>themes/monowhite/32/currentmodel.png</file>
<file>themes/monowhite/32/read_flash.png</file>
<file>themes/monowhite/32/duplicate.png</file>
<file>themes/monowhite/32/add.png</file>
<file>themes/monowhite/32/update.png</file>
<file>themes/monowhite/32/contributors.png</file>
<file>themes/monowhite/32/stop.png</file>
<file>themes/monowhite/32/write_eeprom.png</file>
<file>themes/monowhite/48/paintbrush.png</file>
<file>themes/monowhite/48/open.png</file>
<file>themes/monowhite/48/edit.png</file>
<file>themes/monowhite/48/information.png</file>
<file>themes/monowhite/48/configure.png</file>
<file>themes/monowhite/48/list.png</file>
<file>themes/monowhite/48/wizard.png</file>
<file>themes/monowhite/48/logs.png</file>
<file>themes/monowhite/48/new.png</file>
<file>themes/monowhite/48/save.png</file>
<file>themes/monowhite/48/recentdocument.png</file>
<file>themes/monowhite/48/simulate.png</file>
<file>themes/monowhite/48/changelog.png</file>
<file>themes/monowhite/48/copy.png</file>
<file>themes/monowhite/48/write_flash.png</file>
<file>themes/monowhite/48/read_eeprom_file.png</file>
<file>themes/monowhite/48/clear.png</file>
<file>themes/monowhite/48/play.png</file>
<file>themes/monowhite/48/fuses.png</file>
<file>themes/monowhite/48/arrow-right.png</file>
<file>themes/monowhite/48/exit.png</file>
<file>themes/monowhite/48/moveup.png</file>
<file>themes/monowhite/48/read_eeprom.png</file>
<file>themes/monowhite/48/cut.png</file>
<file>themes/monowhite/48/arrow-left.png</file>
<file>themes/monowhite/48/write_eeprom_file.png</file>
<file>themes/monowhite/48/library.png</file>
<file>themes/monowhite/48/profiles.png</file>
<file>themes/monowhite/48/paste.png</file>
<file>themes/monowhite/48/print.png</file>
<file>themes/monowhite/48/compare.png</file>
<file>themes/monowhite/48/saveas.png</file>
<file>themes/monowhite/48/preferences.png</file>
<file>themes/monowhite/48/movedown.png</file>
<file>themes/monowhite/48/currentmodel.png</file>
<file>themes/monowhite/48/read_flash.png</file>
<file>themes/monowhite/48/duplicate.png</file>
<file>themes/monowhite/48/add.png</file>
<file>themes/monowhite/48/update.png</file>
<file>themes/monowhite/48/contributors.png</file>
<file>themes/monowhite/48/stop.png</file>
<file>themes/monowhite/48/write_eeprom.png</file>
</qresource>
</RCC>

View file

@ -48,7 +48,7 @@ compareDialog::compareDialog(QWidget *parent, GeneralSettings *gg) :
void compareDialog::dragMoveEvent(QDragMoveEvent *event)
{
if (event->mimeData()->hasFormat("application/x-companion9x")) {
if (event->mimeData()->hasFormat("application/x-companion")) {
event->acceptProposedAction();
} else {
event->ignore();
@ -58,7 +58,7 @@ void compareDialog::dragMoveEvent(QDragMoveEvent *event)
void compareDialog::dragEnterEvent(QDragEnterEvent *event)
{
// accept just text/uri-list mime format
if (event->mimeData()->hasFormat("application/x-companion9x")) {
if (event->mimeData()->hasFormat("application/x-companion")) {
event->acceptProposedAction();
} else {
event->ignore();
@ -95,8 +95,8 @@ void compareDialog::dropEvent(QDropEvent *event)
const QMimeData *mimeData = event->mimeData();
if (child) {
if (child->objectName().contains("label_1")) {
if(mimeData->hasFormat("application/x-companion9x")) {
QByteArray gmData = mimeData->data("application/x-companion9x");
if(mimeData->hasFormat("application/x-companion")) {
QByteArray gmData = mimeData->data("application/x-companion");
DragDropHeader *header = (DragDropHeader *)gmData.data();
if (!header->general_settings) {
char *gData = gmData.data()+sizeof(DragDropHeader);//new char[gmData.size() + 1];
@ -120,8 +120,8 @@ void compareDialog::dropEvent(QDropEvent *event)
}
}
else if (child->objectName().contains("label_2")) {
if(mimeData->hasFormat("application/x-companion9x")) {
QByteArray gmData = mimeData->data("application/x-companion9x");
if(mimeData->hasFormat("application/x-companion")) {
QByteArray gmData = mimeData->data("application/x-companion");
DragDropHeader *header = (DragDropHeader *)gmData.data();
if (!header->general_settings) {
char *gData = gmData.data()+sizeof(DragDropHeader);//new char[gmData.size() + 1];
@ -305,7 +305,7 @@ void compareDialog::printPhases()
str.append("</b></td><td rowspan=2 align=\"center\" valign=\"bottom\"><b>"+tr("Switch")+"</b></td></tr><tr><td align=center width=\"80\"><b>"+tr("Flight mode name"));
str.append("</b></td><td align=center width=\"30\"><b>"+tr("IN")+"</b></td><td align=center width=\"30\"><b>"+tr("OUT")+"</b></td>");
for (i=0; i<4; i++) {
str.append(QString("<td width=\"40\" align=\"center\"><b>%1</b></td>").arg(getStickStr(i)));
str.append(QString("<td width=\"40\" align=\"center\"><b>%1</b></td>").arg(getInputStr(*g_model1, i)));
}
str.append("</tr>");
for (i=0; i<GetEepromInterface()->getCapability(FlightPhases); i++) {
@ -406,7 +406,7 @@ void compareDialog::printPhases()
str.append("</b></td><td rowspan=2 align=\"center\" valign=\"bottom\"><b>"+tr("Switch")+"</b></td></tr><tr><td align=center width=\"80\"><b>"+tr("Flight mode name"));
str.append("</b></td><td align=center width=\"30\"><b>"+tr("IN")+"</b></td><td align=center width=\"30\"><b>"+tr("OUT")+"</b></td>");
for (i=0; i<4; i++) {
str.append(QString("<td width=\"40\" align=\"center\"><b>%1</b></td>").arg(getStickStr(i)));
str.append(QString("<td width=\"40\" align=\"center\"><b>%1</b></td>").arg(getInputStr(*g_model1, i)));
}
str.append("</tr>");
for (i=0; i<GetEepromInterface()->getCapability(FlightPhases); i++) {
@ -694,7 +694,7 @@ void compareDialog::printExpos()
}
}
str.append("</table></td>");
str.append("<td width=\"10%\" align=\"center\" valign=\"middle\"><b>"+getStickStr(i)+"</b></td>");
str.append("<td width=\"10%\" align=\"center\" valign=\"middle\"><b>"+getInputStr(*g_model2, i)+"</b></td>");
str.append("<td width=\"45%\">");
str.append("<table border=0 cellspacing=0 cellpadding=0>");
for (int j=0; j<C9X_MAX_EXPOS; j++) {
@ -1038,7 +1038,7 @@ void compareDialog::printSwitches()
int sc=0;
QString color;
QString str = "<table border=1 cellspacing=0 cellpadding=3 width=\"100%\">";
str.append("<tr><td><h2>"+tr("Custom Switches")+"</h2></td></tr>");
str.append("<tr><td><h2>"+tr("Logical Switches")+"</h2></td></tr>");
str.append("<tr><td><table border=1 cellspacing=0 cellpadding=1 width=\"100%\">");
for (int i=0; i<GetEepromInterface()->getCapability(CustomSwitches); i++) {
QString sw1 = getCustomSwitchStr(&g_model1->customSw[i], *g_model1);
@ -1048,9 +1048,9 @@ void compareDialog::printSwitches()
color=getColor1(sw1,sw2);
str.append(QString("<td width=\"45%\"><font color=%1>").arg(color)+sw1+"</font></td>");
if (i<9) {
str.append("<td align=\"center\" width=\"10%\"><b>"+tr("CS")+QString("%1</b></td>").arg(i+1));
str.append("<td align=\"center\" width=\"10%\"><b>"+tr("LS")+QString("%1</b></td>").arg(i+1));
} else {
str.append("<td align=\"center\" width=\"10%\"><b>"+tr("CS")+('A'+(i-9))+"</b></td>");
str.append("<td align=\"center\" width=\"10%\"><b>"+tr("LS")+('A'+(i-9))+"</b></td>");
}
color=getColor2(sw1,sw2);
str.append(QString("<td width=\"45%\"><font color=%1>").arg(color)+sw2+"</font></td>");
@ -1069,7 +1069,7 @@ void compareDialog::printFSwitches()
QString color2;
int sc=0;
QString str = "<table border=1 cellspacing=0 cellpadding=3 style=\"page-break-before:always;\" width=\"100%\">";
str.append("<tr><td><h2>"+tr("Custom Functions")+"</h2></td></tr>");
str.append("<tr><td><h2>"+tr("Switch Assignment")+"</h2></td></tr>");
str.append("<tr><td><table border=1 cellspacing=0 cellpadding=1 width=\"100%\"><tr>");
str.append("<td width=\"7%\" align=\"center\"><b>"+tr("Switch")+"</b></td>");
str.append("<td width=\"12%\" align=\"center\"><b>"+tr("Function")+"</b></td>");
@ -1260,6 +1260,7 @@ void compareDialog::printFrSky()
color=getColor1(fd1->rssiAlarms[1].value,fd2->rssiAlarms[1].value);
str.append("<td align=\"center\"><font color="+color+">"+QString::number(fd1->rssiAlarms[1].value,10)+"</td>");
str.append("</table>");
#if 0
if (GetEepromInterface()->getCapability(TelemetryBars) || GetEepromInterface()->getCapability(TelemetryCSFields)) {
int cols=GetEepromInterface()->getCapability(TelemetryColsCSFields);
if (cols==0) cols=2;
@ -1300,13 +1301,13 @@ void compareDialog::printFrSky()
if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor1(fd1->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].source);
str.append("<td align=\"Center\"><font color="+color+">"+getFrSkySrc(fd1->screens[0].body.bars[i].source)+"</font></td>");
value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMin,fd1);
value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMin,fd2);
// TODO value1 = getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMin,fd1);
// TODO value2 = getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMin,fd2);
if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor1(value1,value2);
str.append("<td align=\"Right\"><font color="+color+">"+QString::number(value1)+"</td>");
value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMax,fd1);
value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMax,fd2);
// TODO value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMax,fd1);
// TODO value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMax,fd2);
if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor1(value1,value2);
str.append("<td align=\"Right\"><font color="+color+">"+QString::number(value1)+"</td></tr>");
@ -1315,6 +1316,7 @@ void compareDialog::printFrSky()
}
}
}
#endif
str.append("</td><td width=\"50%\">");
str.append("<table border=1 cellspacing=0 cellpadding=1 width=\"100%\">");
@ -1377,7 +1379,7 @@ void compareDialog::printFrSky()
color=getColor2(fd1->rssiAlarms[1].value,fd2->rssiAlarms[1].value);
str.append("<td align=\"center\"><font color="+color+">"+QString::number(fd2->rssiAlarms[1].value,10)+"</td>");
str.append("</table></br>");
#if 0
if (GetEepromInterface()->getCapability(TelemetryBars) || GetEepromInterface()->getCapability(TelemetryCSFields)) {
int cols=GetEepromInterface()->getCapability(TelemetryColsCSFields);
if (cols==0) cols=2;
@ -1418,13 +1420,13 @@ void compareDialog::printFrSky()
if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor2(fd1->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].source);
str.append("<td align=\"Center\"><font color="+color+">"+getFrSkySrc(fd2->screens[0].body.bars[i].source)+"</font></td>");
value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMin,fd1);
value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMin,fd2);
// TODO value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMin,fd1);
// TODO value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMin,fd2);
if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor2(value1,value2);
str.append("<td align=\"Right\"><font color="+color+">"+QString::number(value2)+"</font></td>");
value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMax,fd1);
value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMax,fd2);
// TODO value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMax,fd1);
// TODO value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMax,fd2);
if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor2(value1,value2);
str.append("<td align=\"Right\"><font color="+color+">"+QString::number(value2)+"</font></td></tr>");
@ -1433,6 +1435,7 @@ void compareDialog::printFrSky()
}
}
}
#endif
str.append("</td></tr></table>");
te->append(str);
}

View file

@ -30,7 +30,7 @@
</property>
<property name="windowIcon">
<iconset resource="companion.qrc">
<normaloff>:/images/print.png</normaloff>:/images/print.png</iconset>
<normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">

View file

@ -1,7 +1,6 @@
#include "contributorsdialog.h"
#include "ui_contributorsdialog.h"
#include <QtGui>
#define CLINESEP "=====================================================\n"
contributorsDialog::contributorsDialog(QWidget *parent, int contest, QString rnurl) :
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
@ -9,44 +8,88 @@ contributorsDialog::contributorsDialog(QWidget *parent, int contest, QString rnu
{
ui->setupUi(this);
switch (contest) {
case 0: {
ui->textBrowser->insertPlainText(CLINESEP);
ui->textBrowser->insertPlainText(tr("People who have contributed to this project")+"\n");
ui->textBrowser->insertPlainText(CLINESEP);
QFile file(":/contributors");
if(file.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
ui->textBrowser->insertPlainText(file.readAll());
case 0:
{
QFile file(":/DONATIONS.txt");
QString str;
str.append("<html><head>");
str.append("<style type=\"text/css\">\n");
str.append(".mycss\n{\nfont-weight:normal;\ncolor:#000000;vertical-align: top;font-size:10px;text-align:left;font-family:arial, helvetica, sans-serif;\n}\n");
str.append(".mycssb\n{\nfont-weight:bold;\ncolor:#C00000;vertical-align: top;font-size:10px;text-align:left;font-family:arial, helvetica, sans-serif;\n}\n");
str.append(".myhead\n{\nfont-weight:bold;\ncolor:#000000;font-size:14px;text-align:left;font-family:arial, helvetica, sans-serif;\n}\n");
str.append("</style>\n</head><body class=\"mycss\"><table width=\"100%\" border=0 cellspacing=0 cellpadding=2>");
str.append("<tr><td class=\"myhead\">"+tr("People who have contributed to this project")+"</td></tr>");
str.append("</table>");
str.append("<table width=\"100%\" border=0 cellspacing=0 cellpadding=2>");
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
int columns=6;
float cwidth=100.0/columns;
while (!file.atEnd()) {
str.append("<tr>");
for (int i=0; i<columns; i++) {
str.append(QString("<td width=\"%1%\" ").arg(cwidth));
if (!file.atEnd()) {
QByteArray line = file.readLine();
if (line.contains("monthly") || line.contains("mensual")) {
str.append("class=\"mycssb\">");
} else {
str.append("class=\"mycss\">");
}
str.append(line.trimmed()+"</td>");
} else {
str.append("class=\"mycss\">&nbsp;</td>");
}
}
str.append("</tr>");
}
}
ui->textBrowser->insertPlainText("\n");
ui->textBrowser->insertPlainText(CLINESEP);
ui->textBrowser->insertPlainText(tr("Coders")+"\n");
ui->textBrowser->insertPlainText(CLINESEP);
QFile file2(":/coders");
str.append("</table>");
QFile file2(":/CREDITS.txt");
str.append("<table width=\"100%\" border=0 cellspacing=0 cellpadding=2>");
str.append("<tr><td class=\"mycss\">&nbsp;</td></tr>");
str.append("<tr><td class=\"myhead\">"+tr("Coders")+"</td></tr>");
str.append("</table>");
str.append("<table width=\"100%\" border=0 cellspacing=0 cellpadding=2>");
if(file2.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
ui->textBrowser->insertPlainText(file2.readAll());
}
ui->textBrowser->insertPlainText("\n\n\n");
ui->textBrowser->insertPlainText(tr(
"Honors go to Rafal Tomczak (RadioClone) and Thomas Husterer (th9x) \nof course. Also to Erez Raviv (er9x) and the fantastic eePe program \nwhich was the staring point for OpenTX Companion."));
ui->textBrowser->insertPlainText("\n\n");
ui->textBrowser->insertPlainText(tr("Thank you all !!!"));
ui->textBrowser->setReadOnly(true);
ui->textBrowser->verticalScrollBar()->setValue(0);
this->setWindowTitle(tr("Contributors"));
while (!file2.atEnd()) {
str.append("<tr>");
for (int i=0; i<3; i++) {
str.append("<td width=\"33.33%\" class=\"mycss\">");
if (!file2.atEnd()) {
QByteArray line = file2.readLine();
str.append(line.trimmed());
} else {
str.append("&nbsp;");
}
str.append("</td>");
}
str.append("</tr>");
}
}
str.append("<tr><td class=\"mycss\">&nbsp;</td></tr>");
str.append("<tr><td colspan=3 class=\"mycss\">" + tr("Honors go to Rafal Tomczak (RadioClone), Thomas Husterer (th9x) and Erez Raviv (er9x and eePe)") + "<br/></td></tr>");
str.append("<tr><td colspan=3 class=\"mycss\">" + tr("Thank you all !!!") + "</td></tr>");
str.append("</table>");
str.append("</body></html>");
ui->textEditor->setHtml(str);
ui->textEditor->scroll(0, 0);
setWindowTitle(tr("Contributors"));
break;
}
case 1:{
QFile file(":/releasenotes");
case 1:
{
QFile file(":/releasenotes.txt");
if(file.open( QIODevice::ReadOnly | QIODevice::Text ) ) {
ui->textBrowser->insertHtml(file.readAll());
}
ui->textBrowser->setReadOnly(true);
ui->textBrowser->verticalScrollBar()->setValue(0);
this->setWindowTitle(tr("Companion Release Notes"));
ui->textEditor->setHtml(file.readAll());
}
ui->textEditor->scroll(0,0);
setWindowTitle(tr("Companion Release Notes"));
break;
case 2:{
}
case 2:
{
if (!rnurl.isEmpty()) {
this->setWindowTitle(tr("OpenTX Release Notes"));
manager = new QNetworkAccessManager(this);
@ -55,7 +98,8 @@ contributorsDialog::contributorsDialog(QWidget *parent, int contest, QString rnu
QNetworkRequest request(url);
request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::AlwaysNetwork);
manager->get(request);
} else {
}
else {
QTimer::singleShot(0, this, SLOT(forceClose()));
}
break;
@ -65,7 +109,7 @@ contributorsDialog::contributorsDialog(QWidget *parent, int contest, QString rnu
void contributorsDialog::showEvent ( QShowEvent * )
{
ui->textBrowser->verticalScrollBar()->setValue(0);
ui->textEditor->scroll(0, 0);
}
contributorsDialog::~contributorsDialog()
@ -75,9 +119,10 @@ contributorsDialog::~contributorsDialog()
void contributorsDialog::replyFinished(QNetworkReply * reply)
{
ui->textBrowser->insertHtml(reply->readAll());
ui->textEditor->setHtml(reply->readAll());
}
void contributorsDialog::forceClose() {
void contributorsDialog::forceClose()
{
accept();;
}

View file

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>926</width>
<height>333</height>
<width>788</width>
<height>528</height>
</rect>
</property>
<property name="windowTitle">
@ -19,7 +19,7 @@
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QTextBrowser" name="textBrowser"/>
<widget class="QTextEdit" name="textEditor"/>
</item>
</layout>
</widget>

View file

@ -8,56 +8,60 @@
#include "flashinterface.h"
customizeSplashDialog::customizeSplashDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::customizeSplashDialog) {
QDialog(parent),
ui(new Ui::customizeSplashDialog)
{
ui->setupUi(this);
ui->libraryButton->setIcon(CompanionIcon("library.png"));
ui->HowToLabel->clear();
ui->HowToLabel->append("<center>" + tr("Select an original firmware file") + "</center>");
}
customizeSplashDialog::~customizeSplashDialog() {
customizeSplashDialog::~customizeSplashDialog()
{
delete ui;
}
void customizeSplashDialog::on_FlashLoadButton_clicked()
{
QString fileName;
QSettings settings("companion9x", "companion9x");
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)");
fileName = QFileDialog::getOpenFileName(this, tr("Open"), settings.value("lastFlashDir").toString(), FLASH_FILES_FILTER);
QFile file(fileName);
if (!file.exists()) {
ui->FWFileName->clear();
ui->HowToLabel->append("<center>" + tr("Select an original firmware file") + "</center>");
return;
}
if (fileName.isEmpty()) {
ui->FWFileName->clear();
ui->HowToLabel->append("<center>" + tr("Select an original firmware file") + "</center>");
return;
}
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("<center>" + tr("Select an original firmware file") + "</center>");
return;
}
if (fileName.isEmpty()) {
ui->FWFileName->clear();
ui->HowToLabel->append("<center>" + tr("Select an original firmware file") + "</center>");
return;
}
ui->FWFileName->setText(fileName);
FlashInterface flash(fileName);
if (flash.hasSplash()) {
ui->HowToLabel->append("<center>" + tr("Select an image to customize your splash <br />or save actual firmware splash") + "</center>");
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 {
QMessageBox::information(this, tr("Error"), tr("Could not find bitmap to replace in file"));
return;
ui->FWFileName->setText(fileName);
FlashInterface flash(fileName);
if (flash.hasSplash()) {
ui->HowToLabel->append("<center>" + tr("Select an image to customize your splash <br />or save actual firmware splash") + "</center>");
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 {
QMessageBox::information(this, tr("Error"), tr("Could not find bitmap to replace in file"));
return;
}
settings.setValue("lastFlashDir", QFileInfo(fileName).dir().absolutePath());
}
settings.setValue("lastFlashDir", QFileInfo(fileName).dir().absolutePath());
}
void customizeSplashDialog::on_ImageLoadButton_clicked() {
@ -66,7 +70,7 @@ void customizeSplashDialog::on_ImageLoadButton_clicked() {
supportedImageFormats += QLatin1String(" *.") + QImageReader::supportedImageFormats()[formatIndex];
}
QSettings settings("companion9x", "companion9x");
QSettings settings;
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open Image to load"), settings.value("lastImagesDir").toString(), tr("Images (%1)").arg(supportedImageFormats));
@ -143,7 +147,7 @@ void customizeSplashDialog::on_libraryButton_clicked() {
void customizeSplashDialog::on_SaveFlashButton_clicked()
{
QString fileName;
QSettings settings("companion9x", "companion9x");
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()) {
@ -176,7 +180,7 @@ void customizeSplashDialog::on_InvertColorButton_clicked()
void customizeSplashDialog::on_SaveImageButton_clicked()
{
QString fileName;
QSettings settings("companion9x", "companion9x");
QSettings settings;
fileName = QFileDialog::getSaveFileName(this, tr("Write to file"), settings.value("lastImagesDir").toString(), tr("PNG images (*.png);;"), 0, QFileDialog::DontConfirmOverwrite);
if (!fileName.isEmpty()) {

View file

@ -20,8 +20,8 @@
<string>Customize Splash</string>
</property>
<property name="windowIcon">
<iconset>
<normaloff>:/images/c_home.png</normaloff>:/images/c_home.png</iconset>
<iconset resource="companion.qrc">
<normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
@ -211,10 +211,6 @@ p, li { white-space: pre-wrap; }
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="companion.qrc">
<normaloff>:/images/library.png</normaloff>:/images/library.png</iconset>
</property>
<property name="iconSize">
<size>
<width>16</width>

View file

@ -37,215 +37,117 @@ void getEEPROMString(char *dst, const char *src, int size)
}
}
int RawSource::getDecimals(const ModelData & Model)
RawSourceRange RawSource::getRange(bool singleprec)
{
if(type==SOURCE_TYPE_TELEMETRY) {
switch (index) {
case TELEMETRY_SOURCE_A1:
case TELEMETRY_SOURCE_A2:
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0 ? 2: 0);
case TELEMETRY_SOURCE_CELL:
return 2;
case TELEMETRY_SOURCE_CELLS_SUM:
case TELEMETRY_SOURCE_VFAS:
case TELEMETRY_SOURCE_CURRENT:
return 1;
default:
return 0;
}
}
return 0;
}
RawSourceRange result;
int board = GetEepromInterface()->getBoard();
if (!singleprec && !IS_TARANIS(board)) {
singleprec = true;
}
double RawSource::getMin(const ModelData & Model)
{
switch (type) {
case SOURCE_TYPE_TELEMETRY:
switch (index) {
/*case TELEMETRY_SOURCE_NONE:
case TELEMETRY_SOURCE_TX_BATT:
result.step = 0.1;
result.decimals = 1;
result.max = 25.5;
break;
case TELEMETRY_SOURCE_TIMER1:
case TELEMETRY_SOURCE_TIMER2:
return 0; */
case TELEMETRY_SOURCE_A1:
case TELEMETRY_SOURCE_A2:
if (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0) {
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/2550.0;
}
else {
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/255.0;
}
case TELEMETRY_SOURCE_ALT:
case TELEMETRY_SOURCE_GPS_ALT:
return -500;
case TELEMETRY_SOURCE_T1:
case TELEMETRY_SOURCE_T2:
return -30;
default:
return 0;
}
break;
default:
return (Model.extendedLimits ? -125 :-100);
}
}
double RawSource::getMax(const ModelData & Model)
{
switch (type) {
case SOURCE_TYPE_TELEMETRY:
switch (index) {
case TELEMETRY_SOURCE_TIMER1:
case TELEMETRY_SOURCE_TIMER2:
return 765;
result.step = singleprec ? 3 : 1;
result.max = singleprec ? 765 : 7200;
break;
case TELEMETRY_SOURCE_RSSI_TX:
case TELEMETRY_SOURCE_RSSI_RX:
return 100;
result.max = 100;
break;
case TELEMETRY_SOURCE_A1:
case TELEMETRY_SOURCE_A2:
if (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0) {
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio-(Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/255.0)/10;
} else {
return Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio-(Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/255.0;
if (model) {
const FrSkyChannelData & channel = model->frsky.channels[index-TELEMETRY_SOURCE_A1];
float ratio = channel.getRatio();
if (channel.type==0 || channel.type==1 || channel.type==2)
result.decimals = 2;
else
result.decimals = 0;
result.step = ratio / 255;
result.min = channel.offset * result.step;
result.max = ratio + result.min;
}
break;
case TELEMETRY_SOURCE_ALT:
case TELEMETRY_SOURCE_GPS_ALT:
return 1540;
case TELEMETRY_SOURCE_RPM:
return 12750;
case TELEMETRY_SOURCE_FUEL:
return 100;
result.step = singleprec ? 8 : 1;
result.min = -500;
result.max = singleprec ? 1540 : 3000;
break;
case TELEMETRY_SOURCE_T1:
case TELEMETRY_SOURCE_T2:
return 225;
case TELEMETRY_SOURCE_SPEED:
return 944;
case TELEMETRY_SOURCE_DIST:
return 2040;
case TELEMETRY_SOURCE_CELL:
return 5.1;
case TELEMETRY_SOURCE_CELLS_SUM:
case TELEMETRY_SOURCE_VFAS:
return 25.5;
case TELEMETRY_SOURCE_CURRENT:
return 127.5;
case TELEMETRY_SOURCE_CONSUMPTION:
return 5100;
case TELEMETRY_SOURCE_POWER:
return 1275;
default:
return 125;
}
break;
default:
return (Model.extendedLimits ? 125 :100);
}
}
double RawSource::getOffset(const ModelData & Model)
{
if (type==SOURCE_TYPE_TELEMETRY) {
switch (index) {
case TELEMETRY_SOURCE_A1:
case TELEMETRY_SOURCE_A2:
if (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0) {
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/2550.0;
}
else {
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/255.0;
}
case TELEMETRY_SOURCE_ALT:
case TELEMETRY_SOURCE_GPS_ALT:
return 524;
case TELEMETRY_SOURCE_RPM:
return 6400;
case TELEMETRY_SOURCE_FUEL:
return 0;
case TELEMETRY_SOURCE_T1:
case TELEMETRY_SOURCE_T2:
return 98;
case TELEMETRY_SOURCE_SPEED:
return 474;
case TELEMETRY_SOURCE_DIST:
return 1024;
case TELEMETRY_SOURCE_CELL:
return 2.56;
default:
return 0;
}
}
return 0;
}
int RawSource::getRawOffset(const ModelData & Model)
{
switch (type) {
case SOURCE_TYPE_TELEMETRY:
switch (index) {
case TELEMETRY_SOURCE_TIMER1:
case TELEMETRY_SOURCE_TIMER2:
case TELEMETRY_SOURCE_RSSI_TX:
case TELEMETRY_SOURCE_RSSI_RX:
case TELEMETRY_SOURCE_A1:
case TELEMETRY_SOURCE_A2:
case TELEMETRY_SOURCE_FUEL:
case TELEMETRY_SOURCE_CELLS_SUM:
case TELEMETRY_SOURCE_VFAS:
case TELEMETRY_SOURCE_CURRENT:
case TELEMETRY_SOURCE_CONSUMPTION:
case TELEMETRY_SOURCE_POWER:
return 128;
default:
return 0;
}
default:
return 0;
}
}
double RawSource::getStep(const ModelData & Model)
{
switch (type) {
case SOURCE_TYPE_TELEMETRY:
switch (index) {
case TELEMETRY_SOURCE_TIMER1:
case TELEMETRY_SOURCE_TIMER2:
return 3;
case TELEMETRY_SOURCE_A1:
case TELEMETRY_SOURCE_A2:
if (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0) {
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio/2550.0);
}
else {
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio/255.0);
}
case TELEMETRY_SOURCE_ALT:
case TELEMETRY_SOURCE_GPS_ALT:
return 8;
result.min = -30;
result.max = 225;
break;
case TELEMETRY_SOURCE_RPM:
return 50;
result.step = singleprec ? 50 : 1;
result.max = singleprec ? 12750 : 20000;
break;
case TELEMETRY_SOURCE_FUEL:
result.max = 100;
break;
case TELEMETRY_SOURCE_SPEED:
return 4;
result.step = singleprec ? 4 : 1;
result.max = singleprec ? 944 : 2000;
if (model && !model->frsky.imperial) {
result.step *= 1.852;
result.max *= 1.852;
}
break;
case TELEMETRY_SOURCE_DIST:
return 8;
result.step = singleprec ? 8 : 1;
result.max = singleprec ? 2040 : 10000;
break;
case TELEMETRY_SOURCE_CELL:
return 0.02;
result.step = singleprec ? 0.02 : 0.01;
result.max = 5.1;
result.decimals = 2;
break;
case TELEMETRY_SOURCE_CELLS_SUM:
case TELEMETRY_SOURCE_VFAS:
return 0.1;
result.step = 0.1;
result.max = 25.5;
result.decimals = 1;
break;
case TELEMETRY_SOURCE_CURRENT:
return 0.5;
result.step = singleprec ? 0.5 : 0.1;
result.max = singleprec ? 127.5 : 200.0;
result.decimals = 1;
break;
case TELEMETRY_SOURCE_CONSUMPTION:
return 20;
result.step = singleprec ? 20 : 1;
result.max = singleprec ? 5100 : 10000;
break;
case TELEMETRY_SOURCE_POWER:
return 5;
result.step = singleprec ? 5 : 1;
result.max = singleprec ? 1275 : 2000;
break;
default:
return 1;
result.max = 125;
break;
}
if (singleprec) {
result.offset = result.max - (127*result.step);
}
break;
default:
return 1;
default:
result.max = (model && model->extendedLimits ? 125 : 100);
result.min = - result.max;
break;
}
return result;
}
QString AnalogString(int index)
@ -278,16 +180,21 @@ QString RawSource::toString()
QObject::tr("Cur+"), QObject::tr("Pwr+"), QObject::tr("ACC "), QObject::tr("Time"),
};
static const QString virtualSwitches[] = { QObject::tr("CS1"), QObject::tr("CS2"), QObject::tr("CS3"), QObject::tr("CS4"), QObject::tr("CS5"), QObject::tr("CS6"), QObject::tr("CS7"), QObject::tr("CS8"), QObject::tr("CS9"), QObject::tr("CSA"),
QObject::tr("CSB"), QObject::tr("CSC"), QObject::tr("CSD"), QObject::tr("CSE"), QObject::tr("CSF"), QObject::tr("CSG"), QObject::tr("CSH"), QObject::tr("CSI"), QObject::tr("CSJ"), QObject::tr("CSK"),
QObject::tr("CSL"), QObject::tr("CSM"), QObject::tr("CSN"), QObject::tr("CSO"), QObject::tr("CSP"), QObject::tr("CSQ"), QObject::tr("CSR"), QObject::tr("CSS"), QObject::tr("CST"), QObject::tr("CSU"),
QObject::tr("CSV"), QObject::tr("CSW")
static const QString virtualSwitches[] = { QObject::tr("LS1"), QObject::tr("LS2"), QObject::tr("LS3"), QObject::tr("LS4"), QObject::tr("LS5"), QObject::tr("LS6"), QObject::tr("LS7"), QObject::tr("LS8"), QObject::tr("LS9"), QObject::tr("LSA"),
QObject::tr("LSB"), QObject::tr("LSC"), QObject::tr("LSD"), QObject::tr("LSE"), QObject::tr("LSF"), QObject::tr("LSG"), QObject::tr("LSH"), QObject::tr("LSI"), QObject::tr("LSJ"), QObject::tr("LSK"),
QObject::tr("LSL"), QObject::tr("LSM"), QObject::tr("LSN"), QObject::tr("LSO"), QObject::tr("LSP"), QObject::tr("LSQ"), QObject::tr("LSR"), QObject::tr("LSS"), QObject::tr("LST"), QObject::tr("LSU"),
QObject::tr("LSV"), QObject::tr("LSW")
};
if (index<0) {
return QObject::tr("----");
}
switch(type) {
switch (type) {
case SOURCE_TYPE_VIRTUAL_INPUT:
if (model && strlen(model->inputNames[index]) > 0)
return QString(model->inputNames[index]);
else
return QObject::tr("Input %1").arg(index+1);
case SOURCE_TYPE_STICK:
return AnalogString(index);
case SOURCE_TYPE_TRIM:
@ -332,26 +239,34 @@ QString SwitchDn(const char sw)
QString RawSwitch::toString()
{
static const QString switches9X[] = { QObject::tr("THR"), QObject::tr("RUD"), QObject::tr("ELE"),
QObject::tr("ID0"), QObject::tr("ID1"), QObject::tr("ID2"),
QObject::tr("AIL"), QObject::tr("GEA"), QObject::tr("TRN")
};
static const QString switches9X[] = {
QString("THR"), QString("RUD"), QString("ELE"),
QString("ID0"), QString("ID1"), QString("ID2"),
QString("AIL"), QString("GEA"), QString("TRN")
};
static const QString switchesX9D[] = { SwitchUp('A'), QString::fromUtf8("SA-"), SwitchDn('A'),
SwitchUp('B'), QString::fromUtf8("SB-"), SwitchDn('B'),
SwitchUp('C'), QString::fromUtf8("SC-"), SwitchDn('C'),
SwitchUp('D'), QString::fromUtf8("SD-"), SwitchDn('D'),
SwitchUp('E'), QString::fromUtf8("SE-"), SwitchDn('E'),
SwitchUp('F'), SwitchDn('F'),
SwitchUp('G'), QString::fromUtf8("SG-"), SwitchDn('G'),
SwitchUp('H'), SwitchDn('H'),
};
static const QString switchesX9D[] = {
SwitchUp('A'), QString::fromUtf8("SA-"), SwitchDn('A'),
SwitchUp('B'), QString::fromUtf8("SB-"), SwitchDn('B'),
SwitchUp('C'), QString::fromUtf8("SC-"), SwitchDn('C'),
SwitchUp('D'), QString::fromUtf8("SD-"), SwitchDn('D'),
SwitchUp('E'), QString::fromUtf8("SE-"), SwitchDn('E'),
SwitchUp('F'), SwitchDn('F'),
SwitchUp('G'), QString::fromUtf8("SG-"), SwitchDn('G'),
SwitchUp('H'), SwitchDn('H'),
};
static const QString virtualSwitches[] = { QObject::tr("CS1"), QObject::tr("CS2"), QObject::tr("CS3"), QObject::tr("CS4"), QObject::tr("CS5"), QObject::tr("CS6"), QObject::tr("CS7"), QObject::tr("CS8"), QObject::tr("CS9"), QObject::tr("CSA"),
QObject::tr("CSB"), QObject::tr("CSC"), QObject::tr("CSD"), QObject::tr("CSE"), QObject::tr("CSF"), QObject::tr("CSG"), QObject::tr("CSH"), QObject::tr("CSI"), QObject::tr("CSJ"), QObject::tr("CSK"),
QObject::tr("CSL"), QObject::tr("CSM"), QObject::tr("CSN"), QObject::tr("CSO"), QObject::tr("CSP"), QObject::tr("CSQ"), QObject::tr("CSR"), QObject::tr("CSS"), QObject::tr("CST"), QObject::tr("CSU"),
QObject::tr("CSV"), QObject::tr("CSW")
};
static const QString virtualSwitches[] = {
QObject::tr("LS1"), QObject::tr("LS2"), QObject::tr("LS3"), QObject::tr("LS4"), QObject::tr("LS5"), QObject::tr("LS6"), QObject::tr("LS7"), QObject::tr("LS8"), QObject::tr("LS9"), QObject::tr("LSA"),
QObject::tr("LSB"), QObject::tr("LSC"), QObject::tr("LSD"), QObject::tr("LSE"), QObject::tr("LSF"), QObject::tr("LSG"), QObject::tr("LSH"), QObject::tr("LSI"), QObject::tr("LSJ"), QObject::tr("LSK"),
QObject::tr("LSL"), QObject::tr("LSM"), QObject::tr("LSN"), QObject::tr("LSO"), QObject::tr("LSP"), QObject::tr("LSQ"), QObject::tr("LSR"), QObject::tr("LSS"), QObject::tr("LST"), QObject::tr("LSU"),
QObject::tr("LSV"), QObject::tr("LSW")
};
static const QString multiposPots[] = {
QObject::tr("S11"), QObject::tr("S12"), QObject::tr("S13"), QObject::tr("S14"), QObject::tr("S15"), QObject::tr("S16"),
QObject::tr("S21"), QObject::tr("S22"), QObject::tr("S23"), QObject::tr("S24"), QObject::tr("S25"), QObject::tr("S26")
};
switch(type) {
case SWITCH_TYPE_SWITCH:
@ -361,6 +276,8 @@ QString RawSwitch::toString()
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:
@ -438,7 +355,7 @@ GeneralSettings::GeneralSettings()
calibSpanNeg[i] = 0x180;
calibSpanPos[i] = 0x180;
}
QSettings settings("companion9x", "companion9x");
QSettings settings;
templateSetup = settings.value("default_channel_order", 0).toInt();
stickMode = settings.value("default_mode", 1).toInt();
int profile_id = settings.value("ActiveProfile", 0).toInt();
@ -659,7 +576,7 @@ ModelData ModelData::removeGlobalVars()
QList<EEPROMInterface *> eepromInterfaces;
void RegisterEepromInterfaces()
{
QSettings settings("companion9x", "companion9x");
QSettings settings;
int rev4a = settings.value("rev4asupport",0).toInt();
eepromInterfaces.push_back(new Open9xInterface(BOARD_STOCK));
eepromInterfaces.push_back(new Open9xInterface(BOARD_M128));
@ -697,7 +614,7 @@ void RegisterFirmwares()
#ifndef __APPLE__
firmwares.push_back(new FirmwareInfo("ersky9x", QObject::tr("ersky9x"), new Ersky9xInterface(), "http://ersky9x.googlecode.com/svn/trunk/ersky9x_rom.bin", ERSKY9X_STAMP));
#endif
default_firmware_variant = GetFirmwareVariant("opentx-stock-heli-templates-en");
default_firmware_variant = GetFirmwareVariant("opentx-9x-heli-templates-en");
RegisterEepromInterfaces();
}

View file

@ -51,7 +51,8 @@ enum BoardEnum {
BOARD_TARANIS_REV4a
};
#define IS_STOCK(board) (board==BOARD_STOCK || board==BOARD_M128)
#define IS_9X(board) (board==BOARD_STOCK || board==BOARD_M128)
#define IS_STOCK(board) (board==BOARD_STOCK)
#define IS_2560(board) (board==BOARD_GRUVIN9X || board==BOARD_MEGA2560)
#define IS_ARM(board) (board==BOARD_SKY9X || board==BOARD_TARANIS || board==BOARD_TARANIS_REV4a)
#define IS_TARANIS(board) (board==BOARD_TARANIS || board==BOARD_TARANIS_REV4a)
@ -65,6 +66,7 @@ const uint8_t modn12x3[4][4]= {
#define C9X_MAX_MODELS 60
#define C9X_MAX_PHASES 9
#define C9X_MAX_MIXERS 64
#define C9X_MAX_INPUTS 32
#define C9X_MAX_EXPOS 64
#define C9X_MAX_CURVES 32
#define C9X_MAX_POINTS 17
@ -281,23 +283,50 @@ class ModelData;
QString AnalogString(int index);
QString RotaryEncoderString(int index);
class RawSourceRange
{
public:
RawSourceRange():
decimals(0),
min(0.0),
max(0.0),
step(1.0),
offset(0.0)
{
}
float getValue(int value) {
return min + float(value) * step;
}
int decimals;
double min;
double max;
double step;
double offset;
};
class RawSource {
public:
RawSource():
type(SOURCE_TYPE_NONE),
index(0)
index(0),
model(NULL)
{
}
RawSource(int value):
RawSource(int value, const ModelData * model=NULL):
type(RawSourceType(abs(value)/65536)),
index(value >= 0 ? abs(value)%65536 : -(abs(value)%65536))
index(value >= 0 ? abs(value)%65536 : -(abs(value)%65536)),
model(model)
{
}
RawSource(RawSourceType type, int index=0):
RawSource(RawSourceType type, int index=0, const ModelData * model=NULL):
type(type),
index(index)
index(index),
model(model)
{
}
@ -308,25 +337,26 @@ class RawSource {
QString toString();
int getDecimals(const ModelData & Model);
double getMin(const ModelData & Model);
double getMax(const ModelData & Model);
double getStep(const ModelData & Model);
double getOffset(const ModelData & Model);
int getRawOffset(const ModelData & Model);
RawSourceRange getRange(bool singleprec=false);
bool operator== ( const RawSource& other) {
bool operator == ( const RawSource & other) {
return (this->type == other.type) && (this->index == other.index);
}
bool operator != ( const RawSource & other) {
return (this->type != other.type) || (this->index != other.index);
}
RawSourceType type;
int index;
const ModelData * model;
};
enum RawSwitchType {
SWITCH_TYPE_NONE,
SWITCH_TYPE_SWITCH,
SWITCH_TYPE_VIRTUAL,
SWITCH_TYPE_MULTIPOS_POT,
SWITCH_TYPE_MOMENT_SWITCH,
SWITCH_TYPE_MOMENT_VIRTUAL,
SWITCH_TYPE_ON,
@ -473,6 +503,8 @@ class GeneralSettings {
int backgroundVolume;
unsigned int mavbaud;
unsigned int switchUnlockStates;
unsigned int hw_uartMode;
unsigned int potsType[8];
};
class CurveReference {
@ -552,7 +584,7 @@ class LimitData {
bool symetrical;
char name[6+1];
CurveReference curve;
void clear() { memset(this, 0, sizeof(LimitData)); min = -100; max = +100; }
void clear() { memset(this, 0, sizeof(LimitData)); min = -1000; max = +1000; }
};
enum MltpxValue {
@ -641,7 +673,7 @@ class FuncSwData { // Function Switches data
char paramarm[10];
unsigned int enabled; // TODO perhaps not any more the right name
unsigned int adjustMode;
unsigned int repeatParam;
int repeatParam;
void clear() { memset(this, 0, sizeof(FuncSwData)); }
};
@ -707,6 +739,14 @@ class FrSkyChannelData {
unsigned int multiplier;
FrSkyAlarmData alarms[2];
float getRatio() const
{
if (type==0 || type==1 || type==2)
return float(ratio << multiplier) / 10.0;
else
return ratio << multiplier;
}
void clear() { memset(this, 0, sizeof(FrSkyChannelData)); }
};
@ -753,6 +793,9 @@ class FrSkyData {
int varioCenterMin; // if increment in 0.2m/s = 3.0m/s max
int varioCenterMax;
int varioMax;
bool mAhPersistent;
unsigned int storedMah;
int fasOffset;
void clear() { memset(this, 0, sizeof(FrSkyData)); rssiAlarms[0].clear(2, 45); rssiAlarms[1].clear(3, 42); varioSource = 2/*VARIO*/; }
};
@ -783,14 +826,13 @@ enum TimerMode {
class TimerData {
public:
TimerData() { clear(); }
TimerMode mode; // timer trigger source -> off, abs, THs, TH%, THt, sw/!sw, !m_sw/!m_sw
int8_t modeB;
bool minuteBeep;
bool countdownBeep;
bool dir; // 0=>Count Down, 1=>Count Up
TimerMode mode; // timer trigger source -> off, abs, THs, TH%, THt, sw/!sw, !m_sw/!m_sw
bool minuteBeep;
unsigned int countdownBeep;
bool dir; // 0=>Count Down, 1=>Count Up
unsigned int val;
bool persistent;
int pvalue;
bool persistent;
int pvalue;
void clear() { memset(this, 0, sizeof(TimerData)); }
};
@ -836,7 +878,7 @@ class ModelData {
TimerData timers[2];
bool thrTrim; // Enable Throttle Trim
bool thrExpo; // Enable Throttle Expo
unsigned int trimInc; // Trim Increments
int trimInc; // Trim Increments
bool disableThrottleWarning;
unsigned int beepANACenter; // 1<<0->A1.. 1<<6->A7
@ -847,7 +889,10 @@ class ModelData {
PhaseData phaseData[C9X_MAX_PHASES];
MixData mixData[C9X_MAX_MIXERS];
LimitData limitData[C9X_NUM_CHNOUT];
char inputNames[C9X_MAX_INPUTS][4+1];
ExpoData expoData[C9X_MAX_EXPOS];
CurveData curves[C9X_MAX_CURVES];
CustomSwData customSw[C9X_NUM_CSW];
FuncSwData funcSw[C9X_MAX_CUSTOM_FUNCTIONS];
@ -911,8 +956,6 @@ enum Capability {
MixesWithoutExpo,
Timers,
TimeDivisions,
minuteBeep,
countdownBeep,
CustomFunctions,
VoicesAsNumbers,
VoicesMaxLength,
@ -931,7 +974,6 @@ enum Capability {
ChannelsName,
ExtraChannels,
ExtraInputs,
ExtraTrims,
ExtendedTrims,
HasInputFilter,
NumCurves,
@ -977,11 +1019,10 @@ enum Capability {
GvarsAreNamed,
GvarsFlightPhases,
GvarsHaveSources,
GvarsAsSources,
GvarsName,
NoTelemetryProtocol,
TelemetryCSFields,
TelemetryColsCSFields,
TelemetryCustomScreens,
TelemetryCustomScreensFieldsPerLine,
TelemetryRSSIModel,
TelemetryAlarm,
TelemetryInternalAlarm,
@ -997,7 +1038,6 @@ enum Capability {
HasStickScroll,
HasSoundMixer,
NumModules,
FSSwitch,
PPMCenter,
SYMLimits,
HasCurrentCalibration,
@ -1018,7 +1058,11 @@ enum Capability {
LuaInputs,
LimitsPer1000,
EnhancedCurves,
TelemetryInternalAlarms
TelemetryInternalAlarms,
HasFasOffset,
HasMahPersistent,
MultiposPots,
MultiposPotsPositions
};
enum UseContext {

View file

@ -366,9 +366,7 @@ t_Er9xModelData::operator ModelData ()
c9x.timers[0].mode = getEr9xTimerMode(tmrMode);
c9x.timers[0].dir = tmrDir;
c9x.timers[0].val = tmrVal;
c9x.timers[0].modeB = tmrModeB;
switch(protocol) {
switch(protocol) {
case 1:
c9x.moduleData[0].protocol = PXX_DJT;
break;
@ -388,7 +386,7 @@ t_Er9xModelData::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH;
c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.funcSw[0].func = FuncInstantTrim;
if (trimSw) {

View file

@ -44,7 +44,7 @@ const char * Er9xInterface::getName()
const int Er9xInterface::getEEpromSize()
{
QSettings settings("companion9x", "companion9x");
QSettings settings;
QString avrMCU = settings.value("mcu", QString("m64")).toString();
if (avrMCU==QString("m128")) {
return 2*EESIZE_STOCK;
@ -282,7 +282,6 @@ int Er9xInterface::getCapability(const Capability capability)
case Gvars:
return 7;
case GvarsHaveSources:
case GvarsAsSources:
return 1;
case GetThrSwitch:
return DSW_THR;

View file

@ -508,7 +508,6 @@ t_Ersky9xModelData_v10::operator ModelData ()
getEEPROMString(c9x.name, name, sizeof(name));
for (int i=0; i<2; i++) {
c9x.timers[i].mode = getErSky9xTimerMode(timer[i].tmrModeA);
c9x.timers[i].modeB = timer[i].tmrModeB;
c9x.timers[i].dir = timer[i].tmrDir;
c9x.timers[i].val = timer[i].tmrVal;
}
@ -532,7 +531,7 @@ t_Ersky9xModelData_v10::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH;
c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.funcSw[0].func = FuncInstantTrim;
if (trimSw) {
@ -630,7 +629,6 @@ t_Ersky9xModelData_v11::operator ModelData ()
getEEPROMString(c9x.name, name, sizeof(name));
for (int i=0; i<2; i++) {
c9x.timers[i].mode = getErSky9xTimerMode(timer[i].tmrModeA);
c9x.timers[i].modeB = timer[i].tmrModeB;
c9x.timers[i].dir = timer[i].tmrDir;
c9x.timers[i].val = timer[i].tmrVal;
}
@ -654,7 +652,7 @@ t_Ersky9xModelData_v11::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH;
c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.funcSw[0].func = FuncInstantTrim;
if (trimSw) {

View file

@ -318,7 +318,6 @@ int Ersky9xInterface::getCapability(const Capability capability)
case MaxVolume:
return 23;
case GvarsHaveSources:
case GvarsAsSources:
return 1;
case TelemetryMaxMultiplier:
return 2;

View file

@ -458,7 +458,7 @@ t_Gruvin9xModelData_v102::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -529,7 +529,7 @@ t_Gruvin9xModelData_v103::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -600,7 +600,7 @@ t_Gruvin9xModelData_v105::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -691,7 +691,7 @@ t_Gruvin9xModelData_v106::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;

View file

@ -47,7 +47,7 @@ const char * Gruvin9xInterface::getName()
const int Gruvin9xInterface::getEEpromSize()
{
if (board == BOARD_STOCK) {
QSettings settings("companion9x", "companion9x");
QSettings settings;
QString avrMCU = settings.value("mcu", QString("m64")).toString();
if (avrMCU==QString("m128")) {
return EESIZE_STOCK*2;

View file

@ -454,7 +454,7 @@ t_Open9xGruvin9xModelData_v207::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -538,7 +538,7 @@ t_Open9xGruvin9xModelData_v208::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
@ -627,7 +627,7 @@ t_Open9xGruvin9xModelData_v209::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
@ -717,7 +717,7 @@ t_Open9xGruvin9xModelData_v210::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
@ -804,7 +804,7 @@ t_Open9xGruvin9xModelData_v211::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;

View file

@ -760,7 +760,7 @@ t_Open9xArmModelData_v208::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
@ -849,7 +849,7 @@ t_Open9xArmModelData_v209::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
@ -939,7 +939,7 @@ t_Open9xArmModelData_v210::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
@ -1023,7 +1023,7 @@ t_Open9xArmModelData_v211::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
@ -1110,7 +1110,7 @@ t_Open9xArmModelData_v212::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;

View file

@ -593,7 +593,7 @@ enum Functions {
#endif
FUNC_BACKLIGHT,
#if defined(DEBUG)
FUNC_TEST, // should remain the last before MAX as not added in companion9x
FUNC_TEST, // should remain the last before MAX as not added in companion
#endif
FUNC_MAX
};
@ -950,7 +950,7 @@ t_Open9xModelData_v201::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -1024,7 +1024,7 @@ t_Open9xModelData_v202::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter,
c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -1100,7 +1100,7 @@ t_Open9xModelData_v203::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -1174,7 +1174,7 @@ t_Open9xModelData_v204::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -1253,7 +1253,7 @@ t_Open9xModelData_v205::operator ModelData ()
}
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -1339,7 +1339,7 @@ t_Open9xModelData_v208::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -1432,7 +1432,7 @@ t_Open9xModelData_v209::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -1526,7 +1526,7 @@ t_Open9xModelData_v210::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -1614,7 +1614,7 @@ t_Open9xModelData_v211::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.trimInc = trimInc;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;

View file

@ -135,7 +135,7 @@ using namespace Open9xSky9x;
Open9xSky9xSimulator::Open9xSky9xSimulator(Open9xInterface * open9xInterface):
open9xInterface(open9xInterface)
{
QSettings settings("companion9x", "companion9x");
QSettings settings;
QString path=settings.value("sdPath", ".").toString()+"/";
int i=0;
for (i=0; i< std::min(path.length(),1022); i++) {

View file

@ -35,6 +35,8 @@
#define AUDIO
#define VOICE
#define PXX
#define DSM2
#define DSM2_PPM
#define DBLKEYS
#define AUTOSWITCH
#define GRAPHICS
@ -47,6 +49,7 @@
#define PPM_CENTER_ADJUSTABLE
#define PPM_LIMITS_SYMETRICAL
#define FAI_CHOICE
#define EEPROM_VARIANT 3
#undef min
@ -65,6 +68,7 @@ inline int geteepromsize() {
#include "radio/src/targets/taranis/board_taranis.cpp"
#include "radio/src/protocols/ppm_arm.cpp"
#include "radio/src/protocols/pxx_arm.cpp"
#include "radio/src/protocols/dsm2_arm.cpp"
#include "radio/src/targets/taranis/pwr_driver.cpp"
#include "radio/src/eeprom_common.cpp"
#include "radio/src/eeprom_conversions.cpp"
@ -145,7 +149,7 @@ OpentxTaranisSimulator::OpentxTaranisSimulator(Open9xInterface * open9xInterface
open9xInterface(open9xInterface)
{
taranisSimulatorBoard = GetEepromInterface()->getBoard();
QSettings settings("companion9x", "companion9x");
QSettings settings;
QString path=settings.value("sdPath", ".").toString()+"/";
int i=0;
for (i=0; i< std::min(path.length(),1022); i++) {

View file

@ -56,21 +56,29 @@ class SwitchesConversionTable: public ConversionTable {
addConversion(RawSwitch(SWITCH_TYPE_VIRTUAL, i), val++);
}
if (IS_TARANIS(board) && version >= 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++);
}
}
}
addConversion(RawSwitch(SWITCH_TYPE_OFF), -val);
addConversion(RawSwitch(SWITCH_TYPE_ON), 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);
addConversion(RawSwitch(SWITCH_TYPE_MOMENT_SWITCH, s), 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_MOMENT_VIRTUAL, i), val++);
}
addConversion(RawSwitch(SWITCH_TYPE_ONM, 1 ), -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++);
@ -201,7 +209,7 @@ class SourcesConversionTable: public ConversionTable {
if (!(flags & FLAG_NOTELEMETRY)) {
if (release21March2013) {
if ((board != BOARD_STOCK && (board!=BOARD_M128 || version<215)) || (variant & GVARS_VARIANT)) {
for (int i=0; i<5; i++)
for (int i=0; i<MAX_GVARS(board, version); i++)
addConversion(RawSource(SOURCE_TYPE_GVAR, i), val++);
}
}
@ -1338,10 +1346,10 @@ class CustomFunctionField: public TransformedField {
internalField.Append(new CharField<6>(_arm_param));
if (version >= 214) {
internalField.Append(new UnsignedField<2>(_mode));
internalField.Append(new UnsignedField<6>(_delay));
internalField.Append(new SignedField<6>(_delay));
}
else {
internalField.Append(new UnsignedField<8>(_delay));
internalField.Append(new UnsignedField<8>((unsigned int &)_delay));
}
if (version < 214)
internalField.Append(new SpareBitsField<8>());
@ -1364,7 +1372,7 @@ class CustomFunctionField: public TransformedField {
if (IS_ARM(board)) {
_mode = 0;
if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue)
_delay = fn.repeatParam / 5;
_delay = (version >= 216 ? fn.repeatParam : (fn.repeatParam/5));
else
_delay = (fn.enabled ? 1 : 0);
if (fn.func <= FuncInstantTrim) {
@ -1439,7 +1447,7 @@ class CustomFunctionField: public TransformedField {
{
if (IS_ARM(board)) {
if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue)
fn.repeatParam = _delay * 5;
fn.repeatParam = (version >= 216 ? _delay : (_delay*5));
else
fn.enabled = (_delay & 0x01);
@ -1529,7 +1537,7 @@ class CustomFunctionField: public TransformedField {
SourcesConversionTable * sourcesConversionTable;
char _arm_param[10];
unsigned int _param;
unsigned int _delay;
int _delay;
unsigned int _mode;
unsigned int _union_param;
};
@ -1688,8 +1696,7 @@ class FrskyField: public StructField {
Append(new UnsignedField<8>(frsky.usrProto));
if (version >= 216) {
Append(new UnsignedField<7>(frsky.voltsSource));
// TODO altitude displayed
Append(new SpareBitsField<1>());
Append(new BoolField<1>(frsky.altitudeDisplayed));
}
else {
Append(new UnsignedField<8>(frsky.voltsSource));
@ -1718,10 +1725,9 @@ class FrskyField: public StructField {
Append(new ConversionField< SignedField<6> >(frsky.rssiAlarms[i].value, -45+i*3));
}
if (version >= 216) {
// TODO uint16_t mAhPersistent:1;
// uint16_t storedMah:15;
// int8_t fasOffset;
Append(new SpareBitsField<24>());
Append(new BoolField<1>(frsky.mAhPersistent));
Append(new UnsignedField<15>(frsky.storedMah));
Append(new SignedField<8>(frsky.fasOffset));
}
}
else {
@ -1812,7 +1818,7 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u
internalField.Append(new TimerModeField(modelData.timers[i].mode, board, version));
if ((IS_ARM(board) || IS_2560(board)) && version >= 216) {
internalField.Append(new UnsignedField<16>(modelData.timers[i].val));
internalField.Append(new BoolField<2>(modelData.timers[i].countdownBeep));
internalField.Append(new UnsignedField<2>(modelData.timers[i].countdownBeep));
internalField.Append(new BoolField<1>(modelData.timers[i].minuteBeep));
internalField.Append(new BoolField<1>(modelData.timers[i].persistent));
internalField.Append(new SpareBitsField<4>());
@ -1820,7 +1826,7 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u
}
else if (release21March2013) {
internalField.Append(new UnsignedField<12>(modelData.timers[i].val));
internalField.Append(new BoolField<1>(modelData.timers[i].countdownBeep));
internalField.Append(new BoolField<1>((bool &)modelData.timers[i].countdownBeep));
internalField.Append(new BoolField<1>(modelData.timers[i].minuteBeep));
if (HAS_PERSISTENT_TIMERS(board)) {
internalField.Append(new BoolField<1>(modelData.timers[i].persistent));
@ -1852,7 +1858,11 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u
else
internalField.Append(new ConversionField< SignedField<4> >(modelData.moduleData[0].channelsCount, &channelsConversionTable, "Channels number", ::QObject::tr("OpenTX doesn't allow this number of channels")));
internalField.Append(new UnsignedField<3>(modelData.trimInc));
if (version >= 216)
internalField.Append(new SignedField<3>(modelData.trimInc));
else
internalField.Append(new ConversionField< SignedField<3> >(modelData.trimInc, +2));
internalField.Append(new BoolField<1>(modelData.disableThrottleWarning));
if (IS_TARANIS(board) || (IS_ARM(board) && version >= 216))
@ -1974,8 +1984,8 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u
if (IS_TARANIS(board) && version >= 216) {
// TODO ScriptData scriptsData[MAX_SCRIPTS];
internalField.Append(new SpareBitsField<720>());
// TODO char inputNames[MAX_INPUTS][4];
internalField.Append(new SpareBitsField<1024>());
for (int i=0; i<32; i++)
internalField.Append(new ZCharField<4>(modelData.inputNames[i]));
internalField.Append(new UnsignedField<8>(modelData.nSwToWarn));
internalField.Append(new UnsignedField<8>(modelData.nPotsToWarn));
for (int i=0; i < GetEepromInterface()->getCapability(PotWarnings); i++) {
@ -1991,8 +2001,10 @@ void Open9xModelDataNew::beforeExport()
for (int module=0; module<3; module++) {
if (modelData.moduleData[module].protocol >= PXX_XJT_X16 && modelData.moduleData[module].protocol <= PXX_XJT_LR12)
subprotocols[module] = modelData.moduleData[module].protocol - PXX_XJT_X16;
else if (modelData.moduleData[module].protocol >= LP45 && modelData.moduleData[module].protocol <= DSMX)
subprotocols[module] = modelData.moduleData[module].protocol - LP45;
else
subprotocols[module] = (module==0 ? -1:0);
subprotocols[module] = (module==0 ? -1 : 0);
}
}
@ -2001,9 +2013,9 @@ void Open9xModelDataNew::afterImport()
// qDebug() << QString("after import model") << modelData.name ;
for (int module=0; module<3; module++) {
if (modelData.moduleData[module].protocol == PXX_XJT_X16) {
if (subprotocols[module]>=0)
modelData.moduleData[module].protocol = PXX_XJT_X16 + subprotocols[module];
if (modelData.moduleData[module].protocol == PXX_XJT_X16 || modelData.moduleData[module].protocol == LP45) {
if (subprotocols[module] >= 0)
modelData.moduleData[module].protocol += subprotocols[module];
else
modelData.moduleData[module].protocol = OFF;
}
@ -2024,12 +2036,21 @@ Open9xGeneralDataNew::Open9xGeneralDataNew(GeneralSettings & generalData, BoardE
if (version >= 213 || (!IS_ARM(board) && version >= 212))
internalField.Append(new UnsignedField<16>(generalData.variant));
for (int i=0; i<inputsCount; i++)
internalField.Append(new SignedField<16>(generalData.calibMid[i]));
for (int i=0; i<inputsCount; i++)
internalField.Append(new SignedField<16>(generalData.calibSpanNeg[i]));
for (int i=0; i<inputsCount; i++)
internalField.Append(new SignedField<16>(generalData.calibSpanPos[i]));
if (version >= 216) {
for (int i=0; i<inputsCount; i++) {
internalField.Append(new SignedField<16>(generalData.calibMid[i]));
internalField.Append(new SignedField<16>(generalData.calibSpanNeg[i]));
internalField.Append(new SignedField<16>(generalData.calibSpanPos[i]));
}
}
else {
for (int i=0; i<inputsCount; i++)
internalField.Append(new SignedField<16>(generalData.calibMid[i]));
for (int i=0; i<inputsCount; i++)
internalField.Append(new SignedField<16>(generalData.calibSpanNeg[i]));
for (int i=0; i<inputsCount; i++)
internalField.Append(new SignedField<16>(generalData.calibSpanPos[i]));
}
internalField.Append(new UnsignedField<16>(chkSum));
internalField.Append(new UnsignedField<8>(generalData.currModel));
@ -2060,7 +2081,7 @@ Open9xGeneralDataNew::Open9xGeneralDataNew(GeneralSettings & generalData, BoardE
internalField.Append(new SpareBitsField<1>());
internalField.Append(new UnsignedField<8>(generalData.inactivityTimer));
if (IS_STOCK(board) && version >= 215) {
if (IS_9X(board) && version >= 215) {
internalField.Append(new UnsignedField<3>(generalData.mavbaud));
}
else {
@ -2123,6 +2144,12 @@ Open9xGeneralDataNew::Open9xGeneralDataNew(GeneralSettings & generalData, BoardE
internalField.Append(new SignedField<8>(generalData.varioVolume));
internalField.Append(new SignedField<8>(generalData.backgroundVolume));
}
if (IS_TARANIS(board) && version >= 216) {
internalField.Append(new UnsignedField<8>(generalData.hw_uartMode));
for (int i=0; i<8; i++) {
internalField.Append(new UnsignedField<1>(generalData.potsType[i]));
}
}
}
}

View file

@ -74,8 +74,9 @@ class ProtocolsConversionTable: public ConversionTable
ProtocolsConversionTable(BoardEnum board)
{
int val = 0;
if (IS_TARANIS(board))
if (IS_TARANIS(board)) {
addConversion(OFF, val++);
}
addConversion(PPM, val++);
if (!IS_ARM(board)) {
addConversion(PPM16, val++);
@ -86,9 +87,13 @@ class ProtocolsConversionTable: public ConversionTable
addConversion(PXX_XJT_D8, val);
addConversion(PXX_XJT_LR12, val++);
}
addConversion(PXX_DJT, val++);
else {
addConversion(PXX_DJT, val++);
}
if (IS_TARANIS(board)) {
addConversion(DSM2, val++);
addConversion(LP45, val);
addConversion(DSM2, val);
addConversion(DSMX, val++);
}
else {
addConversion(LP45, val++);
@ -126,7 +131,7 @@ class Open9xModelDataNew: public TransformedField {
private:
char name[256];
signed int subprotocols[C9X_NUM_MODULES+1/*trainer*/];
int subprotocols[C9X_NUM_MODULES+1/*trainer*/];
ProtocolsConversionTable protocolsConversionTable;
ChannelsConversionTable channelsConversionTable;
};

View file

@ -42,14 +42,10 @@ size_t SizeOfArray( T(&)[ N ] )
return N;
}
QStringList o9xservers;
Open9xInterface::Open9xInterface(BoardEnum board):
EEPROMInterface(board),
efile(new EFile())
{
o9xservers.clear();
o9xservers << "93.51.182.154" << "open9x.9xforums.com";
}
Open9xInterface::~Open9xInterface()
@ -309,7 +305,7 @@ bool Open9xInterface::load(RadioData &radioData, uint8_t *eeprom, int size)
std::cout << " wrong size (" << size << ")\n";
return false;
} else {
QMessageBox::warning(NULL,"companion9x", QObject::tr("Your radio probably uses a wrong firmware,\n eeprom size is 4096 but only the first 2048 are used"));
QMessageBox::warning(NULL, "companion", QObject::tr("Your radio probably uses a wrong firmware,\n eeprom size is 4096 but only the first 2048 are used"));
size=2048;
}
} else {
@ -517,10 +513,6 @@ int Open9xInterface::getCapability(const Capability capability)
return 1;
else
return 0;
case minuteBeep:
return 1;
case countdownBeep:
return 1;
case Pots:
return (IS_TARANIS(board) ? 4 : 3);
case Switches:
@ -598,14 +590,10 @@ int Open9xInterface::getCapability(const Capability capability)
return 1;
case ExtendedTrims:
return 500;
case ExtraTrims:
return 1;
case Simulation:
return 1;
case DSM2Indexes:
return 1;
case FSSwitch:
return 1;
case MixesWithoutExpo:
return 1;
case NumCurves:
@ -622,24 +610,12 @@ int Open9xInterface::getCapability(const Capability capability)
return TM_HASTELEMETRY|TM_HASOFFSET|TM_HASWSHH;
case TelemetryBars:
return 1;
case TelemetryCSFields:
if (IS_TARANIS(board)) {
return 36;
} else {
return IS_ARM(board) ? 24 : 16;
}
case TelemetryColsCSFields:
if (IS_TARANIS(board)) {
return 3;
} else {
return 2;
}
case TelemetryCustomScreens:
return IS_TARANIS(board) ? 3 : 2;
case TelemetryCustomScreensFieldsPerLine:
return IS_TARANIS(board) ? 3 : 2;
case NoTelemetryProtocol:
if (IS_TARANIS(board)) {
return 1;
} else {
return 0;
}
return IS_TARANIS(board) ? 1 : 0;
case TelemetryUnits:
return 0;
case TelemetryBlades:
@ -699,11 +675,20 @@ int Open9xInterface::getCapability(const Capability capability)
return (IS_TARANIS(board) ? 4 : IS_ARM(board) ? 3 : 0);
case HasDisplayText:
case VirtualInputs:
return IS_TARANIS(board) ? 32 : 0;
case LuaInputs:
case LimitsPer1000:
case EnhancedCurves:
case TelemetryInternalAlarms:
return IS_TARANIS(board);
case HasFasOffset:
return (IS_STOCK(board) ? false : true);
case HasMahPersistent:
return (IS_ARM(board) ? true : false);
case MultiposPots:
return IS_TARANIS(board) ? 2 : 0;
case MultiposPotsPositions:
return IS_TARANIS(board) ? 6 : 0;
default:
return 0;
}
@ -950,14 +935,9 @@ bool Open9xInterface::loadBackup(RadioData &radioData, uint8_t *eeprom, int esiz
QString geturl( int board)
{
QString url="http://";
QSettings settings("companion9x", "companion9x");
int server = settings.value("fwserver", 0).toInt();
if (server >= o9xservers.count()) {
server = 0;
settings.setValue("fwserver",server);
}
url.append(o9xservers.at(server));
QSettings settings;
QString url = settings.value("compilation-server", OPENTX_FIRMWARE_DOWNLOADS).toString();
switch(board) {
case BOARD_STOCK:
case BOARD_M128:
@ -978,27 +958,21 @@ QString geturl( int board)
QString getstamp( int board)
{
QString url="http://";
QSettings settings("companion9x", "companion9x");
int server = settings.value("fwserver",0).toInt();
if (server >=o9xservers.count()) {
server=0;
settings.setValue("fwserver",server);
}
url.append(o9xservers.at(server));
url.append("/binaries/stamp-opentx-");
QSettings settings;
QString url = settings.value("compilation-server", OPENTX_FIRMWARE_DOWNLOADS).toString();
url.append("/stamp-opentx-");
switch(board) {
case BOARD_STOCK:
url.append("stock.txt");
url.append("9x.txt");
break;
case BOARD_M128:
url.append("stock128.txt");
url.append("9x128.txt");
break;
case BOARD_GRUVIN9X:
url.append("v4.txt");
url.append("gruvin9x.txt");
break;
case BOARD_SKY9X:
url.append("arm.txt");
url.append("sky9x.txt");
break;
case BOARD_TARANIS:
case BOARD_TARANIS_REV4a:
@ -1013,16 +987,10 @@ QString getstamp( int board)
QString getrnurl( int board)
{
QString url="http://";
QSettings settings("companion9x", "companion9x");
int server = settings.value("fwserver",0).toInt();
if (server >=o9xservers.count()) {
server=0;
settings.setValue("fwserver",server);
}
url.append(o9xservers.at(server));
url.append("/docs/releasenotes-");
switch(board) {
QSettings settings;
QString url = settings.value("compilation-server", OPENTX_FIRMWARE_DOWNLOADS).toString();
url.append("/releasenotes-");
switch(board) {
case BOARD_STOCK:
case BOARD_M128:
case BOARD_GRUVIN9X:
@ -1049,7 +1017,7 @@ void RegisterOpen9xFirmwares()
Option extr_options[] = { { "frsky", QObject::tr("Support for frsky telemetry mod"), FRSKY_VARIANT }, { "jeti", QObject::tr("Support for jeti telemetry mod"), 0 }, { "ardupilot", QObject::tr("Support for receiving ardupilot data"), 0 }, { "nmea", QObject::tr("Support for receiving NMEA data"), 0 }, { "mavlink", QObject::tr("Support for MAVLINK devices"), MAVLINK_VARIANT }, { NULL } };
Option fai_options[] = { { "faichoice", QObject::tr("Possibility to enable FAI MODE at field") }, { "faimode", QObject::tr("FAI MODE always enabled") }, { NULL } };
/* 9x board */
open9x = new Open9xFirmware("opentx-stock", QObject::tr("openTx for 9X board"), new Open9xInterface(BOARD_STOCK), geturl(BOARD_STOCK), getstamp(BOARD_STOCK), getrnurl(BOARD_STOCK), false);
open9x = new Open9xFirmware("opentx-9x", QObject::tr("openTx for 9X board"), new Open9xInterface(BOARD_STOCK), geturl(BOARD_STOCK), getstamp(BOARD_STOCK), getrnurl(BOARD_STOCK), 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"));
@ -1081,11 +1049,12 @@ void RegisterOpen9xFirmwares()
open9x->addOption("novario", QObject::tr("No vario support"));
open9x->addOption("nogps", QObject::tr("No GPS support"));
open9x->addOption("nogauges", QObject::tr("No gauges in the custom telemetry screen"));
open9x->addOption("fasoffset", QObject::tr("Allow compensating for offset errors in FrSky FAS current sensors"));
open9x->addOptions(fai_options);
firmwares.push_back(open9x);
/* 9x board with M128 chip */
open9x = new Open9xFirmware("opentx-stock128", 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"));
@ -1181,7 +1150,7 @@ void RegisterOpen9xFirmwares()
firmwares.push_back(open9x);
/* Gruvin9x board */
open9x = new Open9xFirmware("opentx-v4", 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"));
@ -1245,7 +1214,7 @@ void RegisterOpen9xFirmwares()
open9x->addOptions(fai_options);
firmwares.push_back(open9x);
QSettings settings("companion9x", "companion9x");
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);

View file

@ -18,6 +18,9 @@
#include "eeprominterface.h"
#define OPENTX_COMPANION_DOWNLOADS "http://downloads.open-tx.org/companion"
#define OPENTX_FIRMWARE_DOWNLOADS "http://downloads.open-tx.org/firmware"
class EFile;
class Open9xInterface : public EEPROMInterface
@ -91,6 +94,7 @@ class Open9xFirmware: public FirmwareInfo {
addLanguage("se");
addLanguage("cz");
addLanguage("es");
addLanguage("pl");
addLanguage("pt");
addTTSLanguage("en");
@ -100,6 +104,7 @@ class Open9xFirmware: public FirmwareInfo {
addTTSLanguage("se");
addTTSLanguage("cz");
addTTSLanguage("sk");
addTTSLanguage("pl");
addTTSLanguage("pt");
addTTSLanguage("es");
}

View file

@ -1,6 +1,5 @@
// Automatically generated file (CMake) - do not edit
#define DATE_STR "@DATE@"
#define TIME_STR "@TIME@"
#define VERS_STR "c9x"
#define SVN_STR "@FIRMWARE@-r@G9X_WC_REVISION@"
#define VERS_STR "@C9X_VERSION@"
#define MOD_STR "FH"

View file

@ -44,7 +44,7 @@ const char * Th9xInterface::getName()
const int Th9xInterface::getEEpromSize()
{
QSettings settings("companion9x", "companion9x");
QSettings settings;
QString avrMCU = settings.value("mcu", QString("m64")).toString();
if (avrMCU==QString("m128")) {
return 2*EESIZE_STOCK;

View file

@ -15,7 +15,7 @@
</property>
<property name="windowIcon">
<iconset resource="companion.qrc">
<normaloff>:/images/fuses.png</normaloff>:/images/fuses.png</iconset>
<normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0" colspan="2">

View file

@ -20,7 +20,7 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
ui->setupUi(this);
this->setWindowIcon(QIcon(":/icon.png"));
QSettings settings("companion9x", "companion9x");
QSettings settings;
QString firmware_id = settings.value("firmware", default_firmware_variant.id).toString();
ui->tabWidget->setCurrentIndex(settings.value("generalEditTab", 0).toInt());
int profile_id=settings.value("profileId", 0).toInt();
@ -64,7 +64,8 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
}
this->layout()->removeItem(ui->TaranisReadOnlyUnlock);
}
} else {
}
else {
for (int i=0; pmsl[i]; i++) {
pmsl[i]->hide();
}
@ -373,6 +374,18 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
for (int i=0; tpmsld[i]; i++) {
connect(tpmsld[i], SIGNAL(valueChanged(int)),this,SLOT(unlockSwitchEdited()));
}
if (GetEepromInterface()->getCapability(MultiposPots)) {
ui->pot1Type->setCurrentIndex(g_eeGeneral.potsType[0]);
ui->pot2Type->setCurrentIndex(g_eeGeneral.potsType[1]);
}
else {
ui->potsTypeSeparator->hide();
ui->pot1Type->hide();
ui->pot1TypeLabel->hide();
ui->pot2Type->hide();
ui->pot2TypeLabel->hide();
}
}
GeneralEdit::~GeneralEdit()
@ -380,6 +393,18 @@ GeneralEdit::~GeneralEdit()
delete ui;
}
void GeneralEdit::on_pot1Type_currentIndexChanged(int index)
{
g_eeGeneral.potsType[0] = index;
updateSettings();
}
void GeneralEdit::on_pot2Type_currentIndexChanged(int index)
{
g_eeGeneral.potsType[1] = index;
updateSettings();
}
void GeneralEdit::unlockSwitchEdited()
{
int i=0;
@ -946,7 +971,7 @@ void GeneralEdit::on_PPM4_editingFinished()
void GeneralEdit::on_tabWidget_currentChanged(int index)
{
// TODO why er9x here
QSettings settings("companion9x", "companion9x");
QSettings settings;
settings.setValue("generalEditTab",index);//ui->tabWidget->currentIndex());
}
@ -1195,7 +1220,7 @@ void GeneralEdit::on_swGEAChkB_stateChanged(int )
void GeneralEdit::on_calretrieve_PB_clicked()
{
QSettings settings("companion9x", "companion9x");
QSettings settings;
int profile_id=ui->profile_CB->itemData(ui->profile_CB->currentIndex()).toInt();
settings.beginGroup("Profiles");
QString profile=QString("profile%1").arg(profile_id);
@ -1312,7 +1337,7 @@ void GeneralEdit::on_calretrieve_PB_clicked()
void GeneralEdit::on_calstore_PB_clicked()
{
QSettings settings("companion9x", "companion9x");
QSettings settings;
int profile_id=ui->profile_CB->itemData(ui->profile_CB->currentIndex()).toInt();
settings.beginGroup("Profiles");
QString profile=QString("profile%1").arg(profile_id);

View file

@ -119,6 +119,9 @@ private slots:
void on_varioVolume_SL_valueChanged();
void on_wavVolume_SL_valueChanged();
void on_pot1Type_currentIndexChanged(int index);
void on_pot2Type_currentIndexChanged(int index);
void on_stickmodeCB_currentIndexChanged(int index);
void on_channelorderCB_currentIndexChanged(int index);
void on_beeperCB_currentIndexChanged(int index);

View file

@ -110,7 +110,7 @@
These will be relevant for all models in the same EEPROM.</string>
</property>
<property name="currentIndex">
<number>0</number>
<number>3</number>
</property>
<widget class="QWidget" name="tabSetup">
<attribute name="title">
@ -3494,6 +3494,91 @@ p, li { white-space: pre-wrap; }
</property>
</widget>
</item>
<item row="5" column="0" colspan="4">
<widget class="Line" name="potsTypeSeparator">
<property name="minimumSize">
<size>
<width>0</width>
<height>10</height>
</size>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QComboBox" name="pot1Type">
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="whatsThis">
<string>Beeper volume
0 - Quiet. No beeps at all.
1 - No Keys. Normal beeps but menu keys do not beep.
2 - Normal.
3 - Loud.
4 - Extra loud.</string>
</property>
<item>
<property name="text">
<string>Pot (normal)</string>
</property>
</item>
<item>
<property name="text">
<string>Multipos Switch</string>
</property>
</item>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="pot1TypeLabel">
<property name="text">
<string>S1 Type</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QComboBox" name="pot2Type">
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="whatsThis">
<string>Beeper volume
0 - Quiet. No beeps at all.
1 - No Keys. Normal beeps but menu keys do not beep.
2 - Normal.
3 - Loud.
4 - Extra loud.</string>
</property>
<item>
<property name="text">
<string>Pot (normal)</string>
</property>
</item>
<item>
<property name="text">
<string>Multipos Switch</string>
</property>
</item>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="pot2TypeLabel">
<property name="text">
<string>S2 Type</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>

View file

@ -12,15 +12,28 @@ QString getPhaseName(int val, char * phasename)
phaseName.append(phasename);
if (phaseName.isEmpty()) {
return QString(val < 0 ? "!" : "") + QObject::tr("FM%1").arg(abs(val) - 1);
} else {
}
else {
return QString(val < 0 ? "!" : "") + phaseName;
}
}
}
QString getStickStr(int index)
QString getInputStr(ModelData & model, int index)
{
return RawSource(SOURCE_TYPE_STICK, index).toString();
QString result;
if (GetEepromInterface()->getCapability(VirtualInputs)) {
result = model.inputNames[index];
if (result.isEmpty()) {
result = QObject::tr("Input%1").arg(index+1, 2, 10, QChar('0'));
}
}
else {
result = RawSource(SOURCE_TYPE_STICK, index).toString();
}
return result;
}
void populateGvSourceCB(QComboBox *b, int value)
@ -63,7 +76,7 @@ void populateTTraceCB(QComboBox *b, int value)
}
int channels=(IS_ARM(GetEepromInterface()->getBoard()) ? 32 : 16);
for (int i=1; i<= channels; i++) {
b->addItem(QObject::tr("CH")+QString("%1").arg(i,2,10,QChar('0')));
b->addItem(QObject::tr("CH%1").arg(i, 2, 10, QChar('0')));
}
b->setCurrentIndex(value);
}
@ -162,6 +175,7 @@ QString getFuncName(unsigned int val)
}
}
// TODO should be a toString() method in CustoSwData ...
QString getCustomSwitchStr(CustomSwData * customSw, const ModelData & model)
{
QString result = "";
@ -176,7 +190,8 @@ QString getCustomSwitchStr(CustomSwData * customSw, const ModelData & model)
result = QString("TIM(%1 , %2)").arg(ValToTim(customSw->val1)).arg(ValToTim(customSw->val2));
break;
case CS_FAMILY_VOFS: {
RawSource source = RawSource(customSw->val1);
RawSource source = RawSource(customSw->val1, &model);
RawSourceRange range = source.getRange();
if (customSw->val1)
result += source.toString();
else
@ -191,7 +206,7 @@ QString getCustomSwitchStr(CustomSwData * customSw, const ModelData & model)
result += " &gt; ";
else if (customSw->func == CS_FN_ANEG || customSw->func == CS_FN_VNEG)
result += " &lt; ";
result += QString::number(source.getStep(model) * (customSw->val2 + source.getRawOffset(model)) + source.getOffset(model));
result += QString::number(range.step * (customSw->val2 /*TODO+ source.getRawOffset(model)*/) + range.offset);
break;
}
case CS_FAMILY_VBOOL:
@ -387,7 +402,7 @@ void populateFuncParamArmTCB(QComboBox *b, ModelData * g_model, char * value, QS
}
}
void populateFuncParamCB(QComboBox *b, uint function, unsigned int value, unsigned int adjustmode)
void populateFuncParamCB(QComboBox *b, const ModelData & model, uint function, unsigned int value, unsigned int adjustmode)
{
QStringList qs;
b->clear();
@ -407,22 +422,30 @@ void populateFuncParamCB(QComboBox *b, uint function, unsigned int value, unsign
qs.append( QObject::tr("Timer2"));
qs.append( QObject::tr("All"));
qs.append( QObject::tr("Telemetry"));
int reCount = GetEepromInterface()->getCapability(RotaryEncoders);
if (reCount == 1) {
qs.append( QObject::tr("Rotary Encoder"));
}
else if (reCount == 2) {
qs.append( QObject::tr("REa"));
qs.append( QObject::tr("REb"));
}
b->addItems(qs);
b->setCurrentIndex(value);
}
else if (function==FuncVolume) {
populateSourceCB(b, RawSource(value), POPULATE_SOURCES|POPULATE_TRIMS);
populateSourceCB(b, RawSource(value), model, POPULATE_SOURCES|POPULATE_TRIMS);
}
else if (function==FuncPlayValue) {
populateSourceCB(b, RawSource(value), POPULATE_SOURCES|POPULATE_SWITCHES|POPULATE_GVARS|POPULATE_TRIMS|POPULATE_TELEMETRYEXT);
populateSourceCB(b, RawSource(value), model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_SWITCHES|POPULATE_GVARS|POPULATE_TRIMS|POPULATE_TELEMETRYEXT);
}
else if (function>=FuncAdjustGV1 && function<=FuncAdjustGVLast) {
switch (adjustmode) {
case 1:
populateSourceCB(b, RawSource(value), POPULATE_SOURCES|POPULATE_TRIMS|POPULATE_SWITCHES);
populateSourceCB(b, RawSource(value), model, POPULATE_SOURCES|POPULATE_TRIMS|POPULATE_SWITCHES);
break;
case 2:
populateSourceCB(b, RawSource(value), POPULATE_GVARS);
populateSourceCB(b, RawSource(value), model, POPULATE_GVARS);
break;
case 3:
b->clear();
@ -437,17 +460,6 @@ void populateFuncParamCB(QComboBox *b, uint function, unsigned int value, unsign
}
}
void populateRepeatCB(QComboBox *b, unsigned int value)
{
b->clear();
b->addItem(QObject::tr("No repeat", 0));
unsigned int step = IS_ARM(GetEepromInterface()->getBoard()) ? 5 : 10;
for (unsigned int i=step; i<=60; i+=step) {
b->addItem(QObject::tr("%1s").arg(i), i);
if (i==value) b->setCurrentIndex(b->count()-1);
}
}
void populateGVmodeCB(QComboBox *b, unsigned int value)
{
b->clear();
@ -471,6 +483,78 @@ void populatePhasesCB(QComboBox *b, int value)
b->setCurrentIndex(value + GetEepromInterface()->getCapability(FlightPhases));
}
bool gvarsEnabled()
{
int gvars=0;
if (GetEepromInterface()->getCapability(HasVariants)) {
if ((GetCurrentFirmwareVariant() & GVARS_VARIANT)) {
gvars=1;
}
}
else {
gvars=1;
}
return gvars;
}
GVarGroup::GVarGroup(QCheckBox *weightGV, QSpinBox *weightSB, QComboBox *weightCB, int & weight, const int deflt, const int mini, const int maxi, const unsigned int flags):
QObject(),
weightGV(weightGV),
weightSB(weightSB),
weightCB(weightCB),
weight(weight),
flags(flags),
lock(false)
{
lock = true;
if (gvarsEnabled()) {
populateGVCB(weightCB, weight);
connect(weightGV, SIGNAL(stateChanged(int)), this, SLOT(gvarCBChanged(int)));
connect(weightCB, SIGNAL(currentIndexChanged(int)), this, SLOT(valuesChanged()));
}
else {
weightGV->hide();
if (weight > maxi || weight < -mini) {
weight = deflt;
}
}
weightSB->setMinimum(mini);
weightSB->setMaximum(maxi);
if (weight>maxi || weight<mini) {
weightGV->setChecked(true);
weightSB->hide();
weightCB->show();
}
else {
weightGV->setChecked(false);
weightSB->setValue(weight);
weightSB->show();
weightCB->hide();
}
connect(weightSB, SIGNAL(editingFinished()), this, SLOT(valuesChanged()));
lock = false;
}
void GVarGroup::gvarCBChanged(int state)
{
weightCB->setVisible(state);
weightSB->setVisible(!state);
valuesChanged();
}
void GVarGroup::valuesChanged()
{
if (weightGV->isChecked())
weight = weightCB->itemData(weightCB->currentIndex()).toInt();
else
weight = weightSB->value();
}
CurveGroup::CurveGroup(QComboBox *curveTypeCB, QCheckBox *curveGVarCB, QComboBox *curveValueCB, QSpinBox *curveValueSB, CurveReference & curve, unsigned int flags):
QObject(),
curveTypeCB(curveTypeCB),
@ -758,6 +842,8 @@ void populateSwitchCB(QComboBox *b, const RawSwitch & value, unsigned long attr,
return;
}
#if 0
// TODO check ... I removed negative toggle switches in the FW, no?
if (attr & POPULATE_MSWITCHES) {
if (attr & POPULATE_ONOFF) {
item = RawSwitch(SWITCH_TYPE_ONM, 1);
@ -776,6 +862,7 @@ void populateSwitchCB(QComboBox *b, const RawSwitch & value, unsigned long attr,
if (item == value) b->setCurrentIndex(b->count()-1);
}
}
#endif
if (attr & POPULATE_ONOFF) {
item = RawSwitch(SWITCH_TYPE_OFF);
@ -821,6 +908,14 @@ void populateSwitchCB(QComboBox *b, const RawSwitch & value, unsigned long attr,
if (item == value) b->setCurrentIndex(b->count()-1);
}
if (IS_TARANIS(GetEepromInterface()->getBoard())) {
for (int i=0; i<GetEepromInterface()->getCapability(MultiposPots) * GetEepromInterface()->getCapability(MultiposPotsPositions); i++) {
item = RawSwitch(SWITCH_TYPE_MULTIPOS_POT, i);
b->addItem(item.toString(), item.toValue());
if (item == value) b->setCurrentIndex(b->count()-1);
}
}
if (attr & POPULATE_ONOFF) {
item = RawSwitch(SWITCH_TYPE_ON);
b->addItem(item.toString(), item.toValue());
@ -914,8 +1009,7 @@ void populateGVCB(QComboBox *b, int value)
b->setCurrentIndex(nullitem);
}
void populateSourceCB(QComboBox *b, const RawSource &source, unsigned int flags)
void populateSourceCB(QComboBox *b, const RawSource & source, const ModelData & model, unsigned int flags)
{
RawSource item;
@ -925,7 +1019,18 @@ void populateSourceCB(QComboBox *b, const RawSource &source, unsigned int flags)
item = RawSource(SOURCE_TYPE_NONE);
b->addItem(item.toString(), item.toValue());
if (item == source) b->setCurrentIndex(b->count()-1);
}
if (flags & POPULATE_VIRTUAL_INPUTS) {
int virtualInputs = GetEepromInterface()->getCapability(VirtualInputs);
for (int i=0; i<virtualInputs; i++) {
item = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, i, &model);
b->addItem(item.toString(), item.toValue());
if (item == source) b->setCurrentIndex(b->count()-1);
}
}
if (flags & POPULATE_SOURCES) {
for (int i=0; i<4+GetEepromInterface()->getCapability(Pots); i++) {
item = RawSource(SOURCE_TYPE_STICK, i);
b->addItem(item.toString(), item.toValue());
@ -992,7 +1097,8 @@ void populateSourceCB(QComboBox *b, const RawSource &source, unsigned int flags)
b->addItem(item.toString(), item.toValue());
if (item == source) b->setCurrentIndex(b->count()-1);
}
} else if (flags & POPULATE_TELEMETRY) {
}
else if (flags & POPULATE_TELEMETRY) {
for (int i=0; i<TELEMETRY_SOURCES_COUNT; i++) {
item = RawSource(SOURCE_TYPE_TELEMETRY, i);
b->addItem(item.toString(), item.toValue());
@ -1221,109 +1327,6 @@ QString getFrSkySrc(int index)
return RawSource(SOURCE_TYPE_TELEMETRY, index-1).toString();
}
/*
1,2) Timer1/Timer2 0:765
3,4) TX/RX
5) A1 range
6) A2 range
7) ALT 0-1020
8)RPM 0-12750
9FUEL 0-100%
10) T1 -30-225
11) T2 -30-225
12) spd 0-510
13) dist 0-2040
14)GAlt 0-1020
15) cell 0-5.1
16) Cels 0 25.5
17) Vfas 0 25.5
18) Curr 0 127.5
19) Cnsp 0 5100
20) Powr 0 1275
21) AccX 0 2.55
22) AccY 0 2.55
23) AccZ 0 2.55
24) Hdg 0 255
25) VSpd 0 2.55
26) A1- A1 range
27) A2- A2 range
28) Alt- 0 255
29) Alt+ 0 255
30) Rpm+ 0 255
31) T1+ 0 255 (s????)
32) T2+ 0 255 (e????)
33) Spd+ 0 255 (ILG???)
34) Dst+ 0 255 (v ????)
35) Cur+ 0 25.5 (A)
1.852
*/
float getBarValue(int barId, int value, FrSkyData *fd)
{
switch (barId-1) {
case TELEMETRY_SOURCE_TX_BATT:
return value/10.0;
case TELEMETRY_SOURCE_TIMER1:
case TELEMETRY_SOURCE_TIMER2:
return (3*value);
case TELEMETRY_SOURCE_RSSI_TX:
case TELEMETRY_SOURCE_RSSI_RX:
case TELEMETRY_SOURCE_FUEL:
return std::min(100, value);
case TELEMETRY_SOURCE_A1:
case TELEMETRY_SOURCE_A1_MIN:
if (fd->channels[0].type==0)
return ((fd->channels[0].ratio*value/255.0)+fd->channels[0].offset)/10;
else
return ((fd->channels[0].ratio*value/255.0)+fd->channels[0].offset);
case TELEMETRY_SOURCE_A2:
case TELEMETRY_SOURCE_A2_MIN:
if (fd->channels[1].type==0)
return ((fd->channels[1].ratio*value/255.0)+fd->channels[1].offset)/10;
else
return ((fd->channels[1].ratio*value/255.0)+fd->channels[1].offset);
case TELEMETRY_SOURCE_ALT:
case TELEMETRY_SOURCE_GPS_ALT:
case TELEMETRY_SOURCE_ALT_MAX:
case TELEMETRY_SOURCE_ALT_MIN:
return (8*value)-500;
case TELEMETRY_SOURCE_RPM:
case TELEMETRY_SOURCE_RPM_MAX:
return value * 50;
case TELEMETRY_SOURCE_T1:
case TELEMETRY_SOURCE_T2:
case TELEMETRY_SOURCE_T1_MAX:
case TELEMETRY_SOURCE_T2_MAX:
return value - 30.0;
case TELEMETRY_SOURCE_CELL:
return value*2.0/100;
case TELEMETRY_SOURCE_CELLS_SUM:
case TELEMETRY_SOURCE_VFAS:
return value/10.0;
case TELEMETRY_SOURCE_HDG:
return std::min(359, value*2);
case TELEMETRY_SOURCE_DIST_MAX:
case TELEMETRY_SOURCE_DIST:
return value * 8;
case TELEMETRY_SOURCE_CURRENT_MAX:
case TELEMETRY_SOURCE_CURRENT:
return value/2.0;
case TELEMETRY_SOURCE_POWER:
return value*5;
case TELEMETRY_SOURCE_CONSUMPTION:
return value * 20;
case TELEMETRY_SOURCE_SPEED:
case TELEMETRY_SOURCE_SPEED_MAX:
if (fd->imperial==1)
return value;
else
return value*1.852;
default:
return value;
}
}
QString getTrimInc(ModelData * g_model)
{
switch (g_model->trimInc) {
@ -1400,3 +1403,35 @@ QString getCenterBeep(ModelData * g_model)
if(g_model->beepANACenter & 0x80) strl << "LS";
return strl.join(", ");
}
QString getTheme()
{
QSettings settings;
int theme_set = settings.value("theme", 1).toInt();
QString Theme;
switch(theme_set) {
case 0:
Theme="classic";
break;
case 2:
Theme="monowhite";
break;
case 3:
Theme="monoblue";
break;
default:
Theme="monochrome";
break;
}
return Theme;
}
CompanionIcon::CompanionIcon(QString baseimage)
{
static QString theme = getTheme();
addFile(":/themes/"+theme+"/16/"+baseimage, QSize(16,16));
addFile(":/themes/"+theme+"/24/"+baseimage, QSize(24,24));
addFile(":/themes/"+theme+"/32/"+baseimage, QSize(32,32));
addFile(":/themes/"+theme+"/48/"+baseimage, QSize(48,48));
}

View file

@ -29,6 +29,33 @@ void populateTTraceCB(QComboBox *b, int value);
void populateRotEncCB(QComboBox *b, int value, int renumber);
void populateBacklightCB(QComboBox *b, const uint8_t value);
QString getTheme();
class CompanionIcon: public QIcon {
public:
CompanionIcon(QString baseimage);
};
class GVarGroup : public QObject {
Q_OBJECT
public:
GVarGroup(QCheckBox *weightGV, QSpinBox *weightSB, QComboBox *weightCB, int & weight, const int deflt, const int mini, const int maxi, const unsigned int flags=0);
protected slots:
void gvarCBChanged(int);
void valuesChanged();
protected:
QCheckBox *weightGV;
QSpinBox *weightSB;
QComboBox *weightCB;
int & weight;
const unsigned int flags;
bool lock;
};
class CurveGroup : public QObject {
Q_OBJECT
@ -57,10 +84,9 @@ class CurveGroup : public QObject {
#define POPULATE_AND_SWITCHES 0x04
void populateSwitchCB(QComboBox *b, const RawSwitch & value, unsigned long attr=0, UseContext context=DefaultContext);
void populateFuncCB(QComboBox *b, unsigned int value);
void populateRepeatCB(QComboBox *b, unsigned int value);
void populateGVmodeCB(QComboBox *b, unsigned int value);
QString FuncParam(uint function, int value, QString paramT="",unsigned int adjustmode=0);
void populateFuncParamCB(QComboBox *b, uint function, unsigned int value, unsigned int adjustmode=0);
void populateFuncParamCB(QComboBox *b, const ModelData & model, uint function, unsigned int value, unsigned int adjustmode=0);
void populateFuncParamArmTCB(QComboBox *b, ModelData * g_model, char * value, QStringList & paramsList);
void populatePhasesCB(QComboBox *b, int value);
void populateTrimUseCB(QComboBox *b, unsigned int phase);
@ -71,24 +97,25 @@ QString getCustomSwitchStr(CustomSwData * customSw, const ModelData & model);
QString getProtocolStr(const int proto);
QString getPhasesStr(unsigned int phases, ModelData & model);
#define POPULATE_SOURCES 1
#define POPULATE_TRIMS 2
#define POPULATE_SWITCHES 4
#define POPULATE_GVARS 8
#define POPULATE_TELEMETRY 16
#define POPULATE_TELEMETRYEXT 32
#define POPULATE_SOURCES 1
#define POPULATE_TRIMS 2
#define POPULATE_SWITCHES 4
#define POPULATE_GVARS 8
#define POPULATE_TELEMETRY 16
#define POPULATE_TELEMETRYEXT 32
#define POPULATE_VIRTUAL_INPUTS 64
#define GVARS_VARIANT 0x0001
#define FRSKY_VARIANT 0x0002
// void populateGVarCB(QComboBox *b, int value, int min, int max,int pgvars=5); //TODO: Clean Up
void populateGVCB(QComboBox *b, int value);
void populateSourceCB(QComboBox *b, const RawSource &source, unsigned int flags);
void populateSourceCB(QComboBox *b, const RawSource &source, const ModelData & model, unsigned int flags);
void populateCSWCB(QComboBox *b, int value);
QString getTimerMode(int tm);
QString getTimerModeB(int tm);
QString getPhaseName(int val, char * phasename=NULL);
QString getStickStr(int index);
QString getInputStr(ModelData & model, int index);
QString getCSWFunc(int val);
QString getFuncName(unsigned int val);
QString getRepeatString(unsigned int val);
@ -110,7 +137,7 @@ QString getFrSkyUnits(int units);
QString getFrSkyProtocol(int protocol);
QString getFrSkyMeasure(int units);
QString getFrSkySrc(int index);
float getBarValue(int barId, int value, FrSkyData *fd);
float c9xexpou(float point, float coeff);
float ValToTim(int value);
int TimToVal(float value);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 274 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 871 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Before After
Before After

View file

@ -1,104 +1,340 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.2" width="190mm" height="190mm" viewBox="0 0 19000 19000" preserveAspectRatio="xMidYMid" fill-rule="evenodd" clip-path="url(#presentation_clip_path)" stroke-width="28.222" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" xmlns:ooo="http://xml.openoffice.org/svg/export" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
<defs class="ClipPathGroup">
<clipPath id="presentation_clip_path" clipPathUnits="userSpaceOnUse">
<rect x="0" y="0" width="19000" height="19000"/>
</clipPath>
</defs>
<defs class="TextShapeIndex">
<g ooo:slide="id1" ooo:id-list="id3 id4 id5 id6 id7 id8 id9 id10"/>
</defs>
<defs class="EmbeddedBulletChars">
<g id="bullet-char-template(57356)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"/>
</g>
<g id="bullet-char-template(57354)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"/>
</g>
<g id="bullet-char-template(10146)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"/>
</g>
<g id="bullet-char-template(10132)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"/>
</g>
<g id="bullet-char-template(10007)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"/>
</g>
<g id="bullet-char-template(10004)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"/>
</g>
<g id="bullet-char-template(9679)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"/>
</g>
<g id="bullet-char-template(8226)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"/>
</g>
<g id="bullet-char-template(8211)" transform="scale(0.00048828125,-0.00048828125)">
<path d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"/>
</g>
</defs>
<defs class="TextEmbeddedBitmaps"/>
<g>
<g id="id2" class="Master_Slide">
<g id="bg-id2" class="Background"/>
<g id="bo-id2" class="BackgroundObjects"/>
</g>
</g>
<g class="SlideGroup">
<g>
<g id="id1" class="Slide" clip-path="url(#presentation_clip_path)">
<g class="Page">
<g class="Group">
<g class="com.sun.star.drawing.CustomShape">
<g id="id3">
<path fill="rgb(0,0,0)" stroke="none" d="M 9500,19000 L 0,19000 0,0 19000,0 19000,19000 9500,19000 Z"/>
<path fill="none" stroke="rgb(0,0,0)" d="M 9500,19000 L 0,19000 0,0 19000,0 19000,19000 9500,19000 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.PolyPolygonShape">
<g id="id4">
<path fill="rgb(255,255,255)" stroke="none" d="M 1500,4800 L 7800,4800 7800,6800 5800,6800 5800,14800 3500,14800 3500,6800 1500,6800 1500,6000 1500,4800 Z"/>
<path fill="none" stroke="rgb(255,255,255)" d="M 1500,4800 L 7800,4800 7800,6800 5800,6800 5800,14800 3500,14800 3500,6800 1500,6800 1500,6000 1500,4800 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="3228" y="10021"><tspan fill="rgb(0,0,0)" stroke="none"> </tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.PolyPolygonShape">
<g id="id5">
<path fill="rgb(51,102,51)" stroke="none" d="M 17400,4800 L 14800,4800 13000,7900 11100,4800 8500,4800 11500,9800 8400,14800 10900,14800 13000,11500 15000,14800 17600,14800 14400,9800 17400,4800 Z"/>
<path fill="none" stroke="rgb(51,102,51)" d="M 17400,4800 L 14800,4800 13000,7900 11100,4800 8500,4800 11500,9800 8400,14800 10900,14800 13000,11500 15000,14800 17600,14800 14400,9800 17400,4800 Z"/>
</g>
</g>
<g class="com.sun.star.drawing.TextShape">
<g id="id6">
<text class="TextShape"><tspan class="TextParagraph" font-family="Ubuntu Medium" font-size="2540px" font-weight="700"><tspan class="TextPosition" x="1201" y="17891"><tspan fill="rgb(255,255,255)" stroke="none">COMPANION</tspan></tspan></tspan></text>
</g>
</g>
<g class="Group">
<g class="com.sun.star.drawing.TextShape">
<g id="id7">
<text class="TextShape"><tspan class="TextParagraph" font-family="Ubuntu Medium" font-size="3104px" font-weight="700"><tspan class="TextPosition" x="1391" y="3521"><tspan fill="rgb(255,255,255)" stroke="none">O</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.TextShape">
<g id="id8">
<text class="TextShape"><tspan class="TextParagraph" font-family="Ubuntu Medium" font-size="3104px" font-weight="700"><tspan class="TextPosition" x="6282" y="3521"><tspan fill="rgb(255,255,255)" stroke="none">P</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.TextShape">
<g id="id9">
<text class="TextShape"><tspan class="TextParagraph" font-family="Ubuntu Medium" font-size="3104px" font-weight="700"><tspan class="TextPosition" x="10696" y="3586"><tspan fill="rgb(255,255,255)" stroke="none">E</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.TextShape">
<g id="id10">
<text class="TextShape"><tspan class="TextParagraph" font-family="Ubuntu Medium" font-size="3104px" font-weight="700"><tspan class="TextPosition" x="14950" y="3586"><tspan fill="rgb(255,255,255)" stroke="none">N</tspan></tspan></tspan></text>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:ooo="http://xml.openoffice.org/svg/export"
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.2"
width="190mm"
height="190mm"
viewBox="0 0 19000 19000"
preserveAspectRatio="xMidYMid"
fill-rule="evenodd"
clip-path="url(#presentation_clip_path)"
stroke-width="28.222"
stroke-linejoin="round"
xml:space="preserve"
id="svg3347"
inkscape:version="0.48.4 r9939"
sodipodi:docname="opentx_logo.svg"><metadata
id="metadata3491"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1280"
inkscape:window-height="775"
id="namedview3489"
showgrid="false"
inkscape:zoom="0.20481287"
inkscape:cx="-1144.0445"
inkscape:cy="70.041471"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g3399" /><defs
class="ClipPathGroup"
id="defs3349"><linearGradient
id="linearGradient3844"
osb:paint="solid"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3846" /></linearGradient><linearGradient
id="linearGradient3838"
osb:paint="solid"><stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop3840" /></linearGradient><linearGradient
id="linearGradient3826"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3828" /></linearGradient><linearGradient
id="linearGradient3820"
osb:paint="solid"><stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3822" /></linearGradient><linearGradient
id="linearGradient3814"
osb:paint="solid"><stop
style="stop-color:#009000;stop-opacity:1;"
offset="0"
id="stop3816" /></linearGradient><clipPath
id="presentation_clip_path"
clipPathUnits="userSpaceOnUse"><rect
x="0"
y="0"
width="19000"
height="19000"
id="rect3352" /></clipPath><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3814"
id="linearGradient3818"
x1="8385.889"
y1="9800"
x2="17614.111"
y2="9800"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3820"
id="linearGradient3824"
x1="1485.889"
y1="9800"
x2="7814.111"
y2="9800"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3826"
id="linearGradient3830"
x1="15416.328"
y1="1734.3301"
x2="18735.195"
y2="1734.3301"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3826"
id="linearGradient3832"
x1="11162.328"
y1="1734.3301"
x2="13794.105"
y2="1734.3301"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3826"
id="linearGradient3834"
x1="6748.3281"
y1="1669.3301"
x2="9796.8242"
y2="1669.3301"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3826"
id="linearGradient3836"
x1="1644.0078"
y1="1671.8105"
x2="5454.0078"
y2="1671.8105"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3838"
id="linearGradient3842"
x1="-14.111"
y1="9500"
x2="19014.111"
y2="9500"
gradientUnits="userSpaceOnUse" /><linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3844"
id="linearGradient3848"
x1="-14.111"
y1="9500"
x2="19014.111"
y2="9500"
gradientUnits="userSpaceOnUse" /></defs><defs
class="TextShapeIndex"
id="defs3354"><g
ooo:slide="id1"
ooo:id-list="id3 id4 id5 id6 id7 id8 id9 id10"
id="g3356" /></defs><defs
class="EmbeddedBulletChars"
id="defs3358"><g
id="bullet-char-template(57356)"
transform="scale(0.00048828125,-0.00048828125)"><path
d="M 580,1141 L 1163,571 580,0 -4,571 580,1141 Z"
id="path3361" /></g><g
id="bullet-char-template(57354)"
transform="scale(0.00048828125,-0.00048828125)"><path
d="M 8,1128 L 1137,1128 1137,0 8,0 8,1128 Z"
id="path3364" /></g><g
id="bullet-char-template(10146)"
transform="scale(0.00048828125,-0.00048828125)"><path
d="M 174,0 L 602,739 174,1481 1456,739 174,0 Z M 1358,739 L 309,1346 659,739 1358,739 Z"
id="path3367" /></g><g
id="bullet-char-template(10132)"
transform="scale(0.00048828125,-0.00048828125)"><path
d="M 2015,739 L 1276,0 717,0 1260,543 174,543 174,936 1260,936 717,1481 1274,1481 2015,739 Z"
id="path3370" /></g><g
id="bullet-char-template(10007)"
transform="scale(0.00048828125,-0.00048828125)"><path
d="M 0,-2 C -7,14 -16,27 -25,37 L 356,567 C 262,823 215,952 215,954 215,979 228,992 255,992 264,992 276,990 289,987 310,991 331,999 354,1012 L 381,999 492,748 772,1049 836,1024 860,1049 C 881,1039 901,1025 922,1006 886,937 835,863 770,784 769,783 710,716 594,584 L 774,223 C 774,196 753,168 711,139 L 727,119 C 717,90 699,76 672,76 641,76 570,178 457,381 L 164,-76 C 142,-110 111,-127 72,-127 30,-127 9,-110 8,-76 1,-67 -2,-52 -2,-32 -2,-23 -1,-13 0,-2 Z"
id="path3373" /></g><g
id="bullet-char-template(10004)"
transform="scale(0.00048828125,-0.00048828125)"><path
d="M 285,-33 C 182,-33 111,30 74,156 52,228 41,333 41,471 41,549 55,616 82,672 116,743 169,778 240,778 293,778 328,747 346,684 L 369,508 C 377,444 397,411 428,410 L 1163,1116 C 1174,1127 1196,1133 1229,1133 1271,1133 1292,1118 1292,1087 L 1292,965 C 1292,929 1282,901 1262,881 L 442,47 C 390,-6 338,-33 285,-33 Z"
id="path3376" /></g><g
id="bullet-char-template(9679)"
transform="scale(0.00048828125,-0.00048828125)"><path
d="M 813,0 C 632,0 489,54 383,161 276,268 223,411 223,592 223,773 276,916 383,1023 489,1130 632,1184 813,1184 992,1184 1136,1130 1245,1023 1353,916 1407,772 1407,592 1407,412 1353,268 1245,161 1136,54 992,0 813,0 Z"
id="path3379" /></g><g
id="bullet-char-template(8226)"
transform="scale(0.00048828125,-0.00048828125)"><path
d="M 346,457 C 273,457 209,483 155,535 101,586 74,649 74,723 74,796 101,859 155,911 209,963 273,989 346,989 419,989 480,963 531,910 582,859 608,796 608,723 608,648 583,586 532,535 482,483 420,457 346,457 Z"
id="path3382" /></g><g
id="bullet-char-template(8211)"
transform="scale(0.00048828125,-0.00048828125)"><path
d="M -4,459 L 1135,459 1135,606 -4,606 -4,459 Z"
id="path3385" /></g></defs><defs
class="TextEmbeddedBitmaps"
id="defs3387" /><g
id="g3389"><g
id="id2"
class="Master_Slide"><g
id="bg-id2"
class="Background" /><g
id="bo-id2"
class="BackgroundObjects" /></g></g><g
id="g3399"
class="Page"><g
class="com.sun.star.drawing.CustomShape"
id="g3403"
style="stroke:url(#linearGradient3842);fill-opacity:1;fill:url(#linearGradient3848)"><g
id="id3"
style="stroke:url(#linearGradient3842);fill-opacity:1;fill:url(#linearGradient3848)"><path
d="M 9500,19000 0,19000 0,0 l 19000,0 0,19000 -9500,0 z"
id="path3406"
inkscape:connector-curvature="0"
style="fill:url(#linearGradient3848);stroke:url(#linearGradient3842);fill-opacity:1" /><path
d="M 9500,19000 0,19000 0,0 l 19000,0 0,19000 -9500,0 z"
id="path3408"
inkscape:connector-curvature="0"
style="fill:url(#linearGradient3848);stroke:url(#linearGradient3842);fill-opacity:1" /></g></g><g
class="com.sun.star.drawing.PolyPolygonShape"
id="g3410"
transform="translate(0,2427.1101)"
style="fill:#ffffff;stroke:url(#linearGradient3824)"><g
id="id4"
style="fill:#ffffff;stroke:url(#linearGradient3824)"><path
d="m 1500,4800 6300,0 0,2000 -2000,0 0,8000 -2300,0 0,-8000 -2000,0 0,-800 0,-1200 z"
id="path3413"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke:url(#linearGradient3824)" /><path
d="m 1500,4800 6300,0 0,2000 -2000,0 0,8000 -2300,0 0,-8000 -2000,0 0,-800 0,-1200 z"
id="path3415"
inkscape:connector-curvature="0"
style="fill:#ffffff;stroke:url(#linearGradient3824)" /><text
class="TextShape"
id="text3417"
style="fill:#ffffff;stroke:url(#linearGradient3824)"><tspan
class="TextParagraph"
font-size="635px"
font-weight="400"
id="tspan3419"
style="font-size:635px;font-weight:400;fill:#ffffff;font-family:'Liberation Sans, sans-serif';stroke:url(#linearGradient3824)"><tspan
class="TextPosition"
x="3228"
y="10021"
id="tspan3421"
style="fill:#ffffff;stroke:url(#linearGradient3824)"><tspan
id="tspan3423"
style="fill:#ffffff;stroke:url(#linearGradient3824)" /></tspan></tspan></text>
</g></g><g
class="com.sun.star.drawing.PolyPolygonShape"
id="g3425"
transform="translate(0,2427.1101)"
style="fill:#009000;fill-opacity:1;stroke:url(#linearGradient3818)"><g
id="id5"
style="fill:#009000;fill-opacity:1;stroke:url(#linearGradient3818)"><path
d="m 17400,4800 -2600,0 -1800,3100 -1900,-3100 -2600,0 3000,5000 -3100,5000 2500,0 2100,-3300 2000,3300 2600,0 -3200,-5000 3000,-5000 z"
id="path3428"
inkscape:connector-curvature="0"
style="fill:#009000;stroke:url(#linearGradient3818);fill-opacity:1" /><path
d="m 17400,4800 -2600,0 -1800,3100 -1900,-3100 -2600,0 3000,5000 -3100,5000 2500,0 2100,-3300 2000,3300 2600,0 -3200,-5000 3000,-5000 z"
id="path3430"
inkscape:connector-curvature="0"
style="fill:#009000;stroke:url(#linearGradient3818);fill-opacity:1" /></g></g><g
id="g3445"
class="com.sun.star.drawing.TextShape"
transform="translate(-169.33334,2144.8881)"
style="stroke:url(#linearGradient3836)"><g
id="id7"
style="stroke:url(#linearGradient3836)"><text
style="line-height:125%;stroke:url(#linearGradient3836)"
id="text3448"
class="TextShape"
sodipodi:linespacing="125%"><tspan
style="font-size:5080px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Sans;-inkscape-font-specification:Sans Bold;stroke:url(#linearGradient3836)"
id="tspan3450"
font-weight="700"
font-size="3104px"
class="TextParagraph"><tspan
id="tspan3452"
y="3521"
x="1391"
class="TextPosition"
style="font-size:5080px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke:url(#linearGradient3836);font-family:Sans;-inkscape-font-specification:Sans Bold">O</tspan></tspan></text>
</g></g><g
id="g3456"
class="com.sun.star.drawing.TextShape"
transform="translate(-508.00004,2144.8881)"
style="stroke:url(#linearGradient3834)"><g
id="id8"
style="stroke:url(#linearGradient3834)"><text
style="line-height:125%;stroke:url(#linearGradient3834)"
id="text3459"
class="TextShape"
sodipodi:linespacing="125%"><tspan
style="font-size:5080px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Sans;-inkscape-font-specification:Sans Bold;stroke:url(#linearGradient3834)"
id="tspan3461"
font-weight="700"
font-size="3104px"
class="TextParagraph"><tspan
id="tspan3463"
y="3521"
x="6282"
class="TextPosition"
style="font-size:5080px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke:url(#linearGradient3834);font-family:Sans;-inkscape-font-specification:Sans Bold">P</tspan></tspan></text>
</g></g><g
id="g3467"
class="com.sun.star.drawing.TextShape"
transform="translate(-846.66674,2144.8881)"
style="stroke:url(#linearGradient3832)"><g
id="id9"
style="stroke:url(#linearGradient3832)"><text
style="line-height:125%;stroke:url(#linearGradient3832)"
id="text3470"
class="TextShape"
sodipodi:linespacing="125%"><tspan
style="font-size:5080px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Sans;-inkscape-font-specification:Sans Bold;stroke:url(#linearGradient3832)"
id="tspan3472"
font-weight="700"
font-size="3104px"
class="TextParagraph"><tspan
id="tspan3474"
y="3586"
x="10696"
class="TextPosition"
style="font-size:5080px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke:url(#linearGradient3832);font-family:Sans;-inkscape-font-specification:Sans Bold">E</tspan></tspan></text>
</g></g><g
id="g3478"
class="com.sun.star.drawing.TextShape"
transform="translate(-1241.7777,2144.8881)"
style="stroke:url(#linearGradient3830)"><g
id="id10"
style="stroke:url(#linearGradient3830)"><text
style="line-height:125%;stroke:url(#linearGradient3830)"
id="text3481"
class="TextShape"
sodipodi:linespacing="125%"><tspan
style="font-size:5080px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Sans;-inkscape-font-specification:Sans Bold;stroke:url(#linearGradient3830)"
id="tspan3483"
font-weight="700"
font-size="3104px"
class="TextParagraph"><tspan
id="tspan3485"
y="3586"
x="14950"
class="TextPosition"
style="font-size:5080px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;stroke:url(#linearGradient3830);font-family:Sans;-inkscape-font-specification:Sans Bold">N</tspan></tspan></text>
</g></g></g></svg>

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View file

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 852 B

After

Width:  |  Height:  |  Size: 852 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2 KiB

After

Width:  |  Height:  |  Size: 2 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

View file

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 534 B

After

Width:  |  Height:  |  Size: 534 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 9.6 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 9.8 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 312 B

After

Width:  |  Height:  |  Size: 312 B

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Before After
Before After

View file

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Some files were not shown because too many files have changed in this diff Show more