Compare commits
208 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e85242e08d | |||
| 7ea2eb6259 | |||
| 2cd66cbc65 | |||
| 06064b6da2 | |||
| 809cb69b4f | |||
| 6f8e439154 | |||
| 4c81e57134 | |||
| ddd2d19c0c | |||
| eeb9ee8aa2 | |||
| 30b660da17 | |||
| 4cd881d746 | |||
| ea731eae37 | |||
| 5d77b8bf21 | |||
| 621639ad0b | |||
| fdc95bbf23 | |||
| b182d98da0 | |||
| e49a15bf07 | |||
| 3cdb2b549b | |||
| 69276bffcc | |||
| b0afbb692f | |||
| 0ab85725e0 | |||
| e8e025fdb0 | |||
| 7d29fed9a5 | |||
| 78ef42755b | |||
| 2a9429d183 | |||
| 4773ba469f | |||
| 6d1b379f53 | |||
| 54cbc46929 | |||
| 1fd4dbb1a9 | |||
| ecd871fe34 | |||
| 5c4b2ebd90 | |||
| 3fe75fac59 | |||
| 43a7434ae5 | |||
| 134a9c2472 | |||
| 0f495a6fd9 | |||
| 5d037327d4 | |||
| ebbe2635b7 | |||
| cab9615fa8 | |||
| 9b6d45bba3 | |||
| 7ddb29ca74 | |||
| 87e1c4f96d | |||
| 22e625baad | |||
| b37f573226 | |||
| 296264d8b4 | |||
| 2ba86d8cb3 | |||
| 8e5a52879a | |||
| e4d03b8c70 | |||
| 831cd81320 | |||
| b2d8c76fc1 | |||
| 3392879940 | |||
| d767b62d01 | |||
| 2ea687099a | |||
| 81c4b61322 | |||
| 0610c2c79a | |||
| e50d9c0edf | |||
| 72dc022dc9 | |||
| 123d5c1be8 | |||
| 9be2755d91 | |||
| 4305935fd4 | |||
| 3dff1fdac7 | |||
| 0281a5bb22 | |||
| cc0552d1a2 | |||
| f4ee34dcc9 | |||
| 9791509ec1 | |||
| bb71cd35f8 | |||
| d93b63d85c | |||
| 2706a3d81c | |||
| 73b0090840 | |||
| 2b3242f863 | |||
| 9f9a561c82 | |||
| ba10ec68b6 | |||
| 0b5820bdd6 | |||
| bfbe0046ab | |||
| 71ba0328bd | |||
| df80aa00c2 | |||
| 3c181fc474 | |||
| e62a8e8ba7 | |||
| eb69444cbf | |||
| f083b6f45a | |||
| 13de131fe4 | |||
| 4c6c9fdb20 | |||
| 9cb4d5da1f | |||
| ce22ea22b4 | |||
| aa661ced46 | |||
| 1e56c9ba14 | |||
| e65b9d825b | |||
| 2561e53696 | |||
| 2665c2318f | |||
| 5a0f154876 | |||
| 15d89d638c | |||
| 087c9f0202 | |||
| 0ae00dddf8 | |||
| f865bdf785 | |||
| 04897885dd | |||
| 2248c84b8f | |||
| 5f0f5de111 | |||
| b93036c81d | |||
| 6bfc4f7986 | |||
| 34de0aa01a | |||
| b8ca14c921 | |||
| 5ec77c6dae | |||
| f482b895fb | |||
| 73f2e99d7d | |||
| 49b821b04d | |||
| 17bfe1544f | |||
| 7a7b4c047e | |||
| 7912b79d7e | |||
| 83d8834fe4 | |||
| bf9fc6dd98 | |||
| 6edc28b4ba | |||
| e0deb3b665 | |||
| 8f3060f99c | |||
| 9e7a52b952 | |||
| 3b8e64fe64 | |||
| 479c070896 | |||
| 9f75be0dc4 | |||
| d090175b2a | |||
| 93d6788605 | |||
| 5de9f6c4a4 | |||
| 9785720bf6 | |||
| 626f4c5784 | |||
| c1e15d0212 | |||
| a19fff0998 | |||
| 9a502461df | |||
| bc484879a5 | |||
| b070f56838 | |||
| dd874427b8 | |||
| 902a69323a | |||
| a6c39e83b1 | |||
| 6511ae173d | |||
| 3d4d6ba313 | |||
| ce1ff9ea14 | |||
| 38cf9536e1 | |||
| 2683194f64 | |||
| 010d6691b9 | |||
| 3c6e21d945 | |||
| dcde1073b0 | |||
| fd55a40d26 | |||
| a2350c6d92 | |||
| 35e5faa8ad | |||
| 77e9130c37 | |||
| 9cc0b8b608 | |||
| 96953c7987 | |||
| 5b277378c6 | |||
| 2714017fe8 | |||
| b747b03ac0 | |||
| 3ed37c1e79 | |||
| b9b2cb46eb | |||
| 832c891e3e | |||
| 86a8e6a128 | |||
| 30c28645da | |||
| 01c0607aa8 | |||
| 7a14c3592a | |||
| e9b28898d0 | |||
| 001585a194 | |||
| b22dca6be7 | |||
| e46523b08e | |||
| a3f8e92c39 | |||
| 4cdd359405 | |||
| 82aa8cc383 | |||
| 85cb8b3dbd | |||
| 0a5c3f42c5 | |||
| 8267ac2fc2 | |||
| 6bbb416f83 | |||
| 1478b8c9da | |||
| 3dddf353e4 | |||
| ecb1955750 | |||
| c00c9e7e79 | |||
| e9084e4d59 | |||
| 016eafefab | |||
| 7cdc42387b | |||
| f09e1338f6 | |||
| 458e41744b | |||
| f276b8a9eb | |||
| 57d50f05cd | |||
| dd5889c6fc | |||
| a4c400b62a | |||
| e7e6c9b75e | |||
| b54c5c2d2e | |||
| b3d61289e8 | |||
| e0295d08da | |||
| cf7984a3c5 | |||
| 41390af8a4 | |||
| 5385a01b2e | |||
| 54447a45a0 | |||
| b593d871a6 | |||
| d18c6c9985 | |||
| 64e84f1af9 | |||
| 61923a9bec | |||
| c8e0b85e7e | |||
| 2170d2a129 | |||
| 7f4f7cee8b | |||
| f2c9aa9494 | |||
| 79b461eda8 | |||
| becbb8cbb9 | |||
| ac98f6adaf | |||
| fe68ef4cd1 | |||
| 0342ca9172 | |||
| d030561bf3 | |||
| d21fcbf260 | |||
| 19818b6c07 | |||
| 6b7cc60751 | |||
| 00d3d3e20b | |||
| 4a099a7161 | |||
| df30dd9bb9 | |||
| e44e87221f | |||
| d4959dfeb0 | |||
| ffe70d1eaa |
@@ -278,7 +278,7 @@ Josep Clodas Sola
|
||||
Thierry Martin
|
||||
Peter Mauro
|
||||
Mitchell Brenner
|
||||
Ulach Green
|
||||
Yak
|
||||
Lluis Bullich Rañe
|
||||
Steffen Rohr
|
||||
Eric Jacquin
|
||||
@@ -406,3 +406,64 @@ Michael Gregory
|
||||
Robert Russell
|
||||
Gordon Stahl
|
||||
Felix Kaiser
|
||||
Joshua Bardwell
|
||||
Davd Goodall
|
||||
Leonard MacKey
|
||||
Miles Kelly
|
||||
Sergio Robledo
|
||||
Mikael Wallbäck
|
||||
Daniel Malcman
|
||||
Paul Dittman
|
||||
Attilio Rausse
|
||||
Sidney Gates
|
||||
Andrea Montefusco
|
||||
Paul Luby
|
||||
Donald L Webster
|
||||
Kenneth Frehafer
|
||||
Peter McHenry
|
||||
Matthias Hase
|
||||
Markus Wolf
|
||||
Andrew Fazio
|
||||
Stefan Künst
|
||||
Stephen Adams
|
||||
Arold Reinders
|
||||
Tauno Rautakorpi
|
||||
Frank Houvenaghel
|
||||
Aerial Tech Hobbies - www.aerialtechhobbies.com
|
||||
George Neusse
|
||||
Andreja Rusjakovski
|
||||
Axel Stöckle
|
||||
Mike Perkins
|
||||
Erwin Störrle
|
||||
Rodger Hopper
|
||||
Fernando Cesar
|
||||
Jonathan Gillis
|
||||
DK-System
|
||||
Lexington S Morley
|
||||
Bernd Koehler
|
||||
Davis RC
|
||||
Pete Johnson
|
||||
Patricia Martin
|
||||
Florian Tschacher
|
||||
Brian Spearing
|
||||
Craig Hall
|
||||
Joseph Case
|
||||
Harald Klein
|
||||
Robert Crockford
|
||||
Chris Boultinghouse
|
||||
Kitsew
|
||||
Georgios Papadopoulos
|
||||
Fourmost Products
|
||||
Dennis Miller
|
||||
Dave Matison
|
||||
Maximilian Radig
|
||||
Juan Rodriguez
|
||||
Robert Sessler
|
||||
John Murray
|
||||
Martin Sniedze
|
||||
David Poole
|
||||
Manfred Delakowitz
|
||||
Martijn Kruissen
|
||||
Jörgen Norman
|
||||
Nathan Kinney
|
||||
John Godden
|
||||
|
||||
@@ -1,3 +1,25 @@
|
||||
<h2>Version 2.0.2</h2>
|
||||
<ul>
|
||||
<li>Mouse scroll wheel behaves differently</li>
|
||||
<li>Play Sounds should now work on all platforms</li>
|
||||
<li>A lot of small bug fixes</li>
|
||||
</ul>
|
||||
|
||||
<h2>Version 2.0.1</h2>
|
||||
<ul>
|
||||
<li>Fix on recursive GVars</li>
|
||||
<li>Sky9x EEPROM read/write fix</li>
|
||||
<li>Translations updated
|
||||
<li>Wizard fixes
|
||||
<li>Fix on invalid splashes bitmaps
|
||||
</ul>
|
||||
|
||||
<h2>Version 2.0.0</h2>
|
||||
<ul>
|
||||
<li>Companion now merged into OpenTX</li>
|
||||
<li>Too many changes to list them all!</li>
|
||||
</ul>
|
||||
|
||||
<h2>Version 1.52</h2>
|
||||
<ul>
|
||||
<li>Fix crash when writing certain EEPROMS</li>
|
||||
|
||||
@@ -2,7 +2,7 @@ PROJECT( companion )
|
||||
|
||||
SET( C9X_VERSION_MAJOR "2" )
|
||||
SET( C9X_VERSION_MINOR "0" )
|
||||
SET( C9X_VERSION_REVISION "0" )
|
||||
SET( C9X_VERSION_REVISION "2" )
|
||||
SET( C9X_VERSION ${C9X_VERSION_MAJOR}.${C9X_VERSION_MINOR}.${C9X_VERSION_REVISION} )
|
||||
|
||||
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )
|
||||
@@ -42,18 +42,14 @@ SET( QT_USE_QTNETWORK True )
|
||||
SET( QT_USE_QTXML True )
|
||||
INCLUDE( ${QT_USE_FILE} )
|
||||
|
||||
IF ( APPLE )
|
||||
MESSAGE( STATUS "Phonon still not supported on APPLE " )
|
||||
MESSAGE( STATUS "Looking for PHONON " )
|
||||
FIND_PACKAGE(Phonon)
|
||||
IF ( PHONON_FOUND )
|
||||
INCLUDE_DIRECTORIES( ${PHONO_INCLUDE_DIR} )
|
||||
MESSAGE("PHONON Include Path: " ${PHONON_INCLUDE_DIR} )
|
||||
ADD_DEFINITIONS( -DPHONON )
|
||||
ELSE()
|
||||
MESSAGE( STATUS "Looking for PHONON " )
|
||||
FIND_PACKAGE(Phonon)
|
||||
IF ( PHONON_FOUND )
|
||||
INCLUDE_DIRECTORIES( ${PHONO_INCLUDE_DIR} )
|
||||
MESSAGE("PHONON Include Path: " ${PHONON_INCLUDE_DIR} )
|
||||
ADD_DEFINITIONS( -DPHONON )
|
||||
ELSE()
|
||||
MESSAGE( "PHONON not found!" )
|
||||
ENDIF()
|
||||
MESSAGE( "PHONON not found!" )
|
||||
ENDIF()
|
||||
|
||||
ADD_CUSTOM_COMMAND(
|
||||
@@ -121,6 +117,8 @@ set(common_SRCS
|
||||
firmwares/gruvin9x/gruvin9xinterface.cpp
|
||||
firmwares/ersky9x/ersky9xeeprom.cpp
|
||||
firmwares/ersky9x/ersky9xinterface.cpp
|
||||
${RADIO_SRC_DIRECTORY}/bitmaps/sticks.lbm
|
||||
${RADIO_SRC_DIRECTORY}/translations/en.h
|
||||
firmwares/opentx/opentxeeprom.cpp
|
||||
firmwares/opentx/open9xStockeeprom.cpp
|
||||
firmwares/opentx/open9xGruvin9xeeprom.cpp
|
||||
@@ -130,7 +128,7 @@ set(common_SRCS
|
||||
firmwares/opentx/opentxSky9xsimulator.cpp
|
||||
firmwares/opentx/opentxGruvin9xsimulator.cpp
|
||||
firmwares/opentx/opentxM128simulator.cpp
|
||||
firmwares/opentx/opentxsimulator.cpp
|
||||
firmwares/opentx/opentxM64simulator.cpp
|
||||
file.cpp
|
||||
googleanalytics.cpp
|
||||
appdata.cpp
|
||||
@@ -140,14 +138,16 @@ set(common_MOC_HDRS
|
||||
googleanalytics.h
|
||||
)
|
||||
|
||||
qt4_wrap_cpp( common_SRCS ${common_MOC_HDRS} )
|
||||
|
||||
add_library(common ${common_SRCS})
|
||||
|
||||
set(companion_SRCS
|
||||
hexinterface.cpp
|
||||
flashinterface.cpp
|
||||
xmlinterface.cpp
|
||||
${PROJECT_BINARY_DIR}/radio.cxx
|
||||
# xmlinterface.cpp
|
||||
# ${PROJECT_BINARY_DIR}/radio.cxx
|
||||
${RADIO_SRC_DIRECTORY}/stamp-opentx.h
|
||||
${RADIO_SRC_DIRECTORY}/bitmaps/sticks.lbm
|
||||
${RADIO_SRC_DIRECTORY}/translations/en.h
|
||||
helpers.cpp
|
||||
mdichild.cpp
|
||||
generaledit.cpp
|
||||
@@ -168,7 +168,7 @@ set(companion_SRCS
|
||||
splashlibrary.cpp
|
||||
mainwindow.cpp
|
||||
companion.cpp
|
||||
taranisnotfound.cpp
|
||||
radionotfound.cpp
|
||||
qcustomplot.cpp
|
||||
wizarddata.cpp
|
||||
wizarddialog.cpp
|
||||
@@ -193,7 +193,7 @@ set(companion_MOC_HDRS
|
||||
modelslist.h
|
||||
mdichild.h
|
||||
mainwindow.h
|
||||
taranisnotfound.h
|
||||
radionotfound.h
|
||||
qcustomplot.h
|
||||
qautocombobox.h
|
||||
helpers.h
|
||||
@@ -216,7 +216,7 @@ set(companion_UIS
|
||||
customizesplashdialog.ui
|
||||
splashlibrary.ui
|
||||
burndialog.ui
|
||||
taranisnotfound.ui
|
||||
radionotfound.ui
|
||||
)
|
||||
|
||||
set(companion_RCS
|
||||
@@ -274,9 +274,9 @@ FOREACH( language ${LANGUAGES} )
|
||||
SET( companion_TS ${companion_TS} translations/companion_${language}.ts )
|
||||
ENDFOREACH( language )
|
||||
|
||||
set( companion_SRCS ${common_SRCS} ${companion_SRCS} )
|
||||
set( companion_SRCS ${companion_SRCS} )
|
||||
QT4_WRAP_UI( companion_SRCS ${companion_UIS} )
|
||||
QT4_WRAP_CPP( companion_SRCS ${companion_MOC_HDRS} ${common_MOC_HDRS} )
|
||||
QT4_WRAP_CPP( companion_SRCS ${companion_MOC_HDRS} )
|
||||
QT4_ADD_TRANSLATION( companion_QM ${companion_TS} )
|
||||
QT4_ADD_RESOURCES( companion_SRCS ${companion_RCS} )
|
||||
|
||||
@@ -288,7 +288,7 @@ ELSE( )
|
||||
ADD_EXECUTABLE( ${PROJECT_NAME} WIN32 ${companion_SRCS} ${companion_QM} )
|
||||
ENDIF( )
|
||||
|
||||
TARGET_LINK_LIBRARIES( ${PROJECT_NAME} modeledit simulation ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY} ${XERCESC_LIBRARY} ${PTHREAD_LIBRARY} ${SDL_LIBRARY} ${PHONON_LIBS} )
|
||||
TARGET_LINK_LIBRARIES( ${PROJECT_NAME} modeledit simulation common ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY} ${XERCESC_LIBRARY} ${PTHREAD_LIBRARY} ${SDL_LIBRARY} ${PHONON_LIBS} )
|
||||
|
||||
############# Standalone simu ###############
|
||||
|
||||
@@ -334,8 +334,8 @@ set(simu_MOC_HDRS
|
||||
modeledit/node.h
|
||||
)
|
||||
|
||||
set( simu_SRCS ${simu_SRCS} ${common_SRCS} )
|
||||
qt4_wrap_cpp(simu_SRCS ${simu_MOC_HDRS} ${common_MOC_HDRS} )
|
||||
set( simu_SRCS ${simu_SRCS} )
|
||||
qt4_wrap_cpp(simu_SRCS ${simu_MOC_HDRS} )
|
||||
qt4_add_resources(simu_SRCS companion.qrc) # TODO not needed
|
||||
|
||||
if(WIN32)
|
||||
@@ -345,9 +345,9 @@ endif()
|
||||
add_executable(simulator WIN32 ${simu_SRCS})
|
||||
|
||||
if(SDL_FOUND)
|
||||
target_link_libraries(simulator simulation ${QT_LIBRARIES} ${PTHREAD_LIBRARY} ${SDL_LIBRARY} ${PHONON_LIBS})
|
||||
target_link_libraries(simulator simulation common ${QT_LIBRARIES} ${PTHREAD_LIBRARY} ${SDL_LIBRARY} ${PHONON_LIBS})
|
||||
else()
|
||||
target_link_libraries(simulator simulation ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY} ${PTHREAD_LIBRARY} ${SDL_LIBRARY} ${PHONON_LIBS})
|
||||
target_link_libraries(simulator simulation common ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY} ${PTHREAD_LIBRARY} ${SDL_LIBRARY} ${PHONON_LIBS})
|
||||
endif()
|
||||
|
||||
############# Packaging ####################
|
||||
|
||||
@@ -174,14 +174,14 @@ void AppPreferencesDialog::initSettings()
|
||||
|
||||
QString hwSettings;
|
||||
if (g.profile[g.id()].stickPotCalib() == "" ) {
|
||||
hwSettings = QString(tr("EMPTY: No radio settings stored in profile"));
|
||||
hwSettings = tr("EMPTY: No radio settings stored in profile");
|
||||
}
|
||||
else {
|
||||
QString str = g.profile[g.id()].timeStamp();
|
||||
if (str.isEmpty())
|
||||
hwSettings = QString(tr("AVAILABLE: Radio settings of unknown age"));
|
||||
hwSettings = tr("AVAILABLE: Radio settings of unknown age");
|
||||
else
|
||||
hwSettings = QString(tr("AVAILABLE: Radio settings stored %1").arg(str));
|
||||
hwSettings = tr("AVAILABLE: Radio settings stored %1").arg(str);
|
||||
}
|
||||
ui->lblGeneralSettings->setText(hwSettings);
|
||||
|
||||
|
||||
@@ -159,11 +159,11 @@ void avrOutputDialog::doCopy()
|
||||
dest.close();
|
||||
}
|
||||
else {
|
||||
QMessageBox::warning(this, tr("Error"),tr("Cannot write destination"));
|
||||
QMessageBox::warning(this, tr("Error"),tr("Cannot write destination") + ": " + dest.errorString());
|
||||
}
|
||||
}
|
||||
else {
|
||||
QMessageBox::warning(this, tr("Error"),tr("Cannot open source file"));
|
||||
QMessageBox::warning(this, tr("Error"),tr("Cannot open source file") + ": " + source.errorString());
|
||||
}
|
||||
|
||||
source.close();
|
||||
@@ -438,7 +438,7 @@ void avrOutputDialog::doFinished(int code=0)
|
||||
if (hasErrors || code) {
|
||||
if (!cmdLine.isEmpty()) {
|
||||
if (getProgrammer()!="AVRDUDE") {
|
||||
QMessageBox::critical(this, "Companion", getProgrammer() + " " + tr("did not finish correctly"));
|
||||
QMessageBox::critical(this, "Companion", getProgrammer() + " " + tr("did not finish correctly"));
|
||||
}
|
||||
else {
|
||||
int res = QMessageBox::question(this, "Companion",getProgrammer() + " " + tr("did not finish correctly!\nDo you want some help ?"),QMessageBox::Yes | QMessageBox::No);
|
||||
@@ -446,8 +446,9 @@ void avrOutputDialog::doFinished(int code=0)
|
||||
errorWizard();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
QMessageBox::critical(this, "Companion", tr("Copy did not finish correctly"));
|
||||
}
|
||||
else {
|
||||
QMessageBox::critical(this, "Companion", tr("Copy did not finish correctly"));
|
||||
}
|
||||
// reject();
|
||||
}
|
||||
@@ -467,8 +468,6 @@ void avrOutputDialog::doFinished(int code=0)
|
||||
default: //AVR_DIALOG_KEEP_OPEN
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void avrOutputDialog::doProcessStarted()
|
||||
|
||||
@@ -20,7 +20,7 @@ class avrOutputDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
public:
|
||||
explicit avrOutputDialog(QWidget *parent, QString prog, QStringList arg, QString wTitle, int closeBehaviour=AVR_DIALOG_CLOSE_IF_SUCCESSFUL, bool displayDetails=false);
|
||||
~avrOutputDialog();
|
||||
|
||||
@@ -29,7 +29,7 @@ public:
|
||||
void waitForFinish();
|
||||
void addReadFuses();
|
||||
|
||||
protected slots:
|
||||
protected slots:
|
||||
void doAddTextStdOut();
|
||||
void doAddTextStdErr();
|
||||
void doProcessStarted();
|
||||
@@ -41,7 +41,7 @@ protected slots:
|
||||
void killTimerElapsed();
|
||||
void errorWizard();
|
||||
|
||||
private:
|
||||
private:
|
||||
QString getProgrammer();
|
||||
Ui::avrOutputDialog *ui;
|
||||
|
||||
|
||||
@@ -193,7 +193,7 @@ void burnDialog::checkFw(QString fileName)
|
||||
ui->FramFWInfo->show();
|
||||
ui->DateField->setText(flash.getDate() + " " + flash.getTime());
|
||||
ui->versionField->setText(flash.getVersion());
|
||||
ui->ModField->setText(flash.getEEprom());
|
||||
ui->ModField->setText(flash.getEEpromId());
|
||||
|
||||
ui->SplashFrame->hide();
|
||||
if (flash.hasSplash()) {
|
||||
@@ -221,6 +221,7 @@ bool burnDialog::checkeEprom(QString fileName)
|
||||
}
|
||||
burnraw=false;
|
||||
int fileType = getFileType(fileName);
|
||||
#if 0
|
||||
if (fileType==FILE_TYPE_XML) {
|
||||
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()));
|
||||
@@ -229,7 +230,9 @@ 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
|
||||
#endif
|
||||
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;
|
||||
@@ -409,7 +412,11 @@ void burnDialog::on_BurnFlashButton_clicked()
|
||||
if (!fileName.isEmpty()) {
|
||||
g.flashDir( QFileInfo(fileName).dir().absolutePath() );
|
||||
if (!ui->useFwImageCB->isChecked()) {
|
||||
QImage image = ui->imageLabel->pixmap()->toImage().scaled(ui->imageLabel->width(), ui->imageLabel->height());
|
||||
const QPixmap * pixmap = ui->imageLabel->pixmap();
|
||||
QImage image;
|
||||
if (pixmap) {
|
||||
image = pixmap->toImage().scaled(ui->imageLabel->width(), ui->imageLabel->height());
|
||||
}
|
||||
if (!image.isNull()) {
|
||||
QString tempDir = QDir::tempPath();
|
||||
QString tempFile;
|
||||
@@ -422,7 +429,8 @@ void burnDialog::on_BurnFlashButton_clicked()
|
||||
if (flash.saveFlash(tempFile) > 0) {
|
||||
hexfileName->clear();
|
||||
hexfileName->append(tempFile);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
hexfileName->clear();
|
||||
QMessageBox::critical(this, tr("Warning"), tr("Cannot save customized firmware"));
|
||||
}
|
||||
@@ -442,6 +450,7 @@ void burnDialog::on_BurnFlashButton_clicked()
|
||||
hexfileName->clear();
|
||||
}
|
||||
}
|
||||
|
||||
if (hexType==EEPROM_FILE_TYPE) {
|
||||
QString calib = g.profile[g.id()].stickPotCalib();
|
||||
QString trainercalib = g.profile[g.id()].trainerCalib();
|
||||
@@ -486,7 +495,8 @@ void burnDialog::on_BurnFlashButton_clicked()
|
||||
radioData.generalSettings.vBatCalib=vBatCalib;
|
||||
radioData.generalSettings.PPM_Multiplier=PPM_Multiplier;
|
||||
patch=true;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
QMessageBox::critical(this, tr("Warning"), tr("Wrong radio calibration data in profile, Settings not patched"));
|
||||
}
|
||||
}
|
||||
@@ -540,7 +550,8 @@ void burnDialog::on_BurnFlashButton_clicked()
|
||||
if (ok)
|
||||
radioData.generalSettings.speakerVolume=byte8u;
|
||||
patch=true;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
QMessageBox::critical(this, tr("Warning"), tr("Wrong radio setting data in profile, Settings not patched"));
|
||||
}
|
||||
|
||||
@@ -567,17 +578,19 @@ void burnDialog::on_BurnFlashButton_clicked()
|
||||
QTextStream outputStream(&file);
|
||||
|
||||
long result = file.write((char*)eeprom, eeprom_size);
|
||||
if(result!=eeprom_size) {
|
||||
if (result!=eeprom_size) {
|
||||
QMessageBox::warning(this, tr("Error"),tr("Error writing file %1:\n%2.").arg(fileName).arg(file.errorString()));
|
||||
hexfileName->clear();
|
||||
}
|
||||
hexfileName->clear();
|
||||
hexfileName->append(fileName);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
hexfileName->clear();
|
||||
hexfileName->append(ui->FWFileName->text());
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
hexfileName->clear();
|
||||
hexfileName->append(ui->FWFileName->text());
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
<file>images/taranison.png</file>
|
||||
<file>images/wizard/ailerons.png</file>
|
||||
<file>images/wizard/airbrakes.png</file>
|
||||
<file>images/wizard/bank.png</file>
|
||||
<file>images/wizard/elevons.png</file>
|
||||
<file>images/wizard/conclusion.png</file>
|
||||
<file>images/wizard/cyclic.png</file>
|
||||
<file>images/wizard/fblheli.png</file>
|
||||
|
||||
@@ -15,7 +15,11 @@
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QTextEdit" name="textEditor"/>
|
||||
<widget class="QTextEdit" name="textEditor">
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
||||
@@ -125,6 +125,8 @@ RawSourceRange RawSource::getRange(bool singleprec)
|
||||
break;
|
||||
case TELEMETRY_SOURCE_A1:
|
||||
case TELEMETRY_SOURCE_A2:
|
||||
case TELEMETRY_SOURCE_A3:
|
||||
case TELEMETRY_SOURCE_A4:
|
||||
if (model) {
|
||||
const FrSkyChannelData & channel = model->frsky.channels[index-TELEMETRY_SOURCE_A1];
|
||||
float ratio = channel.getRatio();
|
||||
@@ -263,7 +265,7 @@ QString RawSource::toString()
|
||||
|
||||
static const QString telemetry[] = {
|
||||
QObject::tr("Batt"), QObject::tr("Time"), QObject::tr("Timer1"), QObject::tr("Timer2"),
|
||||
QObject::tr("SWR"), QObject::tr("RSSI Tx"), QObject::tr("RSSI Rx"), QObject::tr("Rx Batt"),
|
||||
QObject::tr("SWR"), QObject::tr("RSSI Tx"), QObject::tr("RSSI Rx"),
|
||||
QObject::tr("A1"), QObject::tr("A2"), QObject::tr("A3"), QObject::tr("A4"),
|
||||
QObject::tr("Alt"), QObject::tr("Rpm"), QObject::tr("Fuel"), QObject::tr("T1"), QObject::tr("T2"),
|
||||
QObject::tr("Speed"), QObject::tr("Dist"), QObject::tr("GPS Alt"),
|
||||
@@ -852,11 +854,16 @@ GeneralSettings::GeneralSettings()
|
||||
calibSpanPos[i] = 0x180;
|
||||
}
|
||||
|
||||
if (IS_TARANIS(GetEepromInterface()->getBoard())) {
|
||||
BoardEnum board = GetEepromInterface()->getBoard();
|
||||
if (IS_TARANIS(board)) {
|
||||
potsType[0] = 1;
|
||||
potsType[1] = 1;
|
||||
}
|
||||
|
||||
if (IS_ARM(board)) {
|
||||
speakerVolume = 12;
|
||||
}
|
||||
|
||||
templateSetup = g.profile[g.id()].channelOrder();
|
||||
stickMode = g.profile[g.id()].defaultMode();
|
||||
|
||||
@@ -991,7 +998,6 @@ void FrSkyData::clear()
|
||||
memset(this, 0, sizeof(FrSkyData));
|
||||
rssiAlarms[0].clear(2, 45);
|
||||
rssiAlarms[1].clear(3, 42);
|
||||
rxBattAlarms[1] = round(43.0*255/132);
|
||||
varioSource = 2/*VARIO*/;
|
||||
blades = 2;
|
||||
}
|
||||
@@ -1073,11 +1079,11 @@ void ModelData::clear()
|
||||
moduleData[0].protocol=PPM;
|
||||
moduleData[1].protocol=OFF;
|
||||
}
|
||||
for (int i=0; i<C9X_MAX_FLIGHT_MODES; i++)
|
||||
for (int i=0; i<C9X_MAX_FLIGHT_MODES; i++) {
|
||||
phaseData[i].clear();
|
||||
}
|
||||
clearInputs();
|
||||
clearMixes();
|
||||
|
||||
for (int i=0; i<C9X_NUM_CHNOUT; i++)
|
||||
limitData[i].clear();
|
||||
for (int i=0; i<NUM_STICKS; i++)
|
||||
@@ -1088,7 +1094,6 @@ void ModelData::clear()
|
||||
curves[i].clear(5);
|
||||
for (int i=0; i<2; i++)
|
||||
timers[i].clear();
|
||||
|
||||
swashRingData.clear();
|
||||
frsky.clear();
|
||||
}
|
||||
@@ -1164,6 +1169,23 @@ int ModelData::getTrimValue(int phaseIdx, int trimIdx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool ModelData::isGVarLinked(int phaseIdx, int gvarIdx)
|
||||
{
|
||||
return phaseData[phaseIdx].gvars[gvarIdx] > 1024;
|
||||
}
|
||||
|
||||
int ModelData::getGVarValue(int phaseIdx, int gvarIdx)
|
||||
{
|
||||
int idx = phaseData[phaseIdx].gvars[gvarIdx];
|
||||
for (int i=0; idx>1024 && i<C9X_MAX_FLIGHT_MODES; i++) {
|
||||
int nextPhase = idx - 1025;
|
||||
if (nextPhase >= phaseIdx) nextPhase += 1;
|
||||
phaseIdx = nextPhase;
|
||||
idx = phaseData[phaseIdx].gvars[gvarIdx];
|
||||
}
|
||||
return idx;
|
||||
}
|
||||
|
||||
void ModelData::setTrimValue(int phaseIdx, int trimIdx, int value)
|
||||
{
|
||||
for (uint8_t i=0; i<C9X_MAX_FLIGHT_MODES; i++) {
|
||||
@@ -1217,6 +1239,14 @@ ModelData ModelData::removeGlobalVars()
|
||||
return result;
|
||||
}
|
||||
|
||||
int ModelData::getChannelsMax()
|
||||
{
|
||||
if (extendedLimits)
|
||||
return IS_TARANIS(GetCurrentFirmware()->getBoard()) ? 150 : 125;
|
||||
else
|
||||
return 100;
|
||||
}
|
||||
|
||||
QList<EEPROMInterface *> eepromInterfaces;
|
||||
void RegisterEepromInterfaces()
|
||||
{
|
||||
|
||||
@@ -229,7 +229,6 @@ enum TelemetrySource {
|
||||
TELEMETRY_SOURCE_SWR,
|
||||
TELEMETRY_SOURCE_RSSI_TX,
|
||||
TELEMETRY_SOURCE_RSSI_RX,
|
||||
TELEMETRY_SOURCE_RX_BATT,
|
||||
TELEMETRY_SOURCE_A1,
|
||||
TELEMETRY_SOURCE_A2,
|
||||
TELEMETRY_SOURCE_A3,
|
||||
@@ -496,7 +495,6 @@ class GeneralSettings {
|
||||
bool disableBG;
|
||||
unsigned int splashMode;
|
||||
int splashDuration;
|
||||
uint8_t filterInput; // TODO enum
|
||||
unsigned int backlightDelay;
|
||||
bool blightinv;
|
||||
bool stickScroll;
|
||||
@@ -517,6 +515,7 @@ class GeneralSettings {
|
||||
unsigned int gpsFormat;
|
||||
int speakerVolume;
|
||||
unsigned int backlightBright;
|
||||
int switchesDelay;
|
||||
int currentCalib;
|
||||
int temperatureCalib;
|
||||
int temperatureWarn;
|
||||
@@ -635,6 +634,8 @@ enum MltpxValue {
|
||||
MLTPX_REP=2
|
||||
};
|
||||
|
||||
#define MIXDATA_NAME_LEN 10
|
||||
|
||||
class MixData {
|
||||
public:
|
||||
MixData() { clear(); }
|
||||
@@ -653,7 +654,7 @@ class MixData {
|
||||
unsigned int mixWarn; // mixer warning
|
||||
unsigned int phases; // -5=!FP4, 0=normal, 5=FP4
|
||||
int sOffset;
|
||||
char name[10+1];
|
||||
char name[MIXDATA_NAME_LEN+1];
|
||||
|
||||
void clear() { memset(this, 0, sizeof(MixData)); }
|
||||
};
|
||||
@@ -796,15 +797,6 @@ class FrSkyAlarmData {
|
||||
void clear() { memset(this, 0, sizeof(FrSkyAlarmData)); }
|
||||
};
|
||||
|
||||
class FrSkyErAlarmData {
|
||||
public:
|
||||
FrSkyErAlarmData() { clear(); }
|
||||
uint8_t frskyAlarmType ;
|
||||
uint8_t frskyAlarmLimit ;
|
||||
uint8_t frskyAlarmSound ;
|
||||
void clear() { memset(this, 0, sizeof(FrSkyErAlarmData)); }
|
||||
};
|
||||
|
||||
class FrSkyRSSIAlarm {
|
||||
public:
|
||||
FrSkyRSSIAlarm() { clear(0, 50); }
|
||||
@@ -868,7 +860,6 @@ enum TelemetryVarioSources {
|
||||
};
|
||||
|
||||
enum TelemetryVoltsSources {
|
||||
TELEMETRY_VOLTS_SOURCE_RXBATT,
|
||||
TELEMETRY_VOLTS_SOURCE_A1,
|
||||
TELEMETRY_VOLTS_SOURCE_A2,
|
||||
TELEMETRY_VOLTS_SOURCE_A3,
|
||||
@@ -907,7 +898,6 @@ class FrSkyData {
|
||||
bool mAhPersistent;
|
||||
unsigned int storedMah;
|
||||
int fasOffset;
|
||||
unsigned int rxBattAlarms[2];
|
||||
|
||||
void clear();
|
||||
};
|
||||
@@ -990,7 +980,6 @@ class ModelData {
|
||||
|
||||
bool used;
|
||||
char name[12+1];
|
||||
uint8_t modelVoice;
|
||||
TimerData timers[2];
|
||||
bool thrTrim; // Enable Throttle Trim
|
||||
bool thrExpo; // Enable Throttle Expo
|
||||
@@ -1013,8 +1002,7 @@ class ModelData {
|
||||
LogicalSwitchData customSw[C9X_NUM_CSW];
|
||||
FuncSwData funcSw[C9X_MAX_CUSTOM_FUNCTIONS];
|
||||
SwashRingData swashRingData;
|
||||
unsigned int thrTraceSrc;
|
||||
int8_t traineron; // 0 disable trainer, 1 allow trainer
|
||||
unsigned int thrTraceSrc;
|
||||
unsigned int modelId;
|
||||
unsigned int switchWarningStates;
|
||||
unsigned int nSwToWarn;
|
||||
@@ -1024,10 +1012,8 @@ class ModelData {
|
||||
// TODO structure
|
||||
char gvars_names[C9X_MAX_GVARS][6+1];
|
||||
bool gvars_popups[C9X_MAX_GVARS];
|
||||
uint8_t gvsource[5];
|
||||
uint8_t bt_telemetry;
|
||||
uint8_t numVoice;
|
||||
MavlinkData mavlink;
|
||||
unsigned int telemetryProtocol;
|
||||
FrSkyData frsky;
|
||||
|
||||
char bitmap[10+1];
|
||||
@@ -1046,11 +1032,17 @@ class ModelData {
|
||||
|
||||
int getTrimValue(int phaseIdx, int trimIdx);
|
||||
void setTrimValue(int phaseIdx, int trimIdx, int value);
|
||||
|
||||
bool isGVarLinked(int phaseIdx, int gvarIdx);
|
||||
int getGVarValue(int phaseIdx, int gvarIdx);
|
||||
|
||||
ModelData removeGlobalVars();
|
||||
|
||||
void clearMixes();
|
||||
void clearInputs();
|
||||
|
||||
int getChannelsMax();
|
||||
|
||||
protected:
|
||||
void removeGlobalVar(int & var);
|
||||
};
|
||||
@@ -1094,7 +1086,6 @@ enum Capability {
|
||||
SoundMod,
|
||||
SoundPitch,
|
||||
MaxVolume,
|
||||
Beeperlen,
|
||||
EepromBackup,
|
||||
Haptic,
|
||||
HasBeeper,
|
||||
@@ -1105,7 +1096,6 @@ enum Capability {
|
||||
HasMixerNames,
|
||||
HasChNames,
|
||||
HasCvNames,
|
||||
HasFuncRepeat,
|
||||
HasPxxCountry,
|
||||
HasPPMStart,
|
||||
HasGeneralUnits,
|
||||
@@ -1139,7 +1129,6 @@ enum Capability {
|
||||
HasCurrentCalibration,
|
||||
HasVolume,
|
||||
HasBrightness,
|
||||
HasContrast,
|
||||
PerModelTimers,
|
||||
SlowScale,
|
||||
SlowRange,
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include <algorithm>
|
||||
#include "eeprominterface.h"
|
||||
|
||||
EFile::EFile():
|
||||
RleFile::RleFile():
|
||||
eeprom(NULL),
|
||||
eeprom_size(0),
|
||||
eeFs(NULL),
|
||||
@@ -31,7 +31,7 @@ eeFsArm(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
void EFile::EeFsCreate(uint8_t *eeprom, int size, BoardEnum board)
|
||||
void RleFile::EeFsCreate(uint8_t *eeprom, int size, BoardEnum board)
|
||||
{
|
||||
this->eeprom = eeprom;
|
||||
this->eeprom_size = size;
|
||||
@@ -92,7 +92,7 @@ void EFile::EeFsCreate(uint8_t *eeprom, int size, BoardEnum board)
|
||||
}
|
||||
}
|
||||
|
||||
bool EFile::EeFsOpen(uint8_t *eeprom, int size, BoardEnum board)
|
||||
bool RleFile::EeFsOpen(uint8_t *eeprom, int size, BoardEnum board)
|
||||
{
|
||||
this->eeprom = eeprom;
|
||||
this->eeprom_size = size;
|
||||
@@ -137,29 +137,29 @@ bool EFile::EeFsOpen(uint8_t *eeprom, int size, BoardEnum board)
|
||||
}
|
||||
}
|
||||
|
||||
void EFile::eeprom_read_block (void *pointer_ram, unsigned int pointer_eeprom, size_t size)
|
||||
void RleFile::eeprom_read_block (void *pointer_ram, unsigned int pointer_eeprom, size_t size)
|
||||
{
|
||||
memcpy(pointer_ram, &eeprom[pointer_eeprom], size);
|
||||
}
|
||||
|
||||
void EFile::eeprom_write_block(const void *pointer_ram, unsigned int pointer_eeprom, size_t size)
|
||||
void RleFile::eeprom_write_block(const void *pointer_ram, unsigned int pointer_eeprom, size_t size)
|
||||
{
|
||||
memcpy(&eeprom[pointer_eeprom], pointer_ram, size);
|
||||
}
|
||||
|
||||
uint8_t EFile::EeFsRead(unsigned int blk, unsigned int ofs)
|
||||
uint8_t RleFile::EeFsRead(unsigned int blk, unsigned int ofs)
|
||||
{
|
||||
uint8_t ret;
|
||||
eeprom_read_block(&ret, blk*eeFsBlockSize+ofs+eeFsBlocksOffset, 1);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void EFile::EeFsWrite(unsigned int blk, unsigned int ofs, uint8_t val)
|
||||
void RleFile::EeFsWrite(unsigned int blk, unsigned int ofs, uint8_t val)
|
||||
{
|
||||
eeprom_write_block(&val, blk*eeFsBlockSize+ofs+eeFsBlocksOffset, 1);
|
||||
}
|
||||
|
||||
unsigned int EFile::EeFsGetLink(unsigned int blk)
|
||||
unsigned int RleFile::EeFsGetLink(unsigned int blk)
|
||||
{
|
||||
if (IS_ARM(board)) {
|
||||
int16_t ret;
|
||||
@@ -171,7 +171,7 @@ unsigned int EFile::EeFsGetLink(unsigned int blk)
|
||||
}
|
||||
}
|
||||
|
||||
void EFile::EeFsSetLink(unsigned int blk, unsigned int val)
|
||||
void RleFile::EeFsSetLink(unsigned int blk, unsigned int val)
|
||||
{
|
||||
if (IS_ARM(board)) {
|
||||
int16_t s_link = val;
|
||||
@@ -182,17 +182,17 @@ void EFile::EeFsSetLink(unsigned int blk, unsigned int val)
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t EFile::EeFsGetDat(unsigned int blk, unsigned int ofs)
|
||||
uint8_t RleFile::EeFsGetDat(unsigned int blk, unsigned int ofs)
|
||||
{
|
||||
return EeFsRead(blk, ofs+eeFsLinkSize);
|
||||
}
|
||||
|
||||
void EFile::EeFsSetDat(unsigned int blk, unsigned int ofs, const uint8_t *buf, unsigned int len)
|
||||
void RleFile::EeFsSetDat(unsigned int blk, unsigned int ofs, const uint8_t *buf, unsigned int len)
|
||||
{
|
||||
eeprom_write_block(buf, blk*eeFsBlockSize+ofs+eeFsLinkSize+eeFsBlocksOffset, len);
|
||||
}
|
||||
|
||||
unsigned int EFile::EeFsGetFree()
|
||||
unsigned int RleFile::EeFsGetFree()
|
||||
{
|
||||
unsigned int ret = 0;
|
||||
unsigned int i;
|
||||
@@ -211,7 +211,7 @@ unsigned int EFile::EeFsGetFree()
|
||||
/*
|
||||
* free one or more blocks
|
||||
*/
|
||||
void EFile::EeFsFree(unsigned int blk)
|
||||
void RleFile::EeFsFree(unsigned int blk)
|
||||
{
|
||||
unsigned int i = blk;
|
||||
while (EeFsGetLink(i)) i = EeFsGetLink(i);
|
||||
@@ -228,7 +228,7 @@ void EFile::EeFsFree(unsigned int blk)
|
||||
/*
|
||||
* alloc one block from freelist
|
||||
*/
|
||||
unsigned int EFile::EeFsAlloc()
|
||||
unsigned int RleFile::EeFsAlloc()
|
||||
{
|
||||
unsigned int ret = (IS_ARM(board) ? eeFsArm->freeList : eeFs->freeList);
|
||||
if (ret) {
|
||||
@@ -241,12 +241,12 @@ unsigned int EFile::EeFsAlloc()
|
||||
return ret;
|
||||
}
|
||||
|
||||
unsigned int EFile::size(unsigned int id)
|
||||
unsigned int RleFile::size(unsigned int id)
|
||||
{
|
||||
return IS_ARM(board) ? eeFsArm->files[id].size : eeFs->files[id].size;
|
||||
}
|
||||
|
||||
unsigned int EFile::openRd(unsigned int i_fileId)
|
||||
unsigned int RleFile::openRd(unsigned int i_fileId)
|
||||
{
|
||||
if (IS_SKY9X(board)) {
|
||||
m_fileId = get_current_block_number(i_fileId * 2, &m_size);
|
||||
@@ -268,7 +268,7 @@ unsigned int EFile::openRd(unsigned int i_fileId)
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int EFile::read(uint8_t *buf, unsigned int i_len)
|
||||
unsigned int RleFile::read(uint8_t *buf, unsigned int i_len)
|
||||
{
|
||||
unsigned int len = IS_ARM(board) ? eeFsArm->files[m_fileId].size : eeFs->files[m_fileId].size;
|
||||
len -= m_pos;
|
||||
@@ -288,7 +288,7 @@ unsigned int EFile::read(uint8_t *buf, unsigned int i_len)
|
||||
}
|
||||
|
||||
// G: Read runlength (RLE) compressed bytes into buf.
|
||||
unsigned int EFile::readRlc12(uint8_t *buf, unsigned int i_len, bool rlc2)
|
||||
unsigned int RleFile::readRlc12(uint8_t *buf, unsigned int i_len, bool rlc2)
|
||||
{
|
||||
memset(buf, 0, i_len);
|
||||
|
||||
@@ -344,12 +344,12 @@ unsigned int EFile::readRlc12(uint8_t *buf, unsigned int i_len, bool rlc2)
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int EFile::write1(uint8_t b)
|
||||
unsigned int RleFile::write1(uint8_t b)
|
||||
{
|
||||
return write(&b, 1);
|
||||
}
|
||||
|
||||
unsigned int EFile::write(const uint8_t *buf, unsigned int i_len)
|
||||
unsigned int RleFile::write(const uint8_t *buf, unsigned int i_len)
|
||||
{
|
||||
unsigned int len = i_len;
|
||||
if (!m_currBlk && m_pos==0)
|
||||
@@ -386,7 +386,7 @@ unsigned int EFile::write(const uint8_t *buf, unsigned int i_len)
|
||||
return i_len - len;
|
||||
}
|
||||
|
||||
void EFile::create(unsigned int i_fileId, unsigned int typ)
|
||||
void RleFile::create(unsigned int i_fileId, unsigned int typ)
|
||||
{
|
||||
openRd(i_fileId); //internal use
|
||||
if (IS_ARM(board)) {
|
||||
@@ -399,7 +399,7 @@ void EFile::create(unsigned int i_fileId, unsigned int typ)
|
||||
}
|
||||
}
|
||||
|
||||
void EFile::closeTrunc()
|
||||
void RleFile::closeTrunc()
|
||||
{
|
||||
unsigned int fri=0;
|
||||
if (IS_ARM(board))
|
||||
@@ -410,7 +410,7 @@ void EFile::closeTrunc()
|
||||
if(fri) EeFsFree( fri ); //chain in
|
||||
}
|
||||
|
||||
unsigned int EFile::writeRlc1(unsigned int i_fileId, unsigned int typ, const uint8_t *buf, unsigned int i_len)
|
||||
unsigned int RleFile::writeRlc1(unsigned int i_fileId, unsigned int typ, const uint8_t *buf, unsigned int i_len)
|
||||
{
|
||||
create(i_fileId, typ);
|
||||
bool state0 = true;
|
||||
@@ -456,7 +456,7 @@ unsigned int EFile::writeRlc1(unsigned int i_fileId, unsigned int typ, const uin
|
||||
/*
|
||||
* Write runlength (RLE) compressed bytes
|
||||
*/
|
||||
unsigned int EFile::writeRlc2(unsigned int i_fileId, unsigned int typ, const uint8_t *buf, unsigned int i_len)
|
||||
unsigned int RleFile::writeRlc2(unsigned int i_fileId, unsigned int typ, const uint8_t *buf, unsigned int i_len)
|
||||
{
|
||||
if (IS_SKY9X(board)) {
|
||||
openRd(i_fileId);
|
||||
@@ -520,7 +520,7 @@ unsigned int EFile::writeRlc2(unsigned int i_fileId, unsigned int typ, const uin
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t EFile::byte_checksum( uint8_t *p, unsigned int size )
|
||||
uint8_t RleFile::byte_checksum( uint8_t *p, unsigned int size )
|
||||
{
|
||||
uint32_t csum ;
|
||||
|
||||
@@ -533,7 +533,7 @@ uint8_t EFile::byte_checksum( uint8_t *p, unsigned int size )
|
||||
return csum ;
|
||||
}
|
||||
|
||||
uint32_t EFile::ee32_check_header( struct t_eeprom_header *hptr )
|
||||
uint32_t RleFile::ee32_check_header( struct t_eeprom_header *hptr )
|
||||
{
|
||||
uint8_t csum ;
|
||||
|
||||
@@ -549,7 +549,7 @@ uint32_t EFile::ee32_check_header( struct t_eeprom_header *hptr )
|
||||
// to see which is the most recent, the block_no of the most recent
|
||||
// is returned, with the corresponding data size if required
|
||||
// and the sequence number if required
|
||||
uint32_t EFile::get_current_block_number( uint32_t block_no, uint16_t *p_size)
|
||||
uint32_t RleFile::get_current_block_number( uint32_t block_no, uint16_t *p_size)
|
||||
{
|
||||
struct t_eeprom_header b0 ;
|
||||
struct t_eeprom_header b1 ;
|
||||
|
||||
@@ -61,7 +61,7 @@ struct t_eeprom_header
|
||||
uint8_t hcsum ;
|
||||
};
|
||||
|
||||
class EFile
|
||||
class RleFile
|
||||
{
|
||||
uint8_t m_fileId; //index of file in directory = filename
|
||||
unsigned int m_pos; //over all filepos
|
||||
@@ -101,7 +101,7 @@ class EFile
|
||||
|
||||
public:
|
||||
|
||||
EFile();
|
||||
RleFile();
|
||||
|
||||
void EeFsCreate(uint8_t *eeprom, int size, BoardEnum board);
|
||||
|
||||
|
||||
@@ -356,7 +356,6 @@ t_Er9xModelData::operator ModelData ()
|
||||
{
|
||||
ModelData c9x;
|
||||
c9x.used = true;
|
||||
c9x.modelVoice = modelVoice;
|
||||
getEEPROMString(c9x.name, name, sizeof(name));
|
||||
c9x.timers[0].mode = getEr9xTimerMode(tmrMode);
|
||||
c9x.timers[0].dir = tmrDir;
|
||||
@@ -375,8 +374,6 @@ t_Er9xModelData::operator ModelData ()
|
||||
c9x.moduleData[0].protocol = PPM;
|
||||
break;
|
||||
}
|
||||
c9x.traineron= traineron;
|
||||
// c9x.t2throttle = t2throttle;
|
||||
c9x.moduleData[0].ppmFrameLength=ppmFrameLength;
|
||||
c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH;
|
||||
c9x.thrTrim = thrTrim;
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
Er9xInterface::Er9xInterface():
|
||||
EEPROMInterface(BOARD_STOCK),
|
||||
efile(new EFile())
|
||||
efile(new RleFile())
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
#include <QtXml>
|
||||
#include "eeprominterface.h"
|
||||
#include "er9xeeprom.h"
|
||||
class EFile;
|
||||
class RleFile;
|
||||
|
||||
class Er9xInterface : public EEPROMInterface
|
||||
{
|
||||
@@ -50,7 +50,7 @@ class Er9xInterface : public EEPROMInterface
|
||||
|
||||
protected:
|
||||
|
||||
EFile *efile;
|
||||
RleFile *efile;
|
||||
|
||||
private:
|
||||
void appendTextElement(QDomDocument * qdoc, QDomElement * pe, QString name, QString value);
|
||||
|
||||
@@ -125,7 +125,6 @@ Ersky9xGeneral::operator GeneralSettings ()
|
||||
result.splashMode = disableSplashScreen;
|
||||
result.disablePotScroll=(disablePotScroll==1);
|
||||
result.disableBG=(disableBG==1);
|
||||
result.filterInput = filterInput;
|
||||
result.templateSetup = templateSetup;
|
||||
result.PPM_Multiplier = PPM_Multiplier;
|
||||
getEEPROMString(result.ownerName, ownerName, sizeof(ownerName));
|
||||
@@ -507,8 +506,6 @@ t_Ersky9xModelData_v10::operator ModelData ()
|
||||
c9x.moduleData[0].protocol = PPM;
|
||||
break;
|
||||
}
|
||||
c9x.traineron= traineron;
|
||||
// c9x.t2throttle = t2throttle;
|
||||
c9x.moduleData[0].ppmFrameLength=ppmFrameLength;
|
||||
c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH;
|
||||
c9x.thrTrim = thrTrim;
|
||||
@@ -628,8 +625,6 @@ t_Ersky9xModelData_v11::operator ModelData ()
|
||||
c9x.moduleData[0].protocol = PPM;
|
||||
break;
|
||||
}
|
||||
c9x.traineron= traineron;
|
||||
// c9x.t2throttle = t2throttle;
|
||||
c9x.moduleData[0].ppmFrameLength=ppmFrameLength;
|
||||
c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH;
|
||||
c9x.thrTrim = thrTrim;
|
||||
@@ -732,7 +727,7 @@ t_Ersky9xModelData_v11::operator ModelData ()
|
||||
// }
|
||||
for (int i=0; i<5;i++) {
|
||||
c9x.phaseData[0].gvars[i]=gvars[i].gvar;
|
||||
c9x.gvsource[i]=gvars[i].gvsource;
|
||||
// c9x.gvsource[i]=gvars[i].gvsource;
|
||||
}
|
||||
return c9x;
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
Ersky9xInterface::Ersky9xInterface():
|
||||
EEPROMInterface(BOARD_SKY9X),
|
||||
efile(new EFile())
|
||||
efile(new RleFile())
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
#include <QtXml>
|
||||
#include "eeprominterface.h"
|
||||
#include "ersky9xeeprom.h"
|
||||
class EFile;
|
||||
class RleFile;
|
||||
|
||||
class Ersky9xInterface : public EEPROMInterface
|
||||
{
|
||||
@@ -50,7 +50,7 @@ class Ersky9xInterface : public EEPROMInterface
|
||||
|
||||
protected:
|
||||
|
||||
EFile *efile;
|
||||
RleFile *efile;
|
||||
|
||||
private:
|
||||
void appendTextElement(QDomDocument * qdoc, QDomElement * pe, QString name, QString value);
|
||||
|
||||
@@ -108,7 +108,6 @@ Gruvin9xGeneral_v103::operator GeneralSettings ()
|
||||
result.flashBeep = flashBeep;
|
||||
result.splashMode = disableSplashScreen;
|
||||
result.enableTelemetryAlarm = enableTelemetryAlarm;
|
||||
result.filterInput = filterInput;
|
||||
result.templateSetup = templateSetup;
|
||||
result.PPM_Multiplier = PPM_Multiplier;
|
||||
// TODO frskyRssiAlarms[2];
|
||||
@@ -153,7 +152,6 @@ Gruvin9xGeneral_v104::operator GeneralSettings ()
|
||||
result.flashBeep = flashBeep;
|
||||
result.splashMode = disableSplashScreen;
|
||||
result.enableTelemetryAlarm = enableTelemetryAlarm;
|
||||
result.filterInput = filterInput;
|
||||
result.templateSetup = templateSetup;
|
||||
result.PPM_Multiplier = PPM_Multiplier;
|
||||
// TODO frskyRssiAlarms[2];
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
Gruvin9xInterface::Gruvin9xInterface(BoardEnum board):
|
||||
EEPROMInterface(board),
|
||||
efile(new EFile())
|
||||
efile(new RleFile())
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
#include "eeprominterface.h"
|
||||
|
||||
class EFile;
|
||||
class RleFile;
|
||||
|
||||
class Gruvin9xInterface : public EEPROMInterface
|
||||
{
|
||||
@@ -57,7 +57,7 @@ class Gruvin9xInterface : public EEPROMInterface
|
||||
template <class T>
|
||||
bool loadGeneral(GeneralSettings &settings, int version=2);
|
||||
|
||||
EFile *efile;
|
||||
RleFile *efile;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -69,6 +69,7 @@ namespace Open9xGruvin9x {
|
||||
#include "radio/src/pulses/pulses_avr.cpp"
|
||||
#include "radio/src/stamp.cpp"
|
||||
#include "radio/src/maths.cpp"
|
||||
#include "radio/src/vario.cpp"
|
||||
#include "radio/src/gui/menus.cpp"
|
||||
#include "radio/src/gui/menu_model.cpp"
|
||||
#include "radio/src/gui/menu_general.cpp"
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
|
||||
#include <exception>
|
||||
|
||||
namespace Open9xM128 {
|
||||
namespace OpenTxM128 {
|
||||
#include "radio/src/targets/stock/board_stock.cpp"
|
||||
#include "radio/src/targets/common_avr/telemetry_driver.cpp"
|
||||
#include "radio/src/eeprom_common.cpp"
|
||||
@@ -68,6 +68,7 @@ namespace Open9xM128 {
|
||||
#include "radio/src/pulses/pulses_avr.cpp"
|
||||
#include "radio/src/stamp.cpp"
|
||||
#include "radio/src/maths.cpp"
|
||||
#include "radio/src/vario.cpp"
|
||||
#include "radio/src/gui/menus.cpp"
|
||||
#include "radio/src/gui/menu_model.cpp"
|
||||
#include "radio/src/gui/menu_general.cpp"
|
||||
@@ -109,70 +110,70 @@ uint8_t getStickMode()
|
||||
|
||||
}
|
||||
|
||||
using namespace Open9xM128;
|
||||
using namespace OpenTxM128;
|
||||
|
||||
Open9xM128Simulator::Open9xM128Simulator()
|
||||
OpenTxM128Simulator::OpenTxM128Simulator()
|
||||
{
|
||||
}
|
||||
|
||||
bool Open9xM128Simulator::timer10ms()
|
||||
bool OpenTxM128Simulator::timer10ms()
|
||||
{
|
||||
#define TIMER10MS_IMPORT
|
||||
#include "simulatorimport.h"
|
||||
}
|
||||
|
||||
uint8_t * Open9xM128Simulator::getLcd()
|
||||
uint8_t * OpenTxM128Simulator::getLcd()
|
||||
{
|
||||
#define GETLCD_IMPORT
|
||||
#include "simulatorimport.h"
|
||||
}
|
||||
|
||||
bool Open9xM128Simulator::lcdChanged(bool & lightEnable)
|
||||
bool OpenTxM128Simulator::lcdChanged(bool & lightEnable)
|
||||
{
|
||||
#define LCDCHANGED_IMPORT
|
||||
#include "simulatorimport.h"
|
||||
}
|
||||
|
||||
void Open9xM128Simulator::start(QByteArray & eeprom, bool tests)
|
||||
void OpenTxM128Simulator::start(QByteArray & eeprom, bool tests)
|
||||
{
|
||||
memcpy(Open9xM128::eeprom, eeprom.data(), std::min<int>(sizeof(Open9xM128::eeprom), eeprom.size()));
|
||||
memcpy(OpenTxM128::eeprom, eeprom.data(), std::min<int>(sizeof(OpenTxM128::eeprom), eeprom.size()));
|
||||
StartEepromThread(NULL);
|
||||
StartMainThread(tests);
|
||||
}
|
||||
|
||||
void Open9xM128Simulator::start(const char * filename, bool tests)
|
||||
void OpenTxM128Simulator::start(const char * filename, bool tests)
|
||||
{
|
||||
StartEepromThread(filename);
|
||||
StartMainThread(tests);
|
||||
}
|
||||
|
||||
void Open9xM128Simulator::stop()
|
||||
void OpenTxM128Simulator::stop()
|
||||
{
|
||||
StopMainThread();
|
||||
StopEepromThread();
|
||||
}
|
||||
|
||||
void Open9xM128Simulator::getValues(TxOutputs &outputs)
|
||||
void OpenTxM128Simulator::getValues(TxOutputs &outputs)
|
||||
{
|
||||
#define GETVALUES_IMPORT
|
||||
#define g_chans512 channelOutputs
|
||||
#include "simulatorimport.h"
|
||||
}
|
||||
|
||||
void Open9xM128Simulator::setValues(TxInputs &inputs)
|
||||
void OpenTxM128Simulator::setValues(TxInputs &inputs)
|
||||
{
|
||||
#define SETVALUES_IMPORT
|
||||
#include "simulatorimport.h"
|
||||
}
|
||||
|
||||
void Open9xM128Simulator::setTrim(unsigned int idx, int value)
|
||||
void OpenTxM128Simulator::setTrim(unsigned int idx, int value)
|
||||
{
|
||||
idx = Open9xM128::modn12x3[4*getStickMode() + idx];
|
||||
idx = OpenTxM128::modn12x3[4*getStickMode() + idx];
|
||||
uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx);
|
||||
setTrimValue(phase, idx, value);
|
||||
}
|
||||
|
||||
void Open9xM128Simulator::getTrims(Trims & trims)
|
||||
void OpenTxM128Simulator::getTrims(Trims & trims)
|
||||
{
|
||||
uint8_t phase = getFlightPhase();
|
||||
trims.extended = hasExtendedTrims();
|
||||
@@ -181,30 +182,30 @@ void Open9xM128Simulator::getTrims(Trims & trims)
|
||||
}
|
||||
|
||||
for (int i=0; i<2; i++) {
|
||||
uint8_t idx = Open9xM128::modn12x3[4*getStickMode() + i];
|
||||
uint8_t idx = OpenTxM128::modn12x3[4*getStickMode() + i];
|
||||
int16_t tmp = trims.values[i];
|
||||
trims.values[i] = trims.values[idx];
|
||||
trims.values[idx] = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
void Open9xM128Simulator::wheelEvent(uint8_t steps)
|
||||
void OpenTxM128Simulator::wheelEvent(uint8_t steps)
|
||||
{
|
||||
}
|
||||
|
||||
unsigned int Open9xM128Simulator::getPhase()
|
||||
unsigned int OpenTxM128Simulator::getPhase()
|
||||
{
|
||||
return getFlightPhase();
|
||||
}
|
||||
|
||||
const char * Open9xM128Simulator::getPhaseName(unsigned int phase)
|
||||
const char * OpenTxM128Simulator::getPhaseName(unsigned int phase)
|
||||
{
|
||||
static char buff[sizeof(g_model.phaseData[0].name)+1];
|
||||
zchar2str(buff, g_model.phaseData[phase].name, sizeof(g_model.phaseData[0].name));
|
||||
return buff;
|
||||
}
|
||||
|
||||
const char * Open9xM128Simulator::getError()
|
||||
const char * OpenTxM128Simulator::getError()
|
||||
{
|
||||
#define GETERROR_IMPORT
|
||||
#include "simulatorimport.h"
|
||||
|
||||
@@ -14,19 +14,19 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef open9xM128_simulator_h
|
||||
#define open9xM128_simulator_h
|
||||
#ifndef OpenTxM128_simulator_h
|
||||
#define OpenTxM128_simulator_h
|
||||
|
||||
#include "simulatorinterface.h"
|
||||
|
||||
class RadioData;
|
||||
class OpenTxEepromInterface;
|
||||
|
||||
class Open9xM128Simulator : public SimulatorInterface {
|
||||
class OpenTxM128Simulator : public SimulatorInterface {
|
||||
|
||||
public:
|
||||
|
||||
Open9xM128Simulator();
|
||||
OpenTxM128Simulator();
|
||||
|
||||
virtual void start(QByteArray & eeprom, bool tests=true);
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include "opentxsimulator.h"
|
||||
#include "opentxM64simulator.h"
|
||||
#include "opentxinterface.h"
|
||||
#include "opentxeeprom.h"
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
#include <exception>
|
||||
|
||||
namespace Open9x {
|
||||
namespace OpenTxM64 {
|
||||
#include "radio/src/targets/stock/board_stock.cpp"
|
||||
#include "radio/src/targets/common_avr/telemetry_driver.cpp"
|
||||
#include "radio/src/eeprom_common.cpp"
|
||||
@@ -74,6 +74,7 @@ namespace Open9x {
|
||||
#include "radio/src/pulses/pulses_avr.cpp"
|
||||
#include "radio/src/stamp.cpp"
|
||||
#include "radio/src/maths.cpp"
|
||||
#include "radio/src/vario.cpp"
|
||||
#include "radio/src/gui/menus.cpp"
|
||||
#include "radio/src/gui/menu_model.cpp"
|
||||
#include "radio/src/gui/menu_general.cpp"
|
||||
@@ -115,52 +116,52 @@ uint8_t getStickMode()
|
||||
|
||||
}
|
||||
|
||||
using namespace Open9x;
|
||||
using namespace OpenTxM64;
|
||||
|
||||
Open9xSimulator::Open9xSimulator()
|
||||
OpenTxM64Simulator::OpenTxM64Simulator()
|
||||
{
|
||||
#define INIT_IMPORT
|
||||
#include "simulatorimport.h"
|
||||
}
|
||||
|
||||
bool Open9xSimulator::timer10ms()
|
||||
bool OpenTxM64Simulator::timer10ms()
|
||||
{
|
||||
#define TIMER10MS_IMPORT
|
||||
#include "simulatorimport.h"
|
||||
}
|
||||
|
||||
uint8_t * Open9xSimulator::getLcd()
|
||||
uint8_t * OpenTxM64Simulator::getLcd()
|
||||
{
|
||||
#define GETLCD_IMPORT
|
||||
#include "simulatorimport.h"
|
||||
}
|
||||
|
||||
bool Open9xSimulator::lcdChanged(bool & lightEnable)
|
||||
bool OpenTxM64Simulator::lcdChanged(bool & lightEnable)
|
||||
{
|
||||
#define LCDCHANGED_IMPORT
|
||||
#include "simulatorimport.h"
|
||||
}
|
||||
|
||||
void Open9xSimulator::start(QByteArray & eeprom, bool tests)
|
||||
void OpenTxM64Simulator::start(QByteArray & eeprom, bool tests)
|
||||
{
|
||||
memcpy(&Open9x::eeprom[0], eeprom.data(), 2048);
|
||||
memcpy(&OpenTxM64::eeprom[0], eeprom.data(), 2048);
|
||||
StartEepromThread(NULL);
|
||||
StartMainThread(tests);
|
||||
}
|
||||
|
||||
void Open9xSimulator::start(const char * filename, bool tests)
|
||||
void OpenTxM64Simulator::start(const char * filename, bool tests)
|
||||
{
|
||||
StartEepromThread(filename);
|
||||
StartMainThread(tests);
|
||||
}
|
||||
|
||||
void Open9xSimulator::stop()
|
||||
void OpenTxM64Simulator::stop()
|
||||
{
|
||||
StopMainThread();
|
||||
StopEepromThread();
|
||||
}
|
||||
|
||||
void Open9xSimulator::getValues(TxOutputs &outputs)
|
||||
void OpenTxM64Simulator::getValues(TxOutputs &outputs)
|
||||
{
|
||||
#define GETVALUES_IMPORT
|
||||
#define g_chans512 channelOutputs
|
||||
@@ -169,20 +170,20 @@ void Open9xSimulator::getValues(TxOutputs &outputs)
|
||||
g_beepCnt = 0;
|
||||
}
|
||||
|
||||
void Open9xSimulator::setValues(TxInputs &inputs)
|
||||
void OpenTxM64Simulator::setValues(TxInputs &inputs)
|
||||
{
|
||||
#define SETVALUES_IMPORT
|
||||
#include "simulatorimport.h"
|
||||
}
|
||||
|
||||
void Open9xSimulator::setTrim(unsigned int idx, int value)
|
||||
void OpenTxM64Simulator::setTrim(unsigned int idx, int value)
|
||||
{
|
||||
idx = Open9x::modn12x3[4*getStickMode() + idx];
|
||||
idx = OpenTxM64::modn12x3[4*getStickMode() + idx];
|
||||
uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx);
|
||||
setTrimValue(phase, idx, value);
|
||||
}
|
||||
|
||||
void Open9xSimulator::getTrims(Trims & trims)
|
||||
void OpenTxM64Simulator::getTrims(Trims & trims)
|
||||
{
|
||||
uint8_t phase = getFlightPhase();
|
||||
trims.extended = hasExtendedTrims();
|
||||
@@ -191,26 +192,26 @@ void Open9xSimulator::getTrims(Trims & trims)
|
||||
}
|
||||
|
||||
for (int i=0; i<2; i++) {
|
||||
uint8_t idx = Open9x::modn12x3[4*getStickMode() + i];
|
||||
uint8_t idx = OpenTxM64::modn12x3[4*getStickMode() + i];
|
||||
int16_t tmp = trims.values[i];
|
||||
trims.values[i] = trims.values[idx];
|
||||
trims.values[idx] = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int Open9xSimulator::getPhase()
|
||||
unsigned int OpenTxM64Simulator::getPhase()
|
||||
{
|
||||
return getFlightPhase();
|
||||
}
|
||||
|
||||
const char * Open9xSimulator::getPhaseName(unsigned int phase)
|
||||
const char * OpenTxM64Simulator::getPhaseName(unsigned int phase)
|
||||
{
|
||||
static char buff[sizeof(g_model.phaseData[0].name)+1];
|
||||
zchar2str(buff, g_model.phaseData[phase].name, sizeof(g_model.phaseData[0].name));
|
||||
return buff;
|
||||
}
|
||||
|
||||
const char * Open9xSimulator::getError()
|
||||
const char * OpenTxM64Simulator::getError()
|
||||
{
|
||||
#define GETERROR_IMPORT
|
||||
#include "simulatorimport.h"
|
||||
@@ -21,11 +21,11 @@
|
||||
|
||||
class OpenTxEepromInterface;
|
||||
|
||||
class Open9xSimulator : public SimulatorInterface {
|
||||
class OpenTxM64Simulator : public SimulatorInterface {
|
||||
|
||||
public:
|
||||
|
||||
Open9xSimulator();
|
||||
OpenTxM64Simulator();
|
||||
|
||||
virtual void start(QByteArray & eeprom, bool tests=true);
|
||||
|
||||
@@ -83,6 +83,7 @@ namespace Open9xSky9x {
|
||||
#include "radio/src/pulses/pulses_arm.cpp"
|
||||
#include "radio/src/stamp.cpp"
|
||||
#include "radio/src/maths.cpp"
|
||||
#include "radio/src/vario.cpp"
|
||||
#include "radio/src/gui/menus.cpp"
|
||||
#include "radio/src/gui/menu_model.cpp"
|
||||
#include "radio/src/gui/menu_general.cpp"
|
||||
|
||||
@@ -89,6 +89,7 @@ inline int geteepromsize() {
|
||||
#include "radio/src/pulses/pulses_arm.cpp"
|
||||
#include "radio/src/stamp.cpp"
|
||||
#include "radio/src/maths.cpp"
|
||||
#include "radio/src/vario.cpp"
|
||||
#include "radio/src/gui/menus.cpp"
|
||||
#include "radio/src/gui/menu_model.cpp"
|
||||
#include "radio/src/gui/menu_general.cpp"
|
||||
|
||||
@@ -260,15 +260,17 @@ class SourcesConversionTable: public ConversionTable {
|
||||
|
||||
for (int i=0; i<TELEMETRY_SOURCE_ACC; i++) {
|
||||
if (version < 216) {
|
||||
if (i==TELEMETRY_SOURCE_TX_TIME || i==TELEMETRY_SOURCE_SWR || i==TELEMETRY_SOURCE_RX_BATT || i==TELEMETRY_SOURCE_A3 || i==TELEMETRY_SOURCE_A4 || i==TELEMETRY_SOURCE_ASPD || i==TELEMETRY_SOURCE_DTE || i==TELEMETRY_SOURCE_CELL_MIN || i==TELEMETRY_SOURCE_CELLS_MIN || i==TELEMETRY_SOURCE_VFAS_MIN)
|
||||
if (i==TELEMETRY_SOURCE_TX_TIME || i==TELEMETRY_SOURCE_SWR || i==TELEMETRY_SOURCE_A3 || i==TELEMETRY_SOURCE_A4 || i==TELEMETRY_SOURCE_ASPD || i==TELEMETRY_SOURCE_DTE || i==TELEMETRY_SOURCE_CELL_MIN || i==TELEMETRY_SOURCE_CELLS_MIN || i==TELEMETRY_SOURCE_VFAS_MIN)
|
||||
continue;
|
||||
}
|
||||
if (!IS_ARM(board)) {
|
||||
if (i==TELEMETRY_SOURCE_TX_TIME || i==TELEMETRY_SOURCE_SWR|| i==TELEMETRY_SOURCE_RX_BATT || i==TELEMETRY_SOURCE_A3 || i==TELEMETRY_SOURCE_A4 || i==TELEMETRY_SOURCE_A3_MIN || i==TELEMETRY_SOURCE_A4_MIN)
|
||||
if (i==TELEMETRY_SOURCE_TX_TIME || i==TELEMETRY_SOURCE_SWR || i==TELEMETRY_SOURCE_A3 || i==TELEMETRY_SOURCE_A4 || i==TELEMETRY_SOURCE_A3_MIN || i==TELEMETRY_SOURCE_A4_MIN)
|
||||
continue;
|
||||
}
|
||||
addConversion(RawSource(SOURCE_TYPE_TELEMETRY, i), val++);
|
||||
if (version >= 216 && IS_ARM(board)) {
|
||||
if (i==TELEMETRY_SOURCE_RSSI_RX)
|
||||
val += 1;
|
||||
if (i==TELEMETRY_SOURCE_TX_TIME)
|
||||
val += 5;
|
||||
if (i==TELEMETRY_SOURCE_DTE)
|
||||
@@ -414,7 +416,7 @@ class TelemetrySourcesConversionTable: public ConversionTable {
|
||||
addConversion(1+TELEMETRY_SOURCE_RSSI_TX, val++);
|
||||
addConversion(1+TELEMETRY_SOURCE_RSSI_RX, val++);
|
||||
if (IS_ARM(board) && version >= 216)
|
||||
addConversion(1+TELEMETRY_SOURCE_RX_BATT, val++);
|
||||
addConversion(1+TELEMETRY_SOURCE_RESERVE, val++);
|
||||
addConversion(1+TELEMETRY_SOURCE_A1, val++);
|
||||
addConversion(1+TELEMETRY_SOURCE_A2, val++);
|
||||
if (IS_ARM(board) && version >= 216) {
|
||||
@@ -1158,6 +1160,9 @@ class InputField: public TransformedField {
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (expo.mode) {
|
||||
expo.srcRaw = RawSource(SOURCE_TYPE_STICK, expo.chn);
|
||||
}
|
||||
|
||||
expo.weight = smallGvarToC9x(_weight);
|
||||
|
||||
@@ -1247,13 +1252,20 @@ class CurvesField: public TransformedField {
|
||||
|
||||
for (int i=0; i<maxCurves; i++) {
|
||||
CurveData *curve = &curves[i];
|
||||
int size = (curve->type == CurveData::CURVE_TYPE_CUSTOM ? curve->count * 2 - 2 : curve->count);
|
||||
if (offset+size > maxPoints) {
|
||||
EEPROMWarnings += ::QObject::tr("OpenTX only accepts %1 points in all curves").arg(maxPoints) + "\n";
|
||||
break;
|
||||
if (IS_TARANIS(board) && version >= 216) {
|
||||
offset += (curve->type == CurveData::CURVE_TYPE_CUSTOM ? curve->count * 2 - 2 : curve->count);
|
||||
if (offset > maxPoints) {
|
||||
EEPROMWarnings += ::QObject::tr("OpenTX only accepts %1 points in all curves").arg(maxPoints) + "\n";
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!IS_TARANIS(board) || version < 216) {
|
||||
_curves[i] = offset - (5*i);
|
||||
else {
|
||||
offset += (curve->type == CurveData::CURVE_TYPE_CUSTOM ? curve->count * 2 - 2 : curve->count) - 5;
|
||||
if (offset > maxPoints - 5 * maxCurves) {
|
||||
EEPROMWarnings += ::QObject::tr("OpenTx only accepts %1 points in all curves").arg(maxPoints) + "\n";
|
||||
break;
|
||||
}
|
||||
_curves[i] = offset;
|
||||
}
|
||||
for (int j=0; j<curve->count; j++) {
|
||||
*cur++ = curve->points[j].y;
|
||||
@@ -1263,7 +1275,6 @@ class CurvesField: public TransformedField {
|
||||
*cur++ = curve->points[j].x;
|
||||
}
|
||||
}
|
||||
offset += size;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1783,7 +1794,7 @@ class ArmCustomFunctionField: public TransformedField {
|
||||
{
|
||||
_mode = 0;
|
||||
|
||||
if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue)
|
||||
if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue || fn.func == FuncPlayHaptic)
|
||||
_active = (version >= 216 ? fn.repeatParam : (fn.repeatParam/5));
|
||||
else
|
||||
_active = (fn.enabled ? 1 : 0);
|
||||
@@ -1855,7 +1866,7 @@ class ArmCustomFunctionField: public TransformedField {
|
||||
|
||||
virtual void afterImport()
|
||||
{
|
||||
if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue)
|
||||
if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue || fn.func == FuncPlayHaptic)
|
||||
fn.repeatParam = (version >= 216 ? _active : (_active*5));
|
||||
else
|
||||
fn.enabled = (_active & 0x01);
|
||||
@@ -2202,8 +2213,6 @@ class TelemetryVoltsSourceConversionTable: public ConversionTable
|
||||
TelemetryVoltsSourceConversionTable(BoardEnum board, unsigned int version)
|
||||
{
|
||||
int val = 0;
|
||||
if (IS_ARM(board) && version >= 216)
|
||||
addConversion(TELEMETRY_VOLTS_SOURCE_RXBATT, val++);
|
||||
addConversion(TELEMETRY_VOLTS_SOURCE_A1, val++);
|
||||
addConversion(TELEMETRY_VOLTS_SOURCE_A2, val++);
|
||||
if (IS_ARM(board) && version >= 216) {
|
||||
@@ -2412,8 +2421,8 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
}
|
||||
}
|
||||
|
||||
if (IS_TARANIS(board))
|
||||
internalField.Append(new SpareBitsField<3>());
|
||||
if (IS_ARM(board))
|
||||
internalField.Append(new UnsignedField<3>(modelData.telemetryProtocol));
|
||||
else
|
||||
internalField.Append(new ConversionField< SignedField<3> >(modelData.moduleData[0].protocol, &protocolsConversionTable, "Protocol", ::QObject::tr("OpenTX doesn't accept this protocol")));
|
||||
|
||||
@@ -2569,8 +2578,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
|
||||
}
|
||||
|
||||
if (IS_ARM(board) && version >= 216) {
|
||||
internalField.Append(new UnsignedField<8>(modelData.frsky.rxBattAlarms[0]));
|
||||
internalField.Append(new UnsignedField<8>(modelData.frsky.rxBattAlarms[1]));
|
||||
internalField.Append(new SpareBitsField<16>());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2703,7 +2711,11 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum bo
|
||||
internalField.Append(new SpareBitsField<3>());
|
||||
internalField.Append(new SignedField<2>((int &)generalData.hapticMode));
|
||||
|
||||
internalField.Append(new SpareBitsField<8>());
|
||||
if (IS_ARM(board))
|
||||
internalField.Append(new SignedField<8>(generalData.switchesDelay));
|
||||
else
|
||||
internalField.Append(new SpareBitsField<8>());
|
||||
|
||||
internalField.Append(new UnsignedField<8>(generalData.backlightDelay));
|
||||
internalField.Append(new UnsignedField<8>(generalData.templateSetup));
|
||||
internalField.Append(new SignedField<8>(generalData.PPM_Multiplier));
|
||||
@@ -2806,7 +2818,8 @@ void OpenTxGeneralData::beforeExport()
|
||||
void OpenTxGeneralData::afterImport()
|
||||
{
|
||||
for (int i=0; i<4; i++) {
|
||||
if (i<2 && generalData.potsType[i] == 0)
|
||||
generalData.potsType[i] = potsType[i];
|
||||
if (i<2 && potsType[i] == 0)
|
||||
generalData.potsType[i] = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#include "opentxeeprom.h"
|
||||
#include "open9xGruvin9xeeprom.h"
|
||||
#include "open9xSky9xeeprom.h"
|
||||
#include "opentxsimulator.h"
|
||||
#include "opentxM64simulator.h"
|
||||
#include "opentxM128simulator.h"
|
||||
#include "opentxGruvin9xsimulator.h"
|
||||
#include "opentxSky9xsimulator.h"
|
||||
@@ -45,7 +45,7 @@ size_t SizeOfArray( T(&)[ N ] )
|
||||
|
||||
OpenTxEepromInterface::OpenTxEepromInterface(BoardEnum board):
|
||||
EEPROMInterface(board),
|
||||
efile(new EFile())
|
||||
efile(new RleFile())
|
||||
{
|
||||
}
|
||||
|
||||
@@ -504,7 +504,7 @@ int OpenTxFirmware::getCapability(const Capability capability)
|
||||
return 1;
|
||||
case GvarsAreNamed:
|
||||
case GvarsFlightModes:
|
||||
return ((IS_ARM(board)||(board==BOARD_GRUVIN9X)) ? 1 : 0);
|
||||
return ((IS_ARM(board) || board==BOARD_GRUVIN9X) ? 1 : 0);
|
||||
case Mixes:
|
||||
return (IS_ARM(board) ? O9X_ARM_MAX_MIXERS : O9X_MAX_MIXERS);
|
||||
case OffsetWeight:
|
||||
@@ -569,11 +569,6 @@ int OpenTxFirmware::getCapability(const Capability capability)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
case HasFuncRepeat:
|
||||
case HasContrast:
|
||||
return 1;
|
||||
case Beeperlen:
|
||||
return 1;
|
||||
case MaxVolume:
|
||||
return (IS_ARM(board) ? 23 : 7);
|
||||
case HasSoundMixer:
|
||||
@@ -664,6 +659,7 @@ int OpenTxFirmware::getCapability(const Capability capability)
|
||||
case LuaInputs:
|
||||
case LimitsPer1000:
|
||||
case EnhancedCurves:
|
||||
return IS_TARANIS(board);
|
||||
case HasFasOffset:
|
||||
return (IS_STOCK(board) ? false : true);
|
||||
case HasMahPersistent:
|
||||
@@ -915,6 +911,7 @@ QString OpenTxFirmware::getFirmwareUrl(QString & id)
|
||||
url.append(QString("/getfw.php?fw=%1.hex").arg(id));
|
||||
break;
|
||||
case BOARD_SKY9X:
|
||||
case BOARD_9XRPRO:
|
||||
case BOARD_TARANIS:
|
||||
case BOARD_TARANIS_PLUS:
|
||||
url.append(QString("/getfw.php?fw=%1.bin").arg(id));
|
||||
@@ -944,9 +941,9 @@ SimulatorInterface * OpenTxFirmware::getSimulator()
|
||||
{
|
||||
switch (board) {
|
||||
case BOARD_STOCK:
|
||||
return new Open9xSimulator();
|
||||
return new OpenTxM64Simulator();
|
||||
case BOARD_M128:
|
||||
return new Open9xM128Simulator();
|
||||
return new OpenTxM128Simulator();
|
||||
case BOARD_GRUVIN9X:
|
||||
return new Open9xGruvin9xSimulator();
|
||||
case BOARD_SKY9X:
|
||||
@@ -1158,7 +1155,7 @@ void registerOpenTxFirmwares()
|
||||
openTx->addOptions(fai_options);
|
||||
firmwares.push_back(openTx);
|
||||
|
||||
/* SKY9X board */
|
||||
/* 9XR-Pro */
|
||||
openTx = new OpenTxFirmware("opentx-9xrpro", QObject::tr("OpenTX for 9XR-PRO"), BOARD_9XRPRO, true);
|
||||
openTx->setVariantBase(FRSKY_VARIANT);
|
||||
openTx->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support"));
|
||||
@@ -1181,29 +1178,6 @@ void registerOpenTxFirmwares()
|
||||
openTx->addOption("bluetooth", QObject::tr("Bluetooth interface"));
|
||||
openTx->addOptions(fai_options);
|
||||
firmwares.push_back(openTx);
|
||||
openTx = new OpenTxFirmware("opentx-sky9x", QObject::tr("OpenTX for Sky9x board / 9X"), BOARD_SKY9X, true);
|
||||
openTx->setVariantBase(FRSKY_VARIANT);
|
||||
openTx->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support"));
|
||||
openTx->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
|
||||
openTx->addOption("nofp", QObject::tr("No flight modes"));
|
||||
openTx->addOption("nocurves", QObject::tr("Disable curves menus"));
|
||||
openTx->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
|
||||
openTx->addOption("ppmus", QObject::tr("Channel values displayed in us"));
|
||||
openTx->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
|
||||
openTx->addOption("symlimits", QObject::tr("Symetrical Limits"));
|
||||
openTx->addOption("potscroll", QObject::tr("Pots use in menus navigation"));
|
||||
openTx->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control"));
|
||||
openTx->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control"));
|
||||
openTx->addOption("dblkeys", QObject::tr("Enable resetting values by pressing up and down at the same time"));
|
||||
openTx->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
|
||||
openTx->addOption("battgraph", QObject::tr("Battery graph"));
|
||||
openTx->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
|
||||
openTx->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
|
||||
openTx->addOption("tsticks", QObject::tr("Use FrSky Taranis sticks in a 9X/9XR"));
|
||||
openTx->addOption("bluetooth", QObject::tr("Bluetooth interface"));
|
||||
openTx->addOptions(fai_options);
|
||||
firmwares.push_back(openTx);
|
||||
|
||||
#endif
|
||||
|
||||
/* Taranis board */
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
#define OPENTX_COMPANION_DOWNLOADS "http://downloads-20.open-tx.org/companion"
|
||||
#define OPENTX_FIRMWARE_DOWNLOADS "http://downloads-20.open-tx.org/firmware"
|
||||
|
||||
class EFile;
|
||||
class RleFile;
|
||||
|
||||
class OpenTxEepromInterface : public EEPROMInterface
|
||||
{
|
||||
@@ -74,7 +74,7 @@ class OpenTxEepromInterface : public EEPROMInterface
|
||||
template <class T>
|
||||
bool saveGeneral(GeneralSettings &settings, BoardEnum board, uint32_t version, uint32_t variant);
|
||||
|
||||
EFile *efile;
|
||||
RleFile *efile;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -85,7 +85,6 @@ Th9xGeneral::operator GeneralSettings ()
|
||||
}
|
||||
result.stickMode = stickMode;
|
||||
result.inactivityTimer = inactivityMin;
|
||||
result.filterInput = adcFilt;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
Th9xInterface::Th9xInterface():
|
||||
EEPROMInterface(BOARD_STOCK),
|
||||
efile(new EFile())
|
||||
efile(new RleFile())
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
#include "eeprominterface.h"
|
||||
|
||||
class EFile;
|
||||
class RleFile;
|
||||
|
||||
class Th9xInterface : public EEPROMInterface
|
||||
{
|
||||
@@ -50,7 +50,7 @@ class Th9xInterface : public EEPROMInterface
|
||||
|
||||
protected:
|
||||
|
||||
EFile *efile;
|
||||
RleFile *efile;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -69,7 +69,17 @@ FlashInterface::FlashInterface(QString fileName):
|
||||
version = seekLabel(VERS_MARK);
|
||||
date = seekLabel(DATE_MARK);
|
||||
time = seekLabel(TIME_MARK);
|
||||
eeprom = seekLabel(EEPR_MARK);
|
||||
eepromId = seekLabel(EEPR_MARK);
|
||||
|
||||
if (eepromId.contains('-')) {
|
||||
QStringList list = eepromId.split('-');
|
||||
eepromVersion = list[0].toInt();
|
||||
eepromVariant = list[1].toInt();
|
||||
}
|
||||
else {
|
||||
eepromVersion = eepromId.toInt();
|
||||
}
|
||||
|
||||
versionId = version2index(version);
|
||||
SeekSplash();
|
||||
isValidFlag = true;
|
||||
@@ -182,7 +192,7 @@ void FlashInterface::SeekSplash(void)
|
||||
return;
|
||||
}
|
||||
|
||||
if (SeekSplash(QByteArray(OTX_SPS_TARANIS, sizeof(OTX_SPS_TARANIS)), QByteArray(OTX_SPE, sizeof(OTX_SPE)), 6790)) {
|
||||
if (SeekSplash(QByteArray(OTX_SPS_TARANIS, OTX_SPS_SIZE), QByteArray(OTX_SPE, OTX_SPE_SIZE), 6784)) {
|
||||
splash_width = SPLASHX9D_WIDTH;
|
||||
splash_height = SPLASHX9D_HEIGHT;
|
||||
splash_format = QImage::Format_Indexed8;
|
||||
|
||||
@@ -49,7 +49,9 @@ class FlashInterface
|
||||
int getSize() { return flash_size; }
|
||||
inline QString getVersion() { return version; }
|
||||
unsigned int getVersionId() { return versionId; }
|
||||
inline QString getEEprom() { return eeprom; }
|
||||
inline int getEEpromVersion() { return eepromVersion; }
|
||||
inline int getEEpromVariant() { return eepromVariant; }
|
||||
inline QString getEEpromId() { return eepromId; }
|
||||
QImage getSplash();
|
||||
bool setSplash(const QImage & newsplash);
|
||||
bool hasSplash();
|
||||
@@ -72,7 +74,9 @@ class FlashInterface
|
||||
QString time;
|
||||
QString version;
|
||||
int versionId;
|
||||
QString eeprom;
|
||||
QString eepromId;
|
||||
int eepromVersion;
|
||||
int eepromVariant;
|
||||
QByteArray splash;
|
||||
uint splash_offset;
|
||||
uint splash_size;
|
||||
|
||||
@@ -51,7 +51,8 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
|
||||
ui->chkSG->setValue(switchstate & 0x3);
|
||||
switchstate >>= 2;
|
||||
ui->chkSH->setValue(switchstate & 0x3);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
for (int i=0; pmsl[i]; i++) {
|
||||
pmsl[i]->hide();
|
||||
}
|
||||
@@ -87,7 +88,8 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
|
||||
if (!GetCurrentFirmware()->getCapability(MultiLangVoice)) {
|
||||
ui->VoiceLang_label->hide();
|
||||
ui->voiceLang_CB->hide();
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
voiceLangEditLock=true;
|
||||
populateVoiceLangCB(ui->voiceLang_CB, g_eeGeneral.ttsLanguage);
|
||||
voiceLangEditLock=false;
|
||||
@@ -96,17 +98,14 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
|
||||
if (!mavlink) {
|
||||
ui->mavbaud_CB->hide();
|
||||
ui->mavbaud_label->hide();
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
mavbaudEditLock=true;
|
||||
ui->mavbaud_CB->setCurrentIndex(g_eeGeneral.mavbaud);
|
||||
populateVoiceLangCB(ui->voiceLang_CB, g_eeGeneral.ttsLanguage);
|
||||
mavbaudEditLock=false;
|
||||
}
|
||||
|
||||
if (!GetCurrentFirmware()->getCapability(HasContrast)) {
|
||||
ui->contrastSB->hide();
|
||||
ui->label_contrast->hide();
|
||||
}
|
||||
if (!GetCurrentFirmware()->getCapability(HasSoundMixer)) {
|
||||
ui->beepVolume_SL->hide();
|
||||
ui->beepVolume_label->hide();
|
||||
@@ -173,7 +172,8 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
|
||||
ui->volume_SB->hide();
|
||||
ui->volume_SB->setDisabled(true);
|
||||
ui->label_volume->hide();
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
ui->volume_SB->setMaximum(GetCurrentFirmware()->getCapability(MaxVolume));
|
||||
}
|
||||
if (!GetCurrentFirmware()->getCapability(HasBrightness)) {
|
||||
@@ -309,6 +309,16 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
|
||||
ui->backlightColor2_label->hide();
|
||||
}
|
||||
|
||||
if (IS_ARM(eepromInterface->getBoard())) {
|
||||
ui->switchesDelay->setValue(10*(g_eeGeneral.switchesDelay+15));
|
||||
}
|
||||
else {
|
||||
ui->switchesDelay->hide();
|
||||
ui->switchesDelayLabel->hide();
|
||||
}
|
||||
|
||||
disableMouseScrolling();
|
||||
|
||||
ga.sendPageView(getBoardName(GetCurrentFirmware()->getBoard()) + " GeneralEdit");
|
||||
}
|
||||
|
||||
@@ -520,6 +530,12 @@ void GeneralEdit::on_backlightautoSB_editingFinished()
|
||||
}
|
||||
}
|
||||
|
||||
void GeneralEdit::on_switchesDelay_valueChanged()
|
||||
{
|
||||
g_eeGeneral.switchesDelay = (ui->switchesDelay->value() / 10) - 15;
|
||||
updateSettings();
|
||||
}
|
||||
|
||||
void GeneralEdit::on_backlightColor_SL_valueChanged()
|
||||
{
|
||||
g_eeGeneral.backlightColor = ui->backlightColor_SL->value();
|
||||
@@ -1065,7 +1081,8 @@ void GeneralEdit::on_calstore_PB_clicked()
|
||||
if (name.isEmpty()) {
|
||||
ui->calstore_PB->setDisabled(true);
|
||||
return;
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
QString calib=g.profile[profile_id].stickPotCalib();
|
||||
if (!(calib.isEmpty())) {
|
||||
int ret = QMessageBox::question(this, "Companion",
|
||||
@@ -1104,7 +1121,50 @@ void GeneralEdit::on_calstore_PB_clicked()
|
||||
}
|
||||
}
|
||||
|
||||
void GeneralEdit::shrink() {
|
||||
resize(100,100);
|
||||
resize(0,0);
|
||||
void GeneralEdit::shrink()
|
||||
{
|
||||
resize(100, 100);
|
||||
resize(0, 0);
|
||||
}
|
||||
|
||||
bool GeneralEdit::eventFilter(QObject *object, QEvent * event)
|
||||
{
|
||||
QWidget * widget = qobject_cast<QWidget*>(object);
|
||||
if (widget) {
|
||||
if (event->type() == QEvent::Wheel) {
|
||||
if (widget->focusPolicy() == Qt::WheelFocus) {
|
||||
event->accept();
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
event->ignore();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (event->type() == QEvent::FocusIn) {
|
||||
widget->setFocusPolicy(Qt::WheelFocus);
|
||||
}
|
||||
else if (event->type() == QEvent::FocusOut) {
|
||||
widget->setFocusPolicy(Qt::StrongFocus);
|
||||
}
|
||||
}
|
||||
return QWidget::eventFilter(object, event);
|
||||
}
|
||||
|
||||
void GeneralEdit::disableMouseScrolling()
|
||||
{
|
||||
Q_FOREACH(QComboBox * cb, findChildren<QComboBox*>()) {
|
||||
cb->installEventFilter(this);
|
||||
cb->setFocusPolicy(Qt::StrongFocus);
|
||||
}
|
||||
|
||||
Q_FOREACH(QAbstractSpinBox * sb, findChildren<QAbstractSpinBox*>()) {
|
||||
sb->installEventFilter(this);
|
||||
sb->setFocusPolicy(Qt::StrongFocus);
|
||||
}
|
||||
|
||||
Q_FOREACH(QSlider * slider, findChildren<QSlider*>()) {
|
||||
slider->installEventFilter(this);
|
||||
slider->setFocusPolicy(Qt::StrongFocus);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,12 +12,12 @@ class GeneralEdit : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
public:
|
||||
explicit GeneralEdit(RadioData &radioData, QWidget *parent = 0);
|
||||
~GeneralEdit();
|
||||
void updateSettings();
|
||||
|
||||
private:
|
||||
private:
|
||||
Ui::GeneralEdit *ui;
|
||||
RadioData &radioData;
|
||||
GeneralSettings g_eeGeneral;
|
||||
@@ -28,11 +28,15 @@ private:
|
||||
void getGeneralSwitchDefPos(int i, bool val);
|
||||
void setSwitchDefPos();
|
||||
void updateVarioPitchRange();
|
||||
void disableMouseScrolling();
|
||||
|
||||
protected:
|
||||
virtual bool eventFilter(QObject *obj, QEvent *event);
|
||||
|
||||
signals:
|
||||
signals:
|
||||
void modelValuesChanged();
|
||||
|
||||
private slots:
|
||||
private slots:
|
||||
void on_faimode_CB_stateChanged(int );
|
||||
void on_speakerPitchSB_editingFinished();
|
||||
void on_timezoneSB_editingFinished();
|
||||
@@ -132,6 +136,7 @@ private slots:
|
||||
void setValues();
|
||||
void shrink();
|
||||
void stickReverseEdited();
|
||||
void on_switchesDelay_valueChanged();
|
||||
};
|
||||
|
||||
#endif // GENERALEDIT_H
|
||||
|
||||
@@ -1968,6 +1968,52 @@ Mode 4:
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="34" column="0">
|
||||
<widget class="QLabel" name="switchesDelayLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Play Delay (switch mid position)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="34" column="1">
|
||||
<widget class="QSpinBox" name="switchesDelay">
|
||||
<property name="toolTip">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="statusTip">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="whatsThis">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">LCD Screen Contrast</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Values can be 20-45</span></p></body></html></string>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string> ms</string>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>300</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tabTrainer">
|
||||
|
||||
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 251 B After Width: | Height: | Size: 2.4 KiB |
@@ -1091,18 +1091,6 @@
|
||||
offset="1"
|
||||
id="stop4633-8" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter5060"
|
||||
x="-0.10864612"
|
||||
width="1.2172922"
|
||||
y="-0.24492737"
|
||||
height="1.4898547">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="5.7995994"
|
||||
id="feGaussianBlur5062" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
id="linearGradient4709-5">
|
||||
<stop
|
||||
@@ -1163,18 +1151,6 @@
|
||||
offset="1"
|
||||
id="stop4633-9" />
|
||||
</linearGradient>
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter6148"
|
||||
x="-0.090552361"
|
||||
width="1.1811047"
|
||||
y="-0.1778305"
|
||||
height="1.355661">
|
||||
<feGaussianBlur
|
||||
inkscape:collect="always"
|
||||
stdDeviation="5.1385088"
|
||||
id="feGaussianBlur6150" />
|
||||
</filter>
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient5786"
|
||||
@@ -2566,7 +2542,7 @@
|
||||
fx="299.52417"
|
||||
fy="779.74567"
|
||||
r="55.418938"
|
||||
gradientTransform="matrix(0.45002749,0.03665999,-0.00806819,0.09904275,-32.330683,866.95508)"
|
||||
gradientTransform="matrix(0.45002749,0.03665999,-0.00806819,0.09904275,194.65059,702.90631)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
@@ -2577,7 +2553,7 @@
|
||||
x2="294.27679"
|
||||
y2="794.37579"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-203.53553,162.44975)" />
|
||||
gradientTransform="translate(23.445741,-1.5990189)" />
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter5149"
|
||||
@@ -2607,7 +2583,7 @@
|
||||
x2="292.177"
|
||||
y2="803.63416"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-203.53553,162.44975)" />
|
||||
gradientTransform="translate(23.445741,-1.5990189)" />
|
||||
<filter
|
||||
inkscape:collect="always"
|
||||
id="filter5295"
|
||||
@@ -2835,7 +2811,7 @@
|
||||
xlink:href="#linearGradient5127-5"
|
||||
id="linearGradient5695"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-203.69622,-0.7961383)"
|
||||
gradientTransform="matrix(1.3146629,0,0,1.3146629,-298.3169,-166.23615)"
|
||||
x1="326.85025"
|
||||
y1="793.87579"
|
||||
x2="294.27679"
|
||||
@@ -2845,7 +2821,7 @@
|
||||
xlink:href="#linearGradient5093-1"
|
||||
id="radialGradient5699"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.78006028,0.14595423,-0.08994153,0.48069744,-67.795168,373.85384)"
|
||||
gradientTransform="matrix(1.0255163,0.19188061,-0.1182428,0.63195509,-119.65283,326.30228)"
|
||||
cx="253.82587"
|
||||
cy="792.63324"
|
||||
fx="253.82587"
|
||||
@@ -2856,7 +2832,7 @@
|
||||
xlink:href="#linearGradient5105-3"
|
||||
id="radialGradient5714"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.97852709,0.20611827,-0.04337458,0.20591673,-164.16094,578.0247)"
|
||||
gradientTransform="matrix(1.2864332,0.27097604,-0.05702295,0.27071109,-246.34133,594.71814)"
|
||||
cx="246.97363"
|
||||
cy="789.21893"
|
||||
fx="246.97363"
|
||||
@@ -2867,7 +2843,7 @@
|
||||
xlink:href="#linearGradient5117-0"
|
||||
id="radialGradient5718"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.45002749,0.03665999,-0.00806819,0.09904275,-32.49138,703.70919)"
|
||||
gradientTransform="matrix(0.59163445,0.04819552,-0.01060695,0.13020783,-73.240247,759.95088)"
|
||||
cx="299.52417"
|
||||
cy="779.74567"
|
||||
fx="299.52417"
|
||||
@@ -2878,7 +2854,7 @@
|
||||
xlink:href="#linearGradient5727"
|
||||
id="linearGradient5722"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="translate(-203.69622,-0.7961383)"
|
||||
gradientTransform="translate(-211.47439,79.106926)"
|
||||
x1="266.15909"
|
||||
y1="735.04486"
|
||||
x2="292.177"
|
||||
@@ -2898,9 +2874,9 @@
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
borderlayer="true"
|
||||
inkscape:window-width="1280"
|
||||
inkscape:window-height="972"
|
||||
inkscape:window-x="1280"
|
||||
inkscape:window-width="1024"
|
||||
inkscape:window-height="744"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
@@ -2913,7 +2889,7 @@
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
@@ -2922,162 +2898,33 @@
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-702.36218)">
|
||||
<path
|
||||
style="opacity:0.16607774;fill:#212121;fill-opacity:1;stroke:none;filter:url(#filter5427)"
|
||||
d="m 353.28858,830.27639 19,-0.25 -0.75,-10.25 -24.25,-11.75 -0.5,22.25 z"
|
||||
id="path5361"
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(0.80136773,0,0,0.80136773,-149.24088,316.37583)" />
|
||||
<path
|
||||
style="opacity:0.60070669;fill:#212121;fill-opacity:1;stroke:none;filter:url(#filter5357)"
|
||||
d="m 323.59376,743.0011 c -2.02047,0.27313 -4.06987,0.40162 -5.65936,2.82968 l -20.98682,32.54135 -46.21815,29.24005 0.23581,0 46.21815,29.24006 20.98681,32.54135 c 1.58949,2.42806 3.63889,2.55655 5.65937,2.82968 l 13.44099,0 0,-64.61109 -0.23581,0 0,-64.61108 -13.44099,0 z"
|
||||
id="path3473-4"
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(1,0,0,0.94301708,-203.53553,204.05043)" />
|
||||
<path
|
||||
style="fill:#dc3232;fill-opacity:1;stroke:#000000;stroke-width:1.17200005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 109.94896,891.54774 c -2.02047,0.27313 -4.06987,0.40162 -5.65936,2.82968 l -20.986823,32.54135 -46.21815,29.24005 0.23581,0 46.21815,29.24006 20.986813,32.54132 c 1.58949,2.428 3.63889,2.5565 5.65937,2.8297 l 13.44099,0 0,-64.61108 -0.23581,0 0,-64.61108 -13.44099,0 z"
|
||||
id="path3473"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="opacity:0.9181272;fill:url(#linearGradient5187);fill-opacity:1;stroke:#ffffff;stroke-width:1.17200005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter5161)"
|
||||
d="m 121.40197,893.5435 c -3.98587,0.0736 -7.99299,-0.14058 -11.96875,0.0937 l 0,5e-5 c -5.66719,0.75957 -6.41414,8.52927 -10.027703,11.99566 -5.47113,7.65546 -9.64823,16.62401 -15.87971,23.508 -14.19753,8.98836 -28.39506,17.97673 -42.59259,26.96509 14.71745,9.43817 29.76941,18.54698 44.28125,28.1875 7.64889,11.13495 14.17209,23.3742 22.437503,33.9062 4.5008,1.2612 9.34531,0.2231 13.96875,0.5625"
|
||||
id="path5153"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
<path
|
||||
style="fill:#3234bd;fill-opacity:1;stroke:#000000;stroke-width:1.27199996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 62.109637,948.31825 c -16.29822,0.1086 -26.48309,3.75139 -26.70513,7.75215 l -0.0148,0 c -4.7e-4,0.0291 -4.7e-4,0.0594 0,0.0884 -4.7e-4,0.03 -4.7e-4,0.0584 0,0.0884 l 0.0148,0 c 0.25241,4.75514 14.57029,9.01198 36.50585,7.42792 25.08486,-1.81148 45.880773,-5.3502 71.788463,-5.77727 1.67155,-0.12773 1.68871,-3.3799 -0.0295,-3.47815 -25.89384,-0.42928 -46.669003,-3.96648 -71.744253,-5.77727 -3.46945,-0.25055 -6.75183,-0.34465 -9.81546,-0.32423 z"
|
||||
id="path3408"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="scccccsccss" />
|
||||
<path
|
||||
sodipodi:nodetypes="scccccsccss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5115"
|
||||
d="m 62.109637,948.31825 c -16.29822,0.1086 -26.48309,3.75139 -26.70513,7.75215 l -0.0148,0 c -4.7e-4,0.0291 -4.7e-4,0.0594 0,0.0884 -4.7e-4,0.03 -4.7e-4,0.0584 0,0.0884 l 0.0148,0 c 0.25241,4.75514 14.57029,9.01198 36.50585,7.42792 25.08486,-1.81148 45.880773,-5.3502 71.788463,-5.77727 1.67155,-0.12773 1.68871,-3.3799 -0.0295,-3.47815 -25.89384,-0.42928 -46.669003,-3.96648 -71.744253,-5.77727 -3.46945,-0.25055 -6.75183,-0.34465 -9.81546,-0.32423 z"
|
||||
style="fill:url(#radialGradient5123);fill-opacity:1;stroke:#000000;stroke-width:1.27199996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
sodipodi:nodetypes="cssccscc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5688"
|
||||
d="m 83.892766,952.60695 c -6.87778,-0.7158 -13.77991,-1.4658 -21.23736,-2.0043 -2.45227,-0.1771 -4.77613,-0.2503 -6.94156,-0.2358 -3.14581,0.021 -5.92519,0.2417 -8.37115,0.5895 -1.14311,3.3062 -0.96581,6.6124 0,9.9186 4.12512,0.5858 9.30688,0.7874 15.31271,0.3537 7.45864,-0.5386 14.35978,-1.2885 21.23736,-2.0043 0.64914,-2.1131 0.89851,-4.2832 0,-6.6174 z"
|
||||
style="fill:#212121;fill-opacity:1;stroke:#000000;stroke-width:0.33334607px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
||||
<path
|
||||
style="fill:#535353;fill-opacity:1;stroke:none;filter:url(#filter5684)"
|
||||
d="m 81.404082,954.22675 c -6.151626,-0.53187 -12.32503,-1.0891 -18.995124,-1.48925 -2.193359,-0.13156 -4.271866,-0.1859 -6.208671,-0.17519 -2.813676,0.0156 -5.29961,0.17959 -7.487325,0.43801 -1.022421,2.45651 -0.863841,4.91301 0,7.36951 3.68959,0.43523 8.324262,0.58507 13.695996,0.26283 6.671159,-0.4002 12.843677,-0.95735 18.995124,-1.48924 0.580604,-1.56999 0.803647,-3.1824 0,-4.91667 z"
|
||||
id="path3462-8"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cssccscc"
|
||||
transform="matrix(0.9487876,0,0,0.65487255,5.1779868,331.94549)" />
|
||||
<rect
|
||||
style="fill:#81ff51;fill-opacity:1;stroke:#070707;stroke-width:1.32051849;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="rect3507"
|
||||
width="13.912606"
|
||||
height="8.489048"
|
||||
x="70.280167"
|
||||
y="952.14117" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.07510066;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 72.506544,957.02087 46.329316,15.02601"
|
||||
id="path4279-7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:#81ff51;fill-opacity:1;stroke:#000000;stroke-width:2.07510066;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="M 72.050618,955.14715 118.73347,941.00501"
|
||||
id="path4279"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:#dcc75f;fill-opacity:1;stroke:#000000;stroke-width:1.17200005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 61.200064,948.43449 c -16.29822,0.10861 -26.49671,3.74925 -26.71875,7.75 -4.7e-4,0.0292 -4.7e-4,0.0648 0,0.0937 -4.7e-4,0.0302 -4.7e-4,0.0638 0,0.0937 0.25241,4.75514 14.56443,9.02156 36.5,7.4375 5.05245,-0.36484 9.80312,-0.85532 14.59375,-1.3125 6.24289,-3.59689 7.9814,-7.60209 0,-12.4375 -4.78394,-0.45667 -9.51469,-0.91674 -14.5625,-1.28125 -3.46945,-0.25057 -6.74887,-0.36418 -9.8125,-0.34375 z m -5.65625,2.28125 c 2.16543,-0.0144 4.48523,0.0729 6.9375,0.25 7.45745,0.53854 14.37222,1.28416 21.25,2 0.89851,2.33414 0.64914,4.51196 0,6.625 -6.87758,0.71588 -13.79136,1.46138 -21.25,2 -6.00583,0.43371 -11.18738,0.21075 -15.3125,-0.375 -0.96581,-3.30621 -1.14311,-6.60003 0,-9.90625 2.44596,-0.3478 5.22919,-0.57275 8.375,-0.59375 z"
|
||||
id="path5103"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:#3234bd;fill-opacity:1;stroke:#000000;stroke-width:1.07200003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 112.08596,954.0289 c -18.568463,0.8356 -18.753283,3.98005 0.0834,4.59333 10.27215,-0.38097 20.26392,-0.53862 31.52949,-0.72433 1.67155,-0.12773 1.68871,-3.3799 -0.0295,-3.47815 -11.25276,-0.18656 -21.32425,-0.0108 -31.58339,-0.39085 z"
|
||||
id="path3466"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.57200003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 116.82782,1020.465 -0.74788,-58.411 7.07421,0"
|
||||
id="path3501"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.57200003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 123.15415,950.73527 -7.07421,0 0.23581,-58.95173"
|
||||
id="path3503"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="opacity:0.53003534;fill:#212121;fill-opacity:1;stroke:none"
|
||||
id="rect3505"
|
||||
width="5.3357005"
|
||||
height="3.2573676"
|
||||
x="116.40572"
|
||||
y="939.42657" />
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="rect3509"
|
||||
width="5.6508331"
|
||||
height="3.9498441"
|
||||
x="-959.20496"
|
||||
y="70.752983"
|
||||
transform="matrix(0,-1,1,0,0,0)" />
|
||||
<rect
|
||||
style="opacity:0.53003534;fill:#212121;fill-opacity:1;stroke:none"
|
||||
id="rect3505-6"
|
||||
width="5.3357005"
|
||||
height="3.2573676"
|
||||
x="117.03843"
|
||||
y="-973.44843"
|
||||
transform="scale(1,-1)" />
|
||||
<path
|
||||
style="opacity:0.77385158;fill:none;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter5149)"
|
||||
d="m 35.13604,955.48871 c 15.716517,-12.07971 44.811908,-4.83224 68.98008,-1.28033"
|
||||
id="path5135"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5125"
|
||||
d="m 112.08596,954.0289 c -18.568463,0.8356 -18.753283,3.98005 0.0834,4.59333 10.27215,-0.38097 20.26392,-0.53862 31.52949,-0.72433 1.67155,-0.12773 1.68871,-3.3799 -0.0295,-3.47815 -11.25276,-0.18656 -21.32425,-0.0108 -31.58339,-0.39085 z"
|
||||
style="fill:url(#linearGradient5133);fill-opacity:1;stroke:#000000;stroke-width:1.07200003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
style="opacity:0.54063607;fill:#333333;fill-opacity:1;stroke:none;filter:url(#filter5295)"
|
||||
d="m 49.934137,963.20838 c 18.42376,3.94814 47.50436,4.19404 63.500003,3.625 l 4.25,0.75 5.625,3.875 0.125,-13.25 -30.500003,3.75 -27.25,1.5 z"
|
||||
id="path5189"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
<path
|
||||
style="opacity:0.16607774;fill:#212121;fill-opacity:1;stroke:none;filter:url(#filter5427-6)"
|
||||
d="m 353.28858,830.27639 19,-0.25 -0.75,-10.25 -24.25,-11.75 -0.5,22.25 z"
|
||||
id="path5361-7"
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(0.80136773,0,0,0.80136773,-149.40158,153.12994)" />
|
||||
transform="matrix(1.0535285,0,0,1.0535285,-226.93776,36.124757)" />
|
||||
<path
|
||||
style="opacity:0.60070669;fill:#212121;fill-opacity:1;stroke:none;filter:url(#filter5357-0)"
|
||||
d="m 323.59376,743.0011 c -2.02047,0.27313 -4.06987,0.40162 -5.65936,2.82968 l -20.98682,32.54135 -46.21815,29.24005 0.23581,0 46.21815,29.24006 20.98681,32.54135 c 1.58949,2.42806 3.63889,2.55655 5.65937,2.82968 l 13.44099,0 0,-64.61109 -0.23581,0 0,-64.61108 -13.44099,0 z"
|
||||
id="path3473-4-1"
|
||||
inkscape:connector-curvature="0"
|
||||
transform="matrix(1,0,0,0.94301708,-203.69622,40.804542)" />
|
||||
transform="matrix(1.314663,0,0,1.2397496,-298.31692,-111.54527)" />
|
||||
<path
|
||||
style="fill:#dc3232;fill-opacity:1;stroke:#000000;stroke-width:1.17200005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 109.78826,728.30185 c -2.02047,0.27313 -4.06987,0.40162 -5.65936,2.82968 l -20.98682,32.54135 -46.21815,29.24005 0.23581,0 46.21815,29.24006 20.98681,32.54135 c 1.58949,2.42806 3.63889,2.55655 5.65937,2.82968 l 13.44099,0 0,-64.61109 -0.23581,0 0,-64.61108 -13.44099,0 z"
|
||||
style="fill:#dc3232;fill-opacity:1;stroke:#000000;stroke-width:1.54078507;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 113.80952,792.28197 c -2.65624,0.35907 -5.35051,0.528 -7.44015,3.72007 l -27.590593,42.78091 -60.761289,38.44082 0.31001,0 60.761291,38.44082 27.590571,42.7809 c 2.08965,3.19209 4.78392,3.36101 7.44017,3.72009 l 17.67038,0 0,-84.94181 -0.31001,0 0,-84.9418 -17.67038,0 z"
|
||||
id="path3473-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="opacity:0.9181272;fill:url(#linearGradient5722);fill-opacity:1;stroke:#fffcfc;stroke-width:1.17200005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter5161-7)"
|
||||
d="m 121.24127,730.29761 c -3.98587,0.0736 -7.99299,-0.14058 -11.96875,0.0937 l 0,5e-5 c -5.66719,0.75957 -6.41414,8.52927 -10.0277,11.99566 -5.47113,7.65546 -9.64823,16.62401 -15.87971,23.508 -14.19753,8.98836 -28.39506,17.97673 -42.59259,26.96509 14.71745,9.43817 29.76941,18.54698 44.28125,28.1875 7.64889,11.13495 14.17209,23.37424 22.4375,33.90625 4.5008,1.26119 9.34531,0.22306 13.96875,0.5625"
|
||||
d="m 113.4631,810.20067 c -3.98587,0.0736 -7.99299,-0.14058 -11.96875,0.0937 l 0,5e-5 c -5.667194,0.75957 -6.414144,8.52927 -10.027704,11.99566 -5.47113,7.65546 -9.64823,16.62401 -15.87971,23.508 -14.19753,8.98836 -28.39506,17.97673 -42.59259,26.96509 14.71745,9.43817 29.76941,18.54698 44.28125,28.1875 7.64889,11.13495 14.17209,23.37424 22.4375,33.90625 4.500804,1.26119 9.345314,0.22306 13.968754,0.5625"
|
||||
id="path5153-1"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccc" />
|
||||
sodipodi:nodetypes="ccccccccc"
|
||||
transform="matrix(1.314663,0,0,1.314663,-20.299359,-270.23509)" />
|
||||
<path
|
||||
style="fill:#3234bd;fill-opacity:1;stroke:#000000;stroke-width:1.27199996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 61.94894,785.07236 c -16.29822,0.1086 -26.48309,3.75139 -26.70513,7.75215 l -0.0148,0 c -4.7e-4,0.0291 -4.7e-4,0.0594 0,0.0884 -4.7e-4,0.03 -4.7e-4,0.0584 0,0.0884 l 0.0148,0 c 0.25241,4.75514 14.57029,9.01198 36.50585,7.42792 25.08486,-1.81148 45.88077,-5.3502 71.78847,-5.77727 1.67155,-0.12773 1.68871,-3.3799 -0.0295,-3.47815 -25.89385,-0.42928 -46.66901,-3.96648 -71.74426,-5.77727 -3.46945,-0.25055 -6.75183,-0.34465 -9.81546,-0.32423 z"
|
||||
style="fill:#3234bd;fill-opacity:1;stroke:#000000;stroke-width:1.67225122;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 50.916942,866.91606 c -21.426667,0.14277 -34.816338,4.93181 -35.108246,10.19146 l -0.01946,0 c -6.18e-4,0.0383 -6.18e-4,0.0781 0,0.11622 -6.18e-4,0.0394 -6.18e-4,0.0767 0,0.11621 l 0.01946,0 c 0.331835,6.25141 19.15502,11.84772 47.992889,9.76522 32.978135,-2.38149 60.317745,-7.03371 94.377645,-7.59517 2.19752,-0.16792 2.22008,-4.44342 -0.0388,-4.57259 -34.04168,-0.56436 -61.354016,-5.21459 -94.319516,-7.59516 -4.561157,-0.32939 -8.876381,-0.45311 -12.904022,-0.42626 z"
|
||||
id="path3408-8"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="scccccsccss" />
|
||||
@@ -3085,11 +2932,11 @@
|
||||
sodipodi:nodetypes="scccccsccss"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5115-3"
|
||||
d="m 61.94894,785.07236 c -16.29822,0.1086 -26.48309,3.75139 -26.70513,7.75215 l -0.0148,0 c -4.7e-4,0.0291 -4.7e-4,0.0594 0,0.0884 -4.7e-4,0.03 -4.7e-4,0.0584 0,0.0884 l 0.0148,0 c 0.25241,4.75514 14.57029,9.01198 36.50585,7.42792 25.08486,-1.81148 45.88077,-5.3502 71.78847,-5.77727 1.67155,-0.12773 1.68871,-3.3799 -0.0295,-3.47815 -25.89385,-0.42928 -46.66901,-3.96648 -71.74426,-5.77727 -3.46945,-0.25055 -6.75183,-0.34465 -9.81546,-0.32423 z"
|
||||
style="fill:url(#radialGradient5718);fill-opacity:1;stroke:#000000;stroke-width:1.27199996;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
d="m 50.916942,866.91606 c -21.426667,0.14277 -34.816338,4.93181 -35.108246,10.19146 l -0.01946,0 c -6.18e-4,0.0383 -6.18e-4,0.0781 0,0.11622 -6.18e-4,0.0394 -6.18e-4,0.0767 0,0.11621 l 0.01946,0 c 0.331835,6.25141 19.15502,11.84772 47.992889,9.76522 32.978135,-2.38149 60.317745,-7.03371 94.377645,-7.59517 2.19752,-0.16792 2.22008,-4.44342 -0.0388,-4.57259 -34.04168,-0.56436 -61.354016,-5.21459 -94.319516,-7.59516 -4.561157,-0.32939 -8.876381,-0.45311 -12.904022,-0.42626 z"
|
||||
style="fill:url(#radialGradient5718);fill-opacity:1;stroke:#000000;stroke-width:1.67225122;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
style="fill:#dcc75f;fill-opacity:1;stroke:#000000;stroke-width:1.17200005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 86.65625,786.46948 c -4.78394,-0.45667 -9.52801,-0.93243 -14.57582,-1.29694 -3.46945,-0.25057 -6.75183,-0.34466 -9.81546,-0.32423 -16.29822,0.10861 -26.48309,3.7514 -26.70513,7.75215 l -0.0148,0 c -4.7e-4,0.0292 -4.7e-4,0.0594 0,0.0884 -4.7e-4,0.0302 -4.7e-4,0.0584 0,0.0884 l 0.0148,0 c 0.25241,4.75514 14.57029,9.01198 36.50586,7.42792 5.05245,-0.36484 9.79992,-0.83976 14.59055,-1.29694 6.24289,-3.59689 7.9814,-7.6034 0,-12.43881 z"
|
||||
style="fill:#dcc75f;fill-opacity:1;stroke:#000000;stroke-width:1.54078507;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 83.398727,868.7528 c -6.289269,-0.60036 -12.526122,-1.22584 -19.16229,-1.70504 -4.561158,-0.32942 -8.876381,-0.45311 -12.904023,-0.42626 -21.426666,0.1428 -34.816337,4.93183 -35.108245,10.19147 l -0.01946,0 c -6.18e-4,0.0384 -6.18e-4,0.0781 0,0.11622 -6.18e-4,0.0398 -6.18e-4,0.0767 0,0.11621 l 0.01946,0 c 0.331834,6.25141 19.15502,11.84772 47.992902,9.76522 6.642269,-0.47965 12.883592,-1.104 19.181656,-1.70505 8.207296,-4.72869 10.492848,-9.9959 0,-16.35284 z"
|
||||
id="path3481-9-8"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="csscccccscc" />
|
||||
@@ -3097,109 +2944,111 @@
|
||||
sodipodi:nodetypes="csscccccscc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5103-4"
|
||||
d="m 86.65625,786.46948 c -4.78394,-0.45667 -9.52801,-0.93243 -14.57582,-1.29694 -3.46945,-0.25057 -6.75183,-0.34466 -9.81546,-0.32423 -16.29822,0.10861 -26.48309,3.7514 -26.70513,7.75215 l -0.0148,0 c -4.7e-4,0.0292 -4.7e-4,0.0594 0,0.0884 -4.7e-4,0.0302 -4.7e-4,0.0584 0,0.0884 l 0.0148,0 c 0.25241,4.75514 14.57029,9.01198 36.50586,7.42792 5.05245,-0.36484 9.79992,-0.83976 14.59055,-1.29694 6.24289,-3.59689 7.9814,-7.6034 0,-12.43881 z"
|
||||
style="fill:url(#radialGradient5714);fill-opacity:1;stroke:#000000;stroke-width:1.17200005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
d="m 83.398727,868.7528 c -6.289269,-0.60036 -12.526122,-1.22584 -19.16229,-1.70504 -4.561158,-0.32942 -8.876381,-0.45311 -12.904023,-0.42626 -21.426666,0.1428 -34.816337,4.93183 -35.108245,10.19147 l -0.01946,0 c -6.18e-4,0.0384 -6.18e-4,0.0781 0,0.11622 -6.18e-4,0.0398 -6.18e-4,0.0767 0,0.11621 l 0.01946,0 c 0.331834,6.25141 19.15502,11.84772 47.992902,9.76522 6.642269,-0.47965 12.883592,-1.104 19.181656,-1.70505 8.207296,-4.72869 10.492848,-9.9959 0,-16.35284 z"
|
||||
style="fill:url(#radialGradient5714);fill-opacity:1;stroke:#000000;stroke-width:1.54078507;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
style="fill:#212121;fill-opacity:1;stroke:#000000;stroke-width:0.33334607px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 84.79273,789.36109 c -6.87778,-0.71584 -13.77991,-1.46582 -21.23736,-2.00436 -2.45227,-0.17709 -4.77613,-0.25023 -6.94156,-0.2358 -3.14581,0.021 -5.92519,0.24171 -8.37115,0.58951 -1.14311,3.30622 -0.96581,6.61242 0,9.91863 4.12512,0.58575 9.30688,0.78742 15.31271,0.35371 7.45864,-0.53862 14.35978,-1.28848 21.23736,-2.00436 0.64914,-2.11304 0.89851,-4.28319 0,-6.61733 z"
|
||||
style="fill:#212121;fill-opacity:1;stroke:#000000;stroke-width:0.43823776px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||
d="m 80.948826,872.55429 c -9.041962,-0.94109 -18.115937,-1.92705 -27.919971,-2.63505 -3.223908,-0.23282 -6.279001,-0.32897 -9.125811,-0.31 -4.135681,0.0276 -7.789628,0.31777 -11.005241,0.77501 -1.502805,4.34655 -1.269715,8.6931 0,13.03965 5.423142,0.77006 12.23541,1.03519 20.131052,0.46501 9.805599,-0.70811 18.878271,-1.69391 27.919971,-2.63506 0.8534,-2.77794 1.181238,-5.63095 0,-8.69956 z"
|
||||
id="path3462-2"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cssccscc" />
|
||||
<path
|
||||
style="fill:#3234bd;fill-opacity:1;stroke:#000000;stroke-width:1.07200003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 111.92526,790.78301 c -18.56846,0.8356 -18.75328,3.98005 0.0834,4.59333 10.27215,-0.38097 20.26392,-0.53862 31.5295,-0.72433 1.67155,-0.12773 1.68871,-3.3799 -0.0295,-3.47815 -11.25277,-0.18656 -21.32426,-0.0108 -31.5834,-0.39085 z"
|
||||
style="fill:#3234bd;fill-opacity:1;stroke:#000000;stroke-width:1.40931869;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 116.61896,874.42364 c -24.411268,1.09853 -24.654245,5.23242 0.10964,6.03868 13.50442,-0.50085 26.64022,-0.70811 41.45066,-0.95225 2.19753,-0.16792 2.22009,-4.44343 -0.0388,-4.57259 -14.7936,-0.24526 -28.03421,-0.0142 -41.52152,-0.51384 z"
|
||||
id="path3466-9"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccc" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.57200003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 116.66712,857.21915 -0.74788,-58.41104 7.07421,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.75198728;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 122.85291,961.76477 -0.98322,-76.79083 9.30021,0"
|
||||
id="path3501-7"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.57200003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 122.99345,787.48938 -7.07421,0 0.23581,-58.95173"
|
||||
style="fill:none;stroke:#000000;stroke-width:0.75198728;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 131.1699,870.09362 -9.30021,0 0.31002,-77.50165"
|
||||
id="path3503-0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="opacity:0.53003534;fill:#212121;fill-opacity:1;stroke:none"
|
||||
id="rect3505-65"
|
||||
width="5.3357005"
|
||||
height="3.2573676"
|
||||
x="116.59856"
|
||||
y="769.81677" />
|
||||
width="7.0146475"
|
||||
height="4.2823405"
|
||||
x="122.76275"
|
||||
y="846.86011" />
|
||||
<rect
|
||||
style="fill:#81ff51;fill-opacity:1;stroke:#070707;stroke-width:1.32051849;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
style="fill:#81ff51;fill-opacity:1;stroke:#070707;stroke-width:1.73603678;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="rect3507-5"
|
||||
width="13.912606"
|
||||
height="8.489048"
|
||||
x="83.024162"
|
||||
y="768.74274" />
|
||||
width="18.290388"
|
||||
height="11.160236"
|
||||
x="78.623749"
|
||||
y="845.44812" />
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="rect3509-5"
|
||||
width="9.1964684"
|
||||
height="4.1266208"
|
||||
x="83.613701"
|
||||
y="768.62482" />
|
||||
width="12.090257"
|
||||
height="5.4251156"
|
||||
x="79.398796"
|
||||
y="845.29315" />
|
||||
<path
|
||||
style="fill:#81ff51;fill-opacity:1;stroke:#000000;stroke-width:2.07510066;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 89.03726,770.51128 31.1265,0"
|
||||
style="fill:#81ff51;fill-opacity:1;stroke:#000000;stroke-width:2.72805786;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 86.528952,847.77314 40.920858,0"
|
||||
id="path4279-9"
|
||||
inkscape:connector-curvature="0" />
|
||||
<rect
|
||||
style="opacity:0.53003534;fill:#212121;fill-opacity:1;stroke:none"
|
||||
id="rect3505-6-1"
|
||||
width="5.3357005"
|
||||
height="3.2573676"
|
||||
x="116.87774"
|
||||
y="-815.68268"
|
||||
width="7.0146475"
|
||||
height="4.2823405"
|
||||
x="123.12979"
|
||||
y="-907.15833"
|
||||
transform="scale(1,-1)" />
|
||||
<rect
|
||||
style="fill:#81ff51;fill-opacity:1;stroke:#070707;stroke-width:1.32051849;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
style="fill:#81ff51;fill-opacity:1;stroke:#070707;stroke-width:1.73603678;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
id="rect3507-7-5"
|
||||
width="13.912606"
|
||||
height="8.489048"
|
||||
x="83.303337"
|
||||
y="-816.75671"
|
||||
width="18.290388"
|
||||
height="11.160236"
|
||||
x="78.990768"
|
||||
y="-908.57037"
|
||||
transform="scale(1,-1)" />
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:1;stroke:none"
|
||||
id="rect3509-8-5"
|
||||
width="9.1964684"
|
||||
height="4.1266208"
|
||||
x="83.892845"
|
||||
y="-816.87463"
|
||||
width="12.090257"
|
||||
height="5.4251156"
|
||||
x="79.76577"
|
||||
y="-908.72534"
|
||||
transform="scale(1,-1)" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.07510066;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 89.31641,814.98818 31.12651,0"
|
||||
style="fill:none;stroke:#000000;stroke-width:2.72805786;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 86.895941,906.24528 40.920869,0"
|
||||
id="path4279-7-2"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
sodipodi:nodetypes="cssccscc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5075-7"
|
||||
d="m 85.29273,788.86109 c -6.87778,-0.71584 -13.77991,-1.46582 -21.23736,-2.00436 -2.45227,-0.17709 -4.77613,-0.25023 -6.94156,-0.2358 -3.14581,0.021 -5.92519,0.24171 -8.37115,0.58951 -1.14311,3.30622 -0.96581,6.61242 0,9.91863 4.12512,0.58575 9.30688,0.78742 15.31271,0.35371 7.45864,-0.53862 14.35978,-1.28848 21.23736,-2.00436 0.64914,-2.11304 0.89851,-4.28319 0,-6.61733 z"
|
||||
style="fill:url(#radialGradient5699);fill-opacity:1;stroke:#070707;stroke-width:0.33334607px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0" />
|
||||
d="m 81.606158,871.89696 c -9.041964,-0.94109 -18.115938,-1.92706 -27.919971,-2.63506 -3.223908,-0.23281 -6.279001,-0.32897 -9.125812,-0.31 -4.13568,0.0276 -7.789627,0.31777 -11.00524,0.77501 -1.502805,4.34657 -1.269716,8.69311 0,13.03965 5.423142,0.77007 12.23541,1.0352 20.131052,0.46502 9.805597,-0.7081 18.878271,-1.69392 27.919971,-2.63506 0.8534,-2.77793 1.181237,-5.63095 0,-8.69956 z"
|
||||
style="fill:url(#radialGradient5699);fill-opacity:1;stroke:#070707;stroke-width:0.43823776px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0" />
|
||||
<path
|
||||
style="opacity:0.77385158;fill:none;stroke:#ffffff;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;filter:url(#filter5149-4)"
|
||||
d="m 37.80377,792.06605 c 14.47908,-8.72095 39.33183,-4.30191 63.5,-0.75"
|
||||
d="m 30.025596,871.96911 c 14.47908,-8.72095 39.33183,-4.30191 63.5,-0.75"
|
||||
id="path5135-0"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
sodipodi:nodetypes="cc"
|
||||
transform="matrix(1.314663,0,0,1.314663,-20.299359,-270.23509)" />
|
||||
<path
|
||||
sodipodi:nodetypes="ccccc"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path5125-7"
|
||||
d="m 111.92526,790.78301 c -18.56846,0.8356 -18.75328,3.98005 0.0834,4.59333 10.27215,-0.38097 20.26392,-0.53862 31.5295,-0.72433 1.67155,-0.12773 1.68871,-3.3799 -0.0295,-3.47815 -11.25277,-0.18656 -21.32426,-0.0108 -31.5834,-0.39085 z"
|
||||
style="fill:url(#linearGradient5695);fill-opacity:1;stroke:#000000;stroke-width:1.07200003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
d="m 116.61896,874.42364 c -24.411268,1.09853 -24.654245,5.23242 0.10964,6.03868 13.50442,-0.50085 26.64022,-0.70811 41.45066,-0.95225 2.19753,-0.16792 2.22009,-4.44343 -0.0388,-4.57259 -14.7936,-0.24526 -28.03421,-0.0142 -41.52152,-0.51384 z"
|
||||
style="fill:url(#linearGradient5695);fill-opacity:1;stroke:#000000;stroke-width:1.40931869;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
|
||||
<path
|
||||
style="opacity:0.54063607;fill:#333333;fill-opacity:1;stroke:none;filter:url(#filter5295-5)"
|
||||
d="m 49.77344,799.96249 c 18.42376,3.94814 47.50436,4.19404 63.5,3.625 l 4.25,0.75 5.625,3.875 0.125,-13.25 -30.5,3.75 -27.25,1.5 z"
|
||||
d="m 41.995266,879.86555 c 18.42376,3.94814 47.50436,4.19404 63.500004,3.625 l 4.25,0.75 5.625,3.875 0.125,-13.25 -30.500004,3.75 -27.25,1.5 z"
|
||||
id="path5189-4"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccc" />
|
||||
sodipodi:nodetypes="cccccccc"
|
||||
transform="matrix(1.314663,0,0,1.314663,-20.299359,-270.23509)" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 114 KiB |
|
Before Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 20 KiB |
@@ -352,7 +352,7 @@ void logsDialog::on_mapsButton_clicked() {
|
||||
#ifdef __APPLE__
|
||||
gePath = "/usr/bin/open";
|
||||
parameters << "-a";
|
||||
parameters << "Google\ Earth";
|
||||
parameters << "Google\\ Earth";
|
||||
#endif
|
||||
parameters << geFilename;
|
||||
QProcess *process = new QProcess(this);
|
||||
@@ -525,7 +525,8 @@ void logsDialog::plotValue(int index, int plot, int numplots)
|
||||
ui->customPlot->graph(0)->setScatterStyle(QCP::ssNone);
|
||||
//ui->customPlot->graph()->setLineStyle((QCPGraph::LineStyle)(rand()%5+1));
|
||||
ui->customPlot->graph(0)->setPen(graphPen);
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
ui->customPlot->xAxis2->setRange(0, maxx-minx);
|
||||
ui->customPlot->yAxis2->setTickLabels(true);
|
||||
ui->customPlot->yAxis2->setRange(miny,maxy);
|
||||
@@ -540,7 +541,8 @@ void logsDialog::plotValue(int index, int plot, int numplots)
|
||||
//ui->customPlot->graph()->setLineStyle((QCPGraph::LineStyle)(rand()%5+1));
|
||||
ui->customPlot->graph(1)->setPen(graphPen);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
ui->customPlot->yAxis->setTickLabels(false);
|
||||
ui->customPlot->yAxis2->setTickLabels(false);
|
||||
ui->customPlot->yAxis->setRange(-1100, 1100);
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
#include "warnings.h"
|
||||
#include "helpers.h"
|
||||
#include "appdata.h"
|
||||
#include "taranisnotfound.h"
|
||||
#include "radionotfound.h"
|
||||
#include "googleanalytics.h"
|
||||
#include "firmwares/opentx/opentxinterface.h" // TODO get rid of this include
|
||||
|
||||
@@ -106,7 +106,7 @@ MainWindow::MainWindow():
|
||||
restoreState(g.mainWinState());
|
||||
restoreGeometry(g.mainWinGeo());
|
||||
|
||||
setUnifiedTitleAndToolBarOnMac(true);
|
||||
// setUnifiedTitleAndToolBarOnMac(true);
|
||||
this->setWindowIcon(QIcon(":/icon.png"));
|
||||
this->setIconSize(QSize(32, 32));
|
||||
QNetworkProxyFactory::setUseSystemConfiguration(true);
|
||||
@@ -152,7 +152,8 @@ MainWindow::MainWindow():
|
||||
if (!(printing && (model >=0 && model<GetEepromInterface()->getMaxModels()) && !printfilename.isEmpty() )) {
|
||||
statusBar()->showMessage(tr("File loaded"), 2000);
|
||||
child->show();
|
||||
} else {
|
||||
}
|
||||
else {
|
||||
child->show();
|
||||
child->print(model,printfilename);
|
||||
child->close();
|
||||
@@ -423,7 +424,7 @@ void MainWindow::checkForFirmwareUpdateFinished(QNetworkReply * reply)
|
||||
if (msgBox.clickedButton() == rnButton) {
|
||||
contributorsDialog *cd = new contributorsDialog(this,2,rn);
|
||||
cd->exec();
|
||||
int ret2 = QMessageBox::question(this, "Companion", tr("Do you want to download release %1 %2 now ?").arg(versionString), QMessageBox::Yes | QMessageBox::No);
|
||||
int ret2 = QMessageBox::question(this, "Companion", tr("Do you want to download release %1 now ?").arg(versionString), QMessageBox::Yes | QMessageBox::No);
|
||||
if (ret2 == QMessageBox::Yes)
|
||||
download = true;
|
||||
else
|
||||
@@ -438,7 +439,7 @@ void MainWindow::checkForFirmwareUpdateFinished(QNetworkReply * reply)
|
||||
}
|
||||
else if (version > currentVersion) {
|
||||
QString rn = GetFirmware(current_firmware_variant.id)->getReleaseNotesUrl();
|
||||
QAbstractButton *rnButton;
|
||||
QAbstractButton *rnButton = NULL;
|
||||
msgBox.setText("Companion");
|
||||
msgBox.setInformativeText(tr("A new version of %1 firmware is available:\n - current is %2\n - newer is %3\n\nDo you want to download it now ?").arg(current_firmware_variant.id).arg(currentVersionString).arg(versionString));
|
||||
QAbstractButton *YesButton = msgBox.addButton(trUtf8("Yes"), QMessageBox::YesRole);
|
||||
@@ -496,6 +497,7 @@ void MainWindow::checkForFirmwareUpdateFinished(QNetworkReply * reply)
|
||||
void MainWindow::startFirmwareDownload()
|
||||
{
|
||||
QString url = current_firmware_variant.getFirmwareUrl();
|
||||
qDebug() << url;
|
||||
QString ext = url.mid(url.lastIndexOf("."));
|
||||
QString defaultFilename = g.flashDir() + "/" + current_firmware_variant.id;
|
||||
if (g.profile[g.id()].renameFwFiles()) {
|
||||
@@ -562,7 +564,7 @@ void MainWindow::setIconThemeSize(int index)
|
||||
|
||||
void MainWindow::newFile()
|
||||
{
|
||||
MdiChild *child = createMdiChild();
|
||||
MdiChild * child = createMdiChild();
|
||||
child->newFile();
|
||||
child->show();
|
||||
}
|
||||
@@ -911,15 +913,13 @@ QString MainWindow::FindMassstoragePath(QString filename)
|
||||
DWORD dwMaxFileNameLength=256;
|
||||
DWORD dwFileSystemFlags=0;
|
||||
bool ret = GetVolumeInformationW( (WCHAR *) drive.absolutePath().utf16(),szVolumeName,256,&dwSerialNumber,&dwMaxFileNameLength,&dwFileSystemFlags,szFileSystemName,256);
|
||||
if(ret) {
|
||||
if (ret) {
|
||||
QString vName = QString::fromUtf16 ( (const ushort *) szVolumeName) ;
|
||||
if (vName.contains("TARANIS")) {
|
||||
temppath = drive.absolutePath();
|
||||
eepromfile = temppath;
|
||||
eepromfile.append("/" + filename);
|
||||
if (QFile::exists(eepromfile)) {
|
||||
return eepromfile;
|
||||
}
|
||||
temppath = drive.absolutePath();
|
||||
eepromfile = temppath;
|
||||
eepromfile.append("/" + filename);
|
||||
if (QFile::exists(eepromfile)) {
|
||||
return eepromfile;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -991,7 +991,6 @@ bool MainWindow::readFirmwareFromRadio(const QString filename)
|
||||
ad->setWindowIcon(CompanionIcon("read_flash.png"));
|
||||
ad->exec();
|
||||
delete ad;
|
||||
sleep(1);
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
@@ -1026,7 +1025,6 @@ bool MainWindow::writeFirmwareToRadio(const QString filename)
|
||||
ad->setWindowIcon(CompanionIcon("write_flash.png"));
|
||||
ad->exec();
|
||||
delete ad;
|
||||
sleep(1);
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
@@ -1055,64 +1053,87 @@ bool MainWindow::readEepromFromRadio(const QString filename, const QString messa
|
||||
if (IS_ARM(GetCurrentFirmware()->getBoard())) {
|
||||
QString path = FindMassstoragePath("EEPROM.BIN");
|
||||
if (path.isEmpty()) {
|
||||
taranisNotFoundDialog *tnfd = new taranisNotFoundDialog(this);
|
||||
tnfd->exec();
|
||||
// On previous OpenTX we called the EEPROM file "TARANIS.BIN" :(
|
||||
path = FindMassstoragePath("TARANIS.BIN");
|
||||
}
|
||||
else {
|
||||
if (path.isEmpty()) {
|
||||
// Mike's bootloader calls the EEPROM file "ERSKY9X.BIN" :(
|
||||
path = FindMassstoragePath("ERSKY9X.BIN");
|
||||
}
|
||||
if (!path.isEmpty()) {
|
||||
QStringList str;
|
||||
str << path << filename;
|
||||
avrOutputDialog *ad = new avrOutputDialog(this, "", str, message);
|
||||
ad->setWindowIcon(CompanionIcon("read_eeprom.png"));
|
||||
ad->exec();
|
||||
delete ad;
|
||||
sleep(1);
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
if (result == false && !IS_TARANIS(GetCurrentFirmware()->getBoard())) {
|
||||
QStringList str = GetReceiveEEpromCommand(filename);
|
||||
avrOutputDialog *ad = new avrOutputDialog(this, GetAvrdudeLocation(), str, message);
|
||||
ad->setWindowIcon(CompanionIcon("read_eeprom.png"));
|
||||
ad->exec();
|
||||
delete ad;
|
||||
sleep(1);
|
||||
result = true;
|
||||
}
|
||||
|
||||
if (!QFileInfo(filename).exists())
|
||||
if (result == false && IS_ARM(GetCurrentFirmware()->getBoard())) {
|
||||
RadioNotFoundDialog *dialog = new RadioNotFoundDialog(this);
|
||||
dialog->exec();
|
||||
delete dialog;
|
||||
}
|
||||
|
||||
if (!QFileInfo(filename).exists()) {
|
||||
result = false;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
bool MainWindow::writeEepromToRadio(const QString filename, const QString message)
|
||||
{
|
||||
bool result = false;
|
||||
|
||||
if (IS_ARM(GetCurrentFirmware()->getBoard())) {
|
||||
QString path = FindMassstoragePath("EEPROM.BIN");
|
||||
if (path.isEmpty()) {
|
||||
taranisNotFoundDialog *tnfd = new taranisNotFoundDialog(this);
|
||||
tnfd->exec();
|
||||
return false;
|
||||
// On previous OpenTX we called the EEPROM file "TARANIS.BIN" :(
|
||||
path = FindMassstoragePath("TARANIS.BIN");
|
||||
}
|
||||
else {
|
||||
if (path.isEmpty()) {
|
||||
// Mike's bootloader calls the EEPROM file "ERSKY9X.BIN" :(
|
||||
path = FindMassstoragePath("ERSKY9X.BIN");
|
||||
}
|
||||
if (!path.isEmpty()) {
|
||||
QStringList str;
|
||||
str << filename << path;
|
||||
avrOutputDialog *ad = new avrOutputDialog(this, "", str, message);
|
||||
ad->setWindowIcon(CompanionIcon("read_eeprom.png"));
|
||||
avrOutputDialog *ad = new avrOutputDialog(this, "", str, message, AVR_DIALOG_SHOW_DONE);
|
||||
ad->setWindowIcon(CompanionIcon("write_eeprom.png"));
|
||||
ad->exec();
|
||||
delete ad;
|
||||
sleep(1);
|
||||
return true;
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
if (result == false && !IS_TARANIS(GetCurrentFirmware()->getBoard())) {
|
||||
QStringList str = GetSendEEpromCommand(filename);
|
||||
avrOutputDialog *ad = new avrOutputDialog(this, GetAvrdudeLocation(), str, "Write Backup To Radio", AVR_DIALOG_SHOW_DONE);
|
||||
avrOutputDialog *ad = new avrOutputDialog(this, GetAvrdudeLocation(), str, "Write EEPROM To Radio", AVR_DIALOG_SHOW_DONE);
|
||||
ad->setWindowIcon(CompanionIcon("write_eeprom.png"));
|
||||
ad->exec();
|
||||
delete ad;
|
||||
return true;
|
||||
result = true;
|
||||
}
|
||||
|
||||
if (result == false && IS_ARM(GetCurrentFirmware()->getBoard())) {
|
||||
RadioNotFoundDialog *dialog = new RadioNotFoundDialog(this);
|
||||
dialog->exec();
|
||||
delete dialog;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void MainWindow::writeBackup()
|
||||
@@ -1244,11 +1265,8 @@ bool MainWindow::convertEEPROM(QString backupFile, QString restoreFile, QString
|
||||
if (!flash.isValid())
|
||||
return false;
|
||||
|
||||
unsigned int version = 0;
|
||||
unsigned int variant = 0;
|
||||
|
||||
QString fwEEprom = flash.getEEprom();
|
||||
version = fwEEprom.toInt();
|
||||
unsigned int version = flash.getEEpromVersion();
|
||||
unsigned int variant = flash.getEEpromVariant();
|
||||
|
||||
QFile file(backupFile);
|
||||
int eeprom_size = file.size();
|
||||
@@ -1310,7 +1328,7 @@ void MainWindow::writeFlash(QString fileToFlash)
|
||||
if (backupEnable) {
|
||||
QDateTime datetime;
|
||||
backupFile.clear();
|
||||
backupFile=backupPath+"/backup-"+QDateTime().currentDateTime().toString("yyyy-MM-dd-hhmmss")+".bin";
|
||||
backupFile = backupPath+"/backup-"+QDateTime().currentDateTime().toString("yyyy-MM-dd-hhmmss")+".bin";
|
||||
}
|
||||
|
||||
if (readEepromFromRadio(backupFile, tr("Backup Models and Settings From Radio"))) {
|
||||
@@ -1402,6 +1420,7 @@ void MainWindow::compare()
|
||||
void MainWindow::logFile()
|
||||
{
|
||||
logsDialog *fd = new logsDialog(this);
|
||||
fd->setWindowFlags(Qt::Window); //to show minimize an maximize buttons
|
||||
fd->setAttribute(Qt::WA_DeleteOnClose, true);
|
||||
fd->show();
|
||||
}
|
||||
@@ -1411,11 +1430,11 @@ void MainWindow::about()
|
||||
QString aboutStr = "<center><img src=\":/images/companion-title.png\"></center><br/>";
|
||||
aboutStr.append(tr("OpenTX Home Page: <a href='%1'>%1</a>").arg("http://www.open-tx.org"));
|
||||
aboutStr.append("<br/><br/>");
|
||||
aboutStr.append(tr("The OpenTX Companion project was originally forked from <a href='%2'>eePe</a>").arg("http://code.google.com/p/eepe"));
|
||||
aboutStr.append(tr("The OpenTX Companion project was originally forked from <a href='%1'>eePe</a>").arg("http://code.google.com/p/eepe"));
|
||||
aboutStr.append("<br/><br/>");
|
||||
aboutStr.append(tr("If you've found this program useful, please support by <a href='%1'>donating</a>").arg(DONATE_STR));
|
||||
aboutStr.append("<br/><br/>");
|
||||
aboutStr.append(tr("Version %1, %3").arg(C9X_VERSION).arg(__DATE__));
|
||||
aboutStr.append(QString("Version %1, %2").arg(C9X_VERSION).arg(__DATE__));
|
||||
aboutStr.append("<br/><br/>");
|
||||
aboutStr.append(tr("Copyright OpenTX Team") + "<br/>© 2011-2014<br/>");
|
||||
QMessageBox msgBox(this);
|
||||
@@ -1452,10 +1471,11 @@ void MainWindow::updateMenus()
|
||||
|
||||
MdiChild *MainWindow::createMdiChild()
|
||||
{
|
||||
MdiChild *child = new MdiChild();
|
||||
MdiChild * child = new MdiChild();
|
||||
mdiArea->addSubWindow(child);
|
||||
if(!child->parentWidget()->isMaximized() && !child->parentWidget()->isMinimized())
|
||||
if (!child->parentWidget()->isMaximized() && !child->parentWidget()->isMinimized()) {
|
||||
child->parentWidget()->resize(400, 400);
|
||||
}
|
||||
|
||||
connect(child, SIGNAL(copyAvailable(bool)),cutAct, SLOT(setEnabled(bool)));
|
||||
connect(child, SIGNAL(copyAvailable(bool)),copyAct, SLOT(setEnabled(bool)));
|
||||
@@ -1921,15 +1941,16 @@ void MainWindow::updateProfilesActions()
|
||||
}
|
||||
|
||||
void MainWindow::createProfile()
|
||||
{ int i;
|
||||
for (i=0; i<MAX_PROFILES && g.profile[i].existsOnDisk(); i++)
|
||||
{
|
||||
int i;
|
||||
for (i=0; i<MAX_PROFILES && g.profile[i].existsOnDisk(); i++)
|
||||
;
|
||||
if (i==MAX_PROFILES) //Failed to find free slot
|
||||
return;
|
||||
|
||||
// Copy current profile to new and give it a new name
|
||||
g.profile[i] = g.profile[g.id()];
|
||||
g.profile[i].name( QString(tr("New Radio")));
|
||||
g.profile[i].name(tr("New Radio"));
|
||||
|
||||
g.id(i);
|
||||
updateMenus();
|
||||
@@ -1937,7 +1958,7 @@ for (i=0; i<MAX_PROFILES && g.profile[i].existsOnDisk(); i++)
|
||||
|
||||
QString MainWindow::strippedName(const QString &fullFileName)
|
||||
{
|
||||
return QFileInfo(fullFileName).fileName();
|
||||
return QFileInfo(fullFileName).fileName();
|
||||
}
|
||||
|
||||
int MainWindow::getEpromVersion(QString fileName)
|
||||
@@ -1952,6 +1973,7 @@ int MainWindow::getEpromVersion(QString fileName)
|
||||
return -1;
|
||||
}
|
||||
int fileType = getFileType(fileName);
|
||||
#if 0
|
||||
if (fileType==FILE_TYPE_XML) {
|
||||
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()));
|
||||
@@ -1960,7 +1982,9 @@ int MainWindow::getEpromVersion(QString fileName)
|
||||
QTextStream inputStream(&file);
|
||||
XmlInterface(inputStream).load(testData);
|
||||
}
|
||||
else if (fileType==FILE_TYPE_HEX || fileType==FILE_TYPE_EEPE) { //read HEX file
|
||||
else
|
||||
#endif
|
||||
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 -1;
|
||||
|
||||
@@ -53,7 +53,6 @@
|
||||
#include "helpers.h"
|
||||
#include "appdata.h"
|
||||
#include "wizarddialog.h"
|
||||
#include "taranisnotfound.h"
|
||||
#include <QFileInfo>
|
||||
#include "googleanalytics.h"
|
||||
|
||||
@@ -72,13 +71,13 @@ MdiChild::MdiChild():
|
||||
fileChanged(false)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
this->setWindowIcon(CompanionIcon("open.png"));
|
||||
setWindowIcon(CompanionIcon("open.png"));
|
||||
ui->SimulateTxButton->setIcon(CompanionIcon("simulate.png"));
|
||||
setAttribute(Qt::WA_DeleteOnClose);
|
||||
|
||||
eepromInterfaceChanged();
|
||||
|
||||
if(!(this->isMaximized() || this->isMinimized())) {
|
||||
if (!(this->isMaximized() || this->isMinimized())) {
|
||||
adjustSize();
|
||||
}
|
||||
|
||||
@@ -242,6 +241,7 @@ bool MdiChild::loadFile(const QString &fileName, bool resetCurrentFile)
|
||||
|
||||
int fileType = getFileType(fileName);
|
||||
|
||||
#if 0
|
||||
if (fileType==FILE_TYPE_XML) {
|
||||
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { //reading HEX TEXT file
|
||||
QMessageBox::critical(this, tr("Error"),
|
||||
@@ -253,7 +253,9 @@ bool MdiChild::loadFile(const QString &fileName, bool resetCurrentFile)
|
||||
QTextStream inputStream(&file);
|
||||
XmlInterface(inputStream).load(radioData);
|
||||
}
|
||||
else if (fileType==FILE_TYPE_HEX || fileType==FILE_TYPE_EEPE) { //read HEX file
|
||||
else
|
||||
#endif
|
||||
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.")
|
||||
@@ -416,6 +418,7 @@ bool MdiChild::saveFile(const QString &fileName, bool setCurrent)
|
||||
|
||||
QTextStream outputStream(&file);
|
||||
|
||||
#if 0
|
||||
if (fileType==FILE_TYPE_XML) {
|
||||
if (!XmlInterface(outputStream).save(radioData)) {
|
||||
QMessageBox::warning(this, tr("Error"),tr("Cannot write file %1:\n%2.").arg(myFile).arg(file.errorString()));
|
||||
@@ -423,7 +426,9 @@ bool MdiChild::saveFile(const QString &fileName, bool setCurrent)
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (fileType==FILE_TYPE_HEX || fileType==FILE_TYPE_EEPE) { // write hex
|
||||
else
|
||||
#endif
|
||||
if (fileType==FILE_TYPE_HEX || fileType==FILE_TYPE_EEPE) { // write hex
|
||||
if (fileType==FILE_TYPE_EEPE)
|
||||
outputStream << EEPE_EEPROM_FILE_HEADER << "\n";
|
||||
|
||||
|
||||
@@ -69,7 +69,7 @@ Channels::Channels(QWidget * parent, ModelData & model, GeneralSettings & genera
|
||||
minSB->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
|
||||
minSB->setAccelerated(true);
|
||||
minSB->setDecimals(1);
|
||||
minSB->setMinimum(model.extendedLimits ? -125 : -100);
|
||||
minSB->setMinimum(-model.getChannelsMax());
|
||||
minSB->setSingleStep(0.1);
|
||||
minSB->setMaximum(0);
|
||||
minSB->setValue(float(model.limitData[i].min) / 10);
|
||||
@@ -85,7 +85,7 @@ Channels::Channels(QWidget * parent, ModelData & model, GeneralSettings & genera
|
||||
maxSB->setDecimals(1);
|
||||
maxSB->setMinimum(0);
|
||||
maxSB->setSingleStep(0.1);
|
||||
maxSB->setMaximum(model.extendedLimits ? 125 : 100);
|
||||
maxSB->setMaximum(model.getChannelsMax());
|
||||
maxSB->setValue(float(model.limitData[i].max) / 10);
|
||||
connect(maxSB, SIGNAL(editingFinished()), this, SLOT(maxEdited()));
|
||||
gridLayout->addWidget(maxSB, i+1, col++, 1, 1);
|
||||
@@ -136,6 +136,8 @@ Channels::Channels(QWidget * parent, ModelData & model, GeneralSettings & genera
|
||||
}
|
||||
// Push the rows up
|
||||
addVSpring(gridLayout, 0,firmware->getCapability(Outputs)+1);
|
||||
|
||||
disableMouseScrolling();
|
||||
}
|
||||
|
||||
Channels::~Channels()
|
||||
@@ -192,8 +194,8 @@ void Channels::refreshExtendedLimits()
|
||||
QDoubleSpinBox * minDSB = minSpins[i];
|
||||
QDoubleSpinBox * maxDSB = maxSpins[i];
|
||||
|
||||
minDSB->setMinimum(model.extendedLimits ? -125 : -100);
|
||||
maxDSB->setMaximum(model.extendedLimits ? 125 : 100);
|
||||
minDSB->setMinimum(-model.getChannelsMax());
|
||||
maxDSB->setMaximum(model.getChannelsMax());
|
||||
}
|
||||
emit modified();
|
||||
}
|
||||
|
||||
@@ -180,6 +180,8 @@ Curves::Curves(QWidget * parent, ModelData & model, GeneralSettings & generalSet
|
||||
addTemplate(tr("Symmetrical f(x)=-f(-x)"), CURVE_COEFF_ENABLE, curveSymmetricalY);
|
||||
addTemplate(tr("Symmetrical f(x)=f(-x)"), CURVE_COEFF_ENABLE | CURVE_YMID_ENABLE, curveSymmetricalX);
|
||||
|
||||
disableMouseScrolling();
|
||||
|
||||
lock = false;
|
||||
}
|
||||
|
||||
@@ -246,12 +248,13 @@ void Curves::updateCurveType()
|
||||
index = model.curves[currentCurve].count - 2;
|
||||
}
|
||||
else {
|
||||
ui->curveSmooth->hide();
|
||||
if (model.curves[currentCurve].count == 5)
|
||||
index += 2;
|
||||
index = 1;
|
||||
else if (model.curves[currentCurve].count == 9)
|
||||
index += 4;
|
||||
index = 2;
|
||||
else if (model.curves[currentCurve].count == 17)
|
||||
index += 6;
|
||||
index = 3;
|
||||
}
|
||||
|
||||
ui->curvePoints->setCurrentIndex(index);
|
||||
|
||||
@@ -87,7 +87,7 @@ CustomFunctionsPanel::CustomFunctionsPanel(QWidget * parent, ModelData & model,
|
||||
lang="en";
|
||||
path.append(lang);
|
||||
QDir qd(path);
|
||||
int vml= firmware->getCapability(VoicesMaxLength)+4;
|
||||
int vml= firmware->getCapability(VoicesMaxLength);
|
||||
if (qd.exists()) {
|
||||
QStringList filters;
|
||||
filters << "*.wav" << "*.WAV";
|
||||
@@ -196,6 +196,8 @@ CustomFunctionsPanel::CustomFunctionsPanel(QWidget * parent, ModelData & model,
|
||||
// Push rows upward
|
||||
addDoubleSpring(gridLayout, 5, num_fsw+1);
|
||||
|
||||
disableMouseScrolling();
|
||||
|
||||
lock = false;
|
||||
}
|
||||
|
||||
@@ -264,7 +266,7 @@ void CustomFunctionsPanel::playMusic()
|
||||
else {
|
||||
phononCurrent = index;
|
||||
clickObject->clear();
|
||||
clickObject->setCurrentSource(QUrl(track));
|
||||
clickObject->setCurrentSource(QUrl("file://"+track));
|
||||
clickObject->play();
|
||||
playBT[index]->setIcon(CompanionIcon("stop.png"));
|
||||
}
|
||||
@@ -376,7 +378,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified)
|
||||
widgetsMask |= CUSTOM_FUNCTION_SOURCE_PARAM + CUSTOM_FUNCTION_ENABLE;
|
||||
}
|
||||
else if (index==FuncPlaySound || index==FuncPlayHaptic || index==FuncPlayValue || index==FuncPlayPrompt || index==FuncPlayBoth || index==FuncBackgroundMusic) {
|
||||
if (index != FuncBackgroundMusic && firmware->getCapability(HasFuncRepeat)) {
|
||||
if (index != FuncBackgroundMusic) {
|
||||
widgetsMask |= CUSTOM_FUNCTION_REPEAT;
|
||||
fswtchRepeat[i]->update();
|
||||
}
|
||||
@@ -571,10 +573,10 @@ void CustomFunctionsPanel::fsw_customContextMenuRequested(QPoint pos)
|
||||
bool hasData = mimeData->hasFormat("application/x-companion-fsw");
|
||||
|
||||
QMenu contextMenu;
|
||||
contextMenu.addAction(CompanionIcon("clear.png"), tr("&Delete"),this,SLOT(fswDelete()),tr("Delete"));
|
||||
contextMenu.addAction(CompanionIcon("copy.png"), tr("&Copy"),this,SLOT(fswCopy()),tr("Ctrl+C"));
|
||||
contextMenu.addAction(CompanionIcon("cut.png"), tr("&Cut"),this,SLOT(fswCut()),tr("Ctrl+X"));
|
||||
contextMenu.addAction(CompanionIcon("paste.png"), tr("&Paste"),this,SLOT(fswPaste()),tr("Ctrl+V"))->setEnabled(hasData);
|
||||
contextMenu.addAction(CompanionIcon("clear.png"), tr("&Delete"),this,SLOT(fswDelete()),tr("Delete"));
|
||||
|
||||
contextMenu.exec(globalPos);
|
||||
}
|
||||
|
||||
@@ -18,10 +18,18 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
|
||||
setWindowTitle(tr("Edit %1").arg(getInputStr(model, ed->chn)));
|
||||
QRegExp rx(CHAR_FOR_NAMES_REGEX);
|
||||
|
||||
if (IS_TARANIS(GetEepromInterface()->getBoard()))
|
||||
gvGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, 100, -100, 100);
|
||||
else
|
||||
gvGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, 100, 0, 100);
|
||||
if (IS_TARANIS(GetEepromInterface()->getBoard())) {
|
||||
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, 100, -100, 100);
|
||||
gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, ed->offset, 0, -100, 100);
|
||||
}
|
||||
else {
|
||||
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, 100, 0, 100);
|
||||
gvOffsetGroup = NULL;
|
||||
ui->offsetLabel->hide();
|
||||
ui->offsetGV->hide();
|
||||
ui->offsetSB->hide();
|
||||
ui->offsetCB->hide();
|
||||
}
|
||||
|
||||
curveGroup = new CurveGroup(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueCB, ui->curveValueSB, ed->curve);
|
||||
|
||||
@@ -105,7 +113,8 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
|
||||
|
||||
ExpoDialog::~ExpoDialog()
|
||||
{
|
||||
delete gvGroup;
|
||||
delete gvWeightGroup;
|
||||
delete gvOffsetGroup;
|
||||
delete curveGroup;
|
||||
delete ui;
|
||||
}
|
||||
|
||||
@@ -31,7 +31,8 @@ class ExpoDialog : public QDialog {
|
||||
FirmwareInterface * firmware;
|
||||
ExpoData * ed;
|
||||
char * inputName;
|
||||
GVarGroup * gvGroup;
|
||||
GVarGroup * gvWeightGroup;
|
||||
GVarGroup * gvOffsetGroup;
|
||||
CurveGroup * curveGroup;
|
||||
};
|
||||
|
||||
|
||||
@@ -30,10 +30,10 @@
|
||||
<normaloff>:/icon.png</normaloff>:/icon.png</iconset>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="sourceCB">
|
||||
<property name="whatsThis">
|
||||
<string>Source for the mixer.</string>
|
||||
<item row="9" column="0">
|
||||
<widget class="QLabel" name="label_phases">
|
||||
<property name="text">
|
||||
<string>Flight modes</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -44,20 +44,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="inputName">
|
||||
<property name="maxLength">
|
||||
<number>6</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Weight</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,0,1,0">
|
||||
<item>
|
||||
@@ -92,14 +78,28 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QLabel" name="label_phases">
|
||||
<property name="text">
|
||||
<string>Flight modes</string>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="inputName">
|
||||
<property name="maxLength">
|
||||
<number>6</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="1">
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="sourceCB">
|
||||
<property name="whatsThis">
|
||||
<string>Source for the mixer.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Weight</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="1">
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="lb_FP0">
|
||||
@@ -256,14 +256,14 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<item row="10" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Switch</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="1">
|
||||
<item row="10" column="1">
|
||||
<widget class="QComboBox" name="switchesCB">
|
||||
<property name="whatsThis">
|
||||
<string>Switch used to enable the line.
|
||||
@@ -271,14 +271,14 @@ If blank then the input is considered to be "ON" all the time.</string
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="0">
|
||||
<item row="12" column="0">
|
||||
<widget class="QLabel" name="sideLabel">
|
||||
<property name="text">
|
||||
<string>Stick Side</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="1">
|
||||
<item row="12" column="1">
|
||||
<widget class="QComboBox" name="sideCB">
|
||||
<item>
|
||||
<property name="text">
|
||||
@@ -297,7 +297,7 @@ If blank then the input is considered to be "ON" all the time.</string
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="0" colspan="2">
|
||||
<item row="14" column="0" colspan="2">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
@@ -316,7 +316,7 @@ If blank then the input is considered to be "ON" all the time.</string
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="12" column="0" colspan="2">
|
||||
<item row="13" column="0" colspan="2">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
@@ -370,14 +370,14 @@ If blank then the input is considered to be "ON" all the time.</string
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<item row="8" column="0">
|
||||
<widget class="QLabel" name="label_curves">
|
||||
<property name="text">
|
||||
<string>Curve</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<item row="8" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0,1,0">
|
||||
<item>
|
||||
<widget class="QComboBox" name="curveTypeCB">
|
||||
@@ -429,6 +429,47 @@ If blank then the input is considered to be "ON" all the time.</string
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QLabel" name="offsetLabel">
|
||||
<property name="text">
|
||||
<string>Offset</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="1">
|
||||
<layout class="QHBoxLayout" name="offsetLayout" stretch="0,0,1,0">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="offsetGV">
|
||||
<property name="text">
|
||||
<string>GV</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="offsetSB"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="offsetCB">
|
||||
<property name="whatsThis">
|
||||
<string>The source for the mixer</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="offsetSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
|
||||
@@ -121,7 +121,7 @@ FlightModePanel::FlightModePanel(QWidget * parent, ModelData & model, int phaseI
|
||||
}
|
||||
|
||||
// GVars
|
||||
if (gvCount > 0) {
|
||||
if (gvCount > 0 && (firmware->getCapability(GvarsFlightModes) || phaseIdx == 0) ) {
|
||||
QGridLayout *gvLayout = new QGridLayout(ui->gvGB);
|
||||
for (int i=0; i<gvCount; i++) {
|
||||
int col = 0;
|
||||
@@ -171,6 +171,8 @@ FlightModePanel::FlightModePanel(QWidget * parent, ModelData & model, int phaseI
|
||||
ui->gvGB->hide();
|
||||
}
|
||||
|
||||
disableMouseScrolling();
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -200,21 +202,14 @@ void FlightModePanel::update()
|
||||
trimUpdate(i);
|
||||
}
|
||||
|
||||
for (int i=0; i<gvCount; i++) {
|
||||
gvNames[i]->setText(model.gvars_names[i]);
|
||||
gvValues[i]->setDisabled(false);
|
||||
int idx = phase.gvars[i];
|
||||
PhaseData *phasegvar = &phase;
|
||||
while (idx > 1024) {
|
||||
idx -= 1025;
|
||||
phasegvar = &model.phaseData[idx];
|
||||
idx = phasegvar->gvars[i];
|
||||
gvValues[i]->setDisabled(true);
|
||||
}
|
||||
if (IS_TARANIS(GetEepromInterface()->getBoard())) {
|
||||
gvValues[i]->setValue(phasegvar->gvars[i]);
|
||||
if (phaseIdx == 0)
|
||||
if (ui->gvGB->isVisible()) {
|
||||
for (int i=0; i<gvCount; i++) {
|
||||
gvNames[i]->setText(model.gvars_names[i]);
|
||||
gvValues[i]->setDisabled(model.isGVarLinked(phaseIdx, i));
|
||||
gvValues[i]->setValue(model.getGVarValue(phaseIdx, i));
|
||||
if (IS_TARANIS(GetEepromInterface()->getBoard()) && phaseIdx == 0) {
|
||||
gvPopups[i]->setChecked(model.gvars_popups[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -304,14 +299,6 @@ void FlightModePanel::GVName_editingFinished()
|
||||
}
|
||||
}
|
||||
|
||||
void FlightModePanel::GVSource_currentIndexChanged(int index)
|
||||
{
|
||||
QComboBox *comboBox = qobject_cast<QComboBox*>(sender());
|
||||
int gvar = comboBox->property("index").toInt();
|
||||
model.gvsource[gvar] = index;
|
||||
emit modified();
|
||||
}
|
||||
|
||||
void FlightModePanel::phaseGVUse_currentIndexChanged(int index)
|
||||
{
|
||||
if (!lock) {
|
||||
|
||||
@@ -35,7 +35,6 @@ class FlightModePanel : public ModelPanel
|
||||
void phaseTrim_valueChanged();
|
||||
void phaseTrimSlider_valueChanged();
|
||||
void GVName_editingFinished();
|
||||
void GVSource_currentIndexChanged(int index);
|
||||
void phaseGVValue_editingFinished();
|
||||
void phaseGVUse_currentIndexChanged(int index);
|
||||
void phaseGVPopupToggled(bool checked);
|
||||
|
||||
@@ -14,6 +14,8 @@ HeliPanel::HeliPanel(QWidget *parent, ModelData & model, GeneralSettings & gener
|
||||
connect(ui->swashInvertELE, SIGNAL(stateChanged(int)), this, SLOT(edited()));
|
||||
connect(ui->swashInvertAIL, SIGNAL(stateChanged(int)), this, SLOT(edited()));
|
||||
connect(ui->swashInvertCOL, SIGNAL(stateChanged(int)), this, SLOT(edited()));
|
||||
|
||||
disableMouseScrolling();
|
||||
}
|
||||
|
||||
HeliPanel::~HeliPanel()
|
||||
|
||||
@@ -162,6 +162,7 @@ QString InputsPanel::getInputText(int dest, bool * new_ch)
|
||||
}
|
||||
|
||||
str += " " + tr("Weight(%1)").arg(getGVarString(md->weight));
|
||||
if (md->offset) str += " " + tr("Offset(%1)").arg(getGVarString(md->offset));
|
||||
|
||||
if (firmware->getCapability(VirtualInputs)) {
|
||||
str += " " + tr("Source(%1)").arg(md->srcRaw.toString());
|
||||
|
||||
@@ -116,6 +116,9 @@ LogicalSwitchesPanel::LogicalSwitchesPanel(QWidget * parent, ModelData & model,
|
||||
}
|
||||
// Push rows upward
|
||||
addVSpring(gridLayout,0,firmware->getCapability(LogicalSwitches)+1);
|
||||
|
||||
disableMouseScrolling();
|
||||
|
||||
lock = false;
|
||||
}
|
||||
|
||||
@@ -437,10 +440,10 @@ void LogicalSwitchesPanel::csw_customContextMenuRequested(QPoint pos)
|
||||
bool hasData = mimeData->hasFormat("application/x-companion-csw");
|
||||
|
||||
QMenu contextMenu;
|
||||
contextMenu.addAction(CompanionIcon("clear.png"), tr("&Delete"),this,SLOT(cswDelete()),tr("Delete"));
|
||||
contextMenu.addAction(CompanionIcon("copy.png"), tr("&Copy"),this,SLOT(cswCopy()),tr("Ctrl+C"));
|
||||
contextMenu.addAction(CompanionIcon("cut.png"), tr("&Cut"),this,SLOT(cswCut()),tr("Ctrl+X"));
|
||||
contextMenu.addAction(CompanionIcon("paste.png"), tr("&Paste"),this,SLOT(cswPaste()),tr("Ctrl+V"))->setEnabled(hasData);
|
||||
contextMenu.addAction(CompanionIcon("clear.png"), tr("&Delete"),this,SLOT(cswDelete()),tr("Delete"));
|
||||
|
||||
contextMenu.exec(globalPos);
|
||||
}
|
||||
|
||||
@@ -191,9 +191,8 @@ QString MixesPanel::getMixerText(int dest, bool * new_ch)
|
||||
str += " " + Qt::escape(tr("Switch(%1)").arg(md->swtch.toString()));
|
||||
}
|
||||
|
||||
if (md->carryTrim) {
|
||||
str += " " + Qt::escape(tr("NoTrim"));
|
||||
}
|
||||
if (md->carryTrim>0) str += " " + Qt::escape(tr("NoTrim"));
|
||||
else if (md->carryTrim<0) str += " " + RawSource(SOURCE_TYPE_TRIM, (-(md->carryTrim)-1)).toString();
|
||||
|
||||
if (firmware->getCapability(HasNoExpo) && md->noExpo) str += " " + Qt::escape(tr("No DR/Expo"));
|
||||
if (md->sOffset) str += " " + Qt::escape(tr("Offset(%1)").arg(getGVarString(md->sOffset)));
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
#include "modelpanel.h"
|
||||
#include <QLabel>
|
||||
#include <QComboBox>
|
||||
#include <QSpinBox>
|
||||
|
||||
ModelPanel::ModelPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware):
|
||||
QWidget(parent),
|
||||
@@ -57,3 +59,44 @@ void ModelPanel::addDoubleSpring(QGridLayout * gridLayout, int col, int row)
|
||||
gridLayout->addItem(spacer, row, col);
|
||||
}
|
||||
|
||||
bool ModelPanel::eventFilter(QObject *object, QEvent * event)
|
||||
{
|
||||
QWidget * widget = qobject_cast<QWidget*>(object);
|
||||
if (widget) {
|
||||
if (event->type() == QEvent::Wheel) {
|
||||
if (widget->focusPolicy() == Qt::WheelFocus) {
|
||||
event->accept();
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
event->ignore();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (event->type() == QEvent::FocusIn) {
|
||||
widget->setFocusPolicy(Qt::WheelFocus);
|
||||
}
|
||||
else if (event->type() == QEvent::FocusOut) {
|
||||
widget->setFocusPolicy(Qt::StrongFocus);
|
||||
}
|
||||
}
|
||||
return QWidget::eventFilter(object, event);
|
||||
}
|
||||
|
||||
void ModelPanel::disableMouseScrolling()
|
||||
{
|
||||
Q_FOREACH(QComboBox * cb, findChildren<QComboBox*>()) {
|
||||
cb->installEventFilter(this);
|
||||
cb->setFocusPolicy(Qt::StrongFocus);
|
||||
}
|
||||
|
||||
Q_FOREACH(QAbstractSpinBox * sb, findChildren<QAbstractSpinBox*>()) {
|
||||
sb->installEventFilter(this);
|
||||
sb->setFocusPolicy(Qt::StrongFocus);
|
||||
}
|
||||
|
||||
Q_FOREACH(QSlider * slider, findChildren<QSlider*>()) {
|
||||
slider->installEventFilter(this);
|
||||
slider->setFocusPolicy(Qt::StrongFocus);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,8 @@ class ModelPanel : public QWidget
|
||||
void addHSpring(QGridLayout *, int col, int row);
|
||||
void addVSpring(QGridLayout *, int col, int row);
|
||||
void addDoubleSpring(QGridLayout *, int col, int row);
|
||||
virtual bool eventFilter(QObject *obj, QEvent *event);
|
||||
void disableMouseScrolling();
|
||||
};
|
||||
|
||||
#endif // CHANNELS_H
|
||||
|
||||
@@ -22,10 +22,13 @@ TimerPanel::TimerPanel(QWidget *parent, ModelData & model, TimerData & timer, Ge
|
||||
ui->persistentValue->hide();
|
||||
}
|
||||
|
||||
ui->countdownBeep->addItem(tr("Silent"));
|
||||
ui->countdownBeep->addItem(tr("Beeps"));
|
||||
ui->countdownBeep->setField(&timer.countdownBeep, this);
|
||||
ui->countdownBeep->addItem(tr("Silent"), 0);
|
||||
ui->countdownBeep->addItem(tr("Beeps"), 1);
|
||||
if (IS_ARM(GetEepromInterface()->getBoard()) || IS_2560(GetEepromInterface()->getBoard()))
|
||||
ui->countdownBeep->addItem(tr("Voice"));
|
||||
ui->countdownBeep->addItem(tr("Voice"), 2);
|
||||
|
||||
disableMouseScrolling();
|
||||
|
||||
lock = false;
|
||||
}
|
||||
@@ -56,7 +59,6 @@ void TimerPanel::update()
|
||||
ui->persistentValue->setText(QString(" %1(%2:%3:%4)").arg(sign<0 ? "-" :" ").arg(hours, 2, 10, QLatin1Char('0')).arg(minutes, 2, 10, QLatin1Char('0')).arg(seconds, 2, 10, QLatin1Char('0')));
|
||||
}
|
||||
|
||||
ui->countdownBeep->setCurrentIndex(timer.countdownBeep);
|
||||
ui->minuteBeep->setChecked(timer.minuteBeep);
|
||||
}
|
||||
|
||||
@@ -80,12 +82,6 @@ void TimerPanel::on_persistent_toggled(bool checked)
|
||||
emit modified();
|
||||
}
|
||||
|
||||
void TimerPanel::on_countdownBeep_currentIndexChanged(int index)
|
||||
{
|
||||
timer.countdownBeep = index;
|
||||
emit modified();
|
||||
}
|
||||
|
||||
void TimerPanel::on_minuteBeep_toggled(bool checked)
|
||||
{
|
||||
timer.minuteBeep = checked;
|
||||
@@ -150,7 +146,7 @@ ModulePanel::ModulePanel(QWidget *parent, ModelData & model, ModuleData & module
|
||||
label->setText(QString::number(i+1));
|
||||
QDoubleSpinBox * spinbox = new QDoubleSpinBox(this);
|
||||
spinbox->setMinimumSize(QSize(20, 0));
|
||||
spinbox->setRange(-100, 100);
|
||||
spinbox->setRange(-150, 150);
|
||||
spinbox->setSingleStep(0.1);
|
||||
spinbox->setDecimals(1);
|
||||
spinbox->setValue(((double)module.failsafeChannels[i]*100)/1024);
|
||||
@@ -163,6 +159,8 @@ ModulePanel::ModulePanel(QWidget *parent, ModelData & model, ModuleData & module
|
||||
}
|
||||
}
|
||||
|
||||
disableMouseScrolling();
|
||||
|
||||
lock = false;
|
||||
}
|
||||
|
||||
@@ -234,7 +232,7 @@ void ModulePanel::update()
|
||||
ui->ppmDelay->setValue(module.ppmDelay);
|
||||
ui->label_ppmFrameLength->setVisible(mask & MASK_PPM_FIELDS);
|
||||
ui->ppmFrameLength->setVisible(mask & MASK_PPM_FIELDS);
|
||||
ui->ppmFrameLength->setMinimum(module.channelsCount*(model.extendedLimits ? 2.250 :2)+3.5);
|
||||
ui->ppmFrameLength->setMinimum(module.channelsCount*(model.extendedLimits ? 2.250 : 2)+3.5);
|
||||
ui->ppmFrameLength->setMaximum(firmware->getCapability(PPMFrameLength));
|
||||
ui->ppmFrameLength->setValue(22.5+((double)module.ppmFrameLength)*0.5);
|
||||
|
||||
@@ -424,6 +422,9 @@ SetupPanel::SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & gen
|
||||
ui->centerBeepLayout->addWidget(checkbox, 0, i+1);
|
||||
connect(checkbox, SIGNAL(toggled(bool)), this, SLOT(onBeepCenterToggled(bool)));
|
||||
centerBeepCheckboxes << checkbox;
|
||||
if (!IS_TARANIS_PLUS(firmware->getBoard()) && i==6) {
|
||||
checkbox->hide();
|
||||
}
|
||||
}
|
||||
|
||||
// Startup switches warnings
|
||||
@@ -472,7 +473,7 @@ SetupPanel::SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & gen
|
||||
ui->potWarningLayout->addWidget(cb, 0, i+1);
|
||||
connect(cb, SIGNAL(toggled(bool)), this, SLOT(potWarningToggled(bool)));
|
||||
potWarningCheckboxes << cb;
|
||||
if (!IS_TARANIS_PLUS(firmware->getBoard())) {
|
||||
if (!IS_TARANIS_PLUS(firmware->getBoard()) && i==2) {
|
||||
cb->hide();
|
||||
}
|
||||
}
|
||||
@@ -481,6 +482,9 @@ SetupPanel::SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & gen
|
||||
ui->label_potWarning->hide();
|
||||
ui->potWarningMode->hide();
|
||||
}
|
||||
|
||||
disableMouseScrolling();
|
||||
|
||||
lock = false;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ class TimerPanel : public ModelPanel
|
||||
void on_value_editingFinished();
|
||||
void on_persistent_toggled(bool checked);
|
||||
void on_minuteBeep_toggled(bool checked);
|
||||
void on_countdownBeep_currentIndexChanged(int index);
|
||||
|
||||
private:
|
||||
TimerData & timer;
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="countdownBeep"/>
|
||||
<widget class="QUnsignedAutoComboBox" name="countdownBeep"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="minuteBeep">
|
||||
@@ -79,6 +79,13 @@
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>QUnsignedAutoComboBox</class>
|
||||
<extends>QComboBox</extends>
|
||||
<header>qautocombobox.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
||||
@@ -50,6 +50,8 @@ TelemetryAnalog::TelemetryAnalog(QWidget *parent, FrSkyChannelData & analog, Mod
|
||||
else {
|
||||
ui->label_Max->setText(tr("Range"));
|
||||
}
|
||||
|
||||
disableMouseScrolling();
|
||||
}
|
||||
|
||||
void TelemetryAnalog::update()
|
||||
@@ -324,6 +326,8 @@ TelemetryCustomScreen::TelemetryCustomScreen(QWidget *parent, ModelData & model,
|
||||
ui->screenBarsLayout->addWidget(maxSB[l], l, 3, 1, 1);
|
||||
}
|
||||
|
||||
disableMouseScrolling();
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
@@ -476,6 +480,14 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
|
||||
model.frsky.usrProto = 1;
|
||||
}
|
||||
|
||||
if (IS_ARM(firmware->getBoard())) {
|
||||
ui->telemetryProtocol->setCurrentIndex(model.telemetryProtocol);
|
||||
}
|
||||
else {
|
||||
ui->telemetryProtocolLabel->hide();
|
||||
ui->telemetryProtocol->hide();
|
||||
}
|
||||
|
||||
analogs[0] = new TelemetryAnalog(this, model.frsky.channels[0], model, generalSettings, firmware);
|
||||
ui->A1Layout->addWidget(analogs[0]);
|
||||
connect(analogs[0], SIGNAL(modified()), this, SLOT(onAnalogModified()));
|
||||
@@ -508,6 +520,8 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
|
||||
ui->bladesCount->setMaximum(128);
|
||||
}
|
||||
|
||||
disableMouseScrolling();
|
||||
|
||||
setup();
|
||||
}
|
||||
|
||||
@@ -522,20 +536,6 @@ void TelemetryPanel::setup()
|
||||
|
||||
lock = true;
|
||||
|
||||
if (IS_ARM(firmware->getBoard())) {
|
||||
ui->rxbattAlarm1DSB->setValue((13.2*model.frsky.rxBattAlarms[0])/255);
|
||||
ui->rxbattAlarm2DSB->setValue((13.2*model.frsky.rxBattAlarms[1])/255);
|
||||
}
|
||||
else {
|
||||
ui->rxbattLabel->hide();
|
||||
ui->rxbattAlarm1Label->hide();
|
||||
ui->rxbattAlarm2Label->hide();
|
||||
ui->rxbattAlarm1CB->hide();
|
||||
ui->rxbattAlarm2CB->hide();
|
||||
ui->rxbattAlarm1DSB->hide();
|
||||
ui->rxbattAlarm2DSB->hide();
|
||||
}
|
||||
|
||||
ui->rssiAlarm1SB->setValue(model.frsky.rssiAlarms[0].value);
|
||||
ui->rssiAlarm2SB->setValue(model.frsky.rssiAlarms[1].value);
|
||||
if (!IS_TARANIS(GetEepromInterface()->getBoard())) {
|
||||
@@ -684,9 +684,6 @@ void TelemetryPanel::populateVoltsSource()
|
||||
{
|
||||
QUnsignedAutoComboBox * cb = ui->frskyVoltCB;
|
||||
cb->setField(&model.frsky.voltsSource, this);
|
||||
if (IS_ARM(firmware->getBoard())) {
|
||||
cb->addItem(tr("RxBatt"), TELEMETRY_VOLTS_SOURCE_RXBATT);
|
||||
}
|
||||
cb->addItem(tr("A1"), TELEMETRY_VOLTS_SOURCE_A1);
|
||||
cb->addItem(tr("A2"), TELEMETRY_VOLTS_SOURCE_A2);
|
||||
if (IS_ARM(firmware->getBoard())) {
|
||||
@@ -711,6 +708,12 @@ void TelemetryPanel::populateCurrentSource()
|
||||
cb->addItem(tr("FAS"), TELEMETRY_CURRENT_SOURCE_FAS);
|
||||
}
|
||||
|
||||
void TelemetryPanel::on_telemetryProtocol_currentIndexChanged(int index)
|
||||
{
|
||||
model.telemetryProtocol = index;
|
||||
emit modified();
|
||||
}
|
||||
|
||||
void TelemetryPanel::onAnalogModified()
|
||||
{
|
||||
emit modified();
|
||||
@@ -718,14 +721,14 @@ void TelemetryPanel::onAnalogModified()
|
||||
|
||||
void TelemetryPanel::on_frskyUnitsCB_currentIndexChanged(int index)
|
||||
{
|
||||
model.frsky.imperial = index;
|
||||
emit modified();
|
||||
model.frsky.imperial = index;
|
||||
emit modified();
|
||||
}
|
||||
|
||||
void TelemetryPanel::on_bladesCount_editingFinished()
|
||||
{
|
||||
model.frsky.blades = ui->bladesCount->value();
|
||||
emit modified();
|
||||
model.frsky.blades = ui->bladesCount->value();
|
||||
emit modified();
|
||||
}
|
||||
|
||||
void TelemetryPanel::on_frskyProtoCB_currentIndexChanged(int index)
|
||||
@@ -776,18 +779,6 @@ void TelemetryPanel::on_varioLimitMin_DSB_editingFinished()
|
||||
emit modified();
|
||||
}
|
||||
|
||||
void TelemetryPanel::on_rxbattAlarm1DSB_editingFinished()
|
||||
{
|
||||
model.frsky.rxBattAlarms[0] = round(ui->rxbattAlarm1DSB->value()/(13.2/255));
|
||||
emit modified();
|
||||
}
|
||||
|
||||
void TelemetryPanel::on_rxbattAlarm2DSB_editingFinished()
|
||||
{
|
||||
model.frsky.rxBattAlarms[1] = round(ui->rxbattAlarm2DSB->value()/(13.2/255));
|
||||
emit modified();
|
||||
}
|
||||
|
||||
void TelemetryPanel::on_varioLimitMax_DSB_editingFinished()
|
||||
{
|
||||
model.frsky.varioMax = round(ui->varioLimitMax_DSB->value()-10);
|
||||
|
||||
@@ -83,6 +83,7 @@ class TelemetryPanel : public ModelPanel
|
||||
virtual ~TelemetryPanel();
|
||||
|
||||
private slots:
|
||||
void on_telemetryProtocol_currentIndexChanged(int index);
|
||||
void onAnalogModified();
|
||||
void on_frskyProtoCB_currentIndexChanged(int index);
|
||||
void on_frskyUnitsCB_currentIndexChanged(int index);
|
||||
@@ -92,8 +93,6 @@ class TelemetryPanel : public ModelPanel
|
||||
void on_rssiAlarm2CB_currentIndexChanged(int index);
|
||||
void on_rssiAlarm1SB_editingFinished();
|
||||
void on_rssiAlarm2SB_editingFinished();
|
||||
void on_rxbattAlarm1DSB_editingFinished();
|
||||
void on_rxbattAlarm2DSB_editingFinished();
|
||||
void on_AltitudeGPS_ChkB_toggled(bool checked);
|
||||
void on_varioLimitMin_DSB_editingFinished();
|
||||
void on_varioLimitMax_DSB_editingFinished();
|
||||
|
||||
@@ -13,10 +13,53 @@
|
||||
<property name="windowTitle">
|
||||
<string/>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0,0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout" stretch="0,0,0,0,0">
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1">
|
||||
<item>
|
||||
<widget class="QLabel" name="telemetryProtocolLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Protocol</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="telemetryProtocol">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>FrSky S.PORT</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>FrSky D</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="1" column="0">
|
||||
@@ -394,356 +437,6 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QGroupBox" name="RSSIGB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_7">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="rxbattAlarm2Label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Alarm 2</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="rxbattAlarm1Label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Alarm 1</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="rxbattLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>RxBatt</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QComboBox" name="rxbattAlarm2CB">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Critical Alarm</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="rssiAlarm1Label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Alarm 1</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="rssiAlarm1CB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>----</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Yellow</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Orange</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Red</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QSpinBox" name="rssiAlarm1SB">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>20</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>80</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>50</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="rssiAlarm2Label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Alarm 2</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="rssiAlarm2CB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>----</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Yellow</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Orange</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Red</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QSpinBox" name="rssiAlarm2SB">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>20</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>80</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>50</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="rssiLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>RSSI</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QComboBox" name="rxbattAlarm1CB">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Low Alarm</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="QDoubleSpinBox" name="rxbattAlarm2DSB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>13.199999999999999</double>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.050000000000000</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>4.300000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="QDoubleSpinBox" name="rxbattAlarm1DSB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="decimals">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<double>0.000000000000000</double>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<double>13.199999999999999</double>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<double>0.051764000000000</double>
|
||||
</property>
|
||||
<property name="value">
|
||||
<double>4.300000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QGroupBox" name="altimetryGB">
|
||||
<property name="sizePolicy">
|
||||
@@ -1170,6 +863,216 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QGroupBox" name="RSSIGB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="flat">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_7">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>3</number>
|
||||
</property>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="rssiAlarm1Label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true"/>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Alarm 1</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="rssiAlarm1CB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>----</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Yellow</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Orange</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Red</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QSpinBox" name="rssiAlarm1SB">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>20</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>80</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>50</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="rssiAlarm2Label">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Alarm 2</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="rssiAlarm2CB">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>----</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Yellow</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Orange</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Red</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QSpinBox" name="rssiAlarm2SB">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>20</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>80</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>50</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="rssiLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>RSSI</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<spacer name="verticalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
|
||||
@@ -347,9 +347,8 @@ void PrintDialog::printMixes()
|
||||
str += " " + Qt::escape(tr("Switch(%1)").arg(md->swtch.toString()));
|
||||
}
|
||||
|
||||
if (md->carryTrim) {
|
||||
str += " " + Qt::escape(tr("NoTrim"));
|
||||
}
|
||||
if (md->carryTrim>0) str += " " + Qt::escape(tr("NoTrim"));
|
||||
else if (md->carryTrim<0) str += " " + RawSource(SOURCE_TYPE_TRIM, (-(md->carryTrim)-1)).toString();
|
||||
|
||||
if (firmware->getCapability(HasNoExpo) && md->noExpo) str += " " + Qt::escape(tr("No DR/Expo"));
|
||||
if (md->sOffset) str += " " + Qt::escape(tr("Offset(%1)").arg(getGVarString(md->sOffset)));
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
#include "radionotfound.h"
|
||||
#include "ui_radionotfound.h"
|
||||
|
||||
RadioNotFoundDialog::RadioNotFoundDialog(QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::RadioNotFoundDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
}
|
||||
|
||||
RadioNotFoundDialog::~RadioNotFoundDialog()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void RadioNotFoundDialog::on_OK_clicked()
|
||||
{
|
||||
accept();
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
#ifndef _RADIONOTFOUNDDIALOG_H
|
||||
#define _RADIONOTFOUNDDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
namespace Ui {
|
||||
class RadioNotFoundDialog;
|
||||
}
|
||||
|
||||
class RadioNotFoundDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit RadioNotFoundDialog(QWidget *parent = 0);
|
||||
~RadioNotFoundDialog();
|
||||
private:
|
||||
Ui::RadioNotFoundDialog *ui;
|
||||
private slots:
|
||||
void on_OK_clicked();
|
||||
};
|
||||
|
||||
#endif // _RADIONOTFOUNDDIALOG_H
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>taranisNotFoundDialog</class>
|
||||
<widget class="QDialog" name="taranisNotFoundDialog">
|
||||
<class>RadioNotFoundDialog</class>
|
||||
<widget class="QDialog" name="RadioNotFoundDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
@@ -29,7 +29,7 @@
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>No Taranis Radio Found</string>
|
||||
<string>No Radio Found</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
@@ -37,7 +37,7 @@
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string><html><head/><body><p>No Taranis Radio was found!</p><p>Make sure that you hold the lower trim buttons towards the center while you turn it on.</p><p>Then connect the USB wire.</p></body></html></string>
|
||||
<string><html><head/><body><p>No Radio was found!</p><p>Make sure that you hold the lower trim buttons towards the center while you turn it on.</p><p>Then connect the USB wire.</p></body></html></string>
|
||||
</property>
|
||||
<property name="textFormat">
|
||||
<enum>Qt::RichText</enum>
|
||||
@@ -1,19 +0,0 @@
|
||||
#include "taranisnotfound.h"
|
||||
#include "ui_taranisnotfound.h"
|
||||
|
||||
taranisNotFoundDialog::taranisNotFoundDialog(QWidget *parent) :
|
||||
QDialog(parent),
|
||||
ui(new Ui::taranisNotFoundDialog)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
}
|
||||
|
||||
taranisNotFoundDialog::~taranisNotFoundDialog()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void taranisNotFoundDialog::on_OK_clicked()
|
||||
{
|
||||
accept();
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
#ifndef TARANISNOTFOUNDDIALOG_H
|
||||
#define TARANISNOTFOUNDDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
|
||||
namespace Ui {
|
||||
class taranisNotFoundDialog;
|
||||
}
|
||||
|
||||
class taranisNotFoundDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit taranisNotFoundDialog(QWidget *parent = 0);
|
||||
~taranisNotFoundDialog();
|
||||
private:
|
||||
Ui::taranisNotFoundDialog *ui;
|
||||
private slots:
|
||||
void on_OK_clicked();
|
||||
};
|
||||
|
||||
#endif // TARANISNOTFOUNDDIALOG_H
|
||||
@@ -42,8 +42,8 @@ WizMix::WizMix(const GeneralSettings & settings, const unsigned int modelId):
|
||||
|
||||
void WizMix::maxMixSwitch(char *name, MixData &mix, int channel, int sw, int weight)
|
||||
{
|
||||
strncpy(mix.name, name, sizeof(mix.name));
|
||||
mix.name[sizeof(mix.name)]=0;
|
||||
strncpy(mix.name, name, MIXDATA_NAME_LEN);
|
||||
mix.name[MIXDATA_NAME_LEN] = '\0';
|
||||
mix.destCh = channel;
|
||||
mix.srcRaw = RawSource(SOURCE_TYPE_MAX);
|
||||
mix.swtch = RawSwitch(SWITCH_TYPE_SWITCH, sw);
|
||||
|
||||
@@ -54,7 +54,7 @@ enum WizardPage {
|
||||
Page_Ailerons,
|
||||
Page_Flaps,
|
||||
Page_Airbrakes,
|
||||
Page_Bank,
|
||||
Page_Elevons,
|
||||
Page_Rudder,
|
||||
Page_Tails,
|
||||
Page_Tail,
|
||||
|
||||
@@ -18,42 +18,46 @@
|
||||
#include "helpers.h"
|
||||
#include "googleanalytics.h"
|
||||
|
||||
WizardDialog::WizardDialog(const GeneralSettings & settings, unsigned int modelId, QWidget *parent)
|
||||
: QWizard(parent),
|
||||
mix(settings, modelId),
|
||||
settings(settings)
|
||||
WizardDialog::WizardDialog(const GeneralSettings & settings, unsigned int modelId, QWidget *parent):
|
||||
QWizard(parent),
|
||||
mix(settings, modelId),
|
||||
settings(settings)
|
||||
{
|
||||
setWindowIcon(CompanionIcon("wizard.png"));
|
||||
setWindowTitle(tr("Model Wizard"));
|
||||
|
||||
setPage(Page_Models, new ModelSelectionPage(this, "models",tr("Model Type"),tr("Enter model name and model type.")));
|
||||
setPage(Page_Throttle, new ThrottlePage(this, "throttle",tr("Throttle"),tr("Has your model got a motor or an engine?"), Page_Wingtypes));
|
||||
setPage(Page_Wingtypes, new WingtypeSelectionPage(this, "wingtype",tr("Wing Type"),tr("Is your model a flying wing/deltawing or has it a standard wing configuration?")));
|
||||
setPage(Page_Ailerons, new AileronsPage(this, "ailerons",tr("Ailerons"),tr("Has your model got ailerons?"), Page_Flaps));
|
||||
setPage(Page_Flaps, new FlapsPage(this, "flaps",tr("Flaps"),tr("Has your model got flaps?"), Page_Airbrakes));
|
||||
setPage(Page_Airbrakes, new AirbrakesPage(this, "airbrakes",tr("Airbrakes"),tr("Has your model got airbrakes?"), Page_Tails));
|
||||
setPage(Page_Bank, new BankPage(this, "bank",tr("Flying-wing / Delta-wing"),tr("Are the elevons controlled by servos connected to separate channels or by a single servo channel?"), Page_Rudder));
|
||||
setPage(Page_Rudder, new RudderPage(this, "rudder",tr("Rudder"),tr("Does your model have a rudder?"), Page_Options));
|
||||
setPage(Page_Tails, new TailSelectionPage(this, "tails",tr("Tail Type"),tr("Select which type of tail your model is equiped with.")));
|
||||
setPage(Page_Tail, new TailPage(this, "tail",tr("Tail"),tr("Select channels for tail control."), Page_Options));
|
||||
setPage(Page_Vtail, new VTailPage(this, "vtail",tr("V-Tail"),tr("Select channels for tail control."), Page_Options));
|
||||
setPage(Page_Simpletail, new SimpleTailPage(this, "simpletail",tr("Tail"),tr("Select elevator channel."), Page_Options));
|
||||
setPage(Page_Cyclic, new CyclicPage(this, "cyclic",tr("Cyclic"),tr("Which type of swash control is installed in your helicopter?"), Page_Gyro));
|
||||
setPage(Page_Gyro, new GyroPage(this, "gyro",tr("Tail Gyro"),tr("Has your helicopter got an adjustable gyro for the tail?"), Page_Flybar));
|
||||
setPage(Page_Flybar, new FlybarSelectionPage(this, "flybar",tr("Rotor Type"),tr("Has your helicopter got a flybar?")));
|
||||
setPage(Page_Fblheli, new FblPage(this, "fblheli",tr("Helicopter"),tr("Select the controls for your helicopter"), Page_Options));
|
||||
setPage(Page_Helictrl, new HeliPage(this, "helictrl",tr("Helicopter"),tr("Select the controls for your helicopter"), Page_Options));
|
||||
setPage(Page_Multirotor, new MultirotorPage(this, "multirotor",tr("Multirotor"),tr("Select the control channels for your multirotor"), Page_Options));
|
||||
setPage(Page_Options, new OptionsPage(this, "options",tr("Model Options"),tr("Select additional options"), Page_Conclusion));
|
||||
setPage(Page_Conclusion, new ConclusionPage(this, "conclusion",tr("Save Changes"),tr(
|
||||
setPage(Page_Models, new ModelSelectionPage(this, "models", tr("Model Type"), tr("Enter model name and model type.")));
|
||||
setPage(Page_Throttle, new ThrottlePage(this, "throttle", tr("Throttle"), tr("Has your model got a motor or an engine?"), Page_Wingtypes));
|
||||
setPage(Page_Wingtypes, new WingtypeSelectionPage(this, "wingtype", tr("Wing Type"), tr("Is your model a flying wing/deltawing or has it a standard wing configuration?")));
|
||||
setPage(Page_Ailerons, new AileronsPage(this, "ailerons", tr("Ailerons"), tr("Has your model got ailerons?"), Page_Flaps));
|
||||
setPage(Page_Flaps, new FlapsPage(this, "flaps", tr("Flaps"), tr("Has your model got flaps?"), Page_Airbrakes));
|
||||
setPage(Page_Airbrakes, new AirbrakesPage(this, "airbrakes", tr("Airbrakes"), tr("Has your model got airbrakes?"), Page_Tails));
|
||||
setPage(Page_Elevons, new ElevonsPage(this, "elevons", tr("Flying-wing / Delta-wing"), tr("Select the elevons channels"), Page_Rudder));
|
||||
setPage(Page_Rudder, new RudderPage(this, "rudder", tr("Rudder"), tr("Does your model have a rudder?"), Page_Options));
|
||||
setPage(Page_Tails, new TailSelectionPage(this, "tails", tr("Tail Type"), tr("Select which type of tail your model is equiped with.")));
|
||||
setPage(Page_Tail, new TailPage(this, "tail", tr("Tail"), tr("Select channels for tail control."), Page_Options));
|
||||
setPage(Page_Vtail, new VTailPage(this, "vtail", tr("V-Tail"), tr("Select channels for tail control."), Page_Options));
|
||||
setPage(Page_Simpletail, new SimpleTailPage(this, "simpletail", tr("Tail"), tr("Select elevator channel."), Page_Options));
|
||||
setPage(Page_Cyclic, new CyclicPage(this, "cyclic", tr("Cyclic"), tr("Which type of swash control is installed in your helicopter?"), Page_Gyro));
|
||||
setPage(Page_Gyro, new GyroPage(this, "gyro", tr("Tail Gyro"), tr("Has your helicopter got an adjustable gyro for the tail?"), Page_Flybar));
|
||||
setPage(Page_Flybar, new FlybarSelectionPage(this, "flybar", tr("Rotor Type"), tr("Has your helicopter got a flybar?")));
|
||||
setPage(Page_Fblheli, new FblPage(this, "fblheli", tr("Helicopter"), tr("Select the controls for your helicopter"), Page_Options));
|
||||
setPage(Page_Helictrl, new HeliPage(this, "helictrl", tr("Helicopter"), tr("Select the controls for your helicopter"), Page_Options));
|
||||
setPage(Page_Multirotor, new MultirotorPage(this, "multirotor", tr("Multirotor"), tr("Select the control channels for your multirotor"), Page_Options));
|
||||
setPage(Page_Options, new OptionsPage(this, "options", tr("Model Options"), tr("Select additional options"), Page_Conclusion));
|
||||
setPage(Page_Conclusion, new ConclusionPage(this, "conclusion", tr("Save Changes"), tr(
|
||||
"Manually check the direction of each control surface and reverse any channels that make controls move in the wrong direction. "
|
||||
"Remove the propeller/propellers before you try to control your model for the first time.<br>"
|
||||
"Please note that continuing removes all old model settings!"), -1));
|
||||
setStartId(Page_Models);
|
||||
|
||||
#ifndef Q_WS_MAC
|
||||
// Workaround for Qt radio button rendering issue on Mac
|
||||
Q_FOREACH(QAbstractButton * rb, findChildren<QAbstractButton *>()) {
|
||||
rb->setAttribute(Qt::WA_LayoutUsesWidgetRect);
|
||||
}
|
||||
|
||||
setWizardStyle(ModernStyle);
|
||||
#endif
|
||||
setOption(QWizard::NoCancelButton, false);
|
||||
setOption(HaveHelpButton, true);
|
||||
connect(this, SIGNAL(helpRequested()), this, SLOT(showHelp()));
|
||||
|
||||
@@ -65,77 +69,97 @@ void WizardDialog::showHelp()
|
||||
QString message;
|
||||
|
||||
switch (currentId()) {
|
||||
case Page_Models:
|
||||
message = tr("Enter a name for your model and select model type."); break;
|
||||
case Page_Throttle:
|
||||
message = tr("Select the receiver channel that is connected to your ESC or throttle servo.<br><br>"
|
||||
"Throttle - Spektrum: CH1, Futaba: CH3"); break;
|
||||
case Page_Wingtypes:
|
||||
message = tr("Most aircraft have a main wing and a tail with control surfaces. Flying wings and delta winged aircraft only have a single wing. "
|
||||
"The main control surface on a standard wing controls the roll of the aircraft. This surface is called an aileron.<br>"
|
||||
"The control surface of a delta wing controls both roll and pitch. This surface is called an elevon. "); break;
|
||||
case Page_Ailerons:
|
||||
message = tr("Models use one or two channels to control the ailerons.<br>"
|
||||
"A so called Y-cable can be used to connect a single receiver channel to two separate aileron servos. "
|
||||
"If your servos are connected by a Y-cable you should select the single-servo option.<br><br>"
|
||||
"Aileron - Spektrum: CH2, Futaba: CH1"); break;
|
||||
case Page_Flaps:
|
||||
message = tr("This wizard assumes that your flaps are controlled by a switch. "
|
||||
"If your flaps are controlled by a potentiometer you can change that manually later."); break;
|
||||
case Page_Airbrakes:
|
||||
message = tr("Air brakes are used to reduce the speed of advanced sail planes.<br>"
|
||||
"They are very uncommon on other types of planes."); break;
|
||||
case Page_Bank:
|
||||
message = tr("Models use one or two channels to control the elevons.<br>"
|
||||
"A so called Y-cable can be used to connect single a receiver channel to two separate elevon servos. "
|
||||
"If your servos are connected by a Y-cable you should select the single-servo option."); break;
|
||||
case Page_Rudder:
|
||||
message = tr("Select the receiver channel that is connected to your rudder.<br><br>"
|
||||
"Rudder - Spektrum: CH4, Futaba: CH4"); break;
|
||||
case Page_Tails:
|
||||
message = tr("Select the tail type of your plane."); break;
|
||||
case Page_Tail:
|
||||
message = tr("Select the Rudder and Elevator channels.<br><br>"
|
||||
"Rudder - Spektrum: CH4, Futaba: CH4<br>"
|
||||
"Elevator - Spektrum: CH3, Futaba: CH2"); break;
|
||||
case Page_Vtail:
|
||||
message = tr("Select the Rudder and Elevator channels.<br><br>"
|
||||
"Rudder - Spektrum: CH4, Futaba: CH4<br>"
|
||||
"Elevator - Spektrum: CH3, Futaba: CH2"); break;
|
||||
case Page_Simpletail:
|
||||
message = tr("Select the Elevator channel.<br><br>"
|
||||
"Elevator - Spektrum: CH3, Futaba: CH2"); break;
|
||||
case Page_Flybar:
|
||||
message = tr("TBD."); break;
|
||||
case Page_Cyclic:
|
||||
message = tr("TBD."); break;
|
||||
case Page_Gyro:
|
||||
message = tr("TBD."); break;
|
||||
case Page_Fblheli:
|
||||
message = tr("TBD."); break;
|
||||
case Page_Helictrl:
|
||||
message = tr("TBD."); break;
|
||||
case Page_Multirotor:
|
||||
message = tr("Select the control channels for your multirotor.<br><br>"
|
||||
"Throttle - Spektrum: CH1, Futaba: CH3<br>"
|
||||
"Yaw - Spektrum: CH4, Futaba: CH4<br>"
|
||||
"Pitch - Spektrum: CH3, Futaba: CH2<br>"
|
||||
"Roll - Spektrum: CH2, Futaba: CH1"); break;
|
||||
case Page_Options:
|
||||
message = tr("TBD."); break;
|
||||
case Page_Conclusion:
|
||||
message = tr("TBD."); break;
|
||||
default:
|
||||
message = tr("There is no help available for the current page.");
|
||||
case Page_Models:
|
||||
message = tr("Enter a name for your model and select model type.");
|
||||
break;
|
||||
case Page_Throttle:
|
||||
message = tr("Select the receiver channel that is connected to your ESC or throttle servo.<br><br>"
|
||||
"Throttle - Spektrum: CH1, Futaba: CH3");
|
||||
break;
|
||||
case Page_Wingtypes:
|
||||
message = tr("Most aircraft have a main wing and a tail with control surfaces. Flying wings and delta winged aircraft only have a single wing. "
|
||||
"The main control surface on a standard wing controls the roll of the aircraft. This surface is called an aileron.<br>"
|
||||
"The control surface of a delta wing controls both roll and pitch. This surface is called an elevon. ");
|
||||
break;
|
||||
case Page_Ailerons:
|
||||
message = tr("Models use one or two channels to control the ailerons.<br>"
|
||||
"A so called Y-cable can be used to connect a single receiver channel to two separate aileron servos. "
|
||||
"If your servos are connected by a Y-cable you should select the single-servo option.<br><br>"
|
||||
"Aileron - Spektrum: CH2, Futaba: CH1");
|
||||
break;
|
||||
case Page_Flaps:
|
||||
message = tr("This wizard assumes that your flaps are controlled by a switch. "
|
||||
"If your flaps are controlled by a potentiometer you can change that manually later.");
|
||||
break;
|
||||
case Page_Airbrakes:
|
||||
message = tr("Air brakes are used to reduce the speed of advanced sail planes.<br>"
|
||||
"They are very uncommon on other types of planes.");
|
||||
break;
|
||||
case Page_Elevons:
|
||||
message = tr("Models use two channels to control the elevons.<br>"
|
||||
"Select these two channels");
|
||||
break;
|
||||
case Page_Rudder:
|
||||
message = tr("Select the receiver channel that is connected to your rudder.<br><br>"
|
||||
"Rudder - Spektrum: CH4, Futaba: CH4");
|
||||
break;
|
||||
case Page_Tails:
|
||||
message = tr("Select the tail type of your plane.");
|
||||
break;
|
||||
case Page_Tail:
|
||||
message = tr("Select the Rudder and Elevator channels.<br><br>"
|
||||
"Rudder - Spektrum: CH4, Futaba: CH4<br>"
|
||||
"Elevator - Spektrum: CH3, Futaba: CH2");
|
||||
break;
|
||||
case Page_Vtail:
|
||||
message = tr("Select the Rudder and Elevator channels.<br><br>"
|
||||
"Rudder - Spektrum: CH4, Futaba: CH4<br>"
|
||||
"Elevator - Spektrum: CH3, Futaba: CH2");
|
||||
break;
|
||||
case Page_Simpletail:
|
||||
message = tr("Select the Elevator channel.<br><br>"
|
||||
"Elevator - Spektrum: CH3, Futaba: CH2");
|
||||
break;
|
||||
case Page_Flybar:
|
||||
message = tr("TBD.");
|
||||
break;
|
||||
case Page_Cyclic:
|
||||
message = tr("TBD.");
|
||||
break;
|
||||
case Page_Gyro:
|
||||
message = tr("TBD.");
|
||||
break;
|
||||
case Page_Fblheli:
|
||||
message = tr("TBD.");
|
||||
break;
|
||||
case Page_Helictrl:
|
||||
message = tr("TBD.");
|
||||
break;
|
||||
case Page_Multirotor:
|
||||
message = tr("Select the control channels for your multirotor.<br><br>"
|
||||
"Throttle - Spektrum: CH1, Futaba: CH3<br>"
|
||||
"Yaw - Spektrum: CH4, Futaba: CH4<br>"
|
||||
"Pitch - Spektrum: CH3, Futaba: CH2<br>"
|
||||
"Roll - Spektrum: CH2, Futaba: CH1");
|
||||
break;
|
||||
case Page_Options:
|
||||
message = tr("TBD.");
|
||||
break;
|
||||
case Page_Conclusion:
|
||||
message = tr("TBD.");
|
||||
break;
|
||||
default:
|
||||
message = tr("There is no help available for the current page.");
|
||||
}
|
||||
|
||||
QMessageBox::information(this, tr("Model Wizard Help"), message);
|
||||
}
|
||||
|
||||
StandardPage::StandardPage(WizardPage currentPage, WizardDialog *dlg, QString image, QString title, QString text, int nextPage )
|
||||
: QWizardPage(),
|
||||
wizDlg(dlg),
|
||||
pageCurrent(currentPage),
|
||||
pageFollower(nextPage)
|
||||
StandardPage::StandardPage(WizardPage currentPage, WizardDialog *dlg, QString image, QString title, QString text, int nextPage):
|
||||
QWizardPage(),
|
||||
wizDlg(dlg),
|
||||
pageCurrent(currentPage),
|
||||
pageFollower(nextPage)
|
||||
{
|
||||
setTitle(title);
|
||||
setPixmap(QWizard::WatermarkPixmap, QPixmap(QString(":/images/wizard/%1.png").arg(image)));
|
||||
@@ -175,10 +199,10 @@ void StandardPage::populateCB(QComboBox *cb, int preferred)
|
||||
}
|
||||
// Avoid selecting prebooked channels
|
||||
int channel = cb->itemData(cb->currentIndex()).toInt();
|
||||
if(wizDlg->mix.channel[channel].prebooked){
|
||||
for(int i=cb->count()-1; i>=0; i--){
|
||||
if (wizDlg->mix.channel[channel].prebooked) {
|
||||
for (int i=cb->count()-1; i>=0; i--){
|
||||
channel = cb->itemData(i).toInt();
|
||||
if( !wizDlg->mix.channel[channel].prebooked ){
|
||||
if (!wizDlg->mix.channel[channel].prebooked) {
|
||||
cb->setCurrentIndex(i);
|
||||
break;
|
||||
}
|
||||
@@ -208,9 +232,8 @@ bool StandardPage::bookChannel(QComboBox * cb, Input input1, int weight1, Input
|
||||
|
||||
void StandardPage::releaseBookings()
|
||||
{
|
||||
for (int i=0; i<WIZ_MAX_CHANNELS; i++)
|
||||
{
|
||||
if (wizDlg->mix.channel[i].page == pageCurrent){
|
||||
for (int i=0; i<WIZ_MAX_CHANNELS; i++) {
|
||||
if (wizDlg->mix.channel[i].page == pageCurrent) {
|
||||
wizDlg->mix.channel[i].clear();
|
||||
}
|
||||
}
|
||||
@@ -218,8 +241,7 @@ void StandardPage::releaseBookings()
|
||||
|
||||
void StandardPage::releasePreBookings()
|
||||
{
|
||||
for (int i=0; i<WIZ_MAX_CHANNELS; i++)
|
||||
{
|
||||
for (int i=0; i<WIZ_MAX_CHANNELS; i++) {
|
||||
wizDlg->mix.channel[i].prebooked = false;
|
||||
}
|
||||
}
|
||||
@@ -304,7 +326,7 @@ WingtypeSelectionPage::WingtypeSelectionPage(WizardDialog *dlg, QString image, Q
|
||||
int WingtypeSelectionPage::nextId() const
|
||||
{
|
||||
if (deltaWingRB->isChecked())
|
||||
return Page_Bank;
|
||||
return Page_Elevons;
|
||||
else
|
||||
return Page_Ailerons;
|
||||
}
|
||||
@@ -419,13 +441,15 @@ AileronsPage::AileronsPage(WizardDialog *dlg, QString image, QString title, QStr
|
||||
connect(twoAileronsRB, SIGNAL(toggled(bool)), this, SLOT(twoAileronChannels()));
|
||||
}
|
||||
|
||||
void AileronsPage::initializePage(){
|
||||
void AileronsPage::initializePage()
|
||||
{
|
||||
populateCB(aileron1CB, getDefaultChannel(AILERONS_INPUT));
|
||||
populateCB(aileron2CB, nextFreeChannel(4));
|
||||
StandardPage::initializePage();
|
||||
}
|
||||
|
||||
bool AileronsPage::validatePage() {
|
||||
bool AileronsPage::validatePage()
|
||||
{
|
||||
releaseBookings();
|
||||
if (noAileronsRB->isChecked()) {
|
||||
return true;
|
||||
@@ -437,12 +461,26 @@ bool AileronsPage::validatePage() {
|
||||
bookChannel(aileron2CB, AILERONS_INPUT, -100 ));
|
||||
}
|
||||
|
||||
void AileronsPage::noAileronChannel(){ aileron1CB->setEnabled(false);aileron2CB->setEnabled(false);}
|
||||
void AileronsPage::oneAileronChannel(){ aileron1CB->setEnabled(true); aileron2CB->setEnabled(false);}
|
||||
void AileronsPage::twoAileronChannels(){ aileron1CB->setEnabled(true); aileron2CB->setEnabled(true);}
|
||||
void AileronsPage::noAileronChannel()
|
||||
{
|
||||
aileron1CB->setEnabled(false);
|
||||
aileron2CB->setEnabled(false);
|
||||
}
|
||||
|
||||
FlapsPage::FlapsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(Page_Flaps, dlg, image, title, text, nextPage)
|
||||
void AileronsPage::oneAileronChannel()
|
||||
{
|
||||
aileron1CB->setEnabled(true);
|
||||
aileron2CB->setEnabled(false);
|
||||
}
|
||||
|
||||
void AileronsPage::twoAileronChannels()
|
||||
{
|
||||
aileron1CB->setEnabled(true);
|
||||
aileron2CB->setEnabled(true);
|
||||
}
|
||||
|
||||
FlapsPage::FlapsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage):
|
||||
StandardPage(Page_Flaps, dlg, image, title, text, nextPage)
|
||||
{
|
||||
noFlapsRB = new QRadioButton(tr("No"));
|
||||
oneFlapRB = new QRadioButton(tr("Yes, controlled by a single channel"));
|
||||
@@ -468,7 +506,8 @@ FlapsPage::FlapsPage(WizardDialog *dlg, QString image, QString title, QString te
|
||||
connect(twoFlapsRB, SIGNAL(toggled(bool)), this, SLOT(twoFlapChannels()));
|
||||
}
|
||||
|
||||
void FlapsPage::initializePage(){
|
||||
void FlapsPage::initializePage()
|
||||
{
|
||||
populateCB(flap1CB, nextFreeChannel(4));
|
||||
populateCB(flap2CB, nextFreeChannel(4));
|
||||
StandardPage::initializePage();
|
||||
@@ -486,12 +525,26 @@ bool FlapsPage::validatePage() {
|
||||
bookChannel(flap2CB, FLAPS_INPUT, 100 ));
|
||||
}
|
||||
|
||||
void FlapsPage::noFlapChannel(){ flap1CB->setEnabled(false);flap2CB->setEnabled(false);}
|
||||
void FlapsPage::oneFlapChannel(){ flap1CB->setEnabled(true); flap2CB->setEnabled(false);}
|
||||
void FlapsPage::twoFlapChannels(){ flap1CB->setEnabled(true); flap2CB->setEnabled(true);}
|
||||
void FlapsPage::noFlapChannel()
|
||||
{
|
||||
flap1CB->setEnabled(false);
|
||||
flap2CB->setEnabled(false);
|
||||
}
|
||||
|
||||
AirbrakesPage::AirbrakesPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(Page_Airbrakes, dlg, image, title, text, nextPage)
|
||||
void FlapsPage::oneFlapChannel()
|
||||
{
|
||||
flap1CB->setEnabled(true);
|
||||
flap2CB->setEnabled(false);
|
||||
}
|
||||
|
||||
void FlapsPage::twoFlapChannels()
|
||||
{
|
||||
flap1CB->setEnabled(true);
|
||||
flap2CB->setEnabled(true);
|
||||
}
|
||||
|
||||
AirbrakesPage::AirbrakesPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage):
|
||||
StandardPage(Page_Airbrakes, dlg, image, title, text, nextPage)
|
||||
{
|
||||
noAirbrakesRB = new QRadioButton(tr("No"));
|
||||
oneAirbrakeRB = new QRadioButton(tr("Yes, controlled by a single channel"));
|
||||
@@ -517,13 +570,15 @@ AirbrakesPage::AirbrakesPage(WizardDialog *dlg, QString image, QString title, QS
|
||||
connect(twoAirbrakesRB, SIGNAL(toggled(bool)), this, SLOT(twoAirbrakeChannels()));
|
||||
}
|
||||
|
||||
void AirbrakesPage::initializePage(){
|
||||
void AirbrakesPage::initializePage()
|
||||
{
|
||||
populateCB(airbrake1CB, nextFreeChannel(4));
|
||||
populateCB(airbrake2CB, nextFreeChannel(4));
|
||||
StandardPage::initializePage();
|
||||
}
|
||||
|
||||
bool AirbrakesPage::validatePage() {
|
||||
bool AirbrakesPage::validatePage()
|
||||
{
|
||||
releaseBookings();
|
||||
if (noAirbrakesRB->isChecked()) {
|
||||
return true;
|
||||
@@ -535,53 +590,53 @@ bool AirbrakesPage::validatePage() {
|
||||
bookChannel(airbrake2CB, AIRBRAKES_INPUT, 100 ));
|
||||
}
|
||||
|
||||
void AirbrakesPage::noAirbrakeChannel(){ airbrake1CB->setEnabled(false);airbrake2CB->setEnabled(false);}
|
||||
void AirbrakesPage::oneAirbrakeChannel(){ airbrake1CB->setEnabled(true); airbrake2CB->setEnabled(false);}
|
||||
void AirbrakesPage::twoAirbrakeChannels(){ airbrake1CB->setEnabled(true); airbrake2CB->setEnabled(true);}
|
||||
|
||||
BankPage::BankPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(Page_Bank, dlg, image, title, text, nextPage)
|
||||
void AirbrakesPage::noAirbrakeChannel()
|
||||
{
|
||||
airbrake1CB->setEnabled(false);
|
||||
airbrake2CB->setEnabled(false);
|
||||
}
|
||||
|
||||
void AirbrakesPage::oneAirbrakeChannel()
|
||||
{
|
||||
airbrake1CB->setEnabled(true);
|
||||
airbrake2CB->setEnabled(false);
|
||||
}
|
||||
|
||||
void AirbrakesPage::twoAirbrakeChannels()
|
||||
{
|
||||
airbrake1CB->setEnabled(true);
|
||||
airbrake2CB->setEnabled(true);
|
||||
}
|
||||
|
||||
ElevonsPage::ElevonsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage):
|
||||
StandardPage(Page_Elevons, dlg, image, title, text, nextPage)
|
||||
{
|
||||
oneElevonChRB = new QRadioButton(tr("One"));
|
||||
twoElevonsChRB = new QRadioButton(tr("Two"));
|
||||
oneElevonChRB->setChecked(true);
|
||||
|
||||
elevon1CB = new QComboBox();
|
||||
elevon2CB = new QComboBox();
|
||||
elevon2CB->setEnabled(false);
|
||||
|
||||
QLayout *l = layout();
|
||||
l->addWidget(oneElevonChRB);
|
||||
l->addWidget(twoElevonsChRB);
|
||||
l->addWidget(new QLabel(tr("<br>First Elevon Channel:")));
|
||||
l->addWidget(elevon1CB);
|
||||
l->addWidget(new QLabel(tr("Second Elevon Channel:")));
|
||||
l->addWidget(elevon2CB);
|
||||
|
||||
connect(oneElevonChRB, SIGNAL(toggled(bool)), this, SLOT(oneElevonChannel()));
|
||||
connect(twoElevonsChRB, SIGNAL(toggled(bool)), this, SLOT(twoElevonChannels()));
|
||||
}
|
||||
|
||||
void BankPage::initializePage(){
|
||||
void ElevonsPage::initializePage()
|
||||
{
|
||||
populateCB(elevon1CB, getDefaultChannel(ELEVATOR_INPUT));
|
||||
populateCB(elevon2CB, getDefaultChannel(AILERONS_INPUT));
|
||||
StandardPage::initializePage();
|
||||
}
|
||||
|
||||
bool BankPage::validatePage() {
|
||||
bool ElevonsPage::validatePage()
|
||||
{
|
||||
releaseBookings();
|
||||
if (oneElevonChRB->isChecked()) {
|
||||
return (bookChannel(elevon1CB, AILERONS_INPUT, 100, ELEVATOR_INPUT, 100 ));
|
||||
}
|
||||
return( bookChannel(elevon1CB, AILERONS_INPUT, 100, ELEVATOR_INPUT, 100 ) &&
|
||||
bookChannel(elevon2CB, AILERONS_INPUT, -100, ELEVATOR_INPUT, 100 ));
|
||||
return (bookChannel(elevon1CB, AILERONS_INPUT, 100, ELEVATOR_INPUT, 100) &&
|
||||
bookChannel(elevon2CB, AILERONS_INPUT, -100, ELEVATOR_INPUT, 100));
|
||||
}
|
||||
|
||||
void BankPage::oneElevonChannel(){ elevon2CB->setEnabled(false);}
|
||||
void BankPage::twoElevonChannels(){ elevon2CB->setEnabled(true);}
|
||||
|
||||
RudderPage::RudderPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(Page_Rudder, dlg, image, title, text, nextPage)
|
||||
RudderPage::RudderPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage):
|
||||
StandardPage(Page_Rudder, dlg, image, title, text, nextPage)
|
||||
{
|
||||
noRudderRB = new QRadioButton(tr("No"));
|
||||
hasRudderRB = new QRadioButton(tr("Yes"));
|
||||
@@ -599,7 +654,8 @@ RudderPage::RudderPage(WizardDialog *dlg, QString image, QString title, QString
|
||||
connect(hasRudderRB, SIGNAL(toggled(bool)), this, SLOT(hasRudder()));
|
||||
}
|
||||
|
||||
void RudderPage::initializePage(){
|
||||
void RudderPage::initializePage()
|
||||
{
|
||||
populateCB(rudderCB, getDefaultChannel(RUDDER_INPUT));
|
||||
StandardPage::initializePage();
|
||||
}
|
||||
@@ -612,8 +668,15 @@ bool RudderPage::validatePage() {
|
||||
return (bookChannel(rudderCB, RUDDER_INPUT, 100));
|
||||
}
|
||||
|
||||
void RudderPage::noRudder(){ rudderCB->setEnabled(false);}
|
||||
void RudderPage::hasRudder(){ rudderCB->setEnabled(true);}
|
||||
void RudderPage::noRudder()
|
||||
{
|
||||
rudderCB->setEnabled(false);
|
||||
}
|
||||
|
||||
void RudderPage::hasRudder()
|
||||
{
|
||||
rudderCB->setEnabled(true);
|
||||
}
|
||||
|
||||
VTailPage::VTailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(Page_Tail, dlg, image, title, text, nextPage)
|
||||
@@ -628,20 +691,22 @@ VTailPage::VTailPage(WizardDialog *dlg, QString image, QString title, QString te
|
||||
l->addWidget(tail2CB);
|
||||
}
|
||||
|
||||
void VTailPage::initializePage(){
|
||||
void VTailPage::initializePage()
|
||||
{
|
||||
populateCB(tail1CB, getDefaultChannel(ELEVATOR_INPUT));
|
||||
populateCB(tail2CB, getDefaultChannel(AILERONS_INPUT));
|
||||
StandardPage::initializePage();
|
||||
}
|
||||
|
||||
bool VTailPage::validatePage() {
|
||||
bool VTailPage::validatePage()
|
||||
{
|
||||
releaseBookings();
|
||||
return (bookChannel(tail1CB, ELEVATOR_INPUT, 50, RUDDER_INPUT, 50) &&
|
||||
bookChannel(tail2CB, ELEVATOR_INPUT, 50, RUDDER_INPUT, -50 ));
|
||||
}
|
||||
|
||||
TailPage::TailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(Page_Tail, dlg, image, title, text, nextPage)
|
||||
TailPage::TailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage):
|
||||
StandardPage(Page_Tail, dlg, image, title, text, nextPage)
|
||||
{
|
||||
elevatorCB = new QComboBox();
|
||||
rudderCB = new QComboBox();
|
||||
@@ -653,16 +718,18 @@ TailPage::TailPage(WizardDialog *dlg, QString image, QString title, QString text
|
||||
l->addWidget(elevatorCB);
|
||||
}
|
||||
|
||||
void TailPage::initializePage(){
|
||||
void TailPage::initializePage()
|
||||
{
|
||||
populateCB(elevatorCB, getDefaultChannel(ELEVATOR_INPUT));
|
||||
populateCB(rudderCB, getDefaultChannel(RUDDER_INPUT));
|
||||
StandardPage::initializePage();
|
||||
}
|
||||
|
||||
bool TailPage::validatePage() {
|
||||
bool TailPage::validatePage()
|
||||
{
|
||||
releaseBookings();
|
||||
return( bookChannel(elevatorCB, ELEVATOR_INPUT, 100 ) &&
|
||||
bookChannel(rudderCB, RUDDER_INPUT, 100 ));
|
||||
return( bookChannel(elevatorCB, ELEVATOR_INPUT, 100) &&
|
||||
bookChannel(rudderCB, RUDDER_INPUT, 100));
|
||||
}
|
||||
|
||||
SimpleTailPage::SimpleTailPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
@@ -675,18 +742,20 @@ SimpleTailPage::SimpleTailPage(WizardDialog *dlg, QString image, QString title,
|
||||
l->addWidget(elevatorCB);
|
||||
}
|
||||
|
||||
void SimpleTailPage::initializePage(){
|
||||
void SimpleTailPage::initializePage()
|
||||
{
|
||||
populateCB(elevatorCB, getDefaultChannel(ELEVATOR_INPUT));
|
||||
StandardPage::initializePage();
|
||||
}
|
||||
|
||||
bool SimpleTailPage::validatePage() {
|
||||
bool SimpleTailPage::validatePage()
|
||||
{
|
||||
releaseBookings();
|
||||
return( bookChannel(elevatorCB, ELEVATOR_INPUT, 100 ));
|
||||
}
|
||||
|
||||
CyclicPage::CyclicPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(Page_Cyclic, dlg, image, title, text, nextPage)
|
||||
CyclicPage::CyclicPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage):
|
||||
StandardPage(Page_Cyclic, dlg, image, title, text, nextPage)
|
||||
{
|
||||
cyclic90RB = new QRadioButton(tr("90"));
|
||||
cyclic90RB->setChecked(true);
|
||||
@@ -701,17 +770,19 @@ CyclicPage::CyclicPage(WizardDialog *dlg, QString image, QString title, QString
|
||||
l->addWidget(cyclic140RB);
|
||||
}
|
||||
|
||||
void CyclicPage::initializePage(){
|
||||
void CyclicPage::initializePage()
|
||||
{
|
||||
StandardPage::initializePage();
|
||||
}
|
||||
|
||||
bool CyclicPage::validatePage() {
|
||||
bool CyclicPage::validatePage()
|
||||
{
|
||||
releaseBookings();
|
||||
return true;
|
||||
}
|
||||
|
||||
GyroPage::GyroPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(Page_Gyro, dlg, image, title, text, nextPage)
|
||||
GyroPage::GyroPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage):
|
||||
StandardPage(Page_Gyro, dlg, image, title, text, nextPage)
|
||||
{
|
||||
noGyroRB = new QRadioButton(tr("No"));
|
||||
noGyroRB->setChecked(true);
|
||||
@@ -724,7 +795,8 @@ GyroPage::GyroPage(WizardDialog *dlg, QString image, QString title, QString text
|
||||
l->addWidget(potGyroRB);
|
||||
}
|
||||
|
||||
void GyroPage::initializePage(){
|
||||
void GyroPage::initializePage()
|
||||
{
|
||||
StandardPage::initializePage();
|
||||
}
|
||||
|
||||
@@ -733,8 +805,8 @@ bool GyroPage::validatePage() {
|
||||
return true;
|
||||
}
|
||||
|
||||
FblPage::FblPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(Page_Fblheli, dlg, image, title, text, nextPage)
|
||||
FblPage::FblPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage):
|
||||
StandardPage(Page_Fblheli, dlg, image, title, text, nextPage)
|
||||
{
|
||||
throttleCB = new QComboBox();
|
||||
yawCB = new QComboBox();
|
||||
@@ -752,7 +824,8 @@ FblPage::FblPage(WizardDialog *dlg, QString image, QString title, QString text,
|
||||
l->addWidget(rollCB);
|
||||
}
|
||||
|
||||
void FblPage::initializePage(){
|
||||
void FblPage::initializePage()
|
||||
{
|
||||
populateCB(throttleCB, getDefaultChannel(THROTTLE_INPUT));
|
||||
populateCB(yawCB, getDefaultChannel(RUDDER_INPUT));
|
||||
populateCB(pitchCB, getDefaultChannel(ELEVATOR_INPUT));
|
||||
@@ -760,7 +833,8 @@ void FblPage::initializePage(){
|
||||
StandardPage::initializePage();
|
||||
}
|
||||
|
||||
bool FblPage::validatePage() {
|
||||
bool FblPage::validatePage()
|
||||
{
|
||||
releaseBookings();
|
||||
return( bookChannel(throttleCB, THROTTLE_INPUT, 100 ) &&
|
||||
bookChannel( yawCB, RUDDER_INPUT, 100 ) &&
|
||||
@@ -768,8 +842,8 @@ bool FblPage::validatePage() {
|
||||
bookChannel( rollCB, AILERONS_INPUT, 100 ));
|
||||
}
|
||||
|
||||
HeliPage::HeliPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(Page_Helictrl, dlg, image, title, text, nextPage)
|
||||
HeliPage::HeliPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage):
|
||||
StandardPage(Page_Helictrl, dlg, image, title, text, nextPage)
|
||||
{
|
||||
throttleCB = new QComboBox();
|
||||
yawCB = new QComboBox();
|
||||
@@ -787,7 +861,8 @@ HeliPage::HeliPage(WizardDialog *dlg, QString image, QString title, QString text
|
||||
l->addWidget(rollCB);
|
||||
}
|
||||
|
||||
void HeliPage::initializePage(){
|
||||
void HeliPage::initializePage()
|
||||
{
|
||||
populateCB(throttleCB, getDefaultChannel(THROTTLE_INPUT));
|
||||
populateCB(yawCB, getDefaultChannel(RUDDER_INPUT));
|
||||
populateCB(pitchCB, getDefaultChannel(ELEVATOR_INPUT));
|
||||
@@ -795,7 +870,8 @@ void HeliPage::initializePage(){
|
||||
StandardPage::initializePage();
|
||||
}
|
||||
|
||||
bool HeliPage::validatePage() {
|
||||
bool HeliPage::validatePage()
|
||||
{
|
||||
releaseBookings();
|
||||
return( bookChannel(throttleCB, THROTTLE_INPUT, 100 ) &&
|
||||
bookChannel( yawCB, RUDDER_INPUT, 100 ) &&
|
||||
@@ -803,8 +879,8 @@ bool HeliPage::validatePage() {
|
||||
bookChannel( rollCB, AILERONS_INPUT, 100 ));
|
||||
}
|
||||
|
||||
MultirotorPage::MultirotorPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(Page_Multirotor, dlg, image, title, text, nextPage)
|
||||
MultirotorPage::MultirotorPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage):
|
||||
StandardPage(Page_Multirotor, dlg, image, title, text, nextPage)
|
||||
{
|
||||
throttleCB = new QComboBox();
|
||||
yawCB = new QComboBox();
|
||||
@@ -822,7 +898,8 @@ MultirotorPage::MultirotorPage(WizardDialog *dlg, QString image, QString title,
|
||||
l->addWidget(rollCB);
|
||||
}
|
||||
|
||||
void MultirotorPage::initializePage(){
|
||||
void MultirotorPage::initializePage()
|
||||
{
|
||||
populateCB(throttleCB, getDefaultChannel(THROTTLE_INPUT));
|
||||
populateCB(yawCB, getDefaultChannel(RUDDER_INPUT));
|
||||
populateCB(pitchCB, getDefaultChannel(ELEVATOR_INPUT));
|
||||
@@ -830,7 +907,8 @@ void MultirotorPage::initializePage(){
|
||||
StandardPage::initializePage();
|
||||
}
|
||||
|
||||
bool MultirotorPage::validatePage() {
|
||||
bool MultirotorPage::validatePage()
|
||||
{
|
||||
releaseBookings();
|
||||
return( bookChannel(throttleCB, THROTTLE_INPUT, 100 ) &&
|
||||
bookChannel(yawCB, RUDDER_INPUT, 100 ) &&
|
||||
@@ -838,8 +916,8 @@ bool MultirotorPage::validatePage() {
|
||||
bookChannel(rollCB, AILERONS_INPUT, 100 ));
|
||||
}
|
||||
|
||||
OptionsPage::OptionsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage)
|
||||
: StandardPage(Page_Options, dlg, image, title, text, nextPage)
|
||||
OptionsPage::OptionsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage):
|
||||
StandardPage(Page_Options, dlg, image, title, text, nextPage)
|
||||
{
|
||||
throttleCutRB = new QCheckBox(tr("Throttle Cut"));
|
||||
throttleTimerRB = new QCheckBox(tr("Throttle Timer"));
|
||||
@@ -874,13 +952,15 @@ ConclusionPage::ConclusionPage(WizardDialog *dlg, QString image, QString title,
|
||||
l->addWidget(proceedCB);
|
||||
}
|
||||
|
||||
void ConclusionPage::initializePage(){
|
||||
void ConclusionPage::initializePage()
|
||||
{
|
||||
WizardPrinter p(&wizDlg->mix);
|
||||
textLabel->setText(p.print());
|
||||
StandardPage::initializePage();
|
||||
}
|
||||
|
||||
bool ConclusionPage::validatePage() {
|
||||
bool ConclusionPage::validatePage()
|
||||
{
|
||||
wizDlg->mix.complete = true;
|
||||
return true;
|
||||
}
|
||||
@@ -888,24 +968,35 @@ bool ConclusionPage::validatePage() {
|
||||
|
||||
QString WizardPrinter::inputName(Input input)
|
||||
{
|
||||
switch (input){
|
||||
case THROTTLE_INPUT: return "THR";
|
||||
case RUDDER_INPUT: return "RUD";
|
||||
case ELEVATOR_INPUT: return "ELE";
|
||||
case AILERONS_INPUT: return "AIL";
|
||||
case FLAPS_INPUT: return "FLP";
|
||||
case AIRBRAKES_INPUT: return "AIR";
|
||||
default: return "---";
|
||||
switch (input) {
|
||||
case THROTTLE_INPUT:
|
||||
return "THR";
|
||||
case RUDDER_INPUT:
|
||||
return "RUD";
|
||||
case ELEVATOR_INPUT:
|
||||
return "ELE";
|
||||
case AILERONS_INPUT:
|
||||
return "AIL";
|
||||
case FLAPS_INPUT:
|
||||
return "FLP";
|
||||
case AIRBRAKES_INPUT:
|
||||
return "AIR";
|
||||
default:
|
||||
return "---";
|
||||
}
|
||||
}
|
||||
|
||||
QString WizardPrinter::vehicleName(Vehicle vehicle)
|
||||
{
|
||||
switch (vehicle){
|
||||
case PLANE: return "Plane";
|
||||
case MULTICOPTER: return "Multicopter";
|
||||
case HELICOPTER: return "Helicopter";
|
||||
default: return "---";
|
||||
switch (vehicle) {
|
||||
case PLANE:
|
||||
return tr("Plane");
|
||||
case MULTICOPTER:
|
||||
return tr("Multicopter");
|
||||
case HELICOPTER:
|
||||
return tr("Helicopter");
|
||||
default:
|
||||
return "---";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -925,23 +1016,22 @@ WizardPrinter::WizardPrinter(WizMix *wizMix)
|
||||
|
||||
QString WizardPrinter::print()
|
||||
{
|
||||
QString str;
|
||||
str = QString(tr("Model Name: ")) + mix->name + "\n";
|
||||
str += QString(tr("Model Type: ")) + vehicleName(mix->vehicle) + "\n";
|
||||
QString str = tr("Model Name: ") + mix->name + "\n";
|
||||
str += tr("Model Type: ") + vehicleName(mix->vehicle) + "\n";
|
||||
|
||||
str += QString(tr("Options: ")) + "[";
|
||||
for (int i=0; i<WIZ_MAX_OPTIONS; i++){
|
||||
if (mix->options[i])
|
||||
str += "X";
|
||||
else
|
||||
str += "-";
|
||||
}
|
||||
str += tr("Options: ") + "[";
|
||||
for (int i=0; i<WIZ_MAX_OPTIONS; i++) {
|
||||
if (mix->options[i])
|
||||
str += "X";
|
||||
else
|
||||
str += "-";
|
||||
}
|
||||
str += QString("]") + "\n";
|
||||
|
||||
for (int i=0; i<WIZ_MAX_CHANNELS; i++){
|
||||
for (int i=0; i<WIZ_MAX_CHANNELS; i++) {
|
||||
if (mix->channel[i].page != Page_None) {
|
||||
Channel ch = mix->channel[i];
|
||||
str += QString(tr("Channel %1: ").arg(i+1));
|
||||
str += tr("Channel %1: ").arg(i+1);
|
||||
str += printChannel(ch.input1, ch.weight1, ch.input2, ch.weight2 );
|
||||
str += QString("\n");
|
||||
}
|
||||
|
||||
@@ -192,41 +192,37 @@ private:
|
||||
QComboBox *airbrake2CB;
|
||||
};
|
||||
|
||||
class BankPage: public StandardPage
|
||||
class ElevonsPage: public StandardPage
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
BankPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
|
||||
protected slots:
|
||||
void oneElevonChannel();
|
||||
void twoElevonChannels();
|
||||
public:
|
||||
ElevonsPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
|
||||
private:
|
||||
QRadioButton *oneElevonChRB;
|
||||
QRadioButton *twoElevonsChRB;
|
||||
QComboBox *elevon1CB;
|
||||
QComboBox *elevon2CB;
|
||||
private:
|
||||
QComboBox *elevon1CB;
|
||||
QComboBox *elevon2CB;
|
||||
};
|
||||
|
||||
class RudderPage: public StandardPage
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
RudderPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
|
||||
protected slots:
|
||||
void noRudder();
|
||||
void hasRudder();
|
||||
public:
|
||||
RudderPage(WizardDialog *dlg, QString image, QString title, QString text, int nextPage=-1);
|
||||
void initializePage();
|
||||
bool validatePage();
|
||||
|
||||
private:
|
||||
QRadioButton *noRudderRB;
|
||||
QRadioButton *hasRudderRB;
|
||||
QComboBox *rudderCB;
|
||||
protected slots:
|
||||
void noRudder();
|
||||
void hasRudder();
|
||||
|
||||
private:
|
||||
QRadioButton *noRudderRB;
|
||||
QRadioButton *hasRudderRB;
|
||||
QComboBox *rudderCB;
|
||||
};
|
||||
|
||||
class TailPage: public StandardPage
|
||||
|
||||
@@ -105,8 +105,6 @@ void saveGeneralSettings(GeneralSettings & settings, global_settings & gs)
|
||||
}
|
||||
/* TODO if (settings.disableSplashScreen)
|
||||
gs.splash_screen(false); */
|
||||
if (settings.filterInput)
|
||||
gs.filter_input(filter_input::value(settings.filterInput));
|
||||
/* TODO if (settings.backlightDelay)
|
||||
gs.light_auto_off_timer(settings.lightAutoOff); */
|
||||
gs.default_channel_order(settings.templateSetup);
|
||||
|
||||
@@ -95,6 +95,10 @@ Section "OpenTX companion" SecDummy
|
||||
File "@CMAKE_CURRENT_SOURCE_DIR@\..\targets\windows\avrdude.conf"
|
||||
File "@CMAKE_CURRENT_SOURCE_DIR@\..\targets\windows\libusb0.dll"
|
||||
File "@CMAKE_CURRENT_SOURCE_DIR@\..\targets\windows\dfu-util.exe"
|
||||
|
||||
CreateDirectory "$INSTDIR\phonon_backend"
|
||||
SetOutPath "$INSTDIR\phonon_backend"
|
||||
File "@QT_BINARY_DIR@\..\plugins\phonon_backend\Phonon_ds94.dll"
|
||||
|
||||
CreateDirectory "$INSTDIR\lang"
|
||||
SetOutPath "$INSTDIR\lang"
|
||||
|
||||
@@ -123,6 +123,10 @@ Section "OpenTX Companion" SecDummy
|
||||
File "@CMAKE_CURRENT_SOURCE_DIR@\..\targets\windows\dfu-util.exe"
|
||||
File "@CMAKE_CURRENT_SOURCE_DIR@\..\targets\windows\libusb-1.0.dll"
|
||||
|
||||
CreateDirectory "$INSTDIR\phonon_backend"
|
||||
SetOutPath "$INSTDIR\phonon_backend"
|
||||
File "@QT_BINARY_DIR@\..\plugins\phonon_backend\Phonon_ds94.dll"
|
||||
|
||||
CreateDirectory "$INSTDIR\lang"
|
||||
SetOutPath "$INSTDIR\lang"
|
||||
File "*.qm"
|
||||
|
||||
@@ -1,4 +1,39 @@
|
||||
<h2>OpenTX 2.0 / Coming soon!</h2>
|
||||
<h2>Version 2.0.2 / 2014-06-12</h2>
|
||||
<ul>
|
||||
<li>RxBatt removed (merged with A1 as before)
|
||||
<li>Bootloader accessible through the 2 trims (as 2.0.0)
|
||||
<li>Delay on switches middle position only applied to Play functions
|
||||
<li>Delay for Play functions is configurable (0-300ms)
|
||||
<li>SWR, A3 and A4 now recorded in SD logs
|
||||
<li>Persistent mAh was not correctly stored in EEPROM
|
||||
<li>A lot of small bug fixes
|
||||
</ul>
|
||||
|
||||
<h2>OpenTX 2.0.1 / 2014-02-05</h2>
|
||||
[Taranis]
|
||||
<ul>
|
||||
<li>S.PORT / D protocol choice added in TELEMETRY menu
|
||||
<li>Heli mixer fix (stick modes 2/3/4)
|
||||
<li>Multipos switch fix
|
||||
<li>Italian translations updated
|
||||
<li>French translations fixes
|
||||
<li>Multis Wizard added
|
||||
<li>Bootloader now needs only one trim pressed
|
||||
<li>S3 warning hidden (no S3 on Taranis)
|
||||
<li>Persistent mAh was broken
|
||||
</ul>
|
||||
|
||||
[Stock]
|
||||
<ul>
|
||||
<li>Fix for LS used as source
|
||||
</ul>
|
||||
|
||||
[All]
|
||||
<ul>
|
||||
<li>Fix on d>=x logical switches
|
||||
</ul>
|
||||
|
||||
<h2>OpenTX 2.0.0 / 2014-06-02</h2>
|
||||
[Taranis]
|
||||
<ul>
|
||||
<li>Inputs layer with support for all physical inputs and telemetry
|
||||
@@ -17,7 +52,7 @@
|
||||
<li>Taranis will be useable as a standard PC joystick through USB, 8 analogs and 8 buttons mapped to CH1-8 and 9-16 respectively
|
||||
</ul>
|
||||
|
||||
[Arm Boards]
|
||||
[ARM Boards]
|
||||
<ul>
|
||||
<li>Measured consumption (mAh) can be stored on power off
|
||||
<li>0.1% resolution for limits
|
||||
@@ -33,7 +68,7 @@
|
||||
<li>Support for up to 16 channels on trainer input
|
||||
</ul>
|
||||
|
||||
[all]
|
||||
[All]
|
||||
<ul>
|
||||
<li>Proportional fonts
|
||||
<li>Switch warnings can be disabled for switches you don't use on a given model
|
||||
@@ -47,13 +82,13 @@
|
||||
</ul>
|
||||
|
||||
<h2>2940 / 2014-02-02</h2>
|
||||
[Arm Boards]
|
||||
[ARM Boards]
|
||||
<ul>
|
||||
<li>Wav files played even in silent mode
|
||||
<li>GPS support had broken VFAS
|
||||
</ul>
|
||||
|
||||
[all]
|
||||
[All]
|
||||
<ul>
|
||||
<li>Custom function triggered by a CSW based on analog triggering erroneously at powerup
|
||||
<li>Problem with mixer weight field when !GVARS
|
||||
@@ -61,20 +96,20 @@
|
||||
</ul>
|
||||
|
||||
<h2>2923 / 2014-01-08</h2>
|
||||
[Arm Boards]
|
||||
[ARM Boards]
|
||||
<ul>
|
||||
<li>Audio freeze bug fixed
|
||||
<li>Aurora gimbals support
|
||||
</ul>
|
||||
|
||||
<h2>2834 / 2013-10-29</h2>
|
||||
[Arm Boards]
|
||||
[ARM Boards]
|
||||
<ul>
|
||||
<li>Altitude played without decimal when >= 10m
|
||||
<li>Check to avoid too long paths when playing SD files
|
||||
</ul>
|
||||
|
||||
[all]
|
||||
[All]
|
||||
<ul>
|
||||
<li>Mixer bug when a MULTIPLY mix used with a slow
|
||||
<li>GVAR popup removed
|
||||
@@ -82,75 +117,75 @@
|
||||
</ul>
|
||||
|
||||
<h2>2768 / 2013-09-20</h2>
|
||||
[all]
|
||||
[All]
|
||||
<ul>
|
||||
<li>Name badly displayed after SD Model Restore</li>
|
||||
</ul>
|
||||
|
||||
[stock]
|
||||
[9X Stock]
|
||||
<ul>
|
||||
<li>Custom switches not working when comparing a timer with a value (stock only without telemetry mod)</li>
|
||||
</ul>
|
||||
|
||||
[sky9x/gruvin]
|
||||
[Sky9x/Gruvin9x]
|
||||
<ul>
|
||||
<li>Fixes in logging function</li>
|
||||
<li>Confirmation Popup before SD Format</li>
|
||||
</ul>
|
||||
|
||||
<h2>2751 / 2013-09-01</h2>
|
||||
[all]
|
||||
[All]
|
||||
<ul>
|
||||
<li>Fixes in translations (FR, IT, PT)</li>
|
||||
</ul>
|
||||
|
||||
<h2>2746 / 2013-08-30</h2>
|
||||
[all]
|
||||
[All]
|
||||
<ul>
|
||||
<li>Limits are now [-125:0] and [0:125] instead of [-125:25] and [-25:125]</li>
|
||||
<li>INPUTS instead of STICKS for BL activation</li>
|
||||
<li>Curves presets bug fix</li>
|
||||
</ul>
|
||||
|
||||
[stock]
|
||||
[9X Stock]
|
||||
<ul>
|
||||
<li>Fix bug with Battery calibration</li>
|
||||
<li>14051 can be used for THR and AIL connections (telemetry)</li>
|
||||
<li>CH1 PPM output was truncated</li>
|
||||
</ul>
|
||||
|
||||
[sky9x]
|
||||
[Sky9x]
|
||||
<ul>
|
||||
<li>Flight mode sound files now are read from: /SOUNDS/(lang)/modelname/fpname-ON.wav and /SOUNDS/(lang)/modelname/fpname-OFF.wav</li>
|
||||
</ul>
|
||||
|
||||
<h2>2688 / 2013-07-28</h2>
|
||||
[stock]
|
||||
[9X Stock]
|
||||
<ul>
|
||||
<li>Fix bug with imperial units</li>
|
||||
</ul>
|
||||
|
||||
[gruvin9x]
|
||||
[Gruvin9x]
|
||||
<ul>
|
||||
<li>Fix bug with imperial units</li>
|
||||
<li>Fix small bug with SOMO 14D </li>
|
||||
<li>Telemetry logs renamed modelname-yyyy-mm-dd.csv</li>
|
||||
</ul>
|
||||
|
||||
[sky9x]
|
||||
[Sky9x]
|
||||
<ul>
|
||||
<li>Telemetry logs renamed modelname-yyyy-mm-dd.csv</li>
|
||||
</ul>
|
||||
|
||||
<h2>2647 / 2013-07-21</h2>
|
||||
[all]
|
||||
[All]
|
||||
<ul>
|
||||
<li>Some bug fixes</li>
|
||||
<li>Better fonts</li>
|
||||
</ul>
|
||||
|
||||
<h2>2491 / 2013-06-24</h2>
|
||||
[all]
|
||||
[All]
|
||||
<ul>
|
||||
<li>PlaySound has now a repeat argument</li>
|
||||
<li>FAI mode added (disable telemetry other than A1/A2/RSSI for contests)</li>
|
||||
@@ -158,55 +193,55 @@
|
||||
<li>RSSI alarms default thresholds now 45 / 42 </li>
|
||||
</ul>
|
||||
|
||||
[stock]
|
||||
[9X Stock]
|
||||
<ul>
|
||||
<li>Flash savings</li>
|
||||
<li>Vario sink tones removed</li>
|
||||
<li>Audio files renumbered (see here) </li>
|
||||
</ul>
|
||||
|
||||
[sky9x]
|
||||
[Sky9x]
|
||||
<ul>
|
||||
<li>Audio mixer: several sounds can now be played simulataneously, and beeps won't interrupt and clear voice alerts anymore. Note that sound files now need to have sampling rates of either 8, 16 or 32kHz and may need to be replaced. </li>
|
||||
</ul>
|
||||
|
||||
<h2>2413 / 2013-05-22</h2>
|
||||
[all]
|
||||
[All]
|
||||
<ul>
|
||||
<li>Calibration screen automatically appears following an EEPROM format</li>
|
||||
<li>Wraparound in popup menus </li>
|
||||
</ul>
|
||||
|
||||
[stock]
|
||||
[9X Stock]
|
||||
<ul>
|
||||
<li>More options supported (novario / nogps / nogauges)</li>
|
||||
<li>Flash savings</li>
|
||||
<li>Mavlink huge rework by Rienk! </li>
|
||||
</ul>
|
||||
|
||||
[sky9x]
|
||||
[Sky9x]
|
||||
<ul>
|
||||
<li>Audio language can now be selected in the general settings! Note that the sound files need to be moved to subfolders of the SOUNDS folder (SOUNDS/en for English, same with it, fr, de, pt, se, cz)</li>
|
||||
<li>More settings for the 2nd PPM port</li>
|
||||
</ul>
|
||||
|
||||
<h2>2215 / 2013-04-05</h2>
|
||||
[all]
|
||||
[All]
|
||||
<ul>
|
||||
<li>New option AUTOSOURCE to automatically select the stick / pot / switch which is moved when editing a Mix source </li>
|
||||
</ul>
|
||||
|
||||
[stock]
|
||||
[9X Stock]
|
||||
<ul>
|
||||
<li>All prompts renumbered to have the "custom" prompts starting at 0 and to be able to use PlayTrack?(GVAR) with Adjust(GVAR) to play tracks sequences </li>
|
||||
</ul>
|
||||
|
||||
[gruvin9x]
|
||||
[Gruvin9x]
|
||||
<ul>
|
||||
<li>Possibility to have both BEEPER and SPEAKER enable in the same time </li>
|
||||
</ul>
|
||||
|
||||
[sky9x]
|
||||
[Sky9x]
|
||||
<ul>
|
||||
<li>Fixed a bug with audio stopped until next reboot in BackgroundMusic with no track selected</li>
|
||||
<li>Imperial is now an option selectable in the menus</li>
|
||||
|
||||
@@ -279,7 +279,7 @@ SHELL = sh
|
||||
IMG2LBM = -python ../util/img2lbm.py
|
||||
BIN2LBM = -python ../util/bin2lbm.py
|
||||
TRANSLATE = -python ../util/translate.py
|
||||
VERSION = 2.0.0
|
||||
VERSION = 2.0.2
|
||||
|
||||
SRC =
|
||||
CPPSRC =
|
||||
@@ -953,6 +953,7 @@ ifeq ($(EXT), $(filter $(EXT), FRSKY FRSKY_SPORT TELEMETREZ))
|
||||
endif
|
||||
|
||||
ifeq ($(VARIO), YES)
|
||||
CPPSRC += vario.cpp
|
||||
CPPDEFS += -DVARIO
|
||||
endif
|
||||
EEPROM_VARIANT += ${FRSKY_VARIANT}
|
||||
|
||||
@@ -201,8 +201,6 @@ const char * audioFilenames[] = {
|
||||
"rssi_org",
|
||||
"rssi_red",
|
||||
"swr_red",
|
||||
"rx_org",
|
||||
"rx_red",
|
||||
"telemko",
|
||||
"telemok"
|
||||
};
|
||||
@@ -329,8 +327,8 @@ void getLogicalSwitchAudioFile(char * filename, int index, unsigned int event)
|
||||
char * str = getModelPath(filename);
|
||||
int len = STR_VSWITCHES[0];
|
||||
strncpy(str, &STR_VSWITCHES[1+len*(index+SWSRC_FIRST_LOGICAL_SWITCH)], len);
|
||||
str += len;
|
||||
strcpy(str, suffixes[event]);
|
||||
str[len] = '\0';
|
||||
strcat(str, suffixes[event]);
|
||||
strcat(str, SOUNDS_EXT);
|
||||
}
|
||||
|
||||
@@ -1057,14 +1055,12 @@ void audioEvent(uint8_t e, uint16_t f)
|
||||
case AU_TIMER_30:
|
||||
audioQueue.playTone(BEEP_DEFAULT_FREQ+150, 120, 20, PLAY_REPEAT(2)|PLAY_NOW);
|
||||
break;
|
||||
case AU_RXBATT_ORANGE:
|
||||
case AU_A1_ORANGE:
|
||||
case AU_A2_ORANGE:
|
||||
case AU_A3_ORANGE:
|
||||
case AU_A4_ORANGE:
|
||||
audioQueue.playTone(BEEP_DEFAULT_FREQ+600, 200, 20, PLAY_NOW);
|
||||
break;
|
||||
case AU_RXBATT_RED:
|
||||
case AU_A1_RED:
|
||||
case AU_A2_RED:
|
||||
case AU_A3_RED:
|
||||
|
||||
@@ -62,9 +62,10 @@
|
||||
#include "../FatFs/ff.h"
|
||||
#include "../FatFs/diskio.h"
|
||||
#include "../translations/en.h"
|
||||
#include "../stamp-opentx.h"
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
#define BOOTLOADER_TITLE " Taranis BootLoader - v1.0"
|
||||
#define BOOTLOADER_TITLE " Taranis BootLoader - " VERS_STR
|
||||
#define BOOT_KEY_UP KEY_PLUS
|
||||
#define BOOT_KEY_DOWN KEY_MINUS
|
||||
#define BOOT_KEY_LEFT KEY_MENU
|
||||
@@ -73,7 +74,7 @@
|
||||
#define BOOT_KEY_EXIT KEY_EXIT
|
||||
#define DISPLAY_CHAR_WIDTH 35
|
||||
#elif defined(PCBSKY9X)
|
||||
#define BOOTLOADER_TITLE "Sky9x Boot Loader - v1.0"
|
||||
#define BOOTLOADER_TITLE "Sky9x Boot Loader - " VERS_STR
|
||||
#endif
|
||||
|
||||
const uint8_t bootloaderVersion[] __attribute__ ((section(".version"), used)) =
|
||||
@@ -499,6 +500,9 @@ int main()
|
||||
#endif
|
||||
|
||||
#if defined(PCBTARANIS)
|
||||
#if defined(REVPLUS)
|
||||
turnBacklightOn(0, 0);
|
||||
#endif
|
||||
keysInit();
|
||||
I2C_EE_Init();
|
||||
init_hw_timer();
|
||||
|
||||