1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-19 06:15:10 +03:00

Merge remote-tracking branch 'origin/next' into

bsongis/Taranis_6Positions_Pot

Conflicts:
	radio/src/myeeprom.h
This commit is contained in:
Bertrand Songis 2014-01-31 11:28:34 +01:00
commit 38145a02f4
1167 changed files with 24905 additions and 51441 deletions

View file

@ -2,6 +2,7 @@ Bertrand Songis
Romolo Manfredini Romolo Manfredini
André Bernet André Bernet
Michael Blandford Michael Blandford
Rob Thomson
Bryan J. Rentoul (aka Gruvin) Bryan J. Rentoul (aka Gruvin)
Cameron Weeks Cameron Weeks
Martin Hotař Martin Hotař
@ -17,4 +18,4 @@ Severino Anedda (splash screens)
Grootwitbaas - 9xforums.com (mac) Grootwitbaas - 9xforums.com (mac)
Adrian Amberg (splash screens) Adrian Amberg (splash screens)
Wallaguest1 - 9xforums.com (splash screens) Wallaguest1 - 9xforums.com (splash screens)
HC1969 - 9xforums.com (splash screens) HC1969 - 9xforums.com (splash screens)

View file

@ -45,7 +45,7 @@ Martin Wilson
Joe Street Joe Street
John Holdsworth John Holdsworth
Daniel Schwartz Daniel Schwartz
Dean Church Dean Church (monthly)
Michael Halse Michael Halse
David Mark David Mark
Ted Moss Ted Moss
@ -95,8 +95,8 @@ Heinrich Illig
Michael Collins Michael Collins
Michael Manning Michael Manning
Craig Lorentz Craig Lorentz
Jonathan Modellismo - http://jonathan.it Jonathan Modellismo - jonathan.it
Aviomotive - http://www.aviomotive.com Aviomotive - www.aviomotive.com
André Lasseret André Lasseret
Felipe Alexandre de Oliveira Felipe Alexandre de Oliveira
Brian Harris Brian Harris
@ -126,7 +126,7 @@ Larisa Filocamo
Alex Calderhead Alex Calderhead
Hartmut Sahm Hartmut Sahm
Åke Brodin Åke Brodin
Aloft Hobbies - http://www.alofthobbies.com Aloft Hobbies - www.alofthobbies.com
Ted Moss Ted Moss
Filippos Tigarakis Filippos Tigarakis
Chewytm Chewytm
@ -166,7 +166,7 @@ Heiko Polig
Andrew Fernie Andrew Fernie
Marco Lange Marco Lange
Nick McMillan Nick McMillan
Michel Baily (mensual) Michel Baily (monthly)
Patrick Mullen Patrick Mullen
Scott Campbell Scott Campbell
Erich Roeder Erich Roeder
@ -252,4 +252,58 @@ Sławomir Juszczak
Stephen Henderson Stephen Henderson
David Morgan David Morgan
Aloft Hobbies Aloft Hobbies
Netanel Hobara
Cameron Galipo
Doug Schafer
Pietro Rossin
Earl Killingsworth
Victor B Wright
Terry McKinley
Марков Алексей
Offer Shmuely
Ian Lobley
Keith Hertzog
Stéphane Fortas
Peter Mitrik
Thomas Majewski
ANF King
Henrik Hammarström
Kenneth Lilja (monthly)
R Wells
Uwe Jordt
Harald Wilczak
Bernhard Lohmann
Ferenc Koller
Robert Ferguson
Daniel Byers
Tyler Darby
Miguel Villalpando
Kim Dong Hoon
Terry McKinley
Walter Bell
wsTech - http://wstech.de
Clinton Linck
Gordon Stahl
Josep Clodas Sola
Thierry Martin
Peter Mauro
Mitchell Brenner
Ulach Green
Lluis Bullich Rañe
Steffen Rohr
Eric Jacquin
Harvest Lane
Ville Kuvaja
DK-System
Heinz Vogel
Heung Jin Choi
MMJS van der Helm
Dan Neelands
Yashiro Masayuki
Isaac Sloan
Harold Baird
Roy Bender
Bradley Murchie
Maximilian Süß
Dean Jansa
Ronald Donker

8
README.md Normal file
View file

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

View file

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

View file

@ -1,7 +1,7 @@
PROJECT( companion9x ) PROJECT( companion )
SET( C9X_VERSION_MAJOR "1" ) SET( C9X_VERSION_MAJOR "1" )
SET( C9X_VERSION_MINOR "51" ) SET( C9X_VERSION_MINOR "52" )
SET( C9X_VERSION ${C9X_VERSION_MAJOR}.${C9X_VERSION_MINOR} ) SET( C9X_VERSION ${C9X_VERSION_MAJOR}.${C9X_VERSION_MINOR} )
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 ) CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )
@ -109,7 +109,18 @@ add_custom_command(
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/firmwares/ersky9x/ersky9xsimulator.cpp DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/firmwares/ersky9x/ersky9xsimulator.cpp
) )
SET( companion9x_SRCS set(RADIO_SRC_DIRECTORY ${PROJECT_SOURCE_DIR}/../../radio/src)
add_custom_command(
OUTPUT ${RADIO_SRC_DIRECTORY}/bitmaps/sticks.lbm
COMMAND make lbm
DEPENDS ${RADIO_SRC_DIRECTORY}/bitmaps/sticks_4x1.xbm
WORKING_DIRECTORY ${RADIO_SRC_DIRECTORY}
)
add_subdirectory(modeledit)
SET( companion_SRCS
eeprominterface.cpp eeprominterface.cpp
hexinterface.cpp hexinterface.cpp
flashinterface.cpp flashinterface.cpp
@ -124,28 +135,25 @@ SET( companion9x_SRCS
${ER9X_CHECKOUT_DIRECTORY}/er9xsimulator.cpp ${ER9X_CHECKOUT_DIRECTORY}/er9xsimulator.cpp
firmwares/gruvin9x/gruvin9xeeprom.cpp firmwares/gruvin9x/gruvin9xeeprom.cpp
firmwares/gruvin9x/gruvin9xinterface.cpp firmwares/gruvin9x/gruvin9xinterface.cpp
firmwares/opentx/open9xeeprom.cpp firmwares/opentx/opentxeeprom.cpp
firmwares/opentx/open9xStockeeprom.cpp firmwares/opentx/open9xStockeeprom.cpp
firmwares/opentx/open9xinterface.cpp
firmwares/opentx/open9xGruvin9xeeprom.cpp firmwares/opentx/open9xGruvin9xeeprom.cpp
firmwares/opentx/open9xSky9xeeprom.cpp firmwares/opentx/open9xSky9xeeprom.cpp
firmwares/opentx/opentxinterface.cpp
firmwares/opentx/opentxTaranisSimulator.cpp firmwares/opentx/opentxTaranisSimulator.cpp
firmwares/opentx/open9xSky9xsimulator.cpp firmwares/opentx/opentxSky9xsimulator.cpp
firmwares/opentx/open9xGruvin9xsimulator.cpp firmwares/opentx/opentxGruvin9xsimulator.cpp
firmwares/opentx/open9xM128simulator.cpp firmwares/opentx/opentxM128simulator.cpp
firmwares/opentx/open9xsimulator.cpp firmwares/opentx/opentxsimulator.cpp
firmwares/ersky9x/ersky9xeeprom.cpp firmwares/ersky9x/ersky9xeeprom.cpp
firmwares/ersky9x/ersky9xinterface.cpp firmwares/ersky9x/ersky9xinterface.cpp
${ERSKY9X_CHECKOUT_DIRECTORY}/ersky9xsimulator.cpp ${ERSKY9X_CHECKOUT_DIRECTORY}/ersky9xsimulator.cpp
node.cpp ${RADIO_SRC_DIRECTORY}/bitmaps/sticks.lbm
edge.cpp
helpers.cpp helpers.cpp
mdichild.cpp mdichild.cpp
generaledit.cpp generaledit.cpp
modeledit.cpp
modelslist.cpp modelslist.cpp
mountlist.cpp mountlist.cpp
mixerslist.cpp
avroutputdialog.cpp avroutputdialog.cpp
preferencesdialog.cpp preferencesdialog.cpp
burnconfigdialog.cpp burnconfigdialog.cpp
@ -155,8 +163,6 @@ SET( companion9x_SRCS
burndialog.cpp burndialog.cpp
printdialog.cpp printdialog.cpp
fusesdialog.cpp fusesdialog.cpp
expodialog.cpp
mixerdialog.cpp
logsdialog.cpp logsdialog.cpp
downloaddialog.cpp downloaddialog.cpp
simulatordialog.cpp simulatordialog.cpp
@ -168,16 +174,14 @@ SET( companion9x_SRCS
qcustomplot.cpp qcustomplot.cpp
) )
SET( companion9x_MOC_HDRS SET( companion_MOC_HDRS
avroutputdialog.h avroutputdialog.h
preferencesdialog.h preferencesdialog.h
burnconfigdialog.h burnconfigdialog.h
comparedialog.h comparedialog.h
printdialog.h printdialog.h
fusesdialog.h fusesdialog.h
mixerdialog.h
logsdialog.h logsdialog.h
expodialog.h
contributorsdialog.h contributorsdialog.h
customizesplashdialog.h customizesplashdialog.h
splashlibrary.h splashlibrary.h
@ -191,31 +195,27 @@ SET( companion9x_MOC_HDRS
xmenuwidget.h xmenuwidget.h
xsimulatordialog.h xsimulatordialog.h
generaledit.h generaledit.h
modeledit.h
modelslist.h modelslist.h
mixerslist.h
mdichild.h mdichild.h
mainwindow.h mainwindow.h
myslider.h myslider.h
modelconfigdialog.h modelconfigdialog.h
qcustomplot.h qcustomplot.h
helpers.h
) )
SET( companion9x_UIS SET( companion_UIS
mdichild.ui mdichild.ui
avroutputdialog.ui avroutputdialog.ui
comparedialog.ui comparedialog.ui
fusesdialog.ui fusesdialog.ui
expodialog.ui
logsdialog.ui logsdialog.ui
mixerdialog.ui
preferencesdialog.ui preferencesdialog.ui
simulatordialog.ui simulatordialog.ui
xsimulatordialog.ui xsimulatordialog.ui
burnconfigdialog.ui burnconfigdialog.ui
downloaddialog.ui downloaddialog.ui
generaledit.ui generaledit.ui
modeledit.ui
printdialog.ui printdialog.ui
contributorsdialog.ui contributorsdialog.ui
customizesplashdialog.ui customizesplashdialog.ui
@ -225,26 +225,26 @@ SET( companion9x_UIS
) )
IF ( SDL_FOUND ) IF ( SDL_FOUND )
SET( companion9x_SRCS SET( companion_SRCS
${companion9x_SRCS} ${companion_SRCS}
joystick.cpp joystick.cpp
joystickdialog.cpp joystickdialog.cpp
) )
SET( companion9x_MOC_HDRS SET( companion_MOC_HDRS
${companion9x_MOC_HDRS} ${companion_MOC_HDRS}
joystick.h joystick.h
joystickdialog.h joystickdialog.h
) )
SET( companion9x_UIS SET( companion_UIS
${companion9x_UIS} ${companion_UIS}
joystickdialog.ui joystickdialog.ui
) )
ENDIF( ) ENDIF( )
SET( companion9x_RCS SET( companion_RCS
companion9x.qrc companion.qrc
${CMAKE_CURRENT_BINARY_DIR}/translations.qrc ${CMAKE_CURRENT_BINARY_DIR}/translations.qrc
) )
@ -286,7 +286,7 @@ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/firmwares/opentx/stamp-opentx.h.in ${
SET( PATCH_FLAGS "--binary" ) SET( PATCH_FLAGS "--binary" )
IF( WIN32 ) IF( WIN32 )
SET( companion9x_SRCS ${companion9x_SRCS} icon.rc ) SET( companion_SRCS ${companion_SRCS} icon.rc )
IF ( NOT MSVC ) IF ( NOT MSVC )
SET(CMAKE_EXE_LINKER_FLAGS -mwindows) SET(CMAKE_EXE_LINKER_FLAGS -mwindows)
ENDIF( ) ENDIF( )
@ -298,28 +298,36 @@ INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR} )
SET( LANGUAGES he pt ru de fr it sv cs ) SET( LANGUAGES he pt ru de fr it sv cs )
FOREACH( language ${LANGUAGES} ) FOREACH( language ${LANGUAGES} )
SET( companion9x_TS ${companion9x_TS} translations/companion9x_${language}.ts ) SET( companion_TS ${companion_TS} translations/companion_${language}.ts )
ENDFOREACH( language ) ENDFOREACH( language )
QT4_WRAP_UI( companion9x_SRCS ${companion9x_UIS} ) QT4_WRAP_UI( companion_SRCS ${companion_UIS} )
QT4_WRAP_CPP( companion9x_SRCS ${companion9x_MOC_HDRS} ) QT4_WRAP_CPP( companion_SRCS ${companion_MOC_HDRS} )
QT4_ADD_TRANSLATION( companion9x_QM ${companion9x_TS} ) QT4_ADD_TRANSLATION( companion_QM ${companion_TS} )
QT4_ADD_RESOURCES( companion9x_SRCS ${companion9x_RCS} ) QT4_ADD_RESOURCES( companion_SRCS ${companion_RCS} )
ADD_DEFINITIONS( -DQT_TRANSLATIONS_DIR="${QT_TRANSLATIONS_DIR}" ) ADD_DEFINITIONS( -DQT_TRANSLATIONS_DIR="${QT_TRANSLATIONS_DIR}" )
IF( APPLE ) IF( APPLE )
ADD_EXECUTABLE( ${PROJECT_NAME} MACOSX_BUNDLE ${companion9x_SRCS} ${companion9x_QM} ) ADD_EXECUTABLE( ${PROJECT_NAME} MACOSX_BUNDLE ${companion_SRCS} ${companion_QM} )
ELSE( ) ELSE( )
ADD_EXECUTABLE( ${PROJECT_NAME} WIN32 ${companion9x_SRCS} ${companion9x_QM} ) ADD_EXECUTABLE( ${PROJECT_NAME} WIN32 ${companion_SRCS} ${companion_QM} )
ENDIF( ) ENDIF( )
TARGET_LINK_LIBRARIES( ${PROJECT_NAME} ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY} ${XERCESC_LIBRARY} ${PTHREAD_LIBRARY} ${SDL_LIBRARY} ${PHONON_LIBS} ) TARGET_LINK_LIBRARIES( ${PROJECT_NAME} modeledit ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY} ${XERCESC_LIBRARY} ${PTHREAD_LIBRARY} ${SDL_LIBRARY} ${PHONON_LIBS} )
IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux") IF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
INSTALL( TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin ) INSTALL( TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin )
INSTALL( FILES companion9x.desktop DESTINATION share/applications ) INSTALL( FILES companion.desktop DESTINATION share/applications )
INSTALL( FILES companion9x.png DESTINATION share/icons ) INSTALL( FILES images/linuxicons/16x16/companion.png DESTINATION /usr/share/icons/hicolor/16x16/apps )
INSTALL( FILES images/linuxicons/22x22/companion.png DESTINATION /usr/share/icons/hicolor/22x22/apps )
INSTALL( FILES images/linuxicons/24x24/companion.png DESTINATION /usr/share/icons/hicolor/24x24/apps )
INSTALL( FILES images/linuxicons/32x32/companion.png DESTINATION /usr/share/icons/hicolor/32x32/apps )
INSTALL( FILES images/linuxicons/48x48/companion.png DESTINATION /usr/share/icons/hicolor/48x48/apps )
INSTALL( FILES images/linuxicons/128x128/companion.png DESTINATION /usr/share/icons/hicolor/128x128/apps )
INSTALL( FILES images/linuxicons/256x256/companion.png DESTINATION /usr/share/icons/hicolor/256x256/apps )
INSTALL( FILES images/linuxicons/512x512/companion.png DESTINATION /usr/share/icons/hicolor/512x512/apps )
INSTALL( FILES images/linuxicons/scalable/companion.svg DESTINATION /usr/share/icons/hicolor/scalable/apps )
INSTALL( FILES ../targets/linux/45-taranis.rules DESTINATION /etc/udev/rules.d/ ) INSTALL( FILES ../targets/linux/45-taranis.rules DESTINATION /etc/udev/rules.d/ )
# Linux specific code # Linux specific code
SET(OperatingSystem "Linux") SET(OperatingSystem "Linux")
@ -329,13 +337,13 @@ ENDIF(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
IF( WIN32 ) IF( WIN32 )
IF( MSVC ) IF( MSVC )
SET( NSI_IN_FILE companion9x-vs.nsi.in ) SET( NSI_IN_FILE companion-vs.nsi.in )
ELSE( ) ELSE( )
SET( NSI_IN_FILE companion9x-msys.nsi.in ) SET( NSI_IN_FILE companion-msys.nsi.in )
ENDIF( ) ENDIF( )
SET( SYSDIR "$ENV{windir}/system32" ) SET( SYSDIR "$ENV{windir}/system32" )
CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/../targets/windows/${NSI_IN_FILE} ${CMAKE_CURRENT_BINARY_DIR}/companion9x.nsi @ONLY) CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/../targets/windows/${NSI_IN_FILE} ${CMAKE_CURRENT_BINARY_DIR}/companion.nsi @ONLY)
FIND_PROGRAM(NSIS_EXE makensis.exe PATHS FIND_PROGRAM(NSIS_EXE makensis.exe PATHS
"C:/Program Files/NSIS" "C:/Program Files/NSIS"
@ -343,14 +351,14 @@ IF( WIN32 )
"C:/Programs/NSIS" "C:/Programs/NSIS"
) )
ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/companion9xInstall.exe ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_BINARY_DIR}/companionInstall.exe
COMMAND "${NSIS_EXE}" ARGS companion9x.nsi COMMAND "${NSIS_EXE}" ARGS companion.nsi
DEPENDS ${PROJECT_NAME} ${PROJECT_BINARY_DIR}/companion9x.nsi DEPENDS ${PROJECT_NAME} ${PROJECT_BINARY_DIR}/companion.nsi
COMMENT "Windows NSIS Installer") COMMENT "Windows NSIS Installer")
ADD_CUSTOM_TARGET( installer ADD_CUSTOM_TARGET( installer
DEPENDS ${PROJECT_BINARY_DIR}/companion9xInstall.exe DEPENDS ${PROJECT_BINARY_DIR}/companionInstall.exe
SOURCES ${PROJECT_BINARY_DIR}/companion9x.nsi) SOURCES ${PROJECT_BINARY_DIR}/companion.nsi)
ENDIF( ) ENDIF( )
IF( APPLE ) IF( APPLE )
@ -362,36 +370,36 @@ IF( APPLE )
ENDIF() ENDIF()
ADD_CUSTOM_TARGET( addframeworks ALL ADD_CUSTOM_TARGET( addframeworks ALL
COMMAND mkdir -p companion9x.app/Contents/Frameworks COMMAND mkdir -p companion.app/Contents/Frameworks
COMMAND mkdir -p companion9x.app/Contents/Resources COMMAND mkdir -p companion.app/Contents/Resources
COMMAND mkdir -p companion9x.app/Contents/translations COMMAND mkdir -p companion.app/Contents/translations
COMMAND rsync ${PROJECT_SOURCE_DIR}/images/${MACOSX_BUNDLE_ICON_FILE} companion9x.app/Contents/Resources/${MACOSX_BUNDLE_ICON_FILE} # Copy the icon files COMMAND rsync ${PROJECT_SOURCE_DIR}/images/${MACOSX_BUNDLE_ICON_FILE} companion.app/Contents/Resources/${MACOSX_BUNDLE_ICON_FILE} # Copy the icon files
COMMAND rsync ${PROJECT_SOURCE_DIR}/../macbuild/lib* companion9x.app/Contents/Frameworks COMMAND rsync ${PROJECT_SOURCE_DIR}/../targets/mac/lib* companion.app/Contents/Frameworks
#COMMAND rsync ${PROJECT_SOURCE_DIR}/../macbuild/libcrypto.1.0.0.dylib companion9x.app/Contents/Frameworks #COMMAND rsync ${PROJECT_SOURCE_DIR}/../targets/mac/libcrypto.1.0.0.dylib companion.app/Contents/Frameworks
COMMAND rsync -r --exclude=.svn ${PROJECT_SOURCE_DIR}/../macbuild/qt_menu.nib companion9x.app/Contents/Resources/ COMMAND rsync -r --exclude=.svn ${PROJECT_SOURCE_DIR}/../targets/mac/qt_menu.nib companion.app/Contents/Resources/
COMMAND rsync ${PROJECT_BINARY_DIR}/*.qm companion9x.app/Contents/translations COMMAND rsync ${PROJECT_BINARY_DIR}/*.qm companion.app/Contents/translations
COMMAND ${QT_BINARY_DIR}/macdeployqt companion9x.app COMMAND ${QT_BINARY_DIR}/macdeployqt companion.app
WORKING_DIRECTORY ${WORK_DIR} WORKING_DIRECTORY ${WORK_DIR}
DEPENDS ${PROJECT_NAME} ) DEPENDS ${PROJECT_NAME} )
ADD_CUSTOM_TARGET( makedmg ADD_CUSTOM_TARGET( makedmg
COMMAND ${QT_BINARY_DIR}/macdeployqt companion9x.app -dmg -no-plugins COMMAND ${QT_BINARY_DIR}/macdeployqt companion.app -dmg -no-plugins
WORKING_DIRECTORY ${WORK_DIR} WORKING_DIRECTORY ${WORK_DIR}
DEPENDS addframeworks ) DEPENDS addframeworks )
ENDIF( ) ENDIF( )
ADD_CUSTOM_TARGET( stamp ADD_CUSTOM_TARGET( stamp
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/version.h ${CMAKE_SOURCE_DIR}/../companion9x.stamp COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/version.h ${CMAKE_SOURCE_DIR}/../companion.stamp
DEPENDS ${CMAKE_BINARY_DIR}/version.h ) DEPENDS ${CMAKE_BINARY_DIR}/version.h )
ADD_CUSTOM_TARGET( translations ADD_CUSTOM_TARGET( translations
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
COMMAND lupdate-qt4 ${CMAKE_SOURCE_DIR} -ts ${companion9x_TS} ) COMMAND lupdate-qt4 ${CMAKE_SOURCE_DIR} -ts ${companion_TS} )
SET(CPACK_PACKAGE_NAME "COMPANION9X") SET(CPACK_PACKAGE_NAME "COMPANION")
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "EEPROM Editor for the openTx open source firmware") SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Models and settings editor for the OpenTx open source firmware")
string(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_PACKAGE_NAME_LOWERCASE) string(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_PACKAGE_NAME_LOWERCASE)
find_program(DPKG_PROGRAM dpkg DOC "dpkg program of Debian-based systems") find_program(DPKG_PROGRAM dpkg DOC "dpkg program of Debian-based systems")
if(DPKG_PROGRAM) if(DPKG_PROGRAM)

View file

@ -58,7 +58,7 @@ avrOutputDialog::avrOutputDialog(QWidget *parent, QString prog, QStringList arg,
QFile exec; QFile exec;
winTitle=wTitle; winTitle=wTitle;
if (!(exec.exists(prog))) { if (!(exec.exists(prog))) {
QMessageBox::critical(this, "companion9x", getProgrammer() + " " + tr("executable not found")); QMessageBox::critical(this, "Companion", getProgrammer() + " " + tr("executable not found"));
closeOpt = AVR_DIALOG_FORCE_CLOSE; closeOpt = AVR_DIALOG_FORCE_CLOSE;
QTimer::singleShot(0, this, SLOT(forceClose())); QTimer::singleShot(0, this, SLOT(forceClose()));
} else { } else {
@ -315,10 +315,10 @@ void avrOutputDialog::errorWizard()
} }
} }
if (fwexist==false) { if (fwexist==false) {
QMessageBox::warning(this, "companion9x - Tip of the day", tr("Your radio uses a %1 CPU!!!\n\nPlease check advanced burn options to set the correct cpu type.").arg(DeviceStr)); QMessageBox::warning(this, "Companion - Tip of the day", tr("Your radio uses a %1 CPU!!!\n\nPlease check advanced burn options to set the correct cpu type.").arg(DeviceStr));
} else { } else {
FirmwareInfo *firmware = GetCurrentFirmware(); FirmwareInfo *firmware = GetCurrentFirmware();
QMessageBox::warning(this, "companion9x - Tip of the day", tr("Your radio uses a %1 CPU!!!\n\nPlease select an appropriate firmware type to program it.").arg(DeviceStr)+FwStr+tr("\nYou are currently using:\n %1").arg(firmware->name)); QMessageBox::warning(this, "Companion - Tip of the day", tr("Your radio uses a %1 CPU!!!\n\nPlease select an appropriate firmware type to program it.").arg(DeviceStr)+FwStr+tr("\nYou are currently using:\n %1").arg(firmware->name));
} }
} }
} }
@ -416,24 +416,24 @@ void avrOutputDialog::doFinished(int code=0)
if (hasErrors || code) { if (hasErrors || code) {
if (!cmdLine.isEmpty()) { if (!cmdLine.isEmpty()) {
if (getProgrammer()!="AVRDUDE") { if (getProgrammer()!="AVRDUDE") {
QMessageBox::critical(this, "companion9x", getProgrammer() + " " + tr("did not finish correctly")); QMessageBox::critical(this, "Companion", getProgrammer() + " " + tr("did not finish correctly"));
} else { } else {
int res = QMessageBox::question(this, "companion9x",getProgrammer() + " " + tr("did not finish correctly!\nDo you want some help ?"),QMessageBox::Yes | QMessageBox::No); int res = QMessageBox::question(this, "Companion",getProgrammer() + " " + tr("did not finish correctly!\nDo you want some help ?"),QMessageBox::Yes | QMessageBox::No);
if (res != QMessageBox::No) { if (res != QMessageBox::No) {
errorWizard(); errorWizard();
} }
} }
} else { } else {
QMessageBox::critical(this, "companion9x", tr("Copy did not finish correctly")); QMessageBox::critical(this, "Companion", tr("Copy did not finish correctly"));
} }
// reject(); // reject();
} else { } else {
if (!cmdLine.isEmpty()) { if (!cmdLine.isEmpty()) {
ui->progressBar->setValue(100); ui->progressBar->setValue(100);
QMessageBox::information(this, "companion9x", getProgrammer() + " " + tr("finished correctly")); QMessageBox::information(this, "Companion", getProgrammer() + " " + tr("finished correctly"));
accept(); accept();
} else { } else {
QMessageBox::information(this, "companion9x", tr("Copy finished correctly")); QMessageBox::information(this, "Companion", tr("Copy finished correctly"));
accept(); accept();
} }
} }

View file

@ -32,7 +32,7 @@
<string>Dialog</string> <string>Dialog</string>
</property> </property>
<property name="windowIcon"> <property name="windowIcon">
<iconset resource="companion9x.qrc"> <iconset resource="companion.qrc">
<normaloff>:/icon.png</normaloff>:/icon.png</iconset> <normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
@ -109,7 +109,7 @@
</layout> </layout>
</widget> </widget>
<resources> <resources>
<include location="companion9x.qrc"/> <include location="companion.qrc"/>
</resources> </resources>
<connections/> <connections/>
</ui> </ui>

View file

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

View file

@ -26,8 +26,8 @@
<string>Programmer Configuration</string> <string>Programmer Configuration</string>
</property> </property>
<property name="windowIcon"> <property name="windowIcon">
<iconset resource="companion9x.qrc"> <iconset resource="companion.qrc">
<normaloff>:/images/configure.png</normaloff>:/images/configure.png</iconset> <normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property> </property>
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<item row="2" column="0"> <item row="2" column="0">
@ -760,7 +760,7 @@ Please only use this if you know what you are doing. There are no error checks
<tabstop>buttonBox</tabstop> <tabstop>buttonBox</tabstop>
</tabstops> </tabstops>
<resources> <resources>
<include location="companion9x.qrc"/> <include location="companion.qrc"/>
</resources> </resources>
<connections> <connections>
<connection> <connection>

View file

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

View file

@ -26,8 +26,8 @@
<string>Customize Splash</string> <string>Customize Splash</string>
</property> </property>
<property name="windowIcon"> <property name="windowIcon">
<iconset> <iconset resource="companion.qrc">
<normaloff>:/images/c_home.png</normaloff>:/images/c_home.png</iconset> <normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property> </property>
<layout class="QGridLayout" name="gridLayout_7"> <layout class="QGridLayout" name="gridLayout_7">
<item row="1" column="0"> <item row="1" column="0">
@ -273,7 +273,7 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="toolTip"> <property name="toolTip">
<string>Allows companion9x to write to older version of the firmware</string> <string>Allows Companion to write to older version of the firmware</string>
</property> </property>
<property name="text"> <property name="text">
<string>Check Firmware compatibility</string> <string>Check Firmware compatibility</string>
@ -455,10 +455,6 @@
<property name="text"> <property name="text">
<string>...</string> <string>...</string>
</property> </property>
<property name="icon">
<iconset resource="companion9x.qrc">
<normaloff>:/images/library.png</normaloff>:/images/library.png</iconset>
</property>
<property name="iconSize"> <property name="iconSize">
<size> <size>
<width>16</width> <width>16</width>
@ -488,7 +484,7 @@
<tabstop>BurnFlashButton</tabstop> <tabstop>BurnFlashButton</tabstop>
</tabstops> </tabstops>
<resources> <resources>
<include location="companion9x.qrc"/> <include location="companion.qrc"/>
</resources> </resources>
<connections/> <connections/>
</ui> </ui>

View file

@ -0,0 +1,11 @@
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=Companion
GenericName=Transmitter Companion App
Comment=The Ultimate Transmitter Companion
Icon=companion
Exec='companion'
Terminal=false
StartupNotify=false
Categories=Application

969
companion/src/companion.qrc Normal file
View file

@ -0,0 +1,969 @@
<RCC>
<qresource prefix="/">
<file>images/customize.png</file>
<file>icon.png</file>
<file>../../CREDITS.txt</file>
<file>../../DONATIONS.txt</file>
<file>../releasenotes.txt</file>
<file>images/9xdb.png</file>
<file>images/9xdl.png</file>
<file>images/9xdr.png</file>
<file>images/9xdt.png</file>
<file>images/9xdb-bl.png</file>
<file>images/9xdl-bl.png</file>
<file>images/9xdr-bl.png</file>
<file>images/9xdt-bl.png</file>
<file>images/9xdb-gr.png</file>
<file>images/9xdl-gr.png</file>
<file>images/9xdr-gr.png</file>
<file>images/9xdt-gr.png</file>
<file>images/9xdb-or.png</file>
<file>images/9xdl-or.png</file>
<file>images/9xdr-or.png</file>
<file>images/9xdt-or.png</file>
<file>images/9xdb-yl.png</file>
<file>images/9xdl-yl.png</file>
<file>images/9xdr-yl.png</file>
<file>images/9xdt-yl.png</file>
<file>images/9xdb-rd.png</file>
<file>images/9xdl-rd.png</file>
<file>images/9xdr-rd.png</file>
<file>images/9xdt-rd.png</file>
<file>images/9xmenu.png</file>
<file>images/9xmenumenu.png</file>
<file>images/9xmenuexit.png</file>
<file>images/9xcurs.png</file>
<file>images/9xcursup.png</file>
<file>images/9xcursplus.png</file>
<file>images/9xcursmin.png</file>
<file>images/9xcursdown.png</file>
<file>images/9xcursphoto.png</file>
<file>images/screenshot.png</file>
<file>images/splash.png</file>
<file>images/splasht.png</file>
<file>images/companion-title.png</file>
<file>images/maps.png</file>
<file>images/track.png</file>
<file>images/track0.png</file>
<file>images/x9b0.png</file>
<file>images/x9l0.png</file>
<file>images/x9l1.png</file>
<file>images/x9l2.png</file>
<file>images/x9l3.png</file>
<file>images/x9l4.png</file>
<file>images/x9r0.png</file>
<file>images/x9r1.png</file>
<file>images/x9r2.png</file>
<file>images/x9r3.png</file>
<file>images/x9s0.png</file>
<file>images/x9t0.png</file>
<file>images/mcw/aicon.png</file>
<file>images/mcw/dicon.png</file>
<file>images/mcw/gicon.png</file>
<file>images/mcw/hicon.png</file>
<file>images/mcw/at1e1r.png</file>
<file>images/mcw/at2e1r.png</file>
<file>images/mcw/atailv.png</file>
<file>images/mcw/aw0a0f.png</file>
<file>images/mcw/aw1a0f.png</file>
<file>images/mcw/aw1a1f.png</file>
<file>images/mcw/aw1a2f.png</file>
<file>images/mcw/aw2a0f.png</file>
<file>images/mcw/aw2a1f.png</file>
<file>images/mcw/aw2a2f.png</file>
<file>images/mcw/h90.png</file>
<file>images/mcw/h120.png</file>
<file>images/mcw/h120x.png</file>
<file>images/mcw/h140.png</file>
<file>images/mcw/hfbl.png</file>
<file>images/mcw/htailg.png</file>
<file>images/mcw/htailng.png</file>
<file>images/mcw/htailfblg.png</file>
<file>images/mcw/htailfblng.png</file>
<file>images/mcw/gt1e1r.png</file>
<file>images/mcw/gt2e1r.png</file>
<file>images/mcw/gtailv.png</file>
<file>images/mcw/gw0t0a0f0s.png</file>
<file>images/mcw/gw0t1a0f0s.png</file>
<file>images/mcw/gw0t1a0f1s.png</file>
<file>images/mcw/gw0t1a0f2s.png</file>
<file>images/mcw/gw0t1a1f0s.png</file>
<file>images/mcw/gw0t1a1f1s.png</file>
<file>images/mcw/gw0t1a1f2s.png</file>
<file>images/mcw/gw0t1a2f0s.png</file>
<file>images/mcw/gw0t1a2f1s.png</file>
<file>images/mcw/gw0t1a2f2s.png</file>
<file>images/mcw/gw0t2a0f0s.png</file>
<file>images/mcw/gw0t2a0f1s.png</file>
<file>images/mcw/gw0t2a0f2s.png</file>
<file>images/mcw/gw0t2a1f0s.png</file>
<file>images/mcw/gw0t2a1f1s.png</file>
<file>images/mcw/gw0t2a1f2s.png</file>
<file>images/mcw/gw0t2a2f0s.png</file>
<file>images/mcw/gw0t2a2f1s.png</file>
<file>images/mcw/gw0t2a2f2s.png</file>
<file>images/mcw/gw1t0a0f0s.png</file>
<file>images/mcw/gw1t1a0f0s.png</file>
<file>images/mcw/gw1t1a0f1s.png</file>
<file>images/mcw/gw1t1a0f2s.png</file>
<file>images/mcw/gw1t1a1f0s.png</file>
<file>images/mcw/gw1t1a1f1s.png</file>
<file>images/mcw/gw1t1a1f2s.png</file>
<file>images/mcw/gw1t1a2f0s.png</file>
<file>images/mcw/gw1t1a2f1s.png</file>
<file>images/mcw/gw1t1a2f2s.png</file>
<file>images/mcw/gw1t2a0f0s.png</file>
<file>images/mcw/gw1t2a0f1s.png</file>
<file>images/mcw/gw1t2a0f2s.png</file>
<file>images/mcw/gw1t2a1f0s.png</file>
<file>images/mcw/gw1t2a1f1s.png</file>
<file>images/mcw/gw1t2a1f2s.png</file>
<file>images/mcw/gw1t2a2f0s.png</file>
<file>images/mcw/gw1t2a2f1s.png</file>
<file>images/mcw/gw1t2a2f2s.png</file>
<file>images/mcw/db0t2e0f0r.png</file>
<file>images/mcw/db0t2e0f1r.png</file>
<file>images/mcw/db0t2e0f2r.png</file>
<file>images/mcw/db0t2e1f0r.png</file>
<file>images/mcw/db0t2e1f1r.png</file>
<file>images/mcw/db0t2e1f2r.png</file>
<file>images/mcw/db0t2e2f0r.png</file>
<file>images/mcw/db0t2e2f1r.png</file>
<file>images/mcw/db0t2e2f2r.png</file>
<file>images/mcw/db1t2e0f0r.png</file>
<file>images/mcw/db1t2e0f1r.png</file>
<file>images/mcw/db1t2e0f2r.png</file>
<file>images/mcw/db1t2e1f0r.png</file>
<file>images/mcw/db1t2e1f1r.png</file>
<file>images/mcw/db1t2e1f2r.png</file>
<file>images/mcw/db1t2e2f0r.png</file>
<file>images/mcw/db1t2e2f1r.png</file>
<file>images/mcw/db1t2e2f2r.png</file>
<file>images/mcw/dt0t2e0f0r.png</file>
<file>images/mcw/dt0t2e0f1r.png</file>
<file>images/mcw/dt0t2e0f2r.png</file>
<file>images/mcw/dt0t2e1f0r.png</file>
<file>images/mcw/dt0t2e1f1r.png</file>
<file>images/mcw/dt0t2e1f2r.png</file>
<file>images/mcw/dt0t2e2f0r.png</file>
<file>images/mcw/dt0t2e2f1r.png</file>
<file>images/mcw/dt0t2e2f2r.png</file>
<file>images/mcw/dt1t2e0f0r.png</file>
<file>images/mcw/dt1t2e0f1r.png</file>
<file>images/mcw/dt1t2e0f2r.png</file>
<file>images/mcw/dt1t2e1f0r.png</file>
<file>images/mcw/dt1t2e1f1r.png</file>
<file>images/mcw/dt1t2e1f2r.png</file>
<file>images/mcw/dt1t2e2f0r.png</file>
<file>images/mcw/dt1t2e2f1r.png</file>
<file>images/mcw/dt1t2e2f2r.png</file>
<file>images/library/00001.png</file>
<file>images/library/00002.png</file>
<file>images/library/00003.png</file>
<file>images/library/00004.png</file>
<file>images/library/00005.png</file>
<file>images/library/00006.png</file>
<file>images/library/00007.png</file>
<file>images/library/00008.png</file>
<file>images/library/00009.png</file>
<file>images/library/00010.png</file>
<file>images/library/00011.png</file>
<file>images/library/00012.png</file>
<file>images/library/00013.png</file>
<file>images/library/00014.png</file>
<file>images/library/00015.png</file>
<file>images/library/00016.png</file>
<file>images/library/01001.png</file>
<file>images/library/01002.png</file>
<file>images/library/01003.png</file>
<file>images/library/01004.png</file>
<file>images/library/01005.png</file>
<file>images/library/01006.png</file>
<file>images/library/01007.png</file>
<file>images/library/01008.png</file>
<file>images/library/10001.png</file>
<file>images/library/10002.png</file>
<file>images/library/10003.png</file>
<file>images/library/10004.png</file>
<file>images/library/10005.png</file>
<file>images/library/10006.png</file>
<file>images/library/10007.png</file>
<file>images/library/10008.png</file>
<file>images/library/10009.png</file>
<file>images/library/10010.png</file>
<file>images/library/10011.png</file>
<file>images/library/10012.png</file>
<file>images/library/10013.png</file>
<file>images/library/10014.png</file>
<file>images/library/10015.png</file>
<file>images/library/10016.png</file>
<file>images/library/10017.png</file>
<file>images/library/10018.png</file>
<file>images/library/10019.png</file>
<file>images/library/10020.png</file>
<file>images/library/10021.png</file>
<file>images/library/10022.png</file>
<file>images/library/10023.png</file>
<file>images/library/10024.png</file>
<file>images/library/10033.png</file>
<file>images/library/10034.png</file>
<file>images/library/10035.png</file>
<file>images/library/10036.png</file>
<file>images/library/10049.png</file>
<file>images/library/10050.png</file>
<file>images/library/10051.png</file>
<file>images/library/10052.png</file>
<file>images/library/10037.png</file>
<file>images/library/10038.png</file>
<file>images/library/10039.png</file>
<file>images/library/10040.png</file>
<file>images/library/10053.png</file>
<file>images/library/10054.png</file>
<file>images/library/10055.png</file>
<file>images/library/10056.png</file>
<file>images/library/10025.png</file>
<file>images/library/10026.png</file>
<file>images/library/10027.png</file>
<file>images/library/10028.png</file>
<file>images/library/10029.png</file>
<file>images/library/10030.png</file>
<file>images/library/10031.png</file>
<file>images/library/10032.png</file>
<file>images/library/10041.png</file>
<file>images/library/10042.png</file>
<file>images/library/10043.png</file>
<file>images/library/10044.png</file>
<file>images/library/10057.png</file>
<file>images/library/10058.png</file>
<file>images/library/10059.png</file>
<file>images/library/10060.png</file>
<file>images/library/10045.png</file>
<file>images/library/10046.png</file>
<file>images/library/10047.png</file>
<file>images/library/10048.png</file>
<file>images/library/10061.png</file>
<file>images/library/10062.png</file>
<file>images/library/10063.png</file>
<file>images/library/10064.png</file>
<file>images/library/10065.png</file>
<file>images/library/10066.png</file>
<file>images/library/10067.png</file>
<file>images/library/10068.png</file>
<file>images/library/10081.png</file>
<file>images/library/10082.png</file>
<file>images/library/10083.png</file>
<file>images/library/10084.png</file>
<file>images/library/10069.png</file>
<file>images/library/10070.png</file>
<file>images/library/10071.png</file>
<file>images/library/10072.png</file>
<file>images/library/10085.png</file>
<file>images/library/10086.png</file>
<file>images/library/10087.png</file>
<file>images/library/10088.png</file>
<file>images/library/10073.png</file>
<file>images/library/10074.png</file>
<file>images/library/10075.png</file>
<file>images/library/10076.png</file>
<file>images/library/10089.png</file>
<file>images/library/10090.png</file>
<file>images/library/10091.png</file>
<file>images/library/10092.png</file>
<file>images/library/10077.png</file>
<file>images/library/10078.png</file>
<file>images/library/10079.png</file>
<file>images/library/10080.png</file>
<file>images/library/10093.png</file>
<file>images/library/10094.png</file>
<file>images/library/10095.png</file>
<file>images/library/10096.png</file>
<file>images/library/10097.png</file>
<file>images/library/10098.png</file>
<file>images/library/10099.png</file>
<file>images/library/10100.png</file>
<file>images/library/10101.png</file>
<file>images/library/10102.png</file>
<file>images/library/10103.png</file>
<file>images/library/10104.png</file>
<file>images/library/20001.png</file>
<file>images/library/20002.png</file>
<file>images/library/20003.png</file>
<file>images/library/20004.png</file>
<file>images/library/30001.png</file>
<file>images/library/30002.png</file>
<file>images/library/30003.png</file>
<file>images/library/30004.png</file>
<file>themes/monochrome/16/paintbrush.png</file>
<file>themes/monochrome/16/open.png</file>
<file>themes/monochrome/16/edit.png</file>
<file>themes/monochrome/16/information.png</file>
<file>themes/monochrome/16/configure.png</file>
<file>themes/monochrome/16/list.png</file>
<file>themes/monochrome/16/wizard.png</file>
<file>themes/monochrome/16/logs.png</file>
<file>themes/monochrome/16/new.png</file>
<file>themes/monochrome/16/save.png</file>
<file>themes/monochrome/16/recentdocument.png</file>
<file>themes/monochrome/16/simulate.png</file>
<file>themes/monochrome/16/changelog.png</file>
<file>themes/monochrome/16/copy.png</file>
<file>themes/monochrome/16/write_flash.png</file>
<file>themes/monochrome/16/read_eeprom_file.png</file>
<file>themes/monochrome/16/clear.png</file>
<file>themes/monochrome/16/play.png</file>
<file>themes/monochrome/16/fuses.png</file>
<file>themes/monochrome/16/arrow-right.png</file>
<file>themes/monochrome/16/exit.png</file>
<file>themes/monochrome/16/moveup.png</file>
<file>themes/monochrome/16/read_eeprom.png</file>
<file>themes/monochrome/16/cut.png</file>
<file>themes/monochrome/16/arrow-left.png</file>
<file>themes/monochrome/16/write_eeprom_file.png</file>
<file>themes/monochrome/16/library.png</file>
<file>themes/monochrome/16/profiles.png</file>
<file>themes/monochrome/16/paste.png</file>
<file>themes/monochrome/16/print.png</file>
<file>themes/monochrome/16/compare.png</file>
<file>themes/monochrome/16/saveas.png</file>
<file>themes/monochrome/16/preferences.png</file>
<file>themes/monochrome/16/movedown.png</file>
<file>themes/monochrome/16/currentmodel.png</file>
<file>themes/monochrome/16/read_flash.png</file>
<file>themes/monochrome/16/duplicate.png</file>
<file>themes/monochrome/16/add.png</file>
<file>themes/monochrome/16/update.png</file>
<file>themes/monochrome/16/contributors.png</file>
<file>themes/monochrome/16/stop.png</file>
<file>themes/monochrome/16/write_eeprom.png</file>
<file>themes/monochrome/24/paintbrush.png</file>
<file>themes/monochrome/24/open.png</file>
<file>themes/monochrome/24/edit.png</file>
<file>themes/monochrome/24/information.png</file>
<file>themes/monochrome/24/configure.png</file>
<file>themes/monochrome/24/list.png</file>
<file>themes/monochrome/24/wizard.png</file>
<file>themes/monochrome/24/logs.png</file>
<file>themes/monochrome/24/new.png</file>
<file>themes/monochrome/24/save.png</file>
<file>themes/monochrome/24/recentdocument.png</file>
<file>themes/monochrome/24/simulate.png</file>
<file>themes/monochrome/24/changelog.png</file>
<file>themes/monochrome/24/copy.png</file>
<file>themes/monochrome/24/write_flash.png</file>
<file>themes/monochrome/24/read_eeprom_file.png</file>
<file>themes/monochrome/24/clear.png</file>
<file>themes/monochrome/24/play.png</file>
<file>themes/monochrome/24/fuses.png</file>
<file>themes/monochrome/24/arrow-right.png</file>
<file>themes/monochrome/24/exit.png</file>
<file>themes/monochrome/24/moveup.png</file>
<file>themes/monochrome/24/read_eeprom.png</file>
<file>themes/monochrome/24/cut.png</file>
<file>themes/monochrome/24/arrow-left.png</file>
<file>themes/monochrome/24/write_eeprom_file.png</file>
<file>themes/monochrome/24/library.png</file>
<file>themes/monochrome/24/profiles.png</file>
<file>themes/monochrome/24/paste.png</file>
<file>themes/monochrome/24/print.png</file>
<file>themes/monochrome/24/compare.png</file>
<file>themes/monochrome/24/saveas.png</file>
<file>themes/monochrome/24/preferences.png</file>
<file>themes/monochrome/24/movedown.png</file>
<file>themes/monochrome/24/currentmodel.png</file>
<file>themes/monochrome/24/read_flash.png</file>
<file>themes/monochrome/24/duplicate.png</file>
<file>themes/monochrome/24/add.png</file>
<file>themes/monochrome/24/update.png</file>
<file>themes/monochrome/24/contributors.png</file>
<file>themes/monochrome/24/stop.png</file>
<file>themes/monochrome/24/write_eeprom.png</file>
<file>themes/monochrome/32/paintbrush.png</file>
<file>themes/monochrome/32/open.png</file>
<file>themes/monochrome/32/edit.png</file>
<file>themes/monochrome/32/information.png</file>
<file>themes/monochrome/32/configure.png</file>
<file>themes/monochrome/32/list.png</file>
<file>themes/monochrome/32/wizard.png</file>
<file>themes/monochrome/32/logs.png</file>
<file>themes/monochrome/32/new.png</file>
<file>themes/monochrome/32/save.png</file>
<file>themes/monochrome/32/recentdocument.png</file>
<file>themes/monochrome/32/simulate.png</file>
<file>themes/monochrome/32/changelog.png</file>
<file>themes/monochrome/32/copy.png</file>
<file>themes/monochrome/32/write_flash.png</file>
<file>themes/monochrome/32/read_eeprom_file.png</file>
<file>themes/monochrome/32/clear.png</file>
<file>themes/monochrome/32/play.png</file>
<file>themes/monochrome/32/fuses.png</file>
<file>themes/monochrome/32/arrow-right.png</file>
<file>themes/monochrome/32/exit.png</file>
<file>themes/monochrome/32/moveup.png</file>
<file>themes/monochrome/32/read_eeprom.png</file>
<file>themes/monochrome/32/cut.png</file>
<file>themes/monochrome/32/arrow-left.png</file>
<file>themes/monochrome/32/write_eeprom_file.png</file>
<file>themes/monochrome/32/library.png</file>
<file>themes/monochrome/32/profiles.png</file>
<file>themes/monochrome/32/paste.png</file>
<file>themes/monochrome/32/print.png</file>
<file>themes/monochrome/32/compare.png</file>
<file>themes/monochrome/32/saveas.png</file>
<file>themes/monochrome/32/preferences.png</file>
<file>themes/monochrome/32/movedown.png</file>
<file>themes/monochrome/32/currentmodel.png</file>
<file>themes/monochrome/32/read_flash.png</file>
<file>themes/monochrome/32/duplicate.png</file>
<file>themes/monochrome/32/add.png</file>
<file>themes/monochrome/32/update.png</file>
<file>themes/monochrome/32/contributors.png</file>
<file>themes/monochrome/32/stop.png</file>
<file>themes/monochrome/32/write_eeprom.png</file>
<file>themes/monochrome/48/paintbrush.png</file>
<file>themes/monochrome/48/open.png</file>
<file>themes/monochrome/48/edit.png</file>
<file>themes/monochrome/48/information.png</file>
<file>themes/monochrome/48/configure.png</file>
<file>themes/monochrome/48/list.png</file>
<file>themes/monochrome/48/wizard.png</file>
<file>themes/monochrome/48/logs.png</file>
<file>themes/monochrome/48/new.png</file>
<file>themes/monochrome/48/save.png</file>
<file>themes/monochrome/48/recentdocument.png</file>
<file>themes/monochrome/48/simulate.png</file>
<file>themes/monochrome/48/changelog.png</file>
<file>themes/monochrome/48/copy.png</file>
<file>themes/monochrome/48/write_flash.png</file>
<file>themes/monochrome/48/read_eeprom_file.png</file>
<file>themes/monochrome/48/clear.png</file>
<file>themes/monochrome/48/play.png</file>
<file>themes/monochrome/48/fuses.png</file>
<file>themes/monochrome/48/arrow-right.png</file>
<file>themes/monochrome/48/exit.png</file>
<file>themes/monochrome/48/moveup.png</file>
<file>themes/monochrome/48/read_eeprom.png</file>
<file>themes/monochrome/48/cut.png</file>
<file>themes/monochrome/48/arrow-left.png</file>
<file>themes/monochrome/48/write_eeprom_file.png</file>
<file>themes/monochrome/48/library.png</file>
<file>themes/monochrome/48/profiles.png</file>
<file>themes/monochrome/48/paste.png</file>
<file>themes/monochrome/48/print.png</file>
<file>themes/monochrome/48/compare.png</file>
<file>themes/monochrome/48/saveas.png</file>
<file>themes/monochrome/48/preferences.png</file>
<file>themes/monochrome/48/movedown.png</file>
<file>themes/monochrome/48/currentmodel.png</file>
<file>themes/monochrome/48/read_flash.png</file>
<file>themes/monochrome/48/duplicate.png</file>
<file>themes/monochrome/48/add.png</file>
<file>themes/monochrome/48/update.png</file>
<file>themes/monochrome/48/contributors.png</file>
<file>themes/monochrome/48/stop.png</file>
<file>themes/monochrome/48/write_eeprom.png</file>
<file>themes/classic/16/paintbrush.png</file>
<file>themes/classic/16/open.png</file>
<file>themes/classic/16/edit.png</file>
<file>themes/classic/16/information.png</file>
<file>themes/classic/16/configure.png</file>
<file>themes/classic/16/list.png</file>
<file>themes/classic/16/wizard.png</file>
<file>themes/classic/16/logs.png</file>
<file>themes/classic/16/new.png</file>
<file>themes/classic/16/save.png</file>
<file>themes/classic/16/recentdocument.png</file>
<file>themes/classic/16/simulate.png</file>
<file>themes/classic/16/changelog.png</file>
<file>themes/classic/16/copy.png</file>
<file>themes/classic/16/write_flash.png</file>
<file>themes/classic/16/read_eeprom_file.png</file>
<file>themes/classic/16/clear.png</file>
<file>themes/classic/16/play.png</file>
<file>themes/classic/16/fuses.png</file>
<file>themes/classic/16/arrow-right.png</file>
<file>themes/classic/16/exit.png</file>
<file>themes/classic/16/moveup.png</file>
<file>themes/classic/16/read_eeprom.png</file>
<file>themes/classic/16/cut.png</file>
<file>themes/classic/16/arrow-left.png</file>
<file>themes/classic/16/write_eeprom_file.png</file>
<file>themes/classic/16/library.png</file>
<file>themes/classic/16/profiles.png</file>
<file>themes/classic/16/paste.png</file>
<file>themes/classic/16/print.png</file>
<file>themes/classic/16/compare.png</file>
<file>themes/classic/16/saveas.png</file>
<file>themes/classic/16/preferences.png</file>
<file>themes/classic/16/movedown.png</file>
<file>themes/classic/16/currentmodel.png</file>
<file>themes/classic/16/read_flash.png</file>
<file>themes/classic/16/duplicate.png</file>
<file>themes/classic/16/add.png</file>
<file>themes/classic/16/update.png</file>
<file>themes/classic/16/contributors.png</file>
<file>themes/classic/16/stop.png</file>
<file>themes/classic/16/write_eeprom.png</file>
<file>themes/classic/24/paintbrush.png</file>
<file>themes/classic/24/open.png</file>
<file>themes/classic/24/edit.png</file>
<file>themes/classic/24/information.png</file>
<file>themes/classic/24/configure.png</file>
<file>themes/classic/24/list.png</file>
<file>themes/classic/24/wizard.png</file>
<file>themes/classic/24/logs.png</file>
<file>themes/classic/24/new.png</file>
<file>themes/classic/24/save.png</file>
<file>themes/classic/24/recentdocument.png</file>
<file>themes/classic/24/simulate.png</file>
<file>themes/classic/24/changelog.png</file>
<file>themes/classic/24/copy.png</file>
<file>themes/classic/24/write_flash.png</file>
<file>themes/classic/24/read_eeprom_file.png</file>
<file>themes/classic/24/clear.png</file>
<file>themes/classic/24/play.png</file>
<file>themes/classic/24/fuses.png</file>
<file>themes/classic/24/arrow-right.png</file>
<file>themes/classic/24/exit.png</file>
<file>themes/classic/24/moveup.png</file>
<file>themes/classic/24/read_eeprom.png</file>
<file>themes/classic/24/cut.png</file>
<file>themes/classic/24/arrow-left.png</file>
<file>themes/classic/24/write_eeprom_file.png</file>
<file>themes/classic/24/library.png</file>
<file>themes/classic/24/profiles.png</file>
<file>themes/classic/24/paste.png</file>
<file>themes/classic/24/print.png</file>
<file>themes/classic/24/compare.png</file>
<file>themes/classic/24/saveas.png</file>
<file>themes/classic/24/preferences.png</file>
<file>themes/classic/24/movedown.png</file>
<file>themes/classic/24/currentmodel.png</file>
<file>themes/classic/24/read_flash.png</file>
<file>themes/classic/24/duplicate.png</file>
<file>themes/classic/24/add.png</file>
<file>themes/classic/24/update.png</file>
<file>themes/classic/24/contributors.png</file>
<file>themes/classic/24/stop.png</file>
<file>themes/classic/24/write_eeprom.png</file>
<file>themes/classic/32/paintbrush.png</file>
<file>themes/classic/32/open.png</file>
<file>themes/classic/32/edit.png</file>
<file>themes/classic/32/information.png</file>
<file>themes/classic/32/configure.png</file>
<file>themes/classic/32/list.png</file>
<file>themes/classic/32/wizard.png</file>
<file>themes/classic/32/logs.png</file>
<file>themes/classic/32/new.png</file>
<file>themes/classic/32/save.png</file>
<file>themes/classic/32/recentdocument.png</file>
<file>themes/classic/32/simulate.png</file>
<file>themes/classic/32/changelog.png</file>
<file>themes/classic/32/copy.png</file>
<file>themes/classic/32/write_flash.png</file>
<file>themes/classic/32/read_eeprom_file.png</file>
<file>themes/classic/32/clear.png</file>
<file>themes/classic/32/play.png</file>
<file>themes/classic/32/fuses.png</file>
<file>themes/classic/32/arrow-right.png</file>
<file>themes/classic/32/exit.png</file>
<file>themes/classic/32/moveup.png</file>
<file>themes/classic/32/read_eeprom.png</file>
<file>themes/classic/32/cut.png</file>
<file>themes/classic/32/arrow-left.png</file>
<file>themes/classic/32/write_eeprom_file.png</file>
<file>themes/classic/32/library.png</file>
<file>themes/classic/32/profiles.png</file>
<file>themes/classic/32/paste.png</file>
<file>themes/classic/32/print.png</file>
<file>themes/classic/32/compare.png</file>
<file>themes/classic/32/saveas.png</file>
<file>themes/classic/32/preferences.png</file>
<file>themes/classic/32/movedown.png</file>
<file>themes/classic/32/currentmodel.png</file>
<file>themes/classic/32/read_flash.png</file>
<file>themes/classic/32/duplicate.png</file>
<file>themes/classic/32/add.png</file>
<file>themes/classic/32/update.png</file>
<file>themes/classic/32/contributors.png</file>
<file>themes/classic/32/stop.png</file>
<file>themes/classic/32/write_eeprom.png</file>
<file>themes/classic/48/paintbrush.png</file>
<file>themes/classic/48/open.png</file>
<file>themes/classic/48/edit.png</file>
<file>themes/classic/48/information.png</file>
<file>themes/classic/48/configure.png</file>
<file>themes/classic/48/list.png</file>
<file>themes/classic/48/wizard.png</file>
<file>themes/classic/48/logs.png</file>
<file>themes/classic/48/new.png</file>
<file>themes/classic/48/save.png</file>
<file>themes/classic/48/recentdocument.png</file>
<file>themes/classic/48/simulate.png</file>
<file>themes/classic/48/changelog.png</file>
<file>themes/classic/48/copy.png</file>
<file>themes/classic/48/write_flash.png</file>
<file>themes/classic/48/read_eeprom_file.png</file>
<file>themes/classic/48/clear.png</file>
<file>themes/classic/48/play.png</file>
<file>themes/classic/48/fuses.png</file>
<file>themes/classic/48/arrow-right.png</file>
<file>themes/classic/48/exit.png</file>
<file>themes/classic/48/moveup.png</file>
<file>themes/classic/48/read_eeprom.png</file>
<file>themes/classic/48/cut.png</file>
<file>themes/classic/48/arrow-left.png</file>
<file>themes/classic/48/write_eeprom_file.png</file>
<file>themes/classic/48/library.png</file>
<file>themes/classic/48/profiles.png</file>
<file>themes/classic/48/paste.png</file>
<file>themes/classic/48/print.png</file>
<file>themes/classic/48/compare.png</file>
<file>themes/classic/48/saveas.png</file>
<file>themes/classic/48/preferences.png</file>
<file>themes/classic/48/movedown.png</file>
<file>themes/classic/48/currentmodel.png</file>
<file>themes/classic/48/read_flash.png</file>
<file>themes/classic/48/duplicate.png</file>
<file>themes/classic/48/add.png</file>
<file>themes/classic/48/update.png</file>
<file>themes/classic/48/contributors.png</file>
<file>themes/classic/48/stop.png</file>
<file>themes/classic/48/write_eeprom.png</file>
<file>themes/monoblue/16/paintbrush.png</file>
<file>themes/monoblue/16/open.png</file>
<file>themes/monoblue/16/edit.png</file>
<file>themes/monoblue/16/information.png</file>
<file>themes/monoblue/16/configure.png</file>
<file>themes/monoblue/16/list.png</file>
<file>themes/monoblue/16/wizard.png</file>
<file>themes/monoblue/16/logs.png</file>
<file>themes/monoblue/16/new.png</file>
<file>themes/monoblue/16/save.png</file>
<file>themes/monoblue/16/recentdocument.png</file>
<file>themes/monoblue/16/simulate.png</file>
<file>themes/monoblue/16/changelog.png</file>
<file>themes/monoblue/16/copy.png</file>
<file>themes/monoblue/16/write_flash.png</file>
<file>themes/monoblue/16/read_eeprom_file.png</file>
<file>themes/monoblue/16/clear.png</file>
<file>themes/monoblue/16/play.png</file>
<file>themes/monoblue/16/fuses.png</file>
<file>themes/monoblue/16/arrow-right.png</file>
<file>themes/monoblue/16/exit.png</file>
<file>themes/monoblue/16/moveup.png</file>
<file>themes/monoblue/16/read_eeprom.png</file>
<file>themes/monoblue/16/cut.png</file>
<file>themes/monoblue/16/arrow-left.png</file>
<file>themes/monoblue/16/write_eeprom_file.png</file>
<file>themes/monoblue/16/library.png</file>
<file>themes/monoblue/16/profiles.png</file>
<file>themes/monoblue/16/paste.png</file>
<file>themes/monoblue/16/print.png</file>
<file>themes/monoblue/16/compare.png</file>
<file>themes/monoblue/16/saveas.png</file>
<file>themes/monoblue/16/preferences.png</file>
<file>themes/monoblue/16/movedown.png</file>
<file>themes/monoblue/16/currentmodel.png</file>
<file>themes/monoblue/16/read_flash.png</file>
<file>themes/monoblue/16/duplicate.png</file>
<file>themes/monoblue/16/add.png</file>
<file>themes/monoblue/16/update.png</file>
<file>themes/monoblue/16/contributors.png</file>
<file>themes/monoblue/16/stop.png</file>
<file>themes/monoblue/16/write_eeprom.png</file>
<file>themes/monoblue/24/paintbrush.png</file>
<file>themes/monoblue/24/open.png</file>
<file>themes/monoblue/24/edit.png</file>
<file>themes/monoblue/24/information.png</file>
<file>themes/monoblue/24/configure.png</file>
<file>themes/monoblue/24/list.png</file>
<file>themes/monoblue/24/wizard.png</file>
<file>themes/monoblue/24/logs.png</file>
<file>themes/monoblue/24/new.png</file>
<file>themes/monoblue/24/save.png</file>
<file>themes/monoblue/24/recentdocument.png</file>
<file>themes/monoblue/24/simulate.png</file>
<file>themes/monoblue/24/changelog.png</file>
<file>themes/monoblue/24/copy.png</file>
<file>themes/monoblue/24/write_flash.png</file>
<file>themes/monoblue/24/read_eeprom_file.png</file>
<file>themes/monoblue/24/clear.png</file>
<file>themes/monoblue/24/play.png</file>
<file>themes/monoblue/24/fuses.png</file>
<file>themes/monoblue/24/arrow-right.png</file>
<file>themes/monoblue/24/exit.png</file>
<file>themes/monoblue/24/moveup.png</file>
<file>themes/monoblue/24/read_eeprom.png</file>
<file>themes/monoblue/24/cut.png</file>
<file>themes/monoblue/24/arrow-left.png</file>
<file>themes/monoblue/24/write_eeprom_file.png</file>
<file>themes/monoblue/24/library.png</file>
<file>themes/monoblue/24/profiles.png</file>
<file>themes/monoblue/24/paste.png</file>
<file>themes/monoblue/24/print.png</file>
<file>themes/monoblue/24/compare.png</file>
<file>themes/monoblue/24/saveas.png</file>
<file>themes/monoblue/24/preferences.png</file>
<file>themes/monoblue/24/movedown.png</file>
<file>themes/monoblue/24/currentmodel.png</file>
<file>themes/monoblue/24/read_flash.png</file>
<file>themes/monoblue/24/duplicate.png</file>
<file>themes/monoblue/24/add.png</file>
<file>themes/monoblue/24/update.png</file>
<file>themes/monoblue/24/contributors.png</file>
<file>themes/monoblue/24/stop.png</file>
<file>themes/monoblue/24/write_eeprom.png</file>
<file>themes/monoblue/32/paintbrush.png</file>
<file>themes/monoblue/32/open.png</file>
<file>themes/monoblue/32/edit.png</file>
<file>themes/monoblue/32/information.png</file>
<file>themes/monoblue/32/configure.png</file>
<file>themes/monoblue/32/list.png</file>
<file>themes/monoblue/32/wizard.png</file>
<file>themes/monoblue/32/logs.png</file>
<file>themes/monoblue/32/new.png</file>
<file>themes/monoblue/32/save.png</file>
<file>themes/monoblue/32/recentdocument.png</file>
<file>themes/monoblue/32/simulate.png</file>
<file>themes/monoblue/32/changelog.png</file>
<file>themes/monoblue/32/copy.png</file>
<file>themes/monoblue/32/write_flash.png</file>
<file>themes/monoblue/32/read_eeprom_file.png</file>
<file>themes/monoblue/32/clear.png</file>
<file>themes/monoblue/32/play.png</file>
<file>themes/monoblue/32/fuses.png</file>
<file>themes/monoblue/32/arrow-right.png</file>
<file>themes/monoblue/32/exit.png</file>
<file>themes/monoblue/32/moveup.png</file>
<file>themes/monoblue/32/read_eeprom.png</file>
<file>themes/monoblue/32/cut.png</file>
<file>themes/monoblue/32/arrow-left.png</file>
<file>themes/monoblue/32/write_eeprom_file.png</file>
<file>themes/monoblue/32/library.png</file>
<file>themes/monoblue/32/profiles.png</file>
<file>themes/monoblue/32/paste.png</file>
<file>themes/monoblue/32/print.png</file>
<file>themes/monoblue/32/compare.png</file>
<file>themes/monoblue/32/saveas.png</file>
<file>themes/monoblue/32/preferences.png</file>
<file>themes/monoblue/32/movedown.png</file>
<file>themes/monoblue/32/currentmodel.png</file>
<file>themes/monoblue/32/read_flash.png</file>
<file>themes/monoblue/32/duplicate.png</file>
<file>themes/monoblue/32/add.png</file>
<file>themes/monoblue/32/update.png</file>
<file>themes/monoblue/32/contributors.png</file>
<file>themes/monoblue/32/stop.png</file>
<file>themes/monoblue/32/write_eeprom.png</file>
<file>themes/monoblue/48/paintbrush.png</file>
<file>themes/monoblue/48/open.png</file>
<file>themes/monoblue/48/edit.png</file>
<file>themes/monoblue/48/information.png</file>
<file>themes/monoblue/48/configure.png</file>
<file>themes/monoblue/48/list.png</file>
<file>themes/monoblue/48/wizard.png</file>
<file>themes/monoblue/48/logs.png</file>
<file>themes/monoblue/48/new.png</file>
<file>themes/monoblue/48/save.png</file>
<file>themes/monoblue/48/recentdocument.png</file>
<file>themes/monoblue/48/simulate.png</file>
<file>themes/monoblue/48/changelog.png</file>
<file>themes/monoblue/48/copy.png</file>
<file>themes/monoblue/48/write_flash.png</file>
<file>themes/monoblue/48/read_eeprom_file.png</file>
<file>themes/monoblue/48/clear.png</file>
<file>themes/monoblue/48/play.png</file>
<file>themes/monoblue/48/fuses.png</file>
<file>themes/monoblue/48/arrow-right.png</file>
<file>themes/monoblue/48/exit.png</file>
<file>themes/monoblue/48/moveup.png</file>
<file>themes/monoblue/48/read_eeprom.png</file>
<file>themes/monoblue/48/cut.png</file>
<file>themes/monoblue/48/arrow-left.png</file>
<file>themes/monoblue/48/write_eeprom_file.png</file>
<file>themes/monoblue/48/library.png</file>
<file>themes/monoblue/48/profiles.png</file>
<file>themes/monoblue/48/paste.png</file>
<file>themes/monoblue/48/print.png</file>
<file>themes/monoblue/48/compare.png</file>
<file>themes/monoblue/48/saveas.png</file>
<file>themes/monoblue/48/preferences.png</file>
<file>themes/monoblue/48/movedown.png</file>
<file>themes/monoblue/48/currentmodel.png</file>
<file>themes/monoblue/48/read_flash.png</file>
<file>themes/monoblue/48/duplicate.png</file>
<file>themes/monoblue/48/add.png</file>
<file>themes/monoblue/48/update.png</file>
<file>themes/monoblue/48/contributors.png</file>
<file>themes/monoblue/48/stop.png</file>
<file>themes/monoblue/48/write_eeprom.png</file>
<file>themes/monowhite/16/paintbrush.png</file>
<file>themes/monowhite/16/open.png</file>
<file>themes/monowhite/16/edit.png</file>
<file>themes/monowhite/16/information.png</file>
<file>themes/monowhite/16/configure.png</file>
<file>themes/monowhite/16/list.png</file>
<file>themes/monowhite/16/wizard.png</file>
<file>themes/monowhite/16/logs.png</file>
<file>themes/monowhite/16/new.png</file>
<file>themes/monowhite/16/save.png</file>
<file>themes/monowhite/16/recentdocument.png</file>
<file>themes/monowhite/16/simulate.png</file>
<file>themes/monowhite/16/changelog.png</file>
<file>themes/monowhite/16/copy.png</file>
<file>themes/monowhite/16/write_flash.png</file>
<file>themes/monowhite/16/read_eeprom_file.png</file>
<file>themes/monowhite/16/clear.png</file>
<file>themes/monowhite/16/play.png</file>
<file>themes/monowhite/16/fuses.png</file>
<file>themes/monowhite/16/arrow-right.png</file>
<file>themes/monowhite/16/exit.png</file>
<file>themes/monowhite/16/moveup.png</file>
<file>themes/monowhite/16/read_eeprom.png</file>
<file>themes/monowhite/16/cut.png</file>
<file>themes/monowhite/16/arrow-left.png</file>
<file>themes/monowhite/16/write_eeprom_file.png</file>
<file>themes/monowhite/16/library.png</file>
<file>themes/monowhite/16/profiles.png</file>
<file>themes/monowhite/16/paste.png</file>
<file>themes/monowhite/16/print.png</file>
<file>themes/monowhite/16/compare.png</file>
<file>themes/monowhite/16/saveas.png</file>
<file>themes/monowhite/16/preferences.png</file>
<file>themes/monowhite/16/movedown.png</file>
<file>themes/monowhite/16/currentmodel.png</file>
<file>themes/monowhite/16/read_flash.png</file>
<file>themes/monowhite/16/duplicate.png</file>
<file>themes/monowhite/16/add.png</file>
<file>themes/monowhite/16/update.png</file>
<file>themes/monowhite/16/contributors.png</file>
<file>themes/monowhite/16/stop.png</file>
<file>themes/monowhite/16/write_eeprom.png</file>
<file>themes/monowhite/24/paintbrush.png</file>
<file>themes/monowhite/24/open.png</file>
<file>themes/monowhite/24/edit.png</file>
<file>themes/monowhite/24/information.png</file>
<file>themes/monowhite/24/configure.png</file>
<file>themes/monowhite/24/list.png</file>
<file>themes/monowhite/24/wizard.png</file>
<file>themes/monowhite/24/logs.png</file>
<file>themes/monowhite/24/new.png</file>
<file>themes/monowhite/24/save.png</file>
<file>themes/monowhite/24/recentdocument.png</file>
<file>themes/monowhite/24/simulate.png</file>
<file>themes/monowhite/24/changelog.png</file>
<file>themes/monowhite/24/copy.png</file>
<file>themes/monowhite/24/write_flash.png</file>
<file>themes/monowhite/24/read_eeprom_file.png</file>
<file>themes/monowhite/24/clear.png</file>
<file>themes/monowhite/24/play.png</file>
<file>themes/monowhite/24/fuses.png</file>
<file>themes/monowhite/24/arrow-right.png</file>
<file>themes/monowhite/24/exit.png</file>
<file>themes/monowhite/24/moveup.png</file>
<file>themes/monowhite/24/read_eeprom.png</file>
<file>themes/monowhite/24/cut.png</file>
<file>themes/monowhite/24/arrow-left.png</file>
<file>themes/monowhite/24/write_eeprom_file.png</file>
<file>themes/monowhite/24/library.png</file>
<file>themes/monowhite/24/profiles.png</file>
<file>themes/monowhite/24/paste.png</file>
<file>themes/monowhite/24/print.png</file>
<file>themes/monowhite/24/compare.png</file>
<file>themes/monowhite/24/saveas.png</file>
<file>themes/monowhite/24/preferences.png</file>
<file>themes/monowhite/24/movedown.png</file>
<file>themes/monowhite/24/currentmodel.png</file>
<file>themes/monowhite/24/read_flash.png</file>
<file>themes/monowhite/24/duplicate.png</file>
<file>themes/monowhite/24/add.png</file>
<file>themes/monowhite/24/update.png</file>
<file>themes/monowhite/24/contributors.png</file>
<file>themes/monowhite/24/stop.png</file>
<file>themes/monowhite/24/write_eeprom.png</file>
<file>themes/monowhite/32/paintbrush.png</file>
<file>themes/monowhite/32/open.png</file>
<file>themes/monowhite/32/edit.png</file>
<file>themes/monowhite/32/information.png</file>
<file>themes/monowhite/32/configure.png</file>
<file>themes/monowhite/32/list.png</file>
<file>themes/monowhite/32/wizard.png</file>
<file>themes/monowhite/32/logs.png</file>
<file>themes/monowhite/32/new.png</file>
<file>themes/monowhite/32/save.png</file>
<file>themes/monowhite/32/recentdocument.png</file>
<file>themes/monowhite/32/simulate.png</file>
<file>themes/monowhite/32/changelog.png</file>
<file>themes/monowhite/32/copy.png</file>
<file>themes/monowhite/32/write_flash.png</file>
<file>themes/monowhite/32/read_eeprom_file.png</file>
<file>themes/monowhite/32/clear.png</file>
<file>themes/monowhite/32/play.png</file>
<file>themes/monowhite/32/fuses.png</file>
<file>themes/monowhite/32/arrow-right.png</file>
<file>themes/monowhite/32/exit.png</file>
<file>themes/monowhite/32/moveup.png</file>
<file>themes/monowhite/32/read_eeprom.png</file>
<file>themes/monowhite/32/cut.png</file>
<file>themes/monowhite/32/arrow-left.png</file>
<file>themes/monowhite/32/write_eeprom_file.png</file>
<file>themes/monowhite/32/library.png</file>
<file>themes/monowhite/32/profiles.png</file>
<file>themes/monowhite/32/paste.png</file>
<file>themes/monowhite/32/print.png</file>
<file>themes/monowhite/32/compare.png</file>
<file>themes/monowhite/32/saveas.png</file>
<file>themes/monowhite/32/preferences.png</file>
<file>themes/monowhite/32/movedown.png</file>
<file>themes/monowhite/32/currentmodel.png</file>
<file>themes/monowhite/32/read_flash.png</file>
<file>themes/monowhite/32/duplicate.png</file>
<file>themes/monowhite/32/add.png</file>
<file>themes/monowhite/32/update.png</file>
<file>themes/monowhite/32/contributors.png</file>
<file>themes/monowhite/32/stop.png</file>
<file>themes/monowhite/32/write_eeprom.png</file>
<file>themes/monowhite/48/paintbrush.png</file>
<file>themes/monowhite/48/open.png</file>
<file>themes/monowhite/48/edit.png</file>
<file>themes/monowhite/48/information.png</file>
<file>themes/monowhite/48/configure.png</file>
<file>themes/monowhite/48/list.png</file>
<file>themes/monowhite/48/wizard.png</file>
<file>themes/monowhite/48/logs.png</file>
<file>themes/monowhite/48/new.png</file>
<file>themes/monowhite/48/save.png</file>
<file>themes/monowhite/48/recentdocument.png</file>
<file>themes/monowhite/48/simulate.png</file>
<file>themes/monowhite/48/changelog.png</file>
<file>themes/monowhite/48/copy.png</file>
<file>themes/monowhite/48/write_flash.png</file>
<file>themes/monowhite/48/read_eeprom_file.png</file>
<file>themes/monowhite/48/clear.png</file>
<file>themes/monowhite/48/play.png</file>
<file>themes/monowhite/48/fuses.png</file>
<file>themes/monowhite/48/arrow-right.png</file>
<file>themes/monowhite/48/exit.png</file>
<file>themes/monowhite/48/moveup.png</file>
<file>themes/monowhite/48/read_eeprom.png</file>
<file>themes/monowhite/48/cut.png</file>
<file>themes/monowhite/48/arrow-left.png</file>
<file>themes/monowhite/48/write_eeprom_file.png</file>
<file>themes/monowhite/48/library.png</file>
<file>themes/monowhite/48/profiles.png</file>
<file>themes/monowhite/48/paste.png</file>
<file>themes/monowhite/48/print.png</file>
<file>themes/monowhite/48/compare.png</file>
<file>themes/monowhite/48/saveas.png</file>
<file>themes/monowhite/48/preferences.png</file>
<file>themes/monowhite/48/movedown.png</file>
<file>themes/monowhite/48/currentmodel.png</file>
<file>themes/monowhite/48/read_flash.png</file>
<file>themes/monowhite/48/duplicate.png</file>
<file>themes/monowhite/48/add.png</file>
<file>themes/monowhite/48/update.png</file>
<file>themes/monowhite/48/contributors.png</file>
<file>themes/monowhite/48/stop.png</file>
<file>themes/monowhite/48/write_eeprom.png</file>
</qresource>
</RCC>

View file

@ -1,11 +0,0 @@
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=companion9x
GenericName=COMPANION9X
Comment=9x EeProm Editor
Icon=/usr/share/icons/companion9x.png
Exec='companion9x'
Terminal=false
StartupNotify=false
Categories=Application

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

View file

@ -1,338 +0,0 @@
<RCC>
<qresource prefix="/">
<file>icon.png</file>
<file>../../CREDITS.txt</file>
<file>../../DONATIONS.txt</file>
<file>../releasenotes.txt</file>
<file>images/9xdb.png</file>
<file>images/9xdl.png</file>
<file>images/9xdr.png</file>
<file>images/9xdt.png</file>
<file>images/9xdb-bl.png</file>
<file>images/9xdl-bl.png</file>
<file>images/9xdr-bl.png</file>
<file>images/9xdt-bl.png</file>
<file>images/9xdb-gr.png</file>
<file>images/9xdl-gr.png</file>
<file>images/9xdr-gr.png</file>
<file>images/9xdt-gr.png</file>
<file>images/9xdb-or.png</file>
<file>images/9xdl-or.png</file>
<file>images/9xdr-or.png</file>
<file>images/9xdt-or.png</file>
<file>images/9xdb-yl.png</file>
<file>images/9xdl-yl.png</file>
<file>images/9xdr-yl.png</file>
<file>images/9xdt-yl.png</file>
<file>images/9xdb-rd.png</file>
<file>images/9xdl-rd.png</file>
<file>images/9xdr-rd.png</file>
<file>images/9xdt-rd.png</file>
<file>images/9xmenu.png</file>
<file>images/9xmenumenu.png</file>
<file>images/9xmenuexit.png</file>
<file>images/9xcurs.png</file>
<file>images/9xcursup.png</file>
<file>images/9xcursplus.png</file>
<file>images/9xcursmin.png</file>
<file>images/9xcursdown.png</file>
<file>images/9xcursphoto.png</file>
<file>images/copy.png</file>
<file>images/cut.png</file>
<file>images/currentmodel.png</file>
<file>images/new.png</file>
<file>images/open.png</file>
<file>images/paste.png</file>
<file>images/save.png</file>
<file>images/saveas.png</file>
<file>images/screenshot.png</file>
<file>images/splash.png</file>
<file>images/splasht.png</file>
<file>images/companion9x-title.png</file>
<file>images/read_eeprom.png</file>
<file>images/write_eeprom.png</file>
<file>images/write_flash.png</file>
<file>images/read_flash.png</file>
<file>images/simulate.png</file>
<file>images/configure.png</file>
<file>images/customize.png</file>
<file>images/print.png</file>
<file>images/clear.png</file>
<file>images/add.png</file>
<file>images/edit.png</file>
<file>images/wizard.png</file>
<file>images/duplicate.png</file>
<file>images/fuses.png</file>
<file>images/list.png</file>
<file>images/maps.png</file>
<file>images/track.png</file>
<file>images/track0.png</file>
<file>images/play.png</file>
<file>images/stop.png</file>
<file>images/read_eeprom_file.png</file>
<file>images/write_eeprom_file.png</file>
<file>images/moveup.png</file>
<file>images/movedown.png</file>
<file>images/update.png</file>
<file>images/contributors.png</file>
<file>images/changelog.png</file>
<file>images/preferences.png</file>
<file>images/switch_dir.png</file>
<file>images/exit.png</file>
<file>images/recentdocument.png</file>
<file>images/profiles.png</file>
<file>images/library.png</file>
<file>images/logs.png</file>
<file>images/arrow-left.png</file>
<file>images/arrow-right.png</file>
<file>images/compare.png</file>
<file>images/x9b0.png</file>
<file>images/x9l0.png</file>
<file>images/x9l1.png</file>
<file>images/x9l2.png</file>
<file>images/x9l3.png</file>
<file>images/x9l4.png</file>
<file>images/x9r0.png</file>
<file>images/x9r1.png</file>
<file>images/x9r2.png</file>
<file>images/x9r3.png</file>
<file>images/x9s0.png</file>
<file>images/x9t0.png</file>
<file>images/mcw/aicon.png</file>
<file>images/mcw/dicon.png</file>
<file>images/mcw/gicon.png</file>
<file>images/mcw/hicon.png</file>
<file>images/mcw/at1e1r.png</file>
<file>images/mcw/at2e1r.png</file>
<file>images/mcw/atailv.png</file>
<file>images/mcw/aw0a0f.png</file>
<file>images/mcw/aw1a0f.png</file>
<file>images/mcw/aw1a1f.png</file>
<file>images/mcw/aw1a2f.png</file>
<file>images/mcw/aw2a0f.png</file>
<file>images/mcw/aw2a1f.png</file>
<file>images/mcw/aw2a2f.png</file>
<file>images/mcw/h90.png</file>
<file>images/mcw/h120.png</file>
<file>images/mcw/h120x.png</file>
<file>images/mcw/h140.png</file>
<file>images/mcw/hfbl.png</file>
<file>images/mcw/htailg.png</file>
<file>images/mcw/htailng.png</file>
<file>images/mcw/htailfblg.png</file>
<file>images/mcw/htailfblng.png</file>
<file>images/mcw/gt1e1r.png</file>
<file>images/mcw/gt2e1r.png</file>
<file>images/mcw/gtailv.png</file>
<file>images/mcw/gw0t0a0f0s.png</file>
<file>images/mcw/gw0t1a0f0s.png</file>
<file>images/mcw/gw0t1a0f1s.png</file>
<file>images/mcw/gw0t1a0f2s.png</file>
<file>images/mcw/gw0t1a1f0s.png</file>
<file>images/mcw/gw0t1a1f1s.png</file>
<file>images/mcw/gw0t1a1f2s.png</file>
<file>images/mcw/gw0t1a2f0s.png</file>
<file>images/mcw/gw0t1a2f1s.png</file>
<file>images/mcw/gw0t1a2f2s.png</file>
<file>images/mcw/gw0t2a0f0s.png</file>
<file>images/mcw/gw0t2a0f1s.png</file>
<file>images/mcw/gw0t2a0f2s.png</file>
<file>images/mcw/gw0t2a1f0s.png</file>
<file>images/mcw/gw0t2a1f1s.png</file>
<file>images/mcw/gw0t2a1f2s.png</file>
<file>images/mcw/gw0t2a2f0s.png</file>
<file>images/mcw/gw0t2a2f1s.png</file>
<file>images/mcw/gw0t2a2f2s.png</file>
<file>images/mcw/gw1t0a0f0s.png</file>
<file>images/mcw/gw1t1a0f0s.png</file>
<file>images/mcw/gw1t1a0f1s.png</file>
<file>images/mcw/gw1t1a0f2s.png</file>
<file>images/mcw/gw1t1a1f0s.png</file>
<file>images/mcw/gw1t1a1f1s.png</file>
<file>images/mcw/gw1t1a1f2s.png</file>
<file>images/mcw/gw1t1a2f0s.png</file>
<file>images/mcw/gw1t1a2f1s.png</file>
<file>images/mcw/gw1t1a2f2s.png</file>
<file>images/mcw/gw1t2a0f0s.png</file>
<file>images/mcw/gw1t2a0f1s.png</file>
<file>images/mcw/gw1t2a0f2s.png</file>
<file>images/mcw/gw1t2a1f0s.png</file>
<file>images/mcw/gw1t2a1f1s.png</file>
<file>images/mcw/gw1t2a1f2s.png</file>
<file>images/mcw/gw1t2a2f0s.png</file>
<file>images/mcw/gw1t2a2f1s.png</file>
<file>images/mcw/gw1t2a2f2s.png</file>
<file>images/mcw/db0t2e0f0r.png</file>
<file>images/mcw/db0t2e0f1r.png</file>
<file>images/mcw/db0t2e0f2r.png</file>
<file>images/mcw/db0t2e1f0r.png</file>
<file>images/mcw/db0t2e1f1r.png</file>
<file>images/mcw/db0t2e1f2r.png</file>
<file>images/mcw/db0t2e2f0r.png</file>
<file>images/mcw/db0t2e2f1r.png</file>
<file>images/mcw/db0t2e2f2r.png</file>
<file>images/mcw/db1t2e0f0r.png</file>
<file>images/mcw/db1t2e0f1r.png</file>
<file>images/mcw/db1t2e0f2r.png</file>
<file>images/mcw/db1t2e1f0r.png</file>
<file>images/mcw/db1t2e1f1r.png</file>
<file>images/mcw/db1t2e1f2r.png</file>
<file>images/mcw/db1t2e2f0r.png</file>
<file>images/mcw/db1t2e2f1r.png</file>
<file>images/mcw/db1t2e2f2r.png</file>
<file>images/mcw/dt0t2e0f0r.png</file>
<file>images/mcw/dt0t2e0f1r.png</file>
<file>images/mcw/dt0t2e0f2r.png</file>
<file>images/mcw/dt0t2e1f0r.png</file>
<file>images/mcw/dt0t2e1f1r.png</file>
<file>images/mcw/dt0t2e1f2r.png</file>
<file>images/mcw/dt0t2e2f0r.png</file>
<file>images/mcw/dt0t2e2f1r.png</file>
<file>images/mcw/dt0t2e2f2r.png</file>
<file>images/mcw/dt1t2e0f0r.png</file>
<file>images/mcw/dt1t2e0f1r.png</file>
<file>images/mcw/dt1t2e0f2r.png</file>
<file>images/mcw/dt1t2e1f0r.png</file>
<file>images/mcw/dt1t2e1f1r.png</file>
<file>images/mcw/dt1t2e1f2r.png</file>
<file>images/mcw/dt1t2e2f0r.png</file>
<file>images/mcw/dt1t2e2f1r.png</file>
<file>images/mcw/dt1t2e2f2r.png</file>
<file>images/library/00001.png</file>
<file>images/library/00002.png</file>
<file>images/library/00003.png</file>
<file>images/library/00004.png</file>
<file>images/library/00005.png</file>
<file>images/library/00006.png</file>
<file>images/library/00007.png</file>
<file>images/library/00008.png</file>
<file>images/library/00009.png</file>
<file>images/library/00010.png</file>
<file>images/library/00011.png</file>
<file>images/library/00012.png</file>
<file>images/library/00013.png</file>
<file>images/library/00014.png</file>
<file>images/library/00015.png</file>
<file>images/library/00016.png</file>
<file>images/library/01001.png</file>
<file>images/library/01002.png</file>
<file>images/library/01003.png</file>
<file>images/library/01004.png</file>
<file>images/library/01005.png</file>
<file>images/library/01006.png</file>
<file>images/library/01007.png</file>
<file>images/library/01008.png</file>
<file>images/library/10001.png</file>
<file>images/library/10002.png</file>
<file>images/library/10003.png</file>
<file>images/library/10004.png</file>
<file>images/library/10005.png</file>
<file>images/library/10006.png</file>
<file>images/library/10007.png</file>
<file>images/library/10008.png</file>
<file>images/library/10009.png</file>
<file>images/library/10010.png</file>
<file>images/library/10011.png</file>
<file>images/library/10012.png</file>
<file>images/library/10013.png</file>
<file>images/library/10014.png</file>
<file>images/library/10015.png</file>
<file>images/library/10016.png</file>
<file>images/library/10017.png</file>
<file>images/library/10018.png</file>
<file>images/library/10019.png</file>
<file>images/library/10020.png</file>
<file>images/library/10021.png</file>
<file>images/library/10022.png</file>
<file>images/library/10023.png</file>
<file>images/library/10024.png</file>
<file>images/library/10033.png</file>
<file>images/library/10034.png</file>
<file>images/library/10035.png</file>
<file>images/library/10036.png</file>
<file>images/library/10049.png</file>
<file>images/library/10050.png</file>
<file>images/library/10051.png</file>
<file>images/library/10052.png</file>
<file>images/library/10037.png</file>
<file>images/library/10038.png</file>
<file>images/library/10039.png</file>
<file>images/library/10040.png</file>
<file>images/library/10053.png</file>
<file>images/library/10054.png</file>
<file>images/library/10055.png</file>
<file>images/library/10056.png</file>
<file>images/library/10025.png</file>
<file>images/library/10026.png</file>
<file>images/library/10027.png</file>
<file>images/library/10028.png</file>
<file>images/library/10029.png</file>
<file>images/library/10030.png</file>
<file>images/library/10031.png</file>
<file>images/library/10032.png</file>
<file>images/library/10041.png</file>
<file>images/library/10042.png</file>
<file>images/library/10043.png</file>
<file>images/library/10044.png</file>
<file>images/library/10057.png</file>
<file>images/library/10058.png</file>
<file>images/library/10059.png</file>
<file>images/library/10060.png</file>
<file>images/library/10045.png</file>
<file>images/library/10046.png</file>
<file>images/library/10047.png</file>
<file>images/library/10048.png</file>
<file>images/library/10061.png</file>
<file>images/library/10062.png</file>
<file>images/library/10063.png</file>
<file>images/library/10064.png</file>
<file>images/library/10065.png</file>
<file>images/library/10066.png</file>
<file>images/library/10067.png</file>
<file>images/library/10068.png</file>
<file>images/library/10081.png</file>
<file>images/library/10082.png</file>
<file>images/library/10083.png</file>
<file>images/library/10084.png</file>
<file>images/library/10069.png</file>
<file>images/library/10070.png</file>
<file>images/library/10071.png</file>
<file>images/library/10072.png</file>
<file>images/library/10085.png</file>
<file>images/library/10086.png</file>
<file>images/library/10087.png</file>
<file>images/library/10088.png</file>
<file>images/library/10073.png</file>
<file>images/library/10074.png</file>
<file>images/library/10075.png</file>
<file>images/library/10076.png</file>
<file>images/library/10089.png</file>
<file>images/library/10090.png</file>
<file>images/library/10091.png</file>
<file>images/library/10092.png</file>
<file>images/library/10077.png</file>
<file>images/library/10078.png</file>
<file>images/library/10079.png</file>
<file>images/library/10080.png</file>
<file>images/library/10093.png</file>
<file>images/library/10094.png</file>
<file>images/library/10095.png</file>
<file>images/library/10096.png</file>
<file>images/library/10097.png</file>
<file>images/library/10098.png</file>
<file>images/library/10099.png</file>
<file>images/library/10100.png</file>
<file>images/library/10101.png</file>
<file>images/library/10102.png</file>
<file>images/library/10103.png</file>
<file>images/library/10104.png</file>
<file>images/library/20001.png</file>
<file>images/library/20002.png</file>
<file>images/library/20003.png</file>
<file>images/library/20004.png</file>
<file>images/library/30001.png</file>
<file>images/library/30002.png</file>
<file>images/library/30003.png</file>
<file>images/library/30004.png</file>
</qresource>
</RCC>

View file

@ -21,7 +21,7 @@ public:
} }
bool general_settings; bool general_settings;
uint8_t models_count; uint8_t models_count;
uint8_t models[C9XMAX_MODELS]; uint8_t models[C9X_MAX_MODELS];
}; };
compareDialog::compareDialog(QWidget *parent, GeneralSettings *gg) : compareDialog::compareDialog(QWidget *parent, GeneralSettings *gg) :
@ -48,7 +48,7 @@ compareDialog::compareDialog(QWidget *parent, GeneralSettings *gg) :
void compareDialog::dragMoveEvent(QDragMoveEvent *event) void compareDialog::dragMoveEvent(QDragMoveEvent *event)
{ {
if (event->mimeData()->hasFormat("application/x-companion9x")) { if (event->mimeData()->hasFormat("application/x-companion")) {
event->acceptProposedAction(); event->acceptProposedAction();
} else { } else {
event->ignore(); event->ignore();
@ -58,7 +58,7 @@ void compareDialog::dragMoveEvent(QDragMoveEvent *event)
void compareDialog::dragEnterEvent(QDragEnterEvent *event) void compareDialog::dragEnterEvent(QDragEnterEvent *event)
{ {
// accept just text/uri-list mime format // accept just text/uri-list mime format
if (event->mimeData()->hasFormat("application/x-companion9x")) { if (event->mimeData()->hasFormat("application/x-companion")) {
event->acceptProposedAction(); event->acceptProposedAction();
} else { } else {
event->ignore(); event->ignore();
@ -95,8 +95,8 @@ void compareDialog::dropEvent(QDropEvent *event)
const QMimeData *mimeData = event->mimeData(); const QMimeData *mimeData = event->mimeData();
if (child) { if (child) {
if (child->objectName().contains("label_1")) { if (child->objectName().contains("label_1")) {
if(mimeData->hasFormat("application/x-companion9x")) { if(mimeData->hasFormat("application/x-companion")) {
QByteArray gmData = mimeData->data("application/x-companion9x"); QByteArray gmData = mimeData->data("application/x-companion");
DragDropHeader *header = (DragDropHeader *)gmData.data(); DragDropHeader *header = (DragDropHeader *)gmData.data();
if (!header->general_settings) { if (!header->general_settings) {
char *gData = gmData.data()+sizeof(DragDropHeader);//new char[gmData.size() + 1]; char *gData = gmData.data()+sizeof(DragDropHeader);//new char[gmData.size() + 1];
@ -120,8 +120,8 @@ void compareDialog::dropEvent(QDropEvent *event)
} }
} }
else if (child->objectName().contains("label_2")) { else if (child->objectName().contains("label_2")) {
if(mimeData->hasFormat("application/x-companion9x")) { if(mimeData->hasFormat("application/x-companion")) {
QByteArray gmData = mimeData->data("application/x-companion9x"); QByteArray gmData = mimeData->data("application/x-companion");
DragDropHeader *header = (DragDropHeader *)gmData.data(); DragDropHeader *header = (DragDropHeader *)gmData.data();
if (!header->general_settings) { if (!header->general_settings) {
char *gData = gmData.data()+sizeof(DragDropHeader);//new char[gmData.size() + 1]; char *gData = gmData.data()+sizeof(DragDropHeader);//new char[gmData.size() + 1];
@ -305,7 +305,7 @@ void compareDialog::printPhases()
str.append("</b></td><td rowspan=2 align=\"center\" valign=\"bottom\"><b>"+tr("Switch")+"</b></td></tr><tr><td align=center width=\"80\"><b>"+tr("Flight mode name")); str.append("</b></td><td rowspan=2 align=\"center\" valign=\"bottom\"><b>"+tr("Switch")+"</b></td></tr><tr><td align=center width=\"80\"><b>"+tr("Flight mode name"));
str.append("</b></td><td align=center width=\"30\"><b>"+tr("IN")+"</b></td><td align=center width=\"30\"><b>"+tr("OUT")+"</b></td>"); str.append("</b></td><td align=center width=\"30\"><b>"+tr("IN")+"</b></td><td align=center width=\"30\"><b>"+tr("OUT")+"</b></td>");
for (i=0; i<4; i++) { for (i=0; i<4; i++) {
str.append(QString("<td width=\"40\" align=\"center\"><b>%1</b></td>").arg(getStickStr(i))); str.append(QString("<td width=\"40\" align=\"center\"><b>%1</b></td>").arg(getInputStr(*g_model1, i)));
} }
str.append("</tr>"); str.append("</tr>");
for (i=0; i<GetEepromInterface()->getCapability(FlightPhases); i++) { for (i=0; i<GetEepromInterface()->getCapability(FlightPhases); i++) {
@ -342,7 +342,7 @@ void compareDialog::printPhases()
gvars=1; gvars=1;
} }
if (gvars==1) { if (gvars==1) {
gvarnum=GetEepromInterface()->getCapability(GvarsNum); gvarnum=GetEepromInterface()->getCapability(Gvars);
} }
if ((gvars==1 && GetEepromInterface()->getCapability(GvarsFlightPhases)) || GetEepromInterface()->getCapability(RotaryEncoders)) { if ((gvars==1 && GetEepromInterface()->getCapability(GvarsFlightPhases)) || GetEepromInterface()->getCapability(RotaryEncoders)) {
str.append("<br><table border=1 cellspacing=0 cellpadding=1 width=\"100%\">"); str.append("<br><table border=1 cellspacing=0 cellpadding=1 width=\"100%\">");
@ -406,7 +406,7 @@ void compareDialog::printPhases()
str.append("</b></td><td rowspan=2 align=\"center\" valign=\"bottom\"><b>"+tr("Switch")+"</b></td></tr><tr><td align=center width=\"80\"><b>"+tr("Flight mode name")); str.append("</b></td><td rowspan=2 align=\"center\" valign=\"bottom\"><b>"+tr("Switch")+"</b></td></tr><tr><td align=center width=\"80\"><b>"+tr("Flight mode name"));
str.append("</b></td><td align=center width=\"30\"><b>"+tr("IN")+"</b></td><td align=center width=\"30\"><b>"+tr("OUT")+"</b></td>"); str.append("</b></td><td align=center width=\"30\"><b>"+tr("IN")+"</b></td><td align=center width=\"30\"><b>"+tr("OUT")+"</b></td>");
for (i=0; i<4; i++) { for (i=0; i<4; i++) {
str.append(QString("<td width=\"40\" align=\"center\"><b>%1</b></td>").arg(getStickStr(i))); str.append(QString("<td width=\"40\" align=\"center\"><b>%1</b></td>").arg(getInputStr(*g_model1, i)));
} }
str.append("</tr>"); str.append("</tr>");
for (i=0; i<GetEepromInterface()->getCapability(FlightPhases); i++) { for (i=0; i<GetEepromInterface()->getCapability(FlightPhases); i++) {
@ -564,7 +564,7 @@ void compareDialog::printGvars()
int gvarnum=0; int gvarnum=0;
if ((GetCurrentFirmwareVariant() & GVARS_VARIANT ) || (!GetEepromInterface()->getCapability(HasVariants) && GetEepromInterface()->getCapability(Gvars))) { if ((GetCurrentFirmwareVariant() & GVARS_VARIANT ) || (!GetEepromInterface()->getCapability(HasVariants) && GetEepromInterface()->getCapability(Gvars))) {
gvars=1; gvars=1;
gvarnum=GetEepromInterface()->getCapability(GvarsNum); gvarnum=GetEepromInterface()->getCapability(Gvars);
} }
if (!GetEepromInterface()->getCapability(GvarsFlightPhases) && (gvars==1 && GetEepromInterface()->getCapability(Gvars))) { if (!GetEepromInterface()->getCapability(GvarsFlightPhases) && (gvars==1 && GetEepromInterface()->getCapability(Gvars))) {
@ -649,7 +649,8 @@ void compareDialog::printExpos()
}; };
str += tr("Weight") + QString("%1").arg(getGVarString(ed->weight)).rightJustified(6, ' '); str += tr("Weight") + QString("%1").arg(getGVarString(ed->weight)).rightJustified(6, ' ');
str += " " + tr("Expo") + QString("%1").arg(getGVarString(ed->expo)).rightJustified(7, ' '); str += ed->curve.toString().replace("<", "&lt;").replace(">", "&gt;");
if (GetEepromInterface()->getCapability(FlightPhases)) { if (GetEepromInterface()->getCapability(FlightPhases)) {
if(ed->phases) { if(ed->phases) {
if (ed->phases!=(unsigned int)(1<<GetEepromInterface()->getCapability(FlightPhases))-1) { if (ed->phases!=(unsigned int)(1<<GetEepromInterface()->getCapability(FlightPhases))-1) {
@ -681,21 +682,19 @@ void compareDialog::printExpos()
mask <<=1; mask <<=1;
} }
str += QString(")"); str += QString(")");
} else { }
else {
str += tr("DISABLED")+QString(" !!!"); str += tr("DISABLED")+QString(" !!!");
} }
} }
} }
if (ed->swtch.type) if (ed->swtch.type)
str += " " + tr("Switch") + QString("(%1)").arg(ed->swtch.toString()); str += " " + tr("Switch") + QString("(%1)").arg(ed->swtch.toString());
if (ed->curveMode)
if (ed->curveParam)
str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(ed->curveParam).replace("<", "&lt;").replace(">", "&gt;"));
str += "</font></td></tr>"; str += "</font></td></tr>";
} }
} }
str.append("</table></td>"); str.append("</table></td>");
str.append("<td width=\"10%\" align=\"center\" valign=\"middle\"><b>"+getStickStr(i)+"</b></td>"); str.append("<td width=\"10%\" align=\"center\" valign=\"middle\"><b>"+getInputStr(*g_model2, i)+"</b></td>");
str.append("<td width=\"45%\">"); str.append("<td width=\"45%\">");
str.append("<table border=0 cellspacing=0 cellpadding=0>"); str.append("<table border=0 cellspacing=0 cellpadding=0>");
for (int j=0; j<C9X_MAX_EXPOS; j++) { for (int j=0; j<C9X_MAX_EXPOS; j++) {
@ -728,7 +727,8 @@ void compareDialog::printExpos()
} }
str += tr("Weight") + QString("%1").arg(getGVarString(ed->weight)).rightJustified(6, ' '); str += tr("Weight") + QString("%1").arg(getGVarString(ed->weight)).rightJustified(6, ' ');
str += " " + tr("Expo") + QString("%1").arg(getGVarString(ed->expo)).rightJustified(7, ' '); str += ed->curve.toString().replace("<", "&lt;").replace(">", "&gt;");
if (GetEepromInterface()->getCapability(FlightPhases)) { if (GetEepromInterface()->getCapability(FlightPhases)) {
if(ed->phases) { if(ed->phases) {
if (ed->phases!=(unsigned int)(1<<GetEepromInterface()->getCapability(FlightPhases))-1) { if (ed->phases!=(unsigned int)(1<<GetEepromInterface()->getCapability(FlightPhases))-1) {
@ -767,9 +767,7 @@ void compareDialog::printExpos()
} }
if (ed->swtch.type) if (ed->swtch.type)
str += " " + tr("Switch") + QString("(%1)").arg(ed->swtch.toString()); str += " " + tr("Switch") + QString("(%1)").arg(ed->swtch.toString());
if (ed->curveMode)
if (ed->curveParam)
str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(ed->curveParam).replace("<", "&lt;").replace(">", "&gt;"));
str += "</font></td></tr>"; str += "</font></td></tr>";
} }
} }
@ -824,13 +822,8 @@ void compareDialog::printMixers()
str += md->srcRaw.toString(); str += md->srcRaw.toString();
if (md->swtch.type) str += " " + tr("Switch") + QString("(%1)").arg(md->swtch.toString()); if (md->swtch.type) str += " " + tr("Switch") + QString("(%1)").arg(md->swtch.toString());
if (md->carryTrim) str += " " + tr("noTrim"); if (md->carryTrim) str += " " + tr("noTrim");
if(GetEepromInterface()->getCapability(MixFmTrim) && md->enableFmTrim==1){ if (md->sOffset) str += " "+ tr("Offset") + QString(" (%1%)").arg(getGVarString(md->sOffset));
if (md->sOffset) str += " "+ tr("FMTrim") + QString(" (%1%)").arg(md->sOffset); str += md->curve.toString().replace("<", "&lt;").replace(">", "&gt;");
} else {
if (md->sOffset) str += " "+ tr("Offset") + QString(" (%1%)").arg(getGVarString(md->sOffset));
}
if (md->differential) str += " "+ tr("Diff") + QString(" (%1%)").arg(getGVarString(md->differential));
if (md->curve) str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(md->curve).replace("<", "&lt;").replace(">", "&gt;"));
if (md->delayDown || md->delayUp) str += tr(" Delay(u%1:d%2)").arg(md->delayUp/scale).arg(md->delayDown/scale); if (md->delayDown || md->delayUp) str += tr(" Delay(u%1:d%2)").arg(md->delayUp/scale).arg(md->delayDown/scale);
if (md->speedDown || md->speedUp) str += tr(" Slow(u%1:d%2)").arg(md->speedUp/scale).arg(md->speedDown/scale); if (md->speedDown || md->speedUp) str += tr(" Slow(u%1:d%2)").arg(md->speedUp/scale).arg(md->speedDown/scale);
if (md->mixWarn) str += " "+tr("Warn")+QString("(%1)").arg(md->mixWarn); if (md->mixWarn) str += " "+tr("Warn")+QString("(%1)").arg(md->mixWarn);
@ -907,13 +900,9 @@ void compareDialog::printMixers()
str += md->srcRaw.toString(); str += md->srcRaw.toString();
if (md->swtch.type) str += " " + tr("Switch") + QString("(%1)").arg(md->swtch.toString()); if (md->swtch.type) str += " " + tr("Switch") + QString("(%1)").arg(md->swtch.toString());
if (md->carryTrim) str += " " + tr("noTrim"); if (md->carryTrim) str += " " + tr("noTrim");
if(GetEepromInterface()->getCapability(MixFmTrim) && md->enableFmTrim==1){ if (md->sOffset) str += " "+ tr("Offset") + QString(" (%1%)").arg(getGVarString(md->sOffset));
if (md->sOffset) str += " "+ tr("FMTrim") + QString(" (%1%)").arg(getGVarString(md->sOffset)); // TODO if (md->differential) str += " "+ tr("Diff") + QString(" (%1%)").arg(getGVarString(md->differential));
} else { // TODO if (md->curve) str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(md->curve).replace("<", "&lt;").replace(">", "&gt;"));
if (md->sOffset) str += " "+ tr("Offset") + QString(" (%1%)").arg(getGVarString(md->sOffset));
}
if (md->differential) str += " "+ tr("Diff") + QString(" (%1%)").arg(getGVarString(md->differential));
if (md->curve) str += " " + tr("Curve") + QString("(%1)").arg(getCurveStr(md->curve).replace("<", "&lt;").replace(">", "&gt;"));
if (md->delayDown || md->delayUp) str += tr(" Delay(u%1:d%2)").arg(md->delayUp/scale).arg(md->delayDown/scale); if (md->delayDown || md->delayUp) str += tr(" Delay(u%1:d%2)").arg(md->delayUp/scale).arg(md->delayDown/scale);
if (md->speedDown || md->speedUp) str += tr(" Slow(u%1:d%2)").arg(md->speedUp/scale).arg(md->speedDown/scale); if (md->speedDown || md->speedUp) str += tr(" Slow(u%1:d%2)").arg(md->speedUp/scale).arg(md->speedDown/scale);
if (md->mixWarn) str += " "+tr("Warn")+QString("(%1)").arg(md->mixWarn); if (md->mixWarn) str += " "+tr("Warn")+QString("(%1)").arg(md->mixWarn);
@ -1049,7 +1038,7 @@ void compareDialog::printSwitches()
int sc=0; int sc=0;
QString color; QString color;
QString str = "<table border=1 cellspacing=0 cellpadding=3 width=\"100%\">"; QString str = "<table border=1 cellspacing=0 cellpadding=3 width=\"100%\">";
str.append("<tr><td><h2>"+tr("Custom Switches")+"</h2></td></tr>"); str.append("<tr><td><h2>"+tr("Logical Switches")+"</h2></td></tr>");
str.append("<tr><td><table border=1 cellspacing=0 cellpadding=1 width=\"100%\">"); str.append("<tr><td><table border=1 cellspacing=0 cellpadding=1 width=\"100%\">");
for (int i=0; i<GetEepromInterface()->getCapability(CustomSwitches); i++) { for (int i=0; i<GetEepromInterface()->getCapability(CustomSwitches); i++) {
QString sw1 = getCustomSwitchStr(&g_model1->customSw[i], *g_model1); QString sw1 = getCustomSwitchStr(&g_model1->customSw[i], *g_model1);
@ -1059,9 +1048,9 @@ void compareDialog::printSwitches()
color=getColor1(sw1,sw2); color=getColor1(sw1,sw2);
str.append(QString("<td width=\"45%\"><font color=%1>").arg(color)+sw1+"</font></td>"); str.append(QString("<td width=\"45%\"><font color=%1>").arg(color)+sw1+"</font></td>");
if (i<9) { if (i<9) {
str.append("<td align=\"center\" width=\"10%\"><b>"+tr("CS")+QString("%1</b></td>").arg(i+1)); str.append("<td align=\"center\" width=\"10%\"><b>"+tr("LS")+QString("%1</b></td>").arg(i+1));
} else { } else {
str.append("<td align=\"center\" width=\"10%\"><b>"+tr("CS")+('A'+(i-9))+"</b></td>"); str.append("<td align=\"center\" width=\"10%\"><b>"+tr("LS")+('A'+(i-9))+"</b></td>");
} }
color=getColor2(sw1,sw2); color=getColor2(sw1,sw2);
str.append(QString("<td width=\"45%\"><font color=%1>").arg(color)+sw2+"</font></td>"); str.append(QString("<td width=\"45%\"><font color=%1>").arg(color)+sw2+"</font></td>");
@ -1080,7 +1069,7 @@ void compareDialog::printFSwitches()
QString color2; QString color2;
int sc=0; int sc=0;
QString str = "<table border=1 cellspacing=0 cellpadding=3 style=\"page-break-before:always;\" width=\"100%\">"; QString str = "<table border=1 cellspacing=0 cellpadding=3 style=\"page-break-before:always;\" width=\"100%\">";
str.append("<tr><td><h2>"+tr("Custom Functions")+"</h2></td></tr>"); str.append("<tr><td><h2>"+tr("Switch Assignment")+"</h2></td></tr>");
str.append("<tr><td><table border=1 cellspacing=0 cellpadding=1 width=\"100%\"><tr>"); str.append("<tr><td><table border=1 cellspacing=0 cellpadding=1 width=\"100%\"><tr>");
str.append("<td width=\"7%\" align=\"center\"><b>"+tr("Switch")+"</b></td>"); str.append("<td width=\"7%\" align=\"center\"><b>"+tr("Switch")+"</b></td>");
str.append("<td width=\"12%\" align=\"center\"><b>"+tr("Function")+"</b></td>"); str.append("<td width=\"12%\" align=\"center\"><b>"+tr("Function")+"</b></td>");
@ -1271,6 +1260,7 @@ void compareDialog::printFrSky()
color=getColor1(fd1->rssiAlarms[1].value,fd2->rssiAlarms[1].value); color=getColor1(fd1->rssiAlarms[1].value,fd2->rssiAlarms[1].value);
str.append("<td align=\"center\"><font color="+color+">"+QString::number(fd1->rssiAlarms[1].value,10)+"</td>"); str.append("<td align=\"center\"><font color="+color+">"+QString::number(fd1->rssiAlarms[1].value,10)+"</td>");
str.append("</table>"); str.append("</table>");
#if 0
if (GetEepromInterface()->getCapability(TelemetryBars) || GetEepromInterface()->getCapability(TelemetryCSFields)) { if (GetEepromInterface()->getCapability(TelemetryBars) || GetEepromInterface()->getCapability(TelemetryCSFields)) {
int cols=GetEepromInterface()->getCapability(TelemetryColsCSFields); int cols=GetEepromInterface()->getCapability(TelemetryColsCSFields);
if (cols==0) cols=2; if (cols==0) cols=2;
@ -1311,13 +1301,13 @@ void compareDialog::printFrSky()
if (fd1->screens[0].type==fd2->screens[0].type) if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor1(fd1->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].source); color=getColor1(fd1->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].source);
str.append("<td align=\"Center\"><font color="+color+">"+getFrSkySrc(fd1->screens[0].body.bars[i].source)+"</font></td>"); str.append("<td align=\"Center\"><font color="+color+">"+getFrSkySrc(fd1->screens[0].body.bars[i].source)+"</font></td>");
value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMin,fd1); // TODO value1 = getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMin,fd1);
value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMin,fd2); // TODO value2 = getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMin,fd2);
if (fd1->screens[0].type==fd2->screens[0].type) if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor1(value1,value2); color=getColor1(value1,value2);
str.append("<td align=\"Right\"><font color="+color+">"+QString::number(value1)+"</td>"); str.append("<td align=\"Right\"><font color="+color+">"+QString::number(value1)+"</td>");
value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMax,fd1); // TODO value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMax,fd1);
value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMax,fd2); // TODO value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMax,fd2);
if (fd1->screens[0].type==fd2->screens[0].type) if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor1(value1,value2); color=getColor1(value1,value2);
str.append("<td align=\"Right\"><font color="+color+">"+QString::number(value1)+"</td></tr>"); str.append("<td align=\"Right\"><font color="+color+">"+QString::number(value1)+"</td></tr>");
@ -1326,6 +1316,7 @@ void compareDialog::printFrSky()
} }
} }
} }
#endif
str.append("</td><td width=\"50%\">"); str.append("</td><td width=\"50%\">");
str.append("<table border=1 cellspacing=0 cellpadding=1 width=\"100%\">"); str.append("<table border=1 cellspacing=0 cellpadding=1 width=\"100%\">");
@ -1388,7 +1379,7 @@ void compareDialog::printFrSky()
color=getColor2(fd1->rssiAlarms[1].value,fd2->rssiAlarms[1].value); color=getColor2(fd1->rssiAlarms[1].value,fd2->rssiAlarms[1].value);
str.append("<td align=\"center\"><font color="+color+">"+QString::number(fd2->rssiAlarms[1].value,10)+"</td>"); str.append("<td align=\"center\"><font color="+color+">"+QString::number(fd2->rssiAlarms[1].value,10)+"</td>");
str.append("</table></br>"); str.append("</table></br>");
#if 0
if (GetEepromInterface()->getCapability(TelemetryBars) || GetEepromInterface()->getCapability(TelemetryCSFields)) { if (GetEepromInterface()->getCapability(TelemetryBars) || GetEepromInterface()->getCapability(TelemetryCSFields)) {
int cols=GetEepromInterface()->getCapability(TelemetryColsCSFields); int cols=GetEepromInterface()->getCapability(TelemetryColsCSFields);
if (cols==0) cols=2; if (cols==0) cols=2;
@ -1429,13 +1420,13 @@ void compareDialog::printFrSky()
if (fd1->screens[0].type==fd2->screens[0].type) if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor2(fd1->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].source); color=getColor2(fd1->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].source);
str.append("<td align=\"Center\"><font color="+color+">"+getFrSkySrc(fd2->screens[0].body.bars[i].source)+"</font></td>"); str.append("<td align=\"Center\"><font color="+color+">"+getFrSkySrc(fd2->screens[0].body.bars[i].source)+"</font></td>");
value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMin,fd1); // TODO value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMin,fd1);
value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMin,fd2); // TODO value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMin,fd2);
if (fd1->screens[0].type==fd2->screens[0].type) if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor2(value1,value2); color=getColor2(value1,value2);
str.append("<td align=\"Right\"><font color="+color+">"+QString::number(value2)+"</font></td>"); str.append("<td align=\"Right\"><font color="+color+">"+QString::number(value2)+"</font></td>");
value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMax,fd1); // TODO value1=getBarValue(fd1->screens[0].body.bars[i].source,fd1->screens[0].body.bars[i].barMax,fd1);
value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMax,fd2); // TODO value2=getBarValue(fd2->screens[0].body.bars[i].source,fd2->screens[0].body.bars[i].barMax,fd2);
if (fd1->screens[0].type==fd2->screens[0].type) if (fd1->screens[0].type==fd2->screens[0].type)
color=getColor2(value1,value2); color=getColor2(value1,value2);
str.append("<td align=\"Right\"><font color="+color+">"+QString::number(value2)+"</font></td></tr>"); str.append("<td align=\"Right\"><font color="+color+">"+QString::number(value2)+"</font></td></tr>");
@ -1444,6 +1435,7 @@ void compareDialog::printFrSky()
} }
} }
} }
#endif
str.append("</td></tr></table>"); str.append("</td></tr></table>");
te->append(str); te->append(str);
} }

View file

@ -29,8 +29,8 @@
<string>Dialog</string> <string>Dialog</string>
</property> </property>
<property name="windowIcon"> <property name="windowIcon">
<iconset resource="companion9x.qrc"> <iconset resource="companion.qrc">
<normaloff>:/images/print.png</normaloff>:/images/print.png</iconset> <normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="0" column="0"> <item row="0" column="0">
@ -129,7 +129,7 @@
</layout> </layout>
</widget> </widget>
<resources> <resources>
<include location="companion9x.qrc"/> <include location="companion.qrc"/>
</resources> </resources>
<connections> <connections>
<connection> <connection>

View file

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

View file

@ -6,25 +6,25 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>926</width> <width>788</width>
<height>333</height> <height>528</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>Dialog</string> <string>Dialog</string>
</property> </property>
<property name="windowIcon"> <property name="windowIcon">
<iconset resource="companion9x.qrc"> <iconset resource="companion.qrc">
<normaloff>:/icon.png</normaloff>:/icon.png</iconset> <normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QTextBrowser" name="textBrowser"/> <widget class="QTextEdit" name="textEditor"/>
</item> </item>
</layout> </layout>
</widget> </widget>
<resources> <resources>
<include location="companion9x.qrc"/> <include location="companion.qrc"/>
</resources> </resources>
<connections/> <connections/>
</ui> </ui>

View file

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

View file

@ -20,8 +20,8 @@
<string>Customize Splash</string> <string>Customize Splash</string>
</property> </property>
<property name="windowIcon"> <property name="windowIcon">
<iconset> <iconset resource="companion.qrc">
<normaloff>:/images/c_home.png</normaloff>:/images/c_home.png</iconset> <normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property> </property>
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0"> <item row="0" column="0">
@ -71,7 +71,7 @@
<string/> <string/>
</property> </property>
<property name="pixmap"> <property name="pixmap">
<pixmap resource="companion9x.qrc">:/images/customize.png</pixmap> <pixmap resource="companion.qrc">:/images/customize.png</pixmap>
</property> </property>
<property name="scaledContents"> <property name="scaledContents">
<bool>true</bool> <bool>true</bool>
@ -211,10 +211,6 @@ p, li { white-space: pre-wrap; }
<property name="text"> <property name="text">
<string>...</string> <string>...</string>
</property> </property>
<property name="icon">
<iconset resource="companion9x.qrc">
<normaloff>:/images/library.png</normaloff>:/images/library.png</iconset>
</property>
<property name="iconSize"> <property name="iconSize">
<size> <size>
<width>16</width> <width>16</width>
@ -264,7 +260,7 @@ p, li { white-space: pre-wrap; }
</layout> </layout>
</widget> </widget>
<resources> <resources>
<include location="companion9x.qrc"/> <include location="companion.qrc"/>
</resources> </resources>
<connections/> <connections/>
</ui> </ui>

View file

@ -21,7 +21,7 @@ downloadDialog::downloadDialog(QWidget *parent, QString src, QString tgt) :
file = new QFile(tgt); file = new QFile(tgt);
if (!file->open(QIODevice::WriteOnly)) { if (!file->open(QIODevice::WriteOnly)) {
QMessageBox::critical(this, "companion9x", QMessageBox::critical(this, "Companion",
tr("Unable to save the file %1: %2.") tr("Unable to save the file %1: %2.")
.arg(tgt).arg(file->errorString())); .arg(tgt).arg(file->errorString()));
QTimer::singleShot(0, this, SLOT(fileError())); QTimer::singleShot(0, this, SLOT(fileError()));
@ -51,7 +51,7 @@ void downloadDialog::httpFinished()
if (reply->error()) if (reply->error())
{ {
file->remove(); file->remove();
QMessageBox::information(this, tr("companion9x"), QMessageBox::information(this, tr("Companion"),
tr("Download failed: %1.") tr("Download failed: %1.")
.arg(reply->errorString())); .arg(reply->errorString()));
ok = false; ok = false;

View file

@ -14,7 +14,7 @@
<string>Downloading: </string> <string>Downloading: </string>
</property> </property>
<property name="windowIcon"> <property name="windowIcon">
<iconset resource="companion9x.qrc"> <iconset resource="companion.qrc">
<normaloff>:/icon.png</normaloff>:/icon.png</iconset> <normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
@ -51,7 +51,7 @@
</layout> </layout>
</widget> </widget>
<resources> <resources>
<include location="companion9x.qrc"/> <include location="companion.qrc"/>
</resources> </resources>
<connections> <connections>
<connection> <connection>

View file

@ -74,7 +74,10 @@ class DataField {
QByteArray bytes = bitsToBytes(bits); QByteArray bytes = bitsToBytes(bits);
int result = (offset+bits.count()) % 8; int result = (offset+bits.count()) % 8;
for (int i=0; i<level; i++) printf(" "); for (int i=0; i<level; i++) printf(" ");
printf("%s ", getName()); if (bits.count() % 8 == 0)
printf("%s (%dbytes) ", getName(), bytes.count());
else
printf("%s (%dbits) ", getName(), bits.count());
for (int i=0; i<bytes.count(); i++) { for (int i=0; i<bytes.count(); i++) {
unsigned char c = bytes[i]; unsigned char c = bytes[i];
if ((i==0 && offset) || (i==bytes.count()-1 && result!=0)) if ((i==0 && offset) || (i==bytes.count()-1 && result!=0))
@ -422,7 +425,7 @@ class StructField: public DataField {
virtual int Dump(int level=0, int offset=0) virtual int Dump(int level=0, int offset=0)
{ {
for (int i=0; i<level; i++) printf(" "); for (int i=0; i<level; i++) printf(" ");
printf("%s\n", getName()); printf("%s (%d bytes)\n", getName(), size()/8);
foreach(DataField *field, fields) { foreach(DataField *field, fields) {
offset = field->Dump(level+1, offset); offset = field->Dump(level+1, offset);
} }
@ -547,6 +550,7 @@ class ConversionField: public TransformedField {
_field(0), _field(0),
table(table), table(table),
shift(0), shift(0),
scale(1),
min(INT_MIN), min(INT_MIN),
max(INT_MAX), max(INT_MAX),
exportFunc(NULL), exportFunc(NULL),
@ -562,6 +566,7 @@ class ConversionField: public TransformedField {
_field(0), _field(0),
table(table), table(table),
shift(0), shift(0),
scale(0),
min(INT_MIN), min(INT_MIN),
max(INT_MAX), max(INT_MAX),
exportFunc(NULL), exportFunc(NULL),
@ -577,6 +582,7 @@ class ConversionField: public TransformedField {
_field(0), _field(0),
table(NULL), table(NULL),
shift(0), shift(0),
scale(0),
min(INT_MIN), min(INT_MIN),
max(INT_MAX), max(INT_MAX),
exportFunc(exportFunc), exportFunc(exportFunc),
@ -585,13 +591,14 @@ class ConversionField: public TransformedField {
{ {
} }
ConversionField(int & field, int shift, int min=INT_MIN, int max=INT_MAX, const char *name = "Signed shifted"): ConversionField(int & field, int shift, int scale=0, int min=INT_MIN, int max=INT_MAX, const char *name = "Signed shifted"):
TransformedField(internalField), TransformedField(internalField),
internalField(_field, name), internalField(_field, name),
field(field), field(field),
_field(0), _field(0),
table(NULL), table(NULL),
shift(shift), shift(shift),
scale(scale),
min(min), min(min),
max(max), max(max),
exportFunc(NULL), exportFunc(NULL),
@ -600,13 +607,14 @@ class ConversionField: public TransformedField {
{ {
} }
ConversionField(unsigned int & field, int shift): ConversionField(unsigned int & field, int shift, int scale=0):
TransformedField(internalField), TransformedField(internalField),
internalField((unsigned int &)_field), internalField((unsigned int &)_field),
field((int &)field), field((int &)field),
_field(0), _field(0),
table(NULL), table(NULL),
shift(shift), shift(shift),
scale(scale),
min(INT_MIN), min(INT_MIN),
max(INT_MAX), max(INT_MAX),
exportFunc(NULL), exportFunc(NULL),
@ -617,19 +625,25 @@ class ConversionField: public TransformedField {
virtual void beforeExport() virtual void beforeExport()
{ {
int val = field;
if (scale) {
val /= scale;
}
if (table) { if (table) {
if (table->exportValue(field, _field)) if (table->exportValue(val, _field))
return; return;
if (!error.isEmpty()) if (!error.isEmpty())
EEPROMWarnings += error + "\n"; EEPROMWarnings += error + "\n";
} }
else if (shift) { else if (shift) {
if (field < min) _field = min + shift; if (val < min) _field = min + shift;
else if (field > max) _field = max + shift; else if (val > max) _field = max + shift;
else _field = field + shift; else _field = val + shift;
} }
else { else {
_field = exportFunc(field); _field = exportFunc(val);
} }
} }
@ -645,6 +659,10 @@ class ConversionField: public TransformedField {
else { else {
field = importFunc(_field); field = importFunc(_field);
} }
if (scale) {
field *= scale;
}
} }
protected: protected:
@ -653,6 +671,7 @@ class ConversionField: public TransformedField {
int _field; int _field;
ConversionTable * table; ConversionTable * table;
int shift; int shift;
int scale;
int min; int min;
int max; int max;
int (*exportFunc)(int); int (*exportFunc)(int);

View file

@ -4,12 +4,16 @@
#include "firmwares/er9x/er9xinterface.h" #include "firmwares/er9x/er9xinterface.h"
#include "firmwares/th9x/th9xinterface.h" #include "firmwares/th9x/th9xinterface.h"
#include "firmwares/gruvin9x/gruvin9xinterface.h" #include "firmwares/gruvin9x/gruvin9xinterface.h"
#include "firmwares/opentx/open9xinterface.h" #include "firmwares/opentx/opentxinterface.h"
#include "firmwares/ersky9x/ersky9xinterface.h" #include "firmwares/ersky9x/ersky9xinterface.h"
#include "qsettings.h" #include "qsettings.h"
#include "helpers.h"
QString EEPROMWarnings; QString EEPROMWarnings;
const char * switches9X[] = { "3POS", "THR", "RUD", "ELE", "AIL", "GEA", "TRN" };
const char * switchesX9D[] = { "SA", "SB", "SC", "SD", "SE", "SF", "SG", "SH" };
void setEEPROMString(char *dst, const char *src, int size) void setEEPROMString(char *dst, const char *src, int size)
{ {
memcpy(dst, src, size); memcpy(dst, src, size);
@ -33,238 +37,141 @@ void getEEPROMString(char *dst, const char *src, int size)
} }
} }
int RawSource::getDecimals(const ModelData & Model) RawSourceRange RawSource::getRange(bool singleprec)
{ {
if(type==SOURCE_TYPE_TELEMETRY) { RawSourceRange result;
switch (index) {
case TELEMETRY_SOURCE_A1: int board = GetEepromInterface()->getBoard();
case TELEMETRY_SOURCE_A2:
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0 ? 2: 0); if (!singleprec && !IS_TARANIS(board)) {
case TELEMETRY_SOURCE_CELL: singleprec = true;
return 2; }
case TELEMETRY_SOURCE_CELLS_SUM:
case TELEMETRY_SOURCE_VFAS:
case TELEMETRY_SOURCE_CURRENT:
return 1;
default:
return 0;
}
}
return 0;
}
double RawSource::getMin(const ModelData & Model)
{
switch (type) { switch (type) {
case SOURCE_TYPE_TELEMETRY: case SOURCE_TYPE_TELEMETRY:
switch (index) { switch (index) {
/*case TELEMETRY_SOURCE_NONE:
case TELEMETRY_SOURCE_TX_BATT: case TELEMETRY_SOURCE_TX_BATT:
result.step = 0.1;
result.decimals = 1;
result.max = 25.5;
break;
case TELEMETRY_SOURCE_TIMER1: case TELEMETRY_SOURCE_TIMER1:
case TELEMETRY_SOURCE_TIMER2: case TELEMETRY_SOURCE_TIMER2:
return 0; */ result.step = singleprec ? 3 : 1;
case TELEMETRY_SOURCE_A1: result.max = singleprec ? 765 : 7200;
case TELEMETRY_SOURCE_A2: break;
if (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0) {
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/2550.0;
}
else {
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/255.0;
}
case TELEMETRY_SOURCE_ALT:
case TELEMETRY_SOURCE_GPS_ALT:
return -500;
case TELEMETRY_SOURCE_T1:
case TELEMETRY_SOURCE_T2:
return -30;
default:
return 0;
}
break;
default:
return (Model.extendedLimits ? -125 :-100);
}
}
double RawSource::getMax(const ModelData & Model)
{
switch (type) {
case SOURCE_TYPE_TELEMETRY:
switch (index) {
case TELEMETRY_SOURCE_TIMER1:
case TELEMETRY_SOURCE_TIMER2:
return 765;
case TELEMETRY_SOURCE_RSSI_TX: case TELEMETRY_SOURCE_RSSI_TX:
case TELEMETRY_SOURCE_RSSI_RX: case TELEMETRY_SOURCE_RSSI_RX:
return 100; result.max = 100;
break;
case TELEMETRY_SOURCE_A1: case TELEMETRY_SOURCE_A1:
case TELEMETRY_SOURCE_A2: case TELEMETRY_SOURCE_A2:
if (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0) { if (model) {
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio-(Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/255.0)/10; FrSkyChannelData channel = model->frsky.channels[index-TELEMETRY_SOURCE_A1]; // TODO const &
} else { float ratio = channel.getRatio();
return Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio-(Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/255.0; if (channel.type==0 || channel.type==1 || channel.type==2)
result.decimals = 2;
else
result.decimals = 0;
result.step = ratio / 255;
result.min = channel.offset * result.step;
result.max = ratio + result.min;
} }
break;
case TELEMETRY_SOURCE_ALT: case TELEMETRY_SOURCE_ALT:
case TELEMETRY_SOURCE_GPS_ALT: case TELEMETRY_SOURCE_GPS_ALT:
return 1540; result.step = singleprec ? 8 : 1;
case TELEMETRY_SOURCE_RPM: result.min = -500;
return 12750; result.max = singleprec ? 1540 : 3000;
case TELEMETRY_SOURCE_FUEL: break;
return 100;
case TELEMETRY_SOURCE_T1: case TELEMETRY_SOURCE_T1:
case TELEMETRY_SOURCE_T2: case TELEMETRY_SOURCE_T2:
return 225; result.min = -30;
case TELEMETRY_SOURCE_SPEED: result.max = 225;
return 944; break;
case TELEMETRY_SOURCE_DIST:
return 2040;
case TELEMETRY_SOURCE_CELL:
return 5.1;
case TELEMETRY_SOURCE_CELLS_SUM:
case TELEMETRY_SOURCE_VFAS:
return 25.5;
case TELEMETRY_SOURCE_CURRENT:
return 127.5;
case TELEMETRY_SOURCE_CONSUMPTION:
return 5100;
case TELEMETRY_SOURCE_POWER:
return 1275;
default:
return 125;
}
break;
default:
return (Model.extendedLimits ? 125 :100);
}
}
double RawSource::getOffset(const ModelData & Model)
{
if (type==SOURCE_TYPE_TELEMETRY) {
switch (index) {
case TELEMETRY_SOURCE_A1:
case TELEMETRY_SOURCE_A2:
if (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0) {
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/2550.0;
}
else {
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].offset*Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio)/255.0;
}
case TELEMETRY_SOURCE_ALT:
case TELEMETRY_SOURCE_GPS_ALT:
return 524;
case TELEMETRY_SOURCE_RPM:
return 6400;
case TELEMETRY_SOURCE_FUEL:
return 0;
case TELEMETRY_SOURCE_T1:
case TELEMETRY_SOURCE_T2:
return 98;
case TELEMETRY_SOURCE_SPEED:
return 474;
case TELEMETRY_SOURCE_DIST:
return 1024;
case TELEMETRY_SOURCE_CELL:
return 2.56;
default:
return 0;
}
}
return 0;
}
int RawSource::getRawOffset(const ModelData & Model)
{
switch (type) {
case SOURCE_TYPE_TELEMETRY:
switch (index) {
case TELEMETRY_SOURCE_TIMER1:
case TELEMETRY_SOURCE_TIMER2:
case TELEMETRY_SOURCE_RSSI_TX:
case TELEMETRY_SOURCE_RSSI_RX:
case TELEMETRY_SOURCE_A1:
case TELEMETRY_SOURCE_A2:
case TELEMETRY_SOURCE_FUEL:
case TELEMETRY_SOURCE_CELLS_SUM:
case TELEMETRY_SOURCE_VFAS:
case TELEMETRY_SOURCE_CURRENT:
case TELEMETRY_SOURCE_CONSUMPTION:
case TELEMETRY_SOURCE_POWER:
return 128;
default:
return 0;
}
default:
return 0;
}
}
double RawSource::getStep(const ModelData & Model)
{
switch (type) {
case SOURCE_TYPE_TELEMETRY:
switch (index) {
case TELEMETRY_SOURCE_TIMER1:
case TELEMETRY_SOURCE_TIMER2:
return 3;
case TELEMETRY_SOURCE_A1:
case TELEMETRY_SOURCE_A2:
if (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].type==0) {
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio/2550.0);
}
else {
return (Model.frsky.channels[index-TELEMETRY_SOURCE_A1].ratio/255.0);
}
case TELEMETRY_SOURCE_ALT:
case TELEMETRY_SOURCE_GPS_ALT:
return 8;
case TELEMETRY_SOURCE_RPM: case TELEMETRY_SOURCE_RPM:
return 50; result.step = singleprec ? 50 : 1;
result.max = singleprec ? 12750 : 20000;
break;
case TELEMETRY_SOURCE_FUEL:
result.max = 100;
break;
case TELEMETRY_SOURCE_SPEED: case TELEMETRY_SOURCE_SPEED:
return 4; result.step = singleprec ? 4 : 1;
result.max = singleprec ? 944 : 2000;
if (model && !model->frsky.imperial) {
result.step *= 1.852;
result.max *= 1.852;
}
break;
case TELEMETRY_SOURCE_DIST: case TELEMETRY_SOURCE_DIST:
return 8; result.step = singleprec ? 8 : 1;
result.max = singleprec ? 2040 : 10000;
break;
case TELEMETRY_SOURCE_CELL: case TELEMETRY_SOURCE_CELL:
return 0.02; result.step = singleprec ? 0.02 : 0.01;
result.max = 5.1;
result.decimals = 2;
break;
case TELEMETRY_SOURCE_CELLS_SUM: case TELEMETRY_SOURCE_CELLS_SUM:
case TELEMETRY_SOURCE_VFAS: case TELEMETRY_SOURCE_VFAS:
return 0.1; result.step = 0.1;
result.max = 25.5;
result.decimals = 1;
break;
case TELEMETRY_SOURCE_CURRENT: case TELEMETRY_SOURCE_CURRENT:
return 0.5; result.step = singleprec ? 0.5 : 0.1;
result.max = singleprec ? 127.5 : 200.0;
result.decimals = 1;
break;
case TELEMETRY_SOURCE_CONSUMPTION: case TELEMETRY_SOURCE_CONSUMPTION:
return 20; result.step = singleprec ? 20 : 1;
result.max = singleprec ? 5100 : 10000;
break;
case TELEMETRY_SOURCE_POWER: case TELEMETRY_SOURCE_POWER:
return 5; result.step = singleprec ? 5 : 1;
result.max = singleprec ? 1275 : 2000;
break;
default: default:
return 1; result.max = 125;
break;
}
if (singleprec) {
result.offset = result.max - (127*result.step);
} }
break; break;
default:
return 1; default:
result.max = (model && model->extendedLimits ? 125 : 100);
result.min = - result.max;
break;
} }
return result;
}
QString AnalogString(int index)
{
static const QString sticks[] = { QObject::tr("Rud"), QObject::tr("Ele"), QObject::tr("Thr"), QObject::tr("Ail") };
static const QString pots9X[] = { QObject::tr("P1"), QObject::tr("P2"), QObject::tr("P3") };
static const QString potsX9D[] = { QObject::tr("S1"), QObject::tr("S2"), QObject::tr("LS"), QObject::tr("RS") };
if (index < 4)
return CHECK_IN_ARRAY(sticks, index);
else
return (IS_TARANIS(GetEepromInterface()->getBoard()) ? CHECK_IN_ARRAY(potsX9D, index-4) : CHECK_IN_ARRAY(pots9X, index-4));
}
QString RotaryEncoderString(int index)
{
static const QString rotary[] = { QObject::tr("REa"), QObject::tr("REb") };
return CHECK_IN_ARRAY(rotary, index);
} }
QString RawSource::toString() QString RawSource::toString()
{ {
static const QString sticks[] = { QObject::tr("Rud"), QObject::tr("Ele"), QObject::tr("Thr"), QObject::tr("Ail") };
static const QString trims[] = { QObject::tr("TrmR"), QObject::tr("TrmE"), QObject::tr("TrmT"), QObject::tr("TrmA")}; static const QString trims[] = { QObject::tr("TrmR"), QObject::tr("TrmE"), QObject::tr("TrmT"), QObject::tr("TrmA")};
static const QString pots9X[] = { QObject::tr("P1"), QObject::tr("P2"), QObject::tr("P3") };
static const QString potsX9D[] = { QObject::tr("S1"), QObject::tr("S2"), QObject::tr("LS"), QObject::tr("RS") };
static const QString rotary[] = { QObject::tr("REa"), QObject::tr("REb") };
static const QString switches9X[] = { QObject::tr("3POS"),
QObject::tr("THR"), QObject::tr("RUD"), QObject::tr("ELE"),
QObject::tr("AIL"), QObject::tr("GEA"), QObject::tr("TRN"),
};
static const QString switchesX9D[] = { QObject::tr("SA"), QObject::tr("SB"), QObject::tr("SC"), QObject::tr("SD"),
QObject::tr("SE"), QObject::tr("SF"), QObject::tr("SG"), QObject::tr("SH"),
};
static const QString telemetry[] = { QObject::tr("Batt"), QObject::tr("Timer1"), QObject::tr("Timer2"), static const QString telemetry[] = { QObject::tr("Batt"), QObject::tr("Timer1"), QObject::tr("Timer2"),
(IS_TARANIS(GetEepromInterface()->getBoard()) ? QObject::tr("SWR") : QObject::tr("Tx")), (IS_TARANIS(GetEepromInterface()->getBoard()) ? QObject::tr("RSSI") : QObject::tr("Rx")), QObject::tr("A1"), QObject::tr("A2"), QObject::tr("Alt"), QObject::tr("Rpm"), QObject::tr("Fuel"), QObject::tr("T1"), (IS_TARANIS(GetEepromInterface()->getBoard()) ? QObject::tr("SWR") : QObject::tr("Tx")), (IS_TARANIS(GetEepromInterface()->getBoard()) ? QObject::tr("RSSI") : QObject::tr("Rx")), QObject::tr("A1"), QObject::tr("A2"), 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"), QObject::tr("Cell"), QObject::tr("Cels"), QObject::tr("Vfas"), QObject::tr("Curr"), QObject::tr("T2"), QObject::tr("Speed"), QObject::tr("Dist"), QObject::tr("GPS Alt"), QObject::tr("Cell"), QObject::tr("Cels"), QObject::tr("Vfas"), QObject::tr("Curr"),
@ -273,25 +180,27 @@ QString RawSource::toString()
QObject::tr("Cur+"), QObject::tr("Pwr+"), QObject::tr("ACC "), QObject::tr("Time"), QObject::tr("Cur+"), QObject::tr("Pwr+"), QObject::tr("ACC "), QObject::tr("Time"),
}; };
static const QString virtualSwitches[] = { QObject::tr("CS1"), QObject::tr("CS2"), QObject::tr("CS3"), QObject::tr("CS4"), QObject::tr("CS5"), QObject::tr("CS6"), QObject::tr("CS7"), QObject::tr("CS8"), QObject::tr("CS9"), QObject::tr("CSA"), static const QString virtualSwitches[] = { QObject::tr("LS1"), QObject::tr("LS2"), QObject::tr("LS3"), QObject::tr("LS4"), QObject::tr("LS5"), QObject::tr("LS6"), QObject::tr("LS7"), QObject::tr("LS8"), QObject::tr("LS9"), QObject::tr("LSA"),
QObject::tr("CSB"), QObject::tr("CSC"), QObject::tr("CSD"), QObject::tr("CSE"), QObject::tr("CSF"), QObject::tr("CSG"), QObject::tr("CSH"), QObject::tr("CSI"), QObject::tr("CSJ"), QObject::tr("CSK"), QObject::tr("LSB"), QObject::tr("LSC"), QObject::tr("LSD"), QObject::tr("LSE"), QObject::tr("LSF"), QObject::tr("LSG"), QObject::tr("LSH"), QObject::tr("LSI"), QObject::tr("LSJ"), QObject::tr("LSK"),
QObject::tr("CSL"), QObject::tr("CSM"), QObject::tr("CSN"), QObject::tr("CSO"), QObject::tr("CSP"), QObject::tr("CSQ"), QObject::tr("CSR"), QObject::tr("CSS"), QObject::tr("CST"), QObject::tr("CSU"), QObject::tr("LSL"), QObject::tr("LSM"), QObject::tr("LSN"), QObject::tr("LSO"), QObject::tr("LSP"), QObject::tr("LSQ"), QObject::tr("LSR"), QObject::tr("LSS"), QObject::tr("LST"), QObject::tr("LSU"),
QObject::tr("CSV"), QObject::tr("CSW") QObject::tr("LSV"), QObject::tr("LSW")
}; };
if (index<0) { if (index<0) {
return QObject::tr("----"); return QObject::tr("----");
} }
switch(type) { switch (type) {
case SOURCE_TYPE_STICK: case SOURCE_TYPE_VIRTUAL_INPUT:
if (index < 4) if (model && strlen(model->inputNames[index]) > 0)
return CHECK_IN_ARRAY(sticks, index); return QString(model->inputNames[index]);
else else
return (IS_TARANIS(GetEepromInterface()->getBoard()) ? CHECK_IN_ARRAY(potsX9D, index-4) : CHECK_IN_ARRAY(pots9X, index-4)); return QObject::tr("Input %1").arg(index+1);
case SOURCE_TYPE_STICK:
return AnalogString(index);
case SOURCE_TYPE_TRIM: case SOURCE_TYPE_TRIM:
return CHECK_IN_ARRAY(trims, index); return CHECK_IN_ARRAY(trims, index);
case SOURCE_TYPE_ROTARY_ENCODER: case SOURCE_TYPE_ROTARY_ENCODER:
return CHECK_IN_ARRAY(rotary, index); return RotaryEncoderString(index);
case SOURCE_TYPE_MAX: case SOURCE_TYPE_MAX:
return QObject::tr("MAX"); return QObject::tr("MAX");
case SOURCE_TYPE_SWITCH: case SOURCE_TYPE_SWITCH:
@ -345,10 +254,10 @@ QString RawSwitch::toString()
SwitchUp('H'), SwitchDn('H'), SwitchUp('H'), SwitchDn('H'),
}; };
static const QString virtualSwitches[] = { QObject::tr("CS1"), QObject::tr("CS2"), QObject::tr("CS3"), QObject::tr("CS4"), QObject::tr("CS5"), QObject::tr("CS6"), QObject::tr("CS7"), QObject::tr("CS8"), QObject::tr("CS9"), QObject::tr("CSA"), static const QString virtualSwitches[] = { QObject::tr("LS1"), QObject::tr("LS2"), QObject::tr("LS3"), QObject::tr("LS4"), QObject::tr("LS5"), QObject::tr("LS6"), QObject::tr("LS7"), QObject::tr("LS8"), QObject::tr("LS9"), QObject::tr("LSA"),
QObject::tr("CSB"), QObject::tr("CSC"), QObject::tr("CSD"), QObject::tr("CSE"), QObject::tr("CSF"), QObject::tr("CSG"), QObject::tr("CSH"), QObject::tr("CSI"), QObject::tr("CSJ"), QObject::tr("CSK"), QObject::tr("LSB"), QObject::tr("LSC"), QObject::tr("LSD"), QObject::tr("LSE"), QObject::tr("LSF"), QObject::tr("LSG"), QObject::tr("LSH"), QObject::tr("LSI"), QObject::tr("LSJ"), QObject::tr("LSK"),
QObject::tr("CSL"), QObject::tr("CSM"), QObject::tr("CSN"), QObject::tr("CSO"), QObject::tr("CSP"), QObject::tr("CSQ"), QObject::tr("CSR"), QObject::tr("CSS"), QObject::tr("CST"), QObject::tr("CSU"), QObject::tr("LSL"), QObject::tr("LSM"), QObject::tr("LSN"), QObject::tr("LSO"), QObject::tr("LSP"), QObject::tr("LSQ"), QObject::tr("LSR"), QObject::tr("LSS"), QObject::tr("LST"), QObject::tr("LSU"),
QObject::tr("CSV"), QObject::tr("CSW") QObject::tr("LSV"), QObject::tr("LSW")
}; };
switch(type) { switch(type) {
@ -407,6 +316,25 @@ QString RawSwitch::toString()
return QObject::tr("----"); return QObject::tr("----");
} }
QString CurveReference::toString()
{
if (value == 0) {
return "----";
}
else {
switch(type) {
case CURVE_REF_DIFF:
return QObject::tr("Diff(%1)").arg(getGVarString(value));
case CURVE_REF_EXPO:
return QObject::tr("Expo(%1)").arg(getGVarString(value));
case CURVE_REF_FUNC:
return QObject::tr("Function(%1)").arg(QString("x>0" "x<0" "|x|" "f>0" "f<0" "|f|").mid(3*(value-1), 3));
default:
return QString(value > 0 ? QObject::tr("Curve(%1)") : QObject::tr("!Curve(%1)")).arg(abs(value));
}
}
}
GeneralSettings::GeneralSettings() GeneralSettings::GeneralSettings()
{ {
memset(this, 0, sizeof(GeneralSettings)); memset(this, 0, sizeof(GeneralSettings));
@ -417,7 +345,7 @@ GeneralSettings::GeneralSettings()
calibSpanNeg[i] = 0x180; calibSpanNeg[i] = 0x180;
calibSpanPos[i] = 0x180; calibSpanPos[i] = 0x180;
} }
QSettings settings("companion9x", "companion9x"); QSettings settings;
templateSetup = settings.value("default_channel_order", 0).toInt(); templateSetup = settings.value("default_channel_order", 0).toInt();
stickMode = settings.value("default_mode", 1).toInt(); stickMode = settings.value("default_mode", 1).toInt();
int profile_id = settings.value("ActiveProfile", 0).toInt(); int profile_id = settings.value("ActiveProfile", 0).toInt();
@ -534,6 +462,18 @@ ModelData::ModelData()
clear(); clear();
} }
void ModelData::clearInputs()
{
for (int i=0; i<C9X_MAX_EXPOS; i++)
expoData[i].clear();
}
void ModelData::clearMixes()
{
for (int i=0; i<C9X_MAX_MIXERS; i++)
mixData[i].clear();
}
void ModelData::clear() void ModelData::clear()
{ {
memset(this, 0, sizeof(ModelData)); memset(this, 0, sizeof(ModelData));
@ -553,10 +493,8 @@ void ModelData::clear()
} }
for (int i=0; i<C9X_MAX_PHASES; i++) for (int i=0; i<C9X_MAX_PHASES; i++)
phaseData[i].clear(); phaseData[i].clear();
for (int i=0; i<C9X_MAX_EXPOS; i++) clearInputs();
expoData[i].clear(); clearMixes();
for (int i=0; i<C9X_MAX_MIXERS; i++)
mixData[i].clear();
for(int i=0; i<4; i++){ for(int i=0; i<4; i++){
mixData[i].destCh = i+1; mixData[i].destCh = i+1;
mixData[i].srcRaw = RawSource(SOURCE_TYPE_STICK, i); mixData[i].srcRaw = RawSource(SOURCE_TYPE_STICK, i);
@ -568,12 +506,8 @@ void ModelData::clear()
expoData[i].clear(); expoData[i].clear();
for (int i=0; i<C9X_NUM_CSW; i++) for (int i=0; i<C9X_NUM_CSW; i++)
customSw[i].clear(); customSw[i].clear();
bool custom = GetEepromInterface()->getCapability(CustomCurves);
for (int i=0; i<C9X_MAX_CURVES; i++) { for (int i=0; i<C9X_MAX_CURVES; i++) {
if (!custom && i>=8) curves[i].clear(5);
curves[i].clear(9);
else
curves[i].clear(5);
} }
swashRingData.clear(); swashRingData.clear();
@ -617,13 +551,13 @@ ModelData ModelData::removeGlobalVars()
for (int i=0; i<C9X_MAX_MIXERS; i++) { for (int i=0; i<C9X_MAX_MIXERS; i++) {
removeGlobalVar(mixData[i].weight); removeGlobalVar(mixData[i].weight);
removeGlobalVar(mixData[i].differential); removeGlobalVar(mixData[i].curve.value);
removeGlobalVar(mixData[i].sOffset); removeGlobalVar(mixData[i].sOffset);
} }
for (int i=0; i<C9X_MAX_EXPOS; i++) { for (int i=0; i<C9X_MAX_EXPOS; i++) {
removeGlobalVar(expoData[i].weight); removeGlobalVar(expoData[i].weight);
removeGlobalVar(expoData[i].expo); removeGlobalVar(expoData[i].curve.value);
} }
return result; return result;
@ -632,7 +566,7 @@ ModelData ModelData::removeGlobalVars()
QList<EEPROMInterface *> eepromInterfaces; QList<EEPROMInterface *> eepromInterfaces;
void RegisterEepromInterfaces() void RegisterEepromInterfaces()
{ {
QSettings settings("companion9x", "companion9x"); QSettings settings;
int rev4a = settings.value("rev4asupport",0).toInt(); int rev4a = settings.value("rev4asupport",0).toInt();
eepromInterfaces.push_back(new Open9xInterface(BOARD_STOCK)); eepromInterfaces.push_back(new Open9xInterface(BOARD_STOCK));
eepromInterfaces.push_back(new Open9xInterface(BOARD_M128)); eepromInterfaces.push_back(new Open9xInterface(BOARD_M128));
@ -670,7 +604,7 @@ void RegisterFirmwares()
#ifndef __APPLE__ #ifndef __APPLE__
firmwares.push_back(new FirmwareInfo("ersky9x", QObject::tr("ersky9x"), new Ersky9xInterface(), "http://ersky9x.googlecode.com/svn/trunk/ersky9x_rom.bin", ERSKY9X_STAMP)); firmwares.push_back(new FirmwareInfo("ersky9x", QObject::tr("ersky9x"), new Ersky9xInterface(), "http://ersky9x.googlecode.com/svn/trunk/ersky9x_rom.bin", ERSKY9X_STAMP));
#endif #endif
default_firmware_variant = GetFirmwareVariant("opentx-stock-heli-templates-en"); default_firmware_variant = GetFirmwareVariant("opentx-9x-heli-templates-en");
RegisterEepromInterfaces(); RegisterEepromInterfaces();
} }

View file

@ -44,14 +44,18 @@ template<class t> t LIMIT(t mi, t x, t ma) { return std::min(std::max(mi, x), ma
enum BoardEnum { enum BoardEnum {
BOARD_STOCK, BOARD_STOCK,
BOARD_M128, BOARD_M128,
BOARD_MEGA2560,
BOARD_GRUVIN9X, BOARD_GRUVIN9X,
BOARD_SKY9X, BOARD_SKY9X,
BOARD_TARANIS, BOARD_TARANIS,
BOARD_TARANIS_REV4a BOARD_TARANIS_REV4a
}; };
#define IS_STOCK(board) (board==BOARD_STOCK || board==BOARD_M128)
#define IS_ARM(board) (board==BOARD_SKY9X || board==BOARD_TARANIS || board==BOARD_TARANIS_REV4a) #define IS_9X(board) (board==BOARD_STOCK || board==BOARD_M128)
#define IS_TARANIS(board) (board==BOARD_TARANIS || board==BOARD_TARANIS_REV4a) #define IS_STOCK(board) (board==BOARD_STOCK)
#define IS_2560(board) (board==BOARD_GRUVIN9X || board==BOARD_MEGA2560)
#define IS_ARM(board) (board==BOARD_SKY9X || board==BOARD_TARANIS || board==BOARD_TARANIS_REV4a)
#define IS_TARANIS(board) (board==BOARD_TARANIS || board==BOARD_TARANIS_REV4a)
const uint8_t modn12x3[4][4]= { const uint8_t modn12x3[4][4]= {
{1, 2, 3, 4}, {1, 2, 3, 4},
@ -59,13 +63,15 @@ const uint8_t modn12x3[4][4]= {
{4, 2, 3, 1}, {4, 2, 3, 1},
{4, 3, 2, 1} }; {4, 3, 2, 1} };
#define C9XMAX_MODELS 60 #define C9X_MAX_MODELS 60
#define C9X_MAX_PHASES 9 #define C9X_MAX_PHASES 9
#define C9X_MAX_MIXERS 64 #define C9X_MAX_MIXERS 64
#define C9X_MAX_EXPOS 32 #define C9X_MAX_INPUTS 32
#define C9X_MAX_CURVES 16 #define C9X_MAX_EXPOS 64
#define MAX_POINTS 17 #define C9X_MAX_CURVES 32
#define C9X_MAX_GVARS 9 #define C9X_MAX_POINTS 17
#define C9X_MAX_GVARS 9
#define C9X_MAX_ENCODERS 2
#define NUM_SAFETY_CHNOUT 16 #define NUM_SAFETY_CHNOUT 16
#define C9X_NUM_CHNOUT 32 // number of real output channels #define C9X_NUM_CHNOUT 32 // number of real output channels
#define C9X_NUM_CSW 32 // number of custom switches #define C9X_NUM_CSW 32 // number of custom switches
@ -107,6 +113,18 @@ const uint8_t chout_ar[] = { //First number is 0..23 -> template setup, Second
3,1,2,4 , 3,1,4,2 , 3,2,1,4 , 3,2,4,1 , 3,4,1,2 , 3,4,2,1, 3,1,2,4 , 3,1,4,2 , 3,2,1,4 , 3,2,4,1 , 3,4,1,2 , 3,4,2,1,
4,1,2,3 , 4,1,3,2 , 4,2,1,3 , 4,2,3,1 , 4,3,1,2 , 4,3,2,1 }; // TODO delete it? 4,1,2,3 , 4,1,3,2 , 4,2,1,3 , 4,2,3,1 , 4,3,1,2 , 4,3,2,1 }; // TODO delete it?
// Beep center bits
#define BC_BIT_RUD (0x01)
#define BC_BIT_ELE (0x02)
#define BC_BIT_THR (0x04)
#define BC_BIT_AIL (0x08)
#define BC_BIT_P1 (0x10)
#define BC_BIT_P2 (0x20)
#define BC_BIT_P3 (0x40)
#define BC_BIT_P4 (0x80)
#define BC_BIT_REA (0x80)
#define BC_BIT_REB (0x100)
// TODO remove this enum! // TODO remove this enum!
enum EnumKeys { enum EnumKeys {
KEY_MENU, KEY_MENU,
@ -185,10 +203,13 @@ enum HeliSwashTypes {
#define NUM_CAL_PPM 4 #define NUM_CAL_PPM 4
#define NUM_PPM 8 #define NUM_PPM 8
#define NUM_CYC 3 #define NUM_CYC 3
#define C9X_NUM_SWITCHES 10 #define C9X_NUM_SWITCHES 10
#define C9X_NUM_KEYS 6 #define C9X_NUM_KEYS 6
#define C9X_MAX_TIMERS 2 #define C9X_MAX_TIMERS 2
extern const char * switches9X[];
extern const char * switchesX9D[];
enum TelemetrySource { enum TelemetrySource {
TELEMETRY_SOURCE_TX_BATT, TELEMETRY_SOURCE_TX_BATT,
TELEMETRY_SOURCE_TIMER1, TELEMETRY_SOURCE_TIMER1,
@ -241,6 +262,8 @@ enum TelemetrySource {
enum RawSourceType { enum RawSourceType {
SOURCE_TYPE_NONE, SOURCE_TYPE_NONE,
SOURCE_TYPE_VIRTUAL_INPUT,
SOURCE_TYPE_LUA_INPUT,
SOURCE_TYPE_STICK, // and POTS SOURCE_TYPE_STICK, // and POTS
SOURCE_TYPE_ROTARY_ENCODER, SOURCE_TYPE_ROTARY_ENCODER,
SOURCE_TYPE_TRIM, SOURCE_TYPE_TRIM,
@ -254,25 +277,56 @@ enum RawSourceType {
SOURCE_TYPE_TELEMETRY, SOURCE_TYPE_TELEMETRY,
MAX_SOURCE_TYPE MAX_SOURCE_TYPE
}; };
class ModelData; class ModelData;
QString AnalogString(int index);
QString RotaryEncoderString(int index);
class RawSourceRange
{
public:
RawSourceRange():
decimals(0),
min(0.0),
max(0.0),
step(1.0),
offset(0.0)
{
}
float getValue(int value) {
return min + float(value) * step;
}
int decimals;
double min;
double max;
double step;
double offset;
};
class RawSource { class RawSource {
public: public:
RawSource(): RawSource():
type(SOURCE_TYPE_NONE), type(SOURCE_TYPE_NONE),
index(0) index(0),
model(NULL)
{ {
} }
RawSource(int value): RawSource(int value, const ModelData * model=NULL):
type(RawSourceType(abs(value)/65536)), type(RawSourceType(abs(value)/65536)),
index(value >= 0 ? abs(value)%65536 : -(abs(value)%65536)) index(value >= 0 ? abs(value)%65536 : -(abs(value)%65536)),
model(model)
{ {
} }
RawSource(RawSourceType type, int index=0): RawSource(RawSourceType type, int index=0, const ModelData * model=NULL):
type(type), type(type),
index(index) index(index),
model(model)
{ {
} }
@ -283,19 +337,19 @@ class RawSource {
QString toString(); QString toString();
int getDecimals(const ModelData & Model); RawSourceRange getRange(bool singleprec=false);
double getMin(const ModelData & Model);
double getMax(const ModelData & Model);
double getStep(const ModelData & Model);
double getOffset(const ModelData & Model);
int getRawOffset(const ModelData & Model);
bool operator== ( const RawSource& other) { bool operator == ( const RawSource & other) {
return (this->type == other.type) && (this->index == other.index); return (this->type == other.type) && (this->index == other.index);
} }
bool operator != ( const RawSource & other) {
return (this->type != other.type) || (this->index != other.index);
}
RawSourceType type; RawSourceType type;
int index; int index;
const ModelData * model;
}; };
enum RawSwitchType { enum RawSwitchType {
@ -404,7 +458,6 @@ class GeneralSettings {
int timezone; int timezone;
bool optrexDisplay; bool optrexDisplay;
unsigned int inactivityTimer; unsigned int inactivityTimer;
bool throttleReversed;
bool minuteBeep; bool minuteBeep;
bool preBeep; bool preBeep;
bool flashBeep; bool flashBeep;
@ -449,19 +502,47 @@ class GeneralSettings {
int backgroundVolume; int backgroundVolume;
unsigned int mavbaud; unsigned int mavbaud;
unsigned int switchUnlockStates; unsigned int switchUnlockStates;
unsigned int hw_uartMode;
};
class CurveReference {
public:
enum CurveRefType {
CURVE_REF_DIFF,
CURVE_REF_EXPO,
CURVE_REF_FUNC,
CURVE_REF_CUSTOM
};
CurveReference() { clear(); }
CurveReference(CurveRefType type, int value):
type(type),
value(value)
{
}
void clear() { memset(this, 0, sizeof(CurveReference)); }
CurveRefType type;
int value;
QString toString();
}; };
class ExpoData { class ExpoData {
public: public:
ExpoData() { clear(); } ExpoData() { clear(); }
RawSource srcRaw;
unsigned int scale;
unsigned int mode; // 0=end, 1=pos, 2=neg, 3=both unsigned int mode; // 0=end, 1=pos, 2=neg, 3=both
unsigned int chn; unsigned int chn;
RawSwitch swtch; RawSwitch swtch;
unsigned int phases; // -5=!FP4, 0=normal, 5=FP4 unsigned int phases; // -5=!FP4, 0=normal, 5=FP4
int weight; int weight;
int expo; int offset;
unsigned int curveMode; CurveReference curve;
int curveParam; int carryTrim;
char name[10+1]; char name[10+1];
void clear() { memset(this, 0, sizeof(ExpoData)); } void clear() { memset(this, 0, sizeof(ExpoData)); }
}; };
@ -474,11 +555,19 @@ class CurvePoint {
class CurveData { class CurveData {
public: public:
enum CurveType {
CURVE_TYPE_STANDARD,
CURVE_TYPE_CUSTOM,
CURVE_TYPE_LAST = CURVE_TYPE_CUSTOM
};
CurveData() { clear(5); } CurveData() { clear(5); }
bool custom; // 0=end, 1=pos, 2=neg, 3=both
uint8_t count; CurveType type;
CurvePoint points[MAX_POINTS]; bool smooth;
char name[6+1]; int count;
CurvePoint points[C9X_MAX_POINTS];
char name[6+1];
void clear(int count) { memset(this, 0, sizeof(CurveData)); this->count = count; } void clear(int count) { memset(this, 0, sizeof(CurveData)); this->count = count; }
}; };
@ -492,7 +581,8 @@ class LimitData {
int ppmCenter; int ppmCenter;
bool symetrical; bool symetrical;
char name[6+1]; char name[6+1];
void clear() { memset(this, 0, sizeof(LimitData)); min = -100; max = +100; } CurveReference curve;
void clear() { memset(this, 0, sizeof(LimitData)); min = -1000; max = +1000; }
}; };
enum MltpxValue { enum MltpxValue {
@ -501,7 +591,6 @@ enum MltpxValue {
MLTPX_REP=2 MLTPX_REP=2
}; };
class MixData { class MixData {
public: public:
MixData() { clear(); } MixData() { clear(); }
@ -509,9 +598,8 @@ class MixData {
RawSource srcRaw; RawSource srcRaw;
unsigned int srcVariant; unsigned int srcVariant;
int weight; int weight;
int differential;
RawSwitch swtch; RawSwitch swtch;
int curve; //0=symmetrisch CurveReference curve; //0=symmetrisch
unsigned int delayUp; unsigned int delayUp;
unsigned int delayDown; unsigned int delayDown;
unsigned int speedUp; // Servogeschwindigkeit aus Tabelle (10ms Cycle) unsigned int speedUp; // Servogeschwindigkeit aus Tabelle (10ms Cycle)
@ -520,9 +608,7 @@ class MixData {
bool noExpo; bool noExpo;
MltpxValue mltpx; // multiplex method 0=+ 1=* 2=replace MltpxValue mltpx; // multiplex method 0=+ 1=* 2=replace
unsigned int mixWarn; // mixer warning unsigned int mixWarn; // mixer warning
unsigned int enableFmTrim;
unsigned int phases; // -5=!FP4, 0=normal, 5=FP4 unsigned int phases; // -5=!FP4, 0=normal, 5=FP4
unsigned int lateOffset;
int sOffset; int sOffset;
char name[10+1]; char name[10+1];
@ -572,10 +658,7 @@ enum AssignFunc {
FuncBackgroundMusic, FuncBackgroundMusic,
FuncBackgroundMusicPause, FuncBackgroundMusicPause,
FuncAdjustGV1, FuncAdjustGV1,
FuncAdjustGV2, FuncAdjustGVLast = FuncAdjustGV1+C9X_MAX_GVARS-1,
FuncAdjustGV3,
FuncAdjustGV4,
FuncAdjustGV5,
FuncCount FuncCount
}; };
@ -588,7 +671,7 @@ class FuncSwData { // Function Switches data
char paramarm[10]; char paramarm[10];
unsigned int enabled; // TODO perhaps not any more the right name unsigned int enabled; // TODO perhaps not any more the right name
unsigned int adjustMode; unsigned int adjustMode;
unsigned int repeatParam; int repeatParam;
void clear() { memset(this, 0, sizeof(FuncSwData)); } void clear() { memset(this, 0, sizeof(FuncSwData)); }
}; };
@ -602,7 +685,7 @@ class PhaseData {
unsigned int fadeIn; unsigned int fadeIn;
unsigned int fadeOut; unsigned int fadeOut;
int rotaryEncoders[2]; int rotaryEncoders[2];
int gvars[5]; int gvars[C9X_MAX_GVARS];
void clear() { memset(this, 0, sizeof(PhaseData)); for (int i=0; i<NUM_STICKS; i++) trimRef[i] = -1; } void clear() { memset(this, 0, sizeof(PhaseData)); for (int i=0; i<NUM_STICKS; i++) trimRef[i] = -1; }
}; };
@ -654,6 +737,14 @@ class FrSkyChannelData {
unsigned int multiplier; unsigned int multiplier;
FrSkyAlarmData alarms[2]; FrSkyAlarmData alarms[2];
float getRatio()
{
if (type==0 || type==1 || type==2)
return float(ratio << multiplier) / 10.0;
else
return ratio << multiplier;
}
void clear() { memset(this, 0, sizeof(FrSkyChannelData)); } void clear() { memset(this, 0, sizeof(FrSkyChannelData)); }
}; };
@ -700,6 +791,9 @@ class FrSkyData {
int varioCenterMin; // if increment in 0.2m/s = 3.0m/s max int varioCenterMin; // if increment in 0.2m/s = 3.0m/s max
int varioCenterMax; int varioCenterMax;
int varioMax; int varioMax;
bool mAhPersistent;
unsigned int storedMah;
int fasOffset;
void clear() { memset(this, 0, sizeof(FrSkyData)); rssiAlarms[0].clear(2, 45); rssiAlarms[1].clear(3, 42); varioSource = 2/*VARIO*/; } void clear() { memset(this, 0, sizeof(FrSkyData)); rssiAlarms[0].clear(2, 45); rssiAlarms[1].clear(3, 42); varioSource = 2/*VARIO*/; }
}; };
@ -730,14 +824,13 @@ enum TimerMode {
class TimerData { class TimerData {
public: public:
TimerData() { clear(); } TimerData() { clear(); }
TimerMode mode; // timer trigger source -> off, abs, THs, TH%, THt, sw/!sw, !m_sw/!m_sw TimerMode mode; // timer trigger source -> off, abs, THs, TH%, THt, sw/!sw, !m_sw/!m_sw
int8_t modeB; bool minuteBeep;
bool minuteBeep; unsigned int countdownBeep;
bool countdownBeep; bool dir; // 0=>Count Down, 1=>Count Up
bool dir; // 0=>Count Down, 1=>Count Up
unsigned int val; unsigned int val;
bool persistent; bool persistent;
int pvalue; int pvalue;
void clear() { memset(this, 0, sizeof(TimerData)); } void clear() { memset(this, 0, sizeof(TimerData)); }
}; };
@ -783,7 +876,7 @@ class ModelData {
TimerData timers[2]; TimerData timers[2];
bool thrTrim; // Enable Throttle Trim bool thrTrim; // Enable Throttle Trim
bool thrExpo; // Enable Throttle Expo bool thrExpo; // Enable Throttle Expo
unsigned int trimInc; // Trim Increments int trimInc; // Trim Increments
bool disableThrottleWarning; bool disableThrottleWarning;
unsigned int beepANACenter; // 1<<0->A1.. 1<<6->A7 unsigned int beepANACenter; // 1<<0->A1.. 1<<6->A7
@ -794,7 +887,10 @@ class ModelData {
PhaseData phaseData[C9X_MAX_PHASES]; PhaseData phaseData[C9X_MAX_PHASES];
MixData mixData[C9X_MAX_MIXERS]; MixData mixData[C9X_MAX_MIXERS];
LimitData limitData[C9X_NUM_CHNOUT]; LimitData limitData[C9X_NUM_CHNOUT];
char inputNames[C9X_MAX_INPUTS][4+1];
ExpoData expoData[C9X_MAX_EXPOS]; ExpoData expoData[C9X_MAX_EXPOS];
CurveData curves[C9X_MAX_CURVES]; CurveData curves[C9X_MAX_CURVES];
CustomSwData customSw[C9X_NUM_CSW]; CustomSwData customSw[C9X_NUM_CSW];
FuncSwData funcSw[C9X_MAX_CUSTOM_FUNCTIONS]; FuncSwData funcSw[C9X_MAX_CUSTOM_FUNCTIONS];
@ -805,7 +901,9 @@ class ModelData {
int8_t t2throttle; // Start timer2 using throttle int8_t t2throttle; // Start timer2 using throttle
unsigned int modelId; unsigned int modelId;
unsigned int switchWarningStates; unsigned int switchWarningStates;
// TODO structure
char gvars_names[C9X_MAX_GVARS][6+1]; char gvars_names[C9X_MAX_GVARS][6+1];
bool gvars_popups[C9X_MAX_GVARS];
uint8_t gvsource[5]; uint8_t gvsource[5];
uint8_t bt_telemetry; uint8_t bt_telemetry;
uint8_t numVoice; uint8_t numVoice;
@ -828,6 +926,9 @@ class ModelData {
ModelData removeGlobalVars(); ModelData removeGlobalVars();
void clearMixes();
void clearInputs();
protected: protected:
void removeGlobalVar(int & var); void removeGlobalVar(int & var);
}; };
@ -835,29 +936,26 @@ class ModelData {
class RadioData { class RadioData {
public: public:
GeneralSettings generalSettings; GeneralSettings generalSettings;
ModelData models[C9XMAX_MODELS]; ModelData models[C9X_MAX_MODELS];
}; };
// TODO rename FlightPhase to FlightMode
enum Capability { enum Capability {
OwnerName, OwnerName,
FlightPhases, FlightPhases,
FlightPhasesAreNamed, FlightModesName,
FlightPhasesHaveFades, FlightPhasesHaveFades,
SimulatorType, SimulatorType,
Mixes, Mixes,
MixesWithoutExpo, MixesWithoutExpo,
Timers, Timers,
TimerTriggerB,
TimeDivisions, TimeDivisions,
minuteBeep,
countdownBeep,
CustomFunctions, CustomFunctions,
VoicesAsNumbers, VoicesAsNumbers,
VoicesMaxLength, VoicesMaxLength,
ModelVoice, ModelVoice,
MultiLangVoice, MultiLangVoice,
ModelImage, ModelImage,
InstantTrimSW,
Pots, Pots,
Switches, Switches,
SwitchesPositions, SwitchesPositions,
@ -867,20 +965,11 @@ enum Capability {
CustomSwitchesExt, CustomSwitchesExt,
RotaryEncoders, RotaryEncoders,
Outputs, Outputs,
ChannelsName,
ExtraChannels, ExtraChannels,
ExtraInputs, ExtraInputs,
ExtraTrims,
ExtendedTrims, ExtendedTrims,
HasNegCurves,
HasInputFilter, HasInputFilter,
HasExpoCurves,
ExpoIsCurve,
ExpoCurve5,
ExpoCurve9,
CustomCurves,
NumCurves3,
NumCurves5,
NumCurves9,
NumCurves, NumCurves,
NumCurvePoints, NumCurvePoints,
OffsetWeight, OffsetWeight,
@ -900,7 +989,6 @@ enum Capability {
TrainerSwitch, TrainerSwitch,
ModelTrainerEnable, ModelTrainerEnable,
Timer2ThrTrig, Timer2ThrTrig,
HasTTrace,
HasExpoNames, HasExpoNames,
HasMixerNames, HasMixerNames,
HasChNames, HasChNames,
@ -910,14 +998,10 @@ enum Capability {
HasPPMStart, HasPPMStart,
HasGeneralUnits, HasGeneralUnits,
HasFAIMode, HasFAIMode,
NoTimerDirs,
NoThrExpo,
OptrexDisplay, OptrexDisplay,
PPMExtCtrl, PPMExtCtrl,
PPMFrameLength, PPMFrameLength,
MixFmTrim,
gsSwitchMask, gsSwitchMask,
pmSwitchMask,
BLonStickMove, BLonStickMove,
DSM2Indexes, DSM2Indexes,
Telemetry, Telemetry,
@ -929,13 +1013,10 @@ enum Capability {
GvarsAreNamed, GvarsAreNamed,
GvarsFlightPhases, GvarsFlightPhases,
GvarsHaveSources, GvarsHaveSources,
GvarsAsSources, GvarsName,
GvarsAsWeight,
GvarsNum,
GvarsOfsNum,
NoTelemetryProtocol, NoTelemetryProtocol,
TelemetryCSFields, TelemetryCustomScreens,
TelemetryColsCSFields, TelemetryCustomScreensFieldsPerLine,
TelemetryRSSIModel, TelemetryRSSIModel,
TelemetryAlarm, TelemetryAlarm,
TelemetryInternalAlarm, TelemetryInternalAlarm,
@ -949,11 +1030,8 @@ enum Capability {
HasPPMSim, HasPPMSim,
HasCrossTrims, HasCrossTrims,
HasStickScroll, HasStickScroll,
HasFixOffset,
HasSoundMixer, HasSoundMixer,
NumModules, NumModules,
FSSwitch,
DiffMixers,
PPMCenter, PPMCenter,
SYMLimits, SYMLimits,
HasCurrentCalibration, HasCurrentCalibration,
@ -961,8 +1039,6 @@ enum Capability {
HasBrightness, HasBrightness,
HasContrast, HasContrast,
PerModelTimers, PerModelTimers,
PerModelThrottleWarning,
PerModelThrottleInvert,
SlowScale, SlowScale,
SlowRange, SlowRange,
PermTimers, PermTimers,
@ -970,6 +1046,13 @@ enum Capability {
CSFunc, CSFunc,
LCDWidth, LCDWidth,
GetThrSwitch, GetThrSwitch,
VirtualInputs,
LuaInputs,
LimitsPer1000,
EnhancedCurves,
TelemetryInternalAlarms,
HasFasOffset,
HasMahPersistent
}; };
enum UseContext { enum UseContext {

View file

@ -1,334 +0,0 @@
#include "expodialog.h"
#include "ui_expodialog.h"
#include "eeprominterface.h"
#include "helpers.h"
ExpoDialog::ExpoDialog(QWidget *parent, ExpoData *expoData, int stickMode) :
QDialog(parent),
ui(new Ui::ExpoDialog),
ed(expoData)
{
ui->setupUi(this);
QLabel * lb_fp[] = {ui->lb_FP0,ui->lb_FP1,ui->lb_FP2,ui->lb_FP3,ui->lb_FP4,ui->lb_FP5,ui->lb_FP6,ui->lb_FP7,ui->lb_FP8 };
QCheckBox * cb_fp[] = {ui->cb_FP0,ui->cb_FP1,ui->cb_FP2,ui->cb_FP3,ui->cb_FP4,ui->cb_FP5,ui->cb_FP6,ui->cb_FP7,ui->cb_FP8 };
setWindowTitle(tr("DEST -> %1").arg(getStickStr(ed->chn)));
QRegExp rx(CHAR_FOR_NAMES_REGEX);
if (GetEepromInterface()->getCapability(GvarsAsWeight)) {
int gvars=0;
if (GetEepromInterface()->getCapability(HasVariants)) {
if ((GetCurrentFirmwareVariant() & GVARS_VARIANT)) {
gvars=1;
}
} else {
gvars=1;
}
if (gvars==0) {
ui->expoGV->setDisabled(true);
ui->weightGV->setDisabled(true);
ui->expoCurveGV->setDisabled(true);
if (ed->expo>100) {
ed->expo=0;
}
if (ed->weight>100 || ed->weight<-100) {
ed->weight=100;
}
if (ed->curveParam>100 || ed->curveParam<-100) {
ed->curveParam=0;
}
}
populateGVCB(ui->expoCB,ed->expo);
populateGVCB(ui->weightCB,ed->weight);
populateGVCB(ui->expoCurveCB,ed->curveParam);
ui->weightSB->setMinimum(0);
ui->weightSB->setMaximum(100);
if (ed->weight>100 || ed->weight<0) {
ui->weightGV->setChecked(true);
ui->weightSB->hide();
ui->weightCB->show();
} else {
ui->weightGV->setChecked(false);
ui->weightSB->setValue(ed->weight);
ui->weightSB->show();
ui->weightCB->hide();
}
ui->expoSB->setMinimum(-100);
ui->expoSB->setMaximum(100);
if (ed->expo>100 || ed->expo<-100) {
ui->expoGV->setChecked(true);
ui->expoSB->hide();
ui->expoCB->show();
} else {
ui->expoGV->setChecked(false);
ui->expoSB->setValue(ed->expo);
ui->expoSB->show();
ui->expoCB->hide();
}
ui->expoCurveSB->setMinimum(-100);
ui->expoCurveSB->setMaximum(100);
if (ed->curveParam>100 || ed->curveParam<-100) {
ui->expoCurveGV->setChecked(true);
ui->expoCurveSB->hide();
ui->expoCurveCB->show();
} else {
ui->expoCurveGV->setChecked(false);
ui->expoCurveSB->setValue(ed->curveParam);
ui->expoCurveSB->show();
ui->expoCurveCB->hide();
}
} else {
ui->expoGV->hide();
ui->weightGV->hide();
ui->expoCurveGV->hide();
ui->expoSB->setMinimum(-100);
ui->expoSB->setMaximum(100);
ui->expoSB->setValue(ed->expo);
ui->expoCurveSB->setMinimum(-100);
ui->expoCurveSB->setMaximum(100);
ui->expoCurveSB->setValue(ed->curveParam);
ui->weightSB->setMinimum(0);
ui->weightSB->setMaximum(100);
ui->weightSB->setValue(ed->weight);
}
populateSwitchCB(ui->switchesCB,ed->swtch);
if (ed->curveMode==0) {
populateExpoCurvesCB(ui->curvesCB,0); // TODO capacity for er9x
} else {
populateExpoCurvesCB(ui->curvesCB,ed->curveParam); // TODO capacity for er9x
}
ui->modeCB->setCurrentIndex(ed->mode-1);
if (!GetEepromInterface()->getCapability(HasExpoCurves)) {
ui->label_curves->hide();
ui->curvesCB->hide();
ed->curveMode=1;
}
if (!GetEepromInterface()->getCapability(ExpoIsCurve)) {
ui->expoCurveCB->hide();
ui->expoCurveSB->hide();
ui->expoCurveGV->hide();
ui->label_curves->setText(tr("Curve"));
} else {
ui->label_expo->hide();
ui->expoCB->hide();
ui->expoGV->hide();
ui->expoSB->hide();
}
if (!GetEepromInterface()->getCapability(FlightPhases)) {
ui->label_phases->hide();
for (int i=0; i<9; i++) {
lb_fp[i]->hide();
cb_fp[i]->hide();
}
} else {
int mask=1;
for (int i=0; i<9 ; i++) {
if ((ed->phases & mask)==0) {
cb_fp[i]->setChecked(true);
}
mask <<= 1;
}
for (int i=GetEepromInterface()->getCapability(FlightPhases); i<9;i++) {
lb_fp[i]->hide();
cb_fp[i]->hide();
}
}
int expolength=GetEepromInterface()->getCapability(HasExpoNames);
if (!expolength) {
ui->label_name->hide();
ui->expoName->hide();
} else {
ui->expoName->setMaxLength(expolength);
}
ui->expoName->setValidator(new QRegExpValidator(rx, this));
ui->expoName->setText(ed->name);
valuesChanged();
connect(ui->expoName,SIGNAL(editingFinished()),this,SLOT(valuesChanged()));
connect(ui->expoCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged()));
connect(ui->expoSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged()));
connect(ui->expoCurveCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged()));
connect(ui->expoCurveSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged()));
connect(ui->weightCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged()));
connect(ui->weightSB,SIGNAL(editingFinished()),this,SLOT(valuesChanged()));
connect(ui->switchesCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged()));
connect(ui->curvesCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged()));
connect(ui->modeCB,SIGNAL(currentIndexChanged(int)),this,SLOT(valuesChanged()));
connect(ui->expoGV,SIGNAL(stateChanged(int)),this,SLOT(widgetChanged()));
connect(ui->expoCurveGV,SIGNAL(stateChanged(int)),this,SLOT(widgetChanged()));
connect(ui->weightGV,SIGNAL(stateChanged(int)),this,SLOT(widgetChanged()));
for (int i=0; i<9; i++) {
connect(cb_fp[i],SIGNAL(toggled(bool)),this,SLOT(valuesChanged()));
}
QTimer::singleShot(0, this, SLOT(shrink()));
}
ExpoDialog::~ExpoDialog()
{
delete ui;
}
void ExpoDialog::changeEvent(QEvent *e)
{
QDialog::changeEvent(e);
switch (e->type()) {
case QEvent::LanguageChange:
ui->retranslateUi(this);
break;
default:
break;
}
}
void ExpoDialog::widgetChanged()
{
if (GetEepromInterface()->getCapability(GvarsAsWeight)) {
int gvars=0;
if (GetEepromInterface()->getCapability(HasVariants)) {
if ((GetCurrentFirmwareVariant() & GVARS_VARIANT)) {
gvars=1;
}
} else {
gvars=1;
}
if (gvars==1) {
if (!GetEepromInterface()->getCapability(ExpoIsCurve)) {
if (ui->expoGV->isChecked()) {
ui->expoCB->show();
ui->expoSB->hide();
} else {
ui->expoCB->hide();
ui->expoSB->show();
}
} else {
if (ui->expoCurveGV->isChecked()) {
ui->expoCurveCB->show();
ui->expoCurveSB->hide();
} else {
ui->expoCurveCB->hide();
ui->expoCurveSB->show();
}
}
if (ui->weightGV->isChecked()) {
ui->weightCB->show();
ui->weightSB->hide();
} else {
ui->weightCB->hide();
ui->weightSB->show();
}
}
valuesChanged();
QTimer::singleShot(0, this, SLOT(shrink()));
}
}
void ExpoDialog::valuesChanged()
{
QCheckBox * cb_fp[] = {ui->cb_FP0,ui->cb_FP1,ui->cb_FP2,ui->cb_FP3,ui->cb_FP4,ui->cb_FP5,ui->cb_FP6,ui->cb_FP7,ui->cb_FP8 };
if (ui->curvesCB->currentIndex()==0) {
if (GetEepromInterface()->getCapability(ExpoIsCurve)) {
ed->curveMode = 0;
ui->expoCurveGV->show();
if (ui->expoCurveGV->isChecked()) {
ui->expoCurveCB->show();
ui->expoCurveSB->hide();
ed->curveParam = ui->expoCurveCB->itemData(ui->expoCurveCB->currentIndex()).toInt();
} else {
ui->expoCurveCB->hide();
ui->expoCurveSB->show();
ed->curveParam = ui->expoCurveSB->value();
}
ed->expo = ed->curveParam;
} else {
ui->expoCurveCB->hide();
ui->expoCurveSB->hide();
ui->expoCurveGV->hide();
ed->curveMode = 0;
if (ui->expoGV->isChecked()) {
ed->expo = ui->expoCB->itemData(ui->expoCB->currentIndex()).toInt();
} else {
ed->expo = ui->expoSB->value();
}
ed->curveParam = ed->expo;
}
} else {
if (!GetEepromInterface()->getCapability(ExpoIsCurve)) {
ed->curveMode = 1;
ed->curveParam = ui->curvesCB->currentIndex();
if (ui->expoGV->isChecked()) {
ed->expo = ui->expoCB->itemData(ui->expoCB->currentIndex()).toInt();
} else {
ed->expo = ui->expoSB->value();
}
} else {
ed->curveMode = 1;
ed->curveParam = ui->curvesCB->currentIndex();
ed->expo = 0;
}
ui->expoCurveCB->hide();
ui->expoCurveSB->hide();
ui->expoCurveGV->hide();
}
if (ui->weightGV->isChecked()) {
ed->weight = ui->weightCB->itemData(ui->weightCB->currentIndex()).toInt();
} else {
ed->weight = ui->weightSB->value();
}
ed->swtch = RawSwitch(ui->switchesCB->itemData(ui->switchesCB->currentIndex()).toInt());
ed->mode = ui->modeCB->currentIndex() + 1;
int i=0;
for (i=0; i<ui->expoName->text().toAscii().length(); i++) {
ed->name[i]=ui->expoName->text().toAscii().at(i);
}
ed->name[i]=0;
ed->phases=0;
for (int i=8; i>=0 ; i--) {
if (!cb_fp[i]->checkState()) {
ed->phases+=1;
}
ed->phases<<=1;
}
ed->phases>>=1;
if (GetEepromInterface()->getCapability(FlightPhases)) {
int zeros=0;
int ones=0;
int phtemp=ed->phases;
for (int i=0; i<GetEepromInterface()->getCapability(FlightPhases); i++) {
if (phtemp & 1) {
ones++;
}
else {
zeros++;
}
phtemp >>=1;
}
if (zeros==1) {
phtemp=ed->phases;
for (int i=0; i<GetEepromInterface()->getCapability(FlightPhases); i++) {
if ((phtemp & 1)==0) {
break;
}
phtemp >>=1;
}
}
else if (ones==1) {
phtemp=ed->phases;
for (int i=0; i<GetEepromInterface()->getCapability(FlightPhases); i++) {
if (phtemp & 1) {
break;
}
phtemp >>=1;
}
}
} else {
ed->phases=0;
}
}
void ExpoDialog::shrink()
{
resize(0,0);
}

View file

@ -1,30 +0,0 @@
#ifndef EXPODIALOG_H
#define EXPODIALOG_H
#include <QDialog>
#include "eeprominterface.h"
namespace Ui {
class ExpoDialog;
}
class ExpoDialog : public QDialog {
Q_OBJECT
public:
ExpoDialog(QWidget *parent, ExpoData *mixdata, int stickMode);
~ExpoDialog();
protected:
void changeEvent(QEvent *e);
private slots:
void valuesChanged();
void widgetChanged();
void shrink();
private:
Ui::ExpoDialog *ui;
ExpoData *ed;
};
#endif // EXPODIALOG_H

View file

@ -323,7 +323,10 @@ unsigned int EFile::readRlc12(uint8_t *buf, unsigned int i_len, bool rlc2)
if (read(&m_bRlc, 1) !=1) break; //read how many bytes to read if (read(&m_bRlc, 1) !=1) break; //read how many bytes to read
assert(m_bRlc & 0x7f); if (!(m_bRlc & 0x7f)) {
qDebug() << "RLC decoding error!";
return 0;
}
if (rlc2) { if (rlc2) {
if(m_bRlc&0x80){ // if contains high byte if(m_bRlc&0x80){ // if contains high byte

View file

@ -3,26 +3,6 @@
#include "helpers.h" #include "helpers.h"
#include <QObject> #include <QObject>
int8_t er9xFromSwitch(const RawSwitch & sw)
{
switch (sw.type) {
case SWITCH_TYPE_SWITCH:
return sw.index;
case SWITCH_TYPE_VIRTUAL:
return sw.index > 0 ? (9 + sw.index) : (-9 + sw.index);
case SWITCH_TYPE_ON:
return 22;
case SWITCH_TYPE_OFF:
return -22;
case SWITCH_TYPE_MOMENT_SWITCH:
return sw.index > 0 ? (22 + sw.index) : (-22 + sw.index);
case SWITCH_TYPE_MOMENT_VIRTUAL:
return sw.index > 0 ? (31 + sw.index) : (-31 + sw.index);
default:
return 0;
}
}
RawSwitch er9xToSwitch(int8_t sw) RawSwitch er9xToSwitch(int8_t sw)
{ {
uint8_t swa = abs(sw); uint8_t swa = abs(sw);
@ -47,15 +27,6 @@ t_Er9xTrainerMix::t_Er9xTrainerMix()
memset(this, 0, sizeof(t_Er9xTrainerMix)); memset(this, 0, sizeof(t_Er9xTrainerMix));
} }
t_Er9xTrainerMix::t_Er9xTrainerMix(TrainerMix &c9x)
{
memset(this, 0, sizeof(t_Er9xTrainerMix));
srcChn = c9x.src;
swtch = er9xFromSwitch(c9x.swtch);
studWeight = (8 * c9x.weight) / 25;
mode = c9x.mode;
}
t_Er9xTrainerMix::operator TrainerMix() t_Er9xTrainerMix::operator TrainerMix()
{ {
TrainerMix c9x; TrainerMix c9x;
@ -71,15 +42,6 @@ t_Er9xTrainerData::t_Er9xTrainerData()
memset(this, 0, sizeof(t_Er9xTrainerData)); memset(this, 0, sizeof(t_Er9xTrainerData));
} }
t_Er9xTrainerData::t_Er9xTrainerData(TrainerData &c9x)
{
memset(this, 0, sizeof(t_Er9xTrainerData));
for (int i=0; i<NUM_STICKS; i++) {
calib[i] = c9x.calib[i];
mix[i] = c9x.mix[i];
}
}
t_Er9xTrainerData::operator TrainerData () t_Er9xTrainerData::operator TrainerData ()
{ {
TrainerData c9x; TrainerData c9x;
@ -95,76 +57,6 @@ t_Er9xGeneral::t_Er9xGeneral()
memset(this, 0, sizeof(t_Er9xGeneral)); memset(this, 0, sizeof(t_Er9xGeneral));
} }
t_Er9xGeneral::t_Er9xGeneral(GeneralSettings &c9x)
{
memset(this, 0, sizeof(t_Er9xGeneral));
myVers = MDVERS;
for (int i=0; i<NUM_STICKSnPOTS; i++) {
calibMid[i] = c9x.calibMid[i];
calibSpanNeg[i] = c9x.calibSpanNeg[i];
calibSpanPos[i] = c9x.calibSpanPos[i];
}
uint16_t sum = 0;
for (int i=0; i<12; i++)
sum += calibMid[i];
chkSum = sum;
currModel = c9x.currModel;
contrast = c9x.contrast;
vBatWarn = c9x.vBatWarn;
vBatCalib = c9x.vBatCalib;
trainer = c9x.trainer;
view = c9x.view;
disableThrottleWarning = c9x.disableThrottleWarning;
disableSwitchWarning = (c9x.switchWarning != -1);
disableMemoryWarning = c9x.disableMemoryWarning;
if (c9x.beeperMode == e_quiet)
beeperVal = 0;
else if (c9x.beeperMode < e_all)
beeperVal = 1;
else
beeperVal = c9x.beeperLength + 4;
disableAlarmWarning = c9x.disableAlarmWarning;
stickMode = c9x.stickMode;
inactivityTimer = c9x.inactivityTimer - 10;
throttleReversed = c9x.throttleReversed;
minuteBeep = c9x.minuteBeep;
preBeep = c9x.preBeep;
flashBeep = c9x.flashBeep;
disableSplashScreen = c9x.splashMode;
disablePotScroll=(c9x.disablePotScroll ? 1 : 0);
disableBG=(c9x.disableBG ? 1 :0);
frskyinternalalarm = c9x.frskyinternalalarm;
blightinv=(c9x.blightinv ? 1 : 0);
stickScroll=(c9x.stickScroll ? 1 : 0);
if (c9x.backlightMode == 4)
lightSw = 22;
if (c9x.backlightMode & 1)
lightAutoOff = c9x.backlightDelay;
if (c9x.backlightMode & 2)
lightOnStickMove = c9x.backlightDelay;
templateSetup = c9x.templateSetup;
PPM_Multiplier = c9x.PPM_Multiplier;
setEEPROMString(ownerName, c9x.ownerName, sizeof(ownerName));
speakerPitch = c9x.speakerPitch;
hapticStrength = c9x.hapticStrength;
hideNameOnSplash = (c9x.hideNameOnSplash ? 1 : 0);
enablePpmsim = (c9x.enablePpmsim ? 1 : 0);;
speakerMode = c9x.speakerMode;
switchWarningStates =c9x.switchWarningStates;
crosstrim=(c9x.crosstrim ? 1 : 0);
}
Er9xGeneral::operator GeneralSettings () Er9xGeneral::operator GeneralSettings ()
{ {
GeneralSettings result; GeneralSettings result;
@ -207,7 +99,6 @@ Er9xGeneral::operator GeneralSettings ()
result.disableAlarmWarning = disableAlarmWarning; result.disableAlarmWarning = disableAlarmWarning;
result.stickMode = std::max((uint8_t)0, std::min(stickMode, (uint8_t)3)); result.stickMode = std::max((uint8_t)0, std::min(stickMode, (uint8_t)3));
result.inactivityTimer = inactivityTimer + 10; result.inactivityTimer = inactivityTimer + 10;
result.throttleReversed = throttleReversed;
result.minuteBeep = minuteBeep; result.minuteBeep = minuteBeep;
result.preBeep = preBeep; result.preBeep = preBeep;
result.flashBeep = flashBeep; result.flashBeep = flashBeep;
@ -244,15 +135,6 @@ t_Er9xLimitData::t_Er9xLimitData()
memset(this, 0, sizeof(t_Er9xLimitData)); memset(this, 0, sizeof(t_Er9xLimitData));
} }
t_Er9xLimitData::t_Er9xLimitData(LimitData &c9x)
{
memset(this, 0, sizeof(t_Er9xLimitData));
min = c9x.min+100;
max = c9x.max-100;
revert = c9x.revert;
offset = c9x.offset;
}
t_Er9xLimitData::operator LimitData () t_Er9xLimitData::operator LimitData ()
{ {
LimitData c9x; LimitData c9x;
@ -268,107 +150,6 @@ t_Er9xMixData::t_Er9xMixData()
memset(this, 0, sizeof(t_Er9xMixData)); memset(this, 0, sizeof(t_Er9xMixData));
} }
t_Er9xMixData::t_Er9xMixData(MixData &c9x)
{
memset(this, 0, sizeof(t_Er9xMixData));
destCh = c9x.destCh;
swtch = er9xFromSwitch(c9x.swtch);
if (c9x.srcRaw.type == SOURCE_TYPE_NONE) {
srcRaw = 0;
swtch = 0;
}
else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) {
srcRaw = 1 + c9x.srcRaw.index;
}
else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) {
EEPROMWarnings += ::QObject::tr("er9x doesn't have Rotary Encoders") + "\n";
srcRaw = 5 + c9x.srcRaw.index; // use pots instead
}
else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) {
srcRaw = 8; // MAX
}
else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) {
srcRaw = 9; // FULL
swtch = er9xFromSwitch(RawSwitch(c9x.srcRaw.index));
}
else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) {
srcRaw = 10 + c9x.srcRaw.index;
}
else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) {
srcRaw = 13 + c9x.srcRaw.index;
}
else if (c9x.srcRaw.type == SOURCE_TYPE_CH) {
srcRaw = 21 + c9x.srcRaw.index;
}
else if (c9x.srcRaw.type == SOURCE_TYPE_GVAR) {
srcRaw = 38 + c9x.srcRaw.index;
}
else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) {
EEPROMWarnings += ::QObject::tr("er9x doesn't have trims as source") + "\n";
srcRaw = 0; // use pots instead
}
if (abs(c9x.weight)>125) {
if (c9x.weight>0) {
int index=abs(c9x.weight)-10000;
int gvar=125+index;
if (gvar>127) {
gvar-=256;
}
weight = gvar;
} else {
EEPROMWarnings += ::QObject::tr("er9x doesn't have negative gvars as weight") + "\n";
weight=0;
}
} else {
weight = c9x.weight;
}
if (abs(c9x.sOffset)>125) {
if (c9x.sOffset>0) {
int index=abs(c9x.sOffset)-10000;
int gvar=125+index;
if (gvar>127) {
gvar-=256;
}
sOffset = gvar;
} else {
EEPROMWarnings += ::QObject::tr("er9x doesn't have negative gvars as offset") + "\n";
sOffset=0;
}
} else {
sOffset = c9x.sOffset;
}
if (c9x.curve!=0) {
curve = c9x.curve;
differential=0;
} else {
if (c9x.differential!=0) {
curve=c9x.differential;
differential=1;
} else {
curve=0;
differential=0;
}
}
lateOffset=c9x.lateOffset;
delayUp = c9x.delayUp;
delayDown = c9x.delayDown;
speedUp = c9x.speedUp;
speedDown = c9x.speedDown;
if (c9x.carryTrim<0) {
EEPROMWarnings += ::QObject::tr("er9x doesn't have swappable trims") + "\n";
carryTrim=1;
} else {
carryTrim = c9x.carryTrim;
}
mltpx = (MltpxValue)c9x.mltpx;
mixWarn = c9x.mixWarn;
enableFmTrim=c9x.enableFmTrim;
}
t_Er9xMixData::operator MixData () t_Er9xMixData::operator MixData ()
{ {
MixData c9x; MixData c9x;
@ -434,14 +215,21 @@ t_Er9xMixData::operator MixData ()
else { else {
c9x.srcRaw = RawSource(SOURCE_TYPE_GVAR, srcRaw-38); c9x.srcRaw = RawSource(SOURCE_TYPE_GVAR, srcRaw-38);
} }
if (differential==1) { if (differential==1) {
c9x.differential=curve; c9x.curve.type = CurveReference::CURVE_REF_DIFF;
c9x.curve=0; c9x.curve.value = differential;
} else {
c9x.differential=0;
c9x.curve=curve;
} }
c9x.lateOffset=lateOffset; else if (curve > 6) {
c9x.curve.type = CurveReference::CURVE_REF_CUSTOM;
c9x.curve.value = curve - 6;
}
else if (curve > 0) {
c9x.curve.type = CurveReference::CURVE_REF_FUNC;
c9x.curve.value = curve;
}
// c9x.lateOffset=lateOffset;
c9x.delayUp = delayUp; c9x.delayUp = delayUp;
c9x.delayDown = delayDown; c9x.delayDown = delayDown;
c9x.speedUp = speedUp; c9x.speedUp = speedUp;
@ -449,32 +237,10 @@ t_Er9xMixData::operator MixData ()
c9x.carryTrim = carryTrim; c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx; c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn; c9x.mixWarn = mixWarn;
c9x.enableFmTrim=enableFmTrim; // c9x.enableFmTrim=enableFmTrim;
return c9x; return c9x;
} }
int8_t er9xFromSource(RawSource source)
{
int v1 = 0;
if (source.type == SOURCE_TYPE_STICK)
v1 = 1+source.index;
else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) {
EEPROMWarnings += ::QObject::tr("er9x on this board doesn't have Rotary Encoders") + "\n";
v1 = 5+source.index;
}
else if (source.type == SOURCE_TYPE_MAX)
v1 = 8;
else if (source.type == SOURCE_TYPE_CYC)
v1 = 10+source.index;
else if (source.type == SOURCE_TYPE_PPM)
v1 = 13+source.index;
else if (source.type == SOURCE_TYPE_CH)
v1 = 21+source.index;
else if (source.type == SOURCE_TYPE_TELEMETRY)
v1 = 36+source.index;
return v1;
}
RawSource er9xToSource(int8_t value) RawSource er9xToSource(int8_t value)
{ {
if (value == 0) { if (value == 0) {
@ -503,33 +269,6 @@ RawSource er9xToSource(int8_t value)
} }
} }
t_Er9xCustomSwData::t_Er9xCustomSwData(CustomSwData &c9x)
{
func = c9x.func;
v1 = c9x.val1;
v2 = c9x.val2;
if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
v1 = er9xFromSource(RawSource(c9x.val1));
}
if (c9x.func >= CS_FN_EQUAL) {
v2 = er9xFromSource(RawSource(c9x.val2));
}
if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
v1 = er9xFromSwitch(RawSwitch(c9x.val1));
v2 = er9xFromSwitch(RawSwitch(c9x.val2));
}
if (func>ER9X_MAX_CSFUNC ) {
EEPROMWarnings += ::QObject::tr("er9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n";
func=0;
v1=0;
v2=0;
}
}
Er9xCustomSwData::operator CustomSwData () Er9xCustomSwData::operator CustomSwData ()
{ {
CustomSwData c9x; CustomSwData c9x;
@ -559,13 +298,6 @@ t_Er9xSafetySwData::t_Er9xSafetySwData()
memset(this, 0, sizeof(t_Er9xSafetySwData)); memset(this, 0, sizeof(t_Er9xSafetySwData));
} }
t_Er9xSafetySwData::t_Er9xSafetySwData(SafetySwData &c9x)
{
memset(this, 0, sizeof(t_Er9xSafetySwData));
swtch = er9xFromSwitch(c9x.swtch);
val = c9x.val;
}
t_Er9xSafetySwData::operator SafetySwData () t_Er9xSafetySwData::operator SafetySwData ()
{ {
SafetySwData c9x; SafetySwData c9x;
@ -574,35 +306,11 @@ t_Er9xSafetySwData::operator SafetySwData ()
return c9x; return c9x;
} }
t_Er9xFrSkyChannelData::t_Er9xFrSkyChannelData() t_Er9xFrSkyChannelData::t_Er9xFrSkyChannelData()
{ {
memset(this, 0, sizeof(t_Er9xFrSkyChannelData)); memset(this, 0, sizeof(t_Er9xFrSkyChannelData));
} }
t_Er9xFrSkyChannelData::t_Er9xFrSkyChannelData(FrSkyChannelData &c9x)
{
memset(this, 0, sizeof(t_Er9xFrSkyChannelData));
ratio = c9x.ratio;
alarms_value[0] = c9x.alarms[0].value;
alarms_value[1] = c9x.alarms[1].value;
alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level;
alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater;
if (c9x.type==0) {
if (c9x.multiplier==0) {
type = 0;
} else if (c9x.multiplier==1) {
type = 2;
} else {
EEPROMWarnings += ::QObject::tr("er9x does not support this range for A1/A2") + "\n";
}
} else if (c9x.type==1 || c9x.type==3) {
type=c9x.type;
} else {
EEPROMWarnings += ::QObject::tr("er9x does not support this telemetry units") + "\n";
}
}
t_Er9xFrSkyChannelData::operator FrSkyChannelData () t_Er9xFrSkyChannelData::operator FrSkyChannelData ()
{ {
FrSkyChannelData c9x; FrSkyChannelData c9x;
@ -622,19 +330,11 @@ t_Er9xFrSkyChannelData::operator FrSkyChannelData ()
return c9x; return c9x;
} }
t_Er9xFrSkyData::t_Er9xFrSkyData() t_Er9xFrSkyData::t_Er9xFrSkyData()
{ {
memset(this, 0, sizeof(t_Er9xFrSkyData)); memset(this, 0, sizeof(t_Er9xFrSkyData));
} }
t_Er9xFrSkyData::t_Er9xFrSkyData(FrSkyData &c9x)
{
memset(this, 0, sizeof(t_Er9xFrSkyData));
channels[0] = c9x.channels[0];
channels[1] = c9x.channels[1];
}
t_Er9xFrSkyData::operator FrSkyData () t_Er9xFrSkyData::operator FrSkyData ()
{ {
FrSkyData c9x; FrSkyData c9x;
@ -643,24 +343,6 @@ t_Er9xFrSkyData::operator FrSkyData ()
return c9x; return c9x;
} }
int setEr9xTimerMode(TimerMode mode)
{
if (mode == TMRMODE_OFF || mode == TMRMODE_ABS)
return mode;
else if (mode == TMRMODE_THs || mode == TMRMODE_THp)
return mode + 4;
else if (mode >= TMRMODE_FIRST_MOMENT_SWITCH)
return 37+mode-TMRMODE_FIRST_MOMENT_SWITCH;
else if (mode >= TMRMODE_FIRST_SWITCH)
return 16+mode-TMRMODE_FIRST_SWITCH;
else if (mode <= TMRMODE_FIRST_NEG_MOMENT_SWITCH)
return -37+mode-TMRMODE_FIRST_NEG_MOMENT_SWITCH;
else if (mode <= TMRMODE_FIRST_NEG_SWITCH)
return -16+mode-TMRMODE_FIRST_NEG_SWITCH;
else
return 0;
}
TimerMode getEr9xTimerMode(int mode) TimerMode getEr9xTimerMode(int mode)
{ {
if (mode <= -33) if (mode <= -33)
@ -675,162 +357,6 @@ TimerMode getEr9xTimerMode(int mode)
return TimerMode(TMRMODE_FIRST_MOMENT_SWITCH+(mode-16-21)); return TimerMode(TMRMODE_FIRST_MOMENT_SWITCH+(mode-16-21));
} }
t_Er9xModelData::t_Er9xModelData(ModelData &c9x)
{
memset(this, 0, sizeof(t_Er9xModelData));
if (c9x.used) {
setEEPROMString(name, c9x.name, sizeof(name));
modelVoice=c9x.modelVoice;
tmrMode = setEr9xTimerMode(c9x.timers[0].mode);
tmrModeB = c9x.timers[0].modeB;
tmrDir = c9x.timers[0].dir;
tmrVal = c9x.timers[0].val;
switch(c9x.moduleData[0].protocol) {
case PPM:
protocol = 0;
break;
case PXX_DJT:
protocol = 1;
break;
case DSM2:
protocol = 2;
break;
case PPM16:
protocol = 3;
break;
default:
protocol = 0;
EEPROMWarnings += QObject::tr("Er9x doesn't accept this protocol") + "\n";
// TODO more explicit warning for each protocol
break;
}
traineron = c9x.traineron;
t2throttle = c9x.t2throttle;
ppmFrameLength = c9x.moduleData[0].ppmFrameLength;
ppmNCH = (c9x.moduleData[0].channelsCount - 8) / 2;
thrTrim = c9x.thrTrim;
thrExpo = c9x.thrExpo;
trimInc = c9x.trimInc;
ppmDelay = (c9x.moduleData[0].ppmDelay - 300) / 50;
for (unsigned int i=0; i<C9X_MAX_CUSTOM_FUNCTIONS; i++)
if (c9x.funcSw[i].func == FuncInstantTrim && c9x.funcSw[i].swtch.type != SWITCH_TYPE_NONE) {
trimSw = er9xFromSwitch(c9x.funcSw[i].swtch);
break;
}
beepANACenter = (uint8_t)(c9x.beepANACenter & 0x7F);
pulsePol = c9x.moduleData[0].ppmPulsePol;
extendedLimits = c9x.extendedLimits;
swashInvertELE = c9x.swashRingData.invertELE;
swashInvertAIL = c9x.swashRingData.invertAIL;
swashInvertCOL = c9x.swashRingData.invertCOL;
swashType = c9x.swashRingData.type;
swashCollectiveSource = er9xFromSource(c9x.swashRingData.collectiveSource);
swashRingValue = c9x.swashRingData.value;
for (int i=0; i<ER9X_MAX_MIXERS; i++)
mixData[i] = c9x.mixData[i];
for (int i=0; i<ER9X_NUM_CHNOUT; i++)
limitData[i] = c9x.limitData[i];
// expoData
for (unsigned int i=0; i<NUM_STICKS; i++) {
// first we find the switches
for (int e=0; e<C9X_MAX_EXPOS && c9x.expoData[e].mode; e++) {
if (c9x.expoData[e].chn == i) {
if (c9x.expoData[e].swtch.type!=SWITCH_TYPE_NONE) {
if (!expoData[i].drSw1)
expoData[i].drSw1 = -er9xFromSwitch(c9x.expoData[e].swtch);
else if (er9xFromSwitch(c9x.expoData[e].swtch) != -expoData[i].drSw1 && !expoData[i].drSw2) {
expoData[i].drSw2 = -er9xFromSwitch(c9x.expoData[e].swtch);
}
}
}
}
if (expoData[i].drSw1 && !expoData[i].drSw2) {
expoData[i].drSw1 = -expoData[i].drSw1;
}
for (int pos=0; pos<3; pos++) {
int swtch1=0, swtch2=0;
if (expoData[i].drSw1 && !expoData[i].drSw2) {
switch (pos) {
case 0:
swtch1 = -expoData[i].drSw1;
break;
case 1:
swtch1 = expoData[i].drSw1;
break;
default:
swtch1 = expoData[i].drSw1;
break;
}
}
else {
switch (pos) {
case 0:
swtch1 = -expoData[i].drSw1;
break;
case 1:
swtch1 = expoData[i].drSw1;
swtch2 = -expoData[i].drSw2;
break;
default:
swtch1 = expoData[i].drSw1;
swtch2 = expoData[i].drSw2;
break;
}
}
for (int mode=0; mode<2; mode++) {
for (int e=0; e<C9X_MAX_EXPOS && c9x.expoData[e].mode; e++) {
if (c9x.expoData[e].chn == i && !c9x.expoData[e].phases) {
if (c9x.expoData[e].swtch.type==SWITCH_TYPE_NONE || c9x.expoData[e].swtch == er9xToSwitch(swtch1) || c9x.expoData[e].swtch == er9xToSwitch(swtch2)) {
if (c9x.expoData[e].mode == 3 || (c9x.expoData[e].mode==2 && mode==0) || (c9x.expoData[e].mode==1 && mode==1)) {
expoData[i].expo[pos][0][mode] = c9x.expoData[e].expo;
expoData[i].expo[pos][1][mode] = c9x.expoData[e].weight - 100;
break;
}
}
}
}
}
}
}
for (int i=0; i<NUM_STICKS; i++)
trim[i] = std::max(-125, std::min(125, c9x.phaseData[0].trim[i]));
for (int i=0; i<ER9X_MAX_CURVE5; i++)
if (c9x.curves[i].count==5) {
if (c9x.curves[i].custom)
EEPROMWarnings += QObject::tr("Er9x doesn't support custom curves as curve%1, curve as been exported as fixed point ").arg(i+1) + "\n";
for (int j=0; j<5; j++)
curves5[i][j] = c9x.curves[i].points[j].y;
} else {
EEPROMWarnings += QObject::tr("Er9x doesn't support curve with %1 point as curve%2 ").arg(c9x.curves[i].count).arg(i+1) + "\n";
}
for (int i=0; i<ER9X_MAX_CURVE9; i++)
if (c9x.curves[i+ER9X_MAX_CURVE5].count==9) {
if (c9x.curves[i+ER9X_MAX_CURVE5].custom)
EEPROMWarnings += QObject::tr("Er9x doesn't support custom curves as curve%1, curve as been exported as fixed point ").arg(i+1+ER9X_MAX_CURVE5) + "\n";
for (int j=0; j<9; j++)
curves9[i][j] = c9x.curves[i+ER9X_MAX_CURVE5].points[j].y;
} else {
EEPROMWarnings += QObject::tr("Er9x doesn't support curve with %1 point as curve%2 ").arg(c9x.curves[i+ER9X_MAX_CURVE5].count).arg(i+1+ER9X_MAX_CURVE5) + "\n";
}
for (int i=0; i<ER9X_NUM_CSW; i++)
customSw[i] = c9x.customSw[i];
for (int i=0; i<ER9X_NUM_CHNOUT; i++)
safetySw[i] = c9x.safetySw[i];
frsky = c9x.frsky;
FrSkyUsrProto = c9x.frsky.usrProto;
FrSkyImperial = c9x.frsky.imperial;
FrSkyGpsAlt = c9x.frsky.FrSkyGpsAlt;
}
}
t_Er9xModelData::operator ModelData () t_Er9xModelData::operator ModelData ()
{ {
ModelData c9x; ModelData c9x;
@ -840,9 +366,7 @@ t_Er9xModelData::operator ModelData ()
c9x.timers[0].mode = getEr9xTimerMode(tmrMode); c9x.timers[0].mode = getEr9xTimerMode(tmrMode);
c9x.timers[0].dir = tmrDir; c9x.timers[0].dir = tmrDir;
c9x.timers[0].val = tmrVal; c9x.timers[0].val = tmrVal;
c9x.timers[0].modeB = tmrModeB; switch(protocol) {
switch(protocol) {
case 1: case 1:
c9x.moduleData[0].protocol = PXX_DJT; c9x.moduleData[0].protocol = PXX_DJT;
break; break;
@ -862,7 +386,7 @@ t_Er9xModelData::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH; c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH;
c9x.thrTrim = thrTrim; c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo; c9x.thrExpo = thrExpo;
c9x.trimInc = trimInc; c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay; c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.funcSw[0].func = FuncInstantTrim; c9x.funcSw[0].func = FuncInstantTrim;
if (trimSw) { if (trimSw) {
@ -902,7 +426,10 @@ t_Er9xModelData::operator ModelData ()
c9x.expoData[e].swtch = er9xToSwitch(dr == 0 ? -expoData[ch].drSw1 : (dr == 1 ? -expoData[ch].drSw2 : 0)); c9x.expoData[e].swtch = er9xToSwitch(dr == 0 ? -expoData[ch].drSw1 : (dr == 1 ? -expoData[ch].drSw2 : 0));
} }
c9x.expoData[e].chn = ch; c9x.expoData[e].chn = ch;
c9x.expoData[e].expo = expoData[ch].expo[pos][0][0]; if (expoData[ch].expo[pos][0][0]) {
c9x.expoData[e].curve.type = CurveReference::CURVE_REF_EXPO;
c9x.expoData[e].curve.value = expoData[ch].expo[pos][0][0];
}
c9x.expoData[e].weight = 100 + expoData[ch].expo[pos][1][0]; c9x.expoData[e].weight = 100 + expoData[ch].expo[pos][1][0];
if (expoData[ch].expo[pos][0][0] == expoData[ch].expo[pos][0][1] && expoData[ch].expo[pos][1][0] == expoData[ch].expo[pos][1][1]) { if (expoData[ch].expo[pos][0][0] == expoData[ch].expo[pos][0][1] && expoData[ch].expo[pos][1][0] == expoData[ch].expo[pos][1][1]) {
c9x.expoData[e++].mode = 3; c9x.expoData[e++].mode = 3;
@ -913,7 +440,10 @@ t_Er9xModelData::operator ModelData ()
c9x.expoData[e + 1].swtch = c9x.expoData[e].swtch; c9x.expoData[e + 1].swtch = c9x.expoData[e].swtch;
c9x.expoData[++e].chn = ch; c9x.expoData[++e].chn = ch;
c9x.expoData[e].mode = 1; c9x.expoData[e].mode = 1;
c9x.expoData[e].expo = expoData[ch].expo[pos][0][1]; if (expoData[ch].expo[pos][0][1]) {
c9x.expoData[e].curve.type = CurveReference::CURVE_REF_EXPO;
c9x.expoData[e].curve.value = expoData[ch].expo[pos][0][1];
}
c9x.expoData[e++].weight = 100 + expoData[ch].expo[pos][1][1]; c9x.expoData[e++].weight = 100 + expoData[ch].expo[pos][1][1];
} }
} }
@ -924,7 +454,6 @@ t_Er9xModelData::operator ModelData ()
c9x.phaseData[0].trim[i] = trim[i]; c9x.phaseData[0].trim[i] = trim[i];
for (int i=0; i<ER9X_MAX_CURVE5; i++) { for (int i=0; i<ER9X_MAX_CURVE5; i++) {
c9x.curves[i].custom = false;
c9x.curves[i].count = 5; c9x.curves[i].count = 5;
for (int j = 0; j < 5; j++) { for (int j = 0; j < 5; j++) {
c9x.curves[i].points[j].x = -100 + 50 * i; c9x.curves[i].points[j].x = -100 + 50 * i;
@ -932,7 +461,6 @@ t_Er9xModelData::operator ModelData ()
} }
} }
for (int i=0; i<ER9X_MAX_CURVE9; i++) { for (int i=0; i<ER9X_MAX_CURVE9; i++) {
c9x.curves[ER9X_MAX_CURVE5 + i].custom = false;
c9x.curves[ER9X_MAX_CURVE5 + i].count = 9; c9x.curves[ER9X_MAX_CURVE5 + i].count = 9;
for (int j = 0; j < 9; j++) { for (int j = 0; j < 9; j++) {
c9x.curves[ER9X_MAX_CURVE5 + i].points[j].x = -100 + 25 * i; c9x.curves[ER9X_MAX_CURVE5 + i].points[j].x = -100 + 25 * i;

View file

@ -42,8 +42,6 @@ PACK(typedef struct t_Er9xTrainerMix {
operator TrainerMix(); operator TrainerMix();
t_Er9xTrainerMix(); t_Er9xTrainerMix();
t_Er9xTrainerMix(TrainerMix&);
}) Er9xTrainerMix; // }) Er9xTrainerMix; //
PACK(typedef struct t_Er9xTrainerData { PACK(typedef struct t_Er9xTrainerData {
@ -52,8 +50,6 @@ PACK(typedef struct t_Er9xTrainerData {
operator TrainerData(); operator TrainerData();
t_Er9xTrainerData(); t_Er9xTrainerData();
t_Er9xTrainerData(TrainerData&);
}) Er9xTrainerData; }) Er9xTrainerData;
PACK(typedef struct t_Er9xGeneral { PACK(typedef struct t_Er9xGeneral {
@ -109,8 +105,6 @@ PACK(typedef struct t_Er9xGeneral {
operator GeneralSettings(); operator GeneralSettings();
t_Er9xGeneral(); t_Er9xGeneral();
t_Er9xGeneral(GeneralSettings&);
}) Er9xGeneral; }) Er9xGeneral;
PACK(typedef struct t_Er9xExpoData { PACK(typedef struct t_Er9xExpoData {
@ -130,7 +124,6 @@ PACK(typedef struct t_Er9xLimitData {
operator LimitData(); operator LimitData();
t_Er9xLimitData(); t_Er9xLimitData();
t_Er9xLimitData(LimitData&);
}) Er9xLimitData; }) Er9xLimitData;
#define MLTPX_ADD 0 #define MLTPX_ADD 0
@ -158,7 +151,6 @@ PACK(typedef struct t_Er9xMixData {
operator MixData(); operator MixData();
t_Er9xMixData(); t_Er9xMixData();
t_Er9xMixData(MixData&);
}) Er9xMixData; }) Er9xMixData;
@ -170,7 +162,6 @@ PACK(typedef struct t_Er9xCustomSwData { // Custom Switches data
operator CustomSwData(); operator CustomSwData();
t_Er9xCustomSwData() { memset(this, 0, sizeof(t_Er9xCustomSwData)); } t_Er9xCustomSwData() { memset(this, 0, sizeof(t_Er9xCustomSwData)); }
t_Er9xCustomSwData(CustomSwData&);
}) Er9xCustomSwData; }) Er9xCustomSwData;
PACK(typedef struct t_Er9xSafetySwData { // Custom Switches data PACK(typedef struct t_Er9xSafetySwData { // Custom Switches data
@ -179,7 +170,6 @@ PACK(typedef struct t_Er9xSafetySwData { // Custom Switches data
operator SafetySwData(); operator SafetySwData();
t_Er9xSafetySwData(); t_Er9xSafetySwData();
t_Er9xSafetySwData(SafetySwData&);
}) Er9xSafetySwData; }) Er9xSafetySwData;
PACK(typedef struct t_Er9xFrSkyChannelData { PACK(typedef struct t_Er9xFrSkyChannelData {
@ -191,7 +181,6 @@ PACK(typedef struct t_Er9xFrSkyChannelData {
operator FrSkyChannelData(); operator FrSkyChannelData();
t_Er9xFrSkyChannelData(); t_Er9xFrSkyChannelData();
t_Er9xFrSkyChannelData(FrSkyChannelData&);
}) Er9xFrSkyChannelData; }) Er9xFrSkyChannelData;
PACK(typedef struct t_Er9xFrSkyData { PACK(typedef struct t_Er9xFrSkyData {
@ -199,7 +188,6 @@ PACK(typedef struct t_Er9xFrSkyData {
operator FrSkyData(); operator FrSkyData();
t_Er9xFrSkyData(); t_Er9xFrSkyData();
t_Er9xFrSkyData(FrSkyData&);
}) Er9xFrSkyData; }) Er9xFrSkyData;
PACK(typedef struct t_gvar { PACK(typedef struct t_gvar {
@ -268,9 +256,6 @@ PACK(typedef struct t_Er9xModelData {
operator ModelData(); operator ModelData();
t_Er9xModelData() { memset(this, 0, sizeof(t_Er9xModelData)); } t_Er9xModelData() { memset(this, 0, sizeof(t_Er9xModelData)); }
t_Er9xModelData(ModelData&);
}) Er9xModelData; }) Er9xModelData;
#endif #endif
/*eof*/

View file

@ -44,7 +44,7 @@ const char * Er9xInterface::getName()
const int Er9xInterface::getEEpromSize() const int Er9xInterface::getEEpromSize()
{ {
QSettings settings("companion9x", "companion9x"); QSettings settings;
QString avrMCU = settings.value("mcu", QString("m64")).toString(); QString avrMCU = settings.value("mcu", QString("m64")).toString();
if (avrMCU==QString("m128")) { if (avrMCU==QString("m128")) {
return 2*EESIZE_STOCK; return 2*EESIZE_STOCK;
@ -184,57 +184,20 @@ bool Er9xInterface::loadBackup(RadioData &radioData, uint8_t *eeprom, int esize,
int Er9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version) int Er9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version)
{ {
EEPROMWarnings.clear(); std::cout << "NO!\n";
// TODO an error
efile->EeFsCreate(eeprom, getEEpromSize(), BOARD_STOCK); return 0;
Er9xGeneral er9xGeneral(radioData.generalSettings);
int sz = efile->writeRlc1(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&er9xGeneral, sizeof(Er9xGeneral));
if(sz != sizeof(Er9xGeneral)) {
return 0;
}
for (int i=0; i<getMaxModels(); i++) {
if (!radioData.models[i].isempty()) {
Er9xModelData er9xModel(radioData.models[i]);
applyStickModeToModel(er9xModel, radioData.generalSettings.stickMode+1);
sz = efile->writeRlc1(FILE_MODEL(i), FILE_TYP_MODEL, (uint8_t*)&er9xModel, sizeof(Er9xModelData));
if(sz != sizeof(Er9xModelData)) {
return 0;
}
}
}
return getEEpromSize();
} }
int Er9xInterface::getSize(ModelData &model) int Er9xInterface::getSize(ModelData &model)
{ {
if (model.isempty()) return 0;
return 0;
uint8_t tmp[2*EESIZE_STOCK];
efile->EeFsCreate(tmp, getEEpromSize(), BOARD_STOCK);
Er9xModelData er9xModel(model);
int sz = efile->writeRlc1(0, FILE_TYP_MODEL, (uint8_t*)&er9xModel, sizeof(Er9xModelData));
if(sz != sizeof(Er9xModelData)) {
return -1;
}
return efile->size(0);
} }
int Er9xInterface::getSize(GeneralSettings &settings) int Er9xInterface::getSize(GeneralSettings &settings)
{ {
uint8_t tmp[2*EESIZE_STOCK]; return 0;
efile->EeFsCreate(tmp, getEEpromSize(), BOARD_STOCK);
Er9xGeneral er9xGeneral(settings);
int sz = efile->writeRlc1(0, FILE_TYP_GENERAL, (uint8_t*)&er9xGeneral, sizeof(Er9xGeneral));
if(sz != sizeof(Er9xGeneral)) {
return -1;
}
return efile->size(0);
} }
int Er9xInterface::getCapability(const Capability capability) int Er9xInterface::getCapability(const Capability capability)
@ -244,12 +207,6 @@ int Er9xInterface::getCapability(const Capability capability)
return 4; return 4;
case Mixes: case Mixes:
return ER9X_MAX_MIXERS; return ER9X_MAX_MIXERS;
case NumCurves5:
return ER9X_MAX_CURVE5;
case NumCurves9:
return ER9X_MAX_CURVE5;
case MixFmTrim:
return 1;
case PPMExtCtrl: case PPMExtCtrl:
return 1; return 1;
case ModelTrainerEnable: case ModelTrainerEnable:
@ -286,10 +243,6 @@ int Er9xInterface::getCapability(const Capability capability)
return 12; return 12;
case CustomAndSwitches: case CustomAndSwitches:
return 5; return 5;
case GvarsNum:
return 7;
case GvarsOfsNum:
return 5;
case CSFunc: case CSFunc:
return 13; return 13;
case Outputs: case Outputs:
@ -306,8 +259,6 @@ int Er9xInterface::getCapability(const Capability capability)
return TM_HASTELEMETRY|TM_HASWSHH; return TM_HASTELEMETRY|TM_HASWSHH;
case TelemetryUnits: case TelemetryUnits:
return 1; return 1;
case TimerTriggerB:
return 1;
case TelemetryMaxMultiplier: case TelemetryMaxMultiplier:
return 2; return 2;
case MaxVolume: case MaxVolume:
@ -325,17 +276,12 @@ int Er9xInterface::getCapability(const Capability capability)
case HasStickScroll: case HasStickScroll:
case HasAltitudeSel: case HasAltitudeSel:
case HasContrast: case HasContrast:
case InstantTrimSW:
case HasVolume: case HasVolume:
case HasBlInvert: case HasBlInvert:
case ModelVoice: case ModelVoice:
case DiffMixers:
case HasNegCurves:
case HasFixOffset:
case Gvars: case Gvars:
return 7;
case GvarsHaveSources: case GvarsHaveSources:
case GvarsAsSources:
case GvarsAsWeight:
return 1; return 1;
case GetThrSwitch: case GetThrSwitch:
return DSW_THR; return DSW_THR;

File diff suppressed because it is too large Load diff

View file

@ -51,8 +51,6 @@ PACK(typedef struct t_Ersky9xTrainerMix {
operator TrainerMix(); operator TrainerMix();
t_Ersky9xTrainerMix(); t_Ersky9xTrainerMix();
t_Ersky9xTrainerMix(TrainerMix&);
}) Ersky9xTrainerMix; // }) Ersky9xTrainerMix; //
PACK(typedef struct t_Ersky9xTrainerData { PACK(typedef struct t_Ersky9xTrainerData {
@ -61,8 +59,6 @@ PACK(typedef struct t_Ersky9xTrainerData {
operator TrainerData(); operator TrainerData();
t_Ersky9xTrainerData(); t_Ersky9xTrainerData();
t_Ersky9xTrainerData(TrainerData&);
}) Ersky9xTrainerData; }) Ersky9xTrainerData;
PACK(typedef struct t_Ersky9xGeneral { PACK(typedef struct t_Ersky9xGeneral {
@ -122,8 +118,6 @@ PACK(typedef struct t_Ersky9xGeneral {
uint8_t rotaryDivisor ; uint8_t rotaryDivisor ;
operator GeneralSettings(); operator GeneralSettings();
t_Ersky9xGeneral(); t_Ersky9xGeneral();
t_Ersky9xGeneral(GeneralSettings&);
}) Ersky9xGeneral; }) Ersky9xGeneral;
PACK(typedef struct t_Ersky9xExpoData { PACK(typedef struct t_Ersky9xExpoData {
@ -143,7 +137,6 @@ PACK(typedef struct t_Ersky9xLimitData {
operator LimitData(); operator LimitData();
t_Ersky9xLimitData() ; t_Ersky9xLimitData() ;
t_Ersky9xLimitData(LimitData&);
}) Ersky9xLimitData; }) Ersky9xLimitData;
#define MLTPX_ADD 0 #define MLTPX_ADD 0
@ -170,7 +163,6 @@ PACK(typedef struct t_Ersky9xMixData_v10 {
operator MixData(); operator MixData();
t_Ersky9xMixData_v10(); t_Ersky9xMixData_v10();
t_Ersky9xMixData_v10(MixData&);
}) Ersky9xMixData_v10; }) Ersky9xMixData_v10;
PACK(typedef struct t_Ersky9xMixData_v11 { PACK(typedef struct t_Ersky9xMixData_v11 {
@ -192,7 +184,6 @@ PACK(typedef struct t_Ersky9xMixData_v11 {
uint8_t res[4]; uint8_t res[4];
operator MixData(); operator MixData();
t_Ersky9xMixData_v11(); t_Ersky9xMixData_v11();
t_Ersky9xMixData_v11(MixData&);
}) Ersky9xMixData_v11; }) Ersky9xMixData_v11;
PACK(typedef struct t_Ersky9xCustomSwData_v10 { // Custom Switches data PACK(typedef struct t_Ersky9xCustomSwData_v10 { // Custom Switches data
@ -202,8 +193,6 @@ PACK(typedef struct t_Ersky9xCustomSwData_v10 { // Custom Switches data
operator CustomSwData(); operator CustomSwData();
t_Ersky9xCustomSwData_v10() { memset(this, 0, sizeof(t_Ersky9xCustomSwData_v10)); } t_Ersky9xCustomSwData_v10() { memset(this, 0, sizeof(t_Ersky9xCustomSwData_v10)); }
t_Ersky9xCustomSwData_v10(CustomSwData&);
}) Ersky9xCustomSwData_v10; }) Ersky9xCustomSwData_v10;
PACK(typedef struct t_Ersky9xCustomSwData_v11 { // Custom Switches data PACK(typedef struct t_Ersky9xCustomSwData_v11 { // Custom Switches data
@ -215,8 +204,6 @@ PACK(typedef struct t_Ersky9xCustomSwData_v11 { // Custom Switches data
operator CustomSwData(); operator CustomSwData();
t_Ersky9xCustomSwData_v11() { memset(this, 0, sizeof(t_Ersky9xCustomSwData_v11)); } t_Ersky9xCustomSwData_v11() { memset(this, 0, sizeof(t_Ersky9xCustomSwData_v11)); }
t_Ersky9xCustomSwData_v11(CustomSwData&);
}) Ersky9xCustomSwData_v11; }) Ersky9xCustomSwData_v11;
PACK(typedef struct t_Ersky9xSafetySwData_v10 { // Custom Switches data PACK(typedef struct t_Ersky9xSafetySwData_v10 { // Custom Switches data
@ -225,7 +212,6 @@ PACK(typedef struct t_Ersky9xSafetySwData_v10 { // Custom Switches data
operator SafetySwData(); operator SafetySwData();
t_Ersky9xSafetySwData_v10(); t_Ersky9xSafetySwData_v10();
t_Ersky9xSafetySwData_v10(SafetySwData&);
}) Ersky9xSafetySwData_v10; }) Ersky9xSafetySwData_v10;
PACK(typedef struct t_Ersky9xSafetySwData_v11 { // Custom Switches data PACK(typedef struct t_Ersky9xSafetySwData_v11 { // Custom Switches data
@ -246,7 +232,6 @@ PACK(typedef struct t_Ersky9xSafetySwData_v11 { // Custom Switches data
operator SafetySwData(); operator SafetySwData();
t_Ersky9xSafetySwData_v11(); t_Ersky9xSafetySwData_v11();
t_Ersky9xSafetySwData_v11(SafetySwData&);
}) Ersky9xSafetySwData_v11; }) Ersky9xSafetySwData_v11;
PACK(typedef struct t_Ersky9xgvar { PACK(typedef struct t_Ersky9xgvar {
@ -281,7 +266,6 @@ PACK(typedef struct t_Ersky9xFrSkyChannelData_v10 {
operator FrSkyChannelData(); operator FrSkyChannelData();
t_Ersky9xFrSkyChannelData_v10(); t_Ersky9xFrSkyChannelData_v10();
t_Ersky9xFrSkyChannelData_v10(FrSkyChannelData&);
}) Ersky9xFrSkyChannelData_v10; }) Ersky9xFrSkyChannelData_v10;
PACK(typedef struct t_Ersky9xFrSkyData_v10 { PACK(typedef struct t_Ersky9xFrSkyData_v10 {
@ -289,7 +273,6 @@ PACK(typedef struct t_Ersky9xFrSkyData_v10 {
operator FrSkyData(); operator FrSkyData();
t_Ersky9xFrSkyData_v10(); t_Ersky9xFrSkyData_v10();
t_Ersky9xFrSkyData_v10(FrSkyData&);
}) Ersky9xFrSkyData_v10; }) Ersky9xFrSkyData_v10;
PACK(typedef struct t_Ersky9xFrSkyChannelData_v11 { PACK(typedef struct t_Ersky9xFrSkyChannelData_v11 {
@ -303,7 +286,6 @@ PACK(typedef struct t_Ersky9xFrSkyChannelData_v11 {
operator FrSkyChannelData(); operator FrSkyChannelData();
t_Ersky9xFrSkyChannelData_v11(); t_Ersky9xFrSkyChannelData_v11();
t_Ersky9xFrSkyChannelData_v11(FrSkyChannelData&);
}) Ersky9xFrSkyChannelData_v11; }) Ersky9xFrSkyChannelData_v11;
PACK(typedef struct t_Ersky9xFrSkyData_v11 { PACK(typedef struct t_Ersky9xFrSkyData_v11 {
@ -311,7 +293,6 @@ PACK(typedef struct t_Ersky9xFrSkyData_v11 {
operator FrSkyData(); operator FrSkyData();
t_Ersky9xFrSkyData_v11(); t_Ersky9xFrSkyData_v11();
t_Ersky9xFrSkyData_v11(FrSkyData&);
}) Ersky9xFrSkyData_v11; }) Ersky9xFrSkyData_v11;
PACK(typedef struct t_Ersky9xFrSkyalarms_v11 { PACK(typedef struct t_Ersky9xFrSkyalarms_v11 {
@ -390,7 +371,6 @@ PACK(typedef struct t_Ersky9xModelData_v10 {
Ersky9xTimerMode_v10 timer[2] ; Ersky9xTimerMode_v10 timer[2] ;
operator ModelData(); operator ModelData();
t_Ersky9xModelData_v10() { memset(this, 0, sizeof(t_Ersky9xModelData_v10)); } t_Ersky9xModelData_v10() { memset(this, 0, sizeof(t_Ersky9xModelData_v10)); }
t_Ersky9xModelData_v10(ModelData&);
}) Ersky9xModelData_v10; }) Ersky9xModelData_v10;
PACK(typedef struct t_Ersky9xModelData_v11 { PACK(typedef struct t_Ersky9xModelData_v11 {
@ -449,8 +429,6 @@ PACK(typedef struct t_Ersky9xModelData_v11 {
operator ModelData(); operator ModelData();
t_Ersky9xModelData_v11() { memset(this, 0, sizeof(t_Ersky9xModelData_v11)); } t_Ersky9xModelData_v11() { memset(this, 0, sizeof(t_Ersky9xModelData_v11)); }
t_Ersky9xModelData_v11(ModelData&);
}) Ersky9xModelData_v11; }) Ersky9xModelData_v11;
#endif #endif
/*eof*/

View file

@ -228,33 +228,10 @@ bool Ersky9xInterface::loadBackup(RadioData &radioData, uint8_t *eeprom, int esi
int Ersky9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version) int Ersky9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version)
{ {
EEPROMWarnings.clear(); std::cout << "NO!\n";
// TODO an error
efile->EeFsCreate(eeprom, EESIZE_SKY9X, BOARD_SKY9X); return 0;
Ersky9xGeneral ersky9xGeneral(radioData.generalSettings);
int sz = efile->writeRlc2(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&ersky9xGeneral, sizeof(Ersky9xGeneral));
if(sz != sizeof(Ersky9xGeneral)) {
return 0;
}
for (int i=0; i<getMaxModels(); i++) {
if (!radioData.models[i].isempty()) {
Ersky9xModelData_v11 ersky9xModel(radioData.models[i]);
applyStickModeToModel(ersky9xModel, radioData.generalSettings.stickMode+1);
sz = efile->writeRlc2(FILE_MODEL(i), FILE_TYP_MODEL, (uint8_t*)&ersky9xModel, sizeof(Ersky9xModelData_v11));
if(sz != sizeof(Ersky9xModelData_v11)) {
return 0;
}
}
}
if (!EEPROMWarnings.isEmpty())
QMessageBox::warning(NULL,
QObject::tr("Warning"),
QObject::tr("EEPROM saved with these warnings:") + "\n- " + EEPROMWarnings.remove(EEPROMWarnings.length()-1, 1).replace("\n", "\n- "));
return EESIZE_SKY9X;
} }
int Ersky9xInterface::getSize(ModelData &model) int Ersky9xInterface::getSize(ModelData &model)
@ -272,12 +249,6 @@ int Ersky9xInterface::getCapability(const Capability capability)
switch (capability) { switch (capability) {
case Mixes: case Mixes:
return ERSKY9X_MAX_MIXERS_V11; return ERSKY9X_MAX_MIXERS_V11;
case NumCurves5:
return ERSKY9X_MAX_CURVE5;
case NumCurves9:
return ERSKY9X_MAX_CURVE9;
case MixFmTrim:
return 1;
case PPMExtCtrl: case PPMExtCtrl:
return 1; return 1;
case ModelTrainerEnable: case ModelTrainerEnable:
@ -306,10 +277,8 @@ int Ersky9xInterface::getCapability(const Capability capability)
return 2; return 2;
case Pots: case Pots:
return 3; return 3;
case GvarsNum: case Gvars:
return 7; return 7;
case GvarsOfsNum:
return 5;
case Switches: case Switches:
return 7; return 7;
case SwitchesPositions: case SwitchesPositions:
@ -338,8 +307,6 @@ int Ersky9xInterface::getCapability(const Capability capability)
return 1; return 1;
case OptrexDisplay: case OptrexDisplay:
return 1; return 1;
case TimerTriggerB:
return 2;
case HasAltitudeSel: case HasAltitudeSel:
case HasCurrentCalibration: case HasCurrentCalibration:
case HasVolume: case HasVolume:
@ -350,12 +317,7 @@ int Ersky9xInterface::getCapability(const Capability capability)
return 125; return 125;
case MaxVolume: case MaxVolume:
return 23; return 23;
case Gvars:
case GvarsHaveSources: case GvarsHaveSources:
case GvarsAsSources:
case GvarsAsWeight:
return 1;
case InstantTrimSW:
return 1; return 1;
case TelemetryMaxMultiplier: case TelemetryMaxMultiplier:
return 2; return 2;

View file

@ -6,7 +6,6 @@
#define EEPROM_VER 106 #define EEPROM_VER 106
extern void setEEPROMZString(char *dst, const char *src, int size);
extern void getEEPROMZString(char *dst, const char *src, int size); extern void getEEPROMZString(char *dst, const char *src, int size);
RawSwitch gruvin9xToSwitch(int8_t sw) RawSwitch gruvin9xToSwitch(int8_t sw)
@ -19,18 +18,6 @@ RawSwitch gruvin9xToSwitch(int8_t sw)
return RawSwitch(SWITCH_TYPE_VIRTUAL, sw > 0 ? sw-9 : sw+9); return RawSwitch(SWITCH_TYPE_VIRTUAL, sw > 0 ? sw-9 : sw+9);
} }
int8_t gruvin9xFromSwitch(const RawSwitch & sw)
{
switch (sw.type) {
case SWITCH_TYPE_SWITCH:
return sw.index;
case SWITCH_TYPE_VIRTUAL:
return sw.index > 0 ? (9 + sw.index) : (-9 + sw.index);
default:
return 0;
}
}
t_Gruvin9xTrainerMix_v103::operator TrainerMix() t_Gruvin9xTrainerMix_v103::operator TrainerMix()
{ {
TrainerMix c9x; TrainerMix c9x;
@ -50,14 +37,6 @@ t_Gruvin9xTrainerMix_v104::operator TrainerMix()
return c9x; return c9x;
} }
t_Gruvin9xTrainerMix_v104::t_Gruvin9xTrainerMix_v104(TrainerMix &c9x)
{
memset(this, 0, sizeof(t_Gruvin9xTrainerMix_v104));
srcChn = c9x.src;
studWeight = c9x.weight;
mode = c9x.mode;
}
t_Gruvin9xTrainerData_v103::operator TrainerData () t_Gruvin9xTrainerData_v103::operator TrainerData ()
{ {
TrainerData c9x; TrainerData c9x;
@ -78,16 +57,6 @@ t_Gruvin9xTrainerData_v104::operator TrainerData ()
return c9x; return c9x;
} }
t_Gruvin9xTrainerData_v104::t_Gruvin9xTrainerData_v104(TrainerData &c9x)
{
memset(this, 0, sizeof(t_Gruvin9xTrainerData_v104));
for (int i=0; i<NUM_STICKS; i++) {
calib[i] = c9x.calib[i];
mix[i] = c9x.mix[i];
}
}
Gruvin9xGeneral_v103::operator GeneralSettings () Gruvin9xGeneral_v103::operator GeneralSettings ()
{ {
GeneralSettings result; GeneralSettings result;
@ -134,7 +103,6 @@ Gruvin9xGeneral_v103::operator GeneralSettings ()
result.disableAlarmWarning = disableAlarmWarning; result.disableAlarmWarning = disableAlarmWarning;
result.stickMode = stickMode; result.stickMode = stickMode;
result.inactivityTimer = inactivityTimer; result.inactivityTimer = inactivityTimer;
result.throttleReversed = throttleReversed;
result.minuteBeep = minuteBeep; result.minuteBeep = minuteBeep;
result.preBeep = preBeep; result.preBeep = preBeep;
result.flashBeep = flashBeep; result.flashBeep = flashBeep;
@ -147,60 +115,6 @@ Gruvin9xGeneral_v103::operator GeneralSettings ()
return result; return result;
} }
t_Gruvin9xGeneral_v104::t_Gruvin9xGeneral_v104(GeneralSettings &c9x)
{
memset(this, 0, sizeof(t_Gruvin9xGeneral_v104));
myVers = EEPROM_VER;
for (int i=0; i<NUM_STICKS+BOARD_9X_NUM_POTS; i++) {
calibMid[i] = c9x.calibMid[i];
calibSpanNeg[i] = c9x.calibSpanNeg[i];
calibSpanPos[i] = c9x.calibSpanPos[i];
}
uint16_t sum = 0;
for (int i=0; i<12; i++)
sum += calibMid[i];
chkSum = sum;
currModel = c9x.currModel;
contrast = c9x.contrast;
vBatWarn = c9x.vBatWarn;
vBatCalib = c9x.vBatCalib;
if (c9x.backlightMode == 4)
lightSw = 22;
if (c9x.backlightMode & 1)
lightAutoOff = c9x.backlightDelay;
trainer = c9x.trainer;
view = c9x.view;
disableThrottleWarning = c9x.disableThrottleWarning;
if (c9x.beeperMode == e_quiet)
beeperVal = 0;
else if (c9x.beeperMode < e_all)
beeperVal = 1;
else
beeperVal = std::min(4, c9x.beeperLength + 4);
switchWarning = c9x.switchWarning;
disableMemoryWarning = c9x.disableMemoryWarning;
disableAlarmWarning = c9x.disableAlarmWarning;
stickMode = c9x.stickMode;
inactivityTimer = c9x.inactivityTimer;
throttleReversed = c9x.throttleReversed;
minuteBeep = c9x.minuteBeep;
preBeep = c9x.preBeep;
flashBeep = c9x.flashBeep;
disableSplashScreen = c9x.splashMode;
enableTelemetryAlarm = c9x.enableTelemetryAlarm;
spare = 0;
filterInput = c9x.filterInput;
templateSetup = c9x.templateSetup;
PPM_Multiplier = c9x.PPM_Multiplier;
// TODO frskyRssiAlarms[2];
}
Gruvin9xGeneral_v104::operator GeneralSettings () Gruvin9xGeneral_v104::operator GeneralSettings ()
{ {
GeneralSettings result; GeneralSettings result;
@ -234,7 +148,6 @@ Gruvin9xGeneral_v104::operator GeneralSettings ()
result.disableAlarmWarning = disableAlarmWarning; result.disableAlarmWarning = disableAlarmWarning;
result.stickMode = stickMode; result.stickMode = stickMode;
result.inactivityTimer = inactivityTimer; result.inactivityTimer = inactivityTimer;
result.throttleReversed = throttleReversed;
result.minuteBeep = minuteBeep; result.minuteBeep = minuteBeep;
result.preBeep = preBeep; result.preBeep = preBeep;
result.flashBeep = flashBeep; result.flashBeep = flashBeep;
@ -252,69 +165,11 @@ t_Gruvin9xExpoData::t_Gruvin9xExpoData()
memset(this, 0, sizeof(t_Gruvin9xExpoData)); memset(this, 0, sizeof(t_Gruvin9xExpoData));
} }
t_Gruvin9xExpoData::t_Gruvin9xExpoData(ExpoData &c9x)
{
mode = c9x.mode;
chn = c9x.chn;
if (c9x.curveMode==1) {
curve = c9x.curveParam;
} else {
curve=0;
}
swtch = gruvin9xFromSwitch(c9x.swtch);
int zeros=0;
int ones=0;
int phtemp=c9x.phases;
for (int i=0; i<G9X_MAX_PHASES; i++) {
if (phtemp & 1) {
ones++;
} else {
zeros++;
}
phtemp >>=1;
}
if (zeros==G9X_MAX_PHASES || zeros==0) {
phase=0;
negPhase=0;
} else if (zeros==1) {
int phtemp=c9x.phases;
int ph=0;
for (int i=0; i<G9X_MAX_PHASES; i++) {
if ((phtemp & 1)==0) {
ph=i;
break;
}
phtemp >>=1;
}
phase=ph+1;
negPhase=0;
} else if (ones==1) {
int phtemp=c9x.phases;
int ph=0;
for (int i=0; i<G9X_MAX_PHASES; i++) {
if (phtemp & 1) {
ph=i;
break;
}
phtemp >>=1;
}
phase=(ph+1);
negPhase=1;
} else {
phase=0;
EEPROMWarnings += ::QObject::tr("Flight modes settings on expos not exported") + "\n";
}
weight = c9x.weight;
expo = c9x.expo;
}
t_Gruvin9xExpoData::operator ExpoData () t_Gruvin9xExpoData::operator ExpoData ()
{ {
ExpoData c9x; ExpoData c9x;
c9x.mode = mode; c9x.mode = mode;
c9x.chn = chn; c9x.chn = chn;
c9x.curveParam = curve;
c9x.curveMode=1;
c9x.swtch = gruvin9xToSwitch(swtch); c9x.swtch = gruvin9xToSwitch(swtch);
if (negPhase) { if (negPhase) {
c9x.phases= 1 << (phase -1); c9x.phases= 1 << (phase -1);
@ -325,7 +180,18 @@ t_Gruvin9xExpoData::operator ExpoData ()
c9x.phases &= ~(1 << (phase -1)); c9x.phases &= ~(1 << (phase -1));
} }
c9x.weight = weight; c9x.weight = weight;
c9x.expo = expo; if (expo) {
c9x.curve.type = CurveReference::CURVE_REF_EXPO;
c9x.curve.value = expo;
}
else if (curve > 6) {
c9x.curve.type = CurveReference::CURVE_REF_CUSTOM;
c9x.curve.value = curve - 6;
}
else if (curve > 0) {
c9x.curve.type = CurveReference::CURVE_REF_FUNC;
c9x.curve.value = curve;
}
return c9x; return c9x;
} }
@ -334,14 +200,6 @@ t_Gruvin9xLimitData::t_Gruvin9xLimitData()
memset(this, 0, sizeof(t_Gruvin9xLimitData)); memset(this, 0, sizeof(t_Gruvin9xLimitData));
} }
t_Gruvin9xLimitData::t_Gruvin9xLimitData(LimitData &c9x)
{
min = c9x.min+100;
max = c9x.max-100;
revert = c9x.revert;
offset = c9x.offset;
}
t_Gruvin9xLimitData::operator LimitData () t_Gruvin9xLimitData::operator LimitData ()
{ {
LimitData c9x; LimitData c9x;
@ -352,67 +210,11 @@ t_Gruvin9xLimitData::operator LimitData ()
return c9x; return c9x;
} }
t_Gruvin9xMixData::t_Gruvin9xMixData() t_Gruvin9xMixData::t_Gruvin9xMixData()
{ {
memset(this, 0, sizeof(t_Gruvin9xMixData)); memset(this, 0, sizeof(t_Gruvin9xMixData));
} }
t_Gruvin9xMixData::t_Gruvin9xMixData(MixData &c9x)
{
destCh = c9x.destCh;
mixWarn = c9x.mixWarn;
swtch = gruvin9xFromSwitch(c9x.swtch);
if (c9x.srcRaw.type == SOURCE_TYPE_NONE) {
srcRaw = 0;
swtch = 0;
}
else if (c9x.srcRaw.type == SOURCE_TYPE_STICK) {
srcRaw = 1 + c9x.srcRaw.index;
}
else if (c9x.srcRaw.type == SOURCE_TYPE_ROTARY_ENCODER) {
EEPROMWarnings += ::QObject::tr("Open9x on this board doesn't have Rotary Encoders") + "\n";
srcRaw = 5 + c9x.srcRaw.index; // use pots instead
}
else if (c9x.srcRaw.type == SOURCE_TYPE_MAX) {
srcRaw = 8; // MAX
}
else if (c9x.srcRaw.type == SOURCE_TYPE_SWITCH) {
srcRaw = 9; // FULL
swtch = c9x.srcRaw.index+1;
}
else if (c9x.srcRaw.type == SOURCE_TYPE_CYC) {
srcRaw = 10 + c9x.srcRaw.index;
}
else if (c9x.srcRaw.type == SOURCE_TYPE_PPM) {
srcRaw = 13 + c9x.srcRaw.index;
}
else if (c9x.srcRaw.type == SOURCE_TYPE_CH) {
srcRaw = 21 + c9x.srcRaw.index;
}
else if (c9x.srcRaw.type == SOURCE_TYPE_TRIM) {
EEPROMWarnings += ::QObject::tr("gruvin9x doesn't have trims as source") + "\n";
srcRaw = 0; // use pots instead
}
weight = c9x.weight;
curve = c9x.curve;
delayUp = c9x.delayUp;
delayDown = c9x.delayDown;
speedUp = c9x.speedUp;
speedDown = c9x.speedDown;
if (c9x.carryTrim<0) {
EEPROMWarnings += ::QObject::tr("gruvin9x doesn't have swappable trims") + "\n";
carryTrim=1;
} else {
carryTrim = c9x.carryTrim;
}
mltpx = (MltpxValue)c9x.mltpx;
// phase = c9x.phase;
sOffset = c9x.sOffset;
}
t_Gruvin9xMixData::operator MixData () t_Gruvin9xMixData::operator MixData ()
{ {
MixData c9x; MixData c9x;
@ -450,7 +252,6 @@ t_Gruvin9xMixData::operator MixData ()
c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-21); c9x.srcRaw = RawSource(SOURCE_TYPE_CH, srcRaw-21);
} }
c9x.curve = curve;
c9x.delayUp = delayUp; c9x.delayUp = delayUp;
c9x.delayDown = delayDown; c9x.delayDown = delayDown;
c9x.speedUp = speedUp; c9x.speedUp = speedUp;
@ -458,34 +259,18 @@ t_Gruvin9xMixData::operator MixData ()
c9x.carryTrim = carryTrim; c9x.carryTrim = carryTrim;
c9x.mltpx = (MltpxValue)mltpx; c9x.mltpx = (MltpxValue)mltpx;
c9x.mixWarn = mixWarn; c9x.mixWarn = mixWarn;
// c9x.phase = phase;
c9x.sOffset = sOffset; c9x.sOffset = sOffset;
return c9x;
}
if (curve > 6) {
int8_t gruvin9xFromSource(RawSource source) c9x.curve.type = CurveReference::CURVE_REF_CUSTOM;
{ c9x.curve.value = curve - 6;
int v1 = 0;
if (source.type == SOURCE_TYPE_STICK)
v1 = 1+source.index;
else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) {
EEPROMWarnings += ::QObject::tr("gruvin9x on this board doesn't have Rotary Encoders") + "\n";
v1 = 5+source.index;
} }
else if (source.type == SOURCE_TYPE_MAX) else if (curve > 0) {
v1 = 8; c9x.curve.type = CurveReference::CURVE_REF_FUNC;
/* else if (source.type == SOURCE_TYPE_3POS) c9x.curve.value = curve;
v1 = 0; */ }
else if (source.type == SOURCE_TYPE_CYC)
v1 = 10+source.index; return c9x;
else if (source.type == SOURCE_TYPE_PPM)
v1 = 13+source.index;
else if (source.type == SOURCE_TYPE_CH)
v1 = 21+source.index;
else if (source.type == SOURCE_TYPE_TELEMETRY)
v1 = 36+source.index;
return v1;
} }
RawSource gruvin9xToSource(int8_t value) RawSource gruvin9xToSource(int8_t value)
@ -516,33 +301,6 @@ RawSource gruvin9xToSource(int8_t value)
} }
} }
t_Gruvin9xCustomSwData::t_Gruvin9xCustomSwData(CustomSwData &c9x)
{
func = c9x.func;
v1 = c9x.val1;
v2 = c9x.val2;
if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
v1 = gruvin9xFromSource(RawSource(c9x.val1));
}
if (c9x.func >= CS_FN_EQUAL) {
v2 = gruvin9xFromSource(RawSource(c9x.val2));
}
if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
v1 = gruvin9xFromSwitch(RawSwitch(c9x.val1));
v2 = gruvin9xFromSwitch(RawSwitch(c9x.val2));
}
if (func>GR9X_MAX_CSFUNC ) {
EEPROMWarnings += ::QObject::tr("gruvin9x does not support Custom Switch function %1").arg(getFuncName(func)) + "\n";
func=0;
v1=0;
v2=0;
}
}
Gruvin9xCustomSwData::operator CustomSwData () Gruvin9xCustomSwData::operator CustomSwData ()
{ {
CustomSwData c9x; CustomSwData c9x;
@ -566,12 +324,6 @@ Gruvin9xCustomSwData::operator CustomSwData ()
return c9x; return c9x;
} }
t_Gruvin9xFuncSwData::t_Gruvin9xFuncSwData(FuncSwData &c9x)
{
swtch = gruvin9xFromSwitch(c9x.swtch);
func = c9x.func - G9X_NUM_CHNOUT;
}
Gruvin9xFuncSwData::operator FuncSwData () Gruvin9xFuncSwData::operator FuncSwData ()
{ {
FuncSwData c9x; FuncSwData c9x;
@ -580,12 +332,6 @@ Gruvin9xFuncSwData::operator FuncSwData ()
return c9x; return c9x;
} }
t_Gruvin9xSafetySwData::t_Gruvin9xSafetySwData(SafetySwData &c9x)
{
swtch = gruvin9xFromSwitch(c9x.swtch);
val = c9x.val;
}
t_Gruvin9xSafetySwData::operator SafetySwData () t_Gruvin9xSafetySwData::operator SafetySwData ()
{ {
SafetySwData c9x; SafetySwData c9x;
@ -599,16 +345,6 @@ t_Gruvin9xSwashRingData::t_Gruvin9xSwashRingData()
memset(this, 0, sizeof(t_Gruvin9xSwashRingData)); memset(this, 0, sizeof(t_Gruvin9xSwashRingData));
} }
t_Gruvin9xSwashRingData::t_Gruvin9xSwashRingData(SwashRingData &c9x)
{
invertELE = c9x.invertELE;
invertAIL = c9x.invertAIL;
invertCOL = c9x.invertCOL;
type = c9x.type;
collectiveSource = gruvin9xFromSource(c9x.collectiveSource);
value = c9x.value;
}
t_Gruvin9xSwashRingData::operator SwashRingData () t_Gruvin9xSwashRingData::operator SwashRingData ()
{ {
SwashRingData c9x; SwashRingData c9x;
@ -645,21 +381,7 @@ t_Gruvin9xPhaseData_v106::operator PhaseData ()
return c9x; return c9x;
} }
t_Gruvin9xPhaseData_v106::t_Gruvin9xPhaseData_v106(PhaseData &c9x)
{
trim_ext = 0;
for (int i=0; i<NUM_STICKS; i++) {
trim[i] = (int8_t)(c9x.trim[i] >> 2);
trim_ext = (trim_ext & ~(0x03 << (2*i))) + (((c9x.trim[i] & 0x03) << (2*i)));
}
swtch = gruvin9xFromSwitch(c9x.swtch);
setEEPROMZString(name, c9x.name, sizeof(name));
fadeIn = c9x.fadeIn;
fadeOut = c9x.fadeOut;
}
extern TimerMode getEr9xTimerMode(int mode); extern TimerMode getEr9xTimerMode(int mode);
extern int setEr9xTimerMode(TimerMode mode);
t_Gruvin9xTimerData::operator TimerData () t_Gruvin9xTimerData::operator TimerData ()
{ {
@ -670,29 +392,11 @@ t_Gruvin9xTimerData::operator TimerData ()
return c9x; return c9x;
} }
t_Gruvin9xTimerData::t_Gruvin9xTimerData(TimerData &c9x)
{
mode = setEr9xTimerMode(c9x.mode);
val = c9x.val;
dir = c9x.dir;
}
t_Gruvin9xFrSkyChannelData::t_Gruvin9xFrSkyChannelData() t_Gruvin9xFrSkyChannelData::t_Gruvin9xFrSkyChannelData()
{ {
memset(this, 0, sizeof(t_Gruvin9xFrSkyChannelData)); memset(this, 0, sizeof(t_Gruvin9xFrSkyChannelData));
} }
t_Gruvin9xFrSkyChannelData::t_Gruvin9xFrSkyChannelData(FrSkyChannelData &c9x)
{
memset(this, 0, sizeof(t_Gruvin9xFrSkyChannelData));
ratio = c9x.ratio;
alarms_value[0] = c9x.alarms[0].value;
alarms_value[1] = c9x.alarms[1].value;
alarms_level = (c9x.alarms[1].level << 2) + c9x.alarms[0].level;
alarms_greater = (c9x.alarms[1].greater << 1) + c9x.alarms[0].greater;
type = c9x.type;
}
t_Gruvin9xFrSkyChannelData::operator FrSkyChannelData () t_Gruvin9xFrSkyChannelData::operator FrSkyChannelData ()
{ {
FrSkyChannelData c9x; FrSkyChannelData c9x;
@ -707,19 +411,11 @@ t_Gruvin9xFrSkyChannelData::operator FrSkyChannelData ()
return c9x; return c9x;
} }
t_Gruvin9xFrSkyData::t_Gruvin9xFrSkyData() t_Gruvin9xFrSkyData::t_Gruvin9xFrSkyData()
{ {
memset(this, 0, sizeof(t_Gruvin9xFrSkyData)); memset(this, 0, sizeof(t_Gruvin9xFrSkyData));
} }
t_Gruvin9xFrSkyData::t_Gruvin9xFrSkyData(FrSkyData &c9x)
{
memset(this, 0, sizeof(t_Gruvin9xFrSkyData));
channels[0] = c9x.channels[0];
channels[1] = c9x.channels[1];
}
t_Gruvin9xFrSkyData::operator FrSkyData () t_Gruvin9xFrSkyData::operator FrSkyData ()
{ {
FrSkyData c9x; FrSkyData c9x;
@ -728,7 +424,6 @@ t_Gruvin9xFrSkyData::operator FrSkyData ()
return c9x; return c9x;
} }
t_Gruvin9xModelData_v102::operator ModelData () t_Gruvin9xModelData_v102::operator ModelData ()
{ {
ModelData c9x; ModelData c9x;
@ -763,7 +458,7 @@ t_Gruvin9xModelData_v102::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH); c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim; c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo; c9x.thrExpo = thrExpo;
c9x.trimInc = trimInc; c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay; c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter; c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol; c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -778,7 +473,6 @@ t_Gruvin9xModelData_v102::operator ModelData ()
c9x.expoData[i] = expoData[i]; c9x.expoData[i] = expoData[i];
for (int i=0; i<G9X_MAX_CURVE5; i++) { for (int i=0; i<G9X_MAX_CURVE5; i++) {
c9x.curves[i].custom = false;
c9x.curves[i].count = 5; c9x.curves[i].count = 5;
for (int j = 0; j < 5; j++) { for (int j = 0; j < 5; j++) {
c9x.curves[i].points[j].x = -100 + 50 * i; c9x.curves[i].points[j].x = -100 + 50 * i;
@ -786,7 +480,6 @@ t_Gruvin9xModelData_v102::operator ModelData ()
} }
} }
for (int i=0; i<G9X_MAX_CURVE9; i++) { for (int i=0; i<G9X_MAX_CURVE9; i++) {
c9x.curves[G9X_MAX_CURVE5 + i].custom = false;
c9x.curves[G9X_MAX_CURVE5 + i].count = 9; c9x.curves[G9X_MAX_CURVE5 + i].count = 9;
for (int j = 0; j < 9; j++) { for (int j = 0; j < 9; j++) {
c9x.curves[G9X_MAX_CURVE5 + i].points[j].x = -100 + 25 * i; c9x.curves[G9X_MAX_CURVE5 + i].points[j].x = -100 + 25 * i;
@ -836,7 +529,7 @@ t_Gruvin9xModelData_v103::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH); c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim; c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo; c9x.thrExpo = thrExpo;
c9x.trimInc = trimInc; c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay; c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter; c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol; c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -851,7 +544,6 @@ t_Gruvin9xModelData_v103::operator ModelData ()
c9x.expoData[i] = expoData[i]; c9x.expoData[i] = expoData[i];
for (int i=0; i<G9X_MAX_CURVE5; i++) { for (int i=0; i<G9X_MAX_CURVE5; i++) {
c9x.curves[i].custom = false;
c9x.curves[i].count = 5; c9x.curves[i].count = 5;
for (int j = 0; j < 5; j++) { for (int j = 0; j < 5; j++) {
c9x.curves[i].points[j].x = -100 + 50 * i; c9x.curves[i].points[j].x = -100 + 50 * i;
@ -859,7 +551,6 @@ t_Gruvin9xModelData_v103::operator ModelData ()
} }
} }
for (int i=0; i<G9X_MAX_CURVE9; i++) { for (int i=0; i<G9X_MAX_CURVE9; i++) {
c9x.curves[G9X_MAX_CURVE5 + i].custom = false;
c9x.curves[G9X_MAX_CURVE5 + i].count = 9; c9x.curves[G9X_MAX_CURVE5 + i].count = 9;
for (int j = 0; j < 9; j++) { for (int j = 0; j < 9; j++) {
c9x.curves[G9X_MAX_CURVE5 + i].points[j].x = -100 + 25 * i; c9x.curves[G9X_MAX_CURVE5 + i].points[j].x = -100 + 25 * i;
@ -909,7 +600,7 @@ t_Gruvin9xModelData_v105::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH); c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim; c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo; c9x.thrExpo = thrExpo;
c9x.trimInc = trimInc; c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay; c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter; c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol; c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -941,7 +632,6 @@ t_Gruvin9xModelData_v105::operator ModelData ()
c9x.expoData[i] = expoData[i]; c9x.expoData[i] = expoData[i];
for (int i=0; i<G9X_MAX_CURVE5; i++) { for (int i=0; i<G9X_MAX_CURVE5; i++) {
c9x.curves[i].custom = false;
c9x.curves[i].count = 5; c9x.curves[i].count = 5;
for (int j = 0; j < 5; j++) { for (int j = 0; j < 5; j++) {
c9x.curves[i].points[j].x = -100 + 50 * i; c9x.curves[i].points[j].x = -100 + 50 * i;
@ -949,7 +639,6 @@ t_Gruvin9xModelData_v105::operator ModelData ()
} }
} }
for (int i=0; i<G9X_MAX_CURVE9; i++) { for (int i=0; i<G9X_MAX_CURVE9; i++) {
c9x.curves[G9X_MAX_CURVE5 + i].custom = false;
c9x.curves[G9X_MAX_CURVE5 + i].count = 9; c9x.curves[G9X_MAX_CURVE5 + i].count = 9;
for (int j = 0; j < 9; j++) { for (int j = 0; j < 9; j++) {
c9x.curves[G9X_MAX_CURVE5 + i].points[j].x = -100 + 25 * i; c9x.curves[G9X_MAX_CURVE5 + i].points[j].x = -100 + 25 * i;
@ -1002,7 +691,7 @@ t_Gruvin9xModelData_v106::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH); c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim; c9x.thrTrim = thrTrim;
c9x.thrExpo = thrExpo; c9x.thrExpo = thrExpo;
c9x.trimInc = trimInc; c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay; c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter; c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol; c9x.moduleData[0].ppmPulsePol = pulsePol;
@ -1027,7 +716,6 @@ t_Gruvin9xModelData_v106::operator ModelData ()
c9x.expoData[i] = expoData[i]; c9x.expoData[i] = expoData[i];
for (int i=0; i<G9X_MAX_CURVE5; i++) { for (int i=0; i<G9X_MAX_CURVE5; i++) {
c9x.curves[i].custom = false;
c9x.curves[i].count = 5; c9x.curves[i].count = 5;
for (int j = 0; j < 5; j++) { for (int j = 0; j < 5; j++) {
c9x.curves[i].points[j].x = -100 + 50 * i; c9x.curves[i].points[j].x = -100 + 50 * i;
@ -1035,7 +723,6 @@ t_Gruvin9xModelData_v106::operator ModelData ()
} }
} }
for (int i=0; i<G9X_MAX_CURVE9; i++) { for (int i=0; i<G9X_MAX_CURVE9; i++) {
c9x.curves[G9X_MAX_CURVE5 + i].custom = false;
c9x.curves[G9X_MAX_CURVE5 + i].count = 9; c9x.curves[G9X_MAX_CURVE5 + i].count = 9;
for (int j = 0; j < 9; j++) { for (int j = 0; j < 9; j++) {
c9x.curves[G9X_MAX_CURVE5 + i].points[j].x = -100 + 25 * i; c9x.curves[G9X_MAX_CURVE5 + i].points[j].x = -100 + 25 * i;
@ -1055,99 +742,3 @@ t_Gruvin9xModelData_v106::operator ModelData ()
return c9x; return c9x;
} }
t_Gruvin9xModelData_v106::t_Gruvin9xModelData_v106(ModelData &c9x)
{
if (c9x.used) {
setEEPROMZString(name, c9x.name, sizeof(name));
timer1 = c9x.timers[0];
switch(c9x.moduleData[0].protocol) {
case PPM:
protocol = 0;
break;
case PXX_DJT:
protocol = 1;
break;
case DSM2:
protocol = 2;
break;
case SILV_A:
protocol = 3;
break;
case SILV_B:
protocol = 4;
break;
case SILV_C:
protocol = 5;
break;
case CTP1009:
protocol = 6;
break;
default:
protocol = 0;
EEPROMWarnings += QObject::tr("Er9x doesn't accept this protocol") + "\n";
// TODO more explicit warning for each protocol
break;
}
ppmNCH = (c9x.moduleData[0].channelsCount - 8) / 2;
thrTrim = c9x.thrTrim;
thrExpo = c9x.thrExpo;
trimInc = c9x.trimInc;
pulsePol = c9x.moduleData[0].ppmPulsePol;
extendedLimits = c9x.extendedLimits;
extendedTrims = c9x.extendedTrims;
spare2 = 0;
ppmDelay = (c9x.moduleData[0].ppmDelay - 300) / 50;
beepANACenter = c9x.beepANACenter;
timer2 = c9x.timers[1];
for (int i=0; i<G9X_MAX_MIXERS; i++)
mixData[i] = c9x.mixData[i];
for (int i=0; i<G9X_NUM_CHNOUT; i++)
limitData[i] = c9x.limitData[i];
for (int i=0; i<G9X_MAX_EXPOS; i++)
expoData[i] = c9x.expoData[i];
if (c9x.expoData[G9X_MAX_EXPOS].mode)
EEPROMWarnings += QObject::tr("gruvin9x only accepts %1 expos").arg(G9X_MAX_EXPOS) + "\n";
for (int i=0; i<G9X_MAX_CURVE5; i++)
if (c9x.curves[i].count==5) {
if (c9x.curves[i].custom)
EEPROMWarnings += QObject::tr("gruvin9x doesn't support custom curves as curve%1, curve as been exported as fixed point ").arg(i+1) + "\n";
for (int j=0; j<5; j++)
curves5[i][j] = c9x.curves[i].points[j].y;
} else {
EEPROMWarnings += QObject::tr("gruvin9x doesn't support curve with %1 point as curve%2 ").arg(c9x.curves[i].count).arg(i+1) + "\n";
}
for (int i=0; i<G9X_MAX_CURVE9; i++)
if (c9x.curves[i+G9X_MAX_CURVE5].count==9) {
if (c9x.curves[i+G9X_MAX_CURVE5].custom)
EEPROMWarnings += QObject::tr("gruvin9x doesn't support custom curves as curve%1, curve as been exported as fixed point ").arg(i+1+G9X_MAX_CURVE5) + "\n";
for (int j=0; j<9; j++)
curves9[i][j] = c9x.curves[i+G9X_MAX_CURVE5].points[j].y;
} else {
EEPROMWarnings += QObject::tr("gruvin9x doesn't support curve with %1 point as curve%2 ").arg(c9x.curves[i+G9X_MAX_CURVE5].count).arg(i+1+G9X_MAX_CURVE5) + "\n";
}
for (int i=0; i<G9X_NUM_CSW; i++)
customSw[i] = c9x.customSw[i];
for (int i=0; i<G9X_NUM_FSW; i++)
funcSw[i] = c9x.funcSw[i];
for (int i=0; i<G9X_NUM_CHNOUT; i++)
safetySw[i] = c9x.safetySw[i];
swashR = c9x.swashRingData;
for (int i=0; i<G9X_MAX_PHASES; i++) {
PhaseData phase = c9x.phaseData[i];
for (int j=0; j<NUM_STICKS; j++) {
if (phase.trimRef[j] >= 0) {
phase.trim[j] = 501 + phase.trimRef[j] - (phase.trimRef[j] >= i ? 1 : 0);
}
else {
phase.trim[j] = std::max(-500, std::min(500, phase.trim[j]));
}
}
phaseData[i] = phase;
}
frsky = c9x.frsky;
}
else {
memset(this, 0, sizeof(t_Gruvin9xModelData_v106));
}
}

View file

@ -38,8 +38,6 @@ PACK(typedef struct t_Gruvin9xTrainerMix_v104 {
operator TrainerMix(); operator TrainerMix();
t_Gruvin9xTrainerMix_v104() { memset(this, 0, sizeof(t_Gruvin9xTrainerMix_v104)); } t_Gruvin9xTrainerMix_v104() { memset(this, 0, sizeof(t_Gruvin9xTrainerMix_v104)); }
t_Gruvin9xTrainerMix_v104(TrainerMix&);
}) Gruvin9xTrainerMix_v104; // }) Gruvin9xTrainerMix_v104; //
PACK(typedef struct t_Gruvin9xTrainerData_v103 { PACK(typedef struct t_Gruvin9xTrainerData_v103 {
@ -55,8 +53,6 @@ PACK(typedef struct t_Gruvin9xTrainerData_v104 {
operator TrainerData(); operator TrainerData();
t_Gruvin9xTrainerData_v104() { memset(this, 0, sizeof(t_Gruvin9xTrainerData_v104)); } t_Gruvin9xTrainerData_v104() { memset(this, 0, sizeof(t_Gruvin9xTrainerData_v104)); }
t_Gruvin9xTrainerData_v104(TrainerData&);
}) Gruvin9xTrainerData_v104; }) Gruvin9xTrainerData_v104;
PACK(typedef struct t_Gruvin9xFrSkyRSSIAlarm { PACK(typedef struct t_Gruvin9xFrSkyRSSIAlarm {
@ -136,8 +132,6 @@ PACK(typedef struct t_Gruvin9xGeneral_v104 {
operator GeneralSettings(); operator GeneralSettings();
t_Gruvin9xGeneral_v104() { memset(this, 0, sizeof(t_Gruvin9xGeneral_v104)); } t_Gruvin9xGeneral_v104() { memset(this, 0, sizeof(t_Gruvin9xGeneral_v104)); }
t_Gruvin9xGeneral_v104(GeneralSettings&);
}) Gruvin9xGeneral_v104; }) Gruvin9xGeneral_v104;
typedef Gruvin9xGeneral_v104 Gruvin9xGeneral; typedef Gruvin9xGeneral_v104 Gruvin9xGeneral;
@ -156,8 +150,6 @@ PACK(typedef struct t_Gruvin9xExpoData {
operator ExpoData(); operator ExpoData();
t_Gruvin9xExpoData(); t_Gruvin9xExpoData();
t_Gruvin9xExpoData(ExpoData&);
}) Gruvin9xExpoData; }) Gruvin9xExpoData;
PACK(typedef struct t_Gruvin9xLimitData { PACK(typedef struct t_Gruvin9xLimitData {
@ -168,8 +160,6 @@ PACK(typedef struct t_Gruvin9xLimitData {
operator LimitData(); operator LimitData();
t_Gruvin9xLimitData(); t_Gruvin9xLimitData();
t_Gruvin9xLimitData(LimitData&);
}) Gruvin9xLimitData; }) Gruvin9xLimitData;
#define MLTPX_ADD 0 #define MLTPX_ADD 0
@ -194,8 +184,6 @@ PACK(typedef struct t_Gruvin9xMixData {
operator MixData(); operator MixData();
t_Gruvin9xMixData(); t_Gruvin9xMixData();
t_Gruvin9xMixData(MixData&);
}) Gruvin9xMixData; }) Gruvin9xMixData;
PACK(typedef struct t_Gruvin9xCustomSwData { // Custom Switches data PACK(typedef struct t_Gruvin9xCustomSwData { // Custom Switches data
@ -205,8 +193,6 @@ PACK(typedef struct t_Gruvin9xCustomSwData { // Custom Switches data
operator CustomSwData(); operator CustomSwData();
t_Gruvin9xCustomSwData() { memset(this, 0, sizeof(t_Gruvin9xCustomSwData)); } t_Gruvin9xCustomSwData() { memset(this, 0, sizeof(t_Gruvin9xCustomSwData)); }
t_Gruvin9xCustomSwData(CustomSwData&);
}) Gruvin9xCustomSwData; }) Gruvin9xCustomSwData;
PACK(typedef struct t_Gruvin9xSafetySwData { // Safety Switches data PACK(typedef struct t_Gruvin9xSafetySwData { // Safety Switches data
@ -215,8 +201,6 @@ PACK(typedef struct t_Gruvin9xSafetySwData { // Safety Switches data
operator SafetySwData(); operator SafetySwData();
t_Gruvin9xSafetySwData() { memset(this, 0, sizeof(t_Gruvin9xSafetySwData)); } t_Gruvin9xSafetySwData() { memset(this, 0, sizeof(t_Gruvin9xSafetySwData)); }
t_Gruvin9xSafetySwData(SafetySwData&);
}) Gruvin9xSafetySwData; }) Gruvin9xSafetySwData;
PACK(typedef struct t_Gruvin9xFuncSwData { // Function Switches data PACK(typedef struct t_Gruvin9xFuncSwData { // Function Switches data
@ -225,8 +209,6 @@ PACK(typedef struct t_Gruvin9xFuncSwData { // Function Switches data
operator FuncSwData(); operator FuncSwData();
t_Gruvin9xFuncSwData() { memset(this, 0, sizeof(t_Gruvin9xFuncSwData)); } t_Gruvin9xFuncSwData() { memset(this, 0, sizeof(t_Gruvin9xFuncSwData)); }
t_Gruvin9xFuncSwData(FuncSwData&);
}) Gruvin9xFuncSwData; }) Gruvin9xFuncSwData;
PACK(typedef struct t_Gruvin9xFrSkyChannelData { PACK(typedef struct t_Gruvin9xFrSkyChannelData {
@ -242,17 +224,13 @@ PACK(typedef struct t_Gruvin9xFrSkyChannelData {
operator FrSkyChannelData(); operator FrSkyChannelData();
t_Gruvin9xFrSkyChannelData(); t_Gruvin9xFrSkyChannelData();
t_Gruvin9xFrSkyChannelData(FrSkyChannelData&);
}) Gruvin9xFrSkyChannelData; }) Gruvin9xFrSkyChannelData;
PACK(typedef struct t_Gruvin9xFrSkyData { PACK(typedef struct t_Gruvin9xFrSkyData {
Gruvin9xFrSkyChannelData channels[2]; Gruvin9xFrSkyChannelData channels[2];
operator FrSkyData();
t_Gruvin9xFrSkyData();
t_Gruvin9xFrSkyData(FrSkyData&);
operator FrSkyData();
t_Gruvin9xFrSkyData();
}) Gruvin9xFrSkyData; }) Gruvin9xFrSkyData;
PACK(typedef struct t_Gruvin9xSwashRingData { // Swash Ring data PACK(typedef struct t_Gruvin9xSwashRingData { // Swash Ring data
@ -265,8 +243,6 @@ PACK(typedef struct t_Gruvin9xSwashRingData { // Swash Ring data
operator SwashRingData(); operator SwashRingData();
t_Gruvin9xSwashRingData(); t_Gruvin9xSwashRingData();
t_Gruvin9xSwashRingData(SwashRingData&);
}) Gruvin9xSwashRingData; }) Gruvin9xSwashRingData;
PACK(typedef struct t_Gruvin9xPhaseData_v102 { PACK(typedef struct t_Gruvin9xPhaseData_v102 {
@ -291,7 +267,6 @@ PACK(typedef struct t_Gruvin9xPhaseData_v106 {
operator PhaseData(); operator PhaseData();
t_Gruvin9xPhaseData_v106() { memset(this, 0, sizeof(t_Gruvin9xPhaseData_v106)); } t_Gruvin9xPhaseData_v106() { memset(this, 0, sizeof(t_Gruvin9xPhaseData_v106)); }
t_Gruvin9xPhaseData_v106(PhaseData &eepe);
}) Gruvin9xPhaseData_v106; }) Gruvin9xPhaseData_v106;
PACK(typedef struct t_Gruvin9xTimerData { PACK(typedef struct t_Gruvin9xTimerData {
@ -301,7 +276,6 @@ PACK(typedef struct t_Gruvin9xTimerData {
operator TimerData(); operator TimerData();
t_Gruvin9xTimerData() { memset(this, 0, sizeof(t_Gruvin9xTimerData)); } t_Gruvin9xTimerData() { memset(this, 0, sizeof(t_Gruvin9xTimerData)); }
t_Gruvin9xTimerData(TimerData &eepe);
}) Gruvin9xTimerData; }) Gruvin9xTimerData;
#define G9X_MAX_PHASES 5 #define G9X_MAX_PHASES 5
@ -410,8 +384,6 @@ PACK(typedef struct t_Gruvin9xModelData_v105 {
operator ModelData(); operator ModelData();
t_Gruvin9xModelData_v105() { memset(this, 0, sizeof(t_Gruvin9xModelData_v105)); } t_Gruvin9xModelData_v105() { memset(this, 0, sizeof(t_Gruvin9xModelData_v105)); }
t_Gruvin9xModelData_v105(ModelData&);
}) Gruvin9xModelData_v105; }) Gruvin9xModelData_v105;
PACK(typedef struct t_Gruvin9xModelData_v106 { PACK(typedef struct t_Gruvin9xModelData_v106 {
@ -443,11 +415,8 @@ PACK(typedef struct t_Gruvin9xModelData_v106 {
operator ModelData(); operator ModelData();
t_Gruvin9xModelData_v106() { memset(this, 0, sizeof(t_Gruvin9xModelData_v106)); } t_Gruvin9xModelData_v106() { memset(this, 0, sizeof(t_Gruvin9xModelData_v106)); }
t_Gruvin9xModelData_v106(ModelData&);
}) Gruvin9xModelData_v106; }) Gruvin9xModelData_v106;
typedef Gruvin9xModelData_v106 Gruvin9xModelData; typedef Gruvin9xModelData_v106 Gruvin9xModelData;
#endif #endif
/*eof*/

View file

@ -47,7 +47,7 @@ const char * Gruvin9xInterface::getName()
const int Gruvin9xInterface::getEEpromSize() const int Gruvin9xInterface::getEEpromSize()
{ {
if (board == BOARD_STOCK) { if (board == BOARD_STOCK) {
QSettings settings("companion9x", "companion9x"); QSettings settings;
QString avrMCU = settings.value("mcu", QString("m64")).toString(); QString avrMCU = settings.value("mcu", QString("m64")).toString();
if (avrMCU==QString("m128")) { if (avrMCU==QString("m128")) {
return EESIZE_STOCK*2; return EESIZE_STOCK*2;
@ -200,62 +200,20 @@ bool Gruvin9xInterface::loadBackup(RadioData &radioData, uint8_t *eeprom, int es
int Gruvin9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version) int Gruvin9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version)
{ {
EEPROMWarnings.clear(); std::cout << "NO!\n";
// TODO an error
int size = getEEpromSize(); return 0;
efile->EeFsCreate(eeprom, size, BOARD_STOCK);
Gruvin9xGeneral gruvin9xGeneral(radioData.generalSettings);
int sz = efile->writeRlc2(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&gruvin9xGeneral, sizeof(Gruvin9xGeneral));
if(sz != sizeof(Gruvin9xGeneral)) {
return 0;
}
for (int i=0; i<getMaxModels(); i++) {
if (!radioData.models[i].isempty()) {
ModelData model = radioData.models[i];
if (1/*version < */) {
applyStickModeToModel(model, radioData.generalSettings.stickMode+1);
}
Gruvin9xModelData gruvin9xModel(model);
sz = efile->writeRlc2(FILE_MODEL(i), FILE_TYP_MODEL, (uint8_t*)&gruvin9xModel, sizeof(Gruvin9xModelData));
if(sz != sizeof(Gruvin9xModelData)) {
return 0;
}
}
}
return size;
} }
int Gruvin9xInterface::getSize(ModelData &model) int Gruvin9xInterface::getSize(ModelData &model)
{ {
if (model.isempty()) return 0;
return 0;
uint8_t tmp[EESIZE_GRUVIN9X];
efile->EeFsCreate(tmp, EESIZE_GRUVIN9X, BOARD_STOCK);
Gruvin9xModelData gruvin9xModel(model);
int sz = efile->writeRlc2(0, FILE_TYP_MODEL, (uint8_t*)&gruvin9xModel, sizeof(Gruvin9xModelData));
if(sz != sizeof(Gruvin9xModelData)) {
return -1;
}
return efile->size(0);
} }
int Gruvin9xInterface::getSize(GeneralSettings &settings) int Gruvin9xInterface::getSize(GeneralSettings &settings)
{ {
uint8_t tmp[EESIZE_GRUVIN9X]; return 0;
efile->EeFsCreate(tmp, EESIZE_GRUVIN9X, BOARD_STOCK);
Gruvin9xGeneral gruvin9xGeneral(settings);
int sz = efile->writeRlc1(0, FILE_TYP_GENERAL, (uint8_t*)&gruvin9xGeneral, sizeof(gruvin9xGeneral));
if(sz != sizeof(gruvin9xGeneral)) {
return -1;
}
return efile->size(0);
} }
int Gruvin9xInterface::getCapability(const Capability capability) int Gruvin9xInterface::getCapability(const Capability capability)
@ -263,10 +221,6 @@ int Gruvin9xInterface::getCapability(const Capability capability)
switch (capability) { switch (capability) {
case OwnerName: case OwnerName:
return 0; return 0;
case NumCurves5:
return G9X_MAX_CURVE5;
case NumCurves9:
return G9X_MAX_CURVE9;
case Mixes: case Mixes:
return G9X_MAX_MIXERS; return G9X_MAX_MIXERS;
case FlightPhases: case FlightPhases:
@ -297,7 +251,6 @@ int Gruvin9xInterface::getCapability(const Capability capability)
return true; return true;
case OffsetWeight: case OffsetWeight:
return 125; return 125;
case HasExpoCurves:
case HasContrast: case HasContrast:
return true; return true;
case Telemetry: case Telemetry:

File diff suppressed because it is too large Load diff

View file

@ -32,7 +32,6 @@ PACK(typedef struct t_Open9xGruvin9xPhaseData_v207 {
int16_t rotaryEncoders[2]; int16_t rotaryEncoders[2];
operator PhaseData(); operator PhaseData();
t_Open9xGruvin9xPhaseData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xPhaseData_v207)); } t_Open9xGruvin9xPhaseData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xPhaseData_v207)); }
t_Open9xGruvin9xPhaseData_v207(PhaseData &eepe);
}) Open9xGruvin9xPhaseData_v207; }) Open9xGruvin9xPhaseData_v207;
PACK(typedef struct t_Open9xGruvin9xPhaseData_v208 { PACK(typedef struct t_Open9xGruvin9xPhaseData_v208 {
@ -44,7 +43,6 @@ PACK(typedef struct t_Open9xGruvin9xPhaseData_v208 {
int16_t rotaryEncoders[2]; int16_t rotaryEncoders[2];
operator PhaseData(); operator PhaseData();
t_Open9xGruvin9xPhaseData_v208() { memset(this, 0, sizeof(t_Open9xGruvin9xPhaseData_v208)); } t_Open9xGruvin9xPhaseData_v208() { memset(this, 0, sizeof(t_Open9xGruvin9xPhaseData_v208)); }
t_Open9xGruvin9xPhaseData_v208(PhaseData &eepe);
}) Open9xGruvin9xPhaseData_v208; }) Open9xGruvin9xPhaseData_v208;
PACK(typedef struct t_Open9xGruvin9xMixData_v207 { PACK(typedef struct t_Open9xGruvin9xMixData_v207 {
@ -66,8 +64,6 @@ PACK(typedef struct t_Open9xGruvin9xMixData_v207 {
operator MixData(); operator MixData();
t_Open9xGruvin9xMixData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v207)); } t_Open9xGruvin9xMixData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v207)); }
t_Open9xGruvin9xMixData_v207(MixData&);
}) Open9xGruvin9xMixData_v207; }) Open9xGruvin9xMixData_v207;
PACK(typedef struct t_Open9xGruvin9xMixData_v209 { PACK(typedef struct t_Open9xGruvin9xMixData_v209 {
@ -89,8 +85,6 @@ PACK(typedef struct t_Open9xGruvin9xMixData_v209 {
operator MixData(); operator MixData();
t_Open9xGruvin9xMixData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v209)); } t_Open9xGruvin9xMixData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v209)); }
t_Open9xGruvin9xMixData_v209(MixData&);
}) Open9xGruvin9xMixData_v209; }) Open9xGruvin9xMixData_v209;
PACK(typedef struct t_Open9xGruvin9xMixData_v211 { PACK(typedef struct t_Open9xGruvin9xMixData_v211 {
@ -114,8 +108,6 @@ PACK(typedef struct t_Open9xGruvin9xMixData_v211 {
operator MixData(); operator MixData();
t_Open9xGruvin9xMixData_v211() { memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v211)); } t_Open9xGruvin9xMixData_v211() { memset(this, 0, sizeof(t_Open9xGruvin9xMixData_v211)); }
t_Open9xGruvin9xMixData_v211(MixData&);
}) Open9xGruvin9xMixData_v211; }) Open9xGruvin9xMixData_v211;
PACK(typedef struct t_Open9xGruvin9xCustomSwData_v207 { // Custom Switches data PACK(typedef struct t_Open9xGruvin9xCustomSwData_v207 { // Custom Switches data
@ -125,10 +117,8 @@ PACK(typedef struct t_Open9xGruvin9xCustomSwData_v207 { // Custom Switches data
operator CustomSwData(); operator CustomSwData();
t_Open9xGruvin9xCustomSwData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xCustomSwData_v207)); } t_Open9xGruvin9xCustomSwData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xCustomSwData_v207)); }
t_Open9xGruvin9xCustomSwData_v207(CustomSwData&);
int8_t fromSource(RawSource source); int8_t fromSource(RawSource source);
RawSource toSource(int8_t value); RawSource toSource(int8_t value);
}) Open9xGruvin9xCustomSwData_v207; }) Open9xGruvin9xCustomSwData_v207;
PACK(typedef struct t_Open9xGruvin9xCustomSwData_v209 { // Custom Switches data PACK(typedef struct t_Open9xGruvin9xCustomSwData_v209 { // Custom Switches data
@ -138,10 +128,8 @@ PACK(typedef struct t_Open9xGruvin9xCustomSwData_v209 { // Custom Switches data
operator CustomSwData(); operator CustomSwData();
t_Open9xGruvin9xCustomSwData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xCustomSwData_v209)); } t_Open9xGruvin9xCustomSwData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xCustomSwData_v209)); }
t_Open9xGruvin9xCustomSwData_v209(CustomSwData&);
int8_t fromSource(RawSource source); int8_t fromSource(RawSource source);
RawSource toSource(int8_t value); RawSource toSource(int8_t value);
}) Open9xGruvin9xCustomSwData_v209; }) Open9xGruvin9xCustomSwData_v209;
PACK(typedef struct t_Open9xGruvin9xFuncSwData_v203 { // Function Switches data PACK(typedef struct t_Open9xGruvin9xFuncSwData_v203 { // Function Switches data
@ -151,8 +139,6 @@ PACK(typedef struct t_Open9xGruvin9xFuncSwData_v203 { // Function Switches data
operator FuncSwData(); operator FuncSwData();
t_Open9xGruvin9xFuncSwData_v203() { memset(this, 0, sizeof(t_Open9xGruvin9xFuncSwData_v203)); } t_Open9xGruvin9xFuncSwData_v203() { memset(this, 0, sizeof(t_Open9xGruvin9xFuncSwData_v203)); }
t_Open9xGruvin9xFuncSwData_v203(FuncSwData&);
}) Open9xGruvin9xFuncSwData_v203; }) Open9xGruvin9xFuncSwData_v203;
PACK(typedef struct t_Open9xGruvin9xFuncSwData_v210 { // Function Switches data PACK(typedef struct t_Open9xGruvin9xFuncSwData_v210 { // Function Switches data
@ -163,8 +149,6 @@ PACK(typedef struct t_Open9xGruvin9xFuncSwData_v210 { // Function Switches data
operator FuncSwData(); operator FuncSwData();
t_Open9xGruvin9xFuncSwData_v210() { memset(this, 0, sizeof(t_Open9xGruvin9xFuncSwData_v210)); } t_Open9xGruvin9xFuncSwData_v210() { memset(this, 0, sizeof(t_Open9xGruvin9xFuncSwData_v210)); }
t_Open9xGruvin9xFuncSwData_v210(FuncSwData&);
}) Open9xGruvin9xFuncSwData_v210; }) Open9xGruvin9xFuncSwData_v210;
PACK(typedef struct t_Open9xGruvin9xSwashRingData_v208 { // Swash Ring data PACK(typedef struct t_Open9xGruvin9xSwashRingData_v208 { // Swash Ring data
@ -177,8 +161,6 @@ PACK(typedef struct t_Open9xGruvin9xSwashRingData_v208 { // Swash Ring data
operator SwashRingData(); operator SwashRingData();
t_Open9xGruvin9xSwashRingData_v208() { memset(this, 0, sizeof(t_Open9xGruvin9xSwashRingData_v208)); } t_Open9xGruvin9xSwashRingData_v208() { memset(this, 0, sizeof(t_Open9xGruvin9xSwashRingData_v208)); }
t_Open9xGruvin9xSwashRingData_v208(SwashRingData&);
}) Open9xGruvin9xSwashRingData_v208; }) Open9xGruvin9xSwashRingData_v208;
PACK(typedef struct t_Open9xGruvin9xSwashRingData_v209 { // Swash Ring data PACK(typedef struct t_Open9xGruvin9xSwashRingData_v209 { // Swash Ring data
@ -191,8 +173,6 @@ PACK(typedef struct t_Open9xGruvin9xSwashRingData_v209 { // Swash Ring data
operator SwashRingData(); operator SwashRingData();
t_Open9xGruvin9xSwashRingData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xSwashRingData_v209)); } t_Open9xGruvin9xSwashRingData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xSwashRingData_v209)); }
t_Open9xGruvin9xSwashRingData_v209(SwashRingData&);
}) Open9xGruvin9xSwashRingData_v209; }) Open9xGruvin9xSwashRingData_v209;
PACK(typedef struct t_Open9xGruvin9xModelData_v207 { PACK(typedef struct t_Open9xGruvin9xModelData_v207 {
@ -227,8 +207,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v207 {
operator ModelData(); operator ModelData();
t_Open9xGruvin9xModelData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v207)); } t_Open9xGruvin9xModelData_v207() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v207)); }
t_Open9xGruvin9xModelData_v207(ModelData&);
}) Open9xGruvin9xModelData_v207; }) Open9xGruvin9xModelData_v207;
PACK(typedef struct t_Open9xGruvin9xModelData_v208 { PACK(typedef struct t_Open9xGruvin9xModelData_v208 {
@ -268,8 +246,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v208 {
operator ModelData(); operator ModelData();
t_Open9xGruvin9xModelData_v208() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v208)); } t_Open9xGruvin9xModelData_v208() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v208)); }
t_Open9xGruvin9xModelData_v208(ModelData&);
}) Open9xGruvin9xModelData_v208; }) Open9xGruvin9xModelData_v208;
PACK(typedef struct t_Open9xGruvin9xModelData_v209 { PACK(typedef struct t_Open9xGruvin9xModelData_v209 {
@ -310,8 +286,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v209 {
operator ModelData(); operator ModelData();
t_Open9xGruvin9xModelData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v209)); } t_Open9xGruvin9xModelData_v209() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v209)); }
t_Open9xGruvin9xModelData_v209(ModelData&);
}) Open9xGruvin9xModelData_v209; }) Open9xGruvin9xModelData_v209;
PACK(typedef struct t_Open9xGruvin9xModelData_v210 { PACK(typedef struct t_Open9xGruvin9xModelData_v210 {
@ -350,8 +324,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v210 {
operator ModelData(); operator ModelData();
t_Open9xGruvin9xModelData_v210() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v210)); } t_Open9xGruvin9xModelData_v210() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v210)); }
t_Open9xGruvin9xModelData_v210(ModelData&);
}) Open9xGruvin9xModelData_v210; }) Open9xGruvin9xModelData_v210;
PACK(typedef struct t_Open9xGruvin9xModelData_v211 { PACK(typedef struct t_Open9xGruvin9xModelData_v211 {
@ -388,8 +360,6 @@ PACK(typedef struct t_Open9xGruvin9xModelData_v211 {
operator ModelData(); operator ModelData();
t_Open9xGruvin9xModelData_v211() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v211)); } t_Open9xGruvin9xModelData_v211() { memset(this, 0, sizeof(t_Open9xGruvin9xModelData_v211)); }
t_Open9xGruvin9xModelData_v211(ModelData&);
}) Open9xGruvin9xModelData_v211; }) Open9xGruvin9xModelData_v211;
#endif #endif

File diff suppressed because it is too large Load diff

View file

@ -36,7 +36,6 @@ PACK(typedef struct t_Open9xArmTimerData_v202 {
operator TimerData(); operator TimerData();
t_Open9xArmTimerData_v202() { memset(this, 0, sizeof(t_Open9xArmTimerData_v202)); } t_Open9xArmTimerData_v202() { memset(this, 0, sizeof(t_Open9xArmTimerData_v202)); }
t_Open9xArmTimerData_v202(TimerData &eepe);
}) Open9xArmTimerData_v202; }) Open9xArmTimerData_v202;
PACK(typedef struct t_Open9xArmExpoData_v208 { PACK(typedef struct t_Open9xArmExpoData_v208 {
@ -50,8 +49,6 @@ PACK(typedef struct t_Open9xArmExpoData_v208 {
operator ExpoData(); operator ExpoData();
t_Open9xArmExpoData_v208() { memset(this, 0, sizeof(t_Open9xArmExpoData_v208)); } t_Open9xArmExpoData_v208() { memset(this, 0, sizeof(t_Open9xArmExpoData_v208)); }
t_Open9xArmExpoData_v208(ExpoData&);
}) Open9xArmExpoData_v208; }) Open9xArmExpoData_v208;
PACK(typedef struct t_Open9xArmExpoData_v210 { PACK(typedef struct t_Open9xArmExpoData_v210 {
@ -67,8 +64,6 @@ PACK(typedef struct t_Open9xArmExpoData_v210 {
operator ExpoData(); operator ExpoData();
t_Open9xArmExpoData_v210() { memset(this, 0, sizeof(t_Open9xArmExpoData_v210)); } t_Open9xArmExpoData_v210() { memset(this, 0, sizeof(t_Open9xArmExpoData_v210)); }
t_Open9xArmExpoData_v210(ExpoData&);
}) Open9xArmExpoData_v210; }) Open9xArmExpoData_v210;
PACK(typedef struct t_Open9xArmExpoData_v212 { PACK(typedef struct t_Open9xArmExpoData_v212 {
@ -83,8 +78,6 @@ PACK(typedef struct t_Open9xArmExpoData_v212 {
operator ExpoData(); operator ExpoData();
t_Open9xArmExpoData_v212() { memset(this, 0, sizeof(t_Open9xArmExpoData_v212)); } t_Open9xArmExpoData_v212() { memset(this, 0, sizeof(t_Open9xArmExpoData_v212)); }
t_Open9xArmExpoData_v212(ExpoData&);
}) Open9xArmExpoData_v212; }) Open9xArmExpoData_v212;
PACK(typedef struct t_Open9xArmMixData_v208 { PACK(typedef struct t_Open9xArmMixData_v208 {
@ -106,8 +99,6 @@ PACK(typedef struct t_Open9xArmMixData_v208 {
operator MixData(); operator MixData();
t_Open9xArmMixData_v208() { memset(this, 0, sizeof(t_Open9xArmMixData_v208)); } t_Open9xArmMixData_v208() { memset(this, 0, sizeof(t_Open9xArmMixData_v208)); }
t_Open9xArmMixData_v208(MixData&);
}) Open9xArmMixData_v208; }) Open9xArmMixData_v208;
PACK(typedef struct t_Open9xArmMixData_v209 { PACK(typedef struct t_Open9xArmMixData_v209 {
@ -129,8 +120,6 @@ PACK(typedef struct t_Open9xArmMixData_v209 {
operator MixData(); operator MixData();
t_Open9xArmMixData_v209() { memset(this, 0, sizeof(t_Open9xArmMixData_v209)); } t_Open9xArmMixData_v209() { memset(this, 0, sizeof(t_Open9xArmMixData_v209)); }
t_Open9xArmMixData_v209(MixData&);
}) Open9xArmMixData_v209; }) Open9xArmMixData_v209;
PACK(typedef struct t_Open9xArmMixData_v210 { PACK(typedef struct t_Open9xArmMixData_v210 {
@ -154,8 +143,6 @@ PACK(typedef struct t_Open9xArmMixData_v210 {
operator MixData(); operator MixData();
t_Open9xArmMixData_v210() { memset(this, 0, sizeof(t_Open9xArmMixData_v210)); } t_Open9xArmMixData_v210() { memset(this, 0, sizeof(t_Open9xArmMixData_v210)); }
t_Open9xArmMixData_v210(MixData&);
}) Open9xArmMixData_v210; }) Open9xArmMixData_v210;
PACK(typedef struct t_Open9xArmMixData_v212 { PACK(typedef struct t_Open9xArmMixData_v212 {
@ -180,8 +167,6 @@ PACK(typedef struct t_Open9xArmMixData_v212 {
operator MixData(); operator MixData();
t_Open9xArmMixData_v212() { memset(this, 0, sizeof(t_Open9xArmMixData_v212)); } t_Open9xArmMixData_v212() { memset(this, 0, sizeof(t_Open9xArmMixData_v212)); }
t_Open9xArmMixData_v212(MixData&);
}) Open9xArmMixData_v212; }) Open9xArmMixData_v212;
PACK(typedef struct t_Open9xArmPhaseData_v208 { PACK(typedef struct t_Open9xArmPhaseData_v208 {
@ -192,7 +177,6 @@ PACK(typedef struct t_Open9xArmPhaseData_v208 {
uint8_t fadeOut:4; uint8_t fadeOut:4;
operator PhaseData(); operator PhaseData();
t_Open9xArmPhaseData_v208() { memset(this, 0, sizeof(t_Open9xArmPhaseData_v208)); } t_Open9xArmPhaseData_v208() { memset(this, 0, sizeof(t_Open9xArmPhaseData_v208)); }
t_Open9xArmPhaseData_v208(PhaseData &eepe);
}) Open9xArmPhaseData_v208; }) Open9xArmPhaseData_v208;
PACK(typedef struct t_Open9xArmPhaseData_v212 { PACK(typedef struct t_Open9xArmPhaseData_v212 {
@ -204,7 +188,6 @@ PACK(typedef struct t_Open9xArmPhaseData_v212 {
int16_t rotaryEncoders[1]; int16_t rotaryEncoders[1];
operator PhaseData(); operator PhaseData();
t_Open9xArmPhaseData_v212() { memset(this, 0, sizeof(t_Open9xArmPhaseData_v212)); } t_Open9xArmPhaseData_v212() { memset(this, 0, sizeof(t_Open9xArmPhaseData_v212)); }
t_Open9xArmPhaseData_v212(PhaseData &eepe);
}) Open9xArmPhaseData_v212; }) Open9xArmPhaseData_v212;
PACK(typedef struct t_Open9xArmCustomSwData_v208 { // Custom Switches data PACK(typedef struct t_Open9xArmCustomSwData_v208 { // Custom Switches data
@ -214,7 +197,6 @@ PACK(typedef struct t_Open9xArmCustomSwData_v208 { // Custom Switches data
operator CustomSwData(); operator CustomSwData();
t_Open9xArmCustomSwData_v208() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v208)); } t_Open9xArmCustomSwData_v208() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v208)); }
t_Open9xArmCustomSwData_v208(CustomSwData&);
}) Open9xArmCustomSwData_v208; }) Open9xArmCustomSwData_v208;
PACK(typedef struct t_Open9xArmCustomSwData_v209 { // Custom Switches data PACK(typedef struct t_Open9xArmCustomSwData_v209 { // Custom Switches data
@ -224,7 +206,6 @@ PACK(typedef struct t_Open9xArmCustomSwData_v209 { // Custom Switches data
operator CustomSwData(); operator CustomSwData();
t_Open9xArmCustomSwData_v209() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v209)); } t_Open9xArmCustomSwData_v209() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v209)); }
t_Open9xArmCustomSwData_v209(CustomSwData&);
}) Open9xArmCustomSwData_v209; }) Open9xArmCustomSwData_v209;
PACK(typedef struct t_Open9xArmCustomSwData_v210 { // Custom Switches data PACK(typedef struct t_Open9xArmCustomSwData_v210 { // Custom Switches data
@ -236,7 +217,6 @@ PACK(typedef struct t_Open9xArmCustomSwData_v210 { // Custom Switches data
operator CustomSwData(); operator CustomSwData();
t_Open9xArmCustomSwData_v210() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v210)); } t_Open9xArmCustomSwData_v210() { memset(this, 0, sizeof(t_Open9xArmCustomSwData_v210)); }
t_Open9xArmCustomSwData_v210(CustomSwData&);
}) Open9xArmCustomSwData_v210; }) Open9xArmCustomSwData_v210;
PACK(typedef struct t_Open9xArmFuncSwData_v208 { // Function Switches data PACK(typedef struct t_Open9xArmFuncSwData_v208 { // Function Switches data
@ -246,8 +226,6 @@ PACK(typedef struct t_Open9xArmFuncSwData_v208 { // Function Switches data
operator FuncSwData(); operator FuncSwData();
t_Open9xArmFuncSwData_v208() { memset(this, 0, sizeof(t_Open9xArmFuncSwData_v208)); } t_Open9xArmFuncSwData_v208() { memset(this, 0, sizeof(t_Open9xArmFuncSwData_v208)); }
t_Open9xArmFuncSwData_v208(FuncSwData&);
}) Open9xArmFuncSwData_v208; }) Open9xArmFuncSwData_v208;
PACK(typedef struct t_Open9xArmFuncSwData_v210 { // Function Switches data PACK(typedef struct t_Open9xArmFuncSwData_v210 { // Function Switches data
@ -257,8 +235,6 @@ PACK(typedef struct t_Open9xArmFuncSwData_v210 { // Function Switches data
operator FuncSwData(); operator FuncSwData();
t_Open9xArmFuncSwData_v210() { memset(this, 0, sizeof(t_Open9xArmFuncSwData_v210)); } t_Open9xArmFuncSwData_v210() { memset(this, 0, sizeof(t_Open9xArmFuncSwData_v210)); }
t_Open9xArmFuncSwData_v210(FuncSwData&);
}) Open9xArmFuncSwData_v210; }) Open9xArmFuncSwData_v210;
PACK(typedef struct t_Open9xArmFuncSwData_v211 { // Function Switches data PACK(typedef struct t_Open9xArmFuncSwData_v211 { // Function Switches data
@ -270,8 +246,6 @@ PACK(typedef struct t_Open9xArmFuncSwData_v211 { // Function Switches data
operator FuncSwData(); operator FuncSwData();
t_Open9xArmFuncSwData_v211() { memset(this, 0, sizeof(t_Open9xArmFuncSwData_v211)); } t_Open9xArmFuncSwData_v211() { memset(this, 0, sizeof(t_Open9xArmFuncSwData_v211)); }
t_Open9xArmFuncSwData_v211(FuncSwData&);
}) Open9xArmFuncSwData_v211; }) Open9xArmFuncSwData_v211;
PACK(typedef struct t_Open9xArmSwashRingData_v208 { // Swash Ring data PACK(typedef struct t_Open9xArmSwashRingData_v208 { // Swash Ring data
@ -284,8 +258,6 @@ PACK(typedef struct t_Open9xArmSwashRingData_v208 { // Swash Ring data
operator SwashRingData(); operator SwashRingData();
t_Open9xArmSwashRingData_v208() { memset(this, 0, sizeof(t_Open9xArmSwashRingData_v208)); } t_Open9xArmSwashRingData_v208() { memset(this, 0, sizeof(t_Open9xArmSwashRingData_v208)); }
t_Open9xArmSwashRingData_v208(SwashRingData&);
}) Open9xArmSwashRingData_v208; }) Open9xArmSwashRingData_v208;
PACK(typedef struct t_Open9xArmSwashRingData_v209 { // Swash Ring data PACK(typedef struct t_Open9xArmSwashRingData_v209 { // Swash Ring data
@ -298,8 +270,6 @@ PACK(typedef struct t_Open9xArmSwashRingData_v209 { // Swash Ring data
operator SwashRingData(); operator SwashRingData();
t_Open9xArmSwashRingData_v209() { memset(this, 0, sizeof(t_Open9xArmSwashRingData_v209)); } t_Open9xArmSwashRingData_v209() { memset(this, 0, sizeof(t_Open9xArmSwashRingData_v209)); }
t_Open9xArmSwashRingData_v209(SwashRingData&);
}) Open9xArmSwashRingData_v209; }) Open9xArmSwashRingData_v209;
PACK(typedef struct t_Open9xArmSwashRingData_v210 { // Swash Ring data PACK(typedef struct t_Open9xArmSwashRingData_v210 { // Swash Ring data
@ -312,8 +282,6 @@ PACK(typedef struct t_Open9xArmSwashRingData_v210 { // Swash Ring data
operator SwashRingData(); operator SwashRingData();
t_Open9xArmSwashRingData_v210() { memset(this, 0, sizeof(t_Open9xArmSwashRingData_v210)); } t_Open9xArmSwashRingData_v210() { memset(this, 0, sizeof(t_Open9xArmSwashRingData_v210)); }
t_Open9xArmSwashRingData_v210(SwashRingData&);
}) Open9xArmSwashRingData_v210; }) Open9xArmSwashRingData_v210;
@ -336,7 +304,6 @@ PACK(typedef struct t_Open9xArmFrSkyData_v210 {
operator FrSkyData(); operator FrSkyData();
t_Open9xArmFrSkyData_v210() { memset(this, 0, sizeof(t_Open9xArmFrSkyData_v210)); } t_Open9xArmFrSkyData_v210() { memset(this, 0, sizeof(t_Open9xArmFrSkyData_v210)); }
t_Open9xArmFrSkyData_v210(FrSkyData&);
}) Open9xArmFrSkyData_v210; }) Open9xArmFrSkyData_v210;
PACK(typedef struct t_Open9xArmFrSkyData_v211 { PACK(typedef struct t_Open9xArmFrSkyData_v211 {
@ -355,7 +322,6 @@ PACK(typedef struct t_Open9xArmFrSkyData_v211 {
operator FrSkyData(); operator FrSkyData();
t_Open9xArmFrSkyData_v211() { memset(this, 0, sizeof(t_Open9xArmFrSkyData_v211)); } t_Open9xArmFrSkyData_v211() { memset(this, 0, sizeof(t_Open9xArmFrSkyData_v211)); }
t_Open9xArmFrSkyData_v211(FrSkyData&);
}) Open9xArmFrSkyData_v211; }) Open9xArmFrSkyData_v211;
PACK(typedef struct t_Open9xArmModelData_v208 { PACK(typedef struct t_Open9xArmModelData_v208 {
@ -395,8 +361,6 @@ PACK(typedef struct t_Open9xArmModelData_v208 {
operator ModelData(); operator ModelData();
t_Open9xArmModelData_v208() { memset(this, 0, sizeof(t_Open9xArmModelData_v208)); } t_Open9xArmModelData_v208() { memset(this, 0, sizeof(t_Open9xArmModelData_v208)); }
t_Open9xArmModelData_v208(ModelData&);
}) Open9xArmModelData_v208; }) Open9xArmModelData_v208;
PACK(typedef struct t_Open9xArmModelData_v209 { PACK(typedef struct t_Open9xArmModelData_v209 {
@ -437,8 +401,6 @@ PACK(typedef struct t_Open9xArmModelData_v209 {
operator ModelData(); operator ModelData();
t_Open9xArmModelData_v209() { memset(this, 0, sizeof(t_Open9xArmModelData_v209)); } t_Open9xArmModelData_v209() { memset(this, 0, sizeof(t_Open9xArmModelData_v209)); }
t_Open9xArmModelData_v209(ModelData&);
}) Open9xArmModelData_v209; }) Open9xArmModelData_v209;
PACK(typedef struct t_Open9xArmModelData_v210 { PACK(typedef struct t_Open9xArmModelData_v210 {
@ -477,7 +439,6 @@ PACK(typedef struct t_Open9xArmModelData_v210 {
operator ModelData(); operator ModelData();
t_Open9xArmModelData_v210() { memset(this, 0, sizeof(t_Open9xArmModelData_v210)); } t_Open9xArmModelData_v210() { memset(this, 0, sizeof(t_Open9xArmModelData_v210)); }
t_Open9xArmModelData_v210(ModelData&);
}) Open9xArmModelData_v210; }) Open9xArmModelData_v210;
@ -517,8 +478,6 @@ PACK(typedef struct t_Open9xArmModelData_v211 {
operator ModelData(); operator ModelData();
t_Open9xArmModelData_v211() { memset(this, 0, sizeof(t_Open9xArmModelData_v211)); } t_Open9xArmModelData_v211() { memset(this, 0, sizeof(t_Open9xArmModelData_v211)); }
t_Open9xArmModelData_v211(ModelData&);
}) Open9xArmModelData_v211; }) Open9xArmModelData_v211;
PACK(typedef struct t_Open9xArmModelData_v212 { PACK(typedef struct t_Open9xArmModelData_v212 {
@ -555,8 +514,6 @@ PACK(typedef struct t_Open9xArmModelData_v212 {
operator ModelData(); operator ModelData();
t_Open9xArmModelData_v212() { memset(this, 0, sizeof(t_Open9xArmModelData_v212)); } t_Open9xArmModelData_v212() { memset(this, 0, sizeof(t_Open9xArmModelData_v212)); }
t_Open9xArmModelData_v212(ModelData&);
}) Open9xArmModelData_v212; }) Open9xArmModelData_v212;
#endif #endif

File diff suppressed because it is too large Load diff

View file

@ -65,7 +65,6 @@ PACK(typedef struct t_Open9xFrSkyRSSIAlarm {
int8_t value:6; int8_t value:6;
FrSkyRSSIAlarm get(int index); FrSkyRSSIAlarm get(int index);
t_Open9xFrSkyRSSIAlarm() { memset(this, 0, sizeof(t_Open9xFrSkyRSSIAlarm)); } t_Open9xFrSkyRSSIAlarm() { memset(this, 0, sizeof(t_Open9xFrSkyRSSIAlarm)); }
t_Open9xFrSkyRSSIAlarm(int index, FrSkyRSSIAlarm&);
}) Open9xFrSkyRSSIAlarm; }) Open9xFrSkyRSSIAlarm;
PACK(typedef struct t_Open9xExpoData_v201 { PACK(typedef struct t_Open9xExpoData_v201 {
@ -80,8 +79,6 @@ PACK(typedef struct t_Open9xExpoData_v201 {
operator ExpoData(); operator ExpoData();
t_Open9xExpoData_v201() { memset(this, 0, sizeof(t_Open9xExpoData_v201)); } t_Open9xExpoData_v201() { memset(this, 0, sizeof(t_Open9xExpoData_v201)); }
t_Open9xExpoData_v201(ExpoData&);
}) Open9xExpoData_v201; }) Open9xExpoData_v201;
PACK(typedef struct t_Open9xExpoData_v211 { PACK(typedef struct t_Open9xExpoData_v211 {
@ -95,8 +92,6 @@ PACK(typedef struct t_Open9xExpoData_v211 {
operator ExpoData(); operator ExpoData();
t_Open9xExpoData_v211() { memset(this, 0, sizeof(t_Open9xExpoData_v211)); } t_Open9xExpoData_v211() { memset(this, 0, sizeof(t_Open9xExpoData_v211)); }
t_Open9xExpoData_v211(ExpoData&);
}) Open9xExpoData_v211; }) Open9xExpoData_v211;
PACK(typedef struct t_Open9xLimitData_v201 { PACK(typedef struct t_Open9xLimitData_v201 {
@ -107,8 +102,6 @@ PACK(typedef struct t_Open9xLimitData_v201 {
operator LimitData(); operator LimitData();
t_Open9xLimitData_v201() { memset(this, 0, sizeof(t_Open9xLimitData_v201)); } t_Open9xLimitData_v201() { memset(this, 0, sizeof(t_Open9xLimitData_v201)); }
t_Open9xLimitData_v201(LimitData&);
}) Open9xLimitData_v201; }) Open9xLimitData_v201;
PACK(typedef struct t_Open9xLimitData_v211 { PACK(typedef struct t_Open9xLimitData_v211 {
@ -121,8 +114,6 @@ PACK(typedef struct t_Open9xLimitData_v211 {
operator LimitData(); operator LimitData();
t_Open9xLimitData_v211() { memset(this, 0, sizeof(t_Open9xLimitData_v211)); } t_Open9xLimitData_v211() { memset(this, 0, sizeof(t_Open9xLimitData_v211)); }
t_Open9xLimitData_v211(LimitData&);
}) Open9xLimitData_v211; }) Open9xLimitData_v211;
PACK(typedef struct t_Open9xMixData_v201 { PACK(typedef struct t_Open9xMixData_v201 {
@ -143,8 +134,6 @@ PACK(typedef struct t_Open9xMixData_v201 {
operator MixData(); operator MixData();
t_Open9xMixData_v201() { memset(this, 0, sizeof(t_Open9xMixData_v201)); } t_Open9xMixData_v201() { memset(this, 0, sizeof(t_Open9xMixData_v201)); }
t_Open9xMixData_v201(MixData&);
}) Open9xMixData_v201; }) Open9xMixData_v201;
PACK(typedef struct t_Open9xMixData_v203 { PACK(typedef struct t_Open9xMixData_v203 {
@ -165,8 +154,6 @@ PACK(typedef struct t_Open9xMixData_v203 {
operator MixData(); operator MixData();
t_Open9xMixData_v203() { memset(this, 0, sizeof(t_Open9xMixData_v203)); } t_Open9xMixData_v203() { memset(this, 0, sizeof(t_Open9xMixData_v203)); }
t_Open9xMixData_v203(MixData&);
}) Open9xMixData_v203; }) Open9xMixData_v203;
PACK(typedef struct t_Open9xMixData_v205 { PACK(typedef struct t_Open9xMixData_v205 {
@ -188,8 +175,6 @@ PACK(typedef struct t_Open9xMixData_v205 {
operator MixData(); operator MixData();
t_Open9xMixData_v205() { memset(this, 0, sizeof(t_Open9xMixData_v205)); } t_Open9xMixData_v205() { memset(this, 0, sizeof(t_Open9xMixData_v205)); }
t_Open9xMixData_v205(MixData&);
}) Open9xMixData_v205; }) Open9xMixData_v205;
PACK(typedef struct t_Open9xMixData_v209 { PACK(typedef struct t_Open9xMixData_v209 {
@ -211,8 +196,6 @@ PACK(typedef struct t_Open9xMixData_v209 {
operator MixData(); operator MixData();
t_Open9xMixData_v209() { memset(this, 0, sizeof(t_Open9xMixData_v209)); } t_Open9xMixData_v209() { memset(this, 0, sizeof(t_Open9xMixData_v209)); }
t_Open9xMixData_v209(MixData&);
}) Open9xMixData_v209; }) Open9xMixData_v209;
PACK(typedef struct t_Open9xMixData_v211 { PACK(typedef struct t_Open9xMixData_v211 {
@ -236,8 +219,6 @@ PACK(typedef struct t_Open9xMixData_v211 {
operator MixData(); operator MixData();
t_Open9xMixData_v211() { memset(this, 0, sizeof(t_Open9xMixData_v211)); } t_Open9xMixData_v211() { memset(this, 0, sizeof(t_Open9xMixData_v211)); }
t_Open9xMixData_v211(MixData&);
}) Open9xMixData_v211; }) Open9xMixData_v211;
PACK(typedef struct t_Open9xCustomSwData_v208 { // Custom Switches data PACK(typedef struct t_Open9xCustomSwData_v208 { // Custom Switches data
@ -257,7 +238,6 @@ PACK(typedef struct t_Open9xCustomSwData_v209 { // Custom Switches data
operator CustomSwData(); operator CustomSwData();
t_Open9xCustomSwData_v209() { memset(this, 0, sizeof(t_Open9xCustomSwData_v209)); } t_Open9xCustomSwData_v209() { memset(this, 0, sizeof(t_Open9xCustomSwData_v209)); }
t_Open9xCustomSwData_v209(CustomSwData&);
}) Open9xCustomSwData_v209; }) Open9xCustomSwData_v209;
PACK(typedef struct t_Open9xSafetySwData { // Safety Switches data PACK(typedef struct t_Open9xSafetySwData { // Safety Switches data
@ -266,8 +246,6 @@ PACK(typedef struct t_Open9xSafetySwData { // Safety Switches data
operator SafetySwData(); operator SafetySwData();
t_Open9xSafetySwData() { memset(this, 0, sizeof(t_Open9xSafetySwData)); } t_Open9xSafetySwData() { memset(this, 0, sizeof(t_Open9xSafetySwData)); }
t_Open9xSafetySwData(SafetySwData&);
}) Open9xSafetySwData; }) Open9xSafetySwData;
PACK(typedef struct t_Open9xFuncSwData_v201 { // Function Switches data PACK(typedef struct t_Open9xFuncSwData_v201 { // Function Switches data
@ -276,8 +254,6 @@ PACK(typedef struct t_Open9xFuncSwData_v201 { // Function Switches data
operator FuncSwData(); operator FuncSwData();
t_Open9xFuncSwData_v201() { memset(this, 0, sizeof(t_Open9xFuncSwData_v201)); } t_Open9xFuncSwData_v201() { memset(this, 0, sizeof(t_Open9xFuncSwData_v201)); }
t_Open9xFuncSwData_v201(FuncSwData&);
}) Open9xFuncSwData_v201; }) Open9xFuncSwData_v201;
PACK(typedef struct t_Open9xFuncSwData_v203 { // Function Switches data PACK(typedef struct t_Open9xFuncSwData_v203 { // Function Switches data
@ -287,8 +263,6 @@ PACK(typedef struct t_Open9xFuncSwData_v203 { // Function Switches data
operator FuncSwData(); operator FuncSwData();
t_Open9xFuncSwData_v203() { memset(this, 0, sizeof(t_Open9xFuncSwData_v203)); } t_Open9xFuncSwData_v203() { memset(this, 0, sizeof(t_Open9xFuncSwData_v203)); }
t_Open9xFuncSwData_v203(FuncSwData&);
}) Open9xFuncSwData_v203; }) Open9xFuncSwData_v203;
PACK(typedef struct t_Open9xFuncSwData_v210 { // Function Switches data PACK(typedef struct t_Open9xFuncSwData_v210 { // Function Switches data
@ -299,8 +273,6 @@ PACK(typedef struct t_Open9xFuncSwData_v210 { // Function Switches data
operator FuncSwData(); operator FuncSwData();
t_Open9xFuncSwData_v210() { memset(this, 0, sizeof(t_Open9xFuncSwData_v210)); } t_Open9xFuncSwData_v210() { memset(this, 0, sizeof(t_Open9xFuncSwData_v210)); }
t_Open9xFuncSwData_v210(FuncSwData&);
}) Open9xFuncSwData_v210; }) Open9xFuncSwData_v210;
PACK(typedef struct t_Open9xFrSkyChannelData_v201 { PACK(typedef struct t_Open9xFrSkyChannelData_v201 {
@ -316,8 +288,6 @@ PACK(typedef struct t_Open9xFrSkyChannelData_v201 {
operator FrSkyChannelData(); operator FrSkyChannelData();
t_Open9xFrSkyChannelData_v201() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v201)); } t_Open9xFrSkyChannelData_v201() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v201)); }
t_Open9xFrSkyChannelData_v201(FrSkyChannelData&);
}) Open9xFrSkyChannelData_v201; }) Open9xFrSkyChannelData_v201;
PACK(typedef struct t_Open9xFrSkyChannelData_v203 { PACK(typedef struct t_Open9xFrSkyChannelData_v203 {
@ -333,8 +303,6 @@ PACK(typedef struct t_Open9xFrSkyChannelData_v203 {
operator FrSkyChannelData(); operator FrSkyChannelData();
t_Open9xFrSkyChannelData_v203() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v203)); } t_Open9xFrSkyChannelData_v203() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v203)); }
t_Open9xFrSkyChannelData_v203(FrSkyChannelData&);
}) Open9xFrSkyChannelData_v203; }) Open9xFrSkyChannelData_v203;
PACK(typedef struct t_Open9xFrSkyChannelData_v204 { PACK(typedef struct t_Open9xFrSkyChannelData_v204 {
@ -348,8 +316,6 @@ PACK(typedef struct t_Open9xFrSkyChannelData_v204 {
operator FrSkyChannelData(); operator FrSkyChannelData();
t_Open9xFrSkyChannelData_v204() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v204)); } t_Open9xFrSkyChannelData_v204() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v204)); }
t_Open9xFrSkyChannelData_v204(FrSkyChannelData&);
}) Open9xFrSkyChannelData_v204; }) Open9xFrSkyChannelData_v204;
PACK(typedef struct t_Open9xFrSkyChannelData_v208 { PACK(typedef struct t_Open9xFrSkyChannelData_v208 {
@ -363,37 +329,30 @@ PACK(typedef struct t_Open9xFrSkyChannelData_v208 {
operator FrSkyChannelData(); operator FrSkyChannelData();
t_Open9xFrSkyChannelData_v208() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v208)); } t_Open9xFrSkyChannelData_v208() { memset(this, 0, sizeof(t_Open9xFrSkyChannelData_v208)); }
t_Open9xFrSkyChannelData_v208(FrSkyChannelData&);
}) Open9xFrSkyChannelData_v208; }) Open9xFrSkyChannelData_v208;
PACK(typedef struct t_Open9xFrSkyData_v201 { PACK(typedef struct t_Open9xFrSkyData_v201 {
Open9xFrSkyChannelData_v201 channels[2]; Open9xFrSkyChannelData_v201 channels[2];
operator FrSkyData();
t_Open9xFrSkyData_v201() { memset(this, 0, sizeof(t_Open9xFrSkyData_v201)); }
operator FrSkyData();
t_Open9xFrSkyData_v201() { memset(this, 0, sizeof(t_Open9xFrSkyData_v201)); }
}) Open9xFrSkyData_v201; }) Open9xFrSkyData_v201;
PACK(typedef struct t_Open9xFrSkyData_v202 { PACK(typedef struct t_Open9xFrSkyData_v202 {
Open9xFrSkyChannelData_v201 channels[2]; Open9xFrSkyChannelData_v201 channels[2];
uint8_t usrProto:2; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh uint8_t usrProto:2; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh
uint8_t spare:6; uint8_t spare:6;
operator FrSkyData();
t_Open9xFrSkyData_v202() { memset(this, 0, sizeof(t_Open9xFrSkyData_v202)); }
t_Open9xFrSkyData_v202(FrSkyData&);
operator FrSkyData();
t_Open9xFrSkyData_v202() { memset(this, 0, sizeof(t_Open9xFrSkyData_v202)); }
}) Open9xFrSkyData_v202; }) Open9xFrSkyData_v202;
PACK(typedef struct t_Open9xFrSkyData_v203 { PACK(typedef struct t_Open9xFrSkyData_v203 {
Open9xFrSkyChannelData_v203 channels[2]; Open9xFrSkyChannelData_v203 channels[2];
uint8_t usrProto; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh uint8_t usrProto; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh
operator FrSkyData();
t_Open9xFrSkyData_v203() { memset(this, 0, sizeof(t_Open9xFrSkyData_v203)); }
t_Open9xFrSkyData_v203(FrSkyData&);
operator FrSkyData();
t_Open9xFrSkyData_v203() { memset(this, 0, sizeof(t_Open9xFrSkyData_v203)); }
}) Open9xFrSkyData_v203; }) Open9xFrSkyData_v203;
PACK(typedef struct t_Open9xFrSkyBarData_v204 { PACK(typedef struct t_Open9xFrSkyBarData_v204 {
@ -403,8 +362,6 @@ PACK(typedef struct t_Open9xFrSkyBarData_v204 {
operator FrSkyBarData(); operator FrSkyBarData();
t_Open9xFrSkyBarData_v204() { memset(this, 0, sizeof(t_Open9xFrSkyBarData_v204)); } t_Open9xFrSkyBarData_v204() { memset(this, 0, sizeof(t_Open9xFrSkyBarData_v204)); }
t_Open9xFrSkyBarData_v204(FrSkyBarData&);
}) Open9xFrSkyBarData_v204; }) Open9xFrSkyBarData_v204;
PACK(typedef struct t_Open9xFrSkyData_v204 { PACK(typedef struct t_Open9xFrSkyData_v204 {
@ -417,7 +374,6 @@ PACK(typedef struct t_Open9xFrSkyData_v204 {
operator FrSkyData(); operator FrSkyData();
t_Open9xFrSkyData_v204() { memset(this, 0, sizeof(t_Open9xFrSkyData_v204)); } t_Open9xFrSkyData_v204() { memset(this, 0, sizeof(t_Open9xFrSkyData_v204)); }
t_Open9xFrSkyData_v204(FrSkyData&);
}) Open9xFrSkyData_v204; }) Open9xFrSkyData_v204;
PACK(typedef struct t_Open9xFrSkyData_v205 { PACK(typedef struct t_Open9xFrSkyData_v205 {
@ -431,7 +387,6 @@ PACK(typedef struct t_Open9xFrSkyData_v205 {
operator FrSkyData(); operator FrSkyData();
t_Open9xFrSkyData_v205() { memset(this, 0, sizeof(t_Open9xFrSkyData_v205)); } t_Open9xFrSkyData_v205() { memset(this, 0, sizeof(t_Open9xFrSkyData_v205)); }
t_Open9xFrSkyData_v205(FrSkyData&);
}) Open9xFrSkyData_v205; }) Open9xFrSkyData_v205;
PACK(typedef struct t_Open9xFrSkyData_v208 { PACK(typedef struct t_Open9xFrSkyData_v208 {
@ -445,7 +400,6 @@ PACK(typedef struct t_Open9xFrSkyData_v208 {
operator FrSkyData(); operator FrSkyData();
t_Open9xFrSkyData_v208() { memset(this, 0, sizeof(t_Open9xFrSkyData_v208)); } t_Open9xFrSkyData_v208() { memset(this, 0, sizeof(t_Open9xFrSkyData_v208)); }
t_Open9xFrSkyData_v208(FrSkyData&);
}) Open9xFrSkyData_v208; }) Open9xFrSkyData_v208;
PACK(typedef struct t_Open9xFrSkyData_v210 { PACK(typedef struct t_Open9xFrSkyData_v210 {
@ -466,7 +420,6 @@ PACK(typedef struct t_Open9xFrSkyData_v210 {
operator FrSkyData(); operator FrSkyData();
t_Open9xFrSkyData_v210() { memset(this, 0, sizeof(t_Open9xFrSkyData_v210)); } t_Open9xFrSkyData_v210() { memset(this, 0, sizeof(t_Open9xFrSkyData_v210)); }
t_Open9xFrSkyData_v210(FrSkyData&);
}) Open9xFrSkyData_v210; }) Open9xFrSkyData_v210;
PACK(typedef struct t_Open9xSwashRingData_v208 { // Swash Ring data PACK(typedef struct t_Open9xSwashRingData_v208 { // Swash Ring data
@ -479,8 +432,6 @@ PACK(typedef struct t_Open9xSwashRingData_v208 { // Swash Ring data
operator SwashRingData(); operator SwashRingData();
t_Open9xSwashRingData_v208() { memset(this, 0, sizeof(t_Open9xSwashRingData_v208)); } t_Open9xSwashRingData_v208() { memset(this, 0, sizeof(t_Open9xSwashRingData_v208)); }
t_Open9xSwashRingData_v208(SwashRingData&);
}) Open9xSwashRingData_v208; }) Open9xSwashRingData_v208;
PACK(typedef struct t_Open9xSwashRingData_v209 { // Swash Ring data PACK(typedef struct t_Open9xSwashRingData_v209 { // Swash Ring data
@ -493,8 +444,6 @@ PACK(typedef struct t_Open9xSwashRingData_v209 { // Swash Ring data
operator SwashRingData(); operator SwashRingData();
t_Open9xSwashRingData_v209() { memset(this, 0, sizeof(t_Open9xSwashRingData_v209)); } t_Open9xSwashRingData_v209() { memset(this, 0, sizeof(t_Open9xSwashRingData_v209)); }
t_Open9xSwashRingData_v209(SwashRingData&);
}) Open9xSwashRingData_v209; }) Open9xSwashRingData_v209;
PACK(typedef struct t_Open9xPhaseData_v201 { PACK(typedef struct t_Open9xPhaseData_v201 {
@ -507,7 +456,6 @@ PACK(typedef struct t_Open9xPhaseData_v201 {
operator PhaseData(); operator PhaseData();
t_Open9xPhaseData_v201() { memset(this, 0, sizeof(t_Open9xPhaseData_v201)); } t_Open9xPhaseData_v201() { memset(this, 0, sizeof(t_Open9xPhaseData_v201)); }
t_Open9xPhaseData_v201(PhaseData &eepe);
}) Open9xPhaseData_v201; }) Open9xPhaseData_v201;
PACK(typedef struct t_Open9xTimerData_v201 { PACK(typedef struct t_Open9xTimerData_v201 {
@ -526,7 +474,6 @@ PACK(typedef struct t_Open9xTimerData_v202 {
operator TimerData(); operator TimerData();
t_Open9xTimerData_v202() { memset(this, 0, sizeof(t_Open9xTimerData_v202)); } t_Open9xTimerData_v202() { memset(this, 0, sizeof(t_Open9xTimerData_v202)); }
t_Open9xTimerData_v202(TimerData &eepe);
}) Open9xTimerData_v202; }) Open9xTimerData_v202;
PACK(typedef struct t_Open9xTimerDataExtra { PACK(typedef struct t_Open9xTimerDataExtra {
@ -579,8 +526,6 @@ PACK(typedef struct t_Open9xModelData_v201 {
operator ModelData(); operator ModelData();
t_Open9xModelData_v201() { memset(this, 0, sizeof(t_Open9xModelData_v201)); } t_Open9xModelData_v201() { memset(this, 0, sizeof(t_Open9xModelData_v201)); }
t_Open9xModelData_v201(ModelData&);
}) Open9xModelData_v201; }) Open9xModelData_v201;
PACK(typedef struct t_Open9xModelData_v202 { PACK(typedef struct t_Open9xModelData_v202 {
@ -615,8 +560,6 @@ PACK(typedef struct t_Open9xModelData_v202 {
operator ModelData(); operator ModelData();
t_Open9xModelData_v202() { memset(this, 0, sizeof(t_Open9xModelData_v202)); } t_Open9xModelData_v202() { memset(this, 0, sizeof(t_Open9xModelData_v202)); }
t_Open9xModelData_v202(ModelData&);
}) Open9xModelData_v202; }) Open9xModelData_v202;
PACK(typedef struct t_Open9xModelData_v203 { PACK(typedef struct t_Open9xModelData_v203 {
@ -650,8 +593,6 @@ PACK(typedef struct t_Open9xModelData_v203 {
operator ModelData(); operator ModelData();
t_Open9xModelData_v203() { memset(this, 0, sizeof(t_Open9xModelData_v203)); } t_Open9xModelData_v203() { memset(this, 0, sizeof(t_Open9xModelData_v203)); }
t_Open9xModelData_v203(ModelData&);
}) Open9xModelData_v203; }) Open9xModelData_v203;
PACK(typedef struct t_Open9xModelData_v204 { PACK(typedef struct t_Open9xModelData_v204 {
@ -686,8 +627,6 @@ PACK(typedef struct t_Open9xModelData_v204 {
operator ModelData(); operator ModelData();
t_Open9xModelData_v204() { memset(this, 0, sizeof(t_Open9xModelData_v204)); } t_Open9xModelData_v204() { memset(this, 0, sizeof(t_Open9xModelData_v204)); }
t_Open9xModelData_v204(ModelData&);
}) Open9xModelData_v204; }) Open9xModelData_v204;
PACK(typedef struct t_Open9xModelData_v205 { PACK(typedef struct t_Open9xModelData_v205 {
@ -723,8 +662,6 @@ PACK(typedef struct t_Open9xModelData_v205 {
operator ModelData(); operator ModelData();
t_Open9xModelData_v205() { memset(this, 0, sizeof(t_Open9xModelData_v205)); } t_Open9xModelData_v205() { memset(this, 0, sizeof(t_Open9xModelData_v205)); }
t_Open9xModelData_v205(ModelData&);
}) Open9xModelData_v205; }) Open9xModelData_v205;
PACK(typedef struct t_Open9xModelData_v208 { PACK(typedef struct t_Open9xModelData_v208 {
@ -764,8 +701,6 @@ PACK(typedef struct t_Open9xModelData_v208 {
operator ModelData(); operator ModelData();
t_Open9xModelData_v208() { memset(this, 0, sizeof(t_Open9xModelData_v208)); } t_Open9xModelData_v208() { memset(this, 0, sizeof(t_Open9xModelData_v208)); }
t_Open9xModelData_v208(ModelData&);
}) Open9xModelData_v208; }) Open9xModelData_v208;
PACK(typedef struct t_Open9xModelData_v209 { PACK(typedef struct t_Open9xModelData_v209 {
@ -806,8 +741,6 @@ PACK(typedef struct t_Open9xModelData_v209 {
operator ModelData(); operator ModelData();
t_Open9xModelData_v209() { memset(this, 0, sizeof(t_Open9xModelData_v209)); } t_Open9xModelData_v209() { memset(this, 0, sizeof(t_Open9xModelData_v209)); }
t_Open9xModelData_v209(ModelData&);
}) Open9xModelData_v209; }) Open9xModelData_v209;
PACK(typedef struct t_Open9xModelData_v210 { PACK(typedef struct t_Open9xModelData_v210 {
@ -846,8 +779,6 @@ PACK(typedef struct t_Open9xModelData_v210 {
operator ModelData(); operator ModelData();
t_Open9xModelData_v210() { memset(this, 0, sizeof(t_Open9xModelData_v210)); } t_Open9xModelData_v210() { memset(this, 0, sizeof(t_Open9xModelData_v210)); }
t_Open9xModelData_v210(ModelData&);
}) Open9xModelData_v210; }) Open9xModelData_v210;
PACK(typedef struct t_Open9xModelData_v211 { PACK(typedef struct t_Open9xModelData_v211 {
@ -884,8 +815,6 @@ PACK(typedef struct t_Open9xModelData_v211 {
operator ModelData(); operator ModelData();
t_Open9xModelData_v211() { memset(this, 0, sizeof(t_Open9xModelData_v211)); } t_Open9xModelData_v211() { memset(this, 0, sizeof(t_Open9xModelData_v211)); }
t_Open9xModelData_v211(ModelData&);
}) Open9xModelData_v211; }) Open9xModelData_v211;
#endif #endif

View file

@ -14,9 +14,9 @@
* *
*/ */
#include "open9xGruvin9xsimulator.h" #include "opentxGruvin9xsimulator.h"
#include "open9xinterface.h" #include "opentxinterface.h"
#include "open9xeeprom.h" #include "opentxeeprom.h"
#define SIMU #define SIMU
#define SIMU_EXCEPTIONS #define SIMU_EXCEPTIONS
@ -98,7 +98,7 @@ bool hasExtendedTrims()
uint8_t getStickMode() uint8_t getStickMode()
{ {
return g_eeGeneral.stickMode; return limit<uint8_t>(0, g_eeGeneral.stickMode, 3);
} }
} }
@ -160,7 +160,7 @@ void Open9xGruvin9xSimulator::setValues(TxInputs &inputs)
void Open9xGruvin9xSimulator::setTrim(unsigned int idx, int value) void Open9xGruvin9xSimulator::setTrim(unsigned int idx, int value)
{ {
idx = Open9xGruvin9x::modn12x3[4*getStickMode() + idx] - 1; idx = Open9xGruvin9x::modn12x3[4*getStickMode() + idx];
uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx); uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx);
setTrimValue(phase, idx, value); setTrimValue(phase, idx, value);
} }
@ -174,7 +174,7 @@ void Open9xGruvin9xSimulator::getTrims(Trims & trims)
} }
for (int i=0; i<2; i++) { for (int i=0; i<2; i++) {
uint8_t idx = Open9xGruvin9x::modn12x3[4*getStickMode() + i] - 1; uint8_t idx = Open9xGruvin9x::modn12x3[4*getStickMode() + i];
int16_t tmp = trims.values[i]; int16_t tmp = trims.values[i];
trims.values[i] = trims.values[idx]; trims.values[i] = trims.values[idx];
trims.values[idx] = tmp; trims.values[idx] = tmp;

View file

@ -14,9 +14,9 @@
* *
*/ */
#include "open9xM128simulator.h" #include "opentxM128simulator.h"
#include "open9xinterface.h" #include "opentxinterface.h"
#include "open9xeeprom.h" #include "opentxeeprom.h"
#define SIMU #define SIMU
#define SIMU_EXCEPTIONS #define SIMU_EXCEPTIONS
@ -96,7 +96,7 @@ bool hasExtendedTrims()
uint8_t getStickMode() uint8_t getStickMode()
{ {
return g_eeGeneral.stickMode; return limit<uint8_t>(0, g_eeGeneral.stickMode, 3);
} }
} }
@ -154,7 +154,7 @@ void Open9xM128Simulator::setValues(TxInputs &inputs)
void Open9xM128Simulator::setTrim(unsigned int idx, int value) void Open9xM128Simulator::setTrim(unsigned int idx, int value)
{ {
idx = Open9xM128::modn12x3[4*getStickMode() + idx] - 1; idx = Open9xM128::modn12x3[4*getStickMode() + idx];
uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx); uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx);
setTrimValue(phase, idx, value); setTrimValue(phase, idx, value);
} }
@ -168,7 +168,7 @@ void Open9xM128Simulator::getTrims(Trims & trims)
} }
for (int i=0; i<2; i++) { for (int i=0; i<2; i++) {
uint8_t idx = Open9xM128::modn12x3[4*getStickMode() + i] - 1; uint8_t idx = Open9xM128::modn12x3[4*getStickMode() + i];
int16_t tmp = trims.values[i]; int16_t tmp = trims.values[i];
trims.values[i] = trims.values[idx]; trims.values[i] = trims.values[idx];
trims.values[idx] = tmp; trims.values[idx] = tmp;

View file

@ -14,8 +14,8 @@
* *
*/ */
#include "open9xSky9xsimulator.h" #include "opentxSky9xsimulator.h"
#include "open9xinterface.h" #include "opentxinterface.h"
#define SIMU #define SIMU
#define SIMU_EXCEPTIONS #define SIMU_EXCEPTIONS
@ -125,7 +125,7 @@ bool hasExtendedTrims()
uint8_t getStickMode() uint8_t getStickMode()
{ {
return g_eeGeneral.stickMode; return limit<uint8_t>(0, g_eeGeneral.stickMode, 3);
} }
} }
@ -135,7 +135,7 @@ using namespace Open9xSky9x;
Open9xSky9xSimulator::Open9xSky9xSimulator(Open9xInterface * open9xInterface): Open9xSky9xSimulator::Open9xSky9xSimulator(Open9xInterface * open9xInterface):
open9xInterface(open9xInterface) open9xInterface(open9xInterface)
{ {
QSettings settings("companion9x", "companion9x"); QSettings settings;
QString path=settings.value("sdPath", ".").toString()+"/"; QString path=settings.value("sdPath", ".").toString()+"/";
int i=0; int i=0;
for (i=0; i< std::min(path.length(),1022); i++) { for (i=0; i< std::min(path.length(),1022); i++) {
@ -193,7 +193,7 @@ void Open9xSky9xSimulator::setValues(TxInputs &inputs)
void Open9xSky9xSimulator::setTrim(unsigned int idx, int value) void Open9xSky9xSimulator::setTrim(unsigned int idx, int value)
{ {
idx = Open9xSky9x::modn12x3[4*getStickMode() + idx] - 1; idx = Open9xSky9x::modn12x3[4*getStickMode() + idx];
uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx); uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx);
setTrimValue(phase, idx, value); setTrimValue(phase, idx, value);
} }
@ -207,7 +207,7 @@ void Open9xSky9xSimulator::getTrims(Trims & trims)
} }
for (int i=0; i<2; i++) { for (int i=0; i<2; i++) {
uint8_t idx = Open9xSky9x::modn12x3[4*getStickMode() + i] - 1; uint8_t idx = Open9xSky9x::modn12x3[4*getStickMode() + i];
int16_t tmp = trims.values[i]; int16_t tmp = trims.values[i];
trims.values[i] = trims.values[idx]; trims.values[i] = trims.values[idx];
trims.values[idx] = tmp; trims.values[idx] = tmp;

View file

@ -15,7 +15,7 @@
*/ */
#include "opentxTaranisSimulator.h" #include "opentxTaranisSimulator.h"
#include "open9xinterface.h" #include "opentxinterface.h"
#define SIMU #define SIMU
#define SIMU_EXCEPTIONS #define SIMU_EXCEPTIONS
@ -35,6 +35,8 @@
#define AUDIO #define AUDIO
#define VOICE #define VOICE
#define PXX #define PXX
#define DSM2
#define DSM2_PPM
#define DBLKEYS #define DBLKEYS
#define AUTOSWITCH #define AUTOSWITCH
#define GRAPHICS #define GRAPHICS
@ -47,6 +49,7 @@
#define PPM_CENTER_ADJUSTABLE #define PPM_CENTER_ADJUSTABLE
#define PPM_LIMITS_SYMETRICAL #define PPM_LIMITS_SYMETRICAL
#define FAI_CHOICE #define FAI_CHOICE
#define EEPROM_VARIANT 3 #define EEPROM_VARIANT 3
#undef min #undef min
@ -65,6 +68,7 @@ inline int geteepromsize() {
#include "radio/src/targets/taranis/board_taranis.cpp" #include "radio/src/targets/taranis/board_taranis.cpp"
#include "radio/src/protocols/ppm_arm.cpp" #include "radio/src/protocols/ppm_arm.cpp"
#include "radio/src/protocols/pxx_arm.cpp" #include "radio/src/protocols/pxx_arm.cpp"
#include "radio/src/protocols/dsm2_arm.cpp"
#include "radio/src/targets/taranis/pwr_driver.cpp" #include "radio/src/targets/taranis/pwr_driver.cpp"
#include "radio/src/eeprom_common.cpp" #include "radio/src/eeprom_common.cpp"
#include "radio/src/eeprom_conversions.cpp" #include "radio/src/eeprom_conversions.cpp"
@ -128,7 +132,7 @@ bool hasExtendedTrims()
uint8_t getStickMode() uint8_t getStickMode()
{ {
return g_eeGeneral.stickMode; return limit<uint8_t>(0, g_eeGeneral.stickMode, 3);
} }
void resetTrims() void resetTrims()
@ -145,7 +149,7 @@ OpentxTaranisSimulator::OpentxTaranisSimulator(Open9xInterface * open9xInterface
open9xInterface(open9xInterface) open9xInterface(open9xInterface)
{ {
taranisSimulatorBoard = GetEepromInterface()->getBoard(); taranisSimulatorBoard = GetEepromInterface()->getBoard();
QSettings settings("companion9x", "companion9x"); QSettings settings;
QString path=settings.value("sdPath", ".").toString()+"/"; QString path=settings.value("sdPath", ".").toString()+"/";
int i=0; int i=0;
for (i=0; i< std::min(path.length(),1022); i++) { for (i=0; i< std::min(path.length(),1022); i++) {
@ -200,7 +204,7 @@ void OpentxTaranisSimulator::setValues(TxInputs &inputs)
void OpentxTaranisSimulator::setTrim(unsigned int idx, int value) void OpentxTaranisSimulator::setTrim(unsigned int idx, int value)
{ {
idx = Open9xX9D::modn12x3[4*getStickMode() + idx] - 1; idx = Open9xX9D::modn12x3[4*getStickMode() + idx];
uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx); uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx);
setTrimValue(phase, idx, value); setTrimValue(phase, idx, value);
} }
@ -214,7 +218,7 @@ void OpentxTaranisSimulator::getTrims(Trims & trims)
} }
for (int i=0; i<2; i++) { for (int i=0; i<2; i++) {
uint8_t idx = Open9xX9D::modn12x3[4*getStickMode() + i] - 1; uint8_t idx = Open9xX9D::modn12x3[4*getStickMode() + i];
int16_t tmp = trims.values[i]; int16_t tmp = trims.values[i];
trims.values[i] = trims.values[idx]; trims.values[i] = trims.values[idx];
trims.values[idx] = tmp; trims.values[idx] = tmp;

View file

@ -1,7 +1,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <algorithm> #include <algorithm>
#include "helpers.h" #include "helpers.h"
#include "open9xeeprom.h" #include "opentxeeprom.h"
#include <QObject> #include <QObject>
#define IS_DBLEEPROM(board, version) ((board==BOARD_GRUVIN9X || board==BOARD_M128) && version >= 213) #define IS_DBLEEPROM(board, version) ((board==BOARD_GRUVIN9X || board==BOARD_M128) && version >= 213)
@ -18,10 +18,11 @@
#define MAX_PHASES(board, version) (IS_ARM(board) ? 9 : (IS_DBLRAM(board, version) ? 6 : 5)) #define MAX_PHASES(board, version) (IS_ARM(board) ? 9 : (IS_DBLRAM(board, version) ? 6 : 5))
#define MAX_MIXERS(board, version) (IS_ARM(board) ? 64 : 32) #define MAX_MIXERS(board, version) (IS_ARM(board) ? 64 : 32)
#define MAX_CHANNELS(board, version) (IS_ARM(board) ? 32 : 16) #define MAX_CHANNELS(board, version) (IS_ARM(board) ? 32 : 16)
#define MAX_EXPOS(board, version) (IS_ARM(board) ? 32 : (IS_DBLRAM(board, version) ? 16 : 14)) #define MAX_EXPOS(board, version) (IS_ARM(board) ? ((IS_TARANIS(board) && version >= 216) ? 64 : 32) : (IS_DBLRAM(board, version) ? 16 : 14))
#define MAX_CUSTOM_SWITCHES(board, version) (IS_ARM(board) ? 32 : (IS_DBLEEPROM(board, version) ? 15 : 12)) #define MAX_CUSTOM_SWITCHES(board, version) (IS_ARM(board) ? 32 : (IS_DBLEEPROM(board, version) ? 15 : 12))
#define MAX_CUSTOM_FUNCTIONS(board, version) (IS_ARM(board) ? 32 : (IS_DBLEEPROM(board, version) ? 24 : 16)) #define MAX_CUSTOM_FUNCTIONS(board, version) (IS_ARM(board) ? 32 : (IS_DBLEEPROM(board, version) ? 24 : 16))
#define MAX_CURVES(board) (IS_ARM(board) ? O9X_ARM_MAX_CURVES : O9X_MAX_CURVES) #define MAX_CURVES(board, version) (IS_ARM(board) ? ((IS_TARANIS(board) && version >= 216) ? 32 : 16) : O9X_MAX_CURVES)
#define MAX_GVARS(board, version) ((IS_ARM(board) && version >= 216) ? 9 : 5)
#define IS_RELEASE_21_MARCH_2013(board, version) (version >= 214 || (!IS_ARM(board) && version >= 213)) #define IS_RELEASE_21_MARCH_2013(board, version) (version >= 214 || (!IS_ARM(board) && version >= 213))
#define IS_RELEASE_23_MARCH_2013(board, version) (version >= 214 || (board==BOARD_STOCK && version >= 213)) #define IS_RELEASE_23_MARCH_2013(board, version) (version >= 214 || (board==BOARD_STOCK && version >= 213))
@ -134,6 +135,16 @@ class SourcesConversionTable: public ConversionTable {
addConversion(RawSource(SOURCE_TYPE_NONE), val++); addConversion(RawSource(SOURCE_TYPE_NONE), val++);
} }
if (IS_TARANIS(board) && version >= 216) {
for (int i=0; i<32; i++)
addConversion(RawSource(SOURCE_TYPE_VIRTUAL_INPUT, i), val++);
for (int i=0; i<3; i++) {
for (int j=0; j<6; j++) {
addConversion(RawSource(SOURCE_TYPE_LUA_INPUT, i*16+j), val++);
}
}
}
for (int i=0; i<4+MAX_POTS(board); i++) for (int i=0; i<4+MAX_POTS(board); i++)
addConversion(RawSource(SOURCE_TYPE_STICK, i), val++); addConversion(RawSource(SOURCE_TYPE_STICK, i), val++);
@ -190,7 +201,7 @@ class SourcesConversionTable: public ConversionTable {
if (!(flags & FLAG_NOTELEMETRY)) { if (!(flags & FLAG_NOTELEMETRY)) {
if (release21March2013) { if (release21March2013) {
if ((board != BOARD_STOCK && (board!=BOARD_M128 || version<215)) || (variant & GVARS_VARIANT)) { if ((board != BOARD_STOCK && (board!=BOARD_M128 || version<215)) || (variant & GVARS_VARIANT)) {
for (int i=0; i<5; i++) for (int i=0; i<MAX_GVARS(board, version); i++)
addConversion(RawSource(SOURCE_TYPE_GVAR, i), val++); addConversion(RawSource(SOURCE_TYPE_GVAR, i), val++);
} }
} }
@ -352,6 +363,36 @@ class SourceField: public ConversionField< UnsignedField<N> > {
unsigned int _source; unsigned int _source;
}; };
class CurveReferenceField: public TransformedField {
public:
CurveReferenceField(CurveReference & curve, BoardEnum board, unsigned int version):
TransformedField(internalField),
curve(curve),
_curve_type(0)
{
internalField.Append(new UnsignedField<8>(_curve_type));
internalField.Append(new SignedField<8>(curve.value));
}
virtual void beforeExport()
{
if (curve.value != 0)
_curve_type = (unsigned int)curve.type;
else
_curve_type = 0;
}
virtual void afterImport()
{
curve.type = (CurveReference::CurveRefType)_curve_type;
}
protected:
StructField internalField;
CurveReference & curve;
unsigned int _curve_type;
};
class HeliField: public StructField { class HeliField: public StructField {
public: public:
HeliField(SwashRingData & heli, BoardEnum board, unsigned int version, unsigned int variant) HeliField(SwashRingData & heli, BoardEnum board, unsigned int version, unsigned int variant)
@ -409,7 +450,7 @@ class PhaseField: public TransformedField {
} }
if (board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) { if (board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) {
for (int i=0; i<O9X_MAX_GVARS; i++) { for (int i=0; i<MAX_GVARS(board, version); i++) {
internalField.Append(new SignedField<16>(phase.gvars[i])); internalField.Append(new SignedField<16>(phase.gvars[i]));
} }
} }
@ -595,7 +636,25 @@ class MixField: public TransformedField {
board(board), board(board),
version(version) version(version)
{ {
if (IS_ARM(board)) { if (IS_TARANIS(board) && version >= 216) {
internalField.Append(new UnsignedField<8>(_destCh));
internalField.Append(new UnsignedField<16>(mix.phases));
internalField.Append(new UnsignedField<8>((unsigned int &)mix.mltpx));
internalField.Append(new SignedField<16>(_weight));
internalField.Append(new SwitchField<8>(mix.swtch, board, version));
internalField.Append(new CurveReferenceField(mix.curve, board, version));
internalField.Append(new UnsignedField<4>(mix.mixWarn));
internalField.Append(new UnsignedField<4>(mix.srcVariant));
internalField.Append(new UnsignedField<8>(mix.delayUp));
internalField.Append(new UnsignedField<8>(mix.delayDown));
internalField.Append(new UnsignedField<8>(mix.speedUp));
internalField.Append(new UnsignedField<8>(mix.speedDown));
internalField.Append(new SourceField<8>(mix.srcRaw, board, version, FLAG_NOTELEMETRY));
internalField.Append(new SignedField<16>(_offset));
internalField.Append(new ZCharField<8>(mix.name));
internalField.Append(new SpareBitsField<8>());
}
else if (IS_ARM(board)) {
internalField.Append(new UnsignedField<8>(_destCh)); internalField.Append(new UnsignedField<8>(_destCh));
internalField.Append(new UnsignedField<16>(mix.phases)); internalField.Append(new UnsignedField<16>(mix.phases));
internalField.Append(new BoolField<1>(_curveMode)); internalField.Append(new BoolField<1>(_curveMode));
@ -680,8 +739,18 @@ class MixField: public TransformedField {
{ {
if (mix.destCh && mix.srcRaw.type != SOURCE_TYPE_NONE) { if (mix.destCh && mix.srcRaw.type != SOURCE_TYPE_NONE) {
_destCh = mix.destCh - 1; _destCh = mix.destCh - 1;
_curveMode = mix.curve; if (mix.curve.type == CurveReference::CURVE_REF_CUSTOM) {
_curveParam = (mix.curve ? mix.curve : smallGvarToEEPROM(mix.differential)); _curveMode = true;
_curveParam = 6 + mix.curve.value;
}
else if (mix.curve.type == CurveReference::CURVE_REF_FUNC) {
_curveMode = true;
_curveParam = mix.curve.value;
}
else if (mix.curve.type == CurveReference::CURVE_REF_DIFF) {
_curveMode = 0;
_curveParam = smallGvarToEEPROM(mix.curve.value);
}
} }
else { else {
mix.clear(); mix.clear();
@ -707,12 +776,14 @@ class MixField: public TransformedField {
{ {
if (mix.srcRaw.type != SOURCE_TYPE_NONE) { if (mix.srcRaw.type != SOURCE_TYPE_NONE) {
mix.destCh = _destCh + 1; mix.destCh = _destCh + 1;
mix.curve = 0; if (!IS_ARM(board) || version < 216) {
mix.differential = 0; if (!_curveMode)
if (_curveMode) mix.curve = CurveReference(CurveReference::CURVE_REF_DIFF, smallGvarToC9x(_curveParam));
mix.curve = _curveParam; else if (_curveParam > 6)
else mix.curve = CurveReference(CurveReference::CURVE_REF_CUSTOM, _curveParam-6);
mix.differential = smallGvarToC9x(_curveParam); else
mix.curve = CurveReference(CurveReference::CURVE_REF_FUNC, _curveParam);
}
} }
if (IS_ARM(board)) { if (IS_ARM(board)) {
@ -748,9 +819,23 @@ class ExpoField: public TransformedField {
TransformedField(internalField), TransformedField(internalField),
internalField("Expo"), internalField("Expo"),
expo(expo), expo(expo),
board(board) board(board),
version(version)
{ {
if (IS_ARM(board)) { if (IS_TARANIS(board) && version >= 216) {
internalField.Append(new SourceField<8>(expo.srcRaw, board, version, 0));
internalField.Append(new UnsignedField<16>(expo.scale));
internalField.Append(new UnsignedField<8>(expo.chn, "Channel"));
internalField.Append(new SwitchField<8>(expo.swtch, board, version));
internalField.Append(new UnsignedField<16>(expo.phases));
internalField.Append(new SignedField<8>(_weight, "Weight"));
internalField.Append(new SignedField<8>(expo.carryTrim));
internalField.Append(new ZCharField<8>(expo.name));
internalField.Append(new SignedField<8>(expo.offset, "Offset"));
internalField.Append(new CurveReferenceField(expo.curve, board, version));
internalField.Append(new SpareBitsField<8>());
}
else if (IS_ARM(board)) {
internalField.Append(new UnsignedField<8>(expo.mode)); internalField.Append(new UnsignedField<8>(expo.mode));
internalField.Append(new UnsignedField<8>(expo.chn)); internalField.Append(new UnsignedField<8>(expo.chn));
internalField.Append(new SwitchField<8>(expo.swtch, board, version)); internalField.Append(new SwitchField<8>(expo.swtch, board, version));
@ -789,22 +874,41 @@ class ExpoField: public TransformedField {
virtual void beforeExport() virtual void beforeExport()
{ {
_curveMode = (expo.curveMode && expo.curveParam);
_weight = smallGvarToEEPROM(expo.weight); _weight = smallGvarToEEPROM(expo.weight);
_curveParam = smallGvarToEEPROM(expo.curveParam); if (!IS_TARANIS(board) || version < 216) {
if (expo.curve.type==CurveReference::CURVE_REF_FUNC && expo.curve.value) {
_curveMode = true;
_curveParam = expo.curve.value;
}
else if (expo.curve.type==CurveReference::CURVE_REF_CUSTOM && expo.curve.value) {
_curveMode = true;
_curveParam = expo.curve.value+6;
}
else {
_curveMode = false;
_curveParam = smallGvarToEEPROM(expo.curve.value);
}
}
} }
virtual void afterImport() virtual void afterImport()
{ {
expo.curveMode = _curveMode;
expo.weight = smallGvarToC9x(_weight); expo.weight = smallGvarToC9x(_weight);
expo.curveParam = smallGvarToC9x(_curveParam); if (!IS_TARANIS(board) || version < 216) {
if (!_curveMode)
expo.curve = CurveReference(CurveReference::CURVE_REF_EXPO, smallGvarToC9x(_curveParam));
else if (_curveParam > 6)
expo.curve = CurveReference(CurveReference::CURVE_REF_CUSTOM, _curveParam-6);
else
expo.curve = CurveReference(CurveReference::CURVE_REF_FUNC, _curveParam);
}
} }
protected: protected:
StructField internalField; StructField internalField;
ExpoData & expo; ExpoData & expo;
BoardEnum board; BoardEnum board;
unsigned int version;
bool _curveMode; bool _curveMode;
int _weight; int _weight;
int _curveParam; int _curveParam;
@ -812,36 +916,56 @@ class ExpoField: public TransformedField {
class LimitField: public StructField { class LimitField: public StructField {
public: public:
LimitField(LimitData & limit, BoardEnum board): LimitField(LimitData & limit, BoardEnum board, unsigned int version):
StructField("Limit") StructField("Limit")
{ {
Append(new ConversionField< SignedField<8> >(limit.min, +100)); if (IS_ARM(board) && version >= 216) {
Append(new ConversionField< SignedField<8> >(limit.max, -100)); Append(new ConversionField< SignedField<16> >(limit.min, +1000));
Append(new ConversionField< SignedField<16> >(limit.max, -1000));
}
else {
Append(new ConversionField< SignedField<8> >(limit.min, +100, 10));
Append(new ConversionField< SignedField<8> >(limit.max, -100, 10));
}
Append(new SignedField<8>(limit.ppmCenter)); Append(new SignedField<8>(limit.ppmCenter));
Append(new SignedField<14>(limit.offset)); Append(new SignedField<14>(limit.offset));
Append(new BoolField<1>(limit.symetrical)); Append(new BoolField<1>(limit.symetrical));
Append(new BoolField<1>(limit.revert)); Append(new BoolField<1>(limit.revert));
if (HAS_LARGE_LCD(board)) if (HAS_LARGE_LCD(board)) {
Append(new ZCharField<6>(limit.name)); Append(new ZCharField<6>(limit.name));
}
if (IS_TARANIS(board) && version >= 216) {
Append(new SignedField<8>(limit.curve.value));
}
} }
}; };
class CurvesField: public TransformedField { class CurvesField: public TransformedField {
public: public:
CurvesField(CurveData * curves, BoardEnum board): CurvesField(CurveData * curves, BoardEnum board, unsigned int version):
TransformedField(internalField), TransformedField(internalField),
internalField("Curves"), internalField("Curves"),
curves(curves), curves(curves),
board(board), board(board),
maxCurves(MAX_CURVES(board)), version(version),
maxCurves(MAX_CURVES(board, version)),
maxPoints(IS_ARM(board) ? O9X_ARM_NUM_POINTS : O9X_NUM_POINTS) maxPoints(IS_ARM(board) ? O9X_ARM_NUM_POINTS : O9X_NUM_POINTS)
{ {
for (int i=0; i<maxCurves; i++) { for (int i=0; i<maxCurves; i++) {
if (IS_ARM(board)) if (IS_TARANIS(board) && version >= 216) {
internalField.Append(new UnsignedField<3>((unsigned int &)curves[i].type));
internalField.Append(new BoolField<1>(curves[i].smooth));
internalField.Append(new SpareBitsField<4>());
internalField.Append(new ConversionField< SignedField<8> >(curves[i].count, -5));
}
else if (IS_ARM(board)) {
internalField.Append(new SignedField<16>(_curves[i])); internalField.Append(new SignedField<16>(_curves[i]));
else }
else {
internalField.Append(new SignedField<8>(_curves[i])); internalField.Append(new SignedField<8>(_curves[i]));
}
} }
for (int i=0; i<maxPoints; i++) { for (int i=0; i<maxPoints; i++) {
internalField.Append(new SignedField<8>(_points[i])); internalField.Append(new SignedField<8>(_points[i]));
} }
@ -853,46 +977,56 @@ class CurvesField: public TransformedField {
int * cur = &_points[0]; int * cur = &_points[0];
int offset = 0; int offset = 0;
for (int i=0; i<maxCurves; i++) { for (int i=0; i<maxCurves; i++) {
CurveData *curve = &curves[i]; CurveData *curve = &curves[i];
offset += (curve->custom ? curve->count * 2 - 2 : curve->count) - 5; int size = (curve->type == CurveData::CURVE_TYPE_CUSTOM ? curve->count * 2 - 2 : curve->count);
if (offset > maxPoints - 5 * maxCurves) { if (offset+size > maxPoints) {
EEPROMWarnings += ::QObject::tr("openTx only accepts %1 points in all curves").arg(maxPoints) + "\n"; EEPROMWarnings += ::QObject::tr("openTx only accepts %1 points in all curves").arg(maxPoints) + "\n";
break; break;
} }
_curves[i] = offset; if (!IS_TARANIS(board) || version < 216) {
_curves[i] = offset - (5*i);
}
for (int j=0; j<curve->count; j++) { for (int j=0; j<curve->count; j++) {
*cur++ = curve->points[j].y; *cur++ = curve->points[j].y;
} }
if (curve->custom) { if (curve->type == CurveData::CURVE_TYPE_CUSTOM) {
for (int j=1; j<curve->count-1; j++) { for (int j=1; j<curve->count-1; j++) {
*cur++ = curve->points[j].x; *cur++ = curve->points[j].x;
} }
} }
offset += size;
} }
} }
virtual void afterImport() virtual void afterImport()
{ {
int * cur = &_points[0];
for (int i=0; i<maxCurves; i++) { for (int i=0; i<maxCurves; i++) {
CurveData *curve = &curves[i]; CurveData *curve = &curves[i];
int * cur = &_points[i==0 ? 0 : 5*i + _curves[i-1]]; if (!IS_TARANIS(board) || version < 216) {
int * next = &_points[5*(i+1) + _curves[i]]; int * next = &_points[5*(i+1) + _curves[i]];
int size = next - cur; int size = next - cur;
if (size % 2 == 0) { if (size % 2 == 0) {
curve->count = (size / 2) + 1; curve->count = (size / 2) + 1;
curve->custom = true; curve->type = CurveData::CURVE_TYPE_CUSTOM;
}
else {
curve->count = size;
curve->type = CurveData::CURVE_TYPE_STANDARD;
}
} }
else {
curve->count = size; for (int j=0; j<curve->count; j++) {
curve->custom = false; curve->points[j].y = *cur++;
} }
for (int j=0; j<curve->count; j++)
curve->points[j].y = cur[j]; if (curve->type == CurveData::CURVE_TYPE_CUSTOM) {
if (curve->custom) {
curve->points[0].x = -100; curve->points[0].x = -100;
for (int j=1; j<curve->count-1; j++) for (int j=1; j<curve->count-1; j++)
curve->points[j].x = cur[curve->count+j-1]; curve->points[j].x = *cur++;
curve->points[curve->count-1].x = +100; curve->points[curve->count-1].x = +100;
} }
else { else {
@ -906,10 +1040,11 @@ class CurvesField: public TransformedField {
StructField internalField; StructField internalField;
CurveData *curves; CurveData *curves;
BoardEnum board; BoardEnum board;
unsigned int version;
int maxCurves; int maxCurves;
int maxPoints; int maxPoints;
int _curves[O9X_ARM_MAX_CURVES]; int _curves[C9X_MAX_CURVES];
int _points[O9X_ARM_NUM_POINTS]; int _points[C9X_MAX_CURVES*C9X_MAX_POINTS*2];
}; };
class CustomSwitchesFunctionsTable: public ConversionTable { class CustomSwitchesFunctionsTable: public ConversionTable {
@ -1203,10 +1338,10 @@ class CustomFunctionField: public TransformedField {
internalField.Append(new CharField<6>(_arm_param)); internalField.Append(new CharField<6>(_arm_param));
if (version >= 214) { if (version >= 214) {
internalField.Append(new UnsignedField<2>(_mode)); internalField.Append(new UnsignedField<2>(_mode));
internalField.Append(new UnsignedField<6>(_delay)); internalField.Append(new SignedField<6>(_delay));
} }
else { else {
internalField.Append(new UnsignedField<8>(_delay)); internalField.Append(new UnsignedField<8>((unsigned int &)_delay));
} }
if (version < 214) if (version < 214)
internalField.Append(new SpareBitsField<8>()); internalField.Append(new SpareBitsField<8>());
@ -1229,7 +1364,7 @@ class CustomFunctionField: public TransformedField {
if (IS_ARM(board)) { if (IS_ARM(board)) {
_mode = 0; _mode = 0;
if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue) if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue)
_delay = fn.repeatParam / 5; _delay = (version >= 216 ? fn.repeatParam : (fn.repeatParam/5));
else else
_delay = (fn.enabled ? 1 : 0); _delay = (fn.enabled ? 1 : 0);
if (fn.func <= FuncInstantTrim) { if (fn.func <= FuncInstantTrim) {
@ -1238,7 +1373,7 @@ class CustomFunctionField: public TransformedField {
else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic) { else if (fn.func == FuncPlayPrompt || fn.func == FuncBackgroundMusic) {
memcpy(_arm_param, fn.paramarm, sizeof(_arm_param)); memcpy(_arm_param, fn.paramarm, sizeof(_arm_param));
} }
else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGV5) { else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) {
unsigned int value; unsigned int value;
if (version >= 214) { if (version >= 214) {
_mode = fn.adjustMode; _mode = fn.adjustMode;
@ -1268,7 +1403,7 @@ class CustomFunctionField: public TransformedField {
/* the default behavior */ /* the default behavior */
_param = fn.param; _param = fn.param;
_union_param = (fn.enabled ? 1 : 0); _union_param = (fn.enabled ? 1 : 0);
if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGV5) { if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) {
if (version >= 213) { if (version >= 213) {
_union_param += (fn.adjustMode << 1); _union_param += (fn.adjustMode << 1);
if (fn.adjustMode == 1) if (fn.adjustMode == 1)
@ -1304,7 +1439,7 @@ class CustomFunctionField: public TransformedField {
{ {
if (IS_ARM(board)) { if (IS_ARM(board)) {
if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue) if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue)
fn.repeatParam = _delay * 5; fn.repeatParam = (version >= 216 ? _delay : (_delay*5));
else else
fn.enabled = (_delay & 0x01); fn.enabled = (_delay & 0x01);
@ -1321,7 +1456,7 @@ class CustomFunctionField: public TransformedField {
else if (fn.func == FuncVolume) { else if (fn.func == FuncVolume) {
sourcesConversionTable->importValue(value, (int &)fn.param); sourcesConversionTable->importValue(value, (int &)fn.param);
} }
else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGV5) { else if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) {
if (version >= 214) { if (version >= 214) {
fn.adjustMode = _mode; fn.adjustMode = _mode;
if (fn.adjustMode == 1) if (fn.adjustMode == 1)
@ -1350,7 +1485,7 @@ class CustomFunctionField: public TransformedField {
if (version >= 213) { if (version >= 213) {
fn.enabled = (_union_param & 0x01); fn.enabled = (_union_param & 0x01);
} }
if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGV5) { if (fn.func >= FuncAdjustGV1 && fn.func <= FuncAdjustGVLast) {
if (version >= 213) { if (version >= 213) {
fn.adjustMode = ((_union_param >> 1) & 0x03); fn.adjustMode = ((_union_param >> 1) & 0x03);
if (fn.adjustMode == 1) if (fn.adjustMode == 1)
@ -1394,7 +1529,7 @@ class CustomFunctionField: public TransformedField {
SourcesConversionTable * sourcesConversionTable; SourcesConversionTable * sourcesConversionTable;
char _arm_param[10]; char _arm_param[10];
unsigned int _param; unsigned int _param;
unsigned int _delay; int _delay;
unsigned int _mode; unsigned int _mode;
unsigned int _union_param; unsigned int _union_param;
}; };
@ -1551,7 +1686,13 @@ class FrskyField: public StructField {
Append(new UnsignedField<8>(frsky.channels[i].multiplier, 0, 5, "Multiplier")); Append(new UnsignedField<8>(frsky.channels[i].multiplier, 0, 5, "Multiplier"));
} }
Append(new UnsignedField<8>(frsky.usrProto)); Append(new UnsignedField<8>(frsky.usrProto));
Append(new UnsignedField<8>(frsky.voltsSource)); if (version >= 216) {
Append(new UnsignedField<7>(frsky.voltsSource));
Append(new BoolField<1>(frsky.altitudeDisplayed));
}
else {
Append(new UnsignedField<8>(frsky.voltsSource));
}
Append(new UnsignedField<8>(frsky.blades)); Append(new UnsignedField<8>(frsky.blades));
Append(new UnsignedField<8>(frsky.currentSource)); Append(new UnsignedField<8>(frsky.currentSource));
@ -1575,6 +1716,11 @@ class FrskyField: public StructField {
Append(new ConversionField< UnsignedField<2> >(frsky.rssiAlarms[i].level, &rssiConversionTable[i], "RSSI")); Append(new ConversionField< UnsignedField<2> >(frsky.rssiAlarms[i].level, &rssiConversionTable[i], "RSSI"));
Append(new ConversionField< SignedField<6> >(frsky.rssiAlarms[i].value, -45+i*3)); Append(new ConversionField< SignedField<6> >(frsky.rssiAlarms[i].value, -45+i*3));
} }
if (version >= 216) {
Append(new BoolField<1>(frsky.mAhPersistent));
Append(new UnsignedField<15>(frsky.storedMah));
Append(new SignedField<8>(frsky.fasOffset));
}
} }
else { else {
for (int i=0; i<2; i++) { for (int i=0; i<2; i++) {
@ -1598,7 +1744,7 @@ class FrskyField: public StructField {
Append(new SignedField<4>(frsky.varioMax)); Append(new SignedField<4>(frsky.varioMax));
for (int i=0; i<2; i++) { for (int i=0; i<2; i++) {
Append(new ConversionField< UnsignedField<2> >(frsky.rssiAlarms[i].level, &rssiConversionTable[i], "RSSI level")); Append(new ConversionField< UnsignedField<2> >(frsky.rssiAlarms[i].level, &rssiConversionTable[i], "RSSI level"));
Append(new ConversionField< SignedField<6> >(frsky.rssiAlarms[i].value, -45+i*3, 0, 100, "RSSI value")); Append(new ConversionField< SignedField<6> >(frsky.rssiAlarms[i].value, -45+i*3, 0, 0, 100, "RSSI value"));
} }
for (int i=0; i<2; i++) { for (int i=0; i<2; i++) {
Append(new FrskyScreenField(frsky.screens[i], board, version)); Append(new FrskyScreenField(frsky.screens[i], board, version));
@ -1607,6 +1753,10 @@ class FrskyField: public StructField {
Append(new SignedField<5>(frsky.varioCenterMin)); Append(new SignedField<5>(frsky.varioCenterMin));
Append(new UnsignedField<3>(frsky.currentSource)); Append(new UnsignedField<3>(frsky.currentSource));
Append(new SignedField<8>(frsky.varioCenterMax)); Append(new SignedField<8>(frsky.varioCenterMax));
if (version >= 216) {
// TODO int8_t fasOffset;
Append(new SpareBitsField<8>());
}
} }
} }
@ -1658,10 +1808,17 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u
for (int i=0; i<O9X_MAX_TIMERS; i++) { for (int i=0; i<O9X_MAX_TIMERS; i++) {
internalField.Append(new TimerModeField(modelData.timers[i].mode, board, version)); internalField.Append(new TimerModeField(modelData.timers[i].mode, board, version));
if (release21March2013) { if ((IS_ARM(board) || IS_2560(board)) && version >= 216) {
internalField.Append(new UnsignedField<16>(modelData.timers[i].val));
internalField.Append(new UnsignedField<2>(modelData.timers[i].countdownBeep));
internalField.Append(new BoolField<1>(modelData.timers[i].minuteBeep));
internalField.Append(new BoolField<1>(modelData.timers[i].persistent));
internalField.Append(new SpareBitsField<4>());
internalField.Append(new SignedField<16>(modelData.timers[i].pvalue));
}
else if (release21March2013) {
internalField.Append(new UnsignedField<12>(modelData.timers[i].val)); internalField.Append(new UnsignedField<12>(modelData.timers[i].val));
internalField.Append(new BoolField<1>((bool &)modelData.timers[i].countdownBeep));
internalField.Append(new BoolField<1>(modelData.timers[i].countdownBeep));
internalField.Append(new BoolField<1>(modelData.timers[i].minuteBeep)); internalField.Append(new BoolField<1>(modelData.timers[i].minuteBeep));
if (HAS_PERSISTENT_TIMERS(board)) { if (HAS_PERSISTENT_TIMERS(board)) {
internalField.Append(new BoolField<1>(modelData.timers[i].persistent)); internalField.Append(new BoolField<1>(modelData.timers[i].persistent));
@ -1688,15 +1845,19 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u
internalField.Append(new BoolField<1>(modelData.thrTrim)); internalField.Append(new BoolField<1>(modelData.thrTrim));
if (IS_TARANIS(board)) if (IS_TARANIS(board) || (IS_ARM(board) && version >= 216))
internalField.Append(new SpareBitsField<4>()); internalField.Append(new SpareBitsField<4>());
else else
internalField.Append(new ConversionField< SignedField<4> >(modelData.moduleData[0].channelsCount, &channelsConversionTable, "Channels number", ::QObject::tr("OpenTX doesn't allow this number of channels"))); internalField.Append(new ConversionField< SignedField<4> >(modelData.moduleData[0].channelsCount, &channelsConversionTable, "Channels number", ::QObject::tr("OpenTX doesn't allow this number of channels")));
internalField.Append(new UnsignedField<3>(modelData.trimInc)); if (version >= 216)
internalField.Append(new SignedField<3>(modelData.trimInc));
else
internalField.Append(new ConversionField< SignedField<3> >(modelData.trimInc, +2));
internalField.Append(new BoolField<1>(modelData.disableThrottleWarning)); internalField.Append(new BoolField<1>(modelData.disableThrottleWarning));
if (IS_TARANIS(board)) if (IS_TARANIS(board) || (IS_ARM(board) && version >= 216))
internalField.Append(new SpareBitsField<1>()); internalField.Append(new SpareBitsField<1>());
else else
internalField.Append(new BoolField<1>(modelData.moduleData[0].ppmPulsePol)); internalField.Append(new BoolField<1>(modelData.moduleData[0].ppmPulsePol));
@ -1704,7 +1865,10 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u
internalField.Append(new BoolField<1>(modelData.extendedLimits)); internalField.Append(new BoolField<1>(modelData.extendedLimits));
internalField.Append(new BoolField<1>(modelData.extendedTrims)); internalField.Append(new BoolField<1>(modelData.extendedTrims));
internalField.Append(new BoolField<1>(modelData.throttleReversed)); internalField.Append(new BoolField<1>(modelData.throttleReversed));
internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[0].ppmDelay, exportPpmDelay, importPpmDelay));
if (!IS_ARM(board) || version < 216) {
internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[0].ppmDelay, exportPpmDelay, importPpmDelay));
}
if (IS_ARM(board) || board==BOARD_GRUVIN9X) if (IS_ARM(board) || board==BOARD_GRUVIN9X)
internalField.Append(new UnsignedField<16>(modelData.beepANACenter)); internalField.Append(new UnsignedField<16>(modelData.beepANACenter));
@ -1714,10 +1878,10 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u
for (int i=0; i<MAX_MIXERS(board, version); i++) for (int i=0; i<MAX_MIXERS(board, version); i++)
internalField.Append(new MixField(modelData.mixData[i], board, version)); internalField.Append(new MixField(modelData.mixData[i], board, version));
for (int i=0; i<MAX_CHANNELS(board, version); i++) for (int i=0; i<MAX_CHANNELS(board, version); i++)
internalField.Append(new LimitField(modelData.limitData[i], board)); internalField.Append(new LimitField(modelData.limitData[i], board, version));
for (int i=0; i<MAX_EXPOS(board, version); i++) for (int i=0; i<MAX_EXPOS(board, version); i++)
internalField.Append(new ExpoField(modelData.expoData[i], board, version)); internalField.Append(new ExpoField(modelData.expoData[i], board, version));
internalField.Append(new CurvesField(modelData.curves, board)); internalField.Append(new CurvesField(modelData.curves, board, version));
for (int i=0; i<MAX_CUSTOM_SWITCHES(board, version); i++) for (int i=0; i<MAX_CUSTOM_SWITCHES(board, version); i++)
internalField.Append(new CustomSwitchField(modelData.customSw[i], board, version, variant)); internalField.Append(new CustomSwitchField(modelData.customSw[i], board, version, variant));
for (int i=0; i<MAX_CUSTOM_FUNCTIONS(board, version); i++) for (int i=0; i<MAX_CUSTOM_FUNCTIONS(board, version); i++)
@ -1725,11 +1889,16 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u
internalField.Append(new HeliField(modelData.swashRingData, board, version, variant)); internalField.Append(new HeliField(modelData.swashRingData, board, version, variant));
for (int i=0; i<MAX_PHASES(board, version); i++) for (int i=0; i<MAX_PHASES(board, version); i++)
internalField.Append(new PhaseField(modelData.phaseData[i], i, board, version)); internalField.Append(new PhaseField(modelData.phaseData[i], i, board, version));
internalField.Append(new SignedField<8>(modelData.moduleData[0].ppmFrameLength));
if (!IS_ARM(board) || version < 216) {
internalField.Append(new SignedField<8>(modelData.moduleData[0].ppmFrameLength));
}
internalField.Append(new UnsignedField<8>(modelData.thrTraceSrc)); internalField.Append(new UnsignedField<8>(modelData.thrTraceSrc));
if (!release21March2013) if (!release21March2013) {
internalField.Append(new UnsignedField<8>(modelData.modelId)); internalField.Append(new UnsignedField<8>(modelData.modelId));
}
if (IS_TARANIS(board)) if (IS_TARANIS(board))
internalField.Append(new UnsignedField<16>(modelData.switchWarningStates)); internalField.Append(new UnsignedField<16>(modelData.switchWarningStates));
@ -1737,15 +1906,19 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u
internalField.Append(new SwitchesWarningField<8>(modelData.switchWarningStates, board, version)); internalField.Append(new SwitchesWarningField<8>(modelData.switchWarningStates, board, version));
if ((board == BOARD_STOCK || (board == BOARD_M128 && version >= 215)) && (variant & GVARS_VARIANT)) { if ((board == BOARD_STOCK || (board == BOARD_M128 && version >= 215)) && (variant & GVARS_VARIANT)) {
for (int i=0; i<O9X_MAX_GVARS; i++) { for (int i=0; i<MAX_GVARS(board, version); i++) {
// on M64 GVARS are common to all phases, and there is no name // on M64 GVARS are common to all phases, and there is no name
internalField.Append(new SignedField<16>(modelData.phaseData[0].gvars[i])); internalField.Append(new SignedField<16>(modelData.phaseData[0].gvars[i]));
} }
} }
if (board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) { if (board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) {
for (int i=0; i<O9X_MAX_GVARS; i++) { for (int i=0; i<MAX_GVARS(board, version); i++) {
internalField.Append(new ZCharField<6>(modelData.gvars_names[i])); internalField.Append(new ZCharField<6>(modelData.gvars_names[i]));
if (version >= 216) {
internalField.Append(new BoolField<1>(modelData.gvars_popups[i]));
internalField.Append(new SpareBitsField<7>());
}
} }
} }
@ -1783,31 +1956,41 @@ Open9xModelDataNew::Open9xModelDataNew(ModelData & modelData, BoardEnum board, u
} }
if (IS_TARANIS(board)) { if (IS_TARANIS(board)) {
for (int i=0; i<MAX_CURVES(board); i++) { for (int i=0; i<MAX_CURVES(board, version); i++) {
internalField.Append(new ZCharField<6>(modelData.curves[i].name)); internalField.Append(new ZCharField<6>(modelData.curves[i].name));
} }
} }
if (IS_TARANIS(board) && version >= 216) {
// TODO ScriptData scriptsData[MAX_SCRIPTS];
internalField.Append(new SpareBitsField<720>());
for (int i=0; i<32; i++)
internalField.Append(new ZCharField<4>(modelData.inputNames[i]));
}
} }
void Open9xModelDataNew::beforeExport() void Open9xModelDataNew::beforeExport()
{ {
// qDebug() << QString("before export model") << modelData.name; // qDebug() << QString("before export model") << modelData.name;
for (int module=0; module<3; module++) { for (int module=0; module<3; module++) {
if (modelData.moduleData[module].protocol >= PXX_XJT_X16 && modelData.moduleData[module].protocol <= PXX_XJT_LR12) if (modelData.moduleData[module].protocol >= PXX_XJT_X16 && modelData.moduleData[module].protocol <= PXX_XJT_LR12)
subprotocols[module] = modelData.moduleData[module].protocol - PXX_XJT_X16; subprotocols[module] = modelData.moduleData[module].protocol - PXX_XJT_X16;
else if (modelData.moduleData[module].protocol >= LP45 && modelData.moduleData[module].protocol <= DSMX)
subprotocols[module] = modelData.moduleData[module].protocol - LP45;
else else
subprotocols[module] = (module==0 ? -1:0); subprotocols[module] = (module==0 ? -1 : 0);
} }
} }
void Open9xModelDataNew::afterImport() void Open9xModelDataNew::afterImport()
{ {
// qDebug() << QString("after import model") << modelData.name; // qDebug() << QString("after import model") << modelData.name ;
for (int module=0; module<3; module++) { for (int module=0; module<3; module++) {
if (modelData.moduleData[module].protocol == PXX_XJT_X16) { if (modelData.moduleData[module].protocol == PXX_XJT_X16 || modelData.moduleData[module].protocol == LP45) {
if (subprotocols[module]>=0) if (subprotocols[module] >= 0)
modelData.moduleData[module].protocol = PXX_XJT_X16 + subprotocols[module]; modelData.moduleData[module].protocol += subprotocols[module];
else else
modelData.moduleData[module].protocol = OFF; modelData.moduleData[module].protocol = OFF;
} }
@ -1864,10 +2047,11 @@ Open9xGeneralDataNew::Open9xGeneralDataNew(GeneralSettings & generalData, BoardE
internalField.Append(new SpareBitsField<1>()); internalField.Append(new SpareBitsField<1>());
internalField.Append(new UnsignedField<8>(generalData.inactivityTimer)); internalField.Append(new UnsignedField<8>(generalData.inactivityTimer));
if (IS_STOCK(board) && version >= 215) { if (IS_9X(board) && version >= 215) {
internalField.Append(new UnsignedField<3>(generalData.mavbaud)); internalField.Append(new UnsignedField<3>(generalData.mavbaud));
} else { }
internalField.Append(new BoolField<1>(generalData.throttleReversed)); else {
internalField.Append(new SpareBitsField<1>());
internalField.Append(new BoolField<1>(generalData.minuteBeep)); internalField.Append(new BoolField<1>(generalData.minuteBeep));
internalField.Append(new BoolField<1>(generalData.preBeep)); internalField.Append(new BoolField<1>(generalData.preBeep));
} }
@ -1892,9 +2076,9 @@ Open9xGeneralDataNew::Open9xGeneralDataNew(GeneralSettings & generalData, BoardE
internalField.Append(new UnsignedField<8>(generalData.speakerPitch)); internalField.Append(new UnsignedField<8>(generalData.speakerPitch));
if (IS_ARM(board)) if (IS_ARM(board))
internalField.Append(new ConversionField< SignedField<8> >(generalData.speakerVolume, -12, 0, 23, "Volume")); internalField.Append(new ConversionField< SignedField<8> >(generalData.speakerVolume, -12, 0, 0, 23, "Volume"));
else else
internalField.Append(new ConversionField< SignedField<8> >(generalData.speakerVolume, -7, 0, 7, "Volume")); internalField.Append(new ConversionField< SignedField<8> >(generalData.speakerVolume, -7, 0, 0, 7, "Volume"));
if (version >= 214 || (!IS_ARM(board) && version >= 213)) { if (version >= 214 || (!IS_ARM(board) && version >= 213)) {
internalField.Append(new SignedField<8>(generalData.vBatMin)); internalField.Append(new SignedField<8>(generalData.vBatMin));
@ -1926,6 +2110,9 @@ Open9xGeneralDataNew::Open9xGeneralDataNew(GeneralSettings & generalData, BoardE
internalField.Append(new SignedField<8>(generalData.varioVolume)); internalField.Append(new SignedField<8>(generalData.varioVolume));
internalField.Append(new SignedField<8>(generalData.backgroundVolume)); internalField.Append(new SignedField<8>(generalData.backgroundVolume));
} }
if (version >= 216) {
internalField.Append(new UnsignedField<8>(generalData.hw_uartMode));
}
} }
} }

View file

@ -42,7 +42,6 @@
#define O9X_NUM_FSW 16 // number of functions assigned to switches #define O9X_NUM_FSW 16 // number of functions assigned to switches
#define O9X_MAX_CURVES 8 #define O9X_MAX_CURVES 8
#define O9X_NUM_POINTS (112-O9X_MAX_CURVES) #define O9X_NUM_POINTS (112-O9X_MAX_CURVES)
#define O9X_MAX_GVARS 5
#define O9X_ARM_MAX_PHASES 9 #define O9X_ARM_MAX_PHASES 9
#define O9X_ARM_MAX_MIXERS 64 #define O9X_ARM_MAX_MIXERS 64
@ -50,7 +49,6 @@
#define O9X_ARM_NUM_CHNOUT 32 // number of real output channels CH1-CH16 #define O9X_ARM_NUM_CHNOUT 32 // number of real output channels CH1-CH16
#define O9X_ARM_NUM_CSW 32 // number of custom switches #define O9X_ARM_NUM_CSW 32 // number of custom switches
#define O9X_ARM_NUM_FSW 32 // number of functions assigned to switches #define O9X_ARM_NUM_FSW 32 // number of functions assigned to switches
#define O9X_ARM_MAX_CURVES 16
#define O9X_ARM_NUM_POINTS 512 #define O9X_ARM_NUM_POINTS 512
#define O9X_ARM_MAX_CSFUNCOLD 13 #define O9X_ARM_MAX_CSFUNCOLD 13
#define O9X_ARM_MAX_CSFUNC 15 #define O9X_ARM_MAX_CSFUNC 15
@ -76,8 +74,9 @@ class ProtocolsConversionTable: public ConversionTable
ProtocolsConversionTable(BoardEnum board) ProtocolsConversionTable(BoardEnum board)
{ {
int val = 0; int val = 0;
if (IS_TARANIS(board)) if (IS_TARANIS(board)) {
addConversion(OFF, val++); addConversion(OFF, val++);
}
addConversion(PPM, val++); addConversion(PPM, val++);
if (!IS_ARM(board)) { if (!IS_ARM(board)) {
addConversion(PPM16, val++); addConversion(PPM16, val++);
@ -88,9 +87,13 @@ class ProtocolsConversionTable: public ConversionTable
addConversion(PXX_XJT_D8, val); addConversion(PXX_XJT_D8, val);
addConversion(PXX_XJT_LR12, val++); addConversion(PXX_XJT_LR12, val++);
} }
addConversion(PXX_DJT, val++); else {
addConversion(PXX_DJT, val++);
}
if (IS_TARANIS(board)) { if (IS_TARANIS(board)) {
addConversion(DSM2, val++); addConversion(LP45, val);
addConversion(DSM2, val);
addConversion(DSMX, val++);
} }
else { else {
addConversion(LP45, val++); addConversion(LP45, val++);
@ -128,7 +131,7 @@ class Open9xModelDataNew: public TransformedField {
private: private:
char name[256]; char name[256];
signed int subprotocols[C9X_NUM_MODULES+1/*trainer*/]; int subprotocols[C9X_NUM_MODULES+1/*trainer*/];
ProtocolsConversionTable protocolsConversionTable; ProtocolsConversionTable protocolsConversionTable;
ChannelsConversionTable channelsConversionTable; ChannelsConversionTable channelsConversionTable;
}; };

View file

@ -16,14 +16,14 @@
#include <iostream> #include <iostream>
#include <QMessageBox> #include <QMessageBox>
#include "open9xinterface.h" #include "opentxinterface.h"
#include "open9xeeprom.h" #include "opentxeeprom.h"
#include "open9xGruvin9xeeprom.h" #include "open9xGruvin9xeeprom.h"
#include "open9xSky9xeeprom.h" #include "open9xSky9xeeprom.h"
#include "open9xsimulator.h" #include "opentxsimulator.h"
#include "open9xM128simulator.h" #include "opentxM128simulator.h"
#include "open9xGruvin9xsimulator.h" #include "opentxGruvin9xsimulator.h"
#include "open9xSky9xsimulator.h" #include "opentxSky9xsimulator.h"
#include "opentxTaranisSimulator.h" #include "opentxTaranisSimulator.h"
#include "file.h" #include "file.h"
@ -42,14 +42,10 @@ size_t SizeOfArray( T(&)[ N ] )
return N; return N;
} }
QStringList o9xservers;
Open9xInterface::Open9xInterface(BoardEnum board): Open9xInterface::Open9xInterface(BoardEnum board):
EEPROMInterface(board), EEPROMInterface(board),
efile(new EFile()) efile(new EFile())
{ {
o9xservers.clear();
o9xservers << "93.51.182.154" << "open9x.9xforums.com";
} }
Open9xInterface::~Open9xInterface() Open9xInterface::~Open9xInterface()
@ -278,15 +274,7 @@ bool Open9xInterface::saveGeneral(GeneralSettings &settings, BoardEnum board, ui
} }
template <class T> template <class T>
bool Open9xInterface::saveModel(unsigned int index, ModelData &model) bool Open9xInterface::saveModel(unsigned int index, ModelData &model, unsigned int version, unsigned int variant)
{
T open9xModel(model);
int sz = efile->writeRlc2(FILE_MODEL(index), FILE_TYP_MODEL, (uint8_t*)&open9xModel, sizeof(T));
return (sz == sizeof(T));
}
template <class T>
bool Open9xInterface::saveModelVariant(unsigned int index, ModelData &model, unsigned int version, unsigned int variant)
{ {
T open9xModel(model, board, version, variant); T open9xModel(model, board, version, variant);
// open9xModel.Dump(); // open9xModel.Dump();
@ -317,7 +305,7 @@ bool Open9xInterface::load(RadioData &radioData, uint8_t *eeprom, int size)
std::cout << " wrong size (" << size << ")\n"; std::cout << " wrong size (" << size << ")\n";
return false; return false;
} else { } else {
QMessageBox::warning(NULL,"companion9x", QObject::tr("Your radio probably uses a wrong firmware,\n eeprom size is 4096 but only the first 2048 are used")); QMessageBox::warning(NULL, "companion", QObject::tr("Your radio probably uses a wrong firmware,\n eeprom size is 4096 but only the first 2048 are used"));
size=2048; size=2048;
} }
} else { } else {
@ -371,16 +359,16 @@ int Open9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t varian
case BOARD_TARANIS: case BOARD_TARANIS:
case BOARD_TARANIS_REV4a: case BOARD_TARANIS_REV4a:
case BOARD_SKY9X: case BOARD_SKY9X:
version = 215; version = 216;
break; break;
case BOARD_GRUVIN9X: case BOARD_GRUVIN9X:
version = 214; version = 216;
break; break;
case BOARD_M128: case BOARD_M128:
version = 215; version = 216;
break; break;
case BOARD_STOCK: case BOARD_STOCK:
version = 213; version = 216;
break; break;
} }
} }
@ -389,81 +377,21 @@ int Open9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t varian
efile->EeFsCreate(eeprom, size, board); efile->EeFsCreate(eeprom, size, board);
int result = 0;
if (board == BOARD_M128) { if (board == BOARD_M128) {
variant |= M128_VARIANT; variant |= M128_VARIANT;
} }
result = saveGeneral<Open9xGeneralDataNew>(radioData.generalSettings, board, version, variant); int result = saveGeneral<Open9xGeneralDataNew>(radioData.generalSettings, board, version, variant);
if (!result) {
if (!result)
return 0; return 0;
}
for (int i=0; i<getMaxModels(); i++) { for (int i=0; i<getMaxModels(); i++) {
if (!radioData.models[i].isempty()) { if (!radioData.models[i].isempty()) {
result = 0; result = saveModel<Open9xModelDataNew>(i, radioData.models[i], version, variant);
switch(version) { if (!result) {
case 202: return 0;
result = saveModel<Open9xModelData_v202>(i, radioData.models[i]);
break;
case 203:
result = saveModel<Open9xModelData_v203>(i, radioData.models[i]);
break;
case 204:
result = saveModel<Open9xModelData_v204>(i, radioData.models[i]);
break;
case 205:
result = saveModel<Open9xModelData_v205>(i, radioData.models[i]);
break;
case 207:
if (board == BOARD_GRUVIN9X)
result = saveModel<Open9xGruvin9xModelData_v207>(i, radioData.models[i]);
break;
case 208:
if (board == BOARD_GRUVIN9X)
result = saveModel<Open9xGruvin9xModelData_v208>(i, radioData.models[i]);
else if (board == BOARD_SKY9X)
result = saveModel<Open9xArmModelData_v208>(i, radioData.models[i]);
else
result = saveModel<Open9xModelData_v208>(i, radioData.models[i]);
break;
case 209:
if (board == BOARD_GRUVIN9X)
result = saveModel<Open9xGruvin9xModelData_v209>(i, radioData.models[i]);
else if (board == BOARD_SKY9X)
result = saveModel<Open9xArmModelData_v209>(i, radioData.models[i]);
else
result = saveModel<Open9xModelData_v209>(i, radioData.models[i]);
break;
case 210:
if (board == BOARD_GRUVIN9X)
result = saveModel<Open9xGruvin9xModelData_v210>(i, radioData.models[i]);
else if (board == BOARD_SKY9X)
result = saveModel<Open9xArmModelData_v210>(i, radioData.models[i]);
else
result = saveModel<Open9xModelData_v210>(i, radioData.models[i]);
break;
case 211:
if (board == BOARD_GRUVIN9X)
result = saveModel<Open9xGruvin9xModelData_v211>(i, radioData.models[i]);
else if (board == BOARD_SKY9X)
result = saveModel<Open9xArmModelData_v211>(i, radioData.models[i]);
else
result = saveModel<Open9xModelData_v211>(i, radioData.models[i]);
break;
case 212:
if (board == BOARD_SKY9X)
result = saveModel<Open9xArmModelData_v212>(i, radioData.models[i]);
else
result = saveModelVariant<Open9xModelDataNew>(i, radioData.models[i], version, variant);
break;
default:
result = saveModelVariant<Open9xModelDataNew>(i, radioData.models[i], version, variant);
break;
} }
if (!result)
return false;
} }
} }
@ -488,7 +416,6 @@ int Open9xInterface::getSize(ModelData &model)
efile->EeFsCreate(tmp, EESIZE_RLC_MAX, board); efile->EeFsCreate(tmp, EESIZE_RLC_MAX, board);
Open9xModelDataNew open9xModel(model, board, 255, GetCurrentFirmwareVariant()); Open9xModelDataNew open9xModel(model, board, 255, GetCurrentFirmwareVariant());
// open9xModel.Dump();
QByteArray eeprom; QByteArray eeprom;
open9xModel.Export(eeprom); open9xModel.Export(eeprom);
@ -562,12 +489,14 @@ int Open9xInterface::getCapability(const Capability capability)
return 6; return 6;
else else
return 5; return 5;
case FlightPhasesAreNamed:
case FlightPhasesHaveFades: case FlightPhasesHaveFades:
return 1;
case Gvars: case Gvars:
return IS_ARM(board) ? 9 : 5;
case FlightModesName:
case GvarsName:
return (IS_TARANIS(board) ? 10 : 6);
case GvarsInCS: case GvarsInCS:
case GvarsAsWeight:
case ExpoIsCurve:
case HasFAIMode: case HasFAIMode:
return 1; return 1;
case GvarsAreNamed: case GvarsAreNamed:
@ -584,10 +513,6 @@ int Open9xInterface::getCapability(const Capability capability)
return 1; return 1;
else else
return 0; return 0;
case minuteBeep:
return 1;
case countdownBeep:
return 1;
case Pots: case Pots:
return (IS_TARANIS(board) ? 4 : 3); return (IS_TARANIS(board) ? 4 : 3);
case Switches: case Switches:
@ -663,27 +588,12 @@ int Open9xInterface::getCapability(const Capability capability)
return 0; return 0;
case ExtraInputs: case ExtraInputs:
return 1; return 1;
case HasNegCurves:
return 1;
case HasExpoCurves:
return true;
case ExpoCurve5:
case ExpoCurve9:
return 4;
case ExtendedTrims: case ExtendedTrims:
return 500; return 500;
case ExtraTrims:
return 1;
case Simulation: case Simulation:
return 1; return 1;
case DSM2Indexes: case DSM2Indexes:
return 1; return 1;
case FSSwitch:
return 1;
case HasTTrace:
return 1;
case CustomCurves:
return 1;
case MixesWithoutExpo: case MixesWithoutExpo:
return 1; return 1;
case NumCurves: case NumCurves:
@ -692,36 +602,20 @@ int Open9xInterface::getCapability(const Capability capability)
return (IS_ARM(board) ? (IS_TARANIS(board) ? 8 : 6) : false); return (IS_ARM(board) ? (IS_TARANIS(board) ? 8 : 6) : false);
case HasExpoNames: case HasExpoNames:
return (IS_ARM(board) ? (IS_TARANIS(board) ? 8 : 6) : false); return (IS_ARM(board) ? (IS_TARANIS(board) ? 8 : 6) : false);
case HasChNames: case ChannelsName:
return (IS_TARANIS(board) ? 1 : 0); return (IS_TARANIS(board) ? 6 : 0);
case HasCvNames: case HasCvNames:
return (IS_TARANIS(board) ? 1 : 0); return (IS_TARANIS(board) ? 1 : 0);
case NoTimerDirs:
return 1;
case NoThrExpo:
return 1;
case Telemetry: case Telemetry:
return TM_HASTELEMETRY|TM_HASOFFSET|TM_HASWSHH; return TM_HASTELEMETRY|TM_HASOFFSET|TM_HASWSHH;
case TelemetryBars: case TelemetryBars:
return 1; return 1;
case TelemetryCSFields: case TelemetryCustomScreens:
if (IS_TARANIS(board)) { return IS_TARANIS(board) ? 3 : 2;
return 36; case TelemetryCustomScreensFieldsPerLine:
} else { return IS_TARANIS(board) ? 3 : 2;
return IS_ARM(board) ? 24 : 16;
}
case TelemetryColsCSFields:
if (IS_TARANIS(board)) {
return 3;
} else {
return 2;
}
case NoTelemetryProtocol: case NoTelemetryProtocol:
if (IS_TARANIS(board)) { return IS_TARANIS(board) ? 1 : 0;
return 1;
} else {
return 0;
}
case TelemetryUnits: case TelemetryUnits:
return 0; return 0;
case TelemetryBlades: case TelemetryBlades:
@ -734,8 +628,6 @@ int Open9xInterface::getCapability(const Capability capability)
return 1; return 1;
case TelemetryMaxMultiplier: case TelemetryMaxMultiplier:
return (IS_ARM(board) ? 32 : 8); return (IS_ARM(board) ? 32 : 8);
case DiffMixers:
return 1;
case PPMCenter: case PPMCenter:
return 1; return 1;
case SYMLimits: case SYMLimits:
@ -766,10 +658,6 @@ int Open9xInterface::getCapability(const Capability capability)
case HasBrightness: case HasBrightness:
return (IS_ARM(board) ? true : false); return (IS_ARM(board) ? true : false);
case PerModelTimers: case PerModelTimers:
case PerModelThrottleWarning:
case PerModelThrottleInvert:
return 1;
case pmSwitchMask:
return 1; return 1;
case SlowScale: case SlowScale:
return (IS_ARM(board) ? 10 : 2); return (IS_ARM(board) ? 10 : 2);
@ -777,15 +665,23 @@ int Open9xInterface::getCapability(const Capability capability)
return (IS_ARM(board) ? 250 : 15); return (IS_ARM(board) ? 250 : 15);
case CSFunc: case CSFunc:
return 18; return 18;
case GvarsNum:
case GvarsOfsNum:
return 5;
case HasSDLogs: case HasSDLogs:
return ((board == BOARD_GRUVIN9X || IS_ARM(board)) ? true : false); return ((board == BOARD_GRUVIN9X || IS_ARM(board)) ? true : false);
case LCDWidth: case LCDWidth:
return (IS_TARANIS(board) ? 212 : 128) ; return (IS_TARANIS(board) ? 212 : 128) ;
case GetThrSwitch: case GetThrSwitch:
return (IS_TARANIS(board) ?DSW_SF1 : DSW_THR) ; return (IS_TARANIS(board) ? DSW_SF1 : DSW_THR) ;
case VirtualInputs:
return IS_TARANIS(board) ? 32 : 0;
case LuaInputs:
case LimitsPer1000:
case EnhancedCurves:
case TelemetryInternalAlarms:
return IS_TARANIS(board);
case HasFasOffset:
return (IS_STOCK(board) ? false : true);
case HasMahPersistent:
return (IS_ARM(board) ? true : false);
default: default:
return 0; return 0;
} }
@ -814,12 +710,15 @@ int Open9xInterface::isAvailable(Protocol proto, int port)
case PXX_XJT_D8: case PXX_XJT_D8:
case PXX_XJT_LR12: case PXX_XJT_LR12:
case PXX_DJT: case PXX_DJT:
case LP45:
case DSM2:
case DSMX:
return 1; return 1;
default: default:
return 0; return 0;
} }
break; break;
case 2: case -1:
switch (proto) { switch (proto) {
case PPM: case PPM:
return 1; return 1;
@ -954,6 +853,9 @@ bool Open9xInterface::checkVersion(unsigned int version)
case 215: case 215:
// M128 revert because too much RAM used! // M128 revert because too much RAM used!
break; break;
case 216:
// A lot of things (first github release)
break;
default: default:
return false; return false;
} }
@ -1026,14 +928,9 @@ bool Open9xInterface::loadBackup(RadioData &radioData, uint8_t *eeprom, int esiz
QString geturl( int board) QString geturl( int board)
{ {
QString url="http://"; QSettings settings;
QSettings settings("companion9x", "companion9x"); QString url = settings.value("compilation-server", OPENTX_FIRMWARE_DOWNLOADS).toString();
int server = settings.value("fwserver", 0).toInt();
if (server >= o9xservers.count()) {
server = 0;
settings.setValue("fwserver",server);
}
url.append(o9xservers.at(server));
switch(board) { switch(board) {
case BOARD_STOCK: case BOARD_STOCK:
case BOARD_M128: case BOARD_M128:
@ -1054,27 +951,21 @@ QString geturl( int board)
QString getstamp( int board) QString getstamp( int board)
{ {
QString url="http://"; QSettings settings;
QSettings settings("companion9x", "companion9x"); QString url = settings.value("compilation-server", OPENTX_FIRMWARE_DOWNLOADS).toString();
int server = settings.value("fwserver",0).toInt(); url.append("/stamp-opentx-");
if (server >=o9xservers.count()) {
server=0;
settings.setValue("fwserver",server);
}
url.append(o9xservers.at(server));
url.append("/binaries/stamp-opentx-");
switch(board) { switch(board) {
case BOARD_STOCK: case BOARD_STOCK:
url.append("stock.txt"); url.append("9x.txt");
break; break;
case BOARD_M128: case BOARD_M128:
url.append("stock128.txt"); url.append("9x128.txt");
break; break;
case BOARD_GRUVIN9X: case BOARD_GRUVIN9X:
url.append("v4.txt"); url.append("gruvin9x.txt");
break; break;
case BOARD_SKY9X: case BOARD_SKY9X:
url.append("arm.txt"); url.append("sky9x.txt");
break; break;
case BOARD_TARANIS: case BOARD_TARANIS:
case BOARD_TARANIS_REV4a: case BOARD_TARANIS_REV4a:
@ -1089,16 +980,10 @@ QString getstamp( int board)
QString getrnurl( int board) QString getrnurl( int board)
{ {
QString url="http://"; QSettings settings;
QSettings settings("companion9x", "companion9x"); QString url = settings.value("compilation-server", OPENTX_FIRMWARE_DOWNLOADS).toString();
int server = settings.value("fwserver",0).toInt(); url.append("/releasenotes-");
if (server >=o9xservers.count()) { switch(board) {
server=0;
settings.setValue("fwserver",server);
}
url.append(o9xservers.at(server));
url.append("/docs/releasenotes-");
switch(board) {
case BOARD_STOCK: case BOARD_STOCK:
case BOARD_M128: case BOARD_M128:
case BOARD_GRUVIN9X: case BOARD_GRUVIN9X:
@ -1125,7 +1010,7 @@ void RegisterOpen9xFirmwares()
Option extr_options[] = { { "frsky", QObject::tr("Support for frsky telemetry mod"), FRSKY_VARIANT }, { "jeti", QObject::tr("Support for jeti telemetry mod"), 0 }, { "ardupilot", QObject::tr("Support for receiving ardupilot data"), 0 }, { "nmea", QObject::tr("Support for receiving NMEA data"), 0 }, { "mavlink", QObject::tr("Support for MAVLINK devices"), MAVLINK_VARIANT }, { NULL } }; Option extr_options[] = { { "frsky", QObject::tr("Support for frsky telemetry mod"), FRSKY_VARIANT }, { "jeti", QObject::tr("Support for jeti telemetry mod"), 0 }, { "ardupilot", QObject::tr("Support for receiving ardupilot data"), 0 }, { "nmea", QObject::tr("Support for receiving NMEA data"), 0 }, { "mavlink", QObject::tr("Support for MAVLINK devices"), MAVLINK_VARIANT }, { NULL } };
Option fai_options[] = { { "faichoice", QObject::tr("Possibility to enable FAI MODE at field") }, { "faimode", QObject::tr("FAI MODE always enabled") }, { NULL } }; Option fai_options[] = { { "faichoice", QObject::tr("Possibility to enable FAI MODE at field") }, { "faimode", QObject::tr("FAI MODE always enabled") }, { NULL } };
/* 9x board */ /* 9x board */
open9x = new Open9xFirmware("opentx-stock", QObject::tr("openTx for 9X board"), new Open9xInterface(BOARD_STOCK), geturl(BOARD_STOCK), getstamp(BOARD_STOCK), getrnurl(BOARD_STOCK), false); open9x = new Open9xFirmware("opentx-9x", QObject::tr("openTx for 9X board"), new Open9xInterface(BOARD_STOCK), geturl(BOARD_STOCK), getstamp(BOARD_STOCK), getrnurl(BOARD_STOCK), false);
open9x->addOptions(ext_options); open9x->addOptions(ext_options);
open9x->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); open9x->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support"));
open9x->addOption("templates", QObject::tr("Enable TEMPLATES menu")); open9x->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
@ -1157,11 +1042,12 @@ void RegisterOpen9xFirmwares()
open9x->addOption("novario", QObject::tr("No vario support")); open9x->addOption("novario", QObject::tr("No vario support"));
open9x->addOption("nogps", QObject::tr("No GPS support")); open9x->addOption("nogps", QObject::tr("No GPS support"));
open9x->addOption("nogauges", QObject::tr("No gauges in the custom telemetry screen")); open9x->addOption("nogauges", QObject::tr("No gauges in the custom telemetry screen"));
open9x->addOption("fasoffset", QObject::tr("Allow compensating for offset errors in FrSky FAS current sensors"));
open9x->addOptions(fai_options); open9x->addOptions(fai_options);
firmwares.push_back(open9x); firmwares.push_back(open9x);
/* 9x board with M128 chip */ /* 9x board with M128 chip */
open9x = new Open9xFirmware("opentx-stock128", QObject::tr("openTx for M128 / 9X board"), new Open9xInterface(BOARD_M128), geturl(BOARD_M128), getstamp(BOARD_M128),getrnurl(BOARD_M128), false); open9x = new Open9xFirmware("opentx-9x128", QObject::tr("openTx for M128 / 9X board"), new Open9xInterface(BOARD_M128), geturl(BOARD_M128), getstamp(BOARD_M128),getrnurl(BOARD_M128), false);
open9x->addOptions(ext_options); open9x->addOptions(ext_options);
open9x->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); open9x->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support"));
open9x->addOption("templates", QObject::tr("Enable TEMPLATES menu")); open9x->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
@ -1257,7 +1143,7 @@ void RegisterOpen9xFirmwares()
firmwares.push_back(open9x); firmwares.push_back(open9x);
/* Gruvin9x board */ /* Gruvin9x board */
open9x = new Open9xFirmware("opentx-v4", QObject::tr("openTx for Gruvin9x board / 9X"), new Open9xInterface(BOARD_GRUVIN9X), geturl(BOARD_GRUVIN9X), getstamp(BOARD_GRUVIN9X),getrnurl(BOARD_GRUVIN9X), false); open9x = new Open9xFirmware("opentx-gruvin9x", QObject::tr("openTx for Gruvin9x board / 9X"), new Open9xInterface(BOARD_GRUVIN9X), geturl(BOARD_GRUVIN9X), getstamp(BOARD_GRUVIN9X),getrnurl(BOARD_GRUVIN9X), false);
open9x->setVariantBase(FRSKY_VARIANT); open9x->setVariantBase(FRSKY_VARIANT);
open9x->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support")); open9x->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support"));
open9x->addOption("templates", QObject::tr("Enable TEMPLATES menu")); open9x->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
@ -1321,7 +1207,7 @@ void RegisterOpen9xFirmwares()
open9x->addOptions(fai_options); open9x->addOptions(fai_options);
firmwares.push_back(open9x); firmwares.push_back(open9x);
QSettings settings("companion9x", "companion9x"); QSettings settings;
int rev4a = settings.value("rev4asupport",0).toInt(); int rev4a = settings.value("rev4asupport",0).toInt();
if (rev4a) { if (rev4a) {
open9x = new Open9xFirmware("opentx-taranisrev4a", QObject::tr("openTx for FrSky Taranis Rev4a"), new Open9xInterface(BOARD_TARANIS_REV4a), geturl(BOARD_TARANIS_REV4a), getstamp(BOARD_TARANIS_REV4a),getrnurl(BOARD_TARANIS), true); open9x = new Open9xFirmware("opentx-taranisrev4a", QObject::tr("openTx for FrSky Taranis Rev4a"), new Open9xInterface(BOARD_TARANIS_REV4a), geturl(BOARD_TARANIS_REV4a), getstamp(BOARD_TARANIS_REV4a),getrnurl(BOARD_TARANIS), true);

View file

@ -18,6 +18,9 @@
#include "eeprominterface.h" #include "eeprominterface.h"
#define OPENTX_COMPANION_DOWNLOADS "http://downloads.open-tx.org/companion"
#define OPENTX_FIRMWARE_DOWNLOADS "http://downloads.open-tx.org/firmware"
class EFile; class EFile;
class Open9xInterface : public EEPROMInterface class Open9xInterface : public EEPROMInterface
@ -67,10 +70,7 @@ class Open9xInterface : public EEPROMInterface
bool loadModel(uint8_t version, ModelData &model, uint8_t *data, int index, unsigned int variant, unsigned int stickMode=0); bool loadModel(uint8_t version, ModelData &model, uint8_t *data, int index, unsigned int variant, unsigned int stickMode=0);
template <class T> template <class T>
bool saveModel(unsigned int index, ModelData &model); bool saveModel(unsigned int index, ModelData &model, unsigned int version, unsigned int variant);
template <class T>
bool saveModelVariant(unsigned int index, ModelData &model, unsigned int version, unsigned int variant);
template <class T> template <class T>
bool loadGeneral(GeneralSettings &settings, unsigned int version); bool loadGeneral(GeneralSettings &settings, unsigned int version);
@ -94,6 +94,7 @@ class Open9xFirmware: public FirmwareInfo {
addLanguage("se"); addLanguage("se");
addLanguage("cz"); addLanguage("cz");
addLanguage("es"); addLanguage("es");
addLanguage("pl");
addLanguage("pt"); addLanguage("pt");
addTTSLanguage("en"); addTTSLanguage("en");
@ -103,6 +104,7 @@ class Open9xFirmware: public FirmwareInfo {
addTTSLanguage("se"); addTTSLanguage("se");
addTTSLanguage("cz"); addTTSLanguage("cz");
addTTSLanguage("sk"); addTTSLanguage("sk");
addTTSLanguage("pl");
addTTSLanguage("pt"); addTTSLanguage("pt");
addTTSLanguage("es"); addTTSLanguage("es");
} }

View file

@ -14,9 +14,9 @@
* *
*/ */
#include "open9xsimulator.h" #include "opentxsimulator.h"
#include "open9xinterface.h" #include "opentxinterface.h"
#include "open9xeeprom.h" #include "opentxeeprom.h"
#define HELI #define HELI
#define SIMU #define SIMU
@ -100,7 +100,7 @@ bool hasExtendedTrims()
uint8_t getStickMode() uint8_t getStickMode()
{ {
return g_eeGeneral.stickMode; return limit<uint8_t>(0, g_eeGeneral.stickMode, 3);
} }
} }
@ -162,7 +162,7 @@ void Open9xSimulator::setValues(TxInputs &inputs)
void Open9xSimulator::setTrim(unsigned int idx, int value) void Open9xSimulator::setTrim(unsigned int idx, int value)
{ {
idx = Open9x::modn12x3[4*getStickMode() + idx] - 1; idx = Open9x::modn12x3[4*getStickMode() + idx];
uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx); uint8_t phase = getTrimFlightPhase(getFlightPhase(), idx);
setTrimValue(phase, idx, value); setTrimValue(phase, idx, value);
} }
@ -176,7 +176,7 @@ void Open9xSimulator::getTrims(Trims & trims)
} }
for (int i=0; i<2; i++) { for (int i=0; i<2; i++) {
uint8_t idx = Open9x::modn12x3[4*getStickMode() + i] - 1; uint8_t idx = Open9x::modn12x3[4*getStickMode() + i];
int16_t tmp = trims.values[i]; int16_t tmp = trims.values[i];
trims.values[i] = trims.values[idx]; trims.values[i] = trims.values[idx];
trims.values[idx] = tmp; trims.values[idx] = tmp;

View file

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

View file

@ -29,15 +29,6 @@ t_Th9xTrainerMix::t_Th9xTrainerMix()
memset(this, 0, sizeof(t_Th9xTrainerMix)); memset(this, 0, sizeof(t_Th9xTrainerMix));
} }
t_Th9xTrainerMix::t_Th9xTrainerMix(TrainerMix &c9x)
{
memset(this, 0, sizeof(t_Th9xTrainerMix));
srcChn = c9x.src;
swtch = th9xFromSwitch(c9x.swtch);
studWeight = (8 * c9x.weight) / 25;
mode = c9x.mode;
}
t_Th9xTrainerMix::operator TrainerMix() t_Th9xTrainerMix::operator TrainerMix()
{ {
TrainerMix c9x; TrainerMix c9x;
@ -53,15 +44,6 @@ t_Th9xTrainerData::t_Th9xTrainerData()
memset(this, 0, sizeof(t_Th9xTrainerData)); memset(this, 0, sizeof(t_Th9xTrainerData));
} }
t_Th9xTrainerData::t_Th9xTrainerData(TrainerData &c9x)
{
memset(this, 0, sizeof(t_Th9xTrainerData));
for (int i=0; i<NUM_STICKS; i++) {
calib[i] = c9x.calib[i];
mix[i] = c9x.mix[i];
}
}
t_Th9xTrainerData::operator TrainerData () t_Th9xTrainerData::operator TrainerData ()
{ {
TrainerData c9x; TrainerData c9x;
@ -77,49 +59,6 @@ t_Th9xGeneral::t_Th9xGeneral()
memset(this, 0, sizeof(t_Th9xGeneral)); memset(this, 0, sizeof(t_Th9xGeneral));
} }
t_Th9xGeneral::t_Th9xGeneral(GeneralSettings &c9x)
{
memset(this, 0, sizeof(t_Th9xGeneral));
myVers = MDVERS;
for (int i=0; i<NUM_STICKSnPOTS; i++) {
calibMid[i] = c9x.calibMid[i];
calibSpanNeg[i] = c9x.calibSpanNeg[i];
calibSpanPos[i] = c9x.calibSpanPos[i];
}
inactivityMin = c9x.inactivityTimer;
// iTrimSwitch =
// iTrimTme1
// iTrimTme2
currModel = c9x.currModel;
contrast = c9x.contrast;
vBatWarn = c9x.vBatWarn;
vBatCalib = c9x.vBatCalib;
// lightSw = th9xFromSwitch(c9x.lightSw);
trainer = c9x.trainer;
adcFilt = c9x.filterInput;
// keySpeed
thr0pos = c9x.throttleReversed;
disableThrottleWarning = c9x.disableThrottleWarning;
disableSwitchWarning = (c9x.switchWarning != -1);
disableMemoryWarning = c9x.disableMemoryWarning;
if (c9x.beeperMode == e_quiet)
beeperVal = 0;
else if (c9x.beeperMode < e_all)
beeperVal = 1;
else if (c9x.beeperLength < 2)
beeperVal = 2;
else
beeperVal = 3;
view = c9x.view;
stickMode = c9x.stickMode;
// naviMode
}
Th9xGeneral::operator GeneralSettings () Th9xGeneral::operator GeneralSettings ()
{ {
GeneralSettings result; GeneralSettings result;
@ -158,7 +97,6 @@ Th9xGeneral::operator GeneralSettings ()
} }
result.stickMode = stickMode; result.stickMode = stickMode;
result.inactivityTimer = inactivityMin; result.inactivityTimer = inactivityMin;
result.throttleReversed = thr0pos;
result.filterInput = adcFilt; result.filterInput = adcFilt;
return result; return result;
} }
@ -169,35 +107,25 @@ t_Th9xExpoData::t_Th9xExpoData()
memset(this, 0, sizeof(t_Th9xExpoData)); memset(this, 0, sizeof(t_Th9xExpoData));
} }
t_Th9xExpoData::t_Th9xExpoData(ExpoData &c9x)
{
memset(this, 0, sizeof(t_Th9xLimitData));
exp5 = c9x.expo;
mode3 = c9x.mode;
weight6 = c9x.weight;
chn = c9x.chn;
drSw = th9xFromSwitch(c9x.swtch);
if (c9x.curveMode==1)
curve = c9x.curveParam;
else
curve = 0;
}
t_Th9xExpoData::operator ExpoData () t_Th9xExpoData::operator ExpoData ()
{ {
ExpoData c9x; ExpoData c9x;
c9x.expo = exp5; if (exp5) {
c9x.curve.type = CurveReference::CURVE_REF_EXPO;
c9x.curve.value = exp5;
}
else if (curve > 6) {
c9x.curve.type = CurveReference::CURVE_REF_CUSTOM;
c9x.curve.value = curve - 6;
}
else if (curve > 0) {
c9x.curve.type = CurveReference::CURVE_REF_FUNC;
c9x.curve.value = curve;
}
c9x.mode = mode3; c9x.mode = mode3;
c9x.weight = weight6; c9x.weight = weight6;
c9x.chn = chn; c9x.chn = chn;
c9x.swtch = th9xToSwitch(drSw); c9x.swtch = th9xToSwitch(drSw);
if (curve) {
c9x.curveMode=1;
c9x.curveParam = curve;
} else {
c9x.curveMode = 0;
c9x.curveParam = exp5;
}
return c9x; return c9x;
} }
@ -206,15 +134,6 @@ t_Th9xLimitData::t_Th9xLimitData()
memset(this, 0, sizeof(t_Th9xLimitData)); memset(this, 0, sizeof(t_Th9xLimitData));
} }
t_Th9xLimitData::t_Th9xLimitData(LimitData &c9x)
{
memset(this, 0, sizeof(t_Th9xLimitData));
min = c9x.min+100;
max = c9x.max-100;
revert = c9x.revert;
offset = c9x.offset;
}
t_Th9xLimitData::operator LimitData () t_Th9xLimitData::operator LimitData ()
{ {
LimitData c9x; LimitData c9x;
@ -225,36 +144,11 @@ t_Th9xLimitData::operator LimitData ()
return c9x; return c9x;
} }
t_Th9xMixData::t_Th9xMixData() t_Th9xMixData::t_Th9xMixData()
{ {
memset(this, 0, sizeof(t_Th9xMixData)); memset(this, 0, sizeof(t_Th9xMixData));
} }
t_Th9xMixData::t_Th9xMixData(MixData &c9x)
{
memset(this, 0, sizeof(t_Th9xMixData));
destCh = c9x.destCh;
mixMode = c9x.mltpx;
if (c9x.srcRaw.type == SOURCE_TYPE_STICK)
srcRaw = c9x.srcRaw.index;
else if (c9x.srcRaw.type == SOURCE_TYPE_MAX)
srcRaw = 10;
else if (c9x.srcRaw.type == SOURCE_TYPE_PPM)
srcRaw = 24 + c9x.srcRaw.index;
else if (c9x.srcRaw.type == SOURCE_TYPE_CH)
srcRaw = 12 + c9x.srcRaw.index;
else
srcRaw = 0; // TODO
switchMode = 1;
curveNeg = 0;
weight = c9x.weight;
swtch = th9xFromSwitch(c9x.swtch);
curve = c9x.curve;
speedUp = c9x.speedUp;
speedDown = c9x.speedDown;
}
t_Th9xMixData::operator MixData () t_Th9xMixData::operator MixData ()
{ {
MixData c9x; MixData c9x;
@ -273,41 +167,20 @@ t_Th9xMixData::operator MixData ()
c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-24); c9x.srcRaw = RawSource(SOURCE_TYPE_PPM, srcRaw-24);
c9x.weight = weight; c9x.weight = weight;
c9x.swtch = th9xToSwitch(swtch); c9x.swtch = th9xToSwitch(swtch);
c9x.curve = curve; if (curve > 6) {
c9x.curve.type = CurveReference::CURVE_REF_CUSTOM;
c9x.curve.value = curve - 6;
}
else if (curve > 0) {
c9x.curve.type = CurveReference::CURVE_REF_FUNC;
c9x.curve.value = curve;
}
c9x.speedUp = speedUp; c9x.speedUp = speedUp;
c9x.speedDown = speedDown; c9x.speedDown = speedDown;
c9x.mltpx = (MltpxValue)mixMode; c9x.mltpx = (MltpxValue)mixMode;
return c9x; return c9x;
} }
t_Th9xCustomSwData::t_Th9xCustomSwData(CustomSwData &c9x)
{
opCmp = c9x.func;
val1 = c9x.val1;
val2 = c9x.val2;
if ((c9x.func >= CS_FN_VPOS && c9x.func <= CS_FN_ANEG) || c9x.func >= CS_FN_EQUAL) {
val1 = fromSource(RawSource(c9x.val1));
}
if (c9x.func >= CS_FN_EQUAL) {
val2 = fromSource(RawSource(c9x.val2));
}
if (c9x.func >= CS_FN_AND && c9x.func <= CS_FN_XOR) {
val1 = th9xFromSwitch(RawSwitch(c9x.val1));
val2 = th9xFromSwitch(RawSwitch(c9x.val2));
}
if (opCmp>TH9X_MAX_CSFUNC ) {
EEPROMWarnings += ::QObject::tr("th9x does not support Custom Switch function %1").arg(getFuncName(opCmp)) + "\n";
opCmp=0;
val1=0;
val2=0;
}
}
t_Th9xCustomSwData::operator CustomSwData () t_Th9xCustomSwData::operator CustomSwData ()
{ {
CustomSwData c9x; CustomSwData c9x;
@ -388,76 +261,6 @@ t_Th9xModelData::t_Th9xModelData()
memset(this, 0, sizeof(t_Th9xModelData)); memset(this, 0, sizeof(t_Th9xModelData));
} }
t_Th9xModelData::t_Th9xModelData(ModelData &c9x)
{
memset(this, 0, sizeof(t_Th9xModelData));
if (c9x.used) {
setEEPROMString(name, c9x.name, sizeof(name));
mdVers = MDVERS;
if (c9x.timers[0].mode == TMRMODE_ABS)
tmrMode = 1;
if (c9x.timers[0].mode == TMRMODE_THs)
tmrMode = 2;
if (c9x.timers[0].mode == TMRMODE_THp)
tmrMode = 3;
else
tmrMode = 0;
// TODO tmrDir = c9x.timers[0].dir;
tmrVal = c9x.timers[0].val;
//protocol = c9x.protocol;
/*
ppmNCH = (c9x.moduleData[0].channelsCount - 8) / 2;
thrTrim = c9x.thrTrim;
thrExpo = c9x.thrExpo;
trimInc = c9x.trimInc;
ppmDelay = (c9x.moduleData[0].ppmDelay - 300) / 50;
for (unsigned int i=0; i<C9X_MAX_CUSTOM_FUNCTIONS; i++)
if (c9x.funcSw[i].func == FuncTrims2Offsets && c9x.funcSw[i].swtch) trimSw = c9x.funcSw[i].swtch;
beepANACenter = c9x.beepANACenter;
pulsePol = c9x.pulsePol;*/
for (int i=0; i<TH9X_NUM_CHNOUT; i++)
limitData[i] = c9x.limitData[i];
for (int i=0; i<TH9X_MAX_EXPOS; i++)
expoTab[i] = c9x.expoData[i];
for (int i=0; i<TH9X_MAX_MIXERS; i++)
mixData[i] = c9x.mixData[i];
for (int i=0; i<NUM_STICKS; i++)
trimData[i].itrim = std::max(-30, std::min(30, c9x.phaseData[0].trim[i]));
for (int i=0; i<TH9X_MAX_CURVES3; i++)
if (c9x.curves[i].count==3) {
if (c9x.curves[i].custom)
EEPROMWarnings += QObject::tr("th9x doesn't support custom curves as curve%1, curve as been exported as fixed point ").arg(i+1) + "\n";
for (int j=0; j<3; j++)
curves3[i][j] = c9x.curves[i].points[j].y;
} else {
EEPROMWarnings += QObject::tr("th9x doesn't support curve with %1 point as curve%2 ").arg(c9x.curves[i].count).arg(i+1) + "\n";
}
for (int i=0; i<TH9X_MAX_CURVES5; i++)
if (c9x.curves[i+TH9X_MAX_CURVES3].count==5) {
if (c9x.curves[i+TH9X_MAX_CURVES3].custom)
EEPROMWarnings += QObject::tr("th9x doesn't support custom curves as curve%1, curve as been exported as fixed point ").arg(i+1+TH9X_MAX_CURVES3) + "\n";
for (int j=0; j<5; j++)
curves5[i][j] = c9x.curves[i+TH9X_MAX_CURVES3].points[j].y;
} else {
EEPROMWarnings += QObject::tr("th9x doesn't support curve with %1 point as curve%2 ").arg(c9x.curves[i+TH9X_MAX_CURVES3].count).arg(i+1+TH9X_MAX_CURVES3) + "\n";
}
for (int i=0; i<TH9X_MAX_CURVES9; i++)
if (c9x.curves[i+TH9X_MAX_CURVES3+TH9X_MAX_CURVES5].count==9) {
if (c9x.curves[i+TH9X_MAX_CURVES3+TH9X_MAX_CURVES5].custom)
EEPROMWarnings += QObject::tr("th9x doesn't support custom curves as curve%1, curve as been exported as fixed point ").arg(i+1+TH9X_MAX_CURVES3+TH9X_MAX_CURVES5) + "\n";
for (int j=0; j<9; j++)
curves5[i][j] = c9x.curves[i+TH9X_MAX_CURVES3+TH9X_MAX_CURVES5].points[j].y;
} else {
EEPROMWarnings += QObject::tr("th9x doesn't support curve with %1 point as curve%2 ").arg(c9x.curves[i+TH9X_MAX_CURVES3+TH9X_MAX_CURVES5].count).arg(i+1+TH9X_MAX_CURVES3+TH9X_MAX_CURVES5) + "\n";
}
/*for (int i=0; i<TH9X_NUM_CSW; i++)
customSw[i] = c9x.customSw[i];*/
}
}
t_Th9xModelData::operator ModelData () t_Th9xModelData::operator ModelData ()
{ {
ModelData c9x; ModelData c9x;
@ -507,7 +310,6 @@ t_Th9xModelData::operator ModelData ()
for (int i=0; i<NUM_STICKS; i++) for (int i=0; i<NUM_STICKS; i++)
c9x.phaseData[0].trim[i] = trimData[i].itrim; c9x.phaseData[0].trim[i] = trimData[i].itrim;
for (int i=0; i<TH9X_MAX_CURVES3; i++) { for (int i=0; i<TH9X_MAX_CURVES3; i++) {
c9x.curves[i].custom = false;
c9x.curves[i].count = 3; c9x.curves[i].count = 3;
for (int j=0; j<3; j++) { for (int j=0; j<3; j++) {
c9x.curves[i].points[j].x = -100 + 100*i; c9x.curves[i].points[j].x = -100 + 100*i;
@ -515,7 +317,6 @@ t_Th9xModelData::operator ModelData ()
} }
} }
for (int i=0; i<TH9X_MAX_CURVES5; i++) { for (int i=0; i<TH9X_MAX_CURVES5; i++) {
c9x.curves[i+TH9X_MAX_CURVES3].custom = false;
c9x.curves[i+TH9X_MAX_CURVES3].count = 5; c9x.curves[i+TH9X_MAX_CURVES3].count = 5;
for (int j=0; j<5; j++) { for (int j=0; j<5; j++) {
c9x.curves[i+TH9X_MAX_CURVES3].points[j].x = -100 + 50*i; c9x.curves[i+TH9X_MAX_CURVES3].points[j].x = -100 + 50*i;
@ -523,15 +324,12 @@ t_Th9xModelData::operator ModelData ()
} }
} }
for (int i=0; i<TH9X_MAX_CURVES9; i++) { for (int i=0; i<TH9X_MAX_CURVES9; i++) {
c9x.curves[i+TH9X_MAX_CURVES3+TH9X_MAX_CURVES5].custom = false;
c9x.curves[i+TH9X_MAX_CURVES3+TH9X_MAX_CURVES5].count = 5; c9x.curves[i+TH9X_MAX_CURVES3+TH9X_MAX_CURVES5].count = 5;
for (int j=0; j<9; j++) { for (int j=0; j<9; j++) {
c9x.curves[i+TH9X_MAX_CURVES3+TH9X_MAX_CURVES5].points[j].x = -100 + 50*i; c9x.curves[i+TH9X_MAX_CURVES3+TH9X_MAX_CURVES5].points[j].x = -100 + 50*i;
c9x.curves[i+TH9X_MAX_CURVES3+TH9X_MAX_CURVES5].points[j].y = curves9[i][j]; c9x.curves[i+TH9X_MAX_CURVES3+TH9X_MAX_CURVES5].points[j].y = curves9[i][j];
} }
} }
/*for (int i=0; i<TH9X_NUM_CSW; i++)
c9x.customSw[i] = customSw[i];*/
return c9x; return c9x;
} }

View file

@ -42,8 +42,6 @@ PACK(typedef struct t_Th9xTrainerMix {
operator TrainerMix(); operator TrainerMix();
t_Th9xTrainerMix(); t_Th9xTrainerMix();
t_Th9xTrainerMix(TrainerMix&);
}) Th9xTrainerMix; // }) Th9xTrainerMix; //
PACK(typedef struct t_Th9xTrainerData { PACK(typedef struct t_Th9xTrainerData {
@ -52,8 +50,6 @@ PACK(typedef struct t_Th9xTrainerData {
operator TrainerData(); operator TrainerData();
t_Th9xTrainerData(); t_Th9xTrainerData();
t_Th9xTrainerData(TrainerData&);
}) Th9xTrainerData; }) Th9xTrainerData;
PACK(typedef struct t_Th9xGeneral { PACK(typedef struct t_Th9xGeneral {
@ -84,8 +80,6 @@ PACK(typedef struct t_Th9xGeneral {
operator GeneralSettings(); operator GeneralSettings();
t_Th9xGeneral(); t_Th9xGeneral();
t_Th9xGeneral(GeneralSettings&);
}) Th9xGeneral; }) Th9xGeneral;
/* /*
@ -104,7 +98,6 @@ PACK(typedef struct t_Th9xExpoData {
operator ExpoData(); operator ExpoData();
t_Th9xExpoData(); t_Th9xExpoData();
t_Th9xExpoData(ExpoData&);
}) Th9xExpoData; }) Th9xExpoData;
@ -118,7 +111,6 @@ PACK(typedef struct t_Th9xLimitData {
operator LimitData(); operator LimitData();
t_Th9xLimitData(); t_Th9xLimitData();
t_Th9xLimitData(LimitData&);
}) Th9xLimitData; }) Th9xLimitData;
#define MLTPX_ADD 0 #define MLTPX_ADD 0
@ -144,7 +136,6 @@ PACK(typedef struct t_Th9xMixData {
operator MixData(); operator MixData();
t_Th9xMixData(); t_Th9xMixData();
t_Th9xMixData(MixData&);
}) Th9xMixData; }) Th9xMixData;
PACK(typedef struct t_Th9xCustomSwData { PACK(typedef struct t_Th9xCustomSwData {
@ -156,7 +147,6 @@ PACK(typedef struct t_Th9xCustomSwData {
operator CustomSwData(); operator CustomSwData();
t_Th9xCustomSwData() { memset(this, 0, sizeof(t_Th9xCustomSwData)); } t_Th9xCustomSwData() { memset(this, 0, sizeof(t_Th9xCustomSwData)); }
t_Th9xCustomSwData(CustomSwData &);
int8_t fromSource(RawSource source); int8_t fromSource(RawSource source);
RawSource toSource(int8_t value); RawSource toSource(int8_t value);
}) Th9xCustomSwData; }) Th9xCustomSwData;
@ -187,9 +177,6 @@ PACK(typedef struct t_Th9xModelData {
Th9xTrimData trimData[NUM_STICKS]; // 3*4 -> 1*4 Th9xTrimData trimData[NUM_STICKS]; // 3*4 -> 1*4
operator ModelData(); operator ModelData();
t_Th9xModelData(); t_Th9xModelData();
t_Th9xModelData(ModelData&);
}) Th9xModelData; }) Th9xModelData;
#endif #endif
/*eof*/

View file

@ -44,7 +44,7 @@ const char * Th9xInterface::getName()
const int Th9xInterface::getEEpromSize() const int Th9xInterface::getEEpromSize()
{ {
QSettings settings("companion9x", "companion9x"); QSettings settings;
QString avrMCU = settings.value("mcu", QString("m64")).toString(); QString avrMCU = settings.value("mcu", QString("m64")).toString();
if (avrMCU==QString("m128")) { if (avrMCU==QString("m128")) {
return 2*EESIZE_STOCK; return 2*EESIZE_STOCK;
@ -124,56 +124,20 @@ bool Th9xInterface::loadBackup(RadioData &radioData, uint8_t *eeprom, int esize,
int Th9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version) int Th9xInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t variant, uint8_t version)
{ {
EEPROMWarnings.clear(); std::cout << "NO!\n";
// TODO a warning
efile->EeFsCreate(eeprom, getEEpromSize(), BOARD_STOCK); return 0;
Th9xGeneral th9xGeneral(radioData.generalSettings);
int sz = efile->writeRlc2(FILE_GENERAL, FILE_TYP_GENERAL, (uint8_t*)&th9xGeneral, sizeof(Th9xGeneral));
if(sz != sizeof(Th9xGeneral)) {
return 0;
}
for (int i=0; i<getMaxModels(); i++) {
if (!radioData.models[i].isempty()) {
Th9xModelData th9xModel(radioData.models[i]);
sz = efile->writeRlc2(FILE_MODEL(i), FILE_TYP_MODEL, (uint8_t*)&th9xModel, sizeof(Th9xModelData));
if(sz != sizeof(Th9xModelData)) {
return 0;
}
}
}
return getEEpromSize();
} }
int Th9xInterface::getSize(ModelData &model) int Th9xInterface::getSize(ModelData &model)
{ {
if (model.isempty()) return 0;
return 0;
uint8_t tmp[2*EESIZE_STOCK];
efile->EeFsCreate(tmp, getEEpromSize(), BOARD_STOCK);
Th9xModelData th9xModel(model);
int sz = efile->writeRlc2(0, FILE_TYP_MODEL, (uint8_t*)&th9xModel, sizeof(Th9xModelData));
if(sz != sizeof(Th9xModelData)) {
return -1;
}
return efile->size(0);
} }
int Th9xInterface::getSize(GeneralSettings &settings) int Th9xInterface::getSize(GeneralSettings &settings)
{ {
uint8_t tmp[2*EESIZE_STOCK]; return 0;
efile->EeFsCreate(tmp, getEEpromSize(), BOARD_STOCK);
Th9xGeneral th9xGeneral(settings);
int sz = efile->writeRlc2(0, FILE_TYP_GENERAL, (uint8_t*)&th9xGeneral, sizeof(Th9xGeneral));
if(sz != sizeof(th9xGeneral)) {
return -1;
}
return efile->size(0);
} }
int Th9xInterface::getCapability(const Capability capability) int Th9xInterface::getCapability(const Capability capability)
@ -181,12 +145,6 @@ int Th9xInterface::getCapability(const Capability capability)
switch (capability) { switch (capability) {
case Mixes: case Mixes:
return TH9X_MAX_MIXERS; return TH9X_MAX_MIXERS;
case NumCurves3:
return TH9X_MAX_CURVES3;
case NumCurves5:
return TH9X_MAX_CURVES5;
case NumCurves9:
return TH9X_MAX_CURVES9;
case OwnerName: case OwnerName:
return 0; return 0;
case Timers: case Timers:

View file

@ -14,8 +14,8 @@
<string>Fuses</string> <string>Fuses</string>
</property> </property>
<property name="windowIcon"> <property name="windowIcon">
<iconset resource="companion9x.qrc"> <iconset resource="companion.qrc">
<normaloff>:/images/fuses.png</normaloff>:/images/fuses.png</iconset> <normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="1" column="0" colspan="2"> <item row="1" column="0" colspan="2">
@ -116,7 +116,7 @@ p, li { white-space: pre-wrap; }
</layout> </layout>
</widget> </widget>
<resources> <resources>
<include location="companion9x.qrc"/> <include location="companion.qrc"/>
</resources> </resources>
<connections/> <connections/>
</ui> </ui>

View file

@ -20,7 +20,7 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
ui->setupUi(this); ui->setupUi(this);
this->setWindowIcon(QIcon(":/icon.png")); this->setWindowIcon(QIcon(":/icon.png"));
QSettings settings("companion9x", "companion9x"); QSettings settings;
QString firmware_id = settings.value("firmware", default_firmware_variant.id).toString(); QString firmware_id = settings.value("firmware", default_firmware_variant.id).toString();
ui->tabWidget->setCurrentIndex(settings.value("generalEditTab", 0).toInt()); ui->tabWidget->setCurrentIndex(settings.value("generalEditTab", 0).toInt());
int profile_id=settings.value("profileId", 0).toInt(); int profile_id=settings.value("profileId", 0).toInt();
@ -170,22 +170,10 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
ui->crosstrimChkB->hide(); ui->crosstrimChkB->hide();
ui->crosstrimLB->hide(); ui->crosstrimLB->hide();
} }
if (!GetEepromInterface()->getCapability(HasPPMSim)) { if (!GetEepromInterface()->getCapability(HasPPMSim)) {
ui->PPMSimLB->hide(); ui->PPMSimLB->hide();
ui->PPMSimChkB->hide(); ui->PPMSimChkB->hide();
} }
if (GetEepromInterface()->getCapability(PerModelThrottleWarning)) {
ui->thrwarnChkB->setDisabled(true);
ui->thrwarnChkB->hide();
ui->thrwarnLabel->hide();
}
if (GetEepromInterface()->getCapability(pmSwitchMask)) {
ui->swwarn_label->hide();
ui->swtchWarnCB->hide();
ui->swtchWarnChkB->hide();
layout()->removeItem(ui->swwarn_layout);
}
if (!GetEepromInterface()->getCapability( HasPxxCountry)) { if (!GetEepromInterface()->getCapability( HasPxxCountry)) {
ui->countrycode_label->hide(); ui->countrycode_label->hide();
ui->countrycode_CB->hide(); ui->countrycode_CB->hide();
@ -322,11 +310,8 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
ui->swID0ChkB->hide(); ui->swID0ChkB->hide();
ui->swID1ChkB->hide(); ui->swID1ChkB->hide();
ui->swID2ChkB->hide(); ui->swID2ChkB->hide();
ui->swtchWarnChkB->hide();
this->layout()->removeItem(ui->switchMaskLayout); this->layout()->removeItem(ui->switchMaskLayout);
} else { } else {
ui->swtchWarnCB->setDisabled(true);
ui->swtchWarnCB->hide();
setSwitchDefPos(); setSwitchDefPos();
} }
if (!GetEepromInterface()->getCapability(TelemetryAlarm)) { if (!GetEepromInterface()->getCapability(TelemetryAlarm)) {
@ -340,12 +325,6 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
} else { } else {
populateRotEncCB(ui->re_CB, g_eeGeneral.reNavigation, renumber); populateRotEncCB(ui->re_CB, g_eeGeneral.reNavigation, renumber);
} }
if (GetEepromInterface()->getCapability(PerModelThrottleInvert)) {
ui->label_thrrev->hide();
ui->thrrevChkB->hide();
} else {
ui->thrrevChkB->setChecked(g_eeGeneral.throttleReversed);
}
ui->telalarmsChkB->setChecked(g_eeGeneral.enableTelemetryAlarm); ui->telalarmsChkB->setChecked(g_eeGeneral.enableTelemetryAlarm);
ui->PotScrollEnableChkB->setChecked(!g_eeGeneral.disablePotScroll); ui->PotScrollEnableChkB->setChecked(!g_eeGeneral.disablePotScroll);
ui->BandGapEnableChkB->setChecked(!g_eeGeneral.disableBG); ui->BandGapEnableChkB->setChecked(!g_eeGeneral.disableBG);
@ -359,9 +338,6 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
ui->StickScrollChkB->setChecked(g_eeGeneral.stickScroll); ui->StickScrollChkB->setChecked(g_eeGeneral.stickScroll);
ui->PPMSimChkB->setChecked(g_eeGeneral.enablePpmsim); ui->PPMSimChkB->setChecked(g_eeGeneral.enablePpmsim);
ui->inputfilterCB->setCurrentIndex(g_eeGeneral.filterInput); ui->inputfilterCB->setCurrentIndex(g_eeGeneral.filterInput);
ui->thrwarnChkB->setChecked(!g_eeGeneral.disableThrottleWarning); //Default is zero=checked
ui->swtchWarnChkB->setChecked(g_eeGeneral.switchWarning == -1);
ui->swtchWarnCB->setCurrentIndex(g_eeGeneral.switchWarning == -1 ? 2 : g_eeGeneral.switchWarning);
ui->memwarnChkB->setChecked(!g_eeGeneral.disableMemoryWarning); //Default is zero=checked ui->memwarnChkB->setChecked(!g_eeGeneral.disableMemoryWarning); //Default is zero=checked
ui->alarmwarnChkB->setChecked(!g_eeGeneral.disableAlarmWarning);//Default is zero=checked ui->alarmwarnChkB->setChecked(!g_eeGeneral.disableAlarmWarning);//Default is zero=checked
ui->enableTelemetryAlarmChkB->setChecked(g_eeGeneral.enableTelemetryAlarm); ui->enableTelemetryAlarmChkB->setChecked(g_eeGeneral.enableTelemetryAlarm);
@ -622,36 +598,12 @@ void GeneralEdit::on_inactimerSB_editingFinished()
updateSettings(); updateSettings();
} }
void GeneralEdit::on_thrrevChkB_stateChanged(int )
{
g_eeGeneral.throttleReversed = ui->thrrevChkB->isChecked() ? 1 : 0;
updateSettings();
}
void GeneralEdit::on_inputfilterCB_currentIndexChanged(int index) void GeneralEdit::on_inputfilterCB_currentIndexChanged(int index)
{ {
g_eeGeneral.filterInput = index; g_eeGeneral.filterInput = index;
updateSettings(); updateSettings();
} }
void GeneralEdit::on_thrwarnChkB_stateChanged(int )
{
g_eeGeneral.disableThrottleWarning = ui->thrwarnChkB->isChecked() ? 0 : 1;
updateSettings();
}
void GeneralEdit::on_swtchWarnCB_currentIndexChanged(int index)
{
g_eeGeneral.switchWarning = (index == 2 ? -1 : index);
updateSettings();
}
void GeneralEdit::on_swtchWarnChkB_stateChanged(int )
{
g_eeGeneral.switchWarning = ui->swtchWarnChkB->isChecked() ? -1 : 0;
updateSettings();
}
void GeneralEdit::on_memwarnChkB_stateChanged(int ) void GeneralEdit::on_memwarnChkB_stateChanged(int )
{ {
g_eeGeneral.disableMemoryWarning = ui->memwarnChkB->isChecked() ? 0 : 1; g_eeGeneral.disableMemoryWarning = ui->memwarnChkB->isChecked() ? 0 : 1;
@ -994,7 +946,7 @@ void GeneralEdit::on_PPM4_editingFinished()
void GeneralEdit::on_tabWidget_currentChanged(int index) void GeneralEdit::on_tabWidget_currentChanged(int index)
{ {
// TODO why er9x here // TODO why er9x here
QSettings settings("companion9x", "companion9x"); QSettings settings;
settings.setValue("generalEditTab",index);//ui->tabWidget->currentIndex()); settings.setValue("generalEditTab",index);//ui->tabWidget->currentIndex());
} }
@ -1074,7 +1026,7 @@ void GeneralEdit::on_blinvert_cb_stateChanged(int )
void GeneralEdit::on_faimode_CB_stateChanged(int ) void GeneralEdit::on_faimode_CB_stateChanged(int )
{ {
if (ui->faimode_CB->isChecked()) { if (ui->faimode_CB->isChecked()) {
int ret = QMessageBox::question(this, "companion9x", int ret = QMessageBox::question(this, "Companion",
tr("If you enable FAI, you loose the vario, the play functions, the telemetry screen.\nThis function cannot be disabled by the radio.\nAre you sure ?") , tr("If you enable FAI, you loose the vario, the play functions, the telemetry screen.\nThis function cannot be disabled by the radio.\nAre you sure ?") ,
QMessageBox::Yes | QMessageBox::No); QMessageBox::Yes | QMessageBox::No);
if (ret==QMessageBox::Yes) { if (ret==QMessageBox::Yes) {
@ -1243,7 +1195,7 @@ void GeneralEdit::on_swGEAChkB_stateChanged(int )
void GeneralEdit::on_calretrieve_PB_clicked() void GeneralEdit::on_calretrieve_PB_clicked()
{ {
QSettings settings("companion9x", "companion9x"); QSettings settings;
int profile_id=ui->profile_CB->itemData(ui->profile_CB->currentIndex()).toInt(); int profile_id=ui->profile_CB->itemData(ui->profile_CB->currentIndex()).toInt();
settings.beginGroup("Profiles"); settings.beginGroup("Profiles");
QString profile=QString("profile%1").arg(profile_id); QString profile=QString("profile%1").arg(profile_id);
@ -1360,7 +1312,7 @@ void GeneralEdit::on_calretrieve_PB_clicked()
void GeneralEdit::on_calstore_PB_clicked() void GeneralEdit::on_calstore_PB_clicked()
{ {
QSettings settings("companion9x", "companion9x"); QSettings settings;
int profile_id=ui->profile_CB->itemData(ui->profile_CB->currentIndex()).toInt(); int profile_id=ui->profile_CB->itemData(ui->profile_CB->currentIndex()).toInt();
settings.beginGroup("Profiles"); settings.beginGroup("Profiles");
QString profile=QString("profile%1").arg(profile_id); QString profile=QString("profile%1").arg(profile_id);
@ -1375,7 +1327,7 @@ void GeneralEdit::on_calstore_PB_clicked()
} else { } else {
QString calib=settings.value("StickPotCalib","").toString(); QString calib=settings.value("StickPotCalib","").toString();
if (!(calib.isEmpty())) { if (!(calib.isEmpty())) {
int ret = QMessageBox::question(this, "companion9x", int ret = QMessageBox::question(this, "Companion",
tr("Do you want to store calibration in %1 profile<br>overwriting existing calibration?").arg(name) , tr("Do you want to store calibration in %1 profile<br>overwriting existing calibration?").arg(name) ,
QMessageBox::Yes | QMessageBox::No); QMessageBox::Yes | QMessageBox::No);
if (ret == QMessageBox::No) { if (ret == QMessageBox::No) {
@ -1408,7 +1360,7 @@ void GeneralEdit::on_calstore_PB_clicked()
settings.setValue("countryCode",QString("%1%2%3").arg((uint8_t)g_eeGeneral.countryCode, 2, 16, QChar('0')).arg((uint8_t)g_eeGeneral.imperial, 2, 16, QChar('0')).arg(g_eeGeneral.ttsLanguage)); settings.setValue("countryCode",QString("%1%2%3").arg((uint8_t)g_eeGeneral.countryCode, 2, 16, QChar('0')).arg((uint8_t)g_eeGeneral.imperial, 2, 16, QChar('0')).arg(g_eeGeneral.ttsLanguage));
settings.endGroup(); settings.endGroup();
settings.endGroup(); settings.endGroup();
QMessageBox::information(this, "companion9x", tr("Calibration and HW parameters saved.")); QMessageBox::information(this, "Companion", tr("Calibration and HW parameters saved."));
} }
} }

View file

@ -123,12 +123,8 @@ private slots:
void on_channelorderCB_currentIndexChanged(int index); void on_channelorderCB_currentIndexChanged(int index);
void on_beeperCB_currentIndexChanged(int index); void on_beeperCB_currentIndexChanged(int index);
void on_memwarnChkB_stateChanged(int ); void on_memwarnChkB_stateChanged(int );
void on_swtchWarnCB_currentIndexChanged(int index);
void on_swtchWarnChkB_stateChanged(int );
void on_telalarmsChkB_stateChanged(int ); void on_telalarmsChkB_stateChanged(int );
void on_thrwarnChkB_stateChanged(int );
void on_inputfilterCB_currentIndexChanged(int index); void on_inputfilterCB_currentIndexChanged(int index);
void on_thrrevChkB_stateChanged(int );
void on_inactimerSB_editingFinished(); void on_inactimerSB_editingFinished();
void on_backlightautoSB_editingFinished(); void on_backlightautoSB_editingFinished();
void on_backlightswCB_currentIndexChanged(int index); void on_backlightswCB_currentIndexChanged(int index);

View file

@ -20,7 +20,7 @@
<string>General Edit</string> <string>General Edit</string>
</property> </property>
<property name="windowIcon"> <property name="windowIcon">
<iconset resource="companion9x.qrc"> <iconset resource="companion.qrc">
<normaloff>:/icon.png</normaloff>:/icon.png</iconset> <normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property> </property>
<property name="sizeGripEnabled"> <property name="sizeGripEnabled">
@ -117,6 +117,13 @@ These will be relevant for all models in the same EEPROM.</string>
<string>Setup</string> <string>Setup</string>
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout" columnstretch="1,0,0,0,0"> <layout class="QGridLayout" name="gridLayout" columnstretch="1,0,0,0,0">
<item row="19" column="4">
<widget class="QCheckBox" name="PPMSimChkB">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="4" column="1"> <item row="4" column="1">
<widget class="QSpinBox" name="volume_SB"> <widget class="QSpinBox" name="volume_SB">
<property name="sizePolicy"> <property name="sizePolicy">
@ -130,7 +137,7 @@ These will be relevant for all models in the same EEPROM.</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="29" column="3" colspan="2"> <item row="28" column="3" colspan="2">
<layout class="QHBoxLayout" name="pxxCountry"> <layout class="QHBoxLayout" name="pxxCountry">
<item> <item>
<widget class="QLabel" name="countrycode_label"> <widget class="QLabel" name="countrycode_label">
@ -160,13 +167,6 @@ These will be relevant for all models in the same EEPROM.</string>
</item> </item>
</layout> </layout>
</item> </item>
<item row="19" column="4">
<widget class="QCheckBox" name="PPMSimChkB">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="24" column="0"> <item row="24" column="0">
<widget class="QLabel" name="mavbaud_label"> <widget class="QLabel" name="mavbaud_label">
<property name="text"> <property name="text">
@ -174,7 +174,7 @@ These will be relevant for all models in the same EEPROM.</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="30" column="3" colspan="2"> <item row="29" column="3" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_4"> <layout class="QHBoxLayout" name="horizontalLayout_4">
<item> <item>
<widget class="QLabel" name="VoiceLang_label"> <widget class="QLabel" name="VoiceLang_label">
@ -188,49 +188,7 @@ These will be relevant for all models in the same EEPROM.</string>
</item> </item>
</layout> </layout>
</item> </item>
<item row="25" column="1"> <item row="29" column="0">
<layout class="QHBoxLayout" name="swwarn_layout">
<item>
<widget class="QComboBox" name="swtchWarnCB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>100</width>
<height>16777215</height>
</size>
</property>
<item>
<property name="text">
<string>Off</string>
</property>
</item>
<item>
<property name="text">
<string>Switches Up</string>
</property>
</item>
<item>
<property name="text">
<string>Switches Down</string>
</property>
</item>
</widget>
</item>
<item>
<widget class="QCheckBox" name="swtchWarnChkB">
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item row="30" column="0">
<widget class="QLabel" name="units_label"> <widget class="QLabel" name="units_label">
<property name="text"> <property name="text">
<string>Measurement Units</string> <string>Measurement Units</string>
@ -476,13 +434,6 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="19" column="0">
<widget class="QLabel" name="label_thrrev">
<property name="text">
<string>Reverse Throttle Operation</string>
</property>
</widget>
</item>
<item row="3" column="3"> <item row="3" column="3">
<widget class="QLabel" name="label_HL"> <widget class="QLabel" name="label_HL">
<property name="text"> <property name="text">
@ -490,7 +441,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="32" column="1"> <item row="31" column="1">
<widget class="QComboBox" name="stickmodeCB"> <widget class="QComboBox" name="stickmodeCB">
<property name="toolTip"> <property name="toolTip">
<string/> <string/>
@ -551,26 +502,40 @@ Mode 4:
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="18" column="4">
<widget class="QLabel" name="label_12"> <widget class="QCheckBox" name="crosstrimChkB">
<property name="text"> <property name="text">
<string>Beeper Mode</string> <string/>
</property> </property>
</widget> </widget>
</item> </item>
<item row="13" column="4"> <item row="12" column="0">
<widget class="QSpinBox" name="blOnStickMoveSB"> <widget class="QLabel" name="label_displayType">
<property name="suffix"> <property name="text">
<string> sec</string> <string>LCD Display Type</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QSpinBox" name="hapticStrengthSB">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>600</number>
</property>
<property name="singleStep">
<number>5</number> <number>5</number>
</property> </property>
</widget> </widget>
</item> </item>
<item row="13" column="3">
<widget class="QLabel" name="label_blOnStickMove">
<property name="text">
<string>BackLight On Stick Move</string>
</property>
</widget>
</item>
<item row="2" column="4"> <item row="2" column="4">
<widget class="QSpinBox" name="speakerPitchSB"> <widget class="QSpinBox" name="speakerPitchSB">
<property name="toolTip"> <property name="toolTip">
@ -598,23 +563,37 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="19" column="1"> <item row="13" column="4">
<widget class="QCheckBox" name="thrrevChkB"> <widget class="QSpinBox" name="blOnStickMoveSB">
<property name="whatsThis"> <property name="suffix">
<string>Reverse throttle operation. <string> sec</string>
If this is checked the throttle will be reversed. Idle will be forward, trim will also be reversed and the throttle warning will be reversed as well.
</string>
</property> </property>
<property name="text"> <property name="maximum">
<string/> <number>600</number>
</property>
<property name="singleStep">
<number>5</number>
</property> </property>
</widget> </widget>
</item> </item>
<item row="13" column="3"> <item row="1" column="0">
<widget class="QLabel" name="label_blOnStickMove"> <widget class="QLabel" name="label_12">
<property name="text"> <property name="text">
<string>BackLight On Stick Move</string> <string>Beeper Mode</string>
</property>
</widget>
</item>
<item row="30" column="0">
<widget class="QLabel" name="label_timezone">
<property name="text">
<string>Timeshift from UTC</string>
</property>
</widget>
</item>
<item row="17" column="3">
<widget class="QLabel" name="re_label">
<property name="text">
<string>RotEnc Navigation</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -637,47 +616,6 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi
</property> </property>
</widget> </widget>
</item> </item>
<item row="17" column="3">
<widget class="QLabel" name="re_label">
<property name="text">
<string>RotEnc Navigation</string>
</property>
</widget>
</item>
<item row="31" column="0">
<widget class="QLabel" name="label_timezone">
<property name="text">
<string>Timeshift from UTC</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QSpinBox" name="hapticStrengthSB">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximum">
<number>5</number>
</property>
</widget>
</item>
<item row="18" column="4">
<widget class="QCheckBox" name="crosstrimChkB">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label_displayType">
<property name="text">
<string>LCD Display Type</string>
</property>
</widget>
</item>
<item row="22" column="0"> <item row="22" column="0">
<widget class="QLabel" name="label_frskyintalarm"> <widget class="QLabel" name="label_frskyintalarm">
<property name="text"> <property name="text">
@ -685,14 +623,7 @@ If this is checked the throttle will be reversed. Idle will be forward, trim wi
</property> </property>
</widget> </widget>
</item> </item>
<item row="21" column="0"> <item row="25" column="0" colspan="5">
<widget class="QLabel" name="thrwarnLabel">
<property name="text">
<string>Throttle Startup Warning</string>
</property>
</widget>
</item>
<item row="26" column="0" colspan="5">
<layout class="QHBoxLayout" name="switchMaskLayout"> <layout class="QHBoxLayout" name="switchMaskLayout">
<item> <item>
<widget class="QCheckBox" name="swTHRChkB"> <widget class="QCheckBox" name="swTHRChkB">
@ -775,7 +706,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="31" column="3" colspan="2"> <item row="30" column="3" colspan="2">
<layout class="QHBoxLayout" name="gpsFormatLayout"> <layout class="QHBoxLayout" name="gpsFormatLayout">
<item> <item>
<widget class="QLabel" name="gpsFormatLabel"> <widget class="QLabel" name="gpsFormatLabel">
@ -800,7 +731,7 @@ p, li { white-space: pre-wrap; }
</item> </item>
</layout> </layout>
</item> </item>
<item row="29" column="1"> <item row="28" column="1">
<widget class="QCheckBox" name="faimode_CB"> <widget class="QCheckBox" name="faimode_CB">
<property name="toolTip"> <property name="toolTip">
<string>If you enable FAI, you loose the vario, the play functions, the telemetry screen. This function cannot be disabled by the radio.</string> <string>If you enable FAI, you loose the vario, the play functions, the telemetry screen. This function cannot be disabled by the radio.</string>
@ -810,7 +741,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="32" column="4"> <item row="31" column="4">
<widget class="QComboBox" name="channelorderCB"> <widget class="QComboBox" name="channelorderCB">
<property name="toolTip"> <property name="toolTip">
<string/> <string/>
@ -948,48 +879,6 @@ This is used by the templated to determine which channel goes to what number out
</item> </item>
</widget> </widget>
</item> </item>
<item row="20" column="0">
<widget class="QLabel" name="label_27">
<property name="text">
<string>Alarm Warning</string>
</property>
</widget>
</item>
<item row="20" column="1">
<widget class="QCheckBox" name="alarmwarnChkB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="whatsThis">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; text-decoration: underline;&quot;&gt;Warnings&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;These will define startup warnings.&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Throttle warning - will alert if the throttle is not at idle during startup&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Switch warning - will alert if switches are not in their defaul position&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Memory warning - will alert if there's not a lot of memory left&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Silent mode warning - will alert you if the beeper is set to quiet (0)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="16" column="3"> <item row="16" column="3">
<widget class="QLabel" name="label_hideOwnerName"> <widget class="QLabel" name="label_hideOwnerName">
<property name="text"> <property name="text">
@ -1046,7 +935,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="29" column="0"> <item row="28" column="0">
<widget class="QLabel" name="label_faimode"> <widget class="QLabel" name="label_faimode">
<property name="text"> <property name="text">
<string>FAI Mode</string> <string>FAI Mode</string>
@ -1163,7 +1052,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="31" column="1"> <item row="30" column="1">
<widget class="QSpinBox" name="timezoneSB"> <widget class="QSpinBox" name="timezoneSB">
<property name="minimum"> <property name="minimum">
<number>-14</number> <number>-14</number>
@ -1176,7 +1065,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="30" column="1"> <item row="29" column="1">
<widget class="QComboBox" name="units_CB"> <widget class="QComboBox" name="units_CB">
<item> <item>
<property name="text"> <property name="text">
@ -1190,7 +1079,7 @@ p, li { white-space: pre-wrap; }
</item> </item>
</widget> </widget>
</item> </item>
<item row="32" column="3"> <item row="31" column="3">
<widget class="QLabel" name="label_13"> <widget class="QLabel" name="label_13">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum"> <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
@ -1203,7 +1092,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="32" column="0"> <item row="31" column="0">
<widget class="QLabel" name="label_14"> <widget class="QLabel" name="label_14">
<property name="text"> <property name="text">
<string>Stick Mode</string> <string>Stick Mode</string>
@ -1247,41 +1136,6 @@ p, li { white-space: pre-wrap; }
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="20" column="4">
<widget class="QCheckBox" name="memwarnChkB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="whatsThis">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; text-decoration: underline;&quot;&gt;Warnings&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;These will define startup warnings.&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Throttle warning - will alert if the throttle is not at idle during startup&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Switch warning - will alert if switches are not in their defaul position&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Memory warning - will alert if there's not a lot of memory left&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Silent mode warning - will alert you if the beeper is set to quiet (0)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="12" column="1"> <item row="12" column="1">
<widget class="QComboBox" name="displayTypeCB"> <widget class="QComboBox" name="displayTypeCB">
<item> <item>
@ -1345,13 +1199,6 @@ p, li { white-space: pre-wrap; }
</item> </item>
</widget> </widget>
</item> </item>
<item row="20" column="3">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Memory Startup Warning</string>
</property>
</widget>
</item>
<item row="11" column="4"> <item row="11" column="4">
<widget class="QSpinBox" name="BLBright_SB"> <widget class="QSpinBox" name="BLBright_SB">
<property name="maximum"> <property name="maximum">
@ -1532,32 +1379,6 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="21" column="1">
<widget class="QCheckBox" name="thrwarnChkB">
<property name="whatsThis">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; text-decoration: underline;&quot;&gt;Warnings&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;These will define startup warnings.&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Throttle warning - will alert if the throttle is not at idle during startup&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Switch warning - will alert if switches are not in their defaul position&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Memory warning - will alert if there's not a lot of memory left&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Silent mode warning - will alert you if the beeper is set to quiet (0)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="tristate">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="3"> <item row="1" column="3">
<widget class="QLabel" name="label_soundMode"> <widget class="QLabel" name="label_soundMode">
<property name="text"> <property name="text">
@ -1565,7 +1386,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
</widget> </widget>
</item> </item>
<item row="33" column="0" colspan="2"> <item row="32" column="0" colspan="2">
<spacer name="verticalSpacer_5"> <spacer name="verticalSpacer_5">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@ -1684,7 +1505,7 @@ Acceptable values are 5v..10v</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="27" column="0"> <item row="26" column="0">
<widget class="QLabel" name="ro_label"> <widget class="QLabel" name="ro_label">
<property name="text"> <property name="text">
<string>Readonly Unlock</string> <string>Readonly Unlock</string>
@ -1726,13 +1547,6 @@ Acceptable values are 5v..10v</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="25" column="0">
<widget class="QLabel" name="swwarn_label">
<property name="text">
<string>Switch Startup Warning</string>
</property>
</widget>
</item>
<item row="13" column="0"> <item row="13" column="0">
<widget class="QLabel" name="label_6"> <widget class="QLabel" name="label_6">
<property name="text"> <property name="text">
@ -1740,7 +1554,7 @@ Acceptable values are 5v..10v</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="27" column="1" colspan="3"> <item row="26" column="1" colspan="3">
<layout class="QGridLayout" name="TaranisReadOnlyUnlock" rowstretch="0,0" columnstretch="0,0,0,0,0,0,0,0,0"> <layout class="QGridLayout" name="TaranisReadOnlyUnlock" rowstretch="0,0" columnstretch="0,0,0,0,0,0,0,0,0">
<property name="sizeConstraint"> <property name="sizeConstraint">
<enum>QLayout::SetMinimumSize</enum> <enum>QLayout::SetMinimumSize</enum>
@ -2268,6 +2082,90 @@ Acceptable values are 5v..10v</string>
</item> </item>
</layout> </layout>
</item> </item>
<item row="19" column="1">
<widget class="QCheckBox" name="alarmwarnChkB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="whatsThis">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; text-decoration: underline;&quot;&gt;Warnings&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;These will define startup warnings.&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Throttle warning - will alert if the throttle is not at idle during startup&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Switch warning - will alert if switches are not in their defaul position&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Memory warning - will alert if there's not a lot of memory left&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Silent mode warning - will alert you if the beeper is set to quiet (0)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="19" column="0">
<widget class="QLabel" name="label_27">
<property name="text">
<string>Alarm Warning</string>
</property>
</widget>
</item>
<item row="21" column="1">
<widget class="QCheckBox" name="memwarnChkB">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="whatsThis">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; text-decoration: underline;&quot;&gt;Warnings&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;These will define startup warnings.&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Throttle warning - will alert if the throttle is not at idle during startup&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Switch warning - will alert if switches are not in their defaul position&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Memory warning - will alert if there's not a lot of memory left&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Silent mode warning - will alert you if the beeper is set to quiet (0)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="21" column="0">
<widget class="QLabel" name="label_11">
<property name="text">
<string>Memory Startup Warning</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="tabTrainer"> <widget class="QWidget" name="tabTrainer">
@ -3607,8 +3505,6 @@ p, li { white-space: pre-wrap; }
<tabstop>beepMinuteChkB</tabstop> <tabstop>beepMinuteChkB</tabstop>
<tabstop>beepCountDownChkB</tabstop> <tabstop>beepCountDownChkB</tabstop>
<tabstop>beepFlashChkB</tabstop> <tabstop>beepFlashChkB</tabstop>
<tabstop>swtchWarnCB</tabstop>
<tabstop>swtchWarnChkB</tabstop>
<tabstop>swTHRChkB</tabstop> <tabstop>swTHRChkB</tabstop>
<tabstop>swRUDChkB</tabstop> <tabstop>swRUDChkB</tabstop>
<tabstop>swELEChkB</tabstop> <tabstop>swELEChkB</tabstop>
@ -3659,7 +3555,7 @@ p, li { white-space: pre-wrap; }
<tabstop>PPM_MultiplierDSB</tabstop> <tabstop>PPM_MultiplierDSB</tabstop>
</tabstops> </tabstops>
<resources> <resources>
<include location="companion9x.qrc"/> <include location="companion.qrc"/>
</resources> </resources>
<connections/> <connections/>
<designerdata> <designerdata>

View file

@ -12,15 +12,28 @@ QString getPhaseName(int val, char * phasename)
phaseName.append(phasename); phaseName.append(phasename);
if (phaseName.isEmpty()) { if (phaseName.isEmpty()) {
return QString(val < 0 ? "!" : "") + QObject::tr("FM%1").arg(abs(val) - 1); return QString(val < 0 ? "!" : "") + QObject::tr("FM%1").arg(abs(val) - 1);
} else { }
else {
return QString(val < 0 ? "!" : "") + phaseName; return QString(val < 0 ? "!" : "") + phaseName;
} }
} }
} }
QString getStickStr(int index) QString getInputStr(ModelData & model, int index)
{ {
return RawSource(SOURCE_TYPE_STICK, index).toString(); QString result;
if (GetEepromInterface()->getCapability(VirtualInputs)) {
result = model.inputNames[index];
if (result.isEmpty()) {
result = QObject::tr("Input%1").arg(index+1, 2, 10, QChar('0'));
}
}
else {
result = RawSource(SOURCE_TYPE_STICK, index).toString();
}
return result;
} }
void populateGvSourceCB(QComboBox *b, int value) void populateGvSourceCB(QComboBox *b, int value)
@ -63,7 +76,7 @@ void populateTTraceCB(QComboBox *b, int value)
} }
int channels=(IS_ARM(GetEepromInterface()->getBoard()) ? 32 : 16); int channels=(IS_ARM(GetEepromInterface()->getBoard()) ? 32 : 16);
for (int i=1; i<= channels; i++) { for (int i=1; i<= channels; i++) {
b->addItem(QObject::tr("CH")+QString("%1").arg(i,2,10,QChar('0'))); b->addItem(QObject::tr("CH%1").arg(i, 2, 10, QChar('0')));
} }
b->setCurrentIndex(value); b->setCurrentIndex(value);
} }
@ -155,21 +168,14 @@ QString getFuncName(unsigned int val)
return QObject::tr("Background Music"); return QObject::tr("Background Music");
else if (val == FuncBackgroundMusicPause) else if (val == FuncBackgroundMusicPause)
return QObject::tr("Background Music Pause"); return QObject::tr("Background Music Pause");
else if (val == FuncAdjustGV1) else if (val >= FuncAdjustGV1 && val <= FuncAdjustGVLast)
return QObject::tr("Adjust GV1"); return QObject::tr("Adjust GV%1").arg(val-FuncAdjustGV1+1);
else if (val == FuncAdjustGV2)
return QObject::tr("Adjust GV2");
else if (val == FuncAdjustGV3)
return QObject::tr("Adjust GV3");
else if (val == FuncAdjustGV4)
return QObject::tr("Adjust GV4");
else if (val == FuncAdjustGV5)
return QObject::tr("Adjust GV5");
else { else {
return QString("???"); // Highlight unknown functions with output of question marks.(BTW should not happen that we do not know what a function is) return QString("???"); // Highlight unknown functions with output of question marks.(BTW should not happen that we do not know what a function is)
} }
} }
// TODO should be a toString() method in CustoSwData ...
QString getCustomSwitchStr(CustomSwData * customSw, const ModelData & model) QString getCustomSwitchStr(CustomSwData * customSw, const ModelData & model)
{ {
QString result = ""; QString result = "";
@ -184,7 +190,8 @@ QString getCustomSwitchStr(CustomSwData * customSw, const ModelData & model)
result = QString("TIM(%1 , %2)").arg(ValToTim(customSw->val1)).arg(ValToTim(customSw->val2)); result = QString("TIM(%1 , %2)").arg(ValToTim(customSw->val1)).arg(ValToTim(customSw->val2));
break; break;
case CS_FAMILY_VOFS: { case CS_FAMILY_VOFS: {
RawSource source = RawSource(customSw->val1); RawSource source = RawSource(customSw->val1, &model);
RawSourceRange range = source.getRange();
if (customSw->val1) if (customSw->val1)
result += source.toString(); result += source.toString();
else else
@ -199,7 +206,7 @@ QString getCustomSwitchStr(CustomSwData * customSw, const ModelData & model)
result += " &gt; "; result += " &gt; ";
else if (customSw->func == CS_FN_ANEG || customSw->func == CS_FN_VNEG) else if (customSw->func == CS_FN_ANEG || customSw->func == CS_FN_VNEG)
result += " &lt; "; result += " &lt; ";
result += QString::number(source.getStep(model) * (customSw->val2 + source.getRawOffset(model)) + source.getOffset(model)); result += QString::number(range.step * (customSw->val2 /*TODO+ source.getRawOffset(model)*/) + range.offset);
break; break;
} }
case CS_FAMILY_VBOOL: case CS_FAMILY_VBOOL:
@ -395,7 +402,7 @@ void populateFuncParamArmTCB(QComboBox *b, ModelData * g_model, char * value, QS
} }
} }
void populateFuncParamCB(QComboBox *b, uint function, unsigned int value, unsigned int adjustmode) void populateFuncParamCB(QComboBox *b, const ModelData & model, uint function, unsigned int value, unsigned int adjustmode)
{ {
QStringList qs; QStringList qs;
b->clear(); b->clear();
@ -415,22 +422,30 @@ void populateFuncParamCB(QComboBox *b, uint function, unsigned int value, unsign
qs.append( QObject::tr("Timer2")); qs.append( QObject::tr("Timer2"));
qs.append( QObject::tr("All")); qs.append( QObject::tr("All"));
qs.append( QObject::tr("Telemetry")); qs.append( QObject::tr("Telemetry"));
int reCount = GetEepromInterface()->getCapability(RotaryEncoders);
if (reCount == 1) {
qs.append( QObject::tr("Rotary Encoder"));
}
else if (reCount == 2) {
qs.append( QObject::tr("REa"));
qs.append( QObject::tr("REb"));
}
b->addItems(qs); b->addItems(qs);
b->setCurrentIndex(value); b->setCurrentIndex(value);
} }
else if (function==FuncVolume) { else if (function==FuncVolume) {
populateSourceCB(b, RawSource(value), POPULATE_SOURCES|POPULATE_TRIMS); populateSourceCB(b, RawSource(value), model, POPULATE_SOURCES|POPULATE_TRIMS);
} }
else if (function==FuncPlayValue) { else if (function==FuncPlayValue) {
populateSourceCB(b, RawSource(value), POPULATE_SOURCES|POPULATE_SWITCHES|POPULATE_GVARS|POPULATE_TRIMS|POPULATE_TELEMETRYEXT); populateSourceCB(b, RawSource(value), model, POPULATE_SOURCES|POPULATE_VIRTUAL_INPUTS|POPULATE_SWITCHES|POPULATE_GVARS|POPULATE_TRIMS|POPULATE_TELEMETRYEXT);
} }
else if (function>=FuncAdjustGV1 && function<=FuncAdjustGV5 ) { else if (function>=FuncAdjustGV1 && function<=FuncAdjustGVLast) {
switch (adjustmode) { switch (adjustmode) {
case 1: case 1:
populateSourceCB(b, RawSource(value), POPULATE_SOURCES|POPULATE_TRIMS|POPULATE_SWITCHES); populateSourceCB(b, RawSource(value), model, POPULATE_SOURCES|POPULATE_TRIMS|POPULATE_SWITCHES);
break; break;
case 2: case 2:
populateSourceCB(b, RawSource(value), POPULATE_GVARS); populateSourceCB(b, RawSource(value), model, POPULATE_GVARS);
break; break;
case 3: case 3:
b->clear(); b->clear();
@ -440,23 +455,11 @@ void populateFuncParamCB(QComboBox *b, uint function, unsigned int value, unsign
break; break;
} }
} }
else { else {
b->hide(); b->hide();
} }
} }
void populateRepeatCB(QComboBox *b, unsigned int value)
{
b->clear();
b->addItem(QObject::tr("No repeat", 0));
unsigned int step = IS_ARM(GetEepromInterface()->getBoard()) ? 5 : 10;
for (unsigned int i=step; i<=60; i+=step) {
b->addItem(QObject::tr("%1s").arg(i), i);
if (i==value) b->setCurrentIndex(b->count()-1);
}
}
void populateGVmodeCB(QComboBox *b, unsigned int value) void populateGVmodeCB(QComboBox *b, unsigned int value)
{ {
b->clear(); b->clear();
@ -480,68 +483,205 @@ void populatePhasesCB(QComboBox *b, int value)
b->setCurrentIndex(value + GetEepromInterface()->getCapability(FlightPhases)); b->setCurrentIndex(value + GetEepromInterface()->getCapability(FlightPhases));
} }
void populateCurvesCB(QComboBox *b, int value) bool gvarsEnabled()
{ {
b->clear(); int gvars=0;
int numcurves=GetEepromInterface()->getCapability(NumCurves); if (GetEepromInterface()->getCapability(HasVariants)) {
if (numcurves==0) { if ((GetCurrentFirmwareVariant() & GVARS_VARIANT)) {
numcurves=16; gvars=1;
}
for (int i = -(numcurves)*GetEepromInterface()->getCapability(HasNegCurves); i < CURVE_BASE + numcurves; i++) {
if ((i==0) && GetEepromInterface()->getCapability(DiffMixers)) {
b->addItem(QObject::tr("Diff"));
} else {
b->addItem(getCurveStr(i));
} }
} }
b->setCurrentIndex(value+numcurves*GetEepromInterface()->getCapability(HasNegCurves)); else {
b->setMaxVisibleItems(10); gvars=1;
}
return gvars;
} }
void populateExpoCurvesCB(QComboBox *b, int value) GVarGroup::GVarGroup(QCheckBox *weightGV, QSpinBox *weightSB, QComboBox *weightCB, int & weight, const int deflt, const int mini, const int maxi, const unsigned int flags):
QObject(),
weightGV(weightGV),
weightSB(weightSB),
weightCB(weightCB),
weight(weight),
flags(flags),
lock(false)
{ {
b->clear(); lock = true;
int numcurves=GetEepromInterface()->getCapability(NumCurves);
if (numcurves==0) {
numcurves=16;
}
if (GetEepromInterface()->getCapability(ExpoIsCurve)) {
b->addItem(QObject::tr("Expo"));
} else {
b->addItem(getCurveStr(0));
}
for (int i = 1; i < CURVE_BASE + numcurves; i++)
b->addItem(getCurveStr(i));
b->setCurrentIndex(value);
b->setMaxVisibleItems(10);
/* TODO
if (GetEepromInterface()->getCapability(ExpoCurve5)) {
int curve5=GetEepromInterface()->getCapability(ExpoCurve5);
for (int i=CURVE_BASE+curve5; i < CURVE_BASE + MAX_CURVE5; i++) {
// Get the index of the value to disable
QModelIndex index = b->model()->index(i, 0);
// This is the effective 'disable' flag if (gvarsEnabled()) {
QVariant v(0); populateGVCB(weightCB, weight);
connect(weightGV, SIGNAL(stateChanged(int)), this, SLOT(gvarCBChanged(int)));
//the magic connect(weightCB, SIGNAL(currentIndexChanged(int)), this, SLOT(valuesChanged()));
b->model()->setData(index, v, Qt::UserRole - 1); }
else {
weightGV->hide();
if (weight > maxi || weight < -mini) {
weight = deflt;
} }
} }
if (GetEepromInterface()->getCapability(ExpoCurve9)) {
int curve9=GetEepromInterface()->getCapability(ExpoCurve9);
for (int i=CURVE_BASE+MAX_CURVE5+curve9; i < CURVE_BASE + MAX_CURVE5+ MAX_CURVE9; i++) {
// Get the index of the value to disable
QModelIndex index = b->model()->index(i, 0);
// This is the effective 'disable' flag weightSB->setMinimum(mini);
QVariant v(0); weightSB->setMaximum(maxi);
//the magic if (weight>maxi || weight<mini) {
b->model()->setData(index, v, Qt::UserRole - 1); weightGV->setChecked(true);
weightSB->hide();
weightCB->show();
}
else {
weightGV->setChecked(false);
weightSB->setValue(weight);
weightSB->show();
weightCB->hide();
}
connect(weightSB, SIGNAL(editingFinished()), this, SLOT(valuesChanged()));
lock = false;
}
void GVarGroup::gvarCBChanged(int state)
{
weightCB->setVisible(state);
weightSB->setVisible(!state);
valuesChanged();
}
void GVarGroup::valuesChanged()
{
if (weightGV->isChecked())
weight = weightCB->itemData(weightCB->currentIndex()).toInt();
else
weight = weightSB->value();
}
CurveGroup::CurveGroup(QComboBox *curveTypeCB, QCheckBox *curveGVarCB, QComboBox *curveValueCB, QSpinBox *curveValueSB, CurveReference & curve, unsigned int flags):
QObject(),
curveTypeCB(curveTypeCB),
curveGVarCB(curveGVarCB),
curveValueCB(curveValueCB),
curveValueSB(curveValueSB),
curve(curve),
flags(flags),
lock(false),
lastType(-1)
{
curveTypeCB->addItem(tr("Diff"));
curveTypeCB->addItem(tr("Expo"));
curveTypeCB->addItem(tr("Func"));
curveTypeCB->addItem(tr("Curve"));
curveValueCB->setMaxVisibleItems(10);
connect(curveTypeCB, SIGNAL(currentIndexChanged(int)), this, SLOT(valuesChanged()));
connect(curveGVarCB, SIGNAL(stateChanged(int)), this, SLOT(gvarCBChanged(int)));
connect(curveValueCB, SIGNAL(currentIndexChanged(int)), this, SLOT(valuesChanged()));
connect(curveValueSB, SIGNAL(editingFinished()), this, SLOT(valuesChanged()));
update();
}
void CurveGroup::update()
{
lock = true;
curveTypeCB->setCurrentIndex(curve.type);
if (curve.type == CurveReference::CURVE_REF_DIFF || curve.type == CurveReference::CURVE_REF_EXPO) {
curveGVarCB->show();
if (curve.value > 100 || curve.value < -100) {
curveGVarCB->setChecked(true);
if (lastType != CurveReference::CURVE_REF_DIFF && lastType != CurveReference::CURVE_REF_EXPO) {
lastType = curve.type;
populateGVCB(curveValueCB, curve.value);
}
curveValueCB->show();
curveValueSB->hide();
}
else {
curveGVarCB->setChecked(false);
curveValueSB->setMinimum(-100);
curveValueSB->setMaximum(100);
curveValueSB->setValue(curve.value);
curveValueSB->show();
curveValueCB->hide();
} }
} }
*/ else {
curveGVarCB->hide();
curveValueSB->hide();
curveValueCB->show();
switch (curve.type) {
case CurveReference::CURVE_REF_FUNC:
if (lastType != curve.type) {
lastType = curve.type;
curveValueCB->clear();
for (int i=0; i<=6/*TODO constant*/; i++) {
curveValueCB->addItem(CurveReference(CurveReference::CURVE_REF_FUNC, i).toString());
}
}
curveValueCB->setCurrentIndex(curve.value);
break;
case CurveReference::CURVE_REF_CUSTOM:
{
int numcurves = GetEepromInterface()->getCapability(NumCurves);
if (lastType != curve.type) {
lastType = curve.type;
curveValueCB->clear();
for (int i=-numcurves; i<numcurves; i++) {
curveValueCB->addItem(CurveReference(CurveReference::CURVE_REF_CUSTOM, i).toString());
}
}
curveValueCB->setCurrentIndex(curve.value+numcurves);
break;
}
default:
break;
}
}
lock = false;
}
void CurveGroup::gvarCBChanged(int state)
{
if (!lock) {
if (state) {
curve.value = 10000; // TODO constant in EEpromInterface ...
}
else {
curve.value = 0; // TODO could be better
}
update();
}
}
void CurveGroup::valuesChanged()
{
if (!lock) {
switch (curveTypeCB->currentIndex()) {
case 0:
case 1:
{
int value;
if (curveGVarCB->isChecked())
value = curveValueCB->itemData(curveValueCB->currentIndex()).toInt();
else
value = curveValueSB->value();
curve = CurveReference(curveTypeCB->currentIndex() == 0 ? CurveReference::CURVE_REF_DIFF : CurveReference::CURVE_REF_EXPO, value);
break;
}
case 2:
curve = CurveReference(CurveReference::CURVE_REF_FUNC, curveValueCB->currentIndex());
break;
case 3:
curve = CurveReference(CurveReference::CURVE_REF_CUSTOM, curveValueCB->currentIndex() - GetEepromInterface()->getCapability(NumCurves));
break;
}
update();
}
} }
void populateTrimUseCB(QComboBox *b, unsigned int phase) void populateTrimUseCB(QComboBox *b, unsigned int phase)
@ -560,73 +700,29 @@ void populateTrimUseCB(QComboBox *b, unsigned int phase)
void populateGvarUseCB(QComboBox *b, unsigned int phase) void populateGvarUseCB(QComboBox *b, unsigned int phase)
{ {
b->addItem(QObject::tr("Own value")); b->addItem(QObject::tr("Own value"));
unsigned int num_phases = GetEepromInterface()->getCapability(FlightPhases); for (int i=0; i<GetEepromInterface()->getCapability(FlightPhases); i++) {
if (num_phases>0) { if (i != (int)phase) {
for (unsigned int i = 0; i < num_phases; i++) { b->addItem(QObject::tr("Flight mode %1 value").arg(i));
if (i != phase) {
b->addItem(QObject::tr("Flight mode %1 value").arg(i));
}
} }
} }
} }
void populateTimerSwitchCB(QComboBox *b, int value, int extrafields) void populateTimerSwitchCB(QComboBox *b, int value)
{ {
b->clear(); b->clear();
uint8_t endvalue=128;
uint8_t count=0; uint8_t count=0;
if (extrafields==2) for (int i=-128; i<128; i++) {
endvalue=192;
for (int i=-128; i<endvalue; i++) {
QString timerMode = getTimerMode(i); QString timerMode = getTimerMode(i);
if (!timerMode.isEmpty()) { if (!timerMode.isEmpty()) {
b->addItem(getTimerMode(i), i); b->addItem(getTimerMode(i), i);
if (i==value) if (i==value)
b->setCurrentIndex(b->count()-1); b->setCurrentIndex(b->count()-1);
if (extrafields==2 && (i<0 || (i>3 && i <TMRMODE_FIRST_CHPERC))) {
QModelIndex index = b->model()->index(count, 0);
// This is the effective 'disable' flag
QVariant v(0);
//the magic
b->model()->setData(index, v, Qt::UserRole - 1);
}
count++; count++;
} }
} }
b->setMaxVisibleItems(10); b->setMaxVisibleItems(10);
} }
void populateTimerSwitchBCB(QComboBox *b, int value, int extrafields)
{
b->clear();
if (extrafields!=2) {
int startvalue=-128;
int endvalue=128;
if (extrafields==1) {
startvalue=-25;
endvalue=26;
}
for (int i=startvalue; i<endvalue; i++) {
QString timerMode = getTimerMode(i);
if (!timerMode.isEmpty()) {
b->addItem(getTimerMode(i), i);
if (i==value)
b->setCurrentIndex(b->count()-1);
}
}
} else {
for (int i=-33; i<66; i++) {
QString timerMode = getTimerModeB(i);
if (!timerMode.isEmpty()) {
b->addItem(timerMode, i);
if (i==value)
b->setCurrentIndex(b->count()-1);
}
}
}
b->setMaxVisibleItems(10);
}
QString getTimerMode(int tm) { QString getTimerMode(int tm) {
QString stt = "OFFABSTHsTH%THt"; QString stt = "OFFABSTHsTH%THt";
@ -868,8 +964,10 @@ void populateGVCB(QComboBox *b, int value)
{ {
int selected=0; int selected=0;
int nullitem; int nullitem;
b->clear(); b->clear();
int pgvars=GetEepromInterface()->getCapability(GvarsOfsNum);
int pgvars = GetEepromInterface()->getCapability(Gvars);
for (int i=-pgvars; i<=-1; i++) { for (int i=-pgvars; i<=-1; i++) {
int16_t gval = (int16_t)(-10000+i); int16_t gval = (int16_t)(-10000+i);
b->addItem(QObject::tr("-GV%1").arg(-i), gval); b->addItem(QObject::tr("-GV%1").arg(-i), gval);
@ -878,12 +976,15 @@ void populateGVCB(QComboBox *b, int value)
selected=1; selected=1;
} }
} }
b->addItem("---", 0); b->addItem("---", 0);
nullitem=b->count()-1; nullitem=b->count()-1;
if (value == 0) { if (value == 0) {
b->setCurrentIndex(b->count()-1); b->setCurrentIndex(b->count()-1);
selected=1; selected=1;
} }
for (int i=1; i<=pgvars; i++) { for (int i=1; i<=pgvars; i++) {
int16_t gval = (int16_t)(10000+i); int16_t gval = (int16_t)(10000+i);
b->addItem(QObject::tr("GV%1").arg(i), gval); b->addItem(QObject::tr("GV%1").arg(i), gval);
@ -892,12 +993,12 @@ void populateGVCB(QComboBox *b, int value)
selected=1; selected=1;
} }
} }
if (selected==0) if (selected==0)
b->setCurrentIndex(nullitem); b->setCurrentIndex(nullitem);
} }
void populateSourceCB(QComboBox *b, const RawSource & source, const ModelData & model, unsigned int flags)
void populateSourceCB(QComboBox *b, const RawSource &source, unsigned int flags)
{ {
RawSource item; RawSource item;
@ -907,7 +1008,18 @@ void populateSourceCB(QComboBox *b, const RawSource &source, unsigned int flags)
item = RawSource(SOURCE_TYPE_NONE); item = RawSource(SOURCE_TYPE_NONE);
b->addItem(item.toString(), item.toValue()); b->addItem(item.toString(), item.toValue());
if (item == source) b->setCurrentIndex(b->count()-1); if (item == source) b->setCurrentIndex(b->count()-1);
}
if (flags & POPULATE_VIRTUAL_INPUTS) {
int virtualInputs = GetEepromInterface()->getCapability(VirtualInputs);
for (int i=0; i<virtualInputs; i++) {
item = RawSource(SOURCE_TYPE_VIRTUAL_INPUT, i, &model);
b->addItem(item.toString(), item.toValue());
if (item == source) b->setCurrentIndex(b->count()-1);
}
}
if (flags & POPULATE_SOURCES) {
for (int i=0; i<4+GetEepromInterface()->getCapability(Pots); i++) { for (int i=0; i<4+GetEepromInterface()->getCapability(Pots); i++) {
item = RawSource(SOURCE_TYPE_STICK, i); item = RawSource(SOURCE_TYPE_STICK, i);
b->addItem(item.toString(), item.toValue()); b->addItem(item.toString(), item.toValue());
@ -983,7 +1095,7 @@ void populateSourceCB(QComboBox *b, const RawSource &source, unsigned int flags)
} }
if (flags & POPULATE_GVARS) { if (flags & POPULATE_GVARS) {
for (int i=0; i<GetEepromInterface()->getCapability(GvarsNum); i++) { for (int i=0; i<GetEepromInterface()->getCapability(Gvars); i++) {
item = RawSource(SOURCE_TYPE_GVAR, i); item = RawSource(SOURCE_TYPE_GVAR, i);
b->addItem(item.toString(), item.toValue()); b->addItem(item.toString(), item.toValue());
if (item == source) b->setCurrentIndex(b->count()-1); if (item == source) b->setCurrentIndex(b->count()-1);
@ -1061,25 +1173,20 @@ QString getSignedStr(int value)
return value > 0 ? QString("+%1").arg(value) : QString("%1").arg(value); return value > 0 ? QString("+%1").arg(value) : QString("%1").arg(value);
} }
QString getCurveStr(int curve)
{
QString crvStr = "!c16!c15!c14!c13!c12!c11!c10!c9 !c8 !c7 !c6 !c5 !c4 !c3 !c2 !c1 ----x>0 x<0 |x| f>0 f<0 |f| c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 ";
return crvStr.mid((curve+C9X_MAX_CURVES) * 4, 4).remove(' ').replace("c", QObject::tr("Curve") + " ");
}
QString getGVarString(int16_t val, bool sign) QString getGVarString(int16_t val, bool sign)
{ {
if (val >= -10000 && val <= 10000) if (val >= -10000 && val <= 10000) {
if (sign) if (sign)
return QString("(%1%)").arg(getSignedStr(val)); return QString("%1%").arg(getSignedStr(val));
else else
return QString("(%1%)").arg(val); return QString("%1%").arg(val);
else }
if (val<0) { else {
return QObject::tr("(-GV%1)").arg(-val-10000); if (val<0)
} else { return QObject::tr("-GV%1").arg(-val-10000);
return QObject::tr("(GV%1)").arg(val-10000); else
} return QObject::tr("GV%1").arg(val-10000);
}
} }
QString image2qstring(QImage image) QString image2qstring(QImage image)
@ -1141,12 +1248,6 @@ int findmult(float value, float base)
return mult; return mult;
} }
bool checkbit(int value, int bit)
{
return ((value & (1<<bit))==(1<<bit));
}
QString getFrSkyAlarmType(int alarm) QString getFrSkyAlarmType(int alarm)
{ {
switch (alarm) { switch (alarm) {
@ -1214,109 +1315,6 @@ QString getFrSkySrc(int index)
return RawSource(SOURCE_TYPE_TELEMETRY, index-1).toString(); return RawSource(SOURCE_TYPE_TELEMETRY, index-1).toString();
} }
/*
1,2) Timer1/Timer2 0:765
3,4) TX/RX
5) A1 range
6) A2 range
7) ALT 0-1020
8)RPM 0-12750
9FUEL 0-100%
10) T1 -30-225
11) T2 -30-225
12) spd 0-510
13) dist 0-2040
14)GAlt 0-1020
15) cell 0-5.1
16) Cels 0 25.5
17) Vfas 0 25.5
18) Curr 0 127.5
19) Cnsp 0 5100
20) Powr 0 1275
21) AccX 0 2.55
22) AccY 0 2.55
23) AccZ 0 2.55
24) Hdg 0 255
25) VSpd 0 2.55
26) A1- A1 range
27) A2- A2 range
28) Alt- 0 255
29) Alt+ 0 255
30) Rpm+ 0 255
31) T1+ 0 255 (s????)
32) T2+ 0 255 (e????)
33) Spd+ 0 255 (ILG???)
34) Dst+ 0 255 (v ????)
35) Cur+ 0 25.5 (A)
1.852
*/
float getBarValue(int barId, int value, FrSkyData *fd)
{
switch (barId-1) {
case TELEMETRY_SOURCE_TX_BATT:
return value/10.0;
case TELEMETRY_SOURCE_TIMER1:
case TELEMETRY_SOURCE_TIMER2:
return (3*value);
case TELEMETRY_SOURCE_RSSI_TX:
case TELEMETRY_SOURCE_RSSI_RX:
case TELEMETRY_SOURCE_FUEL:
return std::min(100, value);
case TELEMETRY_SOURCE_A1:
case TELEMETRY_SOURCE_A1_MIN:
if (fd->channels[0].type==0)
return ((fd->channels[0].ratio*value/255.0)+fd->channels[0].offset)/10;
else
return ((fd->channels[0].ratio*value/255.0)+fd->channels[0].offset);
case TELEMETRY_SOURCE_A2:
case TELEMETRY_SOURCE_A2_MIN:
if (fd->channels[1].type==0)
return ((fd->channels[1].ratio*value/255.0)+fd->channels[1].offset)/10;
else
return ((fd->channels[1].ratio*value/255.0)+fd->channels[1].offset);
case TELEMETRY_SOURCE_ALT:
case TELEMETRY_SOURCE_GPS_ALT:
case TELEMETRY_SOURCE_ALT_MAX:
case TELEMETRY_SOURCE_ALT_MIN:
return (8*value)-500;
case TELEMETRY_SOURCE_RPM:
case TELEMETRY_SOURCE_RPM_MAX:
return value * 50;
case TELEMETRY_SOURCE_T1:
case TELEMETRY_SOURCE_T2:
case TELEMETRY_SOURCE_T1_MAX:
case TELEMETRY_SOURCE_T2_MAX:
return value - 30.0;
case TELEMETRY_SOURCE_CELL:
return value*2.0/100;
case TELEMETRY_SOURCE_CELLS_SUM:
case TELEMETRY_SOURCE_VFAS:
return value/10.0;
case TELEMETRY_SOURCE_HDG:
return std::min(359, value*2);
case TELEMETRY_SOURCE_DIST_MAX:
case TELEMETRY_SOURCE_DIST:
return value * 8;
case TELEMETRY_SOURCE_CURRENT_MAX:
case TELEMETRY_SOURCE_CURRENT:
return value/2.0;
case TELEMETRY_SOURCE_POWER:
return value*5;
case TELEMETRY_SOURCE_CONSUMPTION:
return value * 20;
case TELEMETRY_SOURCE_SPEED:
case TELEMETRY_SOURCE_SPEED_MAX:
if (fd->imperial==1)
return value;
else
return value*1.852;
default:
return value;
}
}
QString getTrimInc(ModelData * g_model) QString getTrimInc(ModelData * g_model)
{ {
switch (g_model->trimInc) { switch (g_model->trimInc) {
@ -1344,6 +1342,34 @@ QString getProtocol(ModelData * g_model)
return str; return str;
} }
QString getPhasesStr(unsigned int phases, ModelData & model)
{
int numphases = GetEepromInterface()->getCapability(FlightPhases);
if (numphases && phases) {
QString str;
int count = 0;
if (phases == (unsigned int)(1<<numphases) - 1) {
str = QObject::tr("None");
}
if (phases) {
for (int i=0; i<numphases;i++) {
if (!(phases & (1<<i))) {
if (count++ > 0) str += QString(", ");
str += getPhaseName(i+1, model.phaseData[i].name);
}
}
}
if (count > 1)
return QObject::tr("Flight modes(%1)").arg(str);
else
return QObject::tr("Flight mode(%1)").arg(str);
}
else {
return "";
}
}
float c9xexpou(float point, float coeff) float c9xexpou(float point, float coeff)
{ {
float x=point*1024.0/100.0; float x=point*1024.0/100.0;
@ -1365,3 +1391,35 @@ QString getCenterBeep(ModelData * g_model)
if(g_model->beepANACenter & 0x80) strl << "LS"; if(g_model->beepANACenter & 0x80) strl << "LS";
return strl.join(", "); return strl.join(", ");
} }
QString getTheme()
{
QSettings settings;
int theme_set = settings.value("theme", 1).toInt();
QString Theme;
switch(theme_set) {
case 0:
Theme="classic";
break;
case 2:
Theme="monowhite";
break;
case 3:
Theme="monoblue";
break;
default:
Theme="monochrome";
break;
}
return Theme;
}
CompanionIcon::CompanionIcon(QString baseimage)
{
static QString theme = getTheme();
addFile(":/themes/"+theme+"/16/"+baseimage, QSize(16,16));
addFile(":/themes/"+theme+"/24/"+baseimage, QSize(24,24));
addFile(":/themes/"+theme+"/32/"+baseimage, QSize(32,32));
addFile(":/themes/"+theme+"/48/"+baseimage, QSize(48,48));
}

View file

@ -6,10 +6,10 @@
#define TMR_NUM_OPTION (TMR_VAROFS+2*9+2*GetEepromInterface()->getCapability(CustomSwitches)-1) #define TMR_NUM_OPTION (TMR_VAROFS+2*9+2*GetEepromInterface()->getCapability(CustomSwitches)-1)
//convert from mode 1 to mode g_eeGeneral.stickMode //convert from mode 1 to mode generalSettings.stickMode
//NOTICE! => 1..4 -> 1..4 //NOTICE! => 1..4 -> 1..4
#define CONVERT_MODE(x) (((x)<=4) ? modn12x3[g_eeGeneral.stickMode][((x)-1)] : (x)) #define CONVERT_MODE(x) (((x)<=4) ? modn12x3[generalSettings.stickMode][((x)-1)] : (x))
#define CHANNEL_ORDER(x) (chout_ar[g_eeGeneral.templateSetup*4 + (x)-1]) #define CHANNEL_ORDER(x) (chout_ar[generalSettings.templateSetup*4 + (x)-1])
#define CURVE_BASE 7 #define CURVE_BASE 7
#define CH(x) (SRC_CH1+(x)-1-(SRC_SWC-SRC_3POS)) #define CH(x) (SRC_CH1+(x)-1-(SRC_SWC-SRC_3POS))
@ -29,55 +29,101 @@ void populateTTraceCB(QComboBox *b, int value);
void populateRotEncCB(QComboBox *b, int value, int renumber); void populateRotEncCB(QComboBox *b, int value, int renumber);
void populateBacklightCB(QComboBox *b, const uint8_t value); void populateBacklightCB(QComboBox *b, const uint8_t value);
QString getTheme();
class CompanionIcon: public QIcon {
public:
CompanionIcon(QString baseimage);
};
class GVarGroup : public QObject {
Q_OBJECT
public:
GVarGroup(QCheckBox *weightGV, QSpinBox *weightSB, QComboBox *weightCB, int & weight, const int deflt, const int mini, const int maxi, const unsigned int flags=0);
protected slots:
void gvarCBChanged(int);
void valuesChanged();
protected:
QCheckBox *weightGV;
QSpinBox *weightSB;
QComboBox *weightCB;
int & weight;
const unsigned int flags;
bool lock;
};
class CurveGroup : public QObject {
Q_OBJECT
public:
CurveGroup(QComboBox *curveTypeCB, QCheckBox *curveGVarCB, QComboBox *curveValueCB, QSpinBox *curveValueSB, CurveReference & curve, unsigned int flags=0);
void update();
protected slots:
void gvarCBChanged(int);
void valuesChanged();
protected:
QComboBox *curveTypeCB;
QCheckBox *curveGVarCB;
QComboBox *curveValueCB;
QSpinBox *curveValueSB;
CurveReference & curve;
unsigned int flags;
bool lock;
int lastType;
};
#define POPULATE_ONOFF 0x01 #define POPULATE_ONOFF 0x01
#define POPULATE_MSWITCHES 0x02 #define POPULATE_MSWITCHES 0x02
#define POPULATE_AND_SWITCHES 0x04 #define POPULATE_AND_SWITCHES 0x04
void populateSwitchCB(QComboBox *b, const RawSwitch & value, unsigned long attr=0, UseContext context=DefaultContext); void populateSwitchCB(QComboBox *b, const RawSwitch & value, unsigned long attr=0, UseContext context=DefaultContext);
void populateFuncCB(QComboBox *b, unsigned int value); void populateFuncCB(QComboBox *b, unsigned int value);
void populateRepeatCB(QComboBox *b, unsigned int value);
void populateGVmodeCB(QComboBox *b, unsigned int value); void populateGVmodeCB(QComboBox *b, unsigned int value);
QString FuncParam(uint function, int value, QString paramT="",unsigned int adjustmode=0); QString FuncParam(uint function, int value, QString paramT="",unsigned int adjustmode=0);
void populateFuncParamCB(QComboBox *b, uint function, unsigned int value, unsigned int adjustmode=0); void populateFuncParamCB(QComboBox *b, const ModelData & model, uint function, unsigned int value, unsigned int adjustmode=0);
void populateFuncParamArmTCB(QComboBox *b, ModelData * g_model, char * value, QStringList & paramsList); void populateFuncParamArmTCB(QComboBox *b, ModelData * g_model, char * value, QStringList & paramsList);
void populatePhasesCB(QComboBox *b, int value); void populatePhasesCB(QComboBox *b, int value);
void populateTrimUseCB(QComboBox *b, unsigned int phase); void populateTrimUseCB(QComboBox *b, unsigned int phase);
void populateGvarUseCB(QComboBox *b, unsigned int phase); void populateGvarUseCB(QComboBox *b, unsigned int phase);
void populateCurvesCB(QComboBox *b, int value);
void populateCustomScreenFieldCB(QComboBox *b, unsigned int value, bool last, int hubproto); void populateCustomScreenFieldCB(QComboBox *b, unsigned int value, bool last, int hubproto);
void populateExpoCurvesCB(QComboBox *b, int value); void populateTimerSwitchCB(QComboBox *b, int value);
void populateTimerSwitchCB(QComboBox *b, int value, int extrafields=0);
void populateTimerSwitchBCB(QComboBox *b, int value, int extrafields=0);
QString getCustomSwitchStr(CustomSwData * customSw, const ModelData & model); QString getCustomSwitchStr(CustomSwData * customSw, const ModelData & model);
QString getProtocolStr(const int proto); QString getProtocolStr(const int proto);
QString getPhasesStr(unsigned int phases, ModelData & model);
#define POPULATE_SOURCES 1 #define POPULATE_SOURCES 1
#define POPULATE_TRIMS 2 #define POPULATE_TRIMS 2
#define POPULATE_SWITCHES 4 #define POPULATE_SWITCHES 4
#define POPULATE_GVARS 8 #define POPULATE_GVARS 8
#define POPULATE_TELEMETRY 16 #define POPULATE_TELEMETRY 16
#define POPULATE_TELEMETRYEXT 32 #define POPULATE_TELEMETRYEXT 32
#define POPULATE_VIRTUAL_INPUTS 64
#define GVARS_VARIANT 0x0001 #define GVARS_VARIANT 0x0001
#define FRSKY_VARIANT 0x0002 #define FRSKY_VARIANT 0x0002
// void populateGVarCB(QComboBox *b, int value, int min, int max,int pgvars=5); //TODO: Clean Up // void populateGVarCB(QComboBox *b, int value, int min, int max,int pgvars=5); //TODO: Clean Up
void populateGVCB(QComboBox *b, int value); void populateGVCB(QComboBox *b, int value);
void populateSourceCB(QComboBox *b, const RawSource &source, unsigned int flags); void populateSourceCB(QComboBox *b, const RawSource &source, const ModelData & model, unsigned int flags);
void populateCSWCB(QComboBox *b, int value); void populateCSWCB(QComboBox *b, int value);
QString getTimerMode(int tm); QString getTimerMode(int tm);
QString getTimerModeB(int tm); QString getTimerModeB(int tm);
QString getPhaseName(int val, char * phasename=NULL); QString getPhaseName(int val, char * phasename=NULL);
QString getStickStr(int index); QString getInputStr(ModelData & model, int index);
QString getCSWFunc(int val); QString getCSWFunc(int val);
QString getFuncName(unsigned int val); QString getFuncName(unsigned int val);
QString getRepeatString(unsigned int val); QString getRepeatString(unsigned int val);
QString getSignedStr(int value); QString getSignedStr(int value);
QString getCurveStr(int curve);
QString getGVarString(int16_t val, bool sign=false); QString getGVarString(int16_t val, bool sign=false);
QString image2qstring(QImage image); QString image2qstring(QImage image);
QImage qstring2image(QString imagestr); QImage qstring2image(QString imagestr);
int findmult(float value, float base); int findmult(float value, float base);
bool checkbit(int value, int bit);
QString getTrimInc(ModelData * g_model); QString getTrimInc(ModelData * g_model);
QString getTimerStr(TimerData & timer); QString getTimerStr(TimerData & timer);
@ -91,8 +137,9 @@ QString getFrSkyUnits(int units);
QString getFrSkyProtocol(int protocol); QString getFrSkyProtocol(int protocol);
QString getFrSkyMeasure(int units); QString getFrSkyMeasure(int units);
QString getFrSkySrc(int index); QString getFrSkySrc(int index);
float getBarValue(int barId, int value, FrSkyData *fd);
float c9xexpou(float point, float coeff); float c9xexpou(float point, float coeff);
float ValToTim(int value); float ValToTim(int value);
int TimToVal(float value); int TimToVal(float value);
#endif // HELPERS_H #endif // HELPERS_H

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Before After
Before After

View file

@ -1,157 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48px"
height="48px"
id="svg3050"
version="1.1"
inkscape:version="0.48.2 r9819"
sodipodi:docname="New document 6">
<defs
id="defs3052" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7"
inkscape:cx="24"
inkscape:cy="24"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="479"
inkscape:window-height="590"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="0" />
<metadata
id="metadata3055">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<image
y="6.811959e-08"
x="4.108463e-07"
id="image3120"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAFFRJREFU
aIHtmWlwXcd15//dd3337QseHoCHlVi5gaJIcBMp0hJTlGzLiV2UPXGUipOKKiqXVGUrrnJ5UoNi
pFQcO1PxSJM4jD2eOHHkWHQiWxpJZkQtpERS3ESQFAiC2LcH4D28/b279r09H+hw7JGrxhzHyRef
7919fn26T5/+H+BX9iv7hYz8W07GOafPPPOMBEBxHEe2LEvw+/1wHIczxpxYLGb19vbaBw4cYP9W
a/7CABycfP5zn1dDoVC0rOupWrXY7Fp2g8d4mDFPJYQQTjgTBKEmy3JeVdXleDy+pGlaTtf1+pEj
R7z/MIBHjx6VErm5RG4111+p1u4CYwOSqrb4g8FwIOhXFFkWZUjEcz3X1C27WqnU6/V6lrt8MhAN
XArHw1f7Ovoyn/nMZ8x/d4DP/dfP+UiFtK8sZfeZlrUv2hTrbuvriLV1d/qaEyklooVFURapShRE
XD9nhuOWSyV7bmHeHLl+pTI+fXPOL2pvk5j8+ql3X5+4fvJ67d8N4PH/9rgilIXuzNzKh4kgHOzf
ubF1y9Bd0c0tA/5UIKnUBIsuYo0skRwpo4YYD/EQNMS9oBc0FSeXzdXPXTpfeunEK5lL7116Y3U2
8wNozg3M4Y4jId7pgOefPyycG5ebFxdW7qeSeGjHg/e079yxK7El1uefE9eEPzOfw6uX3sDU2CTq
hQpc6kGIKUTtjSDW3Sg0a0kh1hCUjcGycuPsnFBYzO4H4xUYSgWw5gC4v1SA00vrg+XVubscZh/Y
fv/u1j179jRsifT7n6en6B+N/AVmv3seeL8OGJSDUg8u54wTasUztLxrATPb/IAiUHGc+dXpCty4
wLDi7IXNphDDGgqo/NIAhoeHxWy+1FSsVXem+zs6BndujW4Mdfu/TY/Tx999Guaz48AKODTVhsJ1
VJkJ0/NAiShyT5NGXI25juCWa+ALNjFkz+c1iGHkaStsbxBcuQpYNQA/d2a6I4AcoNYqlXVUpP3r
tvaF18e7A1fEGfrFxf8O8x9mQPKU8xi1UGFrmDPyqLgFuLAgkaAXRlwOIIH39LArMskVwUE8DzYn
EIkMwhMgXhAA/aUBaKgHluu1rkAylGxrb/OHlID0X9y/Q/70JMicCx4SXHBexKyRQcm9AI5zIKQC
oJ1a3j5n1eizK47jacQHxj1UXAtlVofllUHICkRiAuB34tPPDTA8PEwXrVzAcZyWcFPcn4w0KIvC
GnmrcAEYswFCOEKChUmjgqo3DpW+gIByGaGQoYa8RMLV1laWVj/s5sxuEKqCwYHjVcF4DhTvQ+Bn
oNk53MHu3xEAAMqYHfAojwbjQTmk+KVRMkcyaytAjgE+yiERCzVWg4gxyHQc1ytFoMLNw4cz+eyZ
U4FoqKwTut41WYCLbsXzhBVIPAPOl2DYq5hHFb+sCFzHdSq7mkop9UkBVVREmUwhA1YzQWwAGgVE
wsC4AZGswifXAeOWM8eOuQawbHRFq/FU6HKdMNHUPBN1ZqCUt3AdDHe483cMsH7DekycmRU8QKKi
QDhAi7wKWAwgBPBTDpVwUMIgEBP0Azvp8keeqD5TiJmz4ix9KBRyDhw58gsXdT//EWqAx0XP4/A8
j3swYfO6ZwCuB4gECAiACkDkBIJAINKfAhgeHpaf8BnJun+01TEd/99WqrXHn3o8J7JYkcUK9Wef
eMYGIXd0fP6fAMPDw7QZUKvVqub8sByKUF9jndcUR7dozi3CIg6giIBKgZhEECQUiiBB9fwBnyI/
OTysAjG5VrPV1epyS6VQ2V2vV3dCIBGXObWVQnaRSgs3W83m8S8/82fTlw4fzh47dsx+9NFHpaam
JgUIydUqp//qD+fEy2ZFNjQE64knnrAJIfxnAjz//PPCyJkzSS+f75qs1fpqut7BLCvhqGITAeuv
ZkthwzRogz8M+ERwlUCwQeTWiOQ013x8XG9pNtMdc3OGZJoT7aZda/Ko281gb9PigXQoFZFVv8Rk
eFUna2aL2cLEd9/9/okbNybe+c3HHitLNJ6emMj22PZcA+DKrgtYFqAost3VFc8tLIjTHR37ZwGU
PwDwhS98ITh69uxArVS6v1os7vUcp0cVxahfVWVBFATueaKeKQhO0SCtsQaIARUsrcC7XCPpzT2K
1yEEpk5e3tg0mDRss5YyTGuTpsWShAoNEMWQ5vdLAcqFhCZwfyAanuBzoZNnXg0tvT/JQslUVmGw
cuXMfQDZ5vfHI5yrEqUEiQTnoujao6MzuQsXxt5ZWVl8FUD9pwC++tWv+kvz87tWc7lPG/X6gdZU
KjmwaZPUNjBAEqkUqKlj9PIFcmZ5GmbFQNppQDgYRr6jDDJpYvnklELzLNK9pW9dS0OqoVatxlrb
Nid6enYFYrGQ2pxWSDwh0KDfwT+/9h75i299Q13I3xC4WTOkqJZMNaXbKpVaOuSP39fff19TY2NX
oLvbJ6TTCjKZunf06Mv1EydeDhjGQg5InAaG6G2Ao0ePSpmpqcF8ofDbruMc2r93b2T3Aw/Q9o0b
iZLPo3T5MrKzM4jnCkiaLgozS2jsbEZaaUQ+tgy+NQAzw6jWEYx+asvvIDWixU+cP6sJsqS1tbXI
Q0PNlEJEuUzx5hs2vvX1dzB/IwcSl6iQCAohTqwmLdkkUnFbX9+HGjdvvqdhaCioLS1R8txzC/jO
d15h16//yAOMoiDEa8Fge71UCrLbAMVMpimfy33EMowD9+3bFz74yU/SZCpFCt/8Jr7xta/hzOgo
8gB8mopAbycii91oCPrQsEUFdQiUzjBaDrVhfm1RrLULsQ+1fMjWQmGMvD8l2l6WvH8tgf/xDQEX
LzEsLs7B86YgBzdDVbOetTJK1g10WZrkW9eWXt/S2joYHRoKaMeOCXR4+AxWV78PYN4lRNQDgUg2
GlUvO45vuVQ65oq3L+3p0xsqpdL+vs7O+J5Dh4RkKkVyf/zHGB4exjkAFsA1gPtdjpnVNdIiKWT8
xTfhFKsILVgw7CrmR8qwQ8C3yYtCuaXuG9rbxxVTIuNLI9jYFUWl1oKZGRvAKkQxAMHt5sYyhV+b
Iw3BWEMsnPR1du6MDm5p8I+Pi/SLX7yGUuk5AMRtaRmshMNX12xbvEAIvTg/7yveTqOjo6PBWqUy
KABdW7dtE1I9PYS/8gq+/dRTuAiAAJwCDlTVnqXU0yt15dc7e8VCrS5YX3sPGnVg9MpwfAAqDMXX
1vA/02P4p1iCpMoNaM6E0JwU8JGHDuLmeAIzMyl4Xjdc6zwhxMZA7/1886ZEMhYZVDs7e6Itzar0
R/+5hlLpfwGQ+PbtO/V16y4Wr12bv8mYeMowlHngmHsbQGQsrOv6ukgwGGzt7aUqY1j8q7/Cu4xB
AOABLiitOory7mSlsrZt67advl07O/piQbo8nyPlzAiIvx0YCKHumajlapzlDF5ZWOGerBOPpMib
750lDx/q4A98NEj+9puN0PUueF4Bopige/cc8B+8L8Dz+bg2NBTVXnqJ0JdfPgVgDun0Xvuuuwql
CxcuZmo1/rbnae+vrr5W/6mHjJpm0LGseLihQQwmEgSzs5i7eBFV3CrOBQCiqq6UdP2fN2zadHPD
nl18amys6aFDD0j/6bOPkfSfDOOdkybMSR+U9iByySAvd1h6XTR1jxBu6K44Nr/ou3z1tHTwYKMw
PtpJX3+9Fa5rgjGFVqsDgcFBQZMkUZiakuhTT83Ccd6AJHW4W7eq1bGxl/LZbOU9TQu+K0mZtZ/M
nCIASIRQ7nmSJElEkGVgagq1SgUgBALnCIoiX+LcXnGc4m8/+GC2UK/nWaHoBjwPffccQEvoKLJX
RjBSqCE8q6EeDnBLcmqe6s6Y1K5btC7WqRs6V7qS2pDu037rkYR/aSki3riRJvG4Sl5/XRHjcQnR
KMFzz+mYmHgJgMN7e/uNev1ccWZmepJz5S3XlWYmJq7bHwBwOGcUsEzL4o7jAJaFACFQATBC0CgI
5IJhxPu7u7dzVY1UZ2f7UooihXw+BAMhtLoeWqt1TNgMfSBciMU9XXdXOMNLBthNR3Q9OSJG63W+
48zZ93Y8+rsbmj7/+VDsS19Kin6/jVLJxNNPO7cOK94BMI5I5G4WjxfK4+MXV2ybnxYE/9Xp6T1V
4AQ+AOCpalWSpGypVnPKlYroKgpplGW06TomRBFZ16XtDQ3xvrvuenh6crKi2HbL3QMDUmJggJK1
NbiZDEQAgmUjrJukkYtYYNSIBgJX5AR92yybTmNDlz9sBVcmbmSjo6OT/k99qjV47VpA/Mu/dEBp
BUARQB3AOIAWHg63W5nMD6uVSnFCUbTzsuxkgQ+qeBQA5FCopGnazWqtVpqenvZ0ShHQNGwCsFkU
MeTz0S///u+rD3zyk213t7Zu/Ni+fbE9n/60HOnsBL7/fRQWFnBLleKQOYfsuiC2Q+Wa46bKKWPu
5Jx5T1dXNaQFSszx9OvXdbdc5t7u3QSKIoKxMgAJgAxAAKUeVlbybi5XZZ7nlnVdLM/NJZ3/2/nb
EdB1vR4JhUbKtj12cWQk3hWN0jrnNCuKGFAUxGwb20slQdm0ibJkEkIwSATTBPvKV1D88z/HnOfB
uZVuIQLwGANsm0MQbi9ULMrRSmVlQNMCLara4VtbkyVdp/A8D4AOQIKmdcG2F8H5W8S2RyTG4qok
qW2UOp2xWHWh8DMkFxEAjhw54v3JE0+MJZqaji9NT7f/3dhYx7JpIiuKtLdeh8k5Xvubv0HqX/6F
uIEAqroOvrKCe2s1bFMUCLj1D+QAOOdgpslh24wBTADw5JNf9ReL2fWmWdvX17e/uadnXbi1VZG+
/GXAsm4AuAxARDAoIRK5G+Pji1CUUYUxX9i2WzoEYW6v42AeOHwDOPbBSwwAdjSaC4XDr+r5fOPx
yclPrBaLTSFAjADCkM9HCpxjZXIStiTxNcfxcgAOPvywkPL7wY4dg1urgdwC4Ea9zsGYTinVN2/2
CZZVa83ns/cmEh0Dvb17Yjt2RPxvvimQF1+8CuCHIKQKQvzI5z3Y9kEQsgGuqwuyPBWy7WSCsfw2
zo0poLgGYBk/8W++HeOTJ0/yhw4dcoii2P5o1AcgVjdNZdqyvDHGuEeIGw0EvJVAgF3UdXvfxz7m
/cZXviKEtm8n1okTeCWXgw6gSxAwBdgVxxnRBOH15KYH3bW13L0AfWDjxgdb77lnQ8Ln88l/8Adr
ZGnp7wFUeTT6Ibe1dZ1bLs+iXm+gQASACErXqCAYguvKBMjKgLMMtGeBhdtRuB2BJ5980p9bXu43
Gbtbjccbe7Zv5x0bNzLJtvnl06edV1dXueI4VQ8oDWzaFGrbty/uzM2BNjejJAjIAQgAcF3XKxuG
JRCSCaZSlmGwfsPQ9/f03NPa378p1t/vU770JU6uXTsOYBXA3U61misbxoilqrFAKtURXFmRBdu2
wFg/leULfkkKRG070Qcs7Qd8GeDw2E+VEgDgo7S5Xi5/tFwuf9wfCLSsa2sTm7q6aKK5Gft/7de8
b/7pnzrLul7btH37WrixMRi3LDFICIFh4MriIkoANgDIMcZrnleUZXk6uX4wVK5k700k0ht6eu6J
7doV9b/xhkC/9a3LAM4DaHeBtTJjx5cZG7e2bfu90Cc+4dLvfU8NvvtuinheDYzlBEG4GaI0lfC8
te1AbRoYy/2Y/v8AeITEq/X6Rk2WWz+6a5cysG2bEOzuJqIkoRiN8tgjjwjnTLOlVK83tCuKbyid
Fht27yaFp5/Gy4UCBAAhwBvnnDmuO51MNi0zRdnIDbqzu3tfw549bWHGZOHIkRJ0/VUAKgcUA3it
AEzPAXYmnV7s27lz0ieKm9SFhai8tNQI1+0FpSVFkpyobdfTnF+9F/BmgLurwCX9NoAkiiYIsURV
5YnBQdLc2Ejo8eMwz52D//Rpsm/fPrn/s58VSzduaClKSfuBA9Q8fhzPPvssbgLoAHgW8OaAgs/n
u9Bw9zZSqjp7enp2tH3kI1ujTU1+9bHHKuTy5WMgZAWcr3OAkTIwvgp4b2labMzz9IPvvHMmsnt3
s7ZlS1NsacmmnOdh261EUdo1SuWo6872A2v7AZ4BDt+8DRCQpEwgHL5Yse1t53/0o9aZU6f4+KlT
JGfe6jlsn57GnliMpgYH4do2LgwP47lnn8XpWg0xABTwrgGGQ8j5dEfHlaqgdUaC0f6Pf3x3mDFF
e+SRt8nLL78FYBWcd7jAQhW4XACMq4DydmOjPJ9IxOWzZ8c7NG3ED1RVUXzZ73lF0tLy6zCMtJDP
XwkAzVGgsBWwrgKXMrcB2jdsyFszM2/o16/3fefrX39oNZOJUEBIE0J2+P34wdoafvCHf4i4pqFs
25hlDCaA8K2U5r0PGHXgfEgR/ymxfmvGEun25uawduLETf7Xf/09c2FhnAEaAdIuMG8CF/LA2jQg
ngScqba2eEWSGq6oaub0iRMnEufPvyh5nsEikQ/LlDJSKr3COc/Yt1Q0IQKwNOD4bwM8/PDD7tGj
R6+fPnv2H95fWoIN3O8HGv2AVCeEbG5rI3XGwLJZzDPGPQASwMsAKwF5BpxVgeelePJ0cl1nOJfL
rr3wwpvF0dHvioCnAxEK+AFMeEDeAOqLAHkNwCVgsXzy5KK7detDq8mkc/If//F4LJdb2E3p5kSl
ckIuFFYIYAJwXaBqAGYOEEoA5z+rRxYIAespcD+AvRzoIUAkAqgRUaSEc5iu61qAZQMlD5gWgdMU
eJMDV4cOH66mUt2xF154a2BxcWwLILYCsgpwAjj8lhNSERDHAbwHSPPAnIlbjyDZseO3gufP/6gX
iGwFxA6gGAAovVWoEBdAHaDTgHAJMG/+zCbfvYA4BsQZ0MGBLgBpD4g4gEIBIgGmCBQJsCQB0zIw
OwPkAfyr1ikA8APpIKCqgEEB68drqR7ATUCsAXO1nxjzE9auAh0BYCVwS/qRfqzO2RwQGCDogFkF
lv+/27O/sl/Zj+1/A3SW42Q2L0q5AAAAAElFTkSuQmCC
"
height="48"
width="48" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7 KiB

After

Width:  |  Height:  |  Size: 5 KiB

Before After
Before After

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 864 B

After

Width:  |  Height:  |  Size: 381 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 513 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 586 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 871 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View file

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

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Before After
Before After

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