Compare commits

...

132 Commits

Author SHA1 Message Date
bsongis e85242e08d Release notes forgotten! 2014-06-12 12:14:50 +02:00
Andre Bernet 7ea2eb6259 Smaller analog delay margin 2014-06-12 11:23:02 +02:00
bsongis 2cd66cbc65 Fixes #1223 2014-06-12 10:34:57 +02:00
Bertrand Songis 06064b6da2 Update DONATIONS.txt 2014-06-12 07:12:08 +02:00
Bertrand Songis 809cb69b4f Update DONATIONS.txt 2014-06-11 22:41:25 +02:00
Bertrand Songis 6f8e439154 Merge pull request #1255 from andyjenkinson/next
Mac companion sound fix (partial for #1212)
2014-06-11 22:28:22 +02:00
bsongis 4c81e57134 Remaining trace 2014-06-11 21:40:36 +02:00
bsongis ddd2d19c0c Companion: wrong import of inputs when profile is Taranis and EEPROM is
9X
2014-06-11 21:40:17 +02:00
bsongis eeb9ee8aa2 A3 and A4 V2 value bug in Logical Switches (Companion) 2014-06-11 21:32:48 +02:00
bsongis 30b660da17 Offset in Taranis Inputs was missing 2014-06-11 20:06:47 +02:00
Andy Jenkinson 4cd881d746 Merge remote-tracking branch 'upstream/next' into next 2014-06-11 17:36:03 +01:00
bsongis ea731eae37 Channels limits go up to 150% when extended limits are enabled 2014-06-11 16:59:29 +02:00
Andy Jenkinson 5d77b8bf21 Merge remote-tracking branch 'upstream/next' into next 2014-06-11 15:44:27 +01:00
Bertrand Songis 621639ad0b Merge pull request #1253 from opentx/mhotar/cz_translations
Timer labels extended to 4 characters in CZ to be able to describe T-Tra...
2014-06-11 16:30:27 +02:00
Kjell Kernen fdc95bbf23 Included some nice start Taranis start screens by Scott Page. 2014-06-11 16:28:53 +02:00
mhotar b182d98da0 Timer labels extended to 4 characters in CZ to be able to describe T-Trace driving timers and THR alarm too. 2014-06-11 16:24:18 +02:00
Andre Bernet e49a15bf07 French translations 2014-06-11 16:13:59 +02:00
bsongis 3cdb2b549b French last translation 2014-06-11 16:11:00 +02:00
bsongis 69276bffcc Cleaning work in Companion 2014-06-11 16:11:00 +02:00
Romolo Manfredini b0afbb692f Merge origin/next into next 2014-06-11 15:13:41 +02:00
Romolo Manfredini 0ab85725e0 Italian translation (almost finished) 2014-06-11 15:12:17 +02:00
bsongis e8e025fdb0 Fixes #1252 2014-06-11 15:06:39 +02:00
bsongis 7d29fed9a5 2.0.2 preparation 2014-06-11 14:51:00 +02:00
bsongis 78ef42755b Fixes #1251 2014-06-11 14:46:50 +02:00
Bertrand Songis 2a9429d183 Update DONATIONS.txt 2014-06-11 14:19:50 +02:00
Kjell Kernen 4773ba469f Swedish OpenTX translation for 2.0.2 2014-06-11 14:13:34 +02:00
Kjell Kernen 6d1b379f53 Swedish companion translation (missed in last commit) 2014-06-11 14:03:23 +02:00
Kjell Kernen 54cbc46929 Swedish companion translation + Fixed spelling error. 2014-06-11 14:02:56 +02:00
Bertrand Songis 1fd4dbb1a9 Update DONATIONS.txt 2014-06-11 13:02:24 +02:00
Bertrand Songis ecd871fe34 Update DONATIONS.txt 2014-06-11 12:17:02 +02:00
bsongis 5c4b2ebd90 EEPROM Backup/Restore problem on 9X128 (variant not used correctly) 2014-06-11 11:58:57 +02:00
bsongis 3fe75fac59 Fixes #1151 (applied the same trick to the GeneralEdit window) 2014-06-11 09:30:52 +02:00
bsongis 43a7434ae5 Fixes #1247 2014-06-11 09:23:11 +02:00
Bertrand Songis 134a9c2472 Update DONATIONS.txt 2014-06-11 09:16:10 +02:00
bsongis 0f495a6fd9 Fixes #1248 2014-06-11 08:21:55 +02:00
Bertrand Songis 5d037327d4 Update DONATIONS.txt 2014-06-11 08:03:56 +02:00
bsongis ebbe2635b7 Fixes #1249 2014-06-11 07:43:00 +02:00
Bertrand Songis cab9615fa8 Update DONATIONS.txt 2014-06-11 07:28:51 +02:00
Bertrand Songis 9b6d45bba3 Update DONATIONS.txt 2014-06-11 07:11:05 +02:00
bsongis 7ddb29ca74 RxBatt alarms files/tones removed 2014-06-10 23:42:46 +02:00
Andre Bernet 87e1c4f96d Missing , 2014-06-10 23:12:24 +02:00
Bertrand Songis 22e625baad Update DONATIONS.txt 2014-06-10 22:32:03 +02:00
Bertrand Songis b37f573226 Update DONATIONS.txt 2014-06-10 19:10:22 +02:00
bsongis 296264d8b4 Fixes #1245 2014-06-10 18:12:41 +02:00
bsongis 2ba86d8cb3 Fixes #1222 2014-06-10 18:03:54 +02:00
Andy Jenkinson 8e5a52879a Partial solution to #1212 (needs testing on other platforms) 2014-06-10 16:14:26 +01:00
bsongis e4d03b8c70 Fixes #1205 - Delay only applied to Play family function, with a
configurable delay, between 0 and 300ms (default is 150ms).
2014-06-10 16:19:44 +02:00
bsongis 831cd81320 #1151 - Done the same trick on the sliders 2014-06-10 16:17:55 +02:00
bsongis b2d8c76fc1 Fixes #1243 2014-06-10 15:40:20 +02:00
bsongis 3392879940 Fixes #1243 2014-06-10 15:29:57 +02:00
Damjan Adamic d767b62d01 Added A3 and A4 simulator initialization values. 2014-06-10 15:24:55 +02:00
bsongis 2ea687099a Fixes #1192 - Tests needed! 2014-06-10 15:21:25 +02:00
bsongis 81c4b61322 Fixes #1151 2014-06-10 15:12:30 +02:00
bsongis 0610c2c79a Fixes #1194 2014-06-10 15:01:04 +02:00
bsongis e50d9c0edf Fixes #1241 - Revert "Bootloader now accessible with left OR right trim inwards"
This reverts commit 54447a45a0.
2014-06-10 14:53:24 +02:00
bsongis 72dc022dc9 Fixes #1182 - RxBatt removed 2014-06-10 14:51:16 +02:00
bsongis 123d5c1be8 Fixes #1242 2014-06-10 14:36:35 +02:00
bsongis 9be2755d91 Fixes #1235 2014-06-10 11:36:10 +02:00
bsongis 4305935fd4 Cosmetics 2014-06-10 11:36:10 +02:00
Bertrand Songis 3dff1fdac7 Update DONATIONS.txt 2014-06-10 09:31:13 +02:00
Andre Bernet 0281a5bb22 Had forgotten to bump bootloader version up 2014-06-10 09:19:34 +02:00
bsongis cc0552d1a2 Fixes #1227 - Constant INSTANT_TRIM_MARGIN set to 1%, needs to be
checked and adjusted!
2014-06-10 09:09:27 +02:00
bsongis f4ee34dcc9 Fixes #1232 2014-06-10 08:36:52 +02:00
bsongis 9791509ec1 Fixes #1219 2014-06-10 08:15:31 +02:00
Bertrand Songis bb71cd35f8 Update DONATIONS.txt 2014-06-10 06:55:26 +02:00
bsongis d93b63d85c Fixes #1237 2014-06-09 23:06:59 +02:00
bsongis 2706a3d81c #1237 - Curves tab initialization bug (all boards except Taranis) 2014-06-09 22:52:56 +02:00
Bertrand Songis 73b0090840 Update DONATIONS.txt 2014-06-09 22:52:39 +02:00
Andre Bernet 2b3242f863 Compilation error 2014-06-09 22:41:17 +02:00
Andre Bernet 9f9a561c82 Compilation error 2014-06-09 22:29:39 +02:00
Andre Bernet ba10ec68b6 Fix flickering backlight in Plus bootloader 2014-06-09 22:24:21 +02:00
Bertrand Songis 0b5820bdd6 Merge pull request #1231 from opentx/dvogonen/comapnion_windows_voice_play_problems
Partial fix for 1212 - Only Windows
2014-06-09 21:40:49 +02:00
Bertrand Songis bfbe0046ab Update DONATIONS.txt 2014-06-09 21:34:53 +02:00
Andre Bernet 71ba0328bd LS main view display on stock (Fix #1239) 2014-06-09 20:07:38 +02:00
Andre Bernet df80aa00c2 Fix #1234 2014-06-09 19:13:02 +02:00
Romolo Manfredini 3c181fc474 Other fixes in Italian translations (to be still finished) 2014-06-09 16:57:10 +02:00
Romolo Manfredini e62a8e8ba7 further fix in Italian translations 2014-06-09 15:45:34 +02:00
Romolo Manfredini eb69444cbf further fix in Italian translations 2014-06-09 15:21:41 +02:00
Kjell Kernen f083b6f45a Partial fix for 1212 - Only Windows 2014-06-09 14:30:14 +02:00
Bertrand Songis 13de131fe4 Merge pull request #1220 from opentx/projectkk2glider/menu_order_change
Changed order of context menu for logical switches and custom functions....
2014-06-09 11:42:56 +02:00
bsongis 4c6c9fdb20 Simu Gruvin9x compilation failure 2014-06-09 11:32:34 +02:00
bsongis 9cb4d5da1f Sky9x Error + Warning removed 2014-06-09 11:14:57 +02:00
bsongis ce22ea22b4 Simu compilation errors 2014-06-09 11:05:55 +02:00
Bertrand Songis aa661ced46 Jenkins test 2014-06-09 10:43:16 +02:00
Bertrand Songis 1e56c9ba14 Jenkins test 2014-06-09 10:41:54 +02:00
Bertrand Songis e65b9d825b Jenkins test 2014-06-09 09:56:38 +02:00
Bertrand Songis 2561e53696 Update DONATIONS.txt 2014-06-09 00:00:13 +02:00
Bertrand Songis 2665c2318f Update DONATIONS.txt 2014-06-08 22:53:46 +02:00
Damjan Adamic 5a0f154876 Fixes #1215 2014-06-08 19:31:02 +02:00
Damjan Adamic 15d89d638c Hide gvars for FM>0 if tx does not support per flight mode gvars, issue #1195 2014-06-08 18:58:53 +02:00
Damjan Adamic 087c9f0202 Gvar value restored, issue #1195 2014-06-08 18:26:39 +02:00
Damjan Adamic 0ae00dddf8 Fixes #1204 2014-06-08 18:07:14 +02:00
Damjan Adamic f865bdf785 Changed order of context menu for logical switches and custom functions. Before this change the Delete option was first and it was too easy to inadvertently delete an item. 2014-06-08 17:18:50 +02:00
Damjan Adamic 04897885dd Fixes #1209 2014-06-08 17:11:14 +02:00
Damjan Adamic 2248c84b8f Added error string to output, to help resolving issue #1217 2014-06-08 16:33:34 +02:00
Bertrand Songis 5f0f5de111 Merge pull request #1211 from andyjenkinson/next
Updates for Mac - needs testing on other platforms
2014-06-08 11:05:48 +02:00
Bertrand Songis b93036c81d Update DONATIONS.txt 2014-06-08 10:58:18 +02:00
Andy Jenkinson 6bfc4f7986 Fixes #1216 2014-06-08 09:10:25 +01:00
Andy Jenkinson 34de0aa01a Revert "Radio buttons in the wizard were too close together" and do this another way via Q_FOREACH
This reverts commit 73f2e99d7d.
2014-06-08 09:07:16 +01:00
Bertrand Songis b8ca14c921 Update DONATIONS.txt 2014-06-08 08:04:23 +02:00
Bertrand Songis 5ec77c6dae Update DONATIONS.txt 2014-06-08 08:02:53 +02:00
Andy Jenkinson f482b895fb Enabled Phonon for Mac (sounds) 2014-06-08 01:26:19 +01:00
Andy Jenkinson 73f2e99d7d Radio buttons in the wizard were too close together 2014-06-08 00:22:27 +01:00
Andy Jenkinson 49b821b04d Merge remote-tracking branch 'upstream/next' into next 2014-06-07 20:43:20 +01:00
Bertrand Songis 17bfe1544f Merge pull request #1208 from andyjenkinson/next
Wizard window style was not set for Mac. Fix for issue #1206
2014-06-07 21:42:35 +02:00
Andy Jenkinson 7a7b4c047e Merge remote-tracking branch 'upstream/next' into next
Testing mouse wheel focus
2014-06-07 20:13:32 +01:00
bsongis 7912b79d7e #1151 - Another possibility which has my preference, what do you think? 2014-06-07 21:00:59 +02:00
Andrew Jenkinson 83d8834fe4 Wizard window style was not set for Mac. This fixes opentx issue #1206 2014-06-07 19:58:58 +01:00
bsongis bf9fc6dd98 The delay on switches was * 10 2014-06-07 20:27:00 +02:00
Bertrand Songis 6edc28b4ba Update DONATIONS.txt 2014-06-07 20:18:06 +02:00
Andre Bernet e0deb3b665 Hide S3 center beep checkbox for !Plus 2014-06-07 17:13:27 +02:00
Andre Bernet 8f3060f99c Pot startup check checkboxes were always hidden 2014-06-07 17:08:30 +02:00
Michele 9e7a52b952 Merge pull request #1202 from opentx/MicheleVilla/IT_Translation_Firmware
Update it.h.txt
2014-06-07 12:36:09 +02:00
Michele 3b8e64fe64 Update it.h.txt
Translation of new option
2014-06-07 12:35:01 +02:00
bsongis 479c070896 Fixes #1199 2014-06-07 12:33:58 +02:00
Andre Bernet 9f75be0dc4 IT translation fix (Fixes #1201) 2014-06-07 12:01:42 +02:00
bsongis d090175b2a Compilation failure on sky9x 2014-06-07 11:46:34 +02:00
bsongis 93d6788605 Fixes #1200 - Needs tests! 2014-06-07 11:07:00 +02:00
Bertrand Songis 5de9f6c4a4 Update DONATIONS.txt 2014-06-07 11:03:18 +02:00
Bertrand Songis 9785720bf6 Update DONATIONS.txt 2014-06-07 07:40:27 +02:00
bsongis 626f4c5784 Issue #1151 - I just added a workaround on the CustomFunctions tab only.
If feedback is good, it will be easy to call disableMouseScrolling() on
other tabs.
2014-06-06 23:25:32 +02:00
Bertrand Songis c1e15d0212 Update DONATIONS.txt 2014-06-06 22:40:45 +02:00
bsongis a19fff0998 Buffer overflow in Companion Wizard 2014-06-06 22:36:00 +02:00
bsongis 9a502461df Fixes #1198 - Needs to be tested before 2.0.2 2014-06-06 22:36:00 +02:00
Bertrand Songis bc484879a5 Update DONATIONS.txt 2014-06-06 20:17:53 +02:00
Bertrand Songis b070f56838 Update DONATIONS.txt 2014-06-06 16:54:15 +02:00
Bertrand Songis dd874427b8 Companion on max fix 2014-06-05 21:35:33 +02:00
bsongis 902a69323a Issue #1128 - Automatic non regression test added 2014-06-06 15:22:13 +02:00
bsongis a6c39e83b1 #1188 - HDG not converted when units are imperial (it was done in audio,
not in
lcd)
2014-06-06 15:07:22 +02:00
bsongis 6511ae173d Fixes #1191 2014-06-06 11:54:13 +02:00
Bertrand Songis 3d4d6ba313 Update DONATIONS.txt 2014-06-06 11:32:55 +02:00
Bertrand Songis ce1ff9ea14 Update DONATIONS.txt 2014-06-06 07:56:42 +02:00
96 changed files with 3913 additions and 3467 deletions
+45 -1
View File
@@ -278,7 +278,7 @@ Josep Clodas Sola
Thierry Martin
Peter Mauro
Mitchell Brenner
Ulach Green
Yak
Lluis Bullich Rañe
Steffen Rohr
Eric Jacquin
@@ -423,3 +423,47 @@ Kenneth Frehafer
Peter McHenry
Matthias Hase
Markus Wolf
Andrew Fazio
Stefan Künst
Stephen Adams
Arold Reinders
Tauno Rautakorpi
Frank Houvenaghel
Aerial Tech Hobbies - www.aerialtechhobbies.com
George Neusse
Andreja Rusjakovski
Axel Stöckle
Mike Perkins
Erwin Störrle
Rodger Hopper
Fernando Cesar
Jonathan Gillis
DK-System
Lexington S Morley
Bernd Koehler
Davis RC
Pete Johnson
Patricia Martin
Florian Tschacher
Brian Spearing
Craig Hall
Joseph Case
Harald Klein
Robert Crockford
Chris Boultinghouse
Kitsew
Georgios Papadopoulos
Fourmost Products
Dennis Miller
Dave Matison
Maximilian Radig
Juan Rodriguez
Robert Sessler
John Murray
Martin Sniedze
David Poole
Manfred Delakowitz
Martijn Kruissen
Jörgen Norman
Nathan Kinney
John Godden
+7
View File
@@ -1,3 +1,10 @@
<h2>Version 2.0.2</h2>
<ul>
<li>Mouse scroll wheel behaves differently</li>
<li>Play Sounds should now work on all platforms</li>
<li>A lot of small bug fixes</li>
</ul>
<h2>Version 2.0.1</h2>
<ul>
<li>Fix on recursive GVars</li>
+8 -12
View File
@@ -2,7 +2,7 @@ PROJECT( companion )
SET( C9X_VERSION_MAJOR "2" )
SET( C9X_VERSION_MINOR "0" )
SET( C9X_VERSION_REVISION "1" )
SET( C9X_VERSION_REVISION "2" )
SET( C9X_VERSION ${C9X_VERSION_MAJOR}.${C9X_VERSION_MINOR}.${C9X_VERSION_REVISION} )
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )
@@ -42,18 +42,14 @@ SET( QT_USE_QTNETWORK True )
SET( QT_USE_QTXML True )
INCLUDE( ${QT_USE_FILE} )
IF ( APPLE )
MESSAGE( STATUS "Phonon still not supported on APPLE " )
MESSAGE( STATUS "Looking for PHONON " )
FIND_PACKAGE(Phonon)
IF ( PHONON_FOUND )
INCLUDE_DIRECTORIES( ${PHONO_INCLUDE_DIR} )
MESSAGE("PHONON Include Path: " ${PHONON_INCLUDE_DIR} )
ADD_DEFINITIONS( -DPHONON )
ELSE()
MESSAGE( STATUS "Looking for PHONON " )
FIND_PACKAGE(Phonon)
IF ( PHONON_FOUND )
INCLUDE_DIRECTORIES( ${PHONO_INCLUDE_DIR} )
MESSAGE("PHONON Include Path: " ${PHONON_INCLUDE_DIR} )
ADD_DEFINITIONS( -DPHONON )
ELSE()
MESSAGE( "PHONON not found!" )
ENDIF()
MESSAGE( "PHONON not found!" )
ENDIF()
ADD_CUSTOM_COMMAND(
+6 -7
View File
@@ -159,11 +159,11 @@ void avrOutputDialog::doCopy()
dest.close();
}
else {
QMessageBox::warning(this, tr("Error"),tr("Cannot write destination"));
QMessageBox::warning(this, tr("Error"),tr("Cannot write destination") + ": " + dest.errorString());
}
}
else {
QMessageBox::warning(this, tr("Error"),tr("Cannot open source file"));
QMessageBox::warning(this, tr("Error"),tr("Cannot open source file") + ": " + source.errorString());
}
source.close();
@@ -438,7 +438,7 @@ void avrOutputDialog::doFinished(int code=0)
if (hasErrors || code) {
if (!cmdLine.isEmpty()) {
if (getProgrammer()!="AVRDUDE") {
QMessageBox::critical(this, "Companion", getProgrammer() + " " + tr("did not finish correctly"));
QMessageBox::critical(this, "Companion", getProgrammer() + " " + tr("did not finish correctly"));
}
else {
int res = QMessageBox::question(this, "Companion",getProgrammer() + " " + tr("did not finish correctly!\nDo you want some help ?"),QMessageBox::Yes | QMessageBox::No);
@@ -446,8 +446,9 @@ void avrOutputDialog::doFinished(int code=0)
errorWizard();
}
}
} else {
QMessageBox::critical(this, "Companion", tr("Copy did not finish correctly"));
}
else {
QMessageBox::critical(this, "Companion", tr("Copy did not finish correctly"));
}
// reject();
}
@@ -467,8 +468,6 @@ void avrOutputDialog::doFinished(int code=0)
default: //AVR_DIALOG_KEEP_OPEN
break;
}
}
void avrOutputDialog::doProcessStarted()
+3 -3
View File
@@ -20,7 +20,7 @@ class avrOutputDialog : public QDialog
{
Q_OBJECT
public:
public:
explicit avrOutputDialog(QWidget *parent, QString prog, QStringList arg, QString wTitle, int closeBehaviour=AVR_DIALOG_CLOSE_IF_SUCCESSFUL, bool displayDetails=false);
~avrOutputDialog();
@@ -29,7 +29,7 @@ public:
void waitForFinish();
void addReadFuses();
protected slots:
protected slots:
void doAddTextStdOut();
void doAddTextStdErr();
void doProcessStarted();
@@ -41,7 +41,7 @@ protected slots:
void killTimerElapsed();
void errorWizard();
private:
private:
QString getProgrammer();
Ui::avrOutputDialog *ui;
+1 -1
View File
@@ -193,7 +193,7 @@ void burnDialog::checkFw(QString fileName)
ui->FramFWInfo->show();
ui->DateField->setText(flash.getDate() + " " + flash.getTime());
ui->versionField->setText(flash.getVersion());
ui->ModField->setText(flash.getEEprom());
ui->ModField->setText(flash.getEEpromId());
ui->SplashFrame->hide();
if (flash.hasSplash()) {
+19 -6
View File
@@ -125,6 +125,8 @@ RawSourceRange RawSource::getRange(bool singleprec)
break;
case TELEMETRY_SOURCE_A1:
case TELEMETRY_SOURCE_A2:
case TELEMETRY_SOURCE_A3:
case TELEMETRY_SOURCE_A4:
if (model) {
const FrSkyChannelData & channel = model->frsky.channels[index-TELEMETRY_SOURCE_A1];
float ratio = channel.getRatio();
@@ -263,7 +265,7 @@ QString RawSource::toString()
static const QString telemetry[] = {
QObject::tr("Batt"), QObject::tr("Time"), QObject::tr("Timer1"), QObject::tr("Timer2"),
QObject::tr("SWR"), QObject::tr("RSSI Tx"), QObject::tr("RSSI Rx"), QObject::tr("Rx Batt"),
QObject::tr("SWR"), QObject::tr("RSSI Tx"), QObject::tr("RSSI Rx"),
QObject::tr("A1"), QObject::tr("A2"), QObject::tr("A3"), QObject::tr("A4"),
QObject::tr("Alt"), QObject::tr("Rpm"), QObject::tr("Fuel"), QObject::tr("T1"), QObject::tr("T2"),
QObject::tr("Speed"), QObject::tr("Dist"), QObject::tr("GPS Alt"),
@@ -852,11 +854,16 @@ GeneralSettings::GeneralSettings()
calibSpanPos[i] = 0x180;
}
if (IS_TARANIS(GetEepromInterface()->getBoard())) {
BoardEnum board = GetEepromInterface()->getBoard();
if (IS_TARANIS(board)) {
potsType[0] = 1;
potsType[1] = 1;
}
if (IS_ARM(board)) {
speakerVolume = 12;
}
templateSetup = g.profile[g.id()].channelOrder();
stickMode = g.profile[g.id()].defaultMode();
@@ -991,7 +998,6 @@ void FrSkyData::clear()
memset(this, 0, sizeof(FrSkyData));
rssiAlarms[0].clear(2, 45);
rssiAlarms[1].clear(3, 42);
rxBattAlarms[1] = round(43.0*255/132);
varioSource = 2/*VARIO*/;
blades = 2;
}
@@ -1073,11 +1079,11 @@ void ModelData::clear()
moduleData[0].protocol=PPM;
moduleData[1].protocol=OFF;
}
for (int i=0; i<C9X_MAX_FLIGHT_MODES; i++)
for (int i=0; i<C9X_MAX_FLIGHT_MODES; i++) {
phaseData[i].clear();
}
clearInputs();
clearMixes();
for (int i=0; i<C9X_NUM_CHNOUT; i++)
limitData[i].clear();
for (int i=0; i<NUM_STICKS; i++)
@@ -1088,7 +1094,6 @@ void ModelData::clear()
curves[i].clear(5);
for (int i=0; i<2; i++)
timers[i].clear();
swashRingData.clear();
frsky.clear();
}
@@ -1234,6 +1239,14 @@ ModelData ModelData::removeGlobalVars()
return result;
}
int ModelData::getChannelsMax()
{
if (extendedLimits)
return IS_TARANIS(GetCurrentFirmware()->getBoard()) ? 150 : 125;
else
return 100;
}
QList<EEPROMInterface *> eepromInterfaces;
void RegisterEepromInterfaces()
{
+7 -20
View File
@@ -229,7 +229,6 @@ enum TelemetrySource {
TELEMETRY_SOURCE_SWR,
TELEMETRY_SOURCE_RSSI_TX,
TELEMETRY_SOURCE_RSSI_RX,
TELEMETRY_SOURCE_RX_BATT,
TELEMETRY_SOURCE_A1,
TELEMETRY_SOURCE_A2,
TELEMETRY_SOURCE_A3,
@@ -496,7 +495,6 @@ class GeneralSettings {
bool disableBG;
unsigned int splashMode;
int splashDuration;
uint8_t filterInput; // TODO enum
unsigned int backlightDelay;
bool blightinv;
bool stickScroll;
@@ -517,6 +515,7 @@ class GeneralSettings {
unsigned int gpsFormat;
int speakerVolume;
unsigned int backlightBright;
int switchesDelay;
int currentCalib;
int temperatureCalib;
int temperatureWarn;
@@ -635,6 +634,8 @@ enum MltpxValue {
MLTPX_REP=2
};
#define MIXDATA_NAME_LEN 10
class MixData {
public:
MixData() { clear(); }
@@ -653,7 +654,7 @@ class MixData {
unsigned int mixWarn; // mixer warning
unsigned int phases; // -5=!FP4, 0=normal, 5=FP4
int sOffset;
char name[10+1];
char name[MIXDATA_NAME_LEN+1];
void clear() { memset(this, 0, sizeof(MixData)); }
};
@@ -796,15 +797,6 @@ class FrSkyAlarmData {
void clear() { memset(this, 0, sizeof(FrSkyAlarmData)); }
};
class FrSkyErAlarmData {
public:
FrSkyErAlarmData() { clear(); }
uint8_t frskyAlarmType ;
uint8_t frskyAlarmLimit ;
uint8_t frskyAlarmSound ;
void clear() { memset(this, 0, sizeof(FrSkyErAlarmData)); }
};
class FrSkyRSSIAlarm {
public:
FrSkyRSSIAlarm() { clear(0, 50); }
@@ -868,7 +860,6 @@ enum TelemetryVarioSources {
};
enum TelemetryVoltsSources {
TELEMETRY_VOLTS_SOURCE_RXBATT,
TELEMETRY_VOLTS_SOURCE_A1,
TELEMETRY_VOLTS_SOURCE_A2,
TELEMETRY_VOLTS_SOURCE_A3,
@@ -907,7 +898,6 @@ class FrSkyData {
bool mAhPersistent;
unsigned int storedMah;
int fasOffset;
unsigned int rxBattAlarms[2];
void clear();
};
@@ -990,7 +980,6 @@ class ModelData {
bool used;
char name[12+1];
uint8_t modelVoice;
TimerData timers[2];
bool thrTrim; // Enable Throttle Trim
bool thrExpo; // Enable Throttle Expo
@@ -1013,8 +1002,7 @@ class ModelData {
LogicalSwitchData customSw[C9X_NUM_CSW];
FuncSwData funcSw[C9X_MAX_CUSTOM_FUNCTIONS];
SwashRingData swashRingData;
unsigned int thrTraceSrc;
int8_t traineron; // 0 disable trainer, 1 allow trainer
unsigned int thrTraceSrc;
unsigned int modelId;
unsigned int switchWarningStates;
unsigned int nSwToWarn;
@@ -1024,9 +1012,6 @@ class ModelData {
// TODO structure
char gvars_names[C9X_MAX_GVARS][6+1];
bool gvars_popups[C9X_MAX_GVARS];
uint8_t gvsource[5];
uint8_t bt_telemetry;
uint8_t numVoice;
MavlinkData mavlink;
unsigned int telemetryProtocol;
FrSkyData frsky;
@@ -1056,6 +1041,8 @@ class ModelData {
void clearMixes();
void clearInputs();
int getChannelsMax();
protected:
void removeGlobalVar(int & var);
};
@@ -356,7 +356,6 @@ t_Er9xModelData::operator ModelData ()
{
ModelData c9x;
c9x.used = true;
c9x.modelVoice = modelVoice;
getEEPROMString(c9x.name, name, sizeof(name));
c9x.timers[0].mode = getEr9xTimerMode(tmrMode);
c9x.timers[0].dir = tmrDir;
@@ -375,8 +374,6 @@ t_Er9xModelData::operator ModelData ()
c9x.moduleData[0].protocol = PPM;
break;
}
c9x.traineron= traineron;
// c9x.t2throttle = t2throttle;
c9x.moduleData[0].ppmFrameLength=ppmFrameLength;
c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH;
c9x.thrTrim = thrTrim;
@@ -125,7 +125,6 @@ Ersky9xGeneral::operator GeneralSettings ()
result.splashMode = disableSplashScreen;
result.disablePotScroll=(disablePotScroll==1);
result.disableBG=(disableBG==1);
result.filterInput = filterInput;
result.templateSetup = templateSetup;
result.PPM_Multiplier = PPM_Multiplier;
getEEPROMString(result.ownerName, ownerName, sizeof(ownerName));
@@ -507,8 +506,6 @@ t_Ersky9xModelData_v10::operator ModelData ()
c9x.moduleData[0].protocol = PPM;
break;
}
c9x.traineron= traineron;
// c9x.t2throttle = t2throttle;
c9x.moduleData[0].ppmFrameLength=ppmFrameLength;
c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH;
c9x.thrTrim = thrTrim;
@@ -628,8 +625,6 @@ t_Ersky9xModelData_v11::operator ModelData ()
c9x.moduleData[0].protocol = PPM;
break;
}
c9x.traineron= traineron;
// c9x.t2throttle = t2throttle;
c9x.moduleData[0].ppmFrameLength=ppmFrameLength;
c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH;
c9x.thrTrim = thrTrim;
@@ -732,7 +727,7 @@ t_Ersky9xModelData_v11::operator ModelData ()
// }
for (int i=0; i<5;i++) {
c9x.phaseData[0].gvars[i]=gvars[i].gvar;
c9x.gvsource[i]=gvars[i].gvsource;
// c9x.gvsource[i]=gvars[i].gvsource;
}
return c9x;
}
@@ -108,7 +108,6 @@ Gruvin9xGeneral_v103::operator GeneralSettings ()
result.flashBeep = flashBeep;
result.splashMode = disableSplashScreen;
result.enableTelemetryAlarm = enableTelemetryAlarm;
result.filterInput = filterInput;
result.templateSetup = templateSetup;
result.PPM_Multiplier = PPM_Multiplier;
// TODO frskyRssiAlarms[2];
@@ -153,7 +152,6 @@ Gruvin9xGeneral_v104::operator GeneralSettings ()
result.flashBeep = flashBeep;
result.splashMode = disableSplashScreen;
result.enableTelemetryAlarm = enableTelemetryAlarm;
result.filterInput = filterInput;
result.templateSetup = templateSetup;
result.PPM_Multiplier = PPM_Multiplier;
// TODO frskyRssiAlarms[2];
+31 -18
View File
@@ -260,15 +260,17 @@ class SourcesConversionTable: public ConversionTable {
for (int i=0; i<TELEMETRY_SOURCE_ACC; i++) {
if (version < 216) {
if (i==TELEMETRY_SOURCE_TX_TIME || i==TELEMETRY_SOURCE_SWR || i==TELEMETRY_SOURCE_RX_BATT || i==TELEMETRY_SOURCE_A3 || i==TELEMETRY_SOURCE_A4 || i==TELEMETRY_SOURCE_ASPD || i==TELEMETRY_SOURCE_DTE || i==TELEMETRY_SOURCE_CELL_MIN || i==TELEMETRY_SOURCE_CELLS_MIN || i==TELEMETRY_SOURCE_VFAS_MIN)
if (i==TELEMETRY_SOURCE_TX_TIME || i==TELEMETRY_SOURCE_SWR || i==TELEMETRY_SOURCE_A3 || i==TELEMETRY_SOURCE_A4 || i==TELEMETRY_SOURCE_ASPD || i==TELEMETRY_SOURCE_DTE || i==TELEMETRY_SOURCE_CELL_MIN || i==TELEMETRY_SOURCE_CELLS_MIN || i==TELEMETRY_SOURCE_VFAS_MIN)
continue;
}
if (!IS_ARM(board)) {
if (i==TELEMETRY_SOURCE_TX_TIME || i==TELEMETRY_SOURCE_SWR|| i==TELEMETRY_SOURCE_RX_BATT || i==TELEMETRY_SOURCE_A3 || i==TELEMETRY_SOURCE_A4 || i==TELEMETRY_SOURCE_A3_MIN || i==TELEMETRY_SOURCE_A4_MIN)
if (i==TELEMETRY_SOURCE_TX_TIME || i==TELEMETRY_SOURCE_SWR || i==TELEMETRY_SOURCE_A3 || i==TELEMETRY_SOURCE_A4 || i==TELEMETRY_SOURCE_A3_MIN || i==TELEMETRY_SOURCE_A4_MIN)
continue;
}
addConversion(RawSource(SOURCE_TYPE_TELEMETRY, i), val++);
if (version >= 216 && IS_ARM(board)) {
if (i==TELEMETRY_SOURCE_RSSI_RX)
val += 1;
if (i==TELEMETRY_SOURCE_TX_TIME)
val += 5;
if (i==TELEMETRY_SOURCE_DTE)
@@ -414,7 +416,7 @@ class TelemetrySourcesConversionTable: public ConversionTable {
addConversion(1+TELEMETRY_SOURCE_RSSI_TX, val++);
addConversion(1+TELEMETRY_SOURCE_RSSI_RX, val++);
if (IS_ARM(board) && version >= 216)
addConversion(1+TELEMETRY_SOURCE_RX_BATT, val++);
addConversion(1+TELEMETRY_SOURCE_RESERVE, val++);
addConversion(1+TELEMETRY_SOURCE_A1, val++);
addConversion(1+TELEMETRY_SOURCE_A2, val++);
if (IS_ARM(board) && version >= 216) {
@@ -1158,6 +1160,9 @@ class InputField: public TransformedField {
}
}
}
else if (expo.mode) {
expo.srcRaw = RawSource(SOURCE_TYPE_STICK, expo.chn);
}
expo.weight = smallGvarToC9x(_weight);
@@ -1247,13 +1252,20 @@ class CurvesField: public TransformedField {
for (int i=0; i<maxCurves; i++) {
CurveData *curve = &curves[i];
int size = (curve->type == CurveData::CURVE_TYPE_CUSTOM ? curve->count * 2 - 2 : curve->count);
if (offset+size > maxPoints) {
EEPROMWarnings += ::QObject::tr("OpenTX only accepts %1 points in all curves").arg(maxPoints) + "\n";
break;
if (IS_TARANIS(board) && version >= 216) {
offset += (curve->type == CurveData::CURVE_TYPE_CUSTOM ? curve->count * 2 - 2 : curve->count);
if (offset > maxPoints) {
EEPROMWarnings += ::QObject::tr("OpenTX only accepts %1 points in all curves").arg(maxPoints) + "\n";
break;
}
}
if (!IS_TARANIS(board) || version < 216) {
_curves[i] = offset - (5*i);
else {
offset += (curve->type == CurveData::CURVE_TYPE_CUSTOM ? curve->count * 2 - 2 : curve->count) - 5;
if (offset > maxPoints - 5 * maxCurves) {
EEPROMWarnings += ::QObject::tr("OpenTx only accepts %1 points in all curves").arg(maxPoints) + "\n";
break;
}
_curves[i] = offset;
}
for (int j=0; j<curve->count; j++) {
*cur++ = curve->points[j].y;
@@ -1263,7 +1275,6 @@ class CurvesField: public TransformedField {
*cur++ = curve->points[j].x;
}
}
offset += size;
}
}
@@ -1783,7 +1794,7 @@ class ArmCustomFunctionField: public TransformedField {
{
_mode = 0;
if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue)
if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue || fn.func == FuncPlayHaptic)
_active = (version >= 216 ? fn.repeatParam : (fn.repeatParam/5));
else
_active = (fn.enabled ? 1 : 0);
@@ -1855,7 +1866,7 @@ class ArmCustomFunctionField: public TransformedField {
virtual void afterImport()
{
if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue)
if (fn.func == FuncPlaySound || fn.func == FuncPlayPrompt || fn.func == FuncPlayValue || fn.func == FuncPlayHaptic)
fn.repeatParam = (version >= 216 ? _active : (_active*5));
else
fn.enabled = (_active & 0x01);
@@ -2202,8 +2213,6 @@ class TelemetryVoltsSourceConversionTable: public ConversionTable
TelemetryVoltsSourceConversionTable(BoardEnum board, unsigned int version)
{
int val = 0;
if (IS_ARM(board) && version >= 216)
addConversion(TELEMETRY_VOLTS_SOURCE_RXBATT, val++);
addConversion(TELEMETRY_VOLTS_SOURCE_A1, val++);
addConversion(TELEMETRY_VOLTS_SOURCE_A2, val++);
if (IS_ARM(board) && version >= 216) {
@@ -2569,8 +2578,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
}
if (IS_ARM(board) && version >= 216) {
internalField.Append(new UnsignedField<8>(modelData.frsky.rxBattAlarms[0]));
internalField.Append(new UnsignedField<8>(modelData.frsky.rxBattAlarms[1]));
internalField.Append(new SpareBitsField<16>());
}
}
@@ -2703,7 +2711,11 @@ OpenTxGeneralData::OpenTxGeneralData(GeneralSettings & generalData, BoardEnum bo
internalField.Append(new SpareBitsField<3>());
internalField.Append(new SignedField<2>((int &)generalData.hapticMode));
internalField.Append(new SpareBitsField<8>());
if (IS_ARM(board))
internalField.Append(new SignedField<8>(generalData.switchesDelay));
else
internalField.Append(new SpareBitsField<8>());
internalField.Append(new UnsignedField<8>(generalData.backlightDelay));
internalField.Append(new UnsignedField<8>(generalData.templateSetup));
internalField.Append(new SignedField<8>(generalData.PPM_Multiplier));
@@ -2806,7 +2818,8 @@ void OpenTxGeneralData::beforeExport()
void OpenTxGeneralData::afterImport()
{
for (int i=0; i<4; i++) {
if (i<2 && generalData.potsType[i] == 0)
generalData.potsType[i] = potsType[i];
if (i<2 && potsType[i] == 0)
generalData.potsType[i] = 1;
}
}
@@ -504,7 +504,7 @@ int OpenTxFirmware::getCapability(const Capability capability)
return 1;
case GvarsAreNamed:
case GvarsFlightModes:
return ((IS_ARM(board)||(board==BOARD_GRUVIN9X)) ? 1 : 0);
return ((IS_ARM(board) || board==BOARD_GRUVIN9X) ? 1 : 0);
case Mixes:
return (IS_ARM(board) ? O9X_ARM_MAX_MIXERS : O9X_MAX_MIXERS);
case OffsetWeight:
@@ -659,6 +659,7 @@ int OpenTxFirmware::getCapability(const Capability capability)
case LuaInputs:
case LimitsPer1000:
case EnhancedCurves:
return IS_TARANIS(board);
case HasFasOffset:
return (IS_STOCK(board) ? false : true);
case HasMahPersistent:
@@ -85,7 +85,6 @@ Th9xGeneral::operator GeneralSettings ()
}
result.stickMode = stickMode;
result.inactivityTimer = inactivityMin;
result.filterInput = adcFilt;
return result;
}
+11 -1
View File
@@ -69,7 +69,17 @@ FlashInterface::FlashInterface(QString fileName):
version = seekLabel(VERS_MARK);
date = seekLabel(DATE_MARK);
time = seekLabel(TIME_MARK);
eeprom = seekLabel(EEPR_MARK);
eepromId = seekLabel(EEPR_MARK);
if (eepromId.contains('-')) {
QStringList list = eepromId.split('-');
eepromVersion = list[0].toInt();
eepromVariant = list[1].toInt();
}
else {
eepromVersion = eepromId.toInt();
}
versionId = version2index(version);
SeekSplash();
isValidFlag = true;
+6 -2
View File
@@ -49,7 +49,9 @@ class FlashInterface
int getSize() { return flash_size; }
inline QString getVersion() { return version; }
unsigned int getVersionId() { return versionId; }
inline QString getEEprom() { return eeprom; }
inline int getEEpromVersion() { return eepromVersion; }
inline int getEEpromVariant() { return eepromVariant; }
inline QString getEEpromId() { return eepromId; }
QImage getSplash();
bool setSplash(const QImage & newsplash);
bool hasSplash();
@@ -72,7 +74,9 @@ class FlashInterface
QString time;
QString version;
int versionId;
QString eeprom;
QString eepromId;
int eepromVersion;
int eepromVariant;
QByteArray splash;
uint splash_offset;
uint splash_size;
+72 -8
View File
@@ -51,7 +51,8 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
ui->chkSG->setValue(switchstate & 0x3);
switchstate >>= 2;
ui->chkSH->setValue(switchstate & 0x3);
} else {
}
else {
for (int i=0; pmsl[i]; i++) {
pmsl[i]->hide();
}
@@ -87,7 +88,8 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
if (!GetCurrentFirmware()->getCapability(MultiLangVoice)) {
ui->VoiceLang_label->hide();
ui->voiceLang_CB->hide();
} else {
}
else {
voiceLangEditLock=true;
populateVoiceLangCB(ui->voiceLang_CB, g_eeGeneral.ttsLanguage);
voiceLangEditLock=false;
@@ -96,7 +98,8 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
if (!mavlink) {
ui->mavbaud_CB->hide();
ui->mavbaud_label->hide();
} else {
}
else {
mavbaudEditLock=true;
ui->mavbaud_CB->setCurrentIndex(g_eeGeneral.mavbaud);
populateVoiceLangCB(ui->voiceLang_CB, g_eeGeneral.ttsLanguage);
@@ -169,7 +172,8 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
ui->volume_SB->hide();
ui->volume_SB->setDisabled(true);
ui->label_volume->hide();
} else {
}
else {
ui->volume_SB->setMaximum(GetCurrentFirmware()->getCapability(MaxVolume));
}
if (!GetCurrentFirmware()->getCapability(HasBrightness)) {
@@ -305,6 +309,16 @@ GeneralEdit::GeneralEdit(RadioData &radioData, QWidget *parent) :
ui->backlightColor2_label->hide();
}
if (IS_ARM(eepromInterface->getBoard())) {
ui->switchesDelay->setValue(10*(g_eeGeneral.switchesDelay+15));
}
else {
ui->switchesDelay->hide();
ui->switchesDelayLabel->hide();
}
disableMouseScrolling();
ga.sendPageView(getBoardName(GetCurrentFirmware()->getBoard()) + " GeneralEdit");
}
@@ -516,6 +530,12 @@ void GeneralEdit::on_backlightautoSB_editingFinished()
}
}
void GeneralEdit::on_switchesDelay_valueChanged()
{
g_eeGeneral.switchesDelay = (ui->switchesDelay->value() / 10) - 15;
updateSettings();
}
void GeneralEdit::on_backlightColor_SL_valueChanged()
{
g_eeGeneral.backlightColor = ui->backlightColor_SL->value();
@@ -1061,7 +1081,8 @@ void GeneralEdit::on_calstore_PB_clicked()
if (name.isEmpty()) {
ui->calstore_PB->setDisabled(true);
return;
} else {
}
else {
QString calib=g.profile[profile_id].stickPotCalib();
if (!(calib.isEmpty())) {
int ret = QMessageBox::question(this, "Companion",
@@ -1100,7 +1121,50 @@ void GeneralEdit::on_calstore_PB_clicked()
}
}
void GeneralEdit::shrink() {
resize(100,100);
resize(0,0);
void GeneralEdit::shrink()
{
resize(100, 100);
resize(0, 0);
}
bool GeneralEdit::eventFilter(QObject *object, QEvent * event)
{
QWidget * widget = qobject_cast<QWidget*>(object);
if (widget) {
if (event->type() == QEvent::Wheel) {
if (widget->focusPolicy() == Qt::WheelFocus) {
event->accept();
return false;
}
else {
event->ignore();
return true;
}
}
else if (event->type() == QEvent::FocusIn) {
widget->setFocusPolicy(Qt::WheelFocus);
}
else if (event->type() == QEvent::FocusOut) {
widget->setFocusPolicy(Qt::StrongFocus);
}
}
return QWidget::eventFilter(object, event);
}
void GeneralEdit::disableMouseScrolling()
{
Q_FOREACH(QComboBox * cb, findChildren<QComboBox*>()) {
cb->installEventFilter(this);
cb->setFocusPolicy(Qt::StrongFocus);
}
Q_FOREACH(QAbstractSpinBox * sb, findChildren<QAbstractSpinBox*>()) {
sb->installEventFilter(this);
sb->setFocusPolicy(Qt::StrongFocus);
}
Q_FOREACH(QSlider * slider, findChildren<QSlider*>()) {
slider->installEventFilter(this);
slider->setFocusPolicy(Qt::StrongFocus);
}
}
+9 -4
View File
@@ -12,12 +12,12 @@ class GeneralEdit : public QDialog
{
Q_OBJECT
public:
public:
explicit GeneralEdit(RadioData &radioData, QWidget *parent = 0);
~GeneralEdit();
void updateSettings();
private:
private:
Ui::GeneralEdit *ui;
RadioData &radioData;
GeneralSettings g_eeGeneral;
@@ -28,11 +28,15 @@ private:
void getGeneralSwitchDefPos(int i, bool val);
void setSwitchDefPos();
void updateVarioPitchRange();
void disableMouseScrolling();
protected:
virtual bool eventFilter(QObject *obj, QEvent *event);
signals:
signals:
void modelValuesChanged();
private slots:
private slots:
void on_faimode_CB_stateChanged(int );
void on_speakerPitchSB_editingFinished();
void on_timezoneSB_editingFinished();
@@ -132,6 +136,7 @@ private slots:
void setValues();
void shrink();
void stickReverseEdited();
void on_switchesDelay_valueChanged();
};
#endif // GENERALEDIT_H
+46
View File
@@ -1968,6 +1968,52 @@ Mode 4:
</property>
</widget>
</item>
<item row="34" column="0">
<widget class="QLabel" name="switchesDelayLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Play Delay (switch mid position)</string>
</property>
</widget>
</item>
<item row="34" column="1">
<widget class="QSpinBox" name="switchesDelay">
<property name="toolTip">
<string/>
</property>
<property name="statusTip">
<string/>
</property>
<property name="whatsThis">
<string>&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; font-size:8pt;&quot;&gt;LCD Screen Contrast&lt;/span&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;&lt;span style=&quot; font-size:8pt;&quot;&gt;Values can be 20-45&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="suffix">
<string> ms</string>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>300</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tabTrainer">
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 B

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 B

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 B

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 251 B

After

Width:  |  Height:  |  Size: 2.4 KiB

+20 -18
View File
@@ -106,7 +106,7 @@ MainWindow::MainWindow():
restoreState(g.mainWinState());
restoreGeometry(g.mainWinGeo());
setUnifiedTitleAndToolBarOnMac(true);
// setUnifiedTitleAndToolBarOnMac(true);
this->setWindowIcon(QIcon(":/icon.png"));
this->setIconSize(QSize(32, 32));
QNetworkProxyFactory::setUseSystemConfiguration(true);
@@ -152,7 +152,8 @@ MainWindow::MainWindow():
if (!(printing && (model >=0 && model<GetEepromInterface()->getMaxModels()) && !printfilename.isEmpty() )) {
statusBar()->showMessage(tr("File loaded"), 2000);
child->show();
} else {
}
else {
child->show();
child->print(model,printfilename);
child->close();
@@ -990,7 +991,6 @@ bool MainWindow::readFirmwareFromRadio(const QString filename)
ad->setWindowIcon(CompanionIcon("read_flash.png"));
ad->exec();
delete ad;
sleep(1);
result = true;
}
}
@@ -1025,7 +1025,6 @@ bool MainWindow::writeFirmwareToRadio(const QString filename)
ad->setWindowIcon(CompanionIcon("write_flash.png"));
ad->exec();
delete ad;
sleep(1);
result = true;
}
}
@@ -1053,6 +1052,10 @@ bool MainWindow::readEepromFromRadio(const QString filename, const QString messa
if (IS_ARM(GetCurrentFirmware()->getBoard())) {
QString path = FindMassstoragePath("EEPROM.BIN");
if (path.isEmpty()) {
// On previous OpenTX we called the EEPROM file "TARANIS.BIN" :(
path = FindMassstoragePath("TARANIS.BIN");
}
if (path.isEmpty()) {
// Mike's bootloader calls the EEPROM file "ERSKY9X.BIN" :(
path = FindMassstoragePath("ERSKY9X.BIN");
@@ -1064,7 +1067,6 @@ bool MainWindow::readEepromFromRadio(const QString filename, const QString messa
ad->setWindowIcon(CompanionIcon("read_eeprom.png"));
ad->exec();
delete ad;
sleep(1);
result = true;
}
}
@@ -1075,7 +1077,6 @@ bool MainWindow::readEepromFromRadio(const QString filename, const QString messa
ad->setWindowIcon(CompanionIcon("read_eeprom.png"));
ad->exec();
delete ad;
sleep(1);
result = true;
}
@@ -1098,6 +1099,10 @@ bool MainWindow::writeEepromToRadio(const QString filename, const QString messag
if (IS_ARM(GetCurrentFirmware()->getBoard())) {
QString path = FindMassstoragePath("EEPROM.BIN");
if (path.isEmpty()) {
// On previous OpenTX we called the EEPROM file "TARANIS.BIN" :(
path = FindMassstoragePath("TARANIS.BIN");
}
if (path.isEmpty()) {
// Mike's bootloader calls the EEPROM file "ERSKY9X.BIN" :(
path = FindMassstoragePath("ERSKY9X.BIN");
@@ -1105,22 +1110,20 @@ bool MainWindow::writeEepromToRadio(const QString filename, const QString messag
if (!path.isEmpty()) {
QStringList str;
str << filename << path;
avrOutputDialog *ad = new avrOutputDialog(this, "", str, message);
ad->setWindowIcon(CompanionIcon("read_eeprom.png"));
avrOutputDialog *ad = new avrOutputDialog(this, "", str, message, AVR_DIALOG_SHOW_DONE);
ad->setWindowIcon(CompanionIcon("write_eeprom.png"));
ad->exec();
delete ad;
sleep(1);
result = true;
}
}
if (result == false && !IS_TARANIS(GetCurrentFirmware()->getBoard())) {
QStringList str = GetSendEEpromCommand(filename);
avrOutputDialog *ad = new avrOutputDialog(this, GetAvrdudeLocation(), str, "Write Backup To Radio", AVR_DIALOG_SHOW_DONE);
avrOutputDialog *ad = new avrOutputDialog(this, GetAvrdudeLocation(), str, "Write EEPROM To Radio", AVR_DIALOG_SHOW_DONE);
ad->setWindowIcon(CompanionIcon("write_eeprom.png"));
ad->exec();
delete ad;
sleep(1);
result = true;
}
@@ -1262,11 +1265,8 @@ bool MainWindow::convertEEPROM(QString backupFile, QString restoreFile, QString
if (!flash.isValid())
return false;
unsigned int version = 0;
unsigned int variant = 0;
QString fwEEprom = flash.getEEprom();
version = fwEEprom.toInt();
unsigned int version = flash.getEEpromVersion();
unsigned int variant = flash.getEEpromVariant();
QFile file(backupFile);
int eeprom_size = file.size();
@@ -1328,7 +1328,7 @@ void MainWindow::writeFlash(QString fileToFlash)
if (backupEnable) {
QDateTime datetime;
backupFile.clear();
backupFile=backupPath+"/backup-"+QDateTime().currentDateTime().toString("yyyy-MM-dd-hhmmss")+".bin";
backupFile = backupPath+"/backup-"+QDateTime().currentDateTime().toString("yyyy-MM-dd-hhmmss")+".bin";
}
if (readEepromFromRadio(backupFile, tr("Backup Models and Settings From Radio"))) {
@@ -1420,6 +1420,7 @@ void MainWindow::compare()
void MainWindow::logFile()
{
logsDialog *fd = new logsDialog(this);
fd->setWindowFlags(Qt::Window); //to show minimize an maximize buttons
fd->setAttribute(Qt::WA_DeleteOnClose, true);
fd->show();
}
@@ -1472,8 +1473,9 @@ MdiChild *MainWindow::createMdiChild()
{
MdiChild * child = new MdiChild();
mdiArea->addSubWindow(child);
if(!child->parentWidget()->isMaximized() && !child->parentWidget()->isMinimized())
if (!child->parentWidget()->isMaximized() && !child->parentWidget()->isMinimized()) {
child->parentWidget()->resize(400, 400);
}
connect(child, SIGNAL(copyAvailable(bool)),cutAct, SLOT(setEnabled(bool)));
connect(child, SIGNAL(copyAvailable(bool)),copyAct, SLOT(setEnabled(bool)));
+2 -2
View File
@@ -71,13 +71,13 @@ MdiChild::MdiChild():
fileChanged(false)
{
ui->setupUi(this);
this->setWindowIcon(CompanionIcon("open.png"));
setWindowIcon(CompanionIcon("open.png"));
ui->SimulateTxButton->setIcon(CompanionIcon("simulate.png"));
setAttribute(Qt::WA_DeleteOnClose);
eepromInterfaceChanged();
if(!(this->isMaximized() || this->isMinimized())) {
if (!(this->isMaximized() || this->isMinimized())) {
adjustSize();
}
+6 -4
View File
@@ -69,7 +69,7 @@ Channels::Channels(QWidget * parent, ModelData & model, GeneralSettings & genera
minSB->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
minSB->setAccelerated(true);
minSB->setDecimals(1);
minSB->setMinimum(model.extendedLimits ? -125 : -100);
minSB->setMinimum(-model.getChannelsMax());
minSB->setSingleStep(0.1);
minSB->setMaximum(0);
minSB->setValue(float(model.limitData[i].min) / 10);
@@ -85,7 +85,7 @@ Channels::Channels(QWidget * parent, ModelData & model, GeneralSettings & genera
maxSB->setDecimals(1);
maxSB->setMinimum(0);
maxSB->setSingleStep(0.1);
maxSB->setMaximum(model.extendedLimits ? 125 : 100);
maxSB->setMaximum(model.getChannelsMax());
maxSB->setValue(float(model.limitData[i].max) / 10);
connect(maxSB, SIGNAL(editingFinished()), this, SLOT(maxEdited()));
gridLayout->addWidget(maxSB, i+1, col++, 1, 1);
@@ -136,6 +136,8 @@ Channels::Channels(QWidget * parent, ModelData & model, GeneralSettings & genera
}
// Push the rows up
addVSpring(gridLayout, 0,firmware->getCapability(Outputs)+1);
disableMouseScrolling();
}
Channels::~Channels()
@@ -192,8 +194,8 @@ void Channels::refreshExtendedLimits()
QDoubleSpinBox * minDSB = minSpins[i];
QDoubleSpinBox * maxDSB = maxSpins[i];
minDSB->setMinimum(model.extendedLimits ? -125 : -100);
maxDSB->setMaximum(model.extendedLimits ? 125 : 100);
minDSB->setMinimum(-model.getChannelsMax());
maxDSB->setMaximum(model.getChannelsMax());
}
emit modified();
}
+6 -3
View File
@@ -180,6 +180,8 @@ Curves::Curves(QWidget * parent, ModelData & model, GeneralSettings & generalSet
addTemplate(tr("Symmetrical f(x)=-f(-x)"), CURVE_COEFF_ENABLE, curveSymmetricalY);
addTemplate(tr("Symmetrical f(x)=f(-x)"), CURVE_COEFF_ENABLE | CURVE_YMID_ENABLE, curveSymmetricalX);
disableMouseScrolling();
lock = false;
}
@@ -246,12 +248,13 @@ void Curves::updateCurveType()
index = model.curves[currentCurve].count - 2;
}
else {
ui->curveSmooth->hide();
if (model.curves[currentCurve].count == 5)
index += 2;
index = 1;
else if (model.curves[currentCurve].count == 9)
index += 4;
index = 2;
else if (model.curves[currentCurve].count == 17)
index += 6;
index = 3;
}
ui->curvePoints->setCurrentIndex(index);
+5 -3
View File
@@ -87,7 +87,7 @@ CustomFunctionsPanel::CustomFunctionsPanel(QWidget * parent, ModelData & model,
lang="en";
path.append(lang);
QDir qd(path);
int vml= firmware->getCapability(VoicesMaxLength)+4;
int vml= firmware->getCapability(VoicesMaxLength);
if (qd.exists()) {
QStringList filters;
filters << "*.wav" << "*.WAV";
@@ -196,6 +196,8 @@ CustomFunctionsPanel::CustomFunctionsPanel(QWidget * parent, ModelData & model,
// Push rows upward
addDoubleSpring(gridLayout, 5, num_fsw+1);
disableMouseScrolling();
lock = false;
}
@@ -264,7 +266,7 @@ void CustomFunctionsPanel::playMusic()
else {
phononCurrent = index;
clickObject->clear();
clickObject->setCurrentSource(QUrl(track));
clickObject->setCurrentSource(QUrl("file://"+track));
clickObject->play();
playBT[index]->setIcon(CompanionIcon("stop.png"));
}
@@ -571,10 +573,10 @@ void CustomFunctionsPanel::fsw_customContextMenuRequested(QPoint pos)
bool hasData = mimeData->hasFormat("application/x-companion-fsw");
QMenu contextMenu;
contextMenu.addAction(CompanionIcon("clear.png"), tr("&Delete"),this,SLOT(fswDelete()),tr("Delete"));
contextMenu.addAction(CompanionIcon("copy.png"), tr("&Copy"),this,SLOT(fswCopy()),tr("Ctrl+C"));
contextMenu.addAction(CompanionIcon("cut.png"), tr("&Cut"),this,SLOT(fswCut()),tr("Ctrl+X"));
contextMenu.addAction(CompanionIcon("paste.png"), tr("&Paste"),this,SLOT(fswPaste()),tr("Ctrl+V"))->setEnabled(hasData);
contextMenu.addAction(CompanionIcon("clear.png"), tr("&Delete"),this,SLOT(fswDelete()),tr("Delete"));
contextMenu.exec(globalPos);
}
+14 -5
View File
@@ -18,10 +18,18 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
setWindowTitle(tr("Edit %1").arg(getInputStr(model, ed->chn)));
QRegExp rx(CHAR_FOR_NAMES_REGEX);
if (IS_TARANIS(GetEepromInterface()->getBoard()))
gvGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, 100, -100, 100);
else
gvGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, 100, 0, 100);
if (IS_TARANIS(GetEepromInterface()->getBoard())) {
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, 100, -100, 100);
gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, ed->offset, 0, -100, 100);
}
else {
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, 100, 0, 100);
gvOffsetGroup = NULL;
ui->offsetLabel->hide();
ui->offsetGV->hide();
ui->offsetSB->hide();
ui->offsetCB->hide();
}
curveGroup = new CurveGroup(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueCB, ui->curveValueSB, ed->curve);
@@ -105,7 +113,8 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
ExpoDialog::~ExpoDialog()
{
delete gvGroup;
delete gvWeightGroup;
delete gvOffsetGroup;
delete curveGroup;
delete ui;
}
+2 -1
View File
@@ -31,7 +31,8 @@ class ExpoDialog : public QDialog {
FirmwareInterface * firmware;
ExpoData * ed;
char * inputName;
GVarGroup * gvGroup;
GVarGroup * gvWeightGroup;
GVarGroup * gvOffsetGroup;
CurveGroup * curveGroup;
};
+72 -31
View File
@@ -30,10 +30,10 @@
<normaloff>:/icon.png</normaloff>:/icon.png</iconset>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="1">
<widget class="QComboBox" name="sourceCB">
<property name="whatsThis">
<string>Source for the mixer.</string>
<item row="9" column="0">
<widget class="QLabel" name="label_phases">
<property name="text">
<string>Flight modes</string>
</property>
</widget>
</item>
@@ -44,20 +44,6 @@
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="inputName">
<property name="maxLength">
<number>6</number>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Weight</string>
</property>
</widget>
</item>
<item row="6" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,0,1,0">
<item>
@@ -92,14 +78,28 @@
</item>
</layout>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_phases">
<property name="text">
<string>Flight modes</string>
<item row="0" column="1">
<widget class="QLineEdit" name="inputName">
<property name="maxLength">
<number>6</number>
</property>
</widget>
</item>
<item row="8" column="1">
<item row="2" column="1">
<widget class="QComboBox" name="sourceCB">
<property name="whatsThis">
<string>Source for the mixer.</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>Weight</string>
</property>
</widget>
</item>
<item row="9" column="1">
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="0">
<widget class="QLabel" name="lb_FP0">
@@ -256,14 +256,14 @@
</item>
</layout>
</item>
<item row="9" column="0">
<item row="10" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
<string>Switch</string>
</property>
</widget>
</item>
<item row="9" column="1">
<item row="10" column="1">
<widget class="QComboBox" name="switchesCB">
<property name="whatsThis">
<string>Switch used to enable the line.
@@ -271,14 +271,14 @@ If blank then the input is considered to be &quot;ON&quot; all the time.</string
</property>
</widget>
</item>
<item row="11" column="0">
<item row="12" column="0">
<widget class="QLabel" name="sideLabel">
<property name="text">
<string>Stick Side</string>
</property>
</widget>
</item>
<item row="11" column="1">
<item row="12" column="1">
<widget class="QComboBox" name="sideCB">
<item>
<property name="text">
@@ -297,7 +297,7 @@ If blank then the input is considered to be &quot;ON&quot; all the time.</string
</item>
</widget>
</item>
<item row="13" column="0" colspan="2">
<item row="14" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="minimumSize">
<size>
@@ -316,7 +316,7 @@ If blank then the input is considered to be &quot;ON&quot; all the time.</string
</property>
</widget>
</item>
<item row="12" column="0" colspan="2">
<item row="13" column="0" colspan="2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -370,14 +370,14 @@ If blank then the input is considered to be &quot;ON&quot; all the time.</string
</item>
</widget>
</item>
<item row="7" column="0">
<item row="8" column="0">
<widget class="QLabel" name="label_curves">
<property name="text">
<string>Curve</string>
</property>
</widget>
</item>
<item row="7" column="1">
<item row="8" column="1">
<layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0,1,0">
<item>
<widget class="QComboBox" name="curveTypeCB">
@@ -429,6 +429,47 @@ If blank then the input is considered to be &quot;ON&quot; all the time.</string
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="offsetLabel">
<property name="text">
<string>Offset</string>
</property>
</widget>
</item>
<item row="7" column="1">
<layout class="QHBoxLayout" name="offsetLayout" stretch="0,0,1,0">
<item>
<widget class="QCheckBox" name="offsetGV">
<property name="text">
<string>GV</string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="offsetSB"/>
</item>
<item>
<widget class="QComboBox" name="offsetCB">
<property name="whatsThis">
<string>The source for the mixer</string>
</property>
</widget>
</item>
<item>
<spacer name="offsetSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<tabstops>
+9 -14
View File
@@ -121,7 +121,7 @@ FlightModePanel::FlightModePanel(QWidget * parent, ModelData & model, int phaseI
}
// GVars
if (gvCount > 0) {
if (gvCount > 0 && (firmware->getCapability(GvarsFlightModes) || phaseIdx == 0) ) {
QGridLayout *gvLayout = new QGridLayout(ui->gvGB);
for (int i=0; i<gvCount; i++) {
int col = 0;
@@ -171,6 +171,8 @@ FlightModePanel::FlightModePanel(QWidget * parent, ModelData & model, int phaseI
ui->gvGB->hide();
}
disableMouseScrolling();
update();
}
@@ -200,13 +202,14 @@ void FlightModePanel::update()
trimUpdate(i);
}
for (int i=0; i<gvCount; i++) {
gvNames[i]->setText(model.gvars_names[i]);
gvValues[i]->setDisabled(model.isGVarLinked(phaseIdx, i));
if (IS_TARANIS(GetEepromInterface()->getBoard())) {
if (ui->gvGB->isVisible()) {
for (int i=0; i<gvCount; i++) {
gvNames[i]->setText(model.gvars_names[i]);
gvValues[i]->setDisabled(model.isGVarLinked(phaseIdx, i));
gvValues[i]->setValue(model.getGVarValue(phaseIdx, i));
if (phaseIdx == 0)
if (IS_TARANIS(GetEepromInterface()->getBoard()) && phaseIdx == 0) {
gvPopups[i]->setChecked(model.gvars_popups[i]);
}
}
}
@@ -296,14 +299,6 @@ void FlightModePanel::GVName_editingFinished()
}
}
void FlightModePanel::GVSource_currentIndexChanged(int index)
{
QComboBox *comboBox = qobject_cast<QComboBox*>(sender());
int gvar = comboBox->property("index").toInt();
model.gvsource[gvar] = index;
emit modified();
}
void FlightModePanel::phaseGVUse_currentIndexChanged(int index)
{
if (!lock) {
-1
View File
@@ -35,7 +35,6 @@ class FlightModePanel : public ModelPanel
void phaseTrim_valueChanged();
void phaseTrimSlider_valueChanged();
void GVName_editingFinished();
void GVSource_currentIndexChanged(int index);
void phaseGVValue_editingFinished();
void phaseGVUse_currentIndexChanged(int index);
void phaseGVPopupToggled(bool checked);
+2
View File
@@ -14,6 +14,8 @@ HeliPanel::HeliPanel(QWidget *parent, ModelData & model, GeneralSettings & gener
connect(ui->swashInvertELE, SIGNAL(stateChanged(int)), this, SLOT(edited()));
connect(ui->swashInvertAIL, SIGNAL(stateChanged(int)), this, SLOT(edited()));
connect(ui->swashInvertCOL, SIGNAL(stateChanged(int)), this, SLOT(edited()));
disableMouseScrolling();
}
HeliPanel::~HeliPanel()
+1
View File
@@ -162,6 +162,7 @@ QString InputsPanel::getInputText(int dest, bool * new_ch)
}
str += " " + tr("Weight(%1)").arg(getGVarString(md->weight));
if (md->offset) str += " " + tr("Offset(%1)").arg(getGVarString(md->offset));
if (firmware->getCapability(VirtualInputs)) {
str += " " + tr("Source(%1)").arg(md->srcRaw.toString());
+4 -1
View File
@@ -116,6 +116,9 @@ LogicalSwitchesPanel::LogicalSwitchesPanel(QWidget * parent, ModelData & model,
}
// Push rows upward
addVSpring(gridLayout,0,firmware->getCapability(LogicalSwitches)+1);
disableMouseScrolling();
lock = false;
}
@@ -437,10 +440,10 @@ void LogicalSwitchesPanel::csw_customContextMenuRequested(QPoint pos)
bool hasData = mimeData->hasFormat("application/x-companion-csw");
QMenu contextMenu;
contextMenu.addAction(CompanionIcon("clear.png"), tr("&Delete"),this,SLOT(cswDelete()),tr("Delete"));
contextMenu.addAction(CompanionIcon("copy.png"), tr("&Copy"),this,SLOT(cswCopy()),tr("Ctrl+C"));
contextMenu.addAction(CompanionIcon("cut.png"), tr("&Cut"),this,SLOT(cswCut()),tr("Ctrl+X"));
contextMenu.addAction(CompanionIcon("paste.png"), tr("&Paste"),this,SLOT(cswPaste()),tr("Ctrl+V"))->setEnabled(hasData);
contextMenu.addAction(CompanionIcon("clear.png"), tr("&Delete"),this,SLOT(cswDelete()),tr("Delete"));
contextMenu.exec(globalPos);
}
+2 -3
View File
@@ -191,9 +191,8 @@ QString MixesPanel::getMixerText(int dest, bool * new_ch)
str += " " + Qt::escape(tr("Switch(%1)").arg(md->swtch.toString()));
}
if (md->carryTrim) {
str += " " + Qt::escape(tr("NoTrim"));
}
if (md->carryTrim>0) str += " " + Qt::escape(tr("NoTrim"));
else if (md->carryTrim<0) str += " " + RawSource(SOURCE_TYPE_TRIM, (-(md->carryTrim)-1)).toString();
if (firmware->getCapability(HasNoExpo) && md->noExpo) str += " " + Qt::escape(tr("No DR/Expo"));
if (md->sOffset) str += " " + Qt::escape(tr("Offset(%1)").arg(getGVarString(md->sOffset)));
+43
View File
@@ -1,5 +1,7 @@
#include "modelpanel.h"
#include <QLabel>
#include <QComboBox>
#include <QSpinBox>
ModelPanel::ModelPanel(QWidget * parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware):
QWidget(parent),
@@ -57,3 +59,44 @@ void ModelPanel::addDoubleSpring(QGridLayout * gridLayout, int col, int row)
gridLayout->addItem(spacer, row, col);
}
bool ModelPanel::eventFilter(QObject *object, QEvent * event)
{
QWidget * widget = qobject_cast<QWidget*>(object);
if (widget) {
if (event->type() == QEvent::Wheel) {
if (widget->focusPolicy() == Qt::WheelFocus) {
event->accept();
return false;
}
else {
event->ignore();
return true;
}
}
else if (event->type() == QEvent::FocusIn) {
widget->setFocusPolicy(Qt::WheelFocus);
}
else if (event->type() == QEvent::FocusOut) {
widget->setFocusPolicy(Qt::StrongFocus);
}
}
return QWidget::eventFilter(object, event);
}
void ModelPanel::disableMouseScrolling()
{
Q_FOREACH(QComboBox * cb, findChildren<QComboBox*>()) {
cb->installEventFilter(this);
cb->setFocusPolicy(Qt::StrongFocus);
}
Q_FOREACH(QAbstractSpinBox * sb, findChildren<QAbstractSpinBox*>()) {
sb->installEventFilter(this);
sb->setFocusPolicy(Qt::StrongFocus);
}
Q_FOREACH(QSlider * slider, findChildren<QSlider*>()) {
slider->installEventFilter(this);
slider->setFocusPolicy(Qt::StrongFocus);
}
}
+2
View File
@@ -31,6 +31,8 @@ class ModelPanel : public QWidget
void addHSpring(QGridLayout *, int col, int row);
void addVSpring(QGridLayout *, int col, int row);
void addDoubleSpring(QGridLayout *, int col, int row);
virtual bool eventFilter(QObject *obj, QEvent *event);
void disableMouseScrolling();
};
#endif // CHANNELS_H
+13 -3
View File
@@ -28,6 +28,8 @@ TimerPanel::TimerPanel(QWidget *parent, ModelData & model, TimerData & timer, Ge
if (IS_ARM(GetEepromInterface()->getBoard()) || IS_2560(GetEepromInterface()->getBoard()))
ui->countdownBeep->addItem(tr("Voice"), 2);
disableMouseScrolling();
lock = false;
}
@@ -144,7 +146,7 @@ ModulePanel::ModulePanel(QWidget *parent, ModelData & model, ModuleData & module
label->setText(QString::number(i+1));
QDoubleSpinBox * spinbox = new QDoubleSpinBox(this);
spinbox->setMinimumSize(QSize(20, 0));
spinbox->setRange(-100, 100);
spinbox->setRange(-150, 150);
spinbox->setSingleStep(0.1);
spinbox->setDecimals(1);
spinbox->setValue(((double)module.failsafeChannels[i]*100)/1024);
@@ -157,6 +159,8 @@ ModulePanel::ModulePanel(QWidget *parent, ModelData & model, ModuleData & module
}
}
disableMouseScrolling();
lock = false;
}
@@ -228,7 +232,7 @@ void ModulePanel::update()
ui->ppmDelay->setValue(module.ppmDelay);
ui->label_ppmFrameLength->setVisible(mask & MASK_PPM_FIELDS);
ui->ppmFrameLength->setVisible(mask & MASK_PPM_FIELDS);
ui->ppmFrameLength->setMinimum(module.channelsCount*(model.extendedLimits ? 2.250 :2)+3.5);
ui->ppmFrameLength->setMinimum(module.channelsCount*(model.extendedLimits ? 2.250 : 2)+3.5);
ui->ppmFrameLength->setMaximum(firmware->getCapability(PPMFrameLength));
ui->ppmFrameLength->setValue(22.5+((double)module.ppmFrameLength)*0.5);
@@ -418,6 +422,9 @@ SetupPanel::SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & gen
ui->centerBeepLayout->addWidget(checkbox, 0, i+1);
connect(checkbox, SIGNAL(toggled(bool)), this, SLOT(onBeepCenterToggled(bool)));
centerBeepCheckboxes << checkbox;
if (!IS_TARANIS_PLUS(firmware->getBoard()) && i==6) {
checkbox->hide();
}
}
// Startup switches warnings
@@ -466,7 +473,7 @@ SetupPanel::SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & gen
ui->potWarningLayout->addWidget(cb, 0, i+1);
connect(cb, SIGNAL(toggled(bool)), this, SLOT(potWarningToggled(bool)));
potWarningCheckboxes << cb;
if (!IS_TARANIS_PLUS(firmware->getBoard())) {
if (!IS_TARANIS_PLUS(firmware->getBoard()) && i==2) {
cb->hide();
}
}
@@ -475,6 +482,9 @@ SetupPanel::SetupPanel(QWidget *parent, ModelData & model, GeneralSettings & gen
ui->label_potWarning->hide();
ui->potWarningMode->hide();
}
disableMouseScrolling();
lock = false;
}
+6 -29
View File
@@ -50,6 +50,8 @@ TelemetryAnalog::TelemetryAnalog(QWidget *parent, FrSkyChannelData & analog, Mod
else {
ui->label_Max->setText(tr("Range"));
}
disableMouseScrolling();
}
void TelemetryAnalog::update()
@@ -324,6 +326,8 @@ TelemetryCustomScreen::TelemetryCustomScreen(QWidget *parent, ModelData & model,
ui->screenBarsLayout->addWidget(maxSB[l], l, 3, 1, 1);
}
disableMouseScrolling();
update();
}
@@ -516,6 +520,8 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
ui->bladesCount->setMaximum(128);
}
disableMouseScrolling();
setup();
}
@@ -530,20 +536,6 @@ void TelemetryPanel::setup()
lock = true;
if (IS_ARM(firmware->getBoard())) {
ui->rxbattAlarm1DSB->setValue((13.2*model.frsky.rxBattAlarms[0])/255);
ui->rxbattAlarm2DSB->setValue((13.2*model.frsky.rxBattAlarms[1])/255);
}
else {
ui->rxbattLabel->hide();
ui->rxbattAlarm1Label->hide();
ui->rxbattAlarm2Label->hide();
ui->rxbattAlarm1CB->hide();
ui->rxbattAlarm2CB->hide();
ui->rxbattAlarm1DSB->hide();
ui->rxbattAlarm2DSB->hide();
}
ui->rssiAlarm1SB->setValue(model.frsky.rssiAlarms[0].value);
ui->rssiAlarm2SB->setValue(model.frsky.rssiAlarms[1].value);
if (!IS_TARANIS(GetEepromInterface()->getBoard())) {
@@ -692,9 +684,6 @@ void TelemetryPanel::populateVoltsSource()
{
QUnsignedAutoComboBox * cb = ui->frskyVoltCB;
cb->setField(&model.frsky.voltsSource, this);
if (IS_ARM(firmware->getBoard())) {
cb->addItem(tr("RxBatt"), TELEMETRY_VOLTS_SOURCE_RXBATT);
}
cb->addItem(tr("A1"), TELEMETRY_VOLTS_SOURCE_A1);
cb->addItem(tr("A2"), TELEMETRY_VOLTS_SOURCE_A2);
if (IS_ARM(firmware->getBoard())) {
@@ -790,18 +779,6 @@ void TelemetryPanel::on_varioLimitMin_DSB_editingFinished()
emit modified();
}
void TelemetryPanel::on_rxbattAlarm1DSB_editingFinished()
{
model.frsky.rxBattAlarms[0] = round(ui->rxbattAlarm1DSB->value()/(13.2/255));
emit modified();
}
void TelemetryPanel::on_rxbattAlarm2DSB_editingFinished()
{
model.frsky.rxBattAlarms[1] = round(ui->rxbattAlarm2DSB->value()/(13.2/255));
emit modified();
}
void TelemetryPanel::on_varioLimitMax_DSB_editingFinished()
{
model.frsky.varioMax = round(ui->varioLimitMax_DSB->value()-10);
-2
View File
@@ -93,8 +93,6 @@ class TelemetryPanel : public ModelPanel
void on_rssiAlarm2CB_currentIndexChanged(int index);
void on_rssiAlarm1SB_editingFinished();
void on_rssiAlarm2SB_editingFinished();
void on_rxbattAlarm1DSB_editingFinished();
void on_rxbattAlarm2DSB_editingFinished();
void on_AltitudeGPS_ChkB_toggled(bool checked);
void on_varioLimitMin_DSB_editingFinished();
void on_varioLimitMax_DSB_editingFinished();
+210 -350
View File
@@ -437,356 +437,6 @@
</layout>
</widget>
</item>
<item row="3" column="0">
<widget class="QGroupBox" name="RSSIGB">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="flat">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_7">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<item row="5" column="0">
<widget class="QLabel" name="rxbattAlarm2Label">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Alarm 2</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="rxbattAlarm1Label">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Alarm 1</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="rxbattLabel">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>RxBatt</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="rxbattAlarm2CB">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Critical Alarm</string>
</property>
</item>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="rssiAlarm1Label">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Alarm 1</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="rssiAlarm1CB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>----</string>
</property>
</item>
<item>
<property name="text">
<string>Yellow</string>
</property>
</item>
<item>
<property name="text">
<string>Orange</string>
</property>
</item>
<item>
<property name="text">
<string>Red</string>
</property>
</item>
</widget>
</item>
<item row="1" column="2">
<widget class="QSpinBox" name="rssiAlarm1SB">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string/>
</property>
<property name="minimum">
<number>20</number>
</property>
<property name="maximum">
<number>80</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="value">
<number>50</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="rssiAlarm2Label">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Alarm 2</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="rssiAlarm2CB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>----</string>
</property>
</item>
<item>
<property name="text">
<string>Yellow</string>
</property>
</item>
<item>
<property name="text">
<string>Orange</string>
</property>
</item>
<item>
<property name="text">
<string>Red</string>
</property>
</item>
</widget>
</item>
<item row="2" column="2">
<widget class="QSpinBox" name="rssiAlarm2SB">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string/>
</property>
<property name="minimum">
<number>20</number>
</property>
<property name="maximum">
<number>80</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="value">
<number>50</number>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="rssiLabel">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>RSSI</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="rxbattAlarm1CB">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>Low Alarm</string>
</property>
</item>
</widget>
</item>
<item row="6" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
<item row="5" column="2">
<widget class="QDoubleSpinBox" name="rxbattAlarm2DSB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="decimals">
<number>2</number>
</property>
<property name="minimum">
<double>0.000000000000000</double>
</property>
<property name="maximum">
<double>13.199999999999999</double>
</property>
<property name="singleStep">
<double>0.050000000000000</double>
</property>
<property name="value">
<double>4.300000000000000</double>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QDoubleSpinBox" name="rxbattAlarm1DSB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="decimals">
<number>2</number>
</property>
<property name="minimum">
<double>0.000000000000000</double>
</property>
<property name="maximum">
<double>13.199999999999999</double>
</property>
<property name="singleStep">
<double>0.051764000000000</double>
</property>
<property name="value">
<double>4.300000000000000</double>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="1">
<widget class="QGroupBox" name="altimetryGB">
<property name="sizePolicy">
@@ -1213,6 +863,216 @@
</layout>
</widget>
</item>
<item row="3" column="0">
<widget class="QGroupBox" name="RSSIGB">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="flat">
<bool>false</bool>
</property>
<layout class="QGridLayout" name="gridLayout_7">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<item row="1" column="0">
<widget class="QLabel" name="rssiAlarm1Label">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>Alarm 1</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="rssiAlarm1CB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>----</string>
</property>
</item>
<item>
<property name="text">
<string>Yellow</string>
</property>
</item>
<item>
<property name="text">
<string>Orange</string>
</property>
</item>
<item>
<property name="text">
<string>Red</string>
</property>
</item>
</widget>
</item>
<item row="1" column="2">
<widget class="QSpinBox" name="rssiAlarm1SB">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string/>
</property>
<property name="minimum">
<number>20</number>
</property>
<property name="maximum">
<number>80</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="value">
<number>50</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="rssiAlarm2Label">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Alarm 2</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="rssiAlarm2CB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>----</string>
</property>
</item>
<item>
<property name="text">
<string>Yellow</string>
</property>
</item>
<item>
<property name="text">
<string>Orange</string>
</property>
</item>
<item>
<property name="text">
<string>Red</string>
</property>
</item>
</widget>
</item>
<item row="2" column="2">
<widget class="QSpinBox" name="rssiAlarm2SB">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string/>
</property>
<property name="minimum">
<number>20</number>
</property>
<property name="maximum">
<number>80</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="value">
<number>50</number>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="rssiLabel">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>RSSI</string>
</property>
</widget>
</item>
<item row="3" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
</layout>
</item>
<item>
+2 -3
View File
@@ -347,9 +347,8 @@ void PrintDialog::printMixes()
str += " " + Qt::escape(tr("Switch(%1)").arg(md->swtch.toString()));
}
if (md->carryTrim) {
str += " " + Qt::escape(tr("NoTrim"));
}
if (md->carryTrim>0) str += " " + Qt::escape(tr("NoTrim"));
else if (md->carryTrim<0) str += " " + RawSource(SOURCE_TYPE_TRIM, (-(md->carryTrim)-1)).toString();
if (firmware->getCapability(HasNoExpo) && md->noExpo) str += " " + Qt::escape(tr("No DR/Expo"));
if (md->sOffset) str += " " + Qt::escape(tr("Offset(%1)").arg(getGVarString(md->sOffset)));
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -42,8 +42,8 @@ WizMix::WizMix(const GeneralSettings & settings, const unsigned int modelId):
void WizMix::maxMixSwitch(char *name, MixData &mix, int channel, int sw, int weight)
{
strncpy(mix.name, name, sizeof(mix.name));
mix.name[sizeof(mix.name)]=0;
strncpy(mix.name, name, MIXDATA_NAME_LEN);
mix.name[MIXDATA_NAME_LEN] = '\0';
mix.destCh = channel;
mix.srcRaw = RawSource(SOURCE_TYPE_MAX);
mix.swtch = RawSwitch(SWITCH_TYPE_SWITCH, sw);
+6 -2
View File
@@ -51,9 +51,13 @@ WizardDialog::WizardDialog(const GeneralSettings & settings, unsigned int modelI
"Please note that continuing removes all old model settings!"), -1));
setStartId(Page_Models);
#ifndef Q_WS_MAC
// Workaround for Qt radio button rendering issue on Mac
Q_FOREACH(QAbstractButton * rb, findChildren<QAbstractButton *>()) {
rb->setAttribute(Qt::WA_LayoutUsesWidgetRect);
}
setWizardStyle(ModernStyle);
#endif
setOption(QWizard::NoCancelButton, false);
setOption(HaveHelpButton, true);
connect(this, SIGNAL(helpRequested()), this, SLOT(showHelp()));
-2
View File
@@ -105,8 +105,6 @@ void saveGeneralSettings(GeneralSettings & settings, global_settings & gs)
}
/* TODO if (settings.disableSplashScreen)
gs.splash_screen(false); */
if (settings.filterInput)
gs.filter_input(filter_input::value(settings.filterInput));
/* TODO if (settings.backlightDelay)
gs.light_auto_off_timer(settings.lightAutoOff); */
gs.default_channel_order(settings.templateSetup);
@@ -95,6 +95,10 @@ Section "OpenTX companion" SecDummy
File "@CMAKE_CURRENT_SOURCE_DIR@\..\targets\windows\avrdude.conf"
File "@CMAKE_CURRENT_SOURCE_DIR@\..\targets\windows\libusb0.dll"
File "@CMAKE_CURRENT_SOURCE_DIR@\..\targets\windows\dfu-util.exe"
CreateDirectory "$INSTDIR\phonon_backend"
SetOutPath "$INSTDIR\phonon_backend"
File "@QT_BINARY_DIR@\..\plugins\phonon_backend\Phonon_ds94.dll"
CreateDirectory "$INSTDIR\lang"
SetOutPath "$INSTDIR\lang"
@@ -123,6 +123,10 @@ Section "OpenTX Companion" SecDummy
File "@CMAKE_CURRENT_SOURCE_DIR@\..\targets\windows\dfu-util.exe"
File "@CMAKE_CURRENT_SOURCE_DIR@\..\targets\windows\libusb-1.0.dll"
CreateDirectory "$INSTDIR\phonon_backend"
SetOutPath "$INSTDIR\phonon_backend"
File "@QT_BINARY_DIR@\..\plugins\phonon_backend\Phonon_ds94.dll"
CreateDirectory "$INSTDIR\lang"
SetOutPath "$INSTDIR\lang"
File "*.qm"
+11
View File
@@ -1,3 +1,14 @@
<h2>Version 2.0.2 / 2014-06-12</h2>
<ul>
<li>RxBatt removed (merged with A1 as before)
<li>Bootloader accessible through the 2 trims (as 2.0.0)
<li>Delay on switches middle position only applied to Play functions
<li>Delay for Play functions is configurable (0-300ms)
<li>SWR, A3 and A4 now recorded in SD logs
<li>Persistent mAh was not correctly stored in EEPROM
<li>A lot of small bug fixes
</ul>
<h2>OpenTX 2.0.1 / 2014-02-05</h2>
[Taranis]
<ul>
+1 -1
View File
@@ -279,7 +279,7 @@ SHELL = sh
IMG2LBM = -python ../util/img2lbm.py
BIN2LBM = -python ../util/bin2lbm.py
TRANSLATE = -python ../util/translate.py
VERSION = 2.0.1
VERSION = 2.0.2
SRC =
CPPSRC =
+2 -6
View File
@@ -201,8 +201,6 @@ const char * audioFilenames[] = {
"rssi_org",
"rssi_red",
"swr_red",
"rx_org",
"rx_red",
"telemko",
"telemok"
};
@@ -329,8 +327,8 @@ void getLogicalSwitchAudioFile(char * filename, int index, unsigned int event)
char * str = getModelPath(filename);
int len = STR_VSWITCHES[0];
strncpy(str, &STR_VSWITCHES[1+len*(index+SWSRC_FIRST_LOGICAL_SWITCH)], len);
str += len;
strcpy(str, suffixes[event]);
str[len] = '\0';
strcat(str, suffixes[event]);
strcat(str, SOUNDS_EXT);
}
@@ -1057,14 +1055,12 @@ void audioEvent(uint8_t e, uint16_t f)
case AU_TIMER_30:
audioQueue.playTone(BEEP_DEFAULT_FREQ+150, 120, 20, PLAY_REPEAT(2)|PLAY_NOW);
break;
case AU_RXBATT_ORANGE:
case AU_A1_ORANGE:
case AU_A2_ORANGE:
case AU_A3_ORANGE:
case AU_A4_ORANGE:
audioQueue.playTone(BEEP_DEFAULT_FREQ+600, 200, 20, PLAY_NOW);
break;
case AU_RXBATT_RED:
case AU_A1_RED:
case AU_A2_RED:
case AU_A3_RED:
+6 -2
View File
@@ -62,9 +62,10 @@
#include "../FatFs/ff.h"
#include "../FatFs/diskio.h"
#include "../translations/en.h"
#include "../stamp-opentx.h"
#if defined(PCBTARANIS)
#define BOOTLOADER_TITLE " Taranis BootLoader - v1.0"
#define BOOTLOADER_TITLE " Taranis BootLoader - " VERS_STR
#define BOOT_KEY_UP KEY_PLUS
#define BOOT_KEY_DOWN KEY_MINUS
#define BOOT_KEY_LEFT KEY_MENU
@@ -73,7 +74,7 @@
#define BOOT_KEY_EXIT KEY_EXIT
#define DISPLAY_CHAR_WIDTH 35
#elif defined(PCBSKY9X)
#define BOOTLOADER_TITLE "Sky9x Boot Loader - v1.0"
#define BOOTLOADER_TITLE "Sky9x Boot Loader - " VERS_STR
#endif
const uint8_t bootloaderVersion[] __attribute__ ((section(".version"), used)) =
@@ -499,6 +500,9 @@ int main()
#endif
#if defined(PCBTARANIS)
#if defined(REVPLUS)
turnBacklightOn(0, 0);
#endif
keysInit();
I2C_EE_Init();
init_hw_timer();
+2 -5
View File
@@ -338,8 +338,8 @@ int ConvertTelemetrySource_215_to_216(int source)
// TELEM_RSSI_TX added
if (source >= TELEM_RSSI_TX)
source += 1;
// RxBatt added
if (source >= TELEM_RXBATT)
// Reserve added
if (source >= TELEM_RESERVE0)
source += 1;
// A3 and A4 added
if (source >= TELEM_A3)
@@ -838,9 +838,6 @@ void ConvertModel_215_to_216(ModelData &model)
memcpy(&g_model.frsky, &oldModel.frsky, 2*sizeof(FrSkyChannelData));
// gap for A3-A4
memcpy(((uint8_t *)&g_model.frsky) + 4*sizeof(FrSkyChannelData), ((uint8_t *)&oldModel.frsky) + 2*sizeof(FrSkyChannelData), sizeof(oldModel.frsky) - 2*sizeof(FrSkyChannelData));
// RxBatt introduced
if (g_model.frsky.voltsSource >= FRSKY_VOLTS_SOURCE_A1)
g_model.frsky.voltsSource += 1;
// A3 and A4 introduced
if (g_model.frsky.voltsSource >= FRSKY_VOLTS_SOURCE_A3)
g_model.frsky.voltsSource += 2;
+26
View File
@@ -874,6 +874,32 @@ TEST(Heli, BasicTest)
EXPECT_EQ(chans[1], CHANNEL_MAX/2);
EXPECT_EQ(chans[2], CHANNEL_MAX/2);
}
TEST(Heli, Mode2Test)
{
MODEL_RESET();
g_eeGeneral.templateSetup = 2;
applyDefaultTemplate();
g_model.swashR.collectiveSource = MIXSRC_Thr;
g_model.swashR.type = SWASH_TYPE_120;
g_model.mixData[0].destCh = 0;
g_model.mixData[0].mltpx = MLTPX_ADD;
g_model.mixData[0].srcRaw = MIXSRC_CYC1;
g_model.mixData[0].weight = 100;
g_model.mixData[1].destCh = 1;
g_model.mixData[1].mltpx = MLTPX_ADD;
g_model.mixData[1].srcRaw = MIXSRC_CYC2;
g_model.mixData[1].weight = 100;
g_model.mixData[2].destCh = 2;
g_model.mixData[2].mltpx = MLTPX_ADD;
g_model.mixData[2].srcRaw = MIXSRC_CYC3;
g_model.mixData[2].weight = 100;
anaInValues[ELE_STICK] = 1024;
evalFlightModeMixes(e_perout_mode_normal, 0);
EXPECT_EQ(chans[0], -CHANNEL_MAX);
EXPECT_EQ(chans[1], CHANNEL_MAX/2);
EXPECT_EQ(chans[2], CHANNEL_MAX/2);
}
#elif defined(HELI)
TEST(Heli, BasicTest)
{
+12 -2
View File
@@ -178,6 +178,7 @@ enum menuGeneralSetupItems {
CASE_CPUARM(ITEM_SETUP_IMPERIAL)
IF_FAI_CHOICE(ITEM_SETUP_FAI)
CASE_MAVLINK(ITEM_MAVLINK_BAUD)
CASE_CPUARM(ITEM_SETUP_SWITCHES_DELAY)
ITEM_SETUP_RX_CHANNEL_ORD,
ITEM_SETUP_STICK_MODE_LABELS,
ITEM_SETUP_STICK_MODE,
@@ -212,7 +213,7 @@ void menuGeneralSetup(uint8_t event)
}
#endif
MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, CASE_RTCLOCK(2) CASE_RTCLOCK(2) CASE_BATTGRAPH(1) LABEL(SOUND), CASE_AUDIO(0) CASE_BUZZER(0) CASE_VOICE(0) CASE_CPUARM(0) CASE_CPUARM(0) CASE_CPUARM(0) 0, CASE_AUDIO(0) CASE_VARIO_CPUARM(LABEL(VARIO)) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_HAPTIC(LABEL(HAPTIC)) CASE_HAPTIC(0) CASE_HAPTIC(0) CASE_HAPTIC(0) 0, LABEL(ALARMS), 0, CASE_PCBSKY9X(0) CASE_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, CASE_CPUARM(0) CASE_REVPLUS(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, CASE_SPLASH_PARAM(0) CASE_GPS(0) CASE_GPS(0) CASE_PXX(0) CASE_CPUARM(0) CASE_CPUARM(0) IF_FAI_CHOICE(0) 0, COL_TX_MODE, CASE_PCBTARANIS(0) 1/*to force edit mode*/});
MENU(STR_MENURADIOSETUP, menuTabDiag, e_Setup, ITEM_SETUP_MAX+1, {0, CASE_RTCLOCK(2) CASE_RTCLOCK(2) CASE_BATTGRAPH(1) LABEL(SOUND), CASE_AUDIO(0) CASE_BUZZER(0) CASE_VOICE(0) CASE_CPUARM(0) CASE_CPUARM(0) CASE_CPUARM(0) 0, CASE_AUDIO(0) CASE_VARIO_CPUARM(LABEL(VARIO)) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_VARIO_CPUARM(0) CASE_HAPTIC(LABEL(HAPTIC)) CASE_HAPTIC(0) CASE_HAPTIC(0) CASE_HAPTIC(0) 0, LABEL(ALARMS), 0, CASE_PCBSKY9X(0) CASE_PCBSKY9X(0) 0, 0, 0, IF_ROTARY_ENCODERS(0) LABEL(BACKLIGHT), 0, 0, CASE_CPUARM(0) CASE_REVPLUS(0) CASE_PWM_BACKLIGHT(0) CASE_PWM_BACKLIGHT(0) 0, CASE_SPLASH_PARAM(0) CASE_GPS(0) CASE_GPS(0) CASE_PXX(0) CASE_CPUARM(0) CASE_CPUARM(0) IF_FAI_CHOICE(0) CASE_MAVLINK(0) CASE_CPUARM(0) 0, COL_TX_MODE, CASE_PCBTARANIS(0) 1/*to force edit mode*/});
uint8_t sub = m_posVert - 1;
@@ -405,7 +406,7 @@ void menuGeneralSetup(uint8_t event)
case ITEM_SETUP_VARIO_REPEAT:
lcd_putsLeft(y, STR_REPEAT_AT_ZERO);
lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, VARIO_REPEAT_ZERO+(g_eeGeneral.varioRepeat*10), attr|LEFT);
lcd_putsAtt(lcdLastPos, y, "ms", attr);
lcd_putsAtt(lcdLastPos, y, STR_MS, attr);
if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.varioRepeat, -30, 50);
break;
#endif
@@ -621,6 +622,15 @@ void menuGeneralSetup(uint8_t event)
break;
#endif
#if defined(CPUARM)
case ITEM_SETUP_SWITCHES_DELAY:
lcd_putsLeft(y, STR_SWITCHES_DELAY);
lcd_outdezAtt(RADIO_SETUP_2ND_COLUMN, y, 10*SWITCHES_DELAY(), attr|LEFT);
lcd_putsAtt(lcdLastPos, y, STR_MS, attr);
if (attr) CHECK_INCDEC_GENVAR(event, g_eeGeneral.switchesDelay, -15, +15);
break;
#endif
case ITEM_SETUP_RX_CHANNEL_ORD:
lcd_putsLeft(y, STR_RXCHANNELORD); // RAET->AETR
for (uint8_t i=1; i<=4; i++) {
+4 -32
View File
@@ -4807,8 +4807,8 @@ void menuModelLogicalSwitches(uint8_t event)
#endif
#if LCD_W >= 212
#define MODEL_CUSTOM_FUNC_1ST_COLUMN (5+3*FW)
#define MODEL_CUSTOM_FUNC_2ND_COLUMN (8*FW)
#define MODEL_CUSTOM_FUNC_1ST_COLUMN (4*FW+2)
#define MODEL_CUSTOM_FUNC_2ND_COLUMN (8*FW+2)
#define MODEL_CUSTOM_FUNC_3RD_COLUMN (20*FW)
#define MODEL_CUSTOM_FUNC_4TH_COLUMN (33*FW-3)
#define MODEL_CUSTOM_FUNC_4TH_COLUMN_ONOFF (34*FW-3)
@@ -5361,11 +5361,6 @@ void menuModelCustomScripts(uint8_t event)
enum menuModelTelemetryItems {
CASE_CPUARM(ITEM_TELEMETRY_PROTOCOL_TYPE)
#if defined(CPUARM)
ITEM_TELEMETRY_RXBATT_LABEL,
ITEM_TELEMETRY_RXBATT_ALARM1,
ITEM_TELEMETRY_RXBATT_ALARM2,
#endif
ITEM_TELEMETRY_A1_LABEL,
ITEM_TELEMETRY_A1_RANGE,
ITEM_TELEMETRY_A1_OFFSET,
@@ -5463,12 +5458,6 @@ enum menuModelTelemetryItems {
#define TELEM_SCRTYPE_COL (10*FW)
#endif
#if defined(CPUARM)
#define RXBATT_ROWS LABEL(RXBATT), 0, 0,
#else
#define RXBATT_ROWS
#endif
#if defined(PCBTARANIS)
#define CHANNEL_ROWS LABEL(CHANNEL), 1, 0, 0, 0
#define RSSI_ROWS LABEL(RSSI), 0, 0
@@ -5497,7 +5486,7 @@ enum menuModelTelemetryItems {
void menuModelTelemetry(uint8_t event)
{
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, ITEM_TELEMETRY_MAX+1, {0, CASE_CPUARM(0) RXBATT_ROWS CHANNEL_ROWS, CHANNEL_ROWS, CASE_CPUARM(CHANNEL_ROWS) CASE_CPUARM(CHANNEL_ROWS) RSSI_ROWS, USRDATA_LINES 0, 0, IF_FAS_OFFSET(0) CASE_CPUARM(0) CASE_VARIO(LABEL(Vario)) CASE_VARIO(0) CASE_VARIO(VARIO_RANGE_ROWS) CASE_PCBTARANIS(LABEL(TopBar)) CASE_PCBTARANIS(0) SCREEN_TYPE_ROWS, 2, 2, 2, 2, SCREEN_TYPE_ROWS, 2, 2, 2, 2, CASE_CPUARM(SCREEN_TYPE_ROWS) CASE_CPUARM(2) CASE_CPUARM(2) CASE_CPUARM(2) CASE_CPUARM(2)});
MENU(STR_MENUTELEMETRY, menuTabModel, e_Telemetry, ITEM_TELEMETRY_MAX+1, {0, CASE_CPUARM(0) CHANNEL_ROWS, CHANNEL_ROWS, CASE_CPUARM(CHANNEL_ROWS) CASE_CPUARM(CHANNEL_ROWS) RSSI_ROWS, USRDATA_LINES 0, 0, IF_FAS_OFFSET(0) CASE_CPUARM(0) CASE_VARIO(LABEL(Vario)) CASE_VARIO(0) CASE_VARIO(VARIO_RANGE_ROWS) CASE_PCBTARANIS(LABEL(TopBar)) CASE_PCBTARANIS(0) SCREEN_TYPE_ROWS, 2, 2, 2, 2, SCREEN_TYPE_ROWS, 2, 2, 2, 2, CASE_CPUARM(SCREEN_TYPE_ROWS) CASE_CPUARM(2) CASE_CPUARM(2) CASE_CPUARM(2) CASE_CPUARM(2)});
uint8_t sub = m_posVert - 1;
@@ -5536,27 +5525,10 @@ void menuModelTelemetry(uint8_t event)
#if defined(CPUARM)
case ITEM_TELEMETRY_PROTOCOL_TYPE:
g_model.telemetryProtocol = selectMenuItem(TELEM_COL2, y, "Telemetry Type", "\006S.PORTD\0 ", g_model.telemetryProtocol, PROTOCOL_FRSKY_SPORT, PROTOCOL_FRSKY_D, attr, event);
g_model.telemetryProtocol = selectMenuItem(TELEM_COL2, y, STR_TELEMETRY_TYPE, "\006S.PORTD\0 ", g_model.telemetryProtocol, PROTOCOL_FRSKY_SPORT, PROTOCOL_FRSKY_D, attr, event);
break;
#endif
#if defined(CPUARM)
case ITEM_TELEMETRY_RXBATT_LABEL:
lcd_putsLeft(y, "RxBatt");
putsTelemetryChannel(TELEM_COL2+6*FW, y, TELEM_RXBATT-1, frskyData.analog[TELEM_ANA_RXBATT].value, LEFT);
break;
case ITEM_TELEMETRY_RXBATT_ALARM1:
case ITEM_TELEMETRY_RXBATT_ALARM2:
{
uint8_t alarm = (k==ITEM_TELEMETRY_RXBATT_ALARM1 ? 0 : 1);
lcd_putsLeft(y, (alarm==0 ? STR_LOWALARM : STR_CRITICALALARM));
putsTelemetryChannel(TELEM_COL2, y, TELEM_RXBATT-1, g_model.rxBattAlarms[alarm], LEFT|attr);
if (attr && (s_editMode>0 || p1valdiff)) {
g_model.rxBattAlarms[alarm] = checkIncDec(event, g_model.rxBattAlarms[alarm], 0, 255, EE_MODEL);
}
break;
}
#endif
case ITEM_TELEMETRY_A1_LABEL:
case ITEM_TELEMETRY_A2_LABEL:
#if defined(CPUARM)
+3
View File
@@ -1451,6 +1451,9 @@ bool isTelemetrySourceAvailable(int source)
return false;
#endif
if (source == TELEM_RESERVE0)
return false;
if (source >= TELEM_RESERVE1 && source <= TELEM_RESERVE5)
return false;
+16 -12
View File
@@ -252,11 +252,7 @@ void displayTopBar()
/* Rx voltage */
lcdint_t voltage = 0;
uint8_t channel = 0;
if (g_model.frsky.voltsSource == FRSKY_VOLTS_SOURCE_RXBATT) {
channel = TELEM_RXBATT-1;
voltage = frskyData.analog[TELEM_ANA_RXBATT].value;
}
else if (g_model.frsky.voltsSource <= FRSKY_VOLTS_SOURCE_A4) {
if (g_model.frsky.voltsSource <= FRSKY_VOLTS_SOURCE_A4) {
channel = TELEM_A1+g_model.frsky.voltsSource-1;
voltage = frskyData.analog[g_model.frsky.voltsSource].value;
}
@@ -368,14 +364,20 @@ void displayTimers()
}
}
#else
void displayTimers()
{
#if defined(TRANSLATIONS_CZ)
#define MAINTMR_LBL_COL (9*FW-FW/2-1)
#else
#define MAINTMR_LBL_COL (9*FW-FW/2+3)
#endif
// Main timer
if (g_model.timers[0].mode) {
TimerState & timerState = timersStates[0];
uint8_t att = DBLSIZE | (timerState.val<0 ? BLINK|INVERS : 0);
putsTimer(12*FW+2+10*FWNUM-4, FH*2, timerState.val, att, att);
putsTimerMode(timerState.val >= 0 ? 9*FW-FW/2+3 : 9*FW-FW/2-4, FH*3, g_model.timers[0].mode);
putsTimerMode(timerState.val >= 0 ? MAINTMR_LBL_COL : MAINTMR_LBL_COL-7, FH*3, g_model.timers[0].mode);
}
}
#endif
@@ -826,24 +828,26 @@ void menuMainView(uint8_t event)
lcd_vline(x-1, VSWITCH_Y-len, len);
lcd_vline(x, VSWITCH_Y-len, len);
}
#elif defined(PCBGRUVIN9X) && ROTARY_ENCODERS > 2
for (uint8_t i=0; i<NUM_LOGICAL_SWITCH; i++)
putsSwitches(2*FW-2 + (i/3)*(4*FW-2) + (i/3>1 ? 3*FW+6 : 0), 4*FH+1 + (i%3)*FH, SWSRC_SW1+i, getSwitch(SWSRC_SW1+i) ? INVERS : 0);
#elif defined(PCBGRUVIN9X)
for (uint8_t i=0; i<NUM_LOGICAL_SWITCH; i++)
putsSwitches(2*FW-2 + (i/3)*(4*FW-2) + (i/3>1 ? 3*FW : 0), 4*FH+1 + (i%3)*FH, SWSRC_SW1+i, getSwitch(SWSRC_SW1+i) ? INVERS : 0);
putsSwitches(2*FW-3 + (i/3)*(i/3>2 ? 3*FW+2 : (3*FW-1)) + (i/3>2 ? 2*FW : 0), 4*FH+1 + (i%3)*FH, SWSRC_SW1+i, getSwitch(SWSRC_SW1+i) ? INVERS : 0);
#elif !defined(PCBSTD)
for (uint8_t i=0; i<NUM_LOGICAL_SWITCH; i++)
putsSwitches(2*FW-2 + (i/3)*(4*FW-1), 4*FH+1 + (i%3)*FH, SWSRC_SW1+i, getSwitch(SWSRC_SW1+i) ? INVERS : 0);
#else
for (uint8_t i=0; i<NUM_LOGICAL_SWITCH; i++)
putsSwitches(2*FW-2 + (i/3)*(5*FW), 4*FH+1 + (i%3)*FH, SWSRC_SW1+i, getSwitch(SWSRC_SW1+i) ? INVERS : 0);
putsSwitches(2*FW-3 + (i/3)*(4*FW), 4*FH+1 + (i%3)*FH, SWSRC_SW1+i, getSwitch(SWSRC_SW1+i) ? INVERS : 0);
#endif
}
}
else { // timer2
#if defined(TRANSLATIONS_CZ)
#define TMR2_LBL_COL (20-FW/2+1)
#else
#define TMR2_LBL_COL (20-FW/2+5)
#endif
putsTimer(33+FW+2+10*FWNUM-4, FH*5, timersStates[1].val, DBLSIZE, DBLSIZE);
putsTimerMode(timersStates[1].val >= 0 ? 20-FW/2+5 : 20-FW/2-2, FH*6, g_model.timers[1].mode);
putsTimerMode(timersStates[1].val >= 0 ? TMR2_LBL_COL : TMR2_LBL_COL-7, FH*6, g_model.timers[1].mode);
// lcd_outdezNAtt(33+11*FW, FH*6, s_timerVal_10ms[1], LEADING0, 2); // 1/100s
}
#endif // PCBTARANIS
+33 -24
View File
@@ -44,7 +44,7 @@
#endif
#if defined(FRSKY_HUB) && defined(GAUGES)
uint8_t barsThresholds[THLD_MAX];
bar_threshold_t barsThresholds[THLD_MAX];
#endif
enum FrskyViews {
@@ -58,6 +58,14 @@ enum FrskyViews {
static uint8_t s_frsky_view = e_frsky_custom_screen_1;
#if LCD_W >= 212
#define BAR_LEFT 26
#define BAR_WIDTH 157
#else
#define BAR_LEFT 25
#define BAR_WIDTH 100
#endif
#if defined(PCBTARANIS)
void displayRssiLine()
{
@@ -65,8 +73,8 @@ void displayRssiLine()
lcd_hline(0, 55, 212, 0); // separator
uint8_t rssi = min((uint8_t)99, frskyData.rssi[0].value);
lcd_putsn(0, STATUS_BAR_Y, STR_RX, 2); lcd_outdezNAtt(4*FW, STATUS_BAR_Y, rssi, LEADING0, 2);
lcd_rect(25, 57, 78, 7);
lcd_filled_rect(26, 58, 19*rssi/25, 5, (rssi < getRssiAlarmValue(0)) ? DOTTED : SOLID);
lcd_rect(BAR_LEFT, 57, 78, 7);
lcd_filled_rect(BAR_LEFT+1, 58, 19*rssi/25, 5, (rssi < getRssiAlarmValue(0)) ? DOTTED : SOLID);
}
else {
lcd_putsAtt(7*FW, STATUS_BAR_Y, STR_NODATA, BLINK);
@@ -80,8 +88,8 @@ void displayRssiLine()
lcd_hline(0, 55, 128, 0); // separator
uint8_t rssi = min((uint8_t)99, frskyData.rssi[1].value);
lcd_putsLeft(STATUS_BAR_Y, STR_TX); lcd_outdezNAtt(4*FW+1, STATUS_BAR_Y, rssi, LEADING0, 2);
lcd_rect(25, 57, 38, 7);
lcd_filled_rect(26, 58, 4*rssi/11, 5, (rssi < getRssiAlarmValue(0)) ? DOTTED : SOLID);
lcd_rect(BAR_LEFT+1, 57, 38, 7);
lcd_filled_rect(BAR_LEFT+1, 58, 4*rssi/11, 5, (rssi < getRssiAlarmValue(0)) ? DOTTED : SOLID);
rssi = min((uint8_t)99, frskyData.rssi[0].value);
lcd_puts(104, STATUS_BAR_Y, STR_RX); lcd_outdezNAtt(105+4*FW, STATUS_BAR_Y, rssi, LEADING0, 2);
lcd_rect(65, 57, 38, 7);
@@ -157,12 +165,6 @@ void displayVoltageScreenLine(uint8_t y, uint8_t index)
}
}
#if LCD_W >= 212
#define BAR_WIDTH 150
#else
#define BAR_WIDTH 100
#endif
uint8_t barCoord(int16_t value, int16_t min, int16_t max)
{
return limit((uint8_t)0, (uint8_t)(((int32_t)(BAR_WIDTH-1) * (value - min)) / (max - min)), (uint8_t)BAR_WIDTH);
@@ -220,10 +222,10 @@ void menuTelemetryFrsky(uint8_t event)
if (source && barMax > barMin) {
uint8_t y = barHeight+6+i*(barHeight+6);
lcd_putsiAtt(0, y+barHeight-5, STR_VTELEMCHNS, source, 0);
lcd_rect(25, y, BAR_WIDTH+1, barHeight+2);
lcd_rect(BAR_LEFT, y, BAR_WIDTH+1, barHeight+2);
getvalue_t value = getValue(MIXSRC_FIRST_TELEM+source-1);
#if LCD_W >= 212
putsTelemetryChannel(27+BAR_WIDTH, y+barHeight-6, source-1, value, LEFT);
putsTelemetryChannel(BAR_LEFT+2+BAR_WIDTH, y+barHeight-5, source-1, value, LEFT);
#endif
getvalue_t threshold = 0;
uint8_t thresholdX = 0;
@@ -234,9 +236,14 @@ void menuTelemetryFrsky(uint8_t event)
else if (source <= TELEM_A2)
threshold = g_model.frsky.channels[source-TELEM_A1].alarms_value[0];
#if defined(FRSKY_HUB)
else
else {
#if defined(CPUARM)
threshold = barsThresholds[source-TELEM_ALT];
#else
threshold = convertBarTelemValue(source, barsThresholds[source-TELEM_ALT]);
#endif
}
#endif
if (threshold) {
thresholdX = barCoord(threshold, barMin, barMax);
@@ -251,14 +258,17 @@ void menuTelemetryFrsky(uint8_t event)
if (source == TELEM_T1 || source == TELEM_T2)
barShade = -barShade;
lcd_filled_rect(26, y+1, width, barHeight, barShade);
lcd_filled_rect(BAR_LEFT+1, y+1, width, barHeight, barShade);
for (uint8_t j=24; j<99; j+=25)
if (j>thresholdX || j>width) lcd_vline(j*BAR_WIDTH/100+26, y+1, barHeight);
for (uint8_t j=24; j<99; j+=25) {
if (j>thresholdX || j>width) {
lcd_vline(j*BAR_WIDTH/100+BAR_LEFT+1, y+1, barHeight);
}
}
if (thresholdX) {
lcd_vlineStip(26+thresholdX, y-2, barHeight+3, DOTTED);
lcd_hline(25+thresholdX, y-2, 3);
lcd_vlineStip(BAR_LEFT+1+thresholdX, y-2, barHeight+3, DOTTED);
lcd_hline(BAR_LEFT+thresholdX, y-2, 3);
}
}
else {
@@ -337,11 +347,6 @@ void menuTelemetryFrsky(uint8_t event)
lcd_putsiAtt(0, 2*FH, STR_AMPSRC, g_model.frsky.voltsSource+1, 0);
#endif
switch (g_model.frsky.voltsSource) {
#if defined(CPUARM)
case FRSKY_VOLTS_SOURCE_RXBATT:
putsTelemetryChannel(3*FW+6*FW+4, FH+1, TELEM_RXBATT-1, frskyData.analog[TELEM_ANA_RXBATT].value, DBLSIZE);
break;
#endif
case FRSKY_VOLTS_SOURCE_A1:
case FRSKY_VOLTS_SOURCE_A2:
#if defined(CPUARM)
@@ -383,7 +388,11 @@ void menuTelemetryFrsky(uint8_t event)
putsTelemetryChannel(3*FW+4+4*FW+6*FW+FW, 5*FH+1, TELEM_CONSUMPTION-1, frskyData.hub.currentConsumption, DBLSIZE);
}
else {
#if defined(CPUARM)
displayVoltageScreenLine(analog > 0 ? 5*FH : 4*FH, analog==1+FRSKY_VOLTS_SOURCE_A1 ? FRSKY_VOLTS_SOURCE_A2 : FRSKY_VOLTS_SOURCE_A1);
#else
displayVoltageScreenLine(analog > 0 ? 5*FH : 4*FH, analog ? 2-analog : 0);
#endif
if (analog == 0) displayVoltageScreenLine(6*FH, 1);
}
+8 -20
View File
@@ -262,6 +262,9 @@ void lcd_putcAtt(xcoord_t x, uint8_t y, const unsigned char c, LcdFlags flags)
if (inv) bb = 0xff;
#endif
#endif
uint8_t *lineEnd = &displayBuf[ y / 8 * LCD_W + LCD_W ];
for (int8_t i=0; i<=6; i++) {
uint8_t b = 0;
if (i==0) {
@@ -298,7 +301,7 @@ void lcd_putcAtt(xcoord_t x, uint8_t y, const unsigned char c, LcdFlags flags)
}
#endif
if (p<DISPLAY_END && !BLINKING_CHAR) {
if (p<lineEnd && !BLINKING_CHAR) {
ASSERT_IN_DISPLAY(p);
uint8_t mask = ~(0xff << ym8);
LCD_BYTE_FILTER(p, mask, b << ym8);
@@ -1216,23 +1219,6 @@ void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val,
att &= ~NO_UNIT;
putsTimer(x, y, val, att, att);
break;
#if defined(CPUARM)
case TELEM_RXBATT-1:
val = ((val*1320) + 127) / 255;
#if LCD_W >= 212
att |= PREC2;
#else
if (abs(val) < 1000) {
att |= PREC2;
}
else {
val = div10_and_round(val);
att |= PREC1;
}
#endif
putsTelemetryValue(x, y, val, UNIT_VOLTS, att);
break;
#endif
#if defined(FRSKY)
case TELEM_MIN_A1-1:
case TELEM_MIN_A2-1:
@@ -1338,6 +1324,10 @@ void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val,
// no break
#endif
case TELEM_HDG-1:
putsTelemetryValue(x, y, val, UNIT_HDG, att);
break;
default:
{
uint8_t unit = 1;
@@ -1347,8 +1337,6 @@ void putsTelemetryChannel(xcoord_t x, uint8_t y, uint8_t channel, lcdint_t val,
unit = channel + 1 - TELEM_ALT;
if (channel >= TELEM_MIN_ALT-1 && channel <= TELEM_MAX_ALT-1)
unit = 0;
if (channel == TELEM_HDG-1)
unit = 3;
putsTelemetryValue(x, y, val, pgm_read_byte(bchunit_ar+unit), att);
break;
}
+21 -19
View File
@@ -100,28 +100,30 @@ void _bootStart()
bwdt_reset();
}
if (((GPIOC->IDR & 0x00000002) == 0) || ((GPIOE->IDR & 0x00000008) == 0)) {
// Bootloader needed
const uint8_t *src;
uint8_t *dest;
uint32_t size;
if ((GPIOE->IDR & 0x00000008) == 0) {
if ((GPIOC->IDR & 0x00000002) == 0) {
// Bootloader needed
const uint8_t *src;
uint8_t *dest;
uint32_t size;
bwdt_reset();
size = sizeof(BootCode);
src = BootCode;
dest = (uint8_t *) 0x20000000;
bwdt_reset();
size = sizeof(BootCode);
src = BootCode;
dest = (uint8_t *) 0x20000000;
for (; size; size -= 1) {
*dest++ = *src++;
}
// Could check for a valid copy to RAM here
// Go execute bootloader
bwdt_reset();
uint32_t address = *(uint32_t *) 0x20000004;
((void (*)(void)) (address))(); // Go execute the loaded application
for (; size; size -= 1) {
*dest++ = *src++;
}
// Could check for a valid copy to RAM here
// Go execute bootloader
bwdt_reset();
uint32_t address = *(uint32_t *) 0x20000004;
((void (*)(void)) (address))(); // Go execute the loaded application
}
// run_application() ;
+5 -5
View File
@@ -115,8 +115,8 @@ const pm_char * openLogs()
f_puts("Time,", &g_oLogFile);
#endif
#if defined(FRSKY_SPORT)
f_puts("SWR,RSSI,A1,A2,", &g_oLogFile);
#if defined(CPUARM)
f_puts("SWR,RSSI,A1,A2,A3,A4,", &g_oLogFile);
#elif defined(FRSKY)
f_puts("Buffer,RX,TX,A1,A2,", &g_oLogFile);
#endif
@@ -196,14 +196,14 @@ void writeLogs()
f_printf(&g_oLogFile, "%d,", tmr10ms);
#endif
#if defined(FRSKY_SPORT)
f_printf(&g_oLogFile, "%d,%d,", frskyData.rssi[1].value, frskyData.rssi[0].value);
#if defined(CPUARM)
f_printf(&g_oLogFile, "%d,%d,", frskyData.swr.value, frskyData.rssi[0].value);
#elif defined(FRSKY)
f_printf(&g_oLogFile, "%d,%d,%d,", frskyStreaming, frskyData.rssi[0].value, frskyData.rssi[1].value);
#endif
#if defined(FRSKY)
for (uint8_t i=0; i<2; i++) {
for (uint8_t i=0; i<MAX_FRSKY_A_CHANNELS; i++) {
int16_t converted_value = applyChannelRatio(i, frskyData.analog[i].value);
f_printf(&g_oLogFile, "%d.%02d,", converted_value/100, converted_value%100);
}
+15 -11
View File
@@ -329,7 +329,6 @@ getvalue_t getValue(uint8_t i)
#if defined(FRSKY)
#if defined(CPUARM)
else if (i==MIXSRC_FIRST_TELEM-1+TELEM_SWR) return frskyData.swr.value;
else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RXBATT) return frskyData.analog[TELEM_ANA_RXBATT].value;
#endif
else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RSSI_TX) return frskyData.rssi[1].value;
else if (i==MIXSRC_FIRST_TELEM-1+TELEM_RSSI_RX) return frskyData.rssi[0].value;
@@ -689,7 +688,7 @@ void evalFlightModeMixes(uint8_t mode, uint8_t tick10ms)
//========== DELAYS ===============
delayval_t _swOn = swOn[i].now;
delayval_t _swPrev = swOn[i].prev;
bool swTog = (mixEnabled != _swOn);
bool swTog = (mixEnabled > _swOn+DELAY_POS_MARGIN || mixEnabled < _swOn-DELAY_POS_MARGIN);
if (mode==e_perout_mode_normal && swTog) {
if (!swOn[i].delay) _swPrev = _swOn;
swOn[i].delay = (mixEnabled > _swOn ? md->delayUp : md->delayDown) * (100/DELAY_STEP);
@@ -703,15 +702,20 @@ void evalFlightModeMixes(uint8_t mode, uint8_t tick10ms)
else if (mixEnabled)
continue;
}
else if (!mixEnabled) {
if ((md->speedDown || md->speedUp) && md->mltpx!=MLTPX_REP) {
if (mixCondition) {
v = (md->mltpx == MLTPX_ADD ? 0 : RESX);
apply_offset_and_curve = false;
}
else {
if (mode==e_perout_mode_normal) {
swOn[i].now = swOn[i].prev = mixEnabled;
}
else if (mixCondition) {
continue;
if (!mixEnabled) {
if ((md->speedDown || md->speedUp) && md->mltpx!=MLTPX_REP) {
if (mixCondition) {
v = (md->mltpx == MLTPX_ADD ? 0 : RESX);
apply_offset_and_curve = false;
}
}
else if (mixCondition) {
continue;
}
}
}
@@ -824,7 +828,7 @@ void evalFlightModeMixes(uint8_t mode, uint8_t tick10ms)
//========== OFFSET / AFTER ===============
if (apply_offset_and_curve) {
int16_t offset = GET_GVAR(MD_OFFSET(md), GV_RANGELARGE_NEG, GV_RANGELARGE, s_current_mixer_flight_mode);
if (offset) dv += calc100toRESX_16Bits(offset) << 8;
if (offset) dv += int32_t(calc100toRESX_16Bits(offset)) << 8;
}
//========== DIFFERENTIAL =========
+29 -27
View File
@@ -70,6 +70,14 @@
#define PACK( __Declaration__ ) __Declaration__ __attribute__((__packed__))
#endif
#if defined (CPUARM)
#define ARM_FIELD(x) x;
#define AVR_FIELD(x)
#else
#define ARM_FIELD(x)
#define AVR_FIELD(x) x;
#endif
#if defined(PCBTARANIS)
#define MAX_MODELS 60
#define NUM_CHNOUT 32 // number of real output channels CH1-CH32
@@ -318,7 +326,7 @@ PACK(typedef struct t_ScriptData {
TRAINER_MODULE
};
#define MODELDATA_BITMAP char bitmap[LEN_BITMAP_NAME];
#define MODELDATA_EXTRA uint8_t externalModule; uint8_t trainerMode; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][4]; uint8_t nPotsToWarn; int8_t potPosition[NUM_POTS]; uint8_t rxBattAlarms[2];
#define MODELDATA_EXTRA uint8_t externalModule; uint8_t trainerMode; ModuleData moduleData[NUM_MODULES+1]; char curveNames[MAX_CURVES][6]; ScriptData scriptsData[MAX_SCRIPTS]; char inputNames[MAX_INPUTS][4]; uint8_t nPotsToWarn; int8_t potPosition[NUM_POTS]; uint8_t spare[2];
#define LIMITDATA_EXTRA char name[LEN_CHANNEL_NAME]; int8_t curve;
#define swstate_t uint16_t
#elif defined(PCBSKY9X)
@@ -407,8 +415,9 @@ PACK(typedef struct t_EEGeneral {
uint8_t mavbaud:3;
SPLASH_MODE; /* 3bits */
int8_t hapticMode:2; // -2=quiet, -1=only alarms, 0=no keys, 1=all
uint8_t blOffBright:4;
uint8_t blOnBright:4;
AVR_FIELD(uint8_t blOffBright:4)
AVR_FIELD(uint8_t blOnBright:4)
ARM_FIELD(int8_t switchesDelay)
uint8_t lightAutoOff;
uint8_t templateSetup; // RETA order for receiver channels
int8_t PPM_Multiplier;
@@ -430,6 +439,8 @@ PACK(typedef struct t_EEGeneral {
}) EEGeneral;
#define SWITCHES_DELAY() uint8_t(15+g_eeGeneral.switchesDelay)
#define SWITCHES_DELAY_NONE (-15)
#define HAPTIC_STRENGTH() (3+g_eeGeneral.hapticStrength)
#if defined(PCBTARANIS)
@@ -830,33 +841,35 @@ enum Functions {
FUNC_MAX
};
#define HAS_ENABLE_PARAM(func) (func < FUNC_FIRST_WITHOUT_ENABLE)
#define HAS_ENABLE_PARAM(func) ((func) < FUNC_FIRST_WITHOUT_ENABLE)
#if defined(VOICE)
#define IS_PLAY_FUNC(func) ((func) >= FUNC_PLAY_SOUND && func <= FUNC_PLAY_VALUE)
#else
#define IS_PLAY_FUNC(func) ((func) == FUNC_PLAY_SOUND)
#endif
#if defined(CPUARM)
#define IS_PLAY_BOTH_FUNC(func) (0)
#define IS_VOLUME_FUNC(func) (func == FUNC_VOLUME)
#define IS_VOLUME_FUNC(func) ((func) == FUNC_VOLUME)
#else
#define IS_PLAY_BOTH_FUNC(func) (func == FUNC_PLAY_BOTH)
#define IS_PLAY_BOTH_FUNC(func) ((func) == FUNC_PLAY_BOTH)
#define IS_VOLUME_FUNC(func) (0)
#endif
#if defined(GVARS)
#define IS_ADJUST_GV_FUNC(func) (func == FUNC_ADJUST_GVAR)
#define IS_ADJUST_GV_FUNC(func) ((func) == FUNC_ADJUST_GVAR)
#else
#define IS_ADJUST_GV_FUNC(func) (0)
#endif
#if defined(HAPTIC)
#define IS_HAPTIC_FUNC(func) (func == FUNC_HAPTIC)
#define IS_HAPTIC_FUNC(func) ((func) == FUNC_HAPTIC)
#else
#define IS_HAPTIC_FUNC(func) (0)
#endif
#if defined(VOICE)
#define HAS_REPEAT_PARAM(func) (func == FUNC_PLAY_SOUND || (func >= FUNC_PLAY_TRACK && func <= FUNC_PLAY_VALUE) || IS_HAPTIC_FUNC(func))
#else
#define HAS_REPEAT_PARAM(func) (func == FUNC_PLAY_SOUND || IS_HAPTIC_FUNC(func))
#endif
#define HAS_REPEAT_PARAM(func) (IS_PLAY_FUNC(func) || IS_HAPTIC_FUNC(func))
enum ResetFunctionParam {
FUNC_RESET_TIMER1,
@@ -1025,7 +1038,7 @@ enum TelemetrySource {
TELEM_RSSI_TX,
TELEM_RSSI_RX,
#if defined(CPUARM)
TELEM_RXBATT,
TELEM_RESERVE0,
#endif
TELEM_A_FIRST,
TELEM_A1=TELEM_A_FIRST,
@@ -1175,9 +1188,6 @@ enum FrskyCurrentSource {
};
enum FrskyVoltsSource {
#if defined(CPUARM)
FRSKY_VOLTS_SOURCE_RXBATT,
#endif
FRSKY_VOLTS_SOURCE_A1,
FRSKY_VOLTS_SOURCE_A2,
#if defined(CPUARM)
@@ -1669,14 +1679,6 @@ PACK(typedef struct {
MODELDATA_BITMAP
}) ModelHeader;
#if defined (CPUARM)
#define ARM_FIELD(x) x;
#define AVR_FIELD(x)
#else
#define ARM_FIELD(x)
#define AVR_FIELD(x) x;
#endif
enum ThrottleSources {
THROTTLE_SOURCE_THR,
#if defined(PCBTARANIS)
@@ -1702,8 +1704,8 @@ enum TelemetryProtocol
PACK(typedef struct t_ModelData {
ModelHeader header;
TimerData timers[MAX_TIMERS];
AVR_FIELD(uint8_t protocol:3);
ARM_FIELD(uint8_t telemetryProtocol:3);
AVR_FIELD(uint8_t protocol:3)
ARM_FIELD(uint8_t telemetryProtocol:3)
uint8_t thrTrim:1; // Enable Throttle Trim
AVR_FIELD(int8_t ppmNCH:4)
ARM_FIELD(int8_t spare2:4)
+31 -23
View File
@@ -439,8 +439,6 @@ void modelDefault(uint8_t id)
#if defined(PCBTARANIS)
g_model.frsky.channels[0].ratio = 132;
g_model.rxBattAlarms[0] = 0;
g_model.rxBattAlarms[1] = 83; // 4.3V
#endif
#if defined(MAVLINK)
@@ -1082,7 +1080,9 @@ void checkTHR()
else {
calibratedStick[thrchn] = -1024;
#if !defined(PCBTARANIS)
rawAnas[thrchn] = anas[thrchn] = calibratedStick[thrchn];
if (thrchn < NUM_STICKS) {
rawAnas[thrchn] = anas[thrchn] = calibratedStick[thrchn];
}
#endif
MESSAGE(STR_THROTTLEWARN, STR_THROTTLENOTIDLE, STR_PRESSANYKEYTOSKIP, AU_THROTTLE_ALERT);
}
@@ -1650,15 +1650,10 @@ PLAY_FUNCTION(playValue, uint8_t idx)
case MIXSRC_FIRST_TELEM+TELEM_TM2-1:
PLAY_DURATION(val, 0);
break;
#if defined(CPUARM)
#if defined(CPUARM) && defined(FRSKY)
case MIXSRC_FIRST_TELEM+TELEM_SWR-1:
PLAY_NUMBER(val, 0, 0);
break;
case MIXSRC_FIRST_TELEM+TELEM_RXBATT-1:
if (TELEMETRY_STREAMING()) {
PLAY_NUMBER((val*132+127)/255, 1+UNIT_VOLTS, PREC1);
}
break;
#endif
#if defined(FRSKY)
case MIXSRC_FIRST_TELEM+TELEM_RSSI_TX-1:
@@ -1833,9 +1828,14 @@ void evalFunctions()
CustomFnData *sd = &g_model.funcSw[i];
int8_t swtch = CFN_SWITCH(sd);
if (swtch) {
MASK_CFN_TYPE switch_mask = ((MASK_CFN_TYPE)1 << i);
MASK_CFN_TYPE switch_mask = ((MASK_CFN_TYPE)1 << i);
#if defined(CPUARM)
bool active = getSwitch(swtch, IS_PLAY_FUNC(CFN_FUNC(sd)) ? GETSWITCH_MIDPOS_DELAY : 0);
#else
bool active = getSwitch(swtch);
#endif
if (HAS_ENABLE_PARAM(CFN_FUNC(sd))) {
active &= (bool)CFN_ACTIVE(sd);
@@ -2025,6 +2025,10 @@ void evalFunctions()
PUSH_CUSTOM_PROMPT(active ? param : param+1, i+1);
}
}
if (!active) {
// PLAY_BOTH would change activeFnSwitches otherwise
switch_mask = 0;
}
break;
}
#else
@@ -2152,11 +2156,11 @@ void doMixerCalculations()
val = val - gModelMin;
#if defined(PPM_LIMITS_SYMETRICAL)
if (lim->symetrical)
if (lim->symetrical) {
val -= calc1000toRESX(lim->offset);
}
#endif
gModelMax -= gModelMin; // we compare difference between Max and Mix for recaling needed; Max and Min are shifted to 0 by default
// usually max is 1024 min is -1024 --> max-min = 2048 full range
@@ -2178,7 +2182,7 @@ void doMixerCalculations()
#ifdef PCBTARANIS
val = RESX + calibratedStick[g_model.thrTraceSrc == 0 ? THR_STICK : g_model.thrTraceSrc+NUM_STICKS-1];
#else
val = RESX + rawAnas[g_model.thrTraceSrc == 0 ? THR_STICK : g_model.thrTraceSrc+NUM_STICKS-1];
val = RESX + (g_model.thrTraceSrc == 0 ? rawAnas[THR_STICK] : calibratedStick[g_model.thrTraceSrc+NUM_STICKS-1]);
#endif
}
@@ -2201,8 +2205,6 @@ void doMixerCalculations()
timerState->sum = 0;
}
// value for time described in timer->mode
// OFFABSTHsTH%THt
if (tm == TMRMODE_THR_REL) {
timerState->cnt++;
timerState->sum+=val;
@@ -2223,21 +2225,22 @@ void doMixerCalculations()
// @@@ open.20.fsguruh: why so complicated? we have already a s_sum field; use it for the half seconds (not showable) as well
// check for s_cnt[i]==0 is not needed because we are shure it is at least 1
#if defined(ACCURAT_THROTTLE_TIMER)
if ((timerState->sum/timerState->cnt)>=128) { // throttle was normalized to 0 to 128 value (throttle/64*2 (because - range is added as well)
if ((timerState->sum/timerState->cnt) >= 128) { // throttle was normalized to 0 to 128 value (throttle/64*2 (because - range is added as well)
newTimerVal++; // add second used of throttle
timerState->sum-=128*timerState->cnt;
timerState->sum -= 128*timerState->cnt;
}
#else
if ((timerState->sum/timerState->cnt)>=32) { // throttle was normalized to 0 to 32 value (throttle/16*2 (because - range is added as well)
if ((timerState->sum/timerState->cnt) >= 32) { // throttle was normalized to 0 to 32 value (throttle/16*2 (because - range is added as well)
newTimerVal++; // add second used of throttle
timerState->sum-=32*timerState->cnt;
timerState->sum -= 32*timerState->cnt;
}
#endif
timerState->cnt=0;
}
else if (tm == TMRMODE_THR_TRG) {
if (val || newTimerVal > 0)
if (val || newTimerVal > 0) {
newTimerVal++;
}
}
else {
if (tm > 0) tm -= (TMR_VAROFS-1);
@@ -3003,6 +3006,8 @@ ISR(USART0_UDRE_vect)
#endif
#endif
#define INSTANT_TRIM_MARGIN 10 /* around 1% */
void instantTrim()
{
evalInputs(e_perout_mode_notrainer);
@@ -3012,11 +3017,14 @@ void instantTrim()
// don't instant trim the throttle stick
uint8_t trim_phase = getTrimFlightPhase(s_current_mixer_flight_mode, i);
#if defined(PCBTARANIS)
int16_t trim = limit<int16_t>(TRIM_EXTENDED_MIN, (calibratedStick[i] + trims[i]) / 2, TRIM_EXTENDED_MAX);
int16_t delta = calibratedStick[i];
#else
int16_t trim = limit<int16_t>(TRIM_EXTENDED_MIN, (anas[i] + trims[i]) / 2, TRIM_EXTENDED_MAX);
int16_t delta = anas[i];
#endif
setTrimValue(trim_phase, i, trim);
if (abs(delta) >= INSTANT_TRIM_MARGIN) {
int16_t trim = limit<int16_t>(TRIM_EXTENDED_MIN, (delta + trims[i]) / 2, TRIM_EXTENDED_MAX);
setTrimValue(trim_phase, i, trim);
}
}
}
+24 -5
View File
@@ -696,7 +696,14 @@ void perMain();
NOINLINE void per10ms();
getvalue_t getValue(uint8_t i);
#if defined(CPUARM)
#define GETSWITCH_MIDPOS_DELAY 1
bool getSwitch(int8_t swtch, uint8_t flags=0);
#else
bool getSwitch(int8_t swtch);
#endif
void logicalSwitchesTimerTick();
void logicalSwitchesReset();
@@ -1175,6 +1182,7 @@ void evalFunctions();
#if defined(CPUARM)
#define ACTIVE_PHASES_TYPE uint16_t
#define DELAY_POS_SHIFT 0
#define DELAY_POS_MARGIN 3
#define delayval_t int16_t
PACK(typedef struct t_SwOn {
uint16_t delay;
@@ -1186,6 +1194,7 @@ PACK(typedef struct t_SwOn {
#else
#define ACTIVE_PHASES_TYPE uint8_t
#define DELAY_POS_SHIFT 10
#define DELAY_POS_MARGIN 0
#define delayval_t int8_t
PACK(typedef struct t_SwOn {
uint16_t delay:10;
@@ -1229,9 +1238,8 @@ uint8_t lswFamily(uint8_t func);
int16_t lswTimerValue(delayval_t val);
#if defined(CPUARM)
#define MASK_CFN_TYPE uint32_t // current max = 32 function switches
#define MASK_CFN_TYPE uint64_t // current max = 64 function switches
#define MASK_FUNC_TYPE uint32_t // current max = 32 functions
#elif defined(CPUM64)
#define MASK_CFN_TYPE uint16_t // current max = 16 function switches
#define MASK_FUNC_TYPE uint8_t // current max = 8 functions
@@ -1363,8 +1371,6 @@ enum AUDIO_SOUNDS {
AU_RSSI_ORANGE,
AU_RSSI_RED,
AU_SWR_RED,
AU_RXBATT_ORANGE,
AU_RXBATT_RED,
AU_TELEMETRY_LOST,
AU_TELEMETRY_BACK,
#endif
@@ -1564,11 +1570,24 @@ enum BarThresholdIdx {
THLD_DIST,
THLD_GPSALT,
THLD_CELL,
THLD_CELLS_SUM,
THLD_VFAS,
THLD_CURRENT,
THLD_CONSUMPTION,
THLD_MAX,
};
extern uint8_t barsThresholds[THLD_MAX];
#if defined(CPUARM)
typedef uint16_t bar_threshold_t;
#define FILL_THRESHOLD(idx, val) barsThresholds[idx] = (val)
#else
typedef uint8_t bar_threshold_t;
#define FILL_THRESHOLD(idx, val) barsThresholds[idx] = 128 + (val)
#endif
extern bar_threshold_t barsThresholds[THLD_MAX];
#else
#define FILL_THRESHOLD(idx, val)
#endif
#if defined(FRSKY)
+2
View File
@@ -678,5 +678,7 @@ void unlockFlash() { }
void lockFlash() { }
void writeFlash(uint32_t *address, uint32_t *buffer) { SIMU_SLEEP(100); }
uint32_t isBootloaderStart(const void *block) { return 1; }
void turnBacklightOn(uint8_t level, uint8_t color) { }
void turnBacklightOff(void) { }
#endif
+15 -10
View File
@@ -96,7 +96,6 @@ uint32_t check2PosSwitchPosition(EnumKeys sw)
return result;
}
#define DELAY_SWITCH_3POS 15/*150ms*/
uint32_t check3PosSwitchPosition(uint8_t idx, EnumKeys sw, bool startup)
{
uint32_t result;
@@ -112,7 +111,7 @@ uint32_t check3PosSwitchPosition(uint8_t idx, EnumKeys sw, bool startup)
result = (1 << index);
switchesMidposStart[idx] = 0;
}
else if (startup || (switchesPos & (1 << (sw - SW_SA0 + 1))) || (switchesMidposStart[idx] && (tmr10ms_t)(get_tmr10ms() - switchesMidposStart[idx]) > DELAY_SWITCH_3POS)) {
else if (startup || (switchesPos & (1 << (sw - SW_SA0 + 1))) || g_eeGeneral.switchesDelay==SWITCHES_DELAY_NONE || (switchesMidposStart[idx] && (tmr10ms_t)(get_tmr10ms() - switchesMidposStart[idx]) > SWITCHES_DELAY())) {
index = sw - SW_SA0 + 1;
result = (1 << index);
switchesMidposStart[idx] = 0;
@@ -159,7 +158,7 @@ void getSwitchesPosition(bool startup)
potsLastposStart[i] = get_tmr10ms();
potsPos[i] = (pos << 4) | previousStoredPos;
}
else if (startup || (tmr10ms_t)(get_tmr10ms() - potsLastposStart[i]) > DELAY_SWITCH_3POS) {
else if (startup || g_eeGeneral.switchesDelay==SWITCHES_DELAY_NONE || (tmr10ms_t)(get_tmr10ms() - potsLastposStart[i]) > SWITCHES_DELAY()) {
potsLastposStart[i] = 0;
potsPos[i] = (pos << 4) | pos;
if (previousStoredPos != pos) {
@@ -172,8 +171,6 @@ void getSwitchesPosition(bool startup)
}
#define SWITCH_POSITION(sw) (switchesPos & (1<<(sw)))
#define POT_POSITION(sw) ((potsPos[(sw)/XPOTS_MULTIPOS_COUNT] & 0x0f) == ((sw) % XPOTS_MULTIPOS_COUNT))
#else
#define SWITCH_POSITION(idx) switchState((EnumKeys)(SW_BASE+(idx)))
#endif
bool getLogicalSwitch(uint8_t idx)
@@ -249,15 +246,13 @@ bool getLogicalSwitch(uint8_t idx)
y = convertLswTelemValue(ls);
#if defined(FRSKY_HUB) && defined(GAUGES)
// Fill the telemetry bars threshold array
if (s == LS_FAMILY_OFS) {
uint8_t idx = v1-MIXSRC_FIRST_TELEM+1-TELEM_ALT;
if (idx < THLD_MAX) {
// Fill the threshold array
barsThresholds[idx] = 128 + ls->v2;
FILL_THRESHOLD(idx, ls->v2);
}
}
#endif
}
else if (v1 >= MIXSRC_GVAR1) {
y = ls->v2;
@@ -372,7 +367,11 @@ bool getLogicalSwitch(uint8_t idx)
return result;
}
#if defined(CPUARM)
bool getSwitch(int8_t swtch, uint8_t flags)
#else
bool getSwitch(int8_t swtch)
#endif
{
bool result;
@@ -388,7 +387,13 @@ bool getSwitch(int8_t swtch)
result = true;
}
else if (cs_idx <= SWSRC_LAST_SWITCH) {
result = SWITCH_POSITION(cs_idx-SWSRC_FIRST_SWITCH);
#if defined(PCBTARANIS)
if (flags & GETSWITCH_MIDPOS_DELAY)
result = SWITCH_POSITION(cs_idx-SWSRC_FIRST_SWITCH);
else
#endif
result = switchState((EnumKeys)(SW_BASE+cs_idx-SWSRC_FIRST_SWITCH));
#if defined(MODULE_ALWAYS_SEND_PULSES)
if (startupWarningState < STARTUP_WARNING_DONE) {
// if throttle or switch warning is currently active, ignore actual stick position and use wanted values
+2 -1
View File
@@ -82,12 +82,13 @@
#define JACK_PPM_OUT() PORTG |= (1<<OUT_G_SIM_CTL)
#define JACK_PPM_IN() PORTG &= ~(1<<OUT_G_SIM_CTL)
#define sdDone()
// SD driver
#if !defined(SIMU)
bool sdMounted();
void sdMountPoll();
void sdPoll10ms();
#define sdDone()
#define SD_IS_HC() (0)
#define SD_GET_BLOCKNR() (0)
+1 -1
View File
@@ -47,7 +47,7 @@ int8_t Coproc_maxtemp=-127 ;
int8_t Coproc_valid ;
bool get_onlytemp;
#if !defined(SIMU)
static uint8_t *Twi_read_address ;
// TODO not used? static uint8_t *Twi_read_address ;
#endif
static uint8_t TwiOperation ;
@@ -169,17 +169,3 @@ void boardInit()
}
#endif
#if defined(REVPLUS)
void turnBacklightOn(uint8_t level, uint8_t color)
{
TIM4->CCR4 = (100-level)*color;
TIM4->CCR2 = (100-level)*(100-color);
}
void turnBacklightOff(void)
{
TIM4->CCR4 = 0;
TIM4->CCR2 = 0;
}
#endif
+14 -1
View File
@@ -161,7 +161,7 @@ static void LCD_BL_Config()
TIM4->CCMR2 = TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2 ; // PWM
TIM4->CCER = TIM_CCER_CC4E | TIM_CCER_CC2E ;
int BacklightBrightness = 40 ;
int BacklightBrightness = 0 ;
TIM4->CCR2 = BacklightBrightness ;
TIM4->CCR4 = BacklightBrightness ;
TIM4->EGR = 0 ;
@@ -257,3 +257,16 @@ void lcdSetRefVolt(uint8_t val)
AspiCmd(val+CONTRAST_OFS); //0--255
}
#if defined(REVPLUS)
void turnBacklightOn(uint8_t level, uint8_t color)
{
TIM4->CCR4 = (100-level)*color;
TIM4->CCR2 = (100-level)*(100-color);
}
void turnBacklightOff(void)
{
TIM4->CCR4 = 0;
TIM4->CCR2 = 0;
}
#endif
+11 -21
View File
@@ -134,10 +134,6 @@ lcdint_t applyChannelRatio(uint8_t channel, lcdint_t val)
}
#if defined(CPUARM)
inline bool rxBattAlarmRaised(uint8_t alarm)
{
return g_model.rxBattAlarms[alarm] > 0 && frskyData.analog[TELEM_ANA_RXBATT].value < g_model.rxBattAlarms[alarm];
}
inline bool alarmRaised(uint8_t channel, uint8_t idx)
{
return g_model.frsky.channels[channel].ratio > 0 && g_model.frsky.channels[channel].alarms_value[idx] > 0 && frskyData.analog[channel].value < g_model.frsky.channels[channel].alarms_value[idx];
@@ -269,7 +265,6 @@ NOINLINE void processSerialData(uint8_t data)
enum AlarmsCheckSteps {
ALARM_SWR_STEP,
ALARM_RSSI_STEP,
ALARM_RXBATT_STEP,
ALARM_A1_STEP,
ALARM_A2_STEP,
ALARM_A3_STEP,
@@ -317,7 +312,9 @@ void telemetryWakeup()
static uint8_t frskyTxDelay = 5;
if (frskyAlarmsSendState && (--frskyTxDelay == 0)) {
frskyTxDelay = 5; // 50ms
#if !defined(SIMU)
frskyDSendNextAlarm();
#endif
}
}
#endif
@@ -357,16 +354,6 @@ void telemetryWakeup()
alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */
}
}
else if (alarmsCheckStep == ALARM_RXBATT_STEP) {
if (rxBattAlarmRaised(1)) {
AUDIO_RXBATT_RED();
alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */
}
else if (rxBattAlarmRaised(0)) {
AUDIO_RXBATT_ORANGE();
alarmsCheckTime = get_tmr10ms() + 300; /* next check in 3 seconds */
}
}
else if (alarmsCheckStep == ALARM_A1_STEP) {
if (alarmRaised(TELEM_ANA_A1, 1)) {
AUDIO_A1_RED();
@@ -446,10 +433,7 @@ void telemetryInterrupt10ms()
// power calculation
uint8_t channel = g_model.frsky.voltsSource;
#if defined(CPUARM)
if (channel == FRSKY_VOLTS_SOURCE_RXBATT) {
voltage = ((frskyData.analog[TELEM_ANA_RXBATT].value * 132) + 127) / 255;
}
else if (channel <= FRSKY_VOLTS_SOURCE_A4) {
if (channel <= FRSKY_VOLTS_SOURCE_A4) {
voltage = applyChannelRatio(channel, frskyData.analog[channel].value) / 10;
}
#else
@@ -503,8 +487,10 @@ void telemetryInterrupt10ms()
frskyStreaming--;
}
else {
#if !defined(SIMU)
frskyData.rssi[0].set(0);
frskyData.rssi[1].set(0);
#endif
}
}
@@ -534,6 +520,10 @@ void telemetryReset()
frskyData.rssi[1].value = 75;
frskyData.analog[TELEM_ANA_A1].set(120, UNIT_VOLTS);
frskyData.analog[TELEM_ANA_A2].set(240, UNIT_VOLTS);
#if defined(CPUARM)
frskyData.analog[TELEM_ANA_A3].set(100, UNIT_VOLTS);
frskyData.analog[TELEM_ANA_A4].set(200, UNIT_VOLTS);
#endif
frskyData.hub.fuelLevel = 75;
frskyData.hub.rpm = 12000;
frskyData.hub.vfas = 100;
@@ -571,8 +561,8 @@ void telemetryReset()
frskyData.hub.temperature1 = -30;
frskyData.hub.maxTemperature1 = 100;
frskyData.hub.current = 5;
frskyData.hub.maxCurrent = 56;
frskyData.hub.current = 55;
frskyData.hub.maxCurrent = 65;
#endif
}
-1
View File
@@ -298,7 +298,6 @@ enum TelemAnas {
#if defined(CPUARM)
TELEM_ANA_A3,
TELEM_ANA_A4,
TELEM_ANA_RXBATT,
#endif
TELEM_ANA_COUNT
};
+13 -3
View File
@@ -215,18 +215,26 @@ void parseTelemHubByte(uint8_t byte)
#endif
case offsetof(FrskySerialData, volts):
// Voltage => Cell number + Cell voltage
{
// Voltage => Cell number + Cell voltage
uint8_t battnumber = ((frskyData.hub.volts & 0x00F0) >> 4);
if (battnumber < 12) {
if (frskyData.hub.cellsCount < battnumber+1) {
frskyData.hub.cellsCount = battnumber+1;
}
uint8_t cellVolts = (uint8_t)(((((frskyData.hub.volts & 0xFF00) >> 8) + ((frskyData.hub.volts & 0x000F) << 8)))/10);
#if defined(CPUARM)
uint16_t cellVolts = (uint16_t)(((((frskyData.hub.volts & 0xFF00) >> 8) + ((frskyData.hub.volts & 0x000F) << 8))) / 5);
#else
uint8_t cellVolts = (uint8_t)(((((frskyData.hub.volts & 0xFF00) >> 8) + ((frskyData.hub.volts & 0x000F) << 8))) / 10);
#endif
frskyData.hub.cellVolts[battnumber] = cellVolts;
if (!frskyData.hub.minCellVolts || cellVolts < frskyData.hub.minCellVolts || battnumber==frskyData.hub.minCellIdx) {
if (!frskyData.hub.minCellVolts || cellVolts<frskyData.hub.minCellVolts || battnumber==frskyData.hub.minCellIdx) {
frskyData.hub.minCellIdx = battnumber;
frskyData.hub.minCellVolts = cellVolts;
#if defined(CPUARM)
if (!frskyData.hub.minCell || frskyData.hub.minCellVolts<frskyData.hub.minCell)
frskyData.hub.minCell = frskyData.hub.minCellVolts;
#endif
}
}
break;
@@ -427,7 +435,9 @@ void frskySendPacket(uint8_t type, uint8_t value, uint8_t p1, uint8_t p2)
*ptr++ = START_STOP; // Start of packet
frskyTxBufferCount = ptr - &frskyTxBuffer[0];
#if !defined(SIMU)
telemetryTransmitBuffer();
#endif
}
inline void frskyDSendNextAlarm(void)
+6 -2
View File
@@ -244,12 +244,16 @@ void processHubPacket(uint8_t id, uint16_t value)
if (frskyData.hub.cellsCount < battnumber+1) {
frskyData.hub.cellsCount = battnumber+1;
}
#if defined(CPUARM)
uint16_t cellVolts = (uint16_t)(((((frskyData.hub.volts & 0xFF00) >> 8) + ((frskyData.hub.volts & 0x000F) << 8))) / 5);
#else
uint8_t cellVolts = (uint8_t)(((((frskyData.hub.volts & 0xFF00) >> 8) + ((frskyData.hub.volts & 0x000F) << 8))) / 10);
#endif
frskyData.hub.cellVolts[battnumber] = cellVolts;
if (!frskyData.hub.minCellVolts || cellVolts<frskyData.hub.minCellVolts || battnumber==frskyData.hub.minCellIdx) {
frskyData.hub.minCellIdx = battnumber;
frskyData.hub.minCellVolts = cellVolts;
if (!frskyData.hub.minCell || frskyData.hub.minCellVolts < frskyData.hub.minCell)
if (!frskyData.hub.minCell || frskyData.hub.minCellVolts<frskyData.hub.minCell)
frskyData.hub.minCell = frskyData.hub.minCellVolts;
}
}
@@ -321,7 +325,7 @@ void frskySportProcessPacket(uint8_t *packet)
#endif
}
else if (appId == BATT_ID) {
frskyData.analog[TELEM_ANA_RXBATT].set(SPORT_DATA_U8(packet), UNIT_VOLTS);
frskyData.analog[TELEM_ANA_A1].set(SPORT_DATA_U8(packet), UNIT_VOLTS);
}
else if ((appId >> 8) == 0) {
// The old FrSky IDs
+2
View File
@@ -243,6 +243,7 @@ const pm_char STR_PITCH_AT_MAX[] PROGMEM = TR_PITCH_AT_MAX;
const pm_char STR_REPEAT_AT_ZERO[] PROGMEM = TR_REPEAT_AT_ZERO;
#endif
const pm_char STR_RXCHANNELORD[] PROGMEM = TR_RXCHANNELORD;
const pm_char STR_SWITCHES_DELAY[] PROGMEM = TR_SWITCHES_DELAY;
const pm_char STR_SLAVE[] PROGMEM = TR_SLAVE;
const pm_char STR_MODESRC[] PROGMEM = TR_MODESRC;
const pm_char STR_MULTIPLIER[] PROGMEM = TR_MULTIPLIER;
@@ -500,6 +501,7 @@ const pm_char STR_BLCOLOR[] PROGMEM = TR_BLCOLOR;
const pm_char STR_RESET_SUBMENU[] PROGMEM = TR_RESET_SUBMENU;
const pm_char STR_LOWALARM[] PROGMEM = TR_LOWALARM;
const pm_char STR_CRITICALALARM[] PROGMEM = TR_CRITICALALARM;
const pm_char STR_TELEMETRY_TYPE[] PROGMEM = TR_TELEMETRY_TYPE;
#endif
#if defined(PCBTARANIS)
+3 -1
View File
@@ -403,6 +403,7 @@ extern const pm_char STR_PITCH_AT_ZERO[];
extern const pm_char STR_PITCH_AT_MAX[];
extern const pm_char STR_REPEAT_AT_ZERO[];
extern const pm_char STR_RXCHANNELORD[];
extern const pm_char STR_SWITCHES_DELAY[];
extern const pm_char STR_SLAVE[];
extern const pm_char STR_MODESRC[];
extern const pm_char STR_MULTIPLIER[];
@@ -681,12 +682,13 @@ extern const pm_char STR_BLCOLOR[];
extern const pm_char STR_RESET_SUBMENU[];
extern const pm_char STR_LOWALARM[];
extern const pm_char STR_CRITICALALARM[];
extern const pm_char STR_TELEMETRY_TYPE[];
#endif
#if defined(PCBTARANIS)
extern const pm_char STR_BYTES[];
extern const pm_char STR_ANTENNAPROBLEM[];
extern const pm_char STR_MODULE[];
extern const pm_char STR_MODULE[];
extern const pm_char STR_ENABLE_POPUP[];
extern const pm_char STR_DISABLE_POPUP[];
extern const pm_char STR_CURVE_PRESET[];
+8 -6
View File
@@ -292,7 +292,7 @@
#define TR_TELEM_RESERVE TR("[--]", "[---]")
#define TR_TELEM_TIME TR("Time", "Time\0")
#define TR_SWR TR("SWR\0", "SWR\0 ")
#define TR_RX_BATT TR("RxBt", "RxBat")
#define TR_RX_BATT TR("[NA]", "[NA]\0")
#define TR_A3_A4 TR("A3\0 ""A4\0 ", "A3\0 ""A4\0 ")
#define TR_A3_A4_MIN TR("A3-\0""A4-\0", "A3-\0 ""A4-\0 ")
#else
@@ -358,7 +358,7 @@
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define LEN_VOLTSRC TR("\003", "\007")
#define TR_VOLTSRC TR("RxV""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "RxBatt\0""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#else
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells\0 ")
@@ -444,8 +444,8 @@
#define TR_VSRCRAW "---\0""Směr""Výšk""Plyn""Křid" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW "TrmS" "TrmV" "TrmP" "TrmK" TR_SW_VSRCRAW
#define LEN_VTMRMODES "\003"
#define TR_VTMRMODES "VYP""ABS""PL>""PL%""PL*"
#define LEN_VTMRMODES "\004"
#define TR_VTMRMODES "VYP\0""ABS\0""Pln>""Pln%""Pln*"
#define LEN_VTRAINERMODES "\006"
#define TR_VTRAINERMODES "Učitel""Žák\0 "
@@ -497,7 +497,7 @@
#define TR_ELIMITS TR("Limit +25%", "Kanál +/- 125%")
#define TR_ETRIMS TR("širší Trim", "Široký trim")
#define TR_TRIMINC TR("Krok Trimu", "Krok trimu")
#define TR_TTRACE TR("PL stopek", INDENT "Stopa PL stopek")
#define TR_TTRACE TR("StopaPlynu", INDENT "Stopa plynu")
#define TR_TTRIM TR("TrimVolnob.", INDENT "Trim jen volnoběh")
#define TR_BEEPCTR "Středy \221\222"
#define TR_PROTO INDENT "Protokol"
@@ -572,13 +572,14 @@
#define TR_BLDELAY INDENT"Zhasnout po"
#define TR_BLONBRIGHTNESS INDENT"Jas Zap."
#define TR_BLOFFBRIGHTNESS INDENT"Jas Vyp."
#define TR_BLCOLOR INDENT "Color"
#define TR_BLCOLOR INDENT "Barva"
#define TR_SPLASHSCREEN TR("úvodníLogo", "Zobrazit úvodní logo")
#define TR_THROTTLEWARNING TR("* Plyn", INDENT "Páka Plynu")
#define TR_SWITCHWARNING TR("* Spínače", INDENT "Polohy Spínačů")
#define TR_POTWARNING TR("* Potenc.", INDENT "Nastavení Pot.")
#define TR_TIMEZONE "časové pásmo"
#define TR_RXCHANNELORD TR("Pořadí kanálů", "Výchozí pořadí kanálů")
#define TR_SWITCHES_DELAY "Switches Delay"
#define TR_SLAVE "Podřízený"
#define TR_MODESRC " Mód\006% Zdroj"
#define TR_MULTIPLIER "Násobič"
@@ -780,6 +781,7 @@
#define TR_ANTENNAPROBLEM CENTER "Problém s TX anténou!"
#define TR_MODELIDUSED TR("ID již použito","ID modelu je již použito")
#define TR_MODULE INDENT "Modul"
#define TR_TELEMETRY_TYPE "Telemetry Type"
#define TR_CHANNELRANGE INDENT "Rozsah kanálů"
#define TR_LOWALARM INDENT "Nízký Alarm"
#define TR_CRITICALALARM INDENT "Kritický Alarm"
+4 -2
View File
@@ -292,7 +292,7 @@
#define TR_TELEM_RESERVE TR("[--]", "[---]")
#define TR_TELEM_TIME TR("Time", "Time\0")
#define TR_SWR TR("SWR\0", "SWR\0 ")
#define TR_RX_BATT TR("RxBt", "RxBat")
#define TR_RX_BATT TR("[NA]", "[NA]\0")
#define TR_A3_A4 TR("A3\0 ""A4\0 ", "A3\0 ""A4\0 ")
#define TR_A3_A4_MIN TR("A3-\0""A4-\0", "A3-\0 ""A4-\0 ")
#else
@@ -358,7 +358,7 @@
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define LEN_VOLTSRC TR("\003", "\007")
#define TR_VOLTSRC TR("RxV""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "RxAkku\0""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#else
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells\0 ")
@@ -579,6 +579,7 @@
#define TR_POTWARNING TR("Pot Warn.", INDENT "Poti Warnung")
#define TR_TIMEZONE TR("Zeitzone","GPS Zeit Zone")
#define TR_RXCHANNELORD TR("Kanalanordnung","Kanalvoreinstellung")
#define TR_SWITCHES_DELAY "Switches Delay"
#define TR_SLAVE TR("Schüler PPM1-16","Schüler PPM1-16 als Ausgang")
#define TR_MODESRC " Modus\002% Quelle"
#define TR_MULTIPLIER "Multiplikator"
@@ -780,6 +781,7 @@
#define TR_ANTENNAPROBLEM CENTER "TX Antennen Problem!"
#define TR_MODELIDUSED TR("ID schon benutzt","Modell ID schon benutzt")
#define TR_MODULE INDENT "Modul-Typ"
#define TR_TELEMETRY_TYPE "Telemetry Type"
#define TR_CHANNELRANGE INDENT "Ausgangs Kanäle"
#define TR_LOWALARM INDENT "Vor-Alarm bei"
#define TR_CRITICALALARM INDENT "Kritisch Alarm"
+9 -7
View File
@@ -292,7 +292,7 @@
#define TR_TELEM_RESERVE TR("[--]", "[---]")
#define TR_TELEM_TIME TR("Time", "Time\0")
#define TR_SWR TR("SWR\0", "SWR\0 ")
#define TR_RX_BATT TR("RxBt", "RxBat")
#define TR_RX_BATT TR("[NA]", "[NA]\0")
#define TR_A3_A4 TR("A3\0 ""A4\0 ", "A3\0 ""A4\0 ")
#define TR_A3_A4_MIN TR("A3-\0""A4-\0", "A3-\0 ""A4-\0 ")
#else
@@ -355,13 +355,13 @@
#define TR_VTELPROTO "None\0 ""Hub\0 ""WSHHigh"
#if defined(CPUARM)
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define LEN_VOLTSRC TR("\003", "\007")
#define TR_VOLTSRC TR("RxV""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "RxBatt\0""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define LEN_AMPSRC TR("\003", "\005")
#define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells")
#define LEN_VOLTSRC TR("\003", "\005")
#define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells")
#else
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells\0 ")
#define LEN_AMPSRC TR("\003", "\005")
#define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells")
#endif
#define LEN_VARIOSRC "\004"
@@ -579,6 +579,7 @@
#define TR_POTWARNING TR(IF_CPUARM(INDENT) "Pot Warn.", INDENT "Pot Positions")
#define TR_TIMEZONE TR("Time Zone", "GPS Time zone")
#define TR_RXCHANNELORD TR("Rx Channel Ord", "Default channel order")
#define TR_SWITCHES_DELAY "Play Delay (sw. mid pos)"
#define TR_SLAVE CENTER "Slave"
#define TR_MODESRC "Mode\006% Source"
#define TR_MULTIPLIER "Multiplier"
@@ -780,6 +781,7 @@
#define TR_ANTENNAPROBLEM CENTER "TX Antenna problem!"
#define TR_MODELIDUSED TR("ID already used","Model ID already used")
#define TR_MODULE INDENT "Module"
#define TR_TELEMETRY_TYPE "Telemetry Type"
#define TR_CHANNELRANGE TR(INDENT "Ch. Range", INDENT "Channel Range")
#define TR_LOWALARM INDENT "Low Alarm"
#define TR_CRITICALALARM INDENT "Critical Alarm"
+4 -2
View File
@@ -292,7 +292,7 @@
#define TR_TELEM_RESERVE TR("[--]", "[---]")
#define TR_TELEM_TIME TR("Time", "Time\0")
#define TR_SWR TR("SWR\0", "SWR\0 ")
#define TR_RX_BATT TR("RxBt", "RxBat")
#define TR_RX_BATT TR("[NA]", "[NA]\0")
#define TR_A3_A4 TR("A3\0 ""A4\0 ", "A3\0 ""A4\0 ")
#define TR_A3_A4_MIN TR("A3-\0""A4-\0", "A3-\0 ""A4-\0 ")
#else
@@ -358,7 +358,7 @@
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define LEN_VOLTSRC TR("\003", "\007")
#define TR_VOLTSRC TR("RxV""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "RxBatt\0""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#else
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells\0 ")
@@ -579,6 +579,7 @@
#define TR_POTWARNING TR("Pot Warn.", INDENT "Pot Warning")
#define TR_TIMEZONE TR("Zona Hora", "GPS Zona Hora")
#define TR_RXCHANNELORD TR("Rx Orden canal", "Orden habitual canales")
#define TR_SWITCHES_DELAY "Switches Delay"
#define TR_SLAVE "Esclavo"
#define TR_MODESRC "Modo\006% Fuente"
#define TR_MULTIPLIER "Multiplicar"
@@ -780,6 +781,7 @@
#define TR_ANTENNAPROBLEM CENTER "¡Problema antena TX!"
#define TR_MODELIDUSED TR("ID en uso", "ID modelo en uso")
#define TR_MODULE INDENT "Modulo"
#define TR_TELEMETRY_TYPE "Telemetry Type"
#define TR_CHANNELRANGE INDENT "Gama de canales"
#define TR_LOWALARM INDENT "Alarma baja"
#define TR_CRITICALALARM INDENT "Alarma Critica"
+4 -2
View File
@@ -292,7 +292,7 @@
#define TR_TELEM_RESERVE TR("[--]", "[---]")
#define TR_TELEM_TIME TR("Time", "Time\0")
#define TR_SWR TR("SWR\0", "SWR\0 ")
#define TR_RX_BATT TR("RxBt", "RxBat")
#define TR_RX_BATT TR("[NA]", "[NA]\0")
#define TR_A3_A4 TR("A3\0 ""A4\0 ", "A3\0 ""A4\0 ")
#define TR_A3_A4_MIN TR("A3-\0""A4-\0", "A3-\0 ""A4-\0 ")
#else
@@ -358,7 +358,7 @@
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define LEN_VOLTSRC TR("\003", "\007")
#define TR_VOLTSRC TR("RxV""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "RxBatt\0""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#else
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells\0 ")
@@ -579,6 +579,7 @@
#define TR_POTWARNING TR("Pot Warn.", INDENT "Pot Warning")
#define TR_TIMEZONE TR("Time Zone","GPS Time zone")
#define TR_RXCHANNELORD TR("Rx Channel Ord","Default channel order")
#define TR_SWITCHES_DELAY "Switches Delay"
#define TR_SLAVE "Slave"
#define TR_MODESRC "Mode\006% Source"
#define TR_MULTIPLIER "Multiplier"
@@ -780,6 +781,7 @@
#define TR_ANTENNAPROBLEM CENTER "TX Antenna problem!"
#define TR_MODELIDUSED TR("ID already used","Model ID already used")
#define TR_MODULE INDENT "Module"
#define TR_TELEMETRY_TYPE "Telemetry Type"
#define TR_CHANNELRANGE INDENT "Channel Range"
#define TR_LOWALARM INDENT "Low Alarm"
#define TR_CRITICALALARM INDENT "Critical Alarm"
+8 -6
View File
@@ -355,13 +355,13 @@
#define TR_VTELPROTO "Aucun ""Hub\0 ""WSHHigh"
#if defined(CPUARM)
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Elem.\0 ")
#define LEN_VOLTSRC TR("\003", "\007")
#define TR_VOLTSRC TR("RxV""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "RxBatt\0""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Elem.\0 ")
#define LEN_AMPSRC TR("\003", "\005")
#define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Elem.")
#define LEN_VOLTSRC TR("\003", "\005")
#define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Elem.")
#else
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Elem.\0 ")
#define LEN_AMPSRC TR("\003", "\005")
#define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Elem.")
#endif
#define LEN_VARIOSRC "\005"
@@ -579,6 +579,7 @@
#define TR_POTWARNING TR(IF_CPUARM(INDENT) "Alerte pot", INDENT "Pos. potentiom.")
#define TR_TIMEZONE "Fuseau horaire"
#define TR_RXCHANNELORD TR("Ordre voies RX","Ordre des voies préféré")
#define TR_SWITCHES_DELAY "Délai inters milieu"
#define TR_SLAVE "Elève"
#define TR_MODESRC "Mode\006% Source"
#define TR_MULTIPLIER "Multiplieur"
@@ -780,6 +781,7 @@
#define TR_ANTENNAPROBLEM CENTER "Antenne radio défectueuse!"
#define TR_MODELIDUSED TR("ID déjà affecté", "No de modèle déjà utilisé")
#define TR_MODULE INDENT "Type de module"
#define TR_TELEMETRY_TYPE "Type télémesure"
#define TR_CHANNELRANGE TR(INDENT "Canaux", INDENT "Plage de canaux")
#define TR_LOWALARM INDENT "Alarme basse"
#define TR_CRITICALALARM INDENT "Alarme critique"
+5 -3
View File
@@ -309,7 +309,7 @@
#if defined(PCBTARANIS)
#define TR_TELEM_RSSI_RX "RSSI\0"
#else
#define TR_TELEM_RSSI_RX TR("Rx\0 ", "Rx\0 ")
#define TR_TELEM_RSSI_RX TR("Rx\0 ", "Rx\0 ")
#endif
#if LCD_W >= 212
@@ -358,7 +358,7 @@
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Celle\0 ")
#define LEN_VOLTSRC TR("\003", "\007")
#define TR_VOLTSRC TR("RxV""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "BattRx\0""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Celle\0 ")
#define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Celle\0 ")
#else
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Celle\0 ")
@@ -445,7 +445,7 @@
#define TR_VSRCRAW "---\0""Dir\0""Ele\0""Mot\0""Ale\0" TR_POTS_VSRCRAW TR_ROTARY_ENCODERS "MAX\0" TR_CYC_VSRCRAW "TrmD" "TrmE" "TrmM" "TrmA" TR_SW_VSRCRAW
#define LEN_VTMRMODES "\003"
#define TR_VTMRMODES "OFF""ABS""THs""TH%""THt"
#define TR_VTMRMODES "OFF""ABS""MOs""MO%""MOt"
#define LEN_VTRAINERMODES "\007"
#define TR_VTRAINERMODES "Maestro""Allievo"
@@ -579,6 +579,7 @@
#define TR_POTWARNING TR("Pot Warn.", INDENT "Avviso Pot.")
#define TR_TIMEZONE "Ora locale"
#define TR_RXCHANNELORD "Ordine ch RX"
#define TR_SWITCHES_DELAY "Ritardo Inter."
#define TR_SLAVE "Allievo"
#define TR_MODESRC "Modo\006% Origine"
#define TR_MULTIPLIER "Moltiplica"
@@ -780,6 +781,7 @@
#define TR_ANTENNAPROBLEM CENTER "Problemi antenna TX!"
#define TR_MODELIDUSED TR("ID già usato","ID Modello già usato")
#define TR_MODULE INDENT "Modulo"
#define TR_TELEMETRY_TYPE "Mod. Telemetria"
#define TR_CHANNELRANGE INDENT "Numero Canali"
#define TR_LOWALARM INDENT "Allarme Basso"
#define TR_CRITICALALARM INDENT "Allarme Critico"
+4 -2
View File
@@ -292,7 +292,7 @@
#define TR_TELEM_RESERVE TR("[--]", "[---]")
#define TR_TELEM_TIME TR("Time", "Time\0")
#define TR_SWR TR("SWR\0", "SWR\0 ")
#define TR_RX_BATT TR("RxBt", "RxBat")
#define TR_RX_BATT TR("[NA]", "[NA]\0")
#define TR_A3_A4 TR("A3\0 ""A4\0 ", "A3\0 ""A4\0 ")
#define TR_A3_A4_MIN TR("A3-\0""A4-\0", "A3-\0 ""A4-\0 ")
#else
@@ -358,7 +358,7 @@
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define LEN_VOLTSRC TR("\003", "\007")
#define TR_VOLTSRC TR("RxV""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "RxBatt\0""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#else
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells\0 ")
@@ -579,6 +579,7 @@
#define TR_POTWARNING TR(IF_CPUARM(IDENT) "Ostrz.Poten.", INDENT "PozycjaPotencj.")
#define TR_TIMEZONE TR("Strefa czasowa" ,"Strefa czasowa GPS")
#define TR_RXCHANNELORD TR("KolejnKan.RX", "Bazowa kolejność kanałów")
#define TR_SWITCHES_DELAY "Switches Delay"
#define TR_SLAVE "Uczeń"
#define TR_MODESRC " Tryb\006% Źródło"
#define TR_MULTIPLIER "Połącznie"
@@ -780,6 +781,7 @@
#define TR_ANTENNAPROBLEM CENTER "Problem z anteną TX"
#define TR_MODELIDUSED TR("ID zajęte","ID modelu zajęte")
#define TR_MODULE INDENT "Moduł"
#define TR_TELEMETRY_TYPE "Telemetry Type"
#define TR_CHANNELRANGE TR(INDENT "ZakrKn",INDENT "Zakres kanału")
#define TR_LOWALARM INDENT "Alarm niski"
#define TR_CRITICALALARM INDENT "Alarm krytyczny"
+4 -2
View File
@@ -292,7 +292,7 @@
#define TR_TELEM_RESERVE TR("[--]", "[---]")
#define TR_TELEM_TIME TR("Time", "Time\0")
#define TR_SWR TR("SWR\0", "SWR\0 ")
#define TR_RX_BATT TR("RxBt", "RxBat")
#define TR_RX_BATT TR("[NA]", "[NA]\0")
#define TR_A3_A4 TR("A3\0 ""A4\0 ", "A3\0 ""A4\0 ")
#define TR_A3_A4_MIN TR("A3-\0""A4-\0", "A3-\0 ""A4-\0 ")
#else
@@ -358,7 +358,7 @@
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define LEN_VOLTSRC TR("\003", "\007")
#define TR_VOLTSRC TR("RxV""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "RxBatt\0""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#else
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells\0 ")
@@ -579,6 +579,7 @@
#define TR_POTWARNING TR("Pot Warn.", INDENT "Pot Warning")
#define TR_TIMEZONE "Time Zone"
#define TR_RXCHANNELORD "Ordem Canal RX"
#define TR_SWITCHES_DELAY "Switches Delay"
#define TR_SLAVE "Escravo"
#define TR_MODESRC "Modo\006% Fonte"
#define TR_MULTIPLIER "Multiplicar"
@@ -780,6 +781,7 @@
#define TR_ANTENNAPROBLEM CENTER "TX Antenna problem!"
#define TR_MODELIDUSED TR("ID already used","Model ID already used")
#define TR_MODULE INDENT "Module"
#define TR_TELEMETRY_TYPE "Telemetry Type"
#define TR_CHANNELRANGE INDENT "Channel Range"
#define TR_LOWALARM INDENT "Low Alarm"
#define TR_CRITICALALARM INDENT "Critical Alarm"
+4 -2
View File
@@ -292,7 +292,7 @@
#define TR_TELEM_RESERVE TR("[--]", "[---]")
#define TR_TELEM_TIME TR("Tid\0", "Tid\0 ")
#define TR_SWR TR("SWR\0", "SWR\0 ")
#define TR_RX_BATT TR("RxBt", "RxBat")
#define TR_RX_BATT TR("[NA]", "[NA]\0")
#define TR_A3_A4 TR("A3\0 ""A4\0 ", "A3\0 ""A4\0 ")
#define TR_A3_A4_MIN TR("A3-\0""A4-\0", "A3-\0 ""A4-\0 ")
#else
@@ -358,7 +358,7 @@
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define LEN_VOLTSRC TR("\003", "\007")
#define TR_VOLTSRC TR("RxV""A1\0""A2\0""A3\0""A4\0""FAS""Cel", "RxBatt\0""A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#define TR_VOLTSRC TR("A1\0""A2\0""A3\0""A4\0""FAS""Cel", "A1\0 ""A2\0 ""A3\0 ""A4\0 ""FAS\0 ""Cells\0 ")
#else
#define LEN_AMPSRC TR("\003", "\007")
#define TR_AMPSRC TR("---""A1\0""A2\0""FAS""Cel", "---\0 ""A1\0 ""A2\0 ""FAS\0 ""Cells\0 ")
@@ -579,6 +579,7 @@
#define TR_POTWARNING TR("Rattvarn.", INDENT "Rattvarning")
#define TR_TIMEZONE TR("Tidszon","GPS Tidszon")
#define TR_RXCHANNELORD "Kanaler i RX"
#define TR_SWITCHES_DELAY "Brytarfördröjning"
#define TR_SLAVE "Elev"
#define TR_MODESRC " Läge\004% Källa"
#define TR_MULTIPLIER "Styrka"
@@ -780,6 +781,7 @@
#define TR_ANTENNAPROBLEM CENTER "Fel på TX-antennen"
#define TR_MODELIDUSED TR("ID finns redan","ModellID används redan")
#define TR_MODULE INDENT "Modul"
#define TR_TELEMETRY_TYPE "Telemetrityp"
#define TR_CHANNELRANGE INDENT "Kanalområde"
#define TR_LOWALARM INDENT "Låg-alarm"
#define TR_CRITICALALARM INDENT "Kritiskt alarm"
-4
View File
@@ -177,8 +177,6 @@ def ttsEn():
(u"A3,critical", "a3_red", NO_ALTERNATE),
(u"A4,low", "a4_org", NO_ALTERNATE),
(u"A4,critical", "a4_red", NO_ALTERNATE),
(u"receiver battery, low", "rx_org", NO_ALTERNATE),
(u"receiver battery, critical", "rx_red", NO_ALTERNATE),
(u"RF signal, low", "rssi_org", NO_ALTERNATE),
(u"RF signal, critical", "rssi_red", NO_ALTERNATE),
(u"radio antenna defective", "swr_red", NO_ALTERNATE),
@@ -276,8 +274,6 @@ def ttsFr():
(u"A3,critique", "a3_red", NO_ALTERNATE),
(u"A4,faible", "a4_org", NO_ALTERNATE),
(u"A4,critique", "a4_red", NO_ALTERNATE),
(u"Batterie récepteur faible !", "rx_org", NO_ALTERNATE),
(u"Batterie récepteur critique !", "rx_red", NO_ALTERNATE),
(u"Signal RF, faible", "rssi_org", NO_ALTERNATE),
(u"Signal RF, critique", "rssi_red", NO_ALTERNATE),
(u"Antenne défectueuse", "swr_red", NO_ALTERNATE),