Compare commits

...

839 Commits

Author SHA1 Message Date
Andre Bernet 304445cd9d Reenable GPS 2016-09-01 23:57:11 +02:00
Andre Bernet b04452e6f9 [Horus] Fix backlight on beta again 2016-09-01 23:44:09 +02:00
Bertrand Songis 080891db7b [Horus] Better fix for Backlight on BETA boards 2016-09-01 23:26:56 +02:00
Bertrand Songis 98944e9cee [Horus] BL on BETA boards fixed 2016-09-01 23:06:20 +02:00
Bertrand Songis a9fcf514a1 Cosmetics 2016-09-01 22:48:28 +02:00
Bertrand Songis 6872f85c52 [Horus] Warning fixed 2016-09-01 22:46:10 +02:00
Bertrand Songis 16f2681050 [Horus] BL better like this on BETA boards? 2016-09-01 19:52:03 +02:00
Bertrand Songis c882095a81 Compilation fix 2016-09-01 19:43:29 +02:00
Bertrand Songis d5235d586d Cosmetics 2016-09-01 19:42:55 +02:00
Bertrand Songis 7a6e870f55 [HORUS] Backlight flickering on PROD radios 2016-09-01 19:42:37 +02:00
Bertrand Songis a3f42fb89f [ARM boards] S.PORT GPS was completely broken 2016-09-01 19:01:49 +02:00
Bertrand Songis ed70813e5f [Horus] DBLKEYS implemented (same keys than the 9X) 2016-09-01 19:00:47 +02:00
Bertrand Songis 70846d4add [Horus] GPS display fix 2016-09-01 19:00:12 +02:00
Andre Bernet caf0fca1c2 Fix #3743 2016-09-01 11:15:28 +02:00
Andre Bernet 723e4bf9c7 Temporarily disable buggy GPS lat/lon and time/date sensors 2016-09-01 08:51:58 +02:00
Andre Bernet 77d85b73bc Available audio files need to be listed again after a mass storage session 2016-09-01 00:18:08 +02:00
Bertrand Songis 4221bfdf74 [Horus] Attempt to fix the problem with some files after a massstorage session 2016-08-31 23:54:43 +02:00
Andre Bernet 76f0b306aa Fix timer display 2016-08-31 23:54:30 +02:00
Bertrand Songis fae55a21c6 [Horus] BOLD on the whole GVAR column (not only refs to other FMs) 2016-08-31 23:30:36 +02:00
Andre Bernet 55b3ea9b42 (untested) Merge remote-tracking branch 'origin/schwabe/fraternl_translation_3788' into next
# Conflicts:
#	radio/src/translations/nl.h.txt
2016-08-31 23:22:19 +02:00
Andre Bernet aaf7f67ebb Add getRAS to Lua interface (#3742)
* Add getRAS lua function

* Add warning

* Return nil is case of bad antenna

* Check for valid SWR

* Typo

* Cosmetic

* Clarify that it is 0x33
2016-08-31 23:12:18 +02:00
Bertrand Songis 830593d62e [Horus] SD hot mount if removed when the radio is ON 2016-08-31 23:06:39 +02:00
Andre Bernet 90e8748e12 Backlight in fatal error screen 2016-08-31 22:59:50 +02:00
Bertrand Songis 77065c7cfb Merge pull request #3740 from craftandtheory/next
Haptic feedback in lua scripts
2016-08-31 22:21:07 +02:00
Bertrand Songis f37c695590 Merge pull request #3741 from opentx/3djc/companion-disable-Horus
3djc/companion disable horus
2016-08-31 22:18:18 +02:00
Andre Bernet f6b43ae40f Don't leave a big dangling array... 2016-08-31 22:11:00 +02:00
floaledm 29642e379f Haptic feedback in lua scripts 2016-08-31 15:01:31 -05:00
Andre Bernet 37a0258b19 No more 2MB array on the stack 2016-08-31 21:57:53 +02:00
Andre Bernet 38886e31a4 Multipos improvements 2016-08-31 21:48:24 +02:00
Bertrand Songis 9c966515f2 [Horus] Fonts build error 2016-08-31 21:33:05 +02:00
Bertrand Songis 4e576efdd7 [Horus] Pots / Sliders default config was wrong. Is it better? 2016-08-31 19:48:17 +02:00
Andre Bernet c994260c85 Arguably cleaner flash size retrieval 2016-08-31 14:28:14 +02:00
3djc 03c969fa3c MAX_FSIZE moved to Horus max
dfu args adjusted for Horus
2016-08-31 12:28:02 +02:00
3djc 161f3be468 Fix FSIZE for Horus 2016-08-31 12:07:51 +02:00
3djc 842eb3e93a Prevent flash read 2016-08-31 11:09:43 +02:00
Andre Bernet 6bdb40ec81 Recent files fix 2016-08-31 10:50:44 +02:00
3djc fc4b43dfb1 Disable drag drop 2016-08-31 10:38:45 +02:00
3djc 2ebd89159c Recent files fix 2016-08-31 10:23:24 +02:00
3djc 585302d8a9 Disable recent file 2016-08-31 10:00:56 +02:00
3djc a8394b6400 Cosmetic 2016-08-31 09:26:37 +02:00
3djc 8de9f8e826 Disable Horus 2016-08-31 09:26:37 +02:00
Bertrand Songis f97eda2b4f Horus internal GPS: settable baudrate, misc fixes, new cmake options,… (#3736)
* Horus internal GPS: settable baudrate, misc fixes, new cmake options, cosmetics, cli

* Horus internal GPS: cmake changes, more CLI options, ability to send commands to the module

* Compilation fixes
2016-08-31 06:48:28 +02:00
Bertrand Songis e79258d8a2 [Horus] GVARS love 2016-08-31 01:06:25 +02:00
Bertrand Songis ca5c20abe3 getCPUUniqueId moved to STM32 common code 2016-08-31 01:06:00 +02:00
Bertrand Songis 82b9ecc155 [Horus] Refactoring for the new fatal errors 2016-08-31 01:04:11 +02:00
Damjan Adamic 590b0eaab7 Compilation fixes 2016-08-30 21:55:09 +02:00
Damjan Adamic ff37274e64 Horus internal GPS: cmake changes, more CLI options, ability to send commands to the module 2016-08-30 21:23:20 +02:00
Bertrand Songis 855814655e Cosmetics 2016-08-30 18:33:15 +02:00
Arne Schwabe 75b74da2bd Add translations from fraternl 2016-08-30 13:15:06 +02:00
Andre Bernet 7656450597 Fix #3737 2016-08-30 11:50:44 +02:00
Damjan Adamic 1ef91597ca Horus internal GPS: settable baudrate, misc fixes, new cmake options, cosmetics, cli 2016-08-29 23:22:46 +02:00
3djc 931c3f9d6a This fixes #3727 (#3729)
Fixes #3727

* Improve

* Cosmetics

* Cosmetics
2016-08-29 23:11:33 +02:00
Andre Bernet c793b492d2 Translation fixes 2016-08-29 22:27:45 +02:00
Damjan Adamic f0c2f10e27 Serial port SERIAL2 enabled [Horus] 2016-08-29 20:09:59 +02:00
Damjan Adamic 5a9eeaacc1 Added missing interrupt name [Horus] 2016-08-29 20:04:55 +02:00
Damjan Adamic 5cdb1e52d1 Cosmetics 2016-08-29 19:59:12 +02:00
3djc 7d6e96fe0c Add mintrim (#3732) 2016-08-29 15:48:42 +02:00
Andre Bernet 6038c0947f Reenable NL translation 2016-08-29 14:43:16 +02:00
Bertrand Songis 812ce55538 [Horus] SEGFAULT in calibration menu (new tests needed thanks!) 2016-08-29 14:05:25 +02:00
Bertrand Songis 5b9bd52737 [Horus] Warnings removed 2016-08-29 13:51:09 +02:00
Andre Bernet e6ac77a789 [Horus] Fix simu segfault, cosmetics 2016-08-28 18:15:26 +02:00
Damjan Adamic 89e0fd1e1d Re #3724: added smoothing filter for rotary encoder speed/acceleration calculation (#3726) 2016-08-28 18:00:54 +02:00
Andre Bernet 446ed3db59 Translation fixes 2016-08-28 17:55:25 +02:00
Damjan Adamic b71ba5b095 Cosmetics 2016-08-28 16:44:34 +02:00
Damjan Adamic 7522e54c83 More decimal places for small climb rates. 2016-08-28 11:38:38 +02:00
Andre Bernet 30eb2baed9 [Horus] Bitmaps now scaled to fit both dimensions and centered in desired zone 2016-08-28 11:28:29 +02:00
Damjan Adamic 504592ed18 Proper type for STICKS 2016-08-28 11:09:47 +02:00
Damjan Adamic 5446b4707d Wrong PPM_UNIT option value 2016-08-28 11:09:47 +02:00
Damjan Adamic 0c2fb5f7f1 Cosmetics 2016-08-28 11:09:47 +02:00
Bertrand Songis 2a9e299818 [Horus] SD version check simplified 2016-08-28 11:02:09 +02:00
Bertrand Songis 6071b1aa0d Compilation fix 2016-08-28 10:06:37 +02:00
Bertrand Songis 4377815c7b watchdogSetTimeout renamed to watchdogSuspend 2016-08-28 09:26:18 +02:00
Andre Bernet db79e2c53e [Horus] Translations, UI cosmetics 2016-08-28 09:01:53 +02:00
Bertrand Songis 506b24829c [Horus] Disable the WD timer on USB massstorage read/write 2016-08-28 08:47:51 +02:00
Bertrand Songis b105214e32 [Horus] Model name greater than Model99.bin allowed 2016-08-27 21:36:31 +02:00
Andre Bernet 3e960be9ce [Horus] Display model file name on model select screen 2016-08-27 20:46:42 +02:00
Bertrand Songis f5d589d23c [Taranis] EEPROM Conversions issues 2016-08-27 20:07:27 +02:00
Jim Taylor 34441618f8 Skip first record when calculating replay speed and set minimum repla… (#3715)
* Skip first record when calculating replay speed and set minimum replay speed to 100 ms.
Fixes issue 3708

* Cosmetics
2016-08-27 18:36:15 +02:00
Bertrand Songis 1d735f2bd3 [X9E/X7D] Rotary encoder navigation speed implemented (#3724) 2016-08-27 18:19:44 +02:00
Bertrand Songis 3cb64d984a [Taranis] EEPROM async write was disabled 2016-08-27 17:05:56 +02:00
Andre Bernet 508e3e899c Fix SD card version check 2016-08-27 15:11:54 +02:00
Andre Bernet c5346f6846 [Taranis] Fix bootloader freeze on USB disconnect 2016-08-27 13:31:15 +02:00
Bertrand Songis 9e334bfc84 [HORUS] Problem with Logs checkbox in Sensor menu 2016-08-27 11:59:23 +02:00
Bertrand Songis 879ca36fdb Typo 2016-08-27 09:50:11 +02:00
Bertrand Songis 7d1732b314 [HORUS] Curves on outputs were not taken into account 2016-08-27 09:49:37 +02:00
Bertrand Songis 76300ae92d [X9E] Calibration screen display problem 2016-08-27 09:48:04 +02:00
Bertrand Songis b8edea5c05 [X7D] LCD Reset is always needed 2016-08-26 11:36:06 +02:00
3djc 204b1b9627 This fixes #3718 (#3720) 2016-08-25 18:46:50 +02:00
3djc 9d9fdf81b4 Change audio generation files accordingly (#3717)
* Change audio generation files accordingly
New way of working :

units files are ALWAYS named in english based on the names in audio_arm.cpp names.
multiple form (singular, plural(s) are ammended with 0 to 4 suffix, according to languages rules. example : meter1.wav for first form of plural of meter unit,. This filename needs to be the same for all languages (in their respective directories of course)

* Care for gruin9x

* Better form

* Other languages

* Cosmetics
2016-08-24 23:43:56 +02:00
Bertrand Songis b69c2aa41c Cosmetics again ... 2016-08-24 20:39:22 +02:00
Bertrand Songis a95f9b7dde getSystemAudioPath renamed to strAppendSystemAudioPath 2016-08-23 21:07:40 +02:00
Bertrand Songis dd1ca93b70 getStringWithIndex renamed to strAppendStringWithIndex. It returns now the end of the string so that anything can be appended. 2016-08-23 20:51:40 +02:00
Bertrand Songis 643a731979 Cosmetics 2016-08-23 20:07:39 +02:00
Bertrand Songis f34de72e25 Cosmetics 2016-08-23 07:18:26 +02:00
Bertrand Songis 0ff601a3fa EEPROM simplification. Needs tests. (#3713) 2016-08-23 07:14:44 +02:00
Bertrand Songis c16ad94e3a SD card warning modified (fits now in 9X LCD)
Missing #ifdef for TELEMETRY flavours
2016-08-22 19:03:42 +02:00
Bertrand Songis 81c16212e0 Refactoring to prepare things for Horus flash support 2016-08-21 21:14:10 +02:00
Damjan Adamic 7dc75cf73f Debian package generation fixes for simulators (lib files were in the wrong directory, bunch of empty directories were included in package) 2016-08-21 20:51:05 +02:00
Damjan Adamic 9b7d97b441 Cosmetics (missing parts) 2016-08-21 19:43:47 +02:00
Damjan Adamic 64966c7d7d Cosmetics 2016-08-21 19:18:49 +02:00
3djc a043c6f649 fclose and cosmetics 2016-08-21 18:57:12 +02:00
3djc a63657df40 Warn also when control file cannot be opened 2016-08-21 17:42:35 +02:00
3djc 1164f30fd1 3djc/sdcard version check (#3709)
* Checking code

* Strings

* Fix

* Improvement

* Cosmetics
2016-08-21 16:45:04 +02:00
Bertrand Songis b657ca1862 Cosmetics 2016-08-21 12:41:12 +02:00
3djc cd2b6b3864 Horus pcdbrev10 support (#3707)
* Add PCBREV=10 to building options

* Cosmetics
2016-08-21 09:50:48 +02:00
Bertrand Songis d961879e0f [X12S] New test added for HORUS boards revision 1.0 2016-08-20 16:40:29 +02:00
Bertrand Songis 10aefb10db [X12S] GPS now OK 2016-08-20 16:36:32 +02:00
Bertrand Songis 91dc936ef3 [X12S] Crossfire module now OK 2016-08-19 19:26:34 +02:00
Bertrand Songis ed0cc9f1d4 [X12S] Modules on REV13 now OK 2016-08-19 17:13:09 +02:00
Bertrand Songis 0994735035 [X12S] Backlight code splitted from LCD code
[X12S] PCBREV introduction (PCBREV=10 or PCBREV=13)
2016-08-19 12:25:15 +02:00
Arne Schwabe 607e737b32 [X7D] Compilation fix for multi, check for displaysize instead of board. 2016-08-19 11:24:04 +02:00
Bertrand Songis 44e477965e Cosmetics 2016-08-19 11:20:12 +02:00
Bertrand Songis fcce94a868 [X12S] Radio calibration regression fix 2016-08-19 09:51:50 +02:00
Bertrand Songis f940fcdcd0 [X7D] Curve edit screen now OK 2016-08-18 18:49:47 +02:00
Bertrand Songis 3e4f3b2a8e [X12S] GPS low level driver added 2016-08-18 17:23:46 +02:00
Bertrand Songis 5d7f4ebc0b [X7D] Switch warning fix 2016-08-18 15:47:21 +02:00
Bertrand Songis 3160a7d878 Fixes #3704 2016-08-18 15:22:03 +02:00
Bertrand Songis 62071a959c Fixes #3704 2016-08-18 15:19:25 +02:00
Bertrand Songis 59083f4471 Fixes #3704 2016-08-18 13:38:46 +02:00
Bertrand Songis 71a8a69f32 Another fix for #3691 without the extra #ifdef in the main code 2016-08-18 11:54:33 +02:00
Bertrand Songis d3ae3c035d Bsongis/gui refactoring for x7 d (#3701)
* [X7D] New board added
* Cosmetics
2016-08-18 11:49:16 +02:00
3djc 282b856309 3djc/improve widgets (#3696)
* Add color option to Value widget

* Fix color handling
Add shadow effect
2016-08-14 20:36:44 +02:00
3djc 0fa7f6e132 Move default english to american, as english is defective (scottish instead) 2016-08-07 13:39:48 +02:00
3djc d55613aa26 urlencode model string to allow models like x9d+ (#3693) 2016-08-06 21:09:51 +02:00
3djc d62a985dcd Fix double type 2016-08-06 10:00:01 +02:00
Arne Schwabe 6559456534 Fix channel count on dsm2 module, purely cosmetic (closes issue #3673) (#3689)
Taranis menu always use 8 channels as default opposed to 9x and Horus, which use the maximum number as default channel count (which is 6 on dsm2). This commit does not change that logic.
2016-08-04 16:45:23 +02:00
Arne Schwabe d24f60f68b Horus Multi implementation implemented/tested by kilrah, add it to the options for the Horus 2016-08-03 16:29:01 +02:00
3djc f2d2677b2d Add CLI and Mass Storage to horus (#3682) 2016-08-03 16:24:30 +02:00
Arne Schwabe a908d73f1f Fix gcc 5.4 compiler warnings (#3681)
The order preference in flash_driver would evaluate ! before & but I think checking the bit first is what was intended
2016-08-03 16:24:01 +02:00
Arne Schwabe 9ea048f2ad Add the new protocols of v1.1.1 of multi (#3680) 2016-08-03 16:23:28 +02:00
Bertrand Songis 16199194b5 Cosmetics 2016-08-03 05:16:25 +02:00
Arne Schwabe 789a0ee548 Report unknown Spectrum sensors as raw sensors (#3679) 2016-08-03 05:11:43 +02:00
Bertrand Songis 7fbd963b3f Another big refactoring 2016-08-02 22:15:29 +02:00
3djc 52435703a0 3djc/telem rename (#3678)
* Rename EXT option to TELEMETRY

* Change test accordingly

* Rename FRSKY to TELEMETRY_FRSKY

* Rename ARDUPILOT to TELEMETRY_ARDUPILOT

* More renames (JETI, MAVLINK, NMEA)

* Fixes to make commit-test happy

* Further tests added to commit-test

* Cleanup

* Rename EXTSTD to TELEMETRY_NONE
2016-08-02 21:53:25 +02:00
Arne Schwabe 0b67d412a0 Schwabe/multimodule 9x (#3676)
* Fix Multimodule showing up as Crossfire when only multimode and not crossfire is enabled.

* Don't hardcode telemetry to be Frysky on non STM32 arm targets

* Port multi module code to 9X platforms

* Allow Spektrum telemetry protocol to be selected as protocol for the telemetry selection

* Fix infinite loop in spektrum code

* Fix cosmetics

Changes also done for Horus and Taranis UI where appropriate
2016-08-02 18:21:18 +02:00
Bertrand Songis d0527be2c4 Compilation fix 2016-08-02 08:04:03 +02:00
Bertrand Songis 0524f24ac6 hello.wav was not played anymore 2016-08-02 07:37:07 +02:00
Bertrand Songis ba681666a0 [9X with MAVLINK telemetry] Compilation fix 2016-08-02 00:04:52 +02:00
Martin Hotar 9a00f03843 Category images 2016-08-01 22:00:07 +02:00
Bertrand Songis 6d8b938706 Cosmetics 2016-08-01 21:48:49 +02:00
Bertrand Songis 22433a3a13 Compilation fix 2016-08-01 21:37:41 +02:00
Bertrand Songis ddfaa6f393 Compilation fix 2016-08-01 21:29:45 +02:00
Bertrand Songis 4d4b75d283 Compilation fix 2016-08-01 21:24:36 +02:00
Bertrand Songis 2ed742ebb7 Compilation fix 2016-08-01 21:18:37 +02:00
3djc 459ab91f09 Fix compilation warning on Horus. (#3677)
* Fix compilation warning on Horus. The // where added Jan25 as part of https://github.com/opentx/opentx/commit/5c71d74aabcafc0c8874de5970ae5c654ba5d9c1#diff-e7a8e42860fdbdf14bb250f27536fde6

* Better fix ?
2016-08-01 21:17:29 +02:00
Bertrand Songis 337ab74b8b Compilation fix 2016-08-01 20:44:30 +02:00
Bertrand Songis 9f37e7a0fb Macro renamed for #3675 2016-08-01 20:37:04 +02:00
Bertrand Songis ea095b2447 Forgotten files 2016-08-01 20:32:41 +02:00
Bertrand Songis 400faee588 Refactoring 2016-08-01 20:25:20 +02:00
3djc adeb53c726 Fix typo, thx schwabe 2016-08-01 19:00:51 +02:00
Bertrand Songis c5062d8c6a Duplicated bitmaps removed 2016-08-01 18:58:23 +02:00
Bertrand Songis 4df85d1047 Cosmetics 2016-08-01 18:52:29 +02:00
Bertrand Songis 6d2c5a4db6 Radio init / masstorage start / massstorage end / shutdown sequences … (#3674)
* Radio init / masstorage start / massstorage end / shutdown sequences reordering:

- More traces
- Fixes #3642
- Reuses idea of #3662

Still not finished and completely untested

* More traces

* Compilation fix

* Reuses the idea of #3652

* Alarms were checked 2 times on massstorage end
2016-08-01 18:39:34 +02:00
Bertrand Songis 6c34752907 Warnings fixed and remarks from #3666 taken into account 2016-08-01 07:16:33 +02:00
Bertrand Songis f74381bafa Merge branch 'schwabe/ar9x_test_and_fix' into next 2016-08-01 07:03:43 +02:00
Bertrand Songis 67eb04e44c Merge branch 'next' into schwabe/ar9x_test_and_fix 2016-08-01 07:03:17 +02:00
Bertrand Songis 351780bf17 [Horus] Correct alignment for massstorage buffer (increases speed) 2016-07-31 21:34:10 +02:00
3djc c2ed47d5d3 Wrong branch ... 2016-07-31 17:22:55 +02:00
3djc d00472b810 Initial nightly21 push 2016-07-31 17:10:37 +02:00
3djc b44dce4977 Initial 2.1 sdcards rework 2016-07-31 16:55:45 +02:00
3djc 5f06e06c55 Move build number increments to git 2016-07-31 13:44:48 +02:00
3djc ebe36e0154 Complete move nightly22 activities to github 2016-07-31 12:58:12 +02:00
Andre Bernet e72017977c No reason not to allow access to EEPROM when USB=MASSSTORAGE 2016-07-31 12:41:49 +02:00
Bertrand Songis 7bcac84253 rtc_driver moved to common/arm/stm32 2016-07-31 12:10:27 +02:00
Bertrand Songis a33b1d2659 [Horus] Masstorage reboots now gone? Still needed to mount again the SD after USB is unplugged 2016-07-31 11:21:18 +02:00
3djc 3728624486 Initial handling of nightly22 sdcard 2016-07-31 10:27:58 +02:00
Bertrand Songis e76c574439 Cosmetics 2016-07-31 09:46:44 +02:00
Bertrand Songis 319df44188 [Horus] Massstorage still used the cache 2016-07-31 09:45:50 +02:00
Bertrand Songis ba240abe64 Compilation fix 2016-07-31 09:05:25 +02:00
Bertrand Songis 4b2315f56b Compilation fix. Massstorage won't use disk cache anymore 2016-07-31 08:10:46 +02:00
Bertrand Songis 67ebadc9e0 Compilation fix 2016-07-31 07:24:23 +02:00
Bertrand Songis d4a54b5487 [Horus] Massstorage bugfix (read cache beyond end of disk) 2016-07-31 00:26:13 +02:00
Bertrand Songis fcdcccf8f5 [Horus] Massstorage bugfix (read cache beyond end of disk) 2016-07-30 23:30:52 +02:00
Andre Bernet 9d492b4faf Missing rename was causing crash 2016-07-30 21:22:22 +02:00
3djc 5fad5190dc Bring firmware names in line with latests changes (#3672) 2016-07-30 12:28:50 +02:00
3djc 4818efade6 Add some more build options to check more parts of the code (#3671) 2016-07-30 10:27:42 +02:00
Bertrand Songis e900ad6c49 Warnings removed 2016-07-29 21:26:14 +02:00
Bertrand Songis 85f3bd4ed0 [X9E] Massstorage OK? 2016-07-29 20:53:01 +02:00
Bertrand Songis e5bbf6766b USB Massstorage code refactoring 2016-07-29 16:43:39 +02:00
Bertrand Songis 51223a5864 No more REV9E and REVPLUS 2016-07-29 14:44:59 +02:00
3djc 0f740358f2 Streamline naming 2016-07-29 14:44:48 +02:00
3djc 5ac2288782 3djc/move (#3670)
* build-companion is now in /tools
update build-firmware for new targets

* remove PCBREV
2016-07-29 14:40:04 +02:00
3djc aa915e088b Fix compile 2016-07-29 13:45:30 +02:00
3djc 6dedf2ce65 Make +x 2016-07-29 13:29:24 +02:00
3djc 840a3b2a8a Adapt to new targets 2016-07-29 13:12:24 +02:00
Bertrand Songis 83cdd67e6a Bsongis/move everything (#3669)
* Directories moved

* Directories moved

* Directories moved

* Directories moved

* Directories moved

* rename horus directories in gui to 480x272

* Directories moved

* Rename taranis to 212x64

* Directories moved - TARANIS target removed, it's now X9E / X9D+ / X9D

* Directories moved - TARANIS target removed, it's now X9E / X9D+ / X9D

* Directories moved - TARANIS target removed, it's now X9E / X9D+ / X9D

* Directories moved - TARANIS target removed, it's now X9E / X9D+ / X9D

* Directories moved - TARANIS target removed, it's now X9E / X9D+ / X9D

* Directories moved - TARANIS target removed, it's now X9E / X9D+ / X9D

* Directories moved - TARANIS target removed, it's now X9E / X9D+ / X9D

* Fix x9e compile

* Directories moved - TARANIS target removed, it's now X9E / X9D+ / X9D

* Directories moved - TARANIS target removed, it's now X9E / X9D+ / X9D

* Directories moved - TARANIS target removed, it's now X9E / X9D+ / X9D

* Directories moved - TARANIS target removed, it's now X9E / X9D+ / X9D

* Directories moved - TARANIS target removed, it's now X9E / X9D+ / X9D

* Minor improvement of path handling

* Another bunch of files renamed :)

* Another bunch of files renamed :)

* Another bunch of files renamed :)

* Another bunch of files renamed :)

* Another bunch of files renamed :)

* Rename 9x to 128x64

* Compilation fixes

* Compilation fixes

* Compilation fixes

* Compilation fixes

* Compilation fixes

* Compilation fixes
2016-07-29 12:47:20 +02:00
Bertrand Songis e3e0d970a5 Directories moved 2016-07-28 22:26:40 +02:00
Bertrand Songis f88e904009 [Horus] Massstorage under linux, still a problem remaining 2016-07-28 22:20:38 +02:00
Bertrand Songis 7e3cfc9b66 [Horus] No need for a reboot after Massstorage end, no? Unless we have written over the EEPROM, but on Horus it's not needed 2016-07-28 07:42:05 +02:00
Bertrand Songis c307e1987c [Horus] Massstorage again OK 2016-07-27 22:36:05 +02:00
Bertrand Songis ac86ebc229 Cosmetics 2016-07-27 22:35:30 +02:00
Bertrand Songis a3cfef3123 Previous commit reverted 2016-07-27 20:05:14 +02:00
Bertrand Songis b0b6ac2f69 Cosmetics 2016-07-27 19:13:56 +02:00
Bertrand Songis 8169ef92c0 Fixes #3608 2016-07-27 19:04:05 +02:00
Arne Schwabe 893ae215af Fix reading from initialized memory, fix not using fake program space for i2c 2016-07-26 00:14:16 +02:00
Bertrand Songis 3b90b0d6c0 [Crossfire] Lua script continued 2016-07-25 21:56:23 +02:00
Arne Schwabe 00ba66fe20 Readd the spektrum.cpp to arm CMake file that commit e25db7e removed 2016-07-25 21:12:44 +02:00
Arne Schwabe fdcc60b1b9 Fix AR9X build and add it to regular commit tests.
Note that simu still crashes on startup in the readRtc function
2016-07-25 16:49:04 +02:00
Nathan bea0411071 remove i6 code for now (#3663) 2016-07-25 06:53:19 +02:00
Bertrand Songis c97ba2bb83 Warning removed 2016-07-24 13:36:32 +02:00
Bertrand Songis 7e6b9ebf4f Igore list updated, build_all.sh at the root of the project removed
If needed we could move the radio/utils directory to /utils
2016-07-24 11:34:45 +02:00
Bertrand Songis ab6c6babae Cosmetics 2016-07-24 11:31:47 +02:00
Nathan e25db7e9e0 split up the cmakelist by target (#3661)
* split up the cmakelist by target

* new target for the flysky-i6

* organization per @bsongis suggestion
2016-07-24 06:55:58 +02:00
Bertrand Songis 0ad015f3e7 Cosmetics 2016-07-23 19:28:30 +02:00
Andre Bernet dd44da14bc Fix SE translations 2016-07-22 20:21:30 +02:00
Bertrand Songis 43d618a1de Cosmetics 2016-07-22 18:16:50 +02:00
Arne Schwabe 352de89838 Spektrum telemetry implementation (#3659)
* Implementation of Spektrum Telemetry for the DYI Multimodule.

I can only test a subset of sensors and these look okay

* Implement conversion from Fahrenheit to Celsius

* Minor fixes for Spektrum telemetry

* Add some more sensors, show sensor ID instead of instance in the overview
2016-07-22 17:38:11 +02:00
Arne Schwabe a28cbf88f3 Add cmake configuration for Libfox. (#3660)
* Add cmake configuration for Libfox.

CMake on OS X does not find libfox in the homebrew location otherwise

* Fix findpackage(Fox) for case sensitive systems
2016-07-22 17:35:49 +02:00
Andre Bernet 789326d2cd Cosmetics 2016-07-19 11:12:08 +02:00
Andre Bernet a11db7d73f Schedule mixer properly for new multimodule frame rate 2016-07-19 11:11:43 +02:00
Andre Bernet a6ceb56dcd Speed up multimodule output from 22ms to 9ms 2016-07-18 20:18:19 +02:00
Andre Bernet 0a1e913ecd French translations 2016-07-18 20:17:55 +02:00
Andre Bernet e33ae0e1ac Cosmetics, French translations 2016-07-16 14:51:32 +02:00
Andre Bernet 7babf26809 Multimodule ported to Horus (#3657) 2016-07-16 14:21:45 +02:00
Arne Schwabe 04c85942f1 Fix issues with translations of multimodule and make German translation more German 2016-07-16 13:59:29 +02:00
Arne Schwabe b432056698 Fix changing back from custom multi protocol selection to normal protocols 2016-07-16 13:35:29 +02:00
Arne Schwabe e2efe2ac70 [TARANIS] Reset option value to 0 on change of multi protocol, fix string overwriting for option value 2016-07-15 15:33:55 +02:00
Arne Schwabe 66e352d3c0 [Taranis] Multimodule: Fix off by one error that caused to need two presses instead of one when moving across the multimode option lines 2016-07-15 12:51:09 +02:00
Arne Schwabe f06c1e0be7 [Taranis] Fix overlapping strings in Multi module 2016-07-15 11:30:41 +02:00
Bertrand Songis e58bdff8a9 [S6R] ID changed 2016-07-13 18:44:31 +02:00
Andre Bernet a0476f0a7c Translation fix 2016-07-13 07:44:07 +02:00
Bertrand Songis b966db4fa5 [S6R] More fixes 2016-07-11 23:29:10 +02:00
Andre Bernet 78da936536 Compilation fix 2016-07-11 15:10:29 +02:00
Andre Bernet 35afe4c1ea Cosmetics 2016-07-11 13:15:50 +02:00
Bertrand Songis ea18909b46 [Crossfire] More field types supported 2016-07-10 23:37:33 +02:00
Bertrand Songis fed4450a8d [Horus] DE translations by Hrenz, thanks! 2016-07-10 10:58:28 +02:00
Andre Bernet 2dd30c228d No SQT5 font on Horus 2016-07-09 16:37:20 +02:00
Andre Bernet 6e6ff7d313 Compilation fix for nooverridech option 2016-07-09 16:15:27 +02:00
Bertrand Songis 3faa81d799 [Taranis] It's now possible to use killEvents() on PAGE_LONG in Lua standalone scripts 2016-07-09 12:39:54 +02:00
Bertrand Songis 0da921df0d [S6R] Fixes 2016-07-09 10:42:36 +02:00
3djc 2f8effb6d1 Add function name to debug output (#3647)
* Add function name to debug output

* Better english, hopefully :)

* Possible fix for not trying to run background widgets function when it does not exist

* Typos
2016-07-06 18:41:45 +02:00
3djc 53d8a615a0 update function is required if you don't want lua errors when not displayed. it can be empty, but since we have one, let's keep it counting ! (#3646) 2016-07-05 21:55:47 +02:00
Andre Bernet 49839b712b Release note windows had close button disabled (fix #3650) 2016-07-05 13:32:27 +02:00
Bertrand Songis e6c01cd140 [Taranis] The menu arrays were duplicated 2016-07-04 21:34:21 +02:00
Bertrand Songis 1f15636ca4 [Horus] configure_pins completely removed 2016-07-04 21:16:23 +02:00
Bertrand Songis c9b3fb2994 [Horus] Unused variables 2016-07-04 21:13:21 +02:00
3djc e5e02927af Fix colors on the new slowdelay bitmap (#3644)
Optimize code a little
2016-07-04 20:26:11 +02:00
3djc 4148643492 Cosmetics 2016-07-04 19:58:23 +02:00
3djc 9237d6af63 3djc/horus fine tune mixers setup (#3643)
* Optimize display for mixer setup

* Make mixer setup screen full icons

* - Display flighmode in SMLSIZE
- Add icon for it
- Space out things given then gain space

* Introduce SLOW_BLINK (half rate BLINK)
WARNING : code for both DS and single icon 'DS' is here, need cleaning before PR after choice is made

* Introduce snail and hourglass icons
Fine tuning

* Move to single icon column for DS (3 possibles icons)
Space things a little

* delayslow icon

* delayslow icon
2016-07-04 19:54:50 +02:00
Damjan Adamic 646170fe19 Taranis LCD driver: removed some unnecessary lines and cosmetics 2016-07-03 19:40:56 +02:00
Damjan Adamic c8638bae9d Cosmetics 2016-07-03 17:58:35 +02:00
Andre Bernet 88e9e6c6a4 Compilation fix, different definition needed for recommended pthreads version 2016-07-02 14:30:31 +02:00
Bertrand Songis e555cbbdba [Horus] REPEAT_LAST_CURSOR_MOVE did a key beep 2016-07-02 12:03:22 +02:00
Bertrand Songis 30f31450ce Cosmetics 2016-07-02 09:56:16 +02:00
Damjan Adamic 42aa06a166 Re #3635: added missing compound statements (ported from master) 2016-07-01 12:55:28 +02:00
Andre Bernet b48e14eeb9 Compilation fixes, snprintf now supported on VS2015 2016-06-30 23:39:04 +02:00
Bertrand Songis c777af2b72 Compilation error fixed 2016-06-30 23:06:03 +02:00
Bertrand Songis 5f03924b5f Compilation error fixed 2016-06-30 22:44:16 +02:00
3djc fef4bff9fa 3djc/horus cosmetics (#3640)
* Move miscellaneous bitmaps load to a specific function

* Adujst channel monitors colors for Darkblue
2016-06-30 20:36:11 +02:00
Bertrand Songis 9b7a4352d6 [Horus] Cosmetics in MODEL SELECTION screen 2016-06-30 19:32:40 +02:00
3djc e33c56d1eb 3djc/horus improve mixer setup (#3636)
* Rework to display bar on mixers, hence needs a more flexible drawSingleXXBar approach

* First working version
WARNING : displayMixConvertMask() DOES have a bug, do NOT PR without fix

* Fixed displayMixConvertMask() bug
Cosmetics on placement on status bar

* Cosmetics

* Improved graphics by mhotar !

* Fix for multiple lines mixers
Cosmetics

* Fine tune column values to handle more complex mixers lines

* Replace +=, *=, := by icons

* No needs to use mask bitmap

* Remove unwanted png file

* Fix handling and conversion of Mask to Bitmap

* use loadAndConvertMask here too

* Typo

* Screen layout fine tune

* - Move loadMaskOnBackground to framebuffer.cpp
- replace loadMaskAndConvert by loadMaskOnBackground

* Cosmetics

* Move new icons to theme loading

* Fine tune Mixer setup screen on darkblue
2016-06-30 18:53:07 +02:00
Bertrand Songis 2e78dad1a7 [Horus] Custom switch names badly displayed 2016-06-29 19:56:18 +02:00
Bertrand Songis 39c7e56b16 [Horus] Navigation line by line in COLOR widget settings 2016-06-28 23:26:28 +02:00
Bertrand Songis 6d57f55662 PPMCA option is now ON by default 2016-06-28 22:16:57 +02:00
Bertrand Songis 93f21bc18f [Horus] Move models from one category to another 2016-06-28 22:06:21 +02:00
Bertrand Songis ce63768df3 [Horus] Unused string removed 2016-06-28 21:28:27 +02:00
Bertrand Songis 2b845314f5 [Horus] Model move within a category 2016-06-28 20:01:06 +02:00
Damjan Adamic 25aab85c9b Fixes #194: added logging of TX battery voltage 2016-06-28 09:07:34 +02:00
Damjan Adamic 0f8b36fb3d Fixed C compiler warnings about "std=gnu++11" flag 2016-06-28 08:49:43 +02:00
Damjan Adamic 52bb358662 Fixes #2022: Logical switches logged in HEX format with LSW header label 2016-06-28 08:48:17 +02:00
Andre Bernet 7c57512f94 LSs weren't selectable as input source (Fix #3632) 2016-06-27 22:47:53 +02:00
Martin Hotar ad998f5787 Horus multiplex icons 2016-06-27 20:27:20 +02:00
Bertrand Songis 757bb55d81 [Crossfire] Parser improved with date / time 2016-06-27 19:14:44 +02:00
Bertrand Songis 8808c3aae6 [Horus] Trackpoint background 2016-06-27 19:14:15 +02:00
Martin Hotar 46ba761b8d Horus trackpoint background png 2016-06-26 21:48:49 +02:00
3djc 415dc10141 Simplify code (#3630) 2016-06-26 13:32:49 +02:00
3djc 4dcb4a7b10 Simplify code 2016-06-26 10:50:01 +02:00
3djc 0b2f188381 Replace graphics for limits, make them [] instread of ][ (#3629) 2016-06-26 09:36:56 +02:00
Bertrand Songis b0f9d69f7c [Horus] New model selection menu started 2016-06-25 19:39:29 +02:00
Bertrand Songis 4cc49d0d30 [Horus] Mouse analogs now OK 2016-06-25 18:16:05 +02:00
3djc 88511c1ba9 [Horus] Channels Monitor : cosmetics 2016-06-25 14:21:39 +02:00
3djc 1a77d1ffda 3djc/horus chan mon fix mixers limits (#3626)
* Review Channel monitor to handle mixers outside -100/100
Percentage values are now displayed on bar, for both mix and out

* Cosmetics (uncrustify)

* Channels monitor bars color and background now theme driven

* Add TEXT_STATUSBAR_COLOR (was ToDo)
Rename for consistency

* Replace text by graphic caption

* Cosmetics

* Remove unwanted vertical line on chanVal

* Tidy up code a little

* Tidy up

* Change green bar to grey
Introduce a space between outputs and mixers bar

* Partial cosmetics

* Fix bad copy/paste
2016-06-25 14:11:22 +02:00
Bertrand Songis 6861d6c8a4 [Horus] Mouse analogs hex values now OK 2016-06-25 08:36:51 +02:00
Bertrand Songis f69295b8f9 [Horus] Mouse analogs 2016-06-25 00:08:17 +02:00
Bertrand Songis 80291c73c4 [Horus] Nothing on Heartbeat PIN 2016-06-24 21:45:49 +02:00
Martin Hotar f697d36b1c Horus model library mask images and library icons (transparent png) 2016-06-24 11:26:25 +02:00
Andre Bernet 8119da792d VC++ compilation 2016-06-23 15:35:32 +02:00
Andre Bernet e282c02be2 VC++ compilation 2016-06-23 08:08:56 +02:00
Bertrand Songis ddc424de50 [Horus] Use of templates to avoid duplicated code in monitors screens 2016-06-22 23:09:02 +02:00
3djc 3ee9f56423 3djc/test combined mixer output mon (#3622)
* Merge outputs and mixers in a single 'bar'
View 8 per page

* Cosmetics

* Add proper icons for channels3 and 4

* Bars colors now fixed by overwhelmingly popular demand

* Fix outL outR display

* Add bottom line description to avoid confusion between outputs and mixers

* Cosmetics

* Typo
2016-06-22 22:51:11 +02:00
Bertrand Songis 38fdae6f1f Fixes #3609 - ``background()`` function in Lua function scripts 2016-06-22 18:32:51 +02:00
Bertrand Songis 0bcd0a0c09 [Crossfire] Fields update now OK (for text selection) 2016-06-22 07:29:21 +02:00
Bertrand Songis 155656c88a [Crossfire] Shorter traces 2016-06-21 22:50:01 +02:00
Bertrand Songis e64464ff9b [VC++] Compilation fixes 2016-06-21 20:25:17 +02:00
3djc ea562a2502 3djc/ls mon bugfix (#3618)
* First step into fixing the bug. One issue remains, when left encoding, it requires two exist

* Bsongis did magic again !

* Housekeeping
2016-06-20 21:12:46 +02:00
Bertrand Songis 732fea6c23 [Horus] Avoid loading bitmaps at full speed if they don't exist 2016-06-20 07:01:51 +02:00
3djc a26c5461ab Rearange long enter menu (#3614)
* Rearange long enter menu

* Remove duplicate
2016-06-19 14:26:53 +02:00
Andre Bernet 0c49f35687 New chat link 2016-06-19 13:10:40 +02:00
3djc 4ad8c79bc1 3djc/add logicial switches monitor (#3611)
* Prep work for Logic Switches

* Feature complete

* Fixe for sometime needing two RTN to get out of logical switchs monitor
All monitors title bar in upper case for consistency with the rest of OpenTX

* Cosmetics

* Add translations support to the MONITORS screens

* Add the right icon to the logical switch monitor

* Cosmetics

* uncrustify

* Cosmetics
2016-06-19 12:46:51 +02:00
Bertrand Songis d01b427127 [Horus] Improved fix for the BOLD | TINSIZE bug (it takes care of all impossible combinations now) 2016-06-19 08:50:16 +02:00
Damjan Adamic f1bdb931b8 Fixes #3549: disable trim processing in while shutdown is in progress, do no turn of the back-light before the shutdown (#3612) (ported from master) 2016-06-18 22:26:25 +02:00
Bertrand Songis 53b51cac94 Bsongis/crossfire refactoring (#3613)
* Crossfire refactoring

* Crossfire script now displaying fields

* Crossfire script now displaying text selection values
2016-06-18 22:16:50 +02:00
3djc ab58151f2a Fix for TINSIZE | BOLD. If called, BOLD is discarded (#3610) 2016-06-18 22:15:28 +02:00
Bertrand Songis dad37f36ba Cosmetics 2016-06-18 17:13:41 +02:00
Bertrand Songis e80d3ff642 Taranis hangs when compiled in DEBUG mode without CLI 2016-06-18 15:22:50 +02:00
Bertrand Songis 464996d3c3 Small refactoring in View channels 2016-06-18 00:36:41 +02:00
3djc 5ed74f1329 3djc/Mixer monitor (#3606)
* Add menu mechanics for 2 Mixers screens and 2 logical switches screens

* Add two mixer pages. To prevent errors, the Mixer bar are green (as opposed to red for outputs).

Icons for those pages are not yet the right ones

* Ready for mixers monitor PR
2016-06-17 23:54:35 +02:00
Bertrand Songis 4445f7cdec Bsongis/issue 3600 emergency shutdown (#3602)
* [ARM] Fixes #3600 - Emergency shutdown

* Compilation fix

* Function renamed

* Compilation fix

* Compilation fix

* Compilation fix

* Suggestion from projectkk2glider
2016-06-17 07:32:33 +02:00
Bertrand Songis 238943f4a2 Cosmetics 2016-06-16 16:06:12 +02:00
Bertrand Songis 900266be4a [Crossfire] Cosmetics 2016-06-16 15:18:32 +02:00
Bertrand Songis e50aa21dd2 [Crossfire] Devices parameters script started 2016-06-16 11:53:45 +02:00
3djc 98b1029bec 3djc/chan mon improve (#3604)
* Prepare for more flexibility (and a much better look)

* [Horus] Preparation for a new Channels menu

* monitor bar icons added

* Add ICONS structure and populate for MONITOR pages

* Restore old widget (had used it for temp work), will likely update to the newer look later

Functionnal output monitor 1,2, still need extended and overrides

* extended limits

* Overrides are now managed

* Back to Red ;)
Add outL outR to hightlight out of limits values

* Rewrite of posOnBar, as it was getting overly complex
subtrin now fulland more logicaly managed

* Fix overrides

* Center bar drawn last to be always visible

* Limits need to go through extend limits display calculation as well

* remove debug printf

* Add inverted output icon

* Tidy up and cosmetics
2016-06-16 10:14:53 +02:00
Bertrand Songis 9b5b9be50c [Crossfire] Telemetry packets are bigger 2016-06-15 22:19:10 +02:00
Bertrand Songis d51e86b669 [Horus] #3599 - Another emergency message when there is no SD 2016-06-15 19:59:18 +02:00
Bertrand Songis de52ee513c Cosmetics 2016-06-15 19:58:19 +02:00
Bertrand Songis 370f954e10 [Horus] #3599 - Crash in case of 0 model categories in models.txt (which happens at least when SD is not present) 2016-06-15 19:57:35 +02:00
Bertrand Songis d287027502 menu_model_custom_functions renamed to model_special_functions 2016-06-15 19:37:32 +02:00
Bertrand Songis f5a4d51c8f [Horus] Bug in Special functions contextual menu (when the Volume function was used) 2016-06-15 19:23:23 +02:00
Bertrand Songis c172d9727c [Crossfire] Telemetry logs parser 2016-06-14 21:50:50 +02:00
Bertrand Songis c0d53f4506 [Horus] background.bmp renamed to background.png 2016-06-14 21:29:58 +02:00
Andre Bernet 88b655764d [Horus] Encoder speed tweaks 2016-06-14 19:26:41 +02:00
Bertrand Songis 4519dadee4 [Horus] Rotary encoder now has 3 speeds. To be ported to X9E if it's good 2016-06-13 20:56:09 +02:00
Damjan Adamic d5e4f1132b Fixes #3595: show value of persistent sensor after power on, before the telemetry is received 2016-06-13 20:29:00 +02:00
Arne Schwabe 95641d649d [HORUS] Fix compiling Horus with Dangerous module functions 2016-06-12 21:11:10 +02:00
3djc 5a3fc73946 Add scale to lcd.drawBitmap. Scale is like in % (50 divides by two, 200 doubles) (#3592)
Default scale to 0 to allow DMA in target function (thx Bertrand)
2016-06-12 16:01:05 +02:00
Bertrand Songis f415f38ba6 Compilation fix 2016-06-12 15:27:55 +02:00
Bertrand Songis 21075d5a4c Compilation fix 2016-06-12 13:41:50 +02:00
Andre Bernet 4226b7c89b Fix overlap in numbered sound file names 2016-06-12 12:02:51 +02:00
3djc ac953cdcc8 3djc/document lua bitmaps (#3588)
* Create lua doc for previously added Horus bitmaps functions

* Cosmetic
2016-06-12 10:52:02 +02:00
Neil Horne dd12d09c92 Issue 3473 port to next (#3587) 2016-06-12 10:49:59 +02:00
Bertrand Songis 13558214a8 Compilation fix 2016-06-11 23:41:18 +02:00
Martin Hotar db741860c1 companion splash22 (#3586) 2016-06-11 23:41:21 +02:00
Bertrand Songis e219446703 Compilation fix 2016-06-11 23:15:55 +02:00
Bertrand Songis 862fa5525e [Crossfire] Upstream link development started 2016-06-11 20:05:51 +02:00
Andre Bernet 8523a2fdaf Translations cleanup 2016-06-11 19:03:29 +02:00
Bertrand Songis 1f87920fe4 Compilation fix 2016-06-11 18:40:45 +02:00
Bertrand Songis 6fac983c8a EEPROMS directory renamed to EEPROM 2016-06-11 18:24:23 +02:00
Bertrand Songis c5096ff531 Main view index now stored in model settings instead of radio settings 2016-06-11 18:09:18 +02:00
Andre Bernet 22efe664d5 [Horus] Prevent Value widget from being invisible when telemetry isn't available and it's displaying a telemetry value 2016-06-11 17:22:20 +02:00
Bertrand Songis 6db0c0791a [Horus] Current model overwritten in MODEL SELECT when selecting a new model 2016-06-11 13:53:53 +02:00
Bertrand Songis 1db3e1f816 [Horus] Current model overwritten in MODEL SELECT when selecting a new model 2016-06-11 13:30:53 +02:00
Bertrand Songis 99cce1b33f BMP and FIRMWARES renamed to IMAGES and FIRMWARE 2016-06-11 10:23:05 +02:00
Bertrand Songis bdae43c091 menu_general_XXXX should be renamed radio_XXXX
Second file done :)
2016-06-11 10:17:18 +02:00
Bertrand Songis ec2b5d66cb menu_general_XXXX should be renamed radio_XXXX
First file done :)
2016-06-11 10:15:34 +02:00
Bertrand Songis 6fd538f30e [Horus] Months translations 2016-06-11 09:03:51 +02:00
Bertrand Songis d77662b53e [AVR] DSM2 re-added 2016-06-11 08:58:09 +02:00
Bertrand Songis 71e71f8314 New translations 2016-06-11 08:57:31 +02:00
Bertrand Songis 17ab2c83aa [Horus/Taranis] Pulses cosmetics 2016-06-10 23:37:26 +02:00
Bertrand Songis 575eb3d0d1 [Horus] MODEL SELECT bug fixes 2016-06-10 23:35:54 +02:00
Bertrand Songis c22818442e [Horus] Problem when resizing transparent bitmaps 2016-06-10 23:35:16 +02:00
reichi 0c926e5d19 Allow software based volume control (#3556)
* Allow software based volume control
- enable it for AR9X
- rename "HARDWARE_VOLUME" defines to "MASTER_VOLUME"
- adjust build-firmware.py and fwoptions.py

* Software based volume control: Do it right

* whitespace cleanup

* software volume: cleanup/revert some leftovers of undone changes
2016-06-09 22:50:06 +02:00
Neil Horne beb21ab7db Fixes #3547: Flight modes linked trims display value (#3568) (ported from master) 2016-06-09 19:37:22 +02:00
Bertrand Songis a7e1867878 [Horus] Category rename was not saved on SD 2016-06-09 18:20:15 +02:00
Bertrand Songis 0f33b1b0a9 [Horus] Comment from @projectkk2glider taken into account 2016-06-09 18:08:55 +02:00
reichi 8606e75f45 Add Support for the DS3231 RTC and enable it for AR9X, refs #3531 (#3555)
* Add Support for the DS3231 RTC and enable it for AR9X, refs #3531

* fix compile for PCB=sky9x

* rtc ds3231: Add missing OpenTX headers
2016-06-09 17:58:42 +02:00
Bertrand Songis 0c66f520a2 [Horus] Small bug with Trainee 2016-06-08 22:32:11 +02:00
Bertrand Songis f488ebc1f5 [Horus] I forgot this part for PPM pulses ... 2016-06-08 22:19:54 +02:00
Arne Schwabe 5bcde76ca0 Add the ARR change to multi in the same way as for DSM2 in commit 404c5a8 2016-06-08 22:23:45 +02:00
Arne Schwabe 540faa51bf Use __ALIGNED instead of __DMA which is identical to __DMA without the section on Hours 2016-06-08 22:04:40 +02:00
Bertrand Songis 010d9d9629 Warning removed 2016-06-08 20:37:16 +02:00
Bertrand Songis 404c5a8553 [Taranis] Trainer / Trainee again OK. Not tested on Horus 2016-06-08 20:26:30 +02:00
Bertrand Songis 1a7a07dffd [Horus] MODEL SELECT current model refresh bug 2016-06-08 19:45:03 +02:00
Bertrand Songis 4588c0119d [Horus] Cosmetics 2016-06-08 19:44:02 +02:00
Bertrand Songis 43387d1794 Simu SEGFAULT 2016-06-08 19:43:36 +02:00
Bertrand Songis d2180d9429 [Horus] Cosmetics 2016-06-08 19:42:37 +02:00
Bertrand Songis 238ef2be38 [Horus] In MODEL SETUP screen BEEP center settings are visible even when INVERS 2016-06-08 19:41:44 +02:00
3djc 177f672619 Fix #3539 on Next (#3573) 2016-06-07 23:33:27 +02:00
Arne Schwabe 0c525826b4 Fix alignment bug of pulses data array (#3575)
The second element of the modulePulsesData was never forced to be correctly aligned. Without the new
pulses and without the Multimodule code the second element was never misaligned since the PXX pulses
union member was always the largest member and was 4 byte aligned by coincidence, also making the
second modulePulseData array member 4 byte aligned.

With the Multimodule option enabled the dsm pulses struct becomes the largest union member with 607 bytes
and the second modulePulsesData is not aligned to anything anymore which completely screws up the pulses
generation.

Forcing the alignment of the ModulePulsesData fixes this issue.
2016-06-07 23:32:51 +02:00
Bertrand Songis e3d22300ed [Horus] Model Select bugfixes 2016-06-07 20:35:17 +02:00
Bertrand Songis 06bef98a05 [Horus] Model bitmaps can now be either BMP or JPG or BMP 2016-06-07 20:35:17 +02:00
Bertrand Songis 5822cfded1 [Horus] Options in widgets can now have a min and a max defined 2016-06-07 20:35:17 +02:00
Bertrand Songis 3940716b5d [Horus] Cosmetics 2016-06-07 20:35:17 +02:00
Bertrand Songis 8493a393fd Problem with directories in simulator when listing files 2016-06-07 20:35:17 +02:00
Bertrand Songis 5ee95c472a Telemetry units shifted on all AVR boards 2016-06-07 20:35:17 +02:00
Arne Schwabe b6d4442ba1 Fix interrupt handler not handling multiprotocol (Pulses fix) (#3570)
* Fix interrupt handler not handling multiprotocol

* Use proper Macros in driver, remove wrong comment about ppm
2016-06-07 07:31:35 +02:00
Arne Schwabe 36423db252 tell dfu-util to boot the device to boot after flashing (#3571)
Only tested on my X9D+. It allows me to boot the device into the OpenTX firmware by using 'make flash' (on switch must be on), combined with -DUSB=SERIAL and -DCLI=YES and the reboot command I can test a new firmware on the device without removing/plugging the usb cable
2016-06-06 22:22:27 +02:00
Bertrand Songis 0ea133e490 Compilation fix (with gcc 4.9) 2016-06-06 22:07:45 +02:00
Bertrand Songis 4be6cfccab [Taranis] Crossfire "Flight mode" telemetry sensor now OK 2016-06-06 21:59:49 +02:00
Bertrand Songis 14f4eec6f7 [Taranis] Icon in top bar when DEBUG options enabled 2016-06-06 21:58:16 +02:00
Bertrand Songis 01e7c249f6 [Taranis] Cosmetics in SENSOR screen 2016-06-06 21:57:25 +02:00
Bertrand Songis 0eba4596d0 [Horus] Black icon in left top corner when DEBUG options enabled 2016-06-06 21:47:39 +02:00
Arne Schwabe 81733b10cc [Companion] Implement print functions for the hell setup screen (fixes 3430) (#3554)
Fixes #3430: added print functions for the hell setup screen
2016-06-06 21:01:49 +02:00
Bertrand Songis 2cccb99e28 [Telemetry] Shift in telemetry units 2016-06-06 20:43:14 +02:00
Bertrand Songis c20b0b8de4 [Horus] MODEL SELECT screen continued 2016-06-06 20:16:11 +02:00
Bertrand Songis 0cf3a278e8 [Horus] MODEL SELECT screen continued 2016-06-06 19:36:18 +02:00
Bertrand Songis f6b9a0fcdb [Horus] Black icon in the left top corner in case we are in DEBUG mode (WATCHDOG_DISABLE / TELEMETRY_LOGGING) 2016-06-06 19:30:13 +02:00
Bertrand Songis 1be84e3b6d [Horus] Cosmetics in CALIBRATION screen 2016-06-06 19:10:29 +02:00
Bertrand Songis 74fd8fc435 [Horus] Arrow keys disabled in Model Select 2016-06-06 19:09:33 +02:00
Bertrand Songis 3d117efae1 [Horus] Crash when renaming model category 2016-06-06 19:08:46 +02:00
Bertrand Songis 0cf81a7245 [Taranis] ADC DMA moved for X9E 2016-06-06 19:01:09 +02:00
Bertrand Songis 5ff6341a34 [X9E] More constants to hal.h 2016-06-06 18:56:16 +02:00
Bertrand Songis 69f2acca35 [X9E] Compilation fix 2016-06-06 18:48:15 +02:00
Bertrand Songis 6f2ece9cd0 [X9E] I move constants to hal.h first 2016-06-06 18:45:14 +02:00
Bertrand Songis 7ef9992349 Bsongis/horus xjt external module (#3566)
* [Horus] PXX and DSM2 in external module
* [Taranis] Pulses driver refactoring (uses DMA also for PPM in external module and saves 800bytes RAM)
* Cosmetics (Pulses driver splitted)
2016-06-05 22:34:16 +02:00
Bertrand Songis 5767be27b6 [Crossfire] New frame ATTITUDE added 2016-06-04 12:36:37 +02:00
Bertrand Songis 068fa45a06 [Horus] The backlight becomes ON when the PWR button is pressed 2016-06-04 09:30:37 +02:00
Bertrand Songis 348526b5ba [Horus] Just one DMA trace added to the CLI to start with something... 2016-06-04 09:29:40 +02:00
Bertrand Songis a9f518c3a0 [Taranis] Asterisk icon when WDT is disabled or TELEMETRY_LOGGING enabled 2016-06-04 09:28:27 +02:00
Bertrand Songis 8f0a47b724 [Horus] Cosmetics 2016-06-04 09:27:34 +02:00
3djc f6f43ee438 3djc/tiny batt check (#3565)
* Add tiny size for top bar

* Fix volatage with %2.2f format

* There are case where one is better than two :D
2016-06-03 17:08:22 +02:00
3djc 98ee2f8f52 Small fix to allow better display of widget label when selecting widget (#3562) 2016-06-03 09:36:32 +02:00
3djc 90cb89e86a 3djc/improve widget setup (#3557)
* Draw widget name on title bar, posistioning rules will need to be improved !

* Move the name inside the widget and invert it to create like a label

* - Move implemeentation to a 'label' form upper right. Works with all current widgets but Battcheck (that I'll modify acccordingly), moving on, widgets dev know what to expect.
- Possible improvement : fade out label display after 2 secs

* Cosmetics
2016-06-03 08:46:14 +02:00
3djc cfcdf3c3f8 3djc/columns hints (#3561)
* Fix columns trim5 and trim6 for Horus

* - Try a more translator friendly way to deal with the Horus increased columns size

* Fix commit

* Proof of concept

* More languages

* -Introduce HINT()
-Remove HR instead of TR
2016-06-02 23:01:44 +02:00
Bertrand Songis f1d1bc9d95 [Horus] Cosmetics 2016-05-31 20:23:09 +02:00
Bertrand Songis 52e59fc85b SWR now only available in debug screens (not a telemetry sensor) 2016-05-31 20:23:09 +02:00
Bertrand Songis 61420db3ff Cosmetics 2016-05-31 20:23:09 +02:00
Arne Schwabe 3a63c9edea Fixes #3510: Fix heli inversion not correctly shown/saved from Companion on Radios without virtual inputs (#3517) 2016-05-31 19:04:49 +02:00
Bertrand Songis 086632003b [Horus] Column names are back + A small description in the status bar ... 2016-05-30 17:11:10 +02:00
Bertrand Songis 60334a3cf2 [Horus] Cosmetics 2016-05-30 17:04:43 +02:00
3djc f7ba671034 - Improve messages for clarity that FLVSS sensor is neeeded (#3551) 2016-05-30 09:32:51 +02:00
Andre Bernet bbd79f57ee Translation fixes, remove warnings 2016-05-27 11:35:20 +02:00
Andre Bernet ff9278cb0b [Horus] Long press ENTER on mix move/creation would switch weight to GV mode (fix #3539) 2016-05-27 11:14:38 +02:00
Andre Bernet 38cba03556 Compilation fix 2016-05-27 11:04:01 +02:00
Damjan Adamic 79b2015b6e Re #3536: cosmetics 2016-05-26 20:41:48 +02:00
Stephen Street 7dac0ba81b Allow companion to install in non-default location on linux (#3533) 2016-05-26 18:21:13 +02:00
3djc 4fcf8ab7ff Native channel monitor widget (#3530)
* Commit following git issues

* Remove unseless floor()

* Fix cmake resources compile problem

* Better fix for cmake resources compile problem

* - overdraw rectangle on gauge (looks better)
- use divRoundClosest

* Cosmetics
2016-05-26 18:20:48 +02:00
Bertrand Songis d471dc6216 Cosmetics 2016-05-26 18:19:24 +02:00
Bertrand Songis 1246c7d916 Merge branch 'Ingwie-next' into next 2016-05-26 18:18:08 +02:00
Ingwie d1d3f7fa0a MEGA2560 the first PPM pulse in the frame longer. #2938 is missing in next 2016-05-26 12:34:28 +02:00
Ingwie 116802c946 [MEGA2560] KS108+ Voice+Splash "far" (#3534)
+little option (not defined) to reduce encoder resolution
2016-05-26 06:33:09 +02:00
Damjan Adamic 74adc1c7e6 Fix cmake resources compile problem 2016-05-25 23:17:36 +02:00
Damjan Adamic 829b86da99 Cosmetics 2016-05-25 22:14:10 +02:00
BenZoFly 0eda971365 Fixes #3518: GVar combobox not being refreshed when GV checkbox (re-)selected (ported from master) 2016-05-25 22:14:10 +02:00
Bertrand Songis 5f65217124 [MEGA2560] Add KS108 lcd + voice + "far" splash for firmware > 64Kb (#3515) 2016-05-25 21:21:51 +02:00
Bertrand Songis 907b6337fc [Horus] Impossible to remove widgets in layouts 2016-05-25 14:00:48 +02:00
Bertrand Songis c9e9087ec9 Cosmetics 2016-05-25 13:48:10 +02:00
Bertrand Songis 231499e191 [Horus] Bitmap class and lcd.drawBitmap() added 2016-05-25 11:48:38 +02:00
Bertrand Songis b7ad1ea226 [Horus] Impossible to remove widgets in layouts 2016-05-23 21:20:55 +02:00
Bertrand Songis 144710f1f7 S6R bitmaps improved 2016-05-23 19:34:03 +02:00
Damjan Adamic 03b4797073 Compilation fix (DEBUG_INTERRUPTS) 2016-05-23 19:08:16 +02:00
Damjan Adamic 06fce5108e Closes #3505: add fuel quantity sensor in telemetry simulator (#3506) (ported from master)
* Closes #3507: raise max RPM in telemetry simulator to 2147483647 (0x7FFFFFFF)
2016-05-23 18:49:46 +02:00
Arne Schwabe 957bc11135 Also always use the usb id in make flash like Companion does
On my mac the internal usb keyboard also registers as DFU device, making make flash quit with an error that multiple DFU devices are detected
2016-05-23 18:05:57 +02:00
3djc 4765984900 Use only CUSTOM_COLOR, (#3523)
* Use only CUSTOM_COLOR, seem to have no interaction with the rest of the system, albeit issue reports where neither very precise or reproductible

* Fix Xlarge

* Fix medium and large
2016-05-22 20:42:06 +02:00
3djc 8bcbd0f7f6 Give BattCheck a 'selective' memory, that is forget about lowest cell when you change lipo without changing model or turning radio off (#3521) 2016-05-22 11:54:45 +02:00
Bertrand Songis d73e4a6fbf Compilation fix 2016-05-22 11:48:21 +02:00
Bertrand Songis e97fe93a2e [Horus] SBUS trainer mode removed 2016-05-22 11:14:57 +02:00
Bertrand Songis 55c69a4448 [Horus] Trainer driver fix (I tested both master and slave modes) 2016-05-21 20:08:20 +02:00
3djc c614b1ac67 Proper implementation of update to monitor cells when not displayed on screen (#3520) 2016-05-21 19:19:07 +02:00
Bertrand Songis 9b72be1f97 [Horus] Trainer driver fix 2016-05-21 15:19:42 +02:00
Bertrand Songis 36df7900af [Horus] Trainer driver fix 2016-05-21 15:06:03 +02:00
3djc d1e7b66f1a 3djc/batt check widget (#3519)
* Completely rewrite drawing sections to allow MUCHO easier size or position change.

* First take at large widget, missing fine tuning of displayed item, and background data collection

* Comparing lower cell with their live counterparts is so much better

* Make use of newly introduced update() function

* Tidy up
2016-05-21 14:15:39 +02:00
Bertrand Songis cfbec2cad9 Option DBLKEYS (default=enabled) added on all boards, except 9XR and 9XR-PRO 2016-05-21 11:27:17 +02:00
Bertrand Songis 7a2c0b3b88 [Horus] Widget::update added to the Lua interface (called when options are modified) 2016-05-21 11:08:01 +02:00
Damjan Adamic 0fad67a8ea Switch warning fix for Horus (#3516) 2016-05-20 23:05:32 +02:00
Bertrand Songis f3d6dfea94 Revert a quick & dirty change -std=gnu++11 2016-05-19 22:33:45 +02:00
3djc e032215186 Add widget not configured management (#3511)
Widget size 1/2 now available also
2016-05-19 18:08:26 +02:00
Bertrand Songis 32576b6f72 LUA option added to automatic builds 2016-05-19 07:00:27 +02:00
Bertrand Songis 7a98a85bc5 Cosmetics 2016-05-19 06:43:52 +02:00
Damjan Adamic 29a139559d Re #2999: More strict SBUS frame check (only allow 25 byte frames, ch… (#3501)
* Re #2999: More strict SBUS frame check (only allow 25 byte frames, check end byte)

* SBUS fixes
2016-05-19 06:30:19 +02:00
Bertrand Songis 7eba760797 Compilation fix 2016-05-18 22:21:44 +02:00
Bertrand Songis 6f8bfa8da5 Compilation fix 2016-05-18 22:04:41 +02:00
Bertrand Songis 9056e76460 [Taranis] RIGHT attribute added + TELEMETRY page splitted 2016-05-18 21:52:16 +02:00
Bertrand Songis 5d42c437a8 S6R Lua script fixes 2016-05-18 21:50:17 +02:00
Bertrand Songis 633af68fa9 [Horus] background function added to widgets 2016-05-18 18:49:06 +02:00
Bertrand Songis 1da69e4066 Dockerfile updated (zip needed for sd packs) 2016-05-17 23:52:47 +02:00
Bertrand Songis c13b5d064c [Taranis] S6R script splitted into 3 pages, bitmaps added, calibration added (still no answer from X6R) 2016-05-17 23:43:13 +02:00
Bertrand Songis f27a87dea4 toInt16 function added 2016-05-17 23:41:05 +02:00
3djc 4268ce9eca 3djc/batt check widget (#3498)
* Add 1/4th screen widget (in addition to existing 1/8th)

* Batt+ filled white

* Cosmetics

* Review copyright and zone handling
2016-05-17 06:56:35 +02:00
Damjan Adamic 8eda8244c6 Re #2826: Lua API: doc update for Cels- and Cels+ 2016-05-16 22:01:06 +02:00
Damjan Adamic 67c0326cca Re #2826: Lua API: return proper values for Cels- and Cels+ 2016-05-16 21:36:19 +02:00
Arne Schwabe 164844319a Remove "*.exe" from german translation for Unix/Mac (closes #3500) 2016-05-16 18:23:10 +02:00
Bertrand Songis aed4bf3709 Wizard images commited by mistake 2016-05-16 10:30:49 +02:00
Damjan Adamic a0feed7f4d Fixes #3492: better implementation of delay_01us() using Cortex system cycle counter (#3497) 2016-05-15 14:30:32 +02:00
Bertrand Songis 3f74d54fd9 RIGHT exported to Lua 2016-05-15 13:05:51 +02:00
Bertrand Songis f2d778e74e Curves fix for #3317 ported to 'next' 2016-05-15 08:30:32 +02:00
Damjan Adamic 1d4e6101ba Projectkk2glider/issue 3317 curves (#3451)
* Fixes #3317: curve Preset and Clear fixes

* Re #3317: cosmetics
2016-05-15 07:57:05 +02:00
Damjan Adamic 59653f9ca6 Fixes #3492: delay_01us() and delay_ms() functions were generating wrong delays (6 times shorter on Taranis, 8 times on X9E and Horus). Important delays adjusted, function names and code unified. (#3496) 2016-05-14 21:56:20 +02:00
Neil Horne 98798c1e42 Fixes #3459 Rotary encoders linked flight mode can freeze Companion (#3470) 2016-05-14 20:18:17 +02:00
3djc 721a166be3 Widget inital load. Currently working ONLY for SMALEST size (#3495)
* Widget inital load. Currently working ONLY for SMALEST size

* Allows selection of Cels sensor in the widgets settings, cosmetic (indentation)

* Change indent to 2
2016-05-14 20:15:07 +02:00
3djc dcd42145d0 3djc/add lcd.rgb (#3494)
Add docs for lcd.setColor and lcd.RGB
2016-05-14 16:58:29 +02:00
Bertrand Songis cc6ccdc3ab Travis good? 2016-05-14 12:15:49 +02:00
Bertrand Songis 29d1c4f6f6 [Taranis] DMA2_Stream1 used for SBUS Rx in the module bay 2016-05-14 12:12:01 +02:00
Bertrand Songis 0467ef862f Again OK with python2 2016-05-14 12:09:26 +02:00
Bertrand Songis 30f2f3a1e4 Again OK with python2 2016-05-14 12:08:11 +02:00
Bertrand Songis 77ca37cf96 Update README.md 2016-05-14 11:40:27 +02:00
Bertrand Songis f63a9c4cb7 Travis install time reduced (#3493) 2016-05-14 11:33:02 +02:00
3djc 7b3dcec30e Fix lcd.drawGauge outer rectangle which was always black 2016-05-14 02:12:04 -07:00
Damjan Adamic 7161d90297 gtests fix 2016-05-14 10:22:17 +02:00
Bertrand Songis 082e2bbefd [Horus] Timer countdown ported to Horus 2016-05-14 00:16:17 +02:00
Bertrand Songis 5b7526c5e8 Fixes #2999 in 'next' (OpenTX 2.2) 2016-05-13 16:51:04 +02:00
3djc 01a69e3dbf Do not export COLOR_INDEX to LUA anymore, as they are not needed anymore due to change in setColor (#3490) 2016-05-13 16:18:40 +02:00
Bertrand Songis aaa10034ad S6R script update 2016-05-13 14:41:48 +02:00
Bertrand Songis 7908eaa406 [All] Code refactoring
- keys beep and haptic refactoring (not anymore audio events)
- trims move/mid/min/max refactoring (trim end splitted to trim min / trim max)
- S6R new alarms
- S6R servos/rx status displayed as a text (not an integer which has no sense)
- Timer countdown configuration
- The splash was not displayed (but the timeout was there) after the first calibration
2016-05-13 14:41:48 +02:00
3djc 24abad55ca Fix CUSTOM_COLOR,… (#3489)
* Fix CUSTOM_COLOR, also change to way setColor work to a more natural : lcd.setColor(CUSTOM_COLOR, RED)

* Remove _INDEX from TBS main to match the recent change to setColor
2016-05-13 14:26:18 +02:00
Bertrand Songis 77888ae200 TTS scripts were completely broken 2016-05-13 13:08:56 +02:00
3djc e55a84d8b7 Enables lcd.drawGauge on Horus (#3487)
* Enables lcd.drawGauge on Horus

* cosmetic, unsigned, and add flags
2016-05-13 12:34:59 +02:00
Bertrand Songis f46ff84845 S6R Lua script fixes 2016-05-13 10:57:15 +02:00
Bertrand Songis a8480f9af2 Cosmetics 2016-05-13 09:34:56 +02:00
Damjan Adamic 06d9ec846d Re #3485: variable type fix 2016-05-12 22:25:35 +02:00
3djc 0ec122f519 Fix lcd.drawRectangle on Horus (#3485)
* Fix lcd.drawRectangle on Horus

* Fix lcd.drawRectangle on Horus, this time not breaking other platforms

* Fix lcd.drawRectangle on Horus, this time *realy ?* not breaking other platforms

* Fix lcd.drawRectangle on Horus, default thickness to 1

* Fix lcd.drawRectangle on Horus, move to unsigned, following projectkk2glider comment

* Fix lcd.drawRectangle on Horus, spelling

* Fix lcd.drawRectangle on Horus, indent (hope I did understand your comment correctly
2016-05-12 22:08:30 +02:00
Damjan Adamic 49b3e5428f Fixes #3476: better representation of negative mixer weight in offset bar widget (ported from master) 2016-05-12 21:05:36 +02:00
Damjan Adamic 2df621993e Enable DSM protocols on all targets that define DSM2 macro, not just on Taranis. (#3471) (ported from master) 2016-05-09 20:42:27 +02:00
Damjan Adamic 49cad7f757 Re #3462: Lua doc update 2016-05-09 19:29:52 +02:00
elecpower 5f648b2050 Fixes #3214: Flight mode clear (ported from master, Re #3460) 2016-05-08 20:39:37 +02:00
Bertrand Songis fa9b94bb71 Cosmetics 2016-05-07 15:36:36 +02:00
Bertrand Songis dabfb705be [Horus] Cosmetics 2016-05-07 11:21:37 +02:00
Bertrand Songis ec6a9541f1 [Horus] Another fix for french special chars + input icons 2016-05-07 11:21:02 +02:00
Andre Bernet 1c7bd63a94 [Horus] Input icons were broken 2016-05-07 10:30:41 +02:00
Andre Bernet 3b445321fc [Horus] Layout cosmetics 2016-05-06 23:28:45 +02:00
Damjan Adamic 6349ff9496 Fixes #3462: PlayTone check for min/max frequency added. Fixes Lua playTone() crash when called with abnormal parameter values. (#3468) (ported from master) 2016-05-06 22:44:43 +02:00
Damjan Adamic 8cd677d697 Projectkk2glider/issue 3463 negative filtered sensor values (#3469) (ported from master)
* Fixes #3463: negative sensor values were invalid if filter was active for the sensor

* Re #3463: enable simultaneous use of `offset` and `filter` (was: when `offset` was enabled, the `filter` was always inactive even if enabled)
2016-05-06 22:37:05 +02:00
Bertrand Songis e2247623a2 [Horus] Shutdown animation in EMERGENCY mode - not tested 2016-05-06 10:23:32 +02:00
Bertrand Songis cd9c17e1f4 Cosmetics 2016-05-06 10:21:32 +02:00
Bertrand Songis 8dee23d9d3 Build scripts update 2016-05-05 22:33:53 +02:00
Bertrand Songis a5a4309cee Build scripts update 2016-05-05 20:24:43 +02:00
Bertrand Songis 1d7f33e23f Build scripts update 2016-05-05 13:56:40 +02:00
Bertrand Songis 5409d00a2a Another problem with C++11 on the Docke container 2016-05-05 12:32:27 +02:00
Bertrand Songis addb51b25a French translations too long for the calibration screen 2016-05-05 11:29:12 +02:00
Bertrand Songis 870b6e2c68 Build scripts update 2016-05-05 11:27:51 +02:00
Bertrand Songis 65c4b26181 Build scripts update 2016-05-04 18:59:07 +02:00
Andre Bernet f9198e3b7e Missing translation 2016-05-04 10:05:35 +02:00
Bertrand Songis cc8ea42cdb Build scripts update 2016-05-03 07:36:25 +02:00
Damjan Adamic baacc0fe29 Stick mode now in one global variable, it should work in Horus emerge… (#3455)
* Stick mode now in one global variable, it should work in Horus emergency mode

* Improvements (suggested by Bertrand)
2016-05-02 23:39:15 +02:00
Bertrand Songis d2f654e32d Build scripts update 2016-05-02 23:36:57 +02:00
Bertrand Songis 30056224a6 Build scripts update 2016-05-02 23:30:44 +02:00
Bertrand Songis bded417e8d Build scripts update 2016-05-02 23:28:54 +02:00
Bertrand Songis 0e26f03a1c Compilation scripts update 2016-05-02 23:25:24 +02:00
Bertrand Songis afce17443f Fixes #3456 2016-05-02 22:46:06 +02:00
Bertrand Songis 0e5df7235d [Taranis] Some more conversion issues 2016-05-02 19:52:07 +02:00
Damjan Adamic 3fb853c8b8 Re #3454: sensor persistent fixes (ported from master)
* Only clear sensor.persistentValue when the sensor.persistent is disabled and not on every shutdown.
* Only show persistent option for calculated type sensors (only these actually get saved in EEPROM)
2016-05-02 19:38:57 +02:00
Damjan Adamic 97cc58e323 Projectkk2glider/issue 3432 jitter filter option (#3452)
* Fixes #3432: radio option added to turn on/off ADC jitter filter (ported from master)

* Gtests fix

* Re #3432: compilation fix

* Re #3432: existing field split to accommodate the new option without the RadioData size change
2016-05-02 19:26:08 +02:00
Arne Schwabe 9924695b1d Fix (my own) typo in german translation 2016-05-02 11:16:41 +02:00
Bertrand Songis 895a62c84e Unit "milliwatts" missing in french TTS 2016-05-01 22:48:54 +02:00
Bertrand Songis 3c377a55e7 Getting bored of this tada.wav :)
Somebody asked me to change it to hello.wav as we already have bye.wav
2016-05-01 22:37:00 +02:00
Andre Bernet ce4b6ed2b8 VC++ compilation 2016-05-01 09:37:50 +02:00
Bertrand Songis 633d52297d [Taranis] Consumption calculated sensor bugfix 2016-04-30 21:00:00 +02:00
Bertrand Songis e859baea3d [Lua] Snake game for Taranis 2016-04-30 20:59:06 +02:00
Bertrand Songis 3d815e5d1b [S6R] Delay is 500ms - Timeout set to 800ms 2016-04-30 19:41:37 +02:00
Bertrand Songis d8736bfe94 [FrSky] Support of old FAS prototypes (different resistors) 2016-04-30 19:33:00 +02:00
Bertrand Songis 1f7485ed91 [Sky9X] Shift in External Module settings 2016-04-29 20:46:42 +02:00
Damjan Adamic c6f13de505 Log viewer improvements (#3442)
* Added:
 * max altitude
 * two cursors for time/altitude measurement

* Fix if multiple altitude related telemetry items are selected (only put cursors on the first one)
2016-04-29 18:59:39 +02:00
Bertrand Songis bd87028fd5 FrSky S.PORT upstream (#3426)
FrSky S.PORT upstream
2016-04-29 18:44:25 +02:00
Bertrand Songis 56f59196ea [9XR-PRO] Compilation fixes and cosmetics 2016-04-28 20:36:42 +02:00
Bertrand Songis fe57faef74 [Taranis] EEPROM Conversions fixes 2016-04-28 18:59:36 +02:00
Bertrand Songis 9106ee581d [Sky9x] Fixes in Sky9x pulses driver. Would if fix #3203 ? 2016-04-28 18:58:45 +02:00
Bertrand Songis c147b2edbc [Sky9x] Cosmetics 2016-04-28 18:39:27 +02:00
Damjan Adamic 92c76b5884 Fixes #3372: Telemetry mode "FrSky D (cable)" choice was missing for Taranis (ported from master) 2016-04-28 12:52:50 +02:00
Bertrand Songis e04dfb7b7e [Crossfire] There was a NO DATA remaining in the telemetry screens 2016-04-26 23:53:30 +02:00
Bertrand Songis fd72c22cf5 Compilation fix for Sky9x 2016-04-26 20:10:11 +02:00
Bertrand Songis 26e156f9ad [Crossfire] Telemetry new fields (GPS / Battery)
I did a refactoring for the latitude and longitude decoding which should be tested carefully for FrSky S.PORT and D telemetry
There was a double conversion in S.PORT protocol, there are less maths now, and perhaps precision will be better
2016-04-26 19:36:48 +02:00
Bertrand Songis 34444aedb2 Dead code removed 2016-04-26 12:48:38 +02:00
Bertrand Songis 3693f34a41 [Crossfire] Min / max limits were missing for each channel transmitted 2016-04-26 12:17:02 +02:00
Andre Bernet 7d21c9eb87 [Horus] DE char shift (fix #3440) 2016-04-24 16:52:54 +04:00
Damjan Adamic 981d133607 Log viewer session finder fix (caused by different Qt4/5 behavior of QDateTime) 2016-04-23 20:40:18 +02:00
Damjan Adamic 8a545ee60b simu CPU optimizations 2016-04-23 20:07:43 +02:00
Damjan Adamic 42f82cbbed Proper simulator shutdown 2016-04-23 20:06:53 +02:00
Bertrand Songis 13ded98f29 Merge pull request #3428 from opentx/schwabe/companion_multimodule
Implementation of the Multi TX module logic in Companion and few minor fixes/updates for the code
2016-04-21 21:55:49 +02:00
Andre Bernet 6e5786ca71 [Horus] Disk cache OK now 2016-04-18 22:13:29 +04:00
Arne Schwabe 4c213d7639 Add some missing translation in the german language file 2016-04-18 17:01:14 +02:00
Arne Schwabe 788b62d80c Fix some compiler warnings of clang in companion 2016-04-18 00:53:12 +02:00
Arne Schwabe 7b30201867 Implement Multimodule TX options for Companion 2016-04-18 00:09:51 +02:00
Arne Schwabe 67364789a8 Implement real (struct size compatible) layout on Taranis 2016-04-18 00:09:51 +02:00
Arne Schwabe 80b406b8d9 Implement new protocols of Multimodule (SFHSS and D16 8ch) 2016-04-18 00:09:51 +02:00
Arne Schwabe f99e792dea Replace SYMAX2 with more user friendly Syma X2 2016-04-18 00:09:50 +02:00
Arne Schwabe 0ead216c24 Ensure that the multi protocol number does not change if Crossfire is disabled. 2016-04-18 00:09:50 +02:00
Arne Schwabe e053f75b76 Move ppm options in companion to substruct like in datastructs.h 2016-04-18 00:09:50 +02:00
Damjan Adamic d2923a32d3 Fixed bug in Disk Cache: reads bigger than cache block size were not handled properly 2016-04-17 18:37:57 +02:00
Arne Schwabe e62759e5f2 Fix C++ standard also on AVR target (#3401 needs c++11) 2016-04-17 13:36:15 +02:00
Damjan Adamic 41a5af5a6e Horus disk_ioctl() fixed: CTRL_SYNC was missing, default return is now RES_OK; 2016-04-17 12:55:01 +02:00
Andre Bernet 403471d869 [Horus] Disable disk cache by default until fixed 2016-04-17 11:16:03 +04:00
Bertrand Songis c2e90d35fd 2.1 to 2.2 RadioData conversions added 2016-04-16 19:16:38 +02:00
Andre Bernet 195a09c008 Compilation fix 2016-04-16 20:59:33 +04:00
Bertrand Songis 9c0e0a136a Simplification for div_and_round function 2016-04-16 18:26:14 +02:00
Bertrand Songis 740a2a71f5 [Horus] Fix in comment 2016-04-16 18:24:31 +02:00
Bertrand Songis 9c116f94ce Cosmetics 2016-04-16 18:23:53 +02:00
Andre Bernet 296d207cfa [Horus] Switch selection fixes 2016-04-16 16:40:05 +04:00
Damjan Adamic e33e83f2b5 Fixes #3351: same file was used as source and destination in file contents comparison 2016-04-15 15:31:44 +02:00
Bertrand Songis 1f19256722 Merge pull request #3407 from opentx/bsongis/adc_averaging_done_in_driver_layer
[ARM board] ADC are done 4 times inside the driver now. To be tested …
2016-04-10 22:57:13 +02:00
Damjan Adamic 6b73df6935 Doc fix for ANALOG_SCALE 2016-04-10 22:27:49 +02:00
Damjan Adamic 8ed325c33f Better precision for Analogs screen 2016-04-10 22:20:06 +02:00
Damjan Adamic 9e0e71ad92 ADC crosstalk fixed, new crosstalk and time measurements (for Horus) 2016-04-10 22:06:53 +02:00
Damjan Adamic 14841590b9 Fixes #3178: USB driver changed interrupt grouping which affected interrupt priorities (fix suggested by Michael Blandford) 2016-04-10 18:39:26 +02:00
Arne Schwabe a93e1538b9 Include c++ flags only on older make versions (< 3.1.0) 2016-04-10 18:09:02 +02:00
Bertrand Songis bbc2e11cca [Horus] Pots included in inputsMoved(...) function 2016-04-10 14:26:15 +02:00
Bertrand Songis 7247a511cf Simu compilation fix 2016-04-10 13:42:55 +02:00
Bertrand Songis dd2ff29601 [AVR] Flash usage on 9X now almost equals to 2.1 release 2016-04-10 12:50:43 +02:00
Bertrand Songis 9e0a26c51c [AVR] ModelData size check removed as it's more complex (depending on GVARS and EXT options) 2016-04-10 12:45:49 +02:00
Bertrand Songis 66bd674ccf [AVR] Target "firmware-size" added 2016-04-10 12:44:53 +02:00
Bertrand Songis b7939dc742 Executable permissions for checksize.py 2016-04-10 11:52:49 +02:00
Bertrand Songis 30e2d52f76 [Horus] EEPROM structs size changed between the 2 pull requests 2016-04-10 11:41:32 +02:00
Bertrand Songis 2acf6aed3b Merge pull request #3401 from opentx/schwabe/check_struct_sizes
check struct sizes
2016-04-10 10:48:07 +02:00
Bertrand Songis 5d171b3761 [Taranis] Crossfire period now 4ms. S.PORT TX didn't wait end of serial transfer before going to RX mode 2016-04-10 10:34:04 +02:00
Bertrand Songis 834092879c Merge pull request #3405 from opentx/kilrah/extratrims
[Horus] Extra trims support
2016-04-09 22:59:43 +02:00
Bertrand Songis e9bb5a5115 [Horus] These options are only examples! 2016-04-09 21:45:34 +02:00
Bertrand Songis 143afa855f [Horus] GVARS in OUTPUTS menu should be OK 2016-04-09 21:15:33 +02:00
Bertrand Songis e43d88e6b8 [Horus] Range and Bind buttons were badly displayed since latest font change 2016-04-09 19:54:49 +02:00
Bertrand Songis 070c64631a [Horus] Font again. How is it now? 2016-04-09 19:39:03 +02:00
Bertrand Songis efb290324a [Horus] Font cosmetics 2016-04-09 18:59:07 +02:00
Bertrand Songis 2f1f4243f0 [Horus] Is the font better? 2016-04-09 18:23:29 +02:00
Bertrand Songis 5ed27f157d Merge pull request #3409 from opentx/projectkk2glider/issue_3374_disk_cache_horus
Fixes #3374: added SD card disk cache for Horus
2016-04-09 18:11:19 +02:00
Damjan Adamic 868133371c Fixes #3374: added SD card disk cache for Horus
* SIMU_DISKIO option available again
 * new option DISK_CACHE defaults to ON for Horus
 * printf("%f") fixed in CLI
2016-04-09 17:09:46 +02:00
Bertrand Songis ee9bb73ef9 [Horus] The SETPOS char (0x1F) is again implemented on Horus (it's needed in the VERSION menu) 2016-04-09 11:23:44 +02:00
Bertrand Songis c5a44250fc Fixes #3353 2016-04-09 11:12:50 +02:00
Bertrand Songis a84357ad0b Qt warnings removed 2016-04-09 11:12:03 +02:00
Bertrand Songis 1e3da34ec8 [ARM board] ADC are done 4 times inside the driver now. To be tested on H 2016-04-09 10:09:54 +02:00
Bertrand Songis 5e354749b2 [Horus] Was it removed intentionnally? 2016-04-09 10:08:01 +02:00
Damjan Adamic 57028614fb Gtests cmake fix (which I broke in previous commit) 2016-04-08 21:42:12 +02:00
Damjan Adamic 651b0ad579 Disable gtests target if Qt5 not installed 2016-04-08 14:53:07 +02:00
Andre Bernet 0c187412ea Bad define 2016-04-08 14:38:45 +04:00
Bertrand Songis 1a05cfca16 [Horus] Cosmetics 2016-04-08 09:19:46 +02:00
Bertrand Songis 4bb5631b65 [Horus] Display trims option should be OK now 2016-04-08 09:18:00 +02:00
Bertrand Songis 1fc0525636 [Horus] Cosmetics 2016-04-08 09:07:56 +02:00
Bertrand Songis 79fcaec78f [Horus] DE special chars added 2016-04-08 09:05:07 +02:00
Bertrand Songis dc4587b5b6 [Horus] Topleft mask also added in cache 2016-04-08 09:03:39 +02:00
Bertrand Songis 5d869d78e3 Darkblue icons added 2016-04-08 09:02:18 +02:00
Andre Bernet 64a3c21c4e Merge branch 'next' into kilrah/extratrims 2016-04-08 10:46:34 +04:00
Andre Bernet c8cd34405d Merge pull request #3403 from opentx/kilrah/backlight
[Horus] Backlight control added back in, driver fix (thanks Adela), OFF level configurable
2016-04-08 10:25:27 +04:00
Andre Bernet 8807aa8689 Navigation fixes 2016-04-08 09:54:36 +04:00
Andre Bernet f534702d59 Backlight restored in emergency mode, prevent complete turn off to avoid confusion 2016-04-08 09:22:04 +04:00
Damjan Adamic 81c687dcd4 Merge pull request #3404 from opentx/bsongis/horus_icons_cache
Bsongis/horus icons cache
2016-04-07 22:07:36 +02:00
Damjan Adamic 7d57b4df05 Compilation fix 2016-04-07 21:27:00 +02:00
Andre Bernet 18f56075a5 Avoid EEPROM change by recovering some unused bits 2016-04-07 15:28:28 +04:00
Bertrand Songis eaed9dd1a9 [Horus] Menus icons now in cache
I hope it will reduce calculation time a little bit!
2016-04-07 08:26:04 +02:00
Bertrand Songis b1e5e06d5b [Horus] Last line was missing in popup menus 2016-04-06 16:22:41 +02:00
Andre Bernet 30018b2432 Backlight control added back in, driver fix (thanks Adela), OFF level configurable 2016-04-06 16:06:36 +04:00
Damjan Adamic eab639362a Compilation fix 2016-04-05 19:12:07 +02:00
Damjan Adamic 29325ad54f [ARM] Mixers calculated just-in-time 2016-04-05 18:38:37 +02:00
Bertrand Songis ce0b17744c French special chars added 2016-04-05 09:53:14 +02:00
Bertrand Songis 05ad98f9d8 Another potential menus freeze bug there 2016-04-05 09:52:03 +02:00
Bertrand Songis 38c7d9c2a0 Another fix for the SF menu freeze bug 2016-04-05 09:48:58 +02:00
Andre Bernet 7abcb28d11 Minor navigation fix 2016-04-04 21:40:14 +04:00
Andre Bernet cbe92aa058 Fix menu crash (please check) 2016-04-04 21:40:04 +04:00
Andre Bernet 0e7662b36d Compilation fix 2016-04-04 20:34:17 +04:00
Andre Bernet f0a0dc56c3 [Horus] One more SF fix (#3393) 2016-04-04 20:08:13 +04:00
Andre Bernet bdb938cd53 SF fixes (#3393) 2016-04-04 19:57:03 +04:00
Arne Schwabe bb21c20b21 Check sizes of eeprom struct sizes at compile time
Changing the size of a struct by accident lead to random the wrong data from the eeprom and can screw the eeprom up pretty bad. Better bail out if the eeprom size changes and let the developer make that an intentional choice. The template magic is there to print out the actual and expected size:

/Users/arne/oss/opentx/radio/src/datastructs.h:1045:3: error: static_assert failed "struct size changed"
  static_assert(expectedSize == realSize, "struct size changed");
  ^             ~~~~~~~~~~~~~~~~~~~~~~~~
/Users/arne/oss/opentx/radio/src/datastructs.h:1181:3: note: in instantiation of function template specialization 'check_size<TrainerData, 168, 16>' requested here
  CHKSIZE(TrainerData, 168);
2016-04-04 10:20:58 +02:00
Damjan Adamic 5993d28ab7 Compilation fix 2016-04-04 07:00:32 +02:00
Damjan Adamic 8c36199d69 Compilation fix (crossfire) 2016-04-03 23:27:02 +02:00
Damjan Adamic 3ef7326756 Horus audio stall fix. The buffer->state value was set too late. 2016-04-03 23:07:55 +02:00
Damjan Adamic 018fec4863 CLI print audio added. New command p added (same as print) 2016-04-03 23:06:08 +02:00
Damjan Adamic 839296ac1b PlaySound fix 2016-04-03 19:33:32 +02:00
Damjan Adamic 2990e9b9a3 Debug timers added (use -DDEBUG_TIMERS=YES to enable and CLI command "print dt" to see them) 2016-04-03 19:27:47 +02:00
Damjan Adamic a8aa6148e5 Tasks switching log added (use -DDEBUG_TASKS=YES to enable and CLI command "print tsl" to see it, only works on Horus) 2016-04-03 17:56:32 +02:00
Damjan Adamic 9673df83a7 Interrupt counters added (use -DDEBUG_INTERRUPTS=YES to enable and CLI command "print int" to see them) 2016-04-03 17:51:20 +02:00
Bertrand Songis a0b4053e82 [Crossfire] Now the pulses frame is encoded the same way than other Crossfire frames 2016-04-02 21:05:22 +02:00
Bertrand Songis b0bda14f23 [Horus] My last commit did break BOLD 2016-04-02 20:45:22 +02:00
Bertrand Songis 664a966bbc Cosmetics 2016-04-02 19:32:28 +02:00
Bertrand Songis 3cd6638e01 [Horus] Fontcache added. Should improve a lot the menus speed. 2016-04-02 19:31:54 +02:00
Andre Bernet d207a600e8 Attempt at getting the simu interface usable with the extra trims 2016-04-02 17:03:24 +04:00
Andre Bernet 1f6a711d24 [Horus] Extra trims added (#3393) 2016-04-02 16:45:43 +04:00
Andre Bernet 27d37f7b78 [Horus] New main view wasn't saved if no manual layout selection was done 2016-04-02 13:11:28 +04:00
Andre Bernet ab2960b6aa Merge branch 'kilrah/navigation' into next 2016-04-02 12:50:16 +04:00
Andre Bernet 43418e6705 More navigation improvements 2016-04-02 12:19:32 +04:00
Andre Bernet 21312cb1be [Horus] Calibration menu fixes 2016-04-02 11:27:19 +04:00
Andre Bernet a03f85b083 [Horus] Switch menu pages on key press 2016-04-02 11:06:10 +04:00
Andre Bernet d41218eb29 [Horus] Improve "setup screens" responsivity feel (actions on key press instead of release) 2016-04-02 10:46:46 +04:00
Andre Bernet 788bdfbb09 [Horus] Navigation fixes 2016-04-02 10:38:34 +04:00
Andre Bernet 9615c98103 Fix merge 2016-04-02 09:57:46 +04:00
Bertrand Songis cbec010f44 Multimodule merge 2016-04-01 23:08:52 +02:00
Bertrand Songis 5cb1ed87d8 Merge branch 'multi_module_next' of https://github.com/schwabe/opentx into schwabe-multi_module_next 2016-04-01 23:02:05 +02:00
Andre Bernet 1f303ec995 Merge pull request #3368 from opentx/kilrah/antennaselection
[Horus] Internal module antenna selection support
2016-04-01 19:38:05 +04:00
Andre Bernet 36316ecf4c Merge branch 'next' into kilrah/antennaselection
# Conflicts:
#	radio/src/translations/de.h.txt
#	radio/src/translations/it.h.txt
#	radio/src/translations/pt.h.txt
#	radio/src/translations/se.h.txt
2016-04-01 19:37:10 +04:00
Andre Bernet 555f6510b2 WDT at 500ms. Needs thorough checking 2016-04-01 18:58:29 +04:00
Andre Bernet 3c39893bca [Horus] 8-bit source index, really? (#3393) 2016-04-01 18:22:32 +04:00
Andre Bernet 5f86e87ae2 [Horus] Only 4 topbar zones now we have the fixed icons 2016-04-01 17:36:15 +04:00
Andre Bernet c5e95c9730 [Horus] Linear icons and name fix for L1/L2 (#3393) 2016-04-01 12:10:06 +04:00
Andre Bernet 75977b6b6d [Horus] Enable SWR warning 2016-04-01 11:48:53 +04:00
Andre Bernet 09780a07ff Merge pull request #3395 from opentx/kilrah/taranis_gpio
GPIO speed reduction for Taranis
2016-04-01 11:15:58 +04:00
Andre Bernet 54cb3de46e Merge branch 'next' into kilrah/taranis_gpio 2016-04-01 11:13:30 +04:00
Damjan Adamic 009eaa3893 Cmake compiler optimization flags fixed, now release build uses -Os instead of -O3 which is cmake's default. 2016-03-31 18:06:57 +02:00
Andre Bernet 02dfff319f [Horus] Cosmetics 2016-03-31 16:51:20 +04:00
Andre Bernet 3d4f3611b0 Merge branch 'next' into kilrah/antennaselection
# Conflicts:
#	radio/src/translations/de.h.txt
#	radio/src/translations/es.h.txt
#	radio/src/translations/it.h.txt
#	radio/src/translations/pt.h.txt
#	radio/src/translations/se.h.txt
2016-03-31 15:11:12 +04:00
Bertrand Songis 1f54c61e41 Dockerfile fixes ported to 'next' 2016-03-30 23:14:17 +02:00
Bertrand Songis 3c1221452a Taranis bootloader Makefile removed (CMake now) 2016-03-30 22:47:25 +02:00
Bertrand Songis e4d820b11e Dockerfile cosmetics 2016-03-30 18:51:42 +02:00
Andre Bernet 7076889e1a Channel range fix 2016-03-30 20:27:59 +04:00
Andre Bernet 438f81aef9 Reorganize / clarify board types by relevance 2016-03-30 20:14:37 +04:00
Bertrand Songis 4382445123 Cosmetics 2016-03-30 07:56:02 +02:00
Bertrand Songis 5f10deb182 Merge pull request #3391 from schwabe/fix_audio_osx
Make sound work in OS X
2016-03-29 22:49:14 +02:00
Bertrand Songis 9fb5416ac9 Makefile removed as it doesn't work anymore. CMake is used instead. 2016-03-29 22:40:29 +02:00
Bertrand Songis 791a2e5f75 PPM_UNIT = PERCENT_PREC1 by default (as in 2.1) 2016-03-29 22:30:38 +02:00
Bertrand Songis 9cd9616ece OVERRIDE_CHANNEL_FUNCTION = YES by default (as in 2.1) 2016-03-29 22:27:27 +02:00
Bertrand Songis 3f4cae8cb1 PPM_UNIT = PERCENT_PREC1 by default (as in 2.1) 2016-03-29 22:25:56 +02:00
Arne Schwabe a2e5efa6c7 Make simulator sound functional again in OS X (and probably Linux)
The radio/src/simu/CMakeLists.txt was missing the SDL defines/includes required for SDL audio
2016-03-29 22:13:18 +02:00
Arne Schwabe 2ad644d793 Add horus support for multi pulses (untested, following DSM2) 2016-03-29 21:41:15 +02:00
Arne Schwabe c09c3e0a2b Do not backup the multi module struct 2016-03-29 21:41:15 +02:00
Arne Schwabe 5d19adb1eb Copy strings for multimode support from en.h.txt to other languages 2016-03-29 21:41:15 +02:00
Arne Schwabe 96c64f2895 Add german translations for multi module
(Also fix C++11 suffix error when compiling on OS X/clang)
2016-03-29 21:41:15 +02:00
Arne Schwabe 0dc2f60e09 Add german translations for multi module
(Also fix C++11 suffix error when compiling on OS X/clang)
2016-03-29 21:41:15 +02:00
Arne Schwabe 99c7e3f0ad Add FY326 protocol 2016-03-29 21:41:15 +02:00
Arne Schwabe f86dc6b156 Implement DSM2/DSMX frame format options 2016-03-29 21:41:15 +02:00
Arne Schwabe 9de6e09c09 Implement autobind and low power setting and specifying a custom protocol for the multi module
Specifying a custom prtocol is useful if OpenTX firmware is older than the multi module firmware
and the protocol in question is not yet in the protocol list of the OpenTX firmware.
2016-03-29 21:41:15 +02:00
Arne Schwabe 119e413a6d Multi module support for Taranis
Reuse some of the DSM2 routines to avoid code duplication.

This first version only implements the protocol on the Taranis. (and not

Telemetry code is currently untested and will not work (Polarity mismatch). The main protocols to use telemetry are FrSky protocols and not a high priority on the Taranis.

Patch v3: Fix myeeprom.h, include option value in menu.
Patch v4: Fix identing, name substructs of modeldata
2016-03-29 21:41:14 +02:00
Arne Schwabe c788ad6add Move ppm related options into own struct
This allows to have the ppm related options in a union with a other module protocol specific options for the multi module.
2016-03-29 21:41:14 +02:00
Bertrand Songis 2e6570e209 New script to check AVR firmware size, as it seems it increased over time in the 'next' branch ... 2016-03-29 21:35:46 +02:00
Bertrand Songis 9762656ad0 Merge pull request #3388 from schwabe/datacopy_backup_union
Also backup members inside unions,
2016-03-29 21:31:25 +02:00
Bertrand Songis f2eadf0ff0 [Horus] Introduction of a button to remove an existing view 2016-03-29 20:09:24 +02:00
Arne Schwabe 90f67cd5ef Fix crash of simulator if directory does not exist. 2016-03-29 19:04:24 +02:00
Bertrand Songis 41b1e1c9bc Merge pull request #3390 from schwabe/companion_osx_build
Fix companion build on OS X
2016-03-29 19:03:06 +02:00
Arne Schwabe fb5feb8a91 Fix companion build on OS X 2016-03-29 18:11:50 +02:00
Arne Schwabe 86076bbf32 Also backup members inside unions,
the code is a bit more complicated since unions can have structs or simple types. Also change Telemetry sensor to be a struct, since a class with all public is identical to a struct in C++
2016-03-29 16:05:32 +02:00
Damjan Adamic c24219cbcd Merge pull request #3389 from schwabe/fix_travis
Fix travis (clang 3.8 -> 3.9)
2016-03-29 16:04:10 +02:00
Arne Schwabe 38dbfd130a Fix travis (clang 3.8 -> 3.9) 2016-03-29 15:17:01 +02:00
Bertrand Songis a6a07e9714 [Horus] Speedup when switching from the main view to any other menu 2016-03-28 23:18:32 +02:00
Bertrand Songis ed30b5a8ed [Horus] USB icon only displayed when USB plugged 2016-03-28 23:17:55 +02:00
Bertrand Songis 83a7859f6f Cosmetics 2016-03-28 23:17:20 +02:00
Bertrand Songis 6a2e26272e [Horus] Unused code removed 2016-03-28 23:16:22 +02:00
Bertrand Songis be1526a86d Cosmetics 2016-03-28 20:57:01 +02:00
Bertrand Songis 554f230696 Prevent from using the internal module when there is a Crossfire module plugged into the bay 2016-03-28 20:56:48 +02:00
Bertrand Songis f2fb6b20de Crossfire CRC added 2016-03-28 20:31:42 +02:00
Bertrand Songis a3c175f537 Crossfire telemetry protocol start 2016-03-28 19:07:28 +02:00
Bertrand Songis 5a5f192451 Remaining trace 2016-03-28 18:36:29 +02:00
Bertrand Songis af87c57d1d Translations files cosmetics (no CRLF / standard header / translation author, start at line 45) 2016-03-28 17:23:35 +02:00
Bertrand Songis 7c1db4c4dc Less files in .gitignore (they are now visible in case of in source compilation) 2016-03-28 11:26:57 +02:00
Bertrand Songis d73b34e1a9 [Crossfire] Back to 400kHz, at least for Taranis (no DMA on RX) 2016-03-28 11:25:47 +02:00
Bertrand Songis 746dc450fa Telemetry files split 2016-03-28 11:24:55 +02:00
Damjan Adamic 485d30f65b SysTick was configured wrong for Horus 2016-03-27 22:40:55 +02:00
Bertrand Songis 7e4b5d97e3 Compilation fix 2016-03-27 17:48:24 +02:00
Bertrand Songis 2c00a3437f Checkscreenshot simplification 2016-03-27 12:56:48 +02:00
Bertrand Songis fef78a1b97 Compilation fix 2016-03-27 10:49:04 +02:00
Bertrand Songis 2c256e9e73 Avoids generating all bitmaps one time per CPU during compilation 2016-03-27 10:46:19 +02:00
Bertrand Songis 1fba706bdb Compilation fixes 2016-03-27 10:33:32 +02:00
Bertrand Songis 7ec0dd8a40 Qt4 was still required for gtests 2016-03-27 10:18:31 +02:00
Bertrand Songis 8d5e5b2d01 Warnings fixed on VC++ 2015 2016-03-27 09:54:41 +02:00
Bertrand Songis 8c636e31d9 Dockerfile updated 2016-03-26 23:06:54 +01:00
Bertrand Songis c2412ca05e Python scripts with the executable flag 2016-03-26 23:04:39 +01:00
Bertrand Songis 6ceb575d1e DFU-UTIL "-d 0483:df11" again there 2016-03-26 16:34:12 +01:00
Bertrand Songis a70cbe6a0d Companion now able to use .dfu files for flashing radio firmware 2016-03-26 16:32:57 +01:00
Bertrand Songis e1b7848a91 Cosmetics 2016-03-26 16:13:00 +01:00
Bertrand Songis dfd4a04220 Revert "Also backup members inside unions,"
This reverts commit dd76e9d8bf.
2016-03-26 15:48:42 +01:00
Bertrand Songis 1c9a5ed753 Travis again 2016-03-26 14:13:50 +01:00
Bertrand Songis 42f1515b2f Travis again 2016-03-26 14:04:47 +01:00
Bertrand Songis 06cdc6ba7b Travis again 2016-03-26 13:24:18 +01:00
Bertrand Songis e774fe091c Travis again 2016-03-26 13:13:42 +01:00
Bertrand Songis 0273038289 Python build script fix 2016-03-26 12:48:47 +01:00
Bertrand Songis d609158b27 Travis again 2016-03-26 12:29:40 +01:00
Bertrand Songis 4bf837b21f Travis again 2016-03-26 11:36:29 +01:00
Bertrand Songis ca47684e36 Travis fix 2016-03-26 11:26:17 +01:00
Bertrand Songis 210ee69101 Travis fix 2016-03-26 10:49:27 +01:00
Bertrand Songis 6b4da258e7 Merge pull request #3385 from schwabe/next
Also backup members inside unions,
2016-03-26 09:22:07 +01:00
Bertrand Songis 47f083e1c8 Now we will try to build simulators the same way 2016-03-25 22:50:45 +01:00
Bertrand Songis 69fc1b9354 We won't start the bad simulator 2016-03-25 22:48:00 +01:00
Bertrand Songis c2786d36c9 More compilation server errors 2016-03-25 19:12:35 +01:00
Andre Bernet a2928c5d79 [Horus] Clock is 168MHz, not 180... 2016-03-25 20:54:07 +04:00
Andre Bernet 2bb63e6644 Header data is useful 2016-03-25 20:54:07 +04:00
Bertrand Songis 7501608aca Build output now saved in a .out file ... so that we can grep for warnings! 2016-03-25 16:53:09 +01:00
Bertrand Songis 862199f822 Dockerfile commited 2016-03-25 16:23:12 +01:00
Bertrand Songis ccfcfa85d0 Dockerfile commited 2016-03-25 15:56:21 +01:00
Bertrand Songis 884e1feee4 Dockerfile commited 2016-03-25 15:47:48 +01:00
Bertrand Songis a681c341a2 Dockerfile commited 2016-03-25 15:43:16 +01:00
Bertrand Songis 34f9bc0b63 Dockerfile commited 2016-03-25 15:39:55 +01:00
Bertrand Songis f073c9fe85 Dockerfile commited 2016-03-25 15:30:03 +01:00
Arne Schwabe dd76e9d8bf Also backup members inside unions,
the code is a bit more complicated since unions can have structs or simple types.
2016-03-25 14:04:30 +01:00
Bertrand Songis ecff71b044 Cosmetics 2016-03-25 12:54:35 +01:00
Andre Bernet 79dffdf5f4 GPIO speed adjustments - to be tested! 2016-03-25 14:39:07 +04:00
Andre Bernet bc70acb55d [Horus] Reduce GPIO speed where possible for noise reduction - no more audio noise now :) 2016-03-25 14:13:22 +04:00
Andre Bernet 4b6bcc6a0e 9x timer start edit fix 2016-03-25 11:48:39 +04:00
Bertrand Songis 1809addbb3 Later ... 2016-03-24 23:04:39 +01:00
Bertrand Songis 641fdc5160 VC++ compilation fix 2016-03-24 22:25:46 +01:00
Bertrand Songis c1cd54ee6a [Horus] Missing font 2016-03-24 22:11:08 +01:00
Bertrand Songis 497f699331 gtests enabled for Horus 2016-03-24 21:52:49 +01:00
Bertrand Songis b4bf833667 Compilation fix on older CMake versions 2016-03-24 21:45:48 +01:00
Bertrand Songis f979fd7289 Cosmetics 2016-03-24 21:43:22 +01:00
Bertrand Songis d5931d2129 TTS language is "en" by default 2016-03-24 21:43:00 +01:00
Bertrand Songis d6dfdea6e2 [9x] Simu compilation fix when VOICE option enabled 2016-03-24 21:42:32 +01:00
Bertrand Songis 31fa16bf87 [Horus] Bold font added 2016-03-24 21:41:43 +01:00
Bertrand Songis e3d70817ea Build script converted to python and added to git 2016-03-23 23:46:49 +01:00
Bertrand Songis 20ab3a324b CMake warning fix 2016-03-23 23:20:59 +01:00
Bertrand Songis fd57db6068 [Horus] Curve bug when drawing negative X or negative Y 2016-03-23 23:20:40 +01:00
Bertrand Songis 3d0bf81bfd [AVR boards] TTS option was missing in CMakeLists.txt 2016-03-23 22:47:45 +01:00
Bertrand Songis c58217a82c TODO added for Kilrah, I am not sure this line is useful 2016-03-23 22:46:51 +01:00
Damjan Adamic d831d1428c Re #3371: Horus batery voltage adjusted based on measurements with a precise volt-meter 2016-03-23 19:49:35 +01:00
Andre Bernet 3480107a9b Typo 2016-03-23 22:42:15 +04:00
Andre Bernet c5a5fa2430 Horus got forgotten 2016-03-23 22:20:01 +04:00
Andre Bernet ea41a59da7 Translation fixes 2016-03-23 22:16:37 +04:00
Bertrand Songis cb42f4814b Merge pull request #3384 from opentx/kilrah/timers_22
Kilrah/timers22
2016-03-23 18:30:19 +01:00
Andre Bernet e5e3bb4997 Missing translations 2016-03-23 21:13:57 +04:00
Andre Bernet cd43482911 Elapsed timer visualization (fix #3383) 2016-03-23 19:37:25 +04:00
Andre Bernet 82ccb70ebd Wasted flash 2016-03-23 16:57:38 +04:00
Andre Bernet 8931b76143 Horus part 2016-03-23 16:51:03 +04:00
Andre Bernet c6b2e12802 Removed a few legacy timer limitations, fix non-working limit (fix #3301) 2016-03-23 07:29:12 +04:00
Bertrand Songis c282aa6065 Merge pull request #3382 from schwabe/fix_build_opentx
Fix building OpenTX under OS X
2016-03-22 22:44:14 +01:00
Bertrand Songis bff45a4b2a [Horus] Tx battery and audio volume added in the topbar 2016-03-22 22:43:00 +01:00
Arne Schwabe ad5b17900b Fix building OpenTX under OS X
The clang.index python library does not look in the default path where the library is installed
2016-03-22 22:37:23 +01:00
Bertrand Songis 43c70780b1 Compilation fix 2016-03-22 20:25:22 +01:00
Bertrand Songis a05fa1738f [Horus] Return to 6 chars wav names to track the shutdown bug without having to reconfigure the model 2016-03-22 19:38:23 +01:00
Bertrand Songis 5691395dcf [Horus] Google tests added 2016-03-22 19:36:53 +01:00
Andre Bernet 74992a69dc Default AVR fuse settings changed to disable JTAG interface (#3379 part 2) 2016-03-22 16:16:17 +04:00
Andre Bernet d064ba0136 Simu compilation 2016-03-22 15:49:45 +04:00
Andre Bernet 1efad1ac38 Merge branch 'next' into kilrah/antennaselection
Conflicts:
	radio/src/myeeprom.h
2016-03-22 15:31:44 +04:00
Andre Bernet 909b3bb595 Antenna change warning added 2016-03-22 15:28:20 +04:00
Andre Bernet 3eb0c3a953 [9X/2650] Fix occasional interaction between JTAG port and POT3 (fix from Mike following openrcforums discussion) 2016-03-22 12:18:29 +04:00
Andre Bernet 9e61f3e5e0 [Horus] Timer display enhancements 2016-03-22 12:18:29 +04:00
Bertrand Songis dbcda02770 Error and Warning fixed 2016-03-21 22:21:13 +01:00
Bertrand Songis c8a84a404b Compilation failure 2016-03-21 21:51:51 +01:00
Bertrand Songis c19b35ea0e [Horus] Compilation fix with JITTER_MEASURE 2016-03-21 20:53:52 +01:00
Bertrand Songis bca7773279 [Horus] Failsafe screen done 2016-03-21 18:40:11 +01:00
Bertrand Songis b29f9584d1 [Horus] Cosmetics in Special Functions screen 2016-03-21 18:39:35 +01:00
Bertrand Songis e6acfc7e88 [Horus] Logical switches UI fixes 2016-03-21 18:38:52 +01:00
Bertrand Songis 38e44991e9 Cosmetics 2016-03-21 18:38:05 +01:00
Bertrand Songis 27dc84028c [Taranis] It's now impossible to have Trainer input in the external module and a regular module enabled 2016-03-21 18:37:17 +01:00
Bertrand Songis bd3c52d6ac Warning removed 2016-03-21 18:33:26 +01:00
Bertrand Songis 8ecd053af5 Cosmetics 2016-03-21 18:32:35 +01:00
Damjan Adamic be29e80988 WATCHDOG_DISABLED default set to OFF 2016-03-20 22:15:06 +01:00
Damjan Adamic 28dd71905f Fixes #3375: better linearity for Horus volume control 2016-03-20 21:44:33 +01:00
Bertrand Songis 76e39222db [Horus] The Modelbmp widget was always refreshed since my last commit 2016-03-20 19:56:06 +01:00
Andre Bernet 5e6288b7d1 [Horus] LS editing bug 2016-03-20 22:53:19 +04:00
Bertrand Songis 65664c0bc9 Merge pull request #3373 from opentx/projectkk2glider/issue_3371_horus_tx_battery
Projectkk2glider/issue 3371 horus tx battery
2016-03-20 18:06:58 +01:00
Damjan Adamic 3a064b15ed Simu fixes for 9X 2016-03-20 17:24:30 +01:00
Damjan Adamic af2cd30146 Re #3371: Battery warning range fix for Horus 2016-03-20 17:13:23 +01:00
Damjan Adamic a25b20a1e7 Re #3371: Sky9X fixed 2016-03-20 17:01:17 +01:00
Damjan Adamic 43e7680c9b Re #3371: ARM stuff removed from AVR version of checkBattery() 2016-03-20 17:00:58 +01:00
Damjan Adamic e317687973 Fixes #3371: Battery calibration menu item added for Horus 2016-03-20 16:05:27 +01:00
Damjan Adamic a3af63edad Re #3371: tx battery measuring code moved to board_xxx.cpp, battery check code rewritten for ARM platforms, Horus battery calibrated. 2016-03-20 16:05:27 +01:00
Damjan Adamic 49e70dbf12 simulator fixes 2016-03-20 15:20:59 +01:00
Bertrand Songis 74229b808f Duplicated code removed 2016-03-19 19:30:37 +01:00
Bertrand Songis 5925e8eae4 [Horus] Analogs view for debug in the Statistics menu 2016-03-19 19:06:15 +01:00
Bertrand Songis 63d306070a [Taranis] Cosmetics 2016-03-19 19:05:34 +01:00
Bertrand Songis bffa99d98f Simulator segfault 2016-03-19 18:49:04 +01:00
Bertrand Songis defef14018 Compilation fix 2016-03-19 18:20:48 +01:00
Bertrand Songis 0a7d0119fe Merge pull request #3330 from opentx/projectkk2glider/issue_3255_uid_display
Projectkk2glider/issue 3255 uid display
2016-03-19 16:32:26 +01:00
Bertrand Songis 3fdfcf45f9 [Horus] ModelBmp widget refreshed when the model name changes 2016-03-19 14:35:45 +01:00
Bertrand Songis f43a790d5c [Taranis] HEARBEAT now uses the DMA for SBUS reception 2016-03-19 13:41:21 +01:00
Bertrand Songis 244239ff6a Compilation fix 2016-03-19 12:40:11 +01:00
Bertrand Songis 4443ab22ee [Taranis] Overrun errors on S.PORT are now counted and it's possible to display the errors count in the CLI 2016-03-19 12:06:43 +01:00
Bertrand Songis f622d7cf6d [Taranis] We cannot receive S.PORT through DMA, the associated stream is already used by the DAC 2016-03-19 12:01:36 +01:00
Bertrand Songis b8068438fb [Horus] Sliders will stop always moving when around 0, just because of a bad rounding when negative 2016-03-19 00:09:06 +01:00
Bertrand Songis e8b783a491 [Crossfire] Now 921600bauds as we have bigger plans :) 2016-03-18 22:19:29 +01:00
Bertrand Songis 5cb6884ab3 [Horus / Taranis] S.PORT telemetry now uses the DMA. I think the buffer could be reduced, 512bytes seems really big 2016-03-18 21:49:06 +01:00
Andre Bernet e810367284 Duplicate code removed 2016-03-19 00:24:57 +04:00
Andre Bernet 648f03a079 Cosmetics 2016-03-19 00:21:16 +04:00
Andre Bernet 0661b8219c [Horus] Internal module antenna selection support 2016-03-18 21:12:18 +04:00
Bertrand Songis e4b596d733 Cosmetics 2016-03-18 17:11:06 +01:00
Andre Bernet f90a69335b [Horus] Theme init was missing in general settings defaults 2016-03-18 17:49:02 +04:00
Andre Bernet dd066c3ec1 Fix simu screenshot size for Horus 2016-03-18 15:30:49 +04:00
Andre Bernet 83c88d93ee Battery timer was reset on wrong page 2016-03-18 15:08:39 +04:00
Andre Bernet 92911daf73 Duplicate "Free Mem" line removed 2016-03-18 14:52:55 +04:00
Andre Bernet ca7eae6ef0 SDL path got mangled when mingw32 is defined 2016-03-18 12:44:38 +04:00
Bertrand Songis 662137aa6d [Companion] dfu-util launched with right args for Horus 2016-03-17 21:04:09 +01:00
Bertrand Songis a2db3f2150 [Companion] dfu-util launched with right args for Horus 2016-03-17 20:45:11 +01:00
Bertrand Songis de08e50f15 [Companion] Latest release correctly stored 2016-03-17 20:08:30 +01:00
Bertrand Songis 32a3d4588e [Horus] Nightly builds parameters hidden when NIGHTLY_BUILDS=NO 2016-03-17 19:00:56 +01:00
Bertrand Songis ca4a5356f2 Merge pull request #3363 from craftandtheory/next
SMLSIZE fixes + Gtests on SmlsizeDecimalPoint
2016-03-16 23:07:14 +01:00
Bertrand Songis 8cf4b5e4e8 [Horus] Telemetry fields missing in the sources list 2016-03-16 22:18:37 +01:00
Bertrand Songis e4729727ae [Horus] MAX and Trims were missing in the sources list 2016-03-16 22:12:36 +01:00
Bertrand Songis 14673dd7bb [Horus] Navigation enhancements 2016-03-16 21:55:03 +01:00
floaledm c2dffd2b24 Gtests on SmlsizeDecimalPoint 2016-03-16 20:22:31 +00:00
Bertrand Songis 5a7c9311de [Horus] Better handling of theme options 2016-03-16 20:47:56 +01:00
Bertrand Songis eb477f2953 [Horus] Small changes in the keymap 2016-03-16 20:46:42 +01:00
Damjan Adamic 5337092e93 datacopy.cpp generated file now part of the sources and can be generated manually with target datacopy 2016-03-16 20:15:54 +01:00
Bertrand Songis e0ead516f6 Wrong command 2016-03-16 07:32:19 +01:00
Bertrand Songis 083060968f Wrong command line 2016-03-16 07:28:06 +01:00
Bertrand Songis c038a7e4d5 [Companion] I forgot the -DALLOW_NIGHTLY_BUILDS 2016-03-16 07:20:00 +01:00
Bertrand Songis 7e45537402 [Horus] Keymap is now consistent with labels on keys 2016-03-15 23:21:32 +01:00
Bertrand Songis 9a66da21d5 [Horus] Default theme color can now be changed 2016-03-15 23:15:26 +01:00
Bertrand Songis 63fcf537e6 [Horus] Internal module OK 2016-03-15 22:52:21 +01:00
Bertrand Songis b1ebcb9ace [VC++] Quick & dirty fix to avoid the gettimeofday function when _MSC_VER is defined 2016-03-15 07:12:37 +01:00
Damjan Adamic 98a7900e70 Re #3255: UID displayed on VERSION screen (Taranis) 2016-02-29 20:44:30 +01:00
Damjan Adamic 726e32731b Re #3255: strAppendUnsigned() was not working for numbers >= 0x80000000 2016-02-29 20:43:37 +01:00
900 changed files with 57443 additions and 35353 deletions
+1
View File
@@ -10,3 +10,4 @@ radio/src/bootloader/bootloader_ramBoot*
*.stamp
radio/src/lua/lua_fields_*.txt
radio/src/lua/lua_exports_*.txt
build*/
+18 -11
View File
@@ -1,20 +1,27 @@
language: cpp
sudo: required
dist: trusty
language: python
virtualenv:
system_site_packages: true
python:
- 3.4
before_install:
- sudo apt-get remove cmake cmake-data --yes
- sudo add-apt-repository ppa:george-edison55/precise-backports --yes
- sudo add-apt-repository ppa:ubuntu-sdk-team/ppa --yes
- sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded --yes
- sudo add-apt-repository ppa:ubuntu-toolchain-r/test --yes
- sudo add-apt-repository ppa:beineri/opt-qt551 --yes
- sudo add-apt-repository 'deb http://llvm.org/apt/precise/ llvm-toolchain-precise main' --yes
- wget -O - http://llvm.org/apt/llvm-snapshot.gpg.key | sudo apt-key add -
- sudo apt-get update -qq
- rsync -av firmware.diydrones.com::Tools/Travis/*.deb ExtraPackages
install:
- sudo apt-get install -y xvfb lcov cmake cmake-data bc curl gcc-arm-none-eabi qt-latest g++-5 libxerces-c-dev xsdcxx libsdl1.2-dev libusb-1.0-0 libfox-1.6-dev libgtest-dev python-clang-3.8 libclang-3.8-dev python-qt4
- sudo dpkg -i ExtraPackages/*.deb || echo "FAILED INSTALL OF EXTRA DEBS"
- export CXX="g++-5" CC="gcc-5"
- sudo apt-get --yes --force-yes install qtbase5-dev qtmultimedia5-dev qttools5-dev qttools5-dev-tools python3-pyqt5 curl gcc-arm-none-eabi libfox-1.6-dev libgtest-dev
- wget --quiet http://firmware.ardupilot.org/Tools/Travis/gcc-avr_1%253a4.8-2.1_amd64.deb
- wget --quiet http://firmware.ardupilot.org/Tools/Travis/libmpfr4_3.1.2-1_amd64.deb
- wget --quiet http://firmware.ardupilot.org/Tools/Travis/avr-libc_1%253a1.8.0-4.1_all.deb
- wget --quiet http://firmware.ardupilot.org/Tools/Travis/binutils-avr_2.23.1-2.1_amd64.deb
- wget --quiet http://firmware.ardupilot.org/Tools/Travis/libmpc3_1.0.1-1ubuntu1_amd64.deb
- sudo dpkg --install gcc-avr_1%3a4.8-2.1_amd64.deb avr-libc_1%3a1.8.0-4.1_all.deb libmpfr4_3.1.2-1_amd64.deb binutils-avr_2.23.1-2.1_amd64.deb libmpc3_1.0.1-1ubuntu1_amd64.deb
script:
- ./radio/util/commit-tests.sh .
- ./tools/commit-tests.sh .
+17
View File
@@ -11,6 +11,9 @@ message(STATUS "OpenTX ${VERSION}")
cmake_minimum_required(VERSION 2.8)
cmake_policy(SET CMP0020 NEW)
cmake_policy(SET CMP0023 OLD)
if(POLICY CMP0043)
cmake_policy(SET CMP0043 NEW)
endif()
set(CMAKE_CXX_STANDARD 11)
@@ -28,6 +31,20 @@ find_package(Qt5LinguistTools)
find_package(Qt5PrintSupport)
find_package(Qt5Multimedia)
message(STATUS "Looking for SDL ")
find_package(Sdl)
if(SDL_FOUND)
message("SDL Include Path: " ${SDL_INCLUDE_DIR})
else()
message("SDL not found! Joysticks support will be disabled. Simulator audio will not work.")
endif()
message(STATUS "Looking for FOX ")
find_package(Fox)
if ((NOT FOX_FOUND) AND (NOT WIN32))
message("Libfox not found, simu target will not be available")
endif()
include(Macros)
today(DATE)
now(TIME)
+1
View File
@@ -17,3 +17,4 @@ Karl Szmutny
Michal Hlavinka
Pat Mackenzie
Michael Byrne
Christophe Brision (Ingwie)
+1 -1
View File
@@ -1,7 +1,7 @@
##OpenTX 2.2 Branch
[![Build Status](https://travis-ci.org/opentx/opentx.svg?branch=next)](https://travis-ci.org/opentx/opentx)
[![Join the chat at https://gitter.im/opentx/opentx](https://img.shields.io/badge/%E2%8A%AA%20GITTER%20-JOIN%20CHAT%20%E2%86%92-brightgreen.svg?style=flat)](https://gitter.im/opentx/opentx?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Join the chat at https://opentx.rocket.chat](https://camo.githubusercontent.com/3d659054abd6ce21c0e47cf3b83a51bda69ca282/68747470733a2f2f64656d6f2e726f636b65742e636861742f696d616765732f6a6f696e2d636861742e737667)](https://opentx.rocket.chat)
[![Donate using Paypal](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=DJ9MASSKVW8WN)
The ongoing development on 2.2.x is done in this branch.
+2
View File
@@ -1,4 +1,5 @@
macro(add_bitmaps_target targetname filter width format)
set(bitmaps_files)
file(GLOB bitmaps ${filter})
foreach(bitmap ${bitmaps})
get_filename_component(target ${bitmap} NAME_WE)
@@ -19,4 +20,5 @@ macro(add_truetype_font_target radio name font size bold)
COMMAND ${RADIO_DIRECTORY}/util/font2png.py ${font} ${size} ${bold} ${target}
WORKING_DIRECTORY ${RADIO_SRC_DIRECTORY}
)
set(ttf_${radio}_fonts_targets ${ttf_${radio}_fonts_targets} ttf_${radio}_${name})
endmacro(add_truetype_font_target)
+63
View File
@@ -0,0 +1,63 @@
# Imported from the DeskVox project (LPGL 2.1)
include(FindPackageHandleStandardArgs)
set(hints
$ENV{LIB_BASE_PATH}/fox
)
set(paths
/usr
/usr/local
)
find_path(FOX_INCLUDE_DIR
NAMES
fx.h
HINTS
${hints}
PATHS
${paths}
PATH_SUFFIXES
include
include/fox
include/fox-1.6
)
find_library(FOX_LIBRARY
NAMES
FOX-1.6
fox-1.6
HINTS
${hints}
PATHS
${paths}
PATH_SUFFIXES
lib64
lib
)
find_library(FOX_LIBRARY_DEBUG
NAMES
FOXD-1.6
foxd-1.6
HINTS
${hints}
PATHS
${paths}
PATH_SUFFIXES
lib64
lib
)
if(FOX_LIBRARY_DEBUG)
set(FOX_LIBRARIES optimized ${FOX_LIBRARY} debug ${FOX_LIBRARY_DEBUG})
else()
set(FOX_LIBRARIES ${FOX_LIBRARY})
endif()
find_package_handle_standard_args(FOX
DEFAULT_MSG
FOX_INCLUDE_DIR
FOX_LIBRARY
)
-5
View File
@@ -150,11 +150,6 @@ IF(SDL_LIBRARY_TEMP)
SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
ENDIF(NOT APPLE)
# For MinGW library
IF(MINGW)
SET(SDL_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL_LIBRARY_TEMP})
ENDIF(MINGW)
# Set the final string here so the GUI reflects the final state.
SET(SDL_LIBRARY ${SDL_LIBRARY_TEMP} CACHE STRING "Where the SDL Library can be found")
+36 -18
View File
@@ -25,15 +25,10 @@ if(TABLE_LAYOUT)
message(STATUS "Using QTableWidget")
endif(TABLE_LAYOUT)
message(STATUS "Looking for SDL ")
find_package(Sdl)
if(SDL_FOUND)
include_directories(${SDL_INCLUDE_DIR})
message("SDL Include Path: " ${SDL_INCLUDE_DIR})
add_definitions(-DJOYSTICKS)
add_definitions(-DSIMU_AUDIO)
else()
message("SDL not found! Joysticks support will be disabled. Simulator audio will not work.")
add_definitions(-DJOYSTICKS)
endif()
message(STATUS "Looking for QT lupdate ")
@@ -223,6 +218,7 @@ qt5_wrap_ui(companion_SRCS ${companion_UIS})
qt5_wrap_cpp(companion_SRCS ${companion_MOC_HDRS})
qt5_add_translation(companion_QM ${companion_TS})
qt5_add_resources(companion_RCC ${companion_RESOURCES})
add_custom_target(gen_qrc DEPENDS ${companion_RCC})
add_definitions(-DQT_TRANSLATIONS_DIR="${QT_TRANSLATIONS_DIR}")
@@ -234,6 +230,7 @@ else()
add_executable(${COMPANION_NAME} WIN32 ${companion_SRCS} ${companion_RCC} ${companion_QM})
endif()
add_dependencies(${COMPANION_NAME} gen_qrc)
qt5_use_modules(${COMPANION_NAME} Core Widgets Network)
target_link_libraries(${COMPANION_NAME} PRIVATE generaledit modeledit simulation common qcustomplot shared ${PTHREAD_LIBRARY} ${SDL_LIBRARY})
@@ -261,29 +258,50 @@ else()
add_executable(${SIMULATOR_NAME} WIN32 ${simu_SRCS} ${companion_RCC})
endif()
add_dependencies(${SIMULATOR_NAME} gen_qrc)
# TODO not the same link command than companion?
target_link_libraries(${SIMULATOR_NAME} PRIVATE simulation common qxtcommandoptions ${QT_LIBRARIES} ${QT_QTMAIN_LIBRARY} ${PTHREAD_LIBRARY} ${SDL_LIBRARY} ${OPENTX_SIMULATOR_LIBS})
############# Packaging ####################
message(STATUS ${CMAKE_BINARY_DIR} ${CMAKE_INSTALL_PREFIX}/bin)
if(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
install(TARGETS ${COMPANION_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
install(TARGETS ${SIMULATOR_NAME} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
install(DIRECTORY ${CMAKE_BINARY_DIR}/ DESTINATION ${SIMULATOR_LIB_PATH} USE_SOURCE_PERMISSIONS
FILES_MATCHING PATTERN "libopentx-*.so"
PATTERN "CMakeFiles" EXCLUDE
PATTERN "_CPack_Packages" EXCLUDE
PATTERN "companion" EXCLUDE
PATTERN "radio" EXCLUDE
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/companion.desktop DESTINATION share/applications RENAME companion${C9X_NAME_SUFFIX}.desktop)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/simulator.desktop DESTINATION share/applications RENAME simulator${C9X_NAME_SUFFIX}.desktop)
install(FILES images/linuxicons/16x16/companion.png DESTINATION /usr/share/icons/hicolor/16x16/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/22x22/companion.png DESTINATION /usr/share/icons/hicolor/22x22/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/24x24/companion.png DESTINATION /usr/share/icons/hicolor/24x24/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/32x32/companion.png DESTINATION /usr/share/icons/hicolor/32x32/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/48x48/companion.png DESTINATION /usr/share/icons/hicolor/48x48/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/128x128/companion.png DESTINATION /usr/share/icons/hicolor/128x128/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/256x256/companion.png DESTINATION /usr/share/icons/hicolor/256x256/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/512x512/companion.png DESTINATION /usr/share/icons/hicolor/512x512/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/scalable/companion.svg DESTINATION /usr/share/icons/hicolor/scalable/apps RENAME companion${C9X_NAME_SUFFIX}.svg)
install(FILES ../targets/linux/45-companion-taranis.rules DESTINATION /lib/udev/rules.d RENAME 45-companion${C9X_NAME_SUFFIX}-taranis.rules)
if(${CMAKE_INSTALL_PREFIX} MATCHES "/usr/local")
install(FILES images/linuxicons/16x16/companion.png DESTINATION /usr/share/icons/hicolor/16x16/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/22x22/companion.png DESTINATION /usr/share/icons/hicolor/22x22/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/24x24/companion.png DESTINATION /usr/share/icons/hicolor/24x24/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/32x32/companion.png DESTINATION /usr/share/icons/hicolor/32x32/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/48x48/companion.png DESTINATION /usr/share/icons/hicolor/48x48/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/128x128/companion.png DESTINATION /usr/share/icons/hicolor/128x128/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/256x256/companion.png DESTINATION /usr/share/icons/hicolor/256x256/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/512x512/companion.png DESTINATION /usr/share/icons/hicolor/512x512/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/scalable/companion.svg DESTINATION /usr/share/icons/hicolor/scalable/apps RENAME companion${C9X_NAME_SUFFIX}.svg)
install(FILES ../targets/linux/45-companion-taranis.rules DESTINATION /lib/udev/rules.d RENAME 45-companion${C9X_NAME_SUFFIX}-taranis.rules)
else()
install(FILES images/linuxicons/16x16/companion.png DESTINATION share/icons/hicolor/16x16/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/22x22/companion.png DESTINATION share/icons/hicolor/22x22/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/24x24/companion.png DESTINATION share/icons/hicolor/24x24/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/32x32/companion.png DESTINATION share/icons/hicolor/32x32/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/48x48/companion.png DESTINATION share/icons/hicolor/48x48/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/128x128/companion.png DESTINATION share/icons/hicolor/128x128/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/256x256/companion.png DESTINATION share/icons/hicolor/256x256/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/512x512/companion.png DESTINATION share/icons/hicolor/512x512/apps RENAME companion${C9X_NAME_SUFFIX}.png)
install(FILES images/linuxicons/scalable/companion.svg DESTINATION share/icons/hicolor/scalable/apps RENAME companion${C9X_NAME_SUFFIX}.svg)
install(FILES ../targets/linux/45-companion-taranis.rules DESTINATION lib/udev/rules.d RENAME 45-companion${C9X_NAME_SUFFIX}-taranis.rules)
endif()
# Linux specific code
set(OperatingSystem "Linux")
else()
elseif(WIN32)
get_target_property(QtCore_LOCATION Qt5::Core LOCATION)
get_filename_component(QT_DLL_DIR ${QtCore_LOCATION} PATH)
get_filename_component(SDL_DIR ${SDL_LIBRARY} PATH)
+1 -1
View File
@@ -740,7 +740,7 @@ void AppData::init()
// Load and store all variables. Use default values if setting values are missing
QString _tempString; // Do not touch. Do not change the settings version before a new verson update!
getset( _tempString, "settings_version" ,"210" ); // This is a version marker. Will be used to upgrade the settings later on.
getset( _tempString, "settings_version" ,"220" ); // This is a version marker. Will be used to upgrade the settings later on.
getset( _recentFiles, "recentFileList" ,"" );
getset( _mainWinGeo, "mainWindowGeometry" ,"" );
+6 -1
View File
@@ -109,9 +109,14 @@ void AppPreferencesDialog::initSettings()
ui->snapshotPath->setDisabled(true);
ui->snapshotPathButton->setDisabled(true);
}
#if defined(ALLOW_NIGHTLY_BUILDS)
ui->useCompanionNightlyBuilds->setChecked(g.useCompanionNightlyBuilds());
ui->autoCheckCompanion->setChecked(g.autoCheckApp());
ui->useFirmwareNightlyBuilds->setChecked(g.useFirmwareNightlyBuilds());
#else
ui->useCompanionNightlyBuilds->hide();
ui->useFirmwareNightlyBuilds->hide();
#endif
ui->autoCheckCompanion->setChecked(g.autoCheckApp());
ui->autoCheckFirmware->setChecked(g.autoCheckFw());
ui->showSplash->setChecked(g.showSplash());
ui->historySize->setValue(g.historySize());
+3 -3
View File
@@ -21,7 +21,7 @@ burnConfigDialog::burnConfigDialog(QWidget *parent) :
getSettings();
populateProgrammers();
EEPROMInterface *eepromInterface = GetEepromInterface();
if (IS_TARANIS(eepromInterface->getBoard())) {
if (IS_STM32(eepromInterface->getBoard())) {
setWindowTitle(tr("DFU-UTIL Configuration"));
ui->avrArgs->hide();
ui->avrdude_location->hide();
@@ -310,7 +310,7 @@ void burnConfigDialog::on_advCtrChkB_toggled(bool checked)
{
EEPROMInterface *eepromInterface = GetEepromInterface();
if (checked) {
if (IS_TARANIS(eepromInterface->getBoard())) {
if (IS_STM32(eepromInterface->getBoard())) {
ui->label_dfu2->show();
ui->dfuArgs->show();
}
@@ -327,7 +327,7 @@ void burnConfigDialog::on_advCtrChkB_toggled(bool checked)
}
}
else {
if (IS_TARANIS(eepromInterface->getBoard())) {
if (IS_STM32(eepromInterface->getBoard())) {
ui->label_dfu2->hide();
ui->dfuArgs->hide();
}
+1 -4
View File
@@ -134,10 +134,7 @@ int main(int argc, char *argv[])
}
QString splashScreen;
if ( g.profile[g.id()].fwType().contains("taranis")) splashScreen = ":/images/splash-taranis.png";
else if ( g.profile[g.id()].fwType().contains("9xrpro")) splashScreen = ":/images/splash-9xrpro.png";
else if ( g.profile[g.id()].fwType().contains("9xr")) splashScreen = ":/images/splash-9xr.png";
else splashScreen = ":/images/splash-9x.png";
splashScreen = ":/images/splash.png";
QPixmap pixmap = QPixmap(splashScreen);
QSplashScreen *splash = new QSplashScreen(pixmap);
+1 -4
View File
@@ -54,10 +54,7 @@
<file>images/simulator/9X/9xcursdown.png</file>
<file>images/simulator/9X/9xcursphoto.png</file>
<file>images/screenshot.png</file>
<file>images/splash-9x.png</file>
<file>images/splash-9xrpro.png</file>
<file>images/splash-9xr.png</file>
<file>images/splash-taranis.png</file>
<file>images/splash.png</file>
<file>images/companion-title.png</file>
<file>images/maps.png</file>
<file>images/track.png</file>
+1 -1
View File
@@ -3,7 +3,7 @@
#include "helpers.h"
ContributorsDialog::ContributorsDialog(QWidget * parent):
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
QDialog(parent),
ui(new Ui::HtmlDialog)
{
ui->setupUi(this);
+74 -7
View File
@@ -1380,9 +1380,9 @@ void ModelData::clear()
moduleData[0].channelsCount = 8;
moduleData[1].channelsStart = 0;
moduleData[1].channelsCount = 8;
moduleData[0].ppmDelay = 300;
moduleData[1].ppmDelay = 300;
moduleData[2].ppmDelay = 300;
moduleData[0].ppm.delay = 300;
moduleData[1].ppm.delay = 300;
moduleData[2].ppm.delay = 300;
int board = GetEepromInterface()->getBoard();
if (IS_TARANIS(board)) {
moduleData[0].protocol = PULSES_PXX_XJT_X16;
@@ -1397,7 +1397,7 @@ void ModelData::clear()
moduleData[1].protocol = PULSES_OFF;
}
for (int i=0; i<C9X_MAX_FLIGHT_MODES; i++) {
flightModeData[i].clear();
flightModeData[i].clear(i);
}
clearInputs();
clearMixes();
@@ -1510,9 +1510,7 @@ int ModelData::getTrimValue(int phaseIdx, int trimIdx)
}
else {
phaseIdx = phase.trimRef[trimIdx];
if (phase.trimMode[trimIdx] == 0)
result = 0;
else
if (phase.trimMode[trimIdx] != 0)
result += phase.trim[trimIdx];
}
}
@@ -1767,6 +1765,33 @@ QString getBoardName(BoardEnum board)
}
}
const int Firmware::getFlashSize()
{
switch (board) {
case BOARD_STOCK:
return FSIZE_STOCK;
case BOARD_M128:
return FSIZE_M128;
case BOARD_MEGA2560:
case BOARD_GRUVIN9X:
return FSIZE_GRUVIN9X;
case BOARD_SKY9X:
return FSIZE_SKY9X;
case BOARD_9XRPRO:
case BOARD_AR9X:
return FSIZE_9XRPRO;
case BOARD_TARANIS:
case BOARD_TARANIS_PLUS:
case BOARD_TARANIS_X9E:
case BOARD_FLAMENCO:
return FSIZE_TARANIS;
case BOARD_HORUS:
return FSIZE_HORUS;
default:
return 0;
}
}
Firmware * GetFirmware(QString id)
{
foreach(Firmware * firmware, firmwares) {
@@ -1830,3 +1855,45 @@ SimulatorInterface *GetCurrentFirmwareSimulator()
else
return NULL;
}
unsigned int getNumSubtypes(MultiModuleRFProtocols type) {
switch (type) {
case MM_RF_PROTO_HISKY:
case MM_RF_PROTO_DSM2:
case MM_RF_PROTO_SYMAX:
case MM_RF_PROTO_KN:
return 2;
case MM_RF_PROTO_FRSKY:
case MM_RF_PROTO_CG023:
case MM_RF_PROTO_MT99XX:
return 3;
case MM_RF_PROTO_FLYSKY:
case MM_RF_PROTO_MJXQ:
return 4;
case MM_RF_PROTO_YD717:
return 5;
case MM_RF_PROTO_CX10:
case MM_RF_PROTO_CUSTOM:
return 8;
default:
return 1;
}
}
void FlightModeData::clear(const int phase)
{
memset(this, 0, sizeof(FlightModeData));
if (phase != 0) {
for (int idx=0; idx<C9X_MAX_GVARS; idx++) {
gvars[idx] = 1025;
}
for (int idx=0; idx<C9X_MAX_ENCODERS; idx++) {
rotaryEncoders[idx] = 1025;
}
}
}
+79 -27
View File
@@ -26,6 +26,7 @@
#include <iostream>
#include <bitset>
#include "constants.h"
#include "../../radio/src/definitions.h"
#include "simulatorinterface.h"
#define EESIZE_STOCK 2048
@@ -36,6 +37,15 @@
#define EESIZE_9XRPRO (128*4096)
#define EESIZE_MAX EESIZE_9XRPRO
#define FSIZE_STOCK (64*1024)
#define FSIZE_M128 (128*1024)
#define FSIZE_GRUVIN9X (256*1024)
#define FSIZE_TARANIS (512*1024)
#define FSIZE_SKY9X (256*1024)
#define FSIZE_9XRPRO (512*1024)
#define FSIZE_HORUS (2048*1024)
#define FSIZE_MAX FSIZE_HORUS
QString getBoardName(BoardEnum board);
#define IS_9X(board) (board==BOARD_STOCK || board==BOARD_M128)
@@ -135,7 +145,11 @@ enum FailsafeModes {
#define TRIM_RV_UP 5
#define TRIM_RH_L 6
#define TRIM_RH_R 7
#define TRIM_NONE 8
#define TRIM_T5_DN 8
#define TRIM_T5_UP 9
#define TRIM_T6_DN 10
#define TRIM_T6_UP 11
#define TRIM_NONE 12
// Beep center bits
#define BC_BIT_RUD (0x01)
@@ -149,23 +163,6 @@ enum FailsafeModes {
#define BC_BIT_REA (0x80)
#define BC_BIT_REB (0x100)
// TODO remove this enum!
enum EnumKeys {
KEY_MENU,
KEY_EXIT,
#if defined(PCBTARANIS)
KEY_ENTER,
KEY_PAGE,
KEY_PLUS,
KEY_MINUS,
#else
KEY_DOWN,
KEY_UP,
KEY_RIGHT,
KEY_LEFT,
#endif
};
#define CHAR_FOR_NAMES " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-."
#define CHAR_FOR_NAMES_REGEX "[ A-Za-z0-9_.-,]*"
@@ -635,7 +632,7 @@ class CustomFunctionData { // Function Switches data
class FlightModeData {
public:
FlightModeData() { clear(); }
FlightModeData() { clear(0); }
int trimMode[NUM_STICKS];
int trimRef[NUM_STICKS];
int trim[NUM_STICKS];
@@ -643,9 +640,9 @@ class FlightModeData {
char name[10+1];
unsigned int fadeIn;
unsigned int fadeOut;
int rotaryEncoders[2];
int rotaryEncoders[C9X_MAX_ENCODERS];
int gvars[C9X_MAX_GVARS];
void clear() { memset(this, 0, sizeof(FlightModeData)); }
void clear(const int phase);
};
class SwashRingData { // Swash Ring data
@@ -845,9 +842,38 @@ enum PulsesProtocol {
PULSES_PXX_XJT_LR12,
PULSES_PXX_DJT,
PULSES_CROSSFIRE,
PULSES_MULTIMODULE,
PULSES_PROTOCOL_LAST
};
enum MultiModuleRFProtocols {
MM_RF_PROTO_FLYSKY=0,
MM_RF_PROTO_FIRST=MM_RF_PROTO_FLYSKY,
MM_RF_PROTO_HUBSAN,
MM_RF_PROTO_FRSKY,
MM_RF_PROTO_HISKY,
MM_RF_PROTO_V2X2,
MM_RF_PROTO_DSM2,
MM_RF_PROTO_DEVO,
MM_RF_PROTO_YD717,
MM_RF_PROTO_KN,
MM_RF_PROTO_SYMAX,
MM_RF_PROTO_SLT,
MM_RF_PROTO_CX10,
MM_RF_PROTO_CG023,
MM_RF_PROTO_BAYANG,
MM_RF_PROTO_ESky,
MM_RF_PROTO_MT99XX,
MM_RF_PROTO_MJXQ,
MM_RF_PROTO_SHENQI,
MM_RF_PROTO_FY326,
MM_RF_PROTO_SFHSS,
MM_RF_PROTO_CUSTOM,
MM_RF_PROTO_LAST= MM_RF_PROTO_CUSTOM
};
unsigned int getNumSubtypes(MultiModuleRFProtocols type);
enum TrainerProtocol {
TRAINER_MASTER_JACK,
TRAINER_SLAVE_JACK,
@@ -861,17 +887,39 @@ class ModuleData {
ModuleData() { clear(); }
unsigned int modelId;
int protocol;
int subprotocol;
unsigned int subType;
bool invertedSerial;
unsigned int channelsStart;
int channelsCount; // 0=8 channels
unsigned int failsafeMode;
int failsafeChannels[C9X_NUM_CHNOUT];
int ppmDelay;
bool ppmPulsePol; // false = positive
bool ppmOutputType; // false = open drain, true = push pull
int ppmFrameLength;
// By pure coincidence the struct are unions with the same datatype in Companion
// and the firmware itself. If this changes the multi struct needs it own logic in the eeprom interface
union {
struct {
int delay;
bool pulsePol; // false = positive
bool outputType; // false = open drain, true = push pull
int frameLength;
} ppm;
struct {
int rfProtocol;
bool autoBindMode;
bool lowPowerMode;
int optionValue;
} multi;
};
// Currently the Eeprom read/write code does not work with unions
// define a hack for the multi rf Protocol to get the real numbers here
// (reverse the int => ms logic of the ppm delay)
int getMultiRfProtocol () { return (multi.rfProtocol - 300) / 50; }
void setMultiRfProtocol (int val) { multi.rfProtocol = 300 + 50 * val; }
void clear() { memset(this, 0, sizeof(ModuleData)); }
QString polarityToString() const { return ppmPulsePol ? QObject::tr("Positive") : QObject::tr("Negative"); } // TODO ModelPrinter
QString polarityToString() const { return ppm.pulsePol ? QObject::tr("Positive") : QObject::tr("Negative"); } // TODO ModelPrinter
};
#define C9X_MAX_SCRIPTS 7
@@ -1627,9 +1675,13 @@ class Firmware {
virtual int getCapability(const Capability) = 0;
virtual QTime getMaxTimerStart() = 0;
virtual bool isTelemetrySourceAvailable(int source) = 0;
virtual int isAvailable(PulsesProtocol proto, int port=0) = 0;
const int getFlashSize();
public:
QList<const char *> languages;
+1 -1
View File
@@ -125,7 +125,7 @@ bool RleFile::searchFat()
uint32_t bestFatIndex = 0;
for (int i=0; i<EEPROM_ZONE_SIZE/EEPROM_FAT_SIZE; i++) {
EepromHeader * header = (EepromHeader *)(eeprom+i*EEPROM_FAT_SIZE);
if (header->mark == EEPROM_MARK && (int)header->index >= bestFatIndex) {
if (header->mark == EEPROM_MARK && header->index >= bestFatIndex) {
eepromFatHeader = header;
bestFatIndex = header->index;
}
+17 -9
View File
@@ -44,7 +44,7 @@ int getFileType(const QString &fullFileName)
}
FirmwareInterface::FirmwareInterface(const QString &filename):
flash(MAX_FSIZE, 0),
flash(FSIZE_MAX, 0),
flashSize(0),
versionId(0),
eepromVersion(0),
@@ -59,11 +59,11 @@ FirmwareInterface::FirmwareInterface(const QString &filename):
QFile file(filename);
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { // reading HEX TEXT file
QTextStream inputStream(&file);
flashSize = HexInterface(inputStream).load((uint8_t *)flash.data(), MAX_FSIZE);
flashSize = HexInterface(inputStream).load((uint8_t *)flash.data(), FSIZE_MAX);
file.close();
if (flashSize == 0) {
file.open(QIODevice::ReadOnly);
flashSize = file.read((char *)flash.data(), MAX_FSIZE);
flashSize = file.read((char *)flash.data(), FSIZE_MAX);
}
}
}
@@ -130,10 +130,12 @@ QString FirmwareInterface::seekLabel(const QString & label)
QString FirmwareInterface::getFlavour() const
{
if (flavour == "opentx-x9dp")
return "opentx-taranis-plus";
else if (flavour == "opentx-x9d")
return "opentx-taranis";
if (flavour == "opentx-taranis-x9e")
return "opentx-x9e";
else if (flavour == "opentx-x9dp" || flavour == "opentx-taranis-plus")
return "opentx-x9d+";
else if (flavour == "opentx-taranis")
return "opentx-x9d";
else
return flavour;
}
@@ -340,14 +342,18 @@ bool FirmwareInterface::isValid()
unsigned int FirmwareInterface::save(QString fileName)
{
uint8_t binflash[MAX_FSIZE];
memcpy(&binflash, flash.constData(), flashSize);
uint8_t *binflash = (uint8_t*)malloc(FSIZE_MAX);
if (binflash == NULL) {
return -1;
}
memcpy(binflash, flash.constData(), flashSize);
QFile file(fileName);
int fileType = getFileType(fileName);
if (fileType == FILE_TYPE_HEX) {
if (!file.open(QIODevice::ReadWrite | QIODevice::Truncate | QIODevice::Text)) { //reading HEX TEXT file
free(binflash);
return -1;
}
QTextStream outputStream(&file);
@@ -356,6 +362,7 @@ unsigned int FirmwareInterface::save(QString fileName)
}
else {
if (!file.open(QIODevice::ReadWrite | QIODevice::Truncate)) { //reading HEX TEXT file
free(binflash);
return -1;
}
file.write((char*)binflash, flashSize);
@@ -363,5 +370,6 @@ unsigned int FirmwareInterface::save(QString fileName)
file.close();
free(binflash);
return flashSize;
}
-1
View File
@@ -19,7 +19,6 @@
#include <QImage>
#include <QByteArray>
#define MAX_FSIZE (512*1024)
#define SPLASH_WIDTH (128)
#define SPLASH_HEIGHT (64)
#define SPLASHX9D_WIDTH (212)
+3 -3
View File
@@ -373,17 +373,17 @@ t_Er9xModelData::operator ModelData ()
c9x.moduleData[0].protocol = PULSES_PPM;
break;
}
c9x.moduleData[0].ppmFrameLength=ppmFrameLength;
c9x.moduleData[0].ppm.frameLength=ppmFrameLength;
c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH;
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.customFn[0].func = FuncInstantTrim;
if (trimSw) {
c9x.customFn[0].swtch = er9xToSwitch(trimSw);
}
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.swashRingData.elevatorWeight = swashInvertELE ? -100 : 100;
c9x.swashRingData.aileronWeight = swashInvertAIL ? -100 : 100;
@@ -19,13 +19,14 @@
#define SIMU
#define SIMU_EXCEPTIONS
#define FRSKY
#define TELEMETRY_FRSKY
#define PHASES
#undef min
#undef max
#define NUM_POTS 3
#define SWSRC_SW1 DSW_SW1
#define NUM_POTS 3
#define NUM_SLIDERS 0
#define SWSRC_SW1 DSW_SW1
#include <exception>
@@ -47,7 +48,7 @@ namespace Er9x {
uint8_t pxxFlag = 0;
int16_t g_anas[7];
#define isBacklightEnable() (PORTB & (1<<OUT_B_LIGHT))
#define isBacklightEnabled() (PORTB & (1<<OUT_B_LIGHT))
uint16_t anaIn(uint8_t chan)
{
@@ -151,7 +152,7 @@ void simuSetKey(uint8_t key, bool state)
}
}
#define isBacklightEnable() (PORTB & (1<<OUT_B_LIGHT))
#define isBacklightEnabled() (PORTB & (1<<OUT_B_LIGHT))
}
@@ -505,17 +505,17 @@ t_Ersky9xModelData_v10::operator ModelData ()
c9x.moduleData[0].protocol = PULSES_PPM;
break;
}
c9x.moduleData[0].ppmFrameLength=ppmFrameLength;
c9x.moduleData[0].ppm.frameLength=ppmFrameLength;
c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH;
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.customFn[0].func = FuncInstantTrim;
if (trimSw) {
c9x.customFn[0].swtch = er9xToSwitch(trimSw);
}
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.swashRingData.elevatorWeight = swashInvertELE ? -100 : 100;
c9x.swashRingData.aileronWeight = swashInvertAIL ? -100 : 100;
@@ -620,17 +620,17 @@ t_Ersky9xModelData_v11::operator ModelData ()
c9x.moduleData[0].protocol = PULSES_PPM;
break;
}
c9x.moduleData[0].ppmFrameLength=ppmFrameLength;
c9x.moduleData[0].ppm.frameLength=ppmFrameLength;
c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH;
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.customFn[0].func = FuncInstantTrim;
if (trimSw) {
c9x.customFn[0].swtch = er9xToSwitch(trimSw);
}
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.swashRingData.elevatorWeight = swashInvertELE ? -100 : 100;
c9x.swashRingData.aileronWeight = swashInvertAIL ? -100 : 100;
@@ -22,7 +22,7 @@
#define PCBSKY9X
#define PCBSKY
#define STAMP
#define FRSKY
#define TELEMETRY_FRSKY
#define FRSKY_HUB
#define WS_HOW_HIGH
#define TEMPLATES
@@ -31,8 +31,9 @@
#define AUDIO
#define REVB
#define NUM_POTS 3
#define SWSRC_SW1 DSW_SW1
#define NUM_POTS 3
#define NUM_SLIDERS 0
#define SWSRC_SW1 DSW_SW1
#undef min
#undef max
@@ -58,7 +59,7 @@ namespace Ersky9x {
#include "../ersky9x/sound.cpp"
#include "../ersky9x/diskio.cpp"
#define isBacklightEnable() (PWM->PWM_CH_NUM[0].PWM_CDTY != 100)
#define isBacklightEnabled() (PWM->PWM_CH_NUM[0].PWM_CDTY != 100)
//uint8_t pxxFlag = 0;
int16_t g_anas[7];
@@ -447,9 +447,9 @@ t_Gruvin9xModelData_v102::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
for (int i=0; i<G9X_MAX_FLIGHT_MODES; i++)
c9x.flightModeData[i] = flightModeData[i];
@@ -517,9 +517,9 @@ t_Gruvin9xModelData_v103::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
for (int i=0; i<G9X_MAX_FLIGHT_MODES; i++)
c9x.flightModeData[i] = flightModeData[i];
@@ -587,9 +587,9 @@ t_Gruvin9xModelData_v105::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<G9X_MAX_FLIGHT_MODES; i++) {
@@ -677,9 +677,9 @@ t_Gruvin9xModelData_v106::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc-2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<G9X_MAX_FLIGHT_MODES; i++) {
@@ -455,9 +455,9 @@ t_Open9xGruvin9xModelData_v207::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<5; i++) {
@@ -499,7 +499,7 @@ t_Open9xGruvin9xModelData_v207::operator ModelData ()
c9x.customFn[i] = customFn[i];
c9x.swashRingData = swashR;
c9x.frsky = frsky;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
return c9x;
@@ -533,9 +533,9 @@ t_Open9xGruvin9xModelData_v208::operator ModelData ()
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<5; i++) {
@@ -578,7 +578,7 @@ t_Open9xGruvin9xModelData_v208::operator ModelData ()
c9x.frsky.varioSource = varioSource;
c9x.frsky.varioCenterMax = varioSpeedUpMin;
c9x.frsky.varioCenterMin = varioSpeedDownMin;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
for (int i=0; i<16; i++) {
@@ -615,9 +615,9 @@ t_Open9xGruvin9xModelData_v209::operator ModelData ()
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<5; i++) {
@@ -661,7 +661,7 @@ t_Open9xGruvin9xModelData_v209::operator ModelData ()
c9x.frsky.varioCenterMax = varioSpeedUpMin;
c9x.frsky.varioCenterMin = varioSpeedDownMin;
c9x.switchWarningStates = switchWarningStates;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
for (int i=0; i<16; i++) {
@@ -698,9 +698,9 @@ t_Open9xGruvin9xModelData_v210::operator ModelData ()
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<5; i++) {
@@ -744,7 +744,7 @@ t_Open9xGruvin9xModelData_v210::operator ModelData ()
c9x.swashRingData = swashR;
c9x.frsky = frsky;
c9x.switchWarningStates = switchWarningStates;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
for (int i=0; i<16; i++) {
@@ -785,9 +785,9 @@ t_Open9xGruvin9xModelData_v211::operator ModelData ()
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<5; i++) {
@@ -831,7 +831,7 @@ t_Open9xGruvin9xModelData_v211::operator ModelData ()
c9x.swashRingData = swashR;
c9x.frsky = frsky;
c9x.switchWarningStates = switchWarningStates;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
return c9x;
@@ -735,9 +735,9 @@ t_Open9xArmModelData_v208::operator ModelData ()
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<9; i++) {
@@ -780,7 +780,7 @@ t_Open9xArmModelData_v208::operator ModelData ()
c9x.frsky.varioSource = varioSource;
c9x.frsky.varioCenterMax = varioSpeedUpMin;
c9x.frsky.varioCenterMin = varioSpeedDownMin;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
for (int i=0; i<16; i++) {
@@ -818,9 +818,9 @@ t_Open9xArmModelData_v209::operator ModelData ()
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<9; i++) {
@@ -864,7 +864,7 @@ t_Open9xArmModelData_v209::operator ModelData ()
c9x.frsky.varioCenterMax = varioSpeedUpMin;
c9x.frsky.varioCenterMin = varioSpeedDownMin;
c9x.switchWarningStates = switchWarningStates;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
for (int i=0; i<16; i++) {
@@ -902,9 +902,9 @@ t_Open9xArmModelData_v210::operator ModelData ()
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<9; i++) {
@@ -948,7 +948,7 @@ t_Open9xArmModelData_v210::operator ModelData ()
c9x.frsky.varioCenterMax = varioSpeedUpMin;
c9x.frsky.varioCenterMin = varioSpeedDownMin;
c9x.switchWarningStates = switchWarningStates;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
for (int i=0; i<16; i++) {
@@ -986,9 +986,9 @@ t_Open9xArmModelData_v211::operator ModelData ()
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<9; i++) {
@@ -1032,7 +1032,7 @@ t_Open9xArmModelData_v211::operator ModelData ()
c9x.swashRingData = swashR;
c9x.frsky = frsky;
c9x.switchWarningStates = switchWarningStates;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
for (int i=0; i<16; i++) {
@@ -1073,9 +1073,9 @@ t_Open9xArmModelData_v212::operator ModelData ()
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<9; i++) {
@@ -1119,7 +1119,7 @@ t_Open9xArmModelData_v212::operator ModelData ()
c9x.swashRingData = swashR;
c9x.frsky = frsky;
c9x.switchWarningStates = switchWarningStates;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
return c9x;
@@ -932,9 +932,9 @@ t_Open9xModelData_v201::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<5; i++) {
@@ -1006,9 +1006,9 @@ t_Open9xModelData_v202::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter,
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<5; i++) {
@@ -1052,7 +1052,7 @@ t_Open9xModelData_v202::operator ModelData ()
// c9x.safetySw[i] = safetySw[i];
c9x.swashRingData = swashR;
c9x.frsky = frsky;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
return c9x;
@@ -1082,9 +1082,9 @@ t_Open9xModelData_v203::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<5; i++) {
@@ -1126,7 +1126,7 @@ t_Open9xModelData_v203::operator ModelData ()
c9x.customFn[i] = customFn[i];
c9x.swashRingData = swashR;
c9x.frsky = frsky;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
return c9x;
@@ -1156,9 +1156,9 @@ t_Open9xModelData_v204::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<5; i++) {
@@ -1202,7 +1202,7 @@ t_Open9xModelData_v204::operator ModelData ()
c9x.frsky = frsky;
c9x.frsky.rssiAlarms[0] = frskyRssiAlarms[0].get(0);
c9x.frsky.rssiAlarms[1] = frskyRssiAlarms[1].get(1);
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
return c9x;
@@ -1235,9 +1235,9 @@ t_Open9xModelData_v205::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + (2 * ppmNCH);
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<5; i++) {
@@ -1279,7 +1279,7 @@ t_Open9xModelData_v205::operator ModelData ()
c9x.customFn[i] = customFn[i];
c9x.swashRingData = swashR;
c9x.frsky = frsky;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0]. modelId = modelId;
c9x.frsky.screens[1].type = 0;
@@ -1314,9 +1314,9 @@ t_Open9xModelData_v208::operator ModelData ()
c9x.thrTrim = thrTrim;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<5; i++) {
@@ -1362,7 +1362,7 @@ t_Open9xModelData_v208::operator ModelData ()
c9x.frsky.varioCenterMax = varioSpeedUpMin;
c9x.frsky.varioCenterMin = varioSpeedDownMin;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
c9x.frsky.screens[1].type = 0;
@@ -1400,9 +1400,9 @@ t_Open9xModelData_v209::operator ModelData ()
c9x.thrTrim = thrTrim;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<5; i++) {
@@ -1449,7 +1449,7 @@ t_Open9xModelData_v209::operator ModelData ()
c9x.frsky.varioCenterMin = varioSpeedDownMin;
c9x.switchWarningStates = switchWarningStates;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
c9x.frsky.screens[1].type = 0;
@@ -1487,9 +1487,9 @@ t_Open9xModelData_v210::operator ModelData ()
c9x.thrTrim = thrTrim;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<5; i++) {
@@ -1536,7 +1536,7 @@ t_Open9xModelData_v210::operator ModelData ()
c9x.frsky = frsky;
c9x.switchWarningStates = switchWarningStates;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
@@ -1575,9 +1575,9 @@ t_Open9xModelData_v211::operator ModelData ()
c9x.thrTrim = thrTrim;
c9x.disableThrottleWarning=disableThrottleWarning;
c9x.trimInc = trimInc - 2;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.beepANACenter = beepANACenter;
c9x.moduleData[0].ppmPulsePol = pulsePol;
c9x.moduleData[0].ppm.pulsePol = pulsePol;
c9x.extendedLimits = extendedLimits;
c9x.extendedTrims = extendedTrims;
for (int i=0; i<5; i++) {
@@ -1624,7 +1624,7 @@ t_Open9xModelData_v211::operator ModelData ()
c9x.frsky = frsky;
c9x.switchWarningStates = switchWarningStates;
c9x.moduleData[0].ppmFrameLength = ppmFrameLength;
c9x.moduleData[0].ppm.frameLength = ppmFrameLength;
c9x.thrTraceSrc = thrTraceSrc;
c9x.moduleData[0].modelId = modelId;
+30 -27
View File
@@ -26,7 +26,7 @@
#define MAX_CUSTOM_FUNCTIONS(board, version) (IS_ARM(board) ? (version >= 216 ? 64 : 32) : (IS_DBLEEPROM(board, version) ? 24 : 16))
#define MAX_CURVES(board, version) (IS_ARM(board) ? ((IS_TARANIS(board) && version >= 216) ? 32 : 16) : 8)
#define MAX_GVARS(board, version) ((IS_ARM(board) && version >= 216) ? 9 : 5)
#define MAX_SENSORS(board, version) (32)
#define MAX_TELEMETRY_SENSORS(board, version) (32)
#define NUM_PPM_INPUTS(board, version) ((IS_ARM(board) && version >= 216) ? 16 : 8)
#define ROTENC_COUNT(board, version) (IS_ARM(board) ? ((IS_TARANIS(board) && version >= 218) ? 0 : 1) : (IS_2560(board) ? 2 : 0))
@@ -742,6 +742,14 @@ class CurveReferenceField: public TransformedField {
int _curve_value;
};
static int exportHeliInversionWeight(int source) {
return (source < 0) ? 1 : 0;
}
static int importHeliInversionWeight(int source) {
return source ? -100: 100;
}
class HeliField: public StructField {
public:
HeliField(SwashRingData & heli, BoardEnum board, unsigned int version, unsigned int variant)
@@ -757,22 +765,15 @@ class HeliField: public StructField {
Append(new SignedField<8>(heli.elevatorWeight));
}
else {
Append(new BoolField<1>(invertELE));
Append(new BoolField<1>(invertAIL));
Append(new BoolField<1>(invertCOL));
Append(new ConversionField< SignedField<1> >(heli.elevatorWeight, exportHeliInversionWeight, importHeliInversionWeight));
Append(new ConversionField< SignedField<1> >(heli.aileronWeight, exportHeliInversionWeight, importHeliInversionWeight));
Append(new ConversionField< SignedField<1> >(heli.collectiveWeight, exportHeliInversionWeight, importHeliInversionWeight));
Append(new UnsignedField<5>(heli.type));
Append(new SourceField<8>(heli.collectiveSource, board, version, variant));
//, FLAG_NOSWITCHES)); Fix shift in collective
Append(new UnsignedField<8>(heli.value));
}
}
// TODO before + after
protected:
bool invertELE;
bool invertAIL;
bool invertCOL;
};
class FlightModeField: public TransformedField {
@@ -3055,14 +3056,14 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
if (IS_TARANIS(board) || (IS_ARM(board) && version >= 216))
internalField.Append(new BoolField<1>(modelData.displayChecklist));
else
internalField.Append(new BoolField<1>(modelData.moduleData[0].ppmPulsePol));
internalField.Append(new BoolField<1>(modelData.moduleData[0].ppm.pulsePol));
internalField.Append(new BoolField<1>(modelData.extendedLimits));
internalField.Append(new BoolField<1>(modelData.extendedTrims));
internalField.Append(new BoolField<1>(modelData.throttleReversed));
if (!IS_ARM(board) || version < 216) {
internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[0].ppmDelay, exportPpmDelay, importPpmDelay));
internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[0].ppm.delay, exportPpmDelay, importPpmDelay));
}
if (IS_ARM(board) || IS_2560(board))
@@ -3091,7 +3092,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
}
if (!IS_ARM(board) || version < 216) {
internalField.Append(new SignedField<8>(modelData.moduleData[0].ppmFrameLength));
internalField.Append(new SignedField<8>(modelData.moduleData[0].ppm.frameLength));
}
internalField.Append(new UnsignedField<8>(modelData.thrTraceSrc, "Throttle Source"));
@@ -3170,31 +3171,33 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
if (IS_ARM(board) && version >= 215) {
for (int module=0; module<modulesCount; module++) {
if (version >= 217) {
internalField.Append(new ConversionField< SignedField<4> >(modelData.moduleData[module].protocol, &protocolsConversionTable, "Protocol", ::QObject::tr("OpenTX doesn't accept this radio protocol")));
internalField.Append(new ConversionField<SignedField<4> >(modelData.moduleData[module].protocol, &protocolsConversionTable, "Protocol", ::QObject::tr("OpenTX doesn't accept this radio protocol")));
internalField.Append(new SignedField<4>(subprotocols[module]));
}
else {
internalField.Append(new SignedField<8>(subprotocols[module]));
}
internalField.Append(new UnsignedField<8>(modelData.moduleData[module].channelsStart));
internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[module].channelsCount, -8));
if (version >= 217)
internalField.Append(new UnsignedField<8>(modelData.moduleData[module].failsafeMode));
else
internalField.Append(new ConversionField<SignedField<8> >(modelData.moduleData[module].channelsCount, -8));
if (version >= 217) {
internalField.Append(new UnsignedField<4>(modelData.moduleData[module].failsafeMode));
internalField.Append(new UnsignedField<3>(modelData.moduleData[module].subType));
internalField.Append(new BoolField<1>(modelData.moduleData[module].invertedSerial));
} else
internalField.Append(new ConversionField< UnsignedField<8> >(modelData.moduleData[module].failsafeMode, -1));
for (int i=0; i<32; i++) {
internalField.Append(new SignedField<16>(modelData.moduleData[module].failsafeChannels[i]));
}
if (version >= 217) {
internalField.Append(new ConversionField< SignedField<6> >(modelData.moduleData[module].ppmDelay, exportPpmDelay, importPpmDelay));
internalField.Append(new BoolField<1>(modelData.moduleData[module].ppmPulsePol));
internalField.Append(new BoolField<1>(modelData.moduleData[module].ppmOutputType));
internalField.Append(new SignedField<8>(modelData.moduleData[module].ppmFrameLength));
internalField.Append(new ConversionField< SignedField<6> >(modelData.moduleData[module].ppm.delay, exportPpmDelay, importPpmDelay));
internalField.Append(new BoolField<1>(modelData.moduleData[module].ppm.pulsePol));
internalField.Append(new BoolField<1>(modelData.moduleData[module].ppm.outputType));
internalField.Append(new SignedField<8>(modelData.moduleData[module].ppm.frameLength));
}
else {
internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[module].ppmDelay, exportPpmDelay, importPpmDelay));
internalField.Append(new SignedField<8>(modelData.moduleData[module].ppmFrameLength));
internalField.Append(new BoolField<8>(modelData.moduleData[module].ppmPulsePol));
internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[module].ppm.delay, exportPpmDelay, importPpmDelay));
internalField.Append(new SignedField<8>(modelData.moduleData[module].ppm.frameLength));
internalField.Append(new BoolField<8>(modelData.moduleData[module].ppm.pulsePol));
}
}
}
@@ -3268,7 +3271,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
}
if (IS_ARM(board) && version >= 217) {
for (int i=0; i<MAX_SENSORS(board, version); ++i) {
for (int i=0; i<MAX_TELEMETRY_SENSORS(board, version); ++i) {
internalField.Append(new SensorField(modelData.sensorData[i], board, version));
}
}
@@ -83,6 +83,7 @@ class ProtocolsConversionTable: public ConversionTable
}
if (IS_TARANIS(board)) {
addConversion(PULSES_CROSSFIRE, val++);
addConversion(PULSES_MULTIMODULE, val++);
}
}
};
+162 -134
View File
@@ -813,6 +813,16 @@ int OpenTxFirmware::getCapability(const Capability capability)
}
}
QTime OpenTxFirmware::getMaxTimerStart()
{
if (IS_TARANIS(board) || IS_HORUS(board))
return QTime(23, 59, 59);
else if (IS_ARM(board))
return QTime(8, 59, 59);
else
return QTime(0, 59, 59);
}
bool OpenTxFirmware::isTelemetrySourceAvailable(int source)
{
if (IS_TARANIS(board) && (source == TELEMETRY_SOURCE_RSSI_TX))
@@ -855,6 +865,8 @@ int OpenTxFirmware::isAvailable(PulsesProtocol proto, int port)
case PULSES_DSMX:
case PULSES_CROSSFIRE:
return 1;
case PULSES_MULTIMODULE:
return id.contains("multimodule") ? 1 : 0;
default:
return 0;
}
@@ -1097,10 +1109,12 @@ QString OpenTxFirmware::getFirmwareBaseUrl()
QString OpenTxFirmware::getFirmwareUrl()
{
QString url = getFirmwareBaseUrl();
QByteArray data = QUrl::toPercentEncoding(id);
if (IS_ARM(board))
url.append(QString("/getfw.php?fw=%1.bin").arg(id));
url.append(QString("/getfw.php?fw=%1.bin").arg((QString)data));
else
url.append(QString("/getfw.php?fw=%1.hex").arg(id));
url.append(QString("/getfw.php?fw=%1.hex").arg((QString)data));
return url;
}
@@ -1121,7 +1135,6 @@ QString OpenTxFirmware::getStampUrl()
void addOpenTxCommonOptions(OpenTxFirmware * firmware)
{
firmware->addOption("ppmus", QObject::tr("Channel values displayed in us"));
firmware->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
firmware->addOption("nooverridech", QObject::tr("No OverrideCH functions available"));
Option fai_options[] = { { "faichoice", QObject::tr("Possibility to enable FAI MODE (no telemetry) at field") }, { "faimode", QObject::tr("FAI MODE (no telemetry) always enabled") }, { NULL } };
firmware->addOptions(fai_options);
@@ -1136,8 +1149,10 @@ void addOpenTxTaranisOptions(OpenTxFirmware * firmware)
Option usb_options[] = { { "massstorage", QObject::tr("Instead of Joystick emulation, USB connection is Mass Storage (as in the Bootloader)") }, { "cli", QObject::tr("Instead of Joystick emulation, USB connection is Command Line Interface") }, { NULL } };
firmware->addOptions(usb_options);
firmware->addOption("mixersmon", QObject::tr("Adds mixers output view to the CHANNELS MONITOR screen, pressing [ENT] switches between the views"));
firmware->addOption("eu", QObject::tr("Removes D8 and LR12 FrSky protocols that are not legal for use in the EU on radios sold after Jan 1st, 2015"));
firmware->addOption("eu", QObject::tr("Removes D8 FrSky protocol support which is not legal for use in the EU on radios sold after Jan 1st, 2015"));
firmware->addOption("internalppm", QObject::tr("Support for PPM internal module hack"));
firmware->addOption("multimodule", QObject::tr("Support for the DIY-Multiprotocol-TX-Module"));
firmware->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
}
void addOpenTxLcdOptions(OpenTxFirmware * firmware)
@@ -1147,6 +1162,7 @@ void addOpenTxLcdOptions(OpenTxFirmware * firmware)
{ "ST7565R", QObject::tr("ST7565R LCD or compatible") },
{ "ERC12864FSF", QObject::tr("ERC12864FSF LCD") },
{ "ST7920", QObject::tr("ST7920 LCD") },
{ "KS108", QObject::tr("KS108 LCD") },
{ NULL }
};
firmware->addOptions(lcd_options);
@@ -1161,8 +1177,124 @@ void registerOpenTxFirmwares()
Option nav_options[] = { { "rotenc", QObject::tr("Rotary Encoder use in menus navigation") }, { "potscroll", QObject::tr("Pots use in menus navigation") }, { NULL } };
Option dsm2_options[] = { { "DSM2", QObject::tr("Support for DSM2 modules"), 0 }, { "DSM2PPM", QObject::tr("Support for DSM2 modules using ppm instead of true serial"), 0 }, { NULL } };
/* Taranis Plus board */
firmware = new OpenTxFirmware("opentx-x9d+", QObject::tr("FrSky Taranis Plus"), BOARD_TARANIS_PLUS);
addOpenTxTaranisOptions(firmware);
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* Taranis board */
firmware = new OpenTxFirmware("opentx-x9d", QObject::tr("FrSky Taranis"), BOARD_TARANIS);
firmware->addOption("haptic", QObject::tr("Haptic module installed"));
addOpenTxTaranisOptions(firmware);
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* Taranis X9E board */
firmware = new OpenTxFirmware("opentx-x9e", QObject::tr("FrSky Taranis X9E"), BOARD_TARANIS_X9E);
firmware->addOption("shutdownconfirm", QObject::tr("Confirmation before radio shutdown"));
addOpenTxTaranisOptions(firmware);
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* Horus board */
firmware = new OpenTxFirmware("opentx-horus", QObject::tr("FrSky Horus"), BOARD_HORUS);
firmware->addOption("noheli", QObject::tr("Disable HELI menu and cyclic mix support"));
firmware->addOption("nogvars", QObject::tr("Disable Global variables"));
firmware->addOption("lua", QObject::tr("Support for Lua model scripts"));
Option usb_options[] = { { "massstorage", QObject::tr("Instead of Joystick emulation, USB connection is Mass Storage (as in the Bootloader)") }, { "cli", QObject::tr("Instead of Joystick emulation, USB connection is Command Line Interface") }, { NULL } };
firmware->addOptions(usb_options);
firmware->addOption("multimodule", QObject::tr("Support for the DIY-Multiprotocol-TX-Module"));
addOpenTxCommonOptions(firmware);
firmware->addOption("pcbdev", QObject::tr("Use ONLY with first DEV pcb version"));
firmwares.push_back(firmware);
/* 9XR-Pro */
firmware = new OpenTxFirmware("opentx-9xrpro", QObject::tr("Turnigy 9XR-PRO"), BOARD_9XRPRO);
firmware->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support"));
firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
firmware->addOption("nofp", QObject::tr("No flight modes"));
firmware->addOption("nocurves", QObject::tr("Disable curves menus"));
firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
firmware->addOption("symlimits", QObject::tr("Symetrical Limits"));
firmware->addOption("timer3", QObject::tr("Support for a third timer"));
firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation"));
firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control"));
firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control"));
firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
firmware->addOption("battgraph", QObject::tr("Battery graph"));
firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
firmware->addOption("bluetooth", QObject::tr("Bluetooth interface"));
firmware->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* 9XR board with M128 chip */
firmware = new OpenTxFirmware("opentx-9xr128", QObject::tr("Turnigy 9XR with m128 chip"), BOARD_M128);
firmware->addOptions(extr_options);
firmware->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support"));
firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
firmware->addOption("nosplash", QObject::tr("No splash screen"));
firmware->addOption("nofp", QObject::tr("No flight modes"));
firmware->addOption("nocurves", QObject::tr("Disable curves menus"));
firmware->addOption("audio", QObject::tr("Support for radio modified with regular speaker"));
firmware->addOption("voice", QObject::tr("Used if you have modified your radio with voice mode"));
firmware->addOption("haptic", QObject::tr("Used if you have modified your radio with haptic mode"));
// NOT TESTED firmware->addOption("PXX", QObject::tr("Support of FrSky PXX protocol"));
firmware->addOption("DSM2", QObject::tr("Support for DSM2 modules"));
firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
firmware->addOption("symlimits", QObject::tr("Symetrical Limits"));
firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation"));
firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control"));
firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control"));
firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
firmware->addOption("battgraph", QObject::tr("Battery graph"));
firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
firmware->addOption("thrtrace", QObject::tr("Enable the throttle trace in Statistics"));
firmware->addOption("pgbar", QObject::tr("EEprom write Progress bar"));
firmware->addOption("imperial", QObject::tr("Imperial units"));
firmware->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* 9XR board */
firmware = new OpenTxFirmware("opentx-9xr", QObject::tr("Turnigy 9XR"), BOARD_STOCK);
firmware->addOptions(extr_options);
firmware->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support"));
firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
firmware->addOption("nosplash", QObject::tr("No splash screen"));
firmware->addOption("nofp", QObject::tr("No flight modes"));
firmware->addOption("nocurves", QObject::tr("Disable curves menus"));
firmware->addOption("audio", QObject::tr("Support for radio modified with regular speaker"));
firmware->addOption("voice", QObject::tr("Used if you have modified your radio with voice mode"));
firmware->addOption("haptic", QObject::tr("Used if you have modified your radio with haptic mode"));
// NOT TESTED firmware->addOption("PXX", QObject::tr("Support of FrSky PXX protocol"));
firmware->addOption("DSM2", QObject::tr("Support for DSM2 modules"));
firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
firmware->addOption("symlimits", QObject::tr("Symetrical Limits"));
firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation"));
firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control"));
firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control"));
firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
firmware->addOption("battgraph", QObject::tr("Battery graph"));
firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
firmware->addOption("thrtrace", QObject::tr("Enable the throttle trace in Statistics"));
firmware->addOption("pgbar", QObject::tr("EEprom write Progress bar"));
firmware->addOption("imperial", QObject::tr("Imperial units"));
firmware->addOption("nowshh", QObject::tr("No Winged Shadow How High support"));
firmware->addOption("novario", QObject::tr("No vario support"));
firmware->addOption("nogps", QObject::tr("No GPS support"));
firmware->addOption("nogauges", QObject::tr("No gauges in the custom telemetry screen"));
firmware->addOption("stickrev", QObject::tr("Add support for reversing stick inputs (e.g. needed for FrSky gimbals)"));
firmware->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* 9x board */
firmware = new OpenTxFirmware("opentx-9x", QObject::tr("9X board"), BOARD_STOCK);
firmware = new OpenTxFirmware("opentx-9x", QObject::tr("9X with stock board"), BOARD_STOCK);
firmware->addOptions(ext_options);
firmware->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support"));
firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
@@ -1194,11 +1326,12 @@ void registerOpenTxFirmwares()
firmware->addOption("nogauges", QObject::tr("No gauges in the custom telemetry screen"));
firmware->addOption("fasoffset", QObject::tr("Allow compensating for offset errors in FrSky FAS current sensors"));
firmware->addOption("stickrev", QObject::tr("Add support for reversing stick inputs (e.g. needed for FrSky gimbals)"));
firmware->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* 9x board with M128 chip */
firmware = new OpenTxFirmware("opentx-9x128", QObject::tr("M128 / 9X board"), BOARD_M128);
firmware = new OpenTxFirmware("opentx-9x128", QObject::tr("9X with stock board and m128 chip"), BOARD_M128);
firmware->addOptions(ext_options);
firmware->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support"));
firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
@@ -1224,72 +1357,58 @@ void registerOpenTxFirmwares()
firmware->addOption("thrtrace", QObject::tr("Enable the throttle trace in Statistics"));
firmware->addOption("pgbar", QObject::tr("EEprom write Progress bar"));
firmware->addOption("imperial", QObject::tr("Imperial units"));
firmware->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* 9XR board */
firmware = new OpenTxFirmware("opentx-9xr", QObject::tr("9XR"), BOARD_STOCK);
firmware->addOptions(extr_options);
firmware->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support"));
/* ar9x board */
firmware = new OpenTxFirmware("opentx-ar9x", QObject::tr("9X with AR9X board"), BOARD_AR9X);
firmware->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support"));
firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
firmware->addOption("nosplash", QObject::tr("No splash screen"));
firmware->addOption("nofp", QObject::tr("No flight modes"));
firmware->addOption("nocurves", QObject::tr("Disable curves menus"));
firmware->addOption("audio", QObject::tr("Support for radio modified with regular speaker"));
firmware->addOption("voice", QObject::tr("Used if you have modified your radio with voice mode"));
firmware->addOption("haptic", QObject::tr("Used if you have modified your radio with haptic mode"));
// NOT TESTED firmware->addOption("PXX", QObject::tr("Support of FrSky PXX protocol"));
firmware->addOption("DSM2", QObject::tr("Support for DSM2 modules"));
firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
firmware->addOption("symlimits", QObject::tr("Symetrical Limits"));
firmware->addOption("timer3", QObject::tr("Support for a third timer"));
firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation"));
firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control"));
firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control"));
firmware->addOption("dblkeys", QObject::tr("Enable resetting values by pressing up and down at the same time"));
firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
firmware->addOption("battgraph", QObject::tr("Battery graph"));
firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
firmware->addOption("thrtrace", QObject::tr("Enable the throttle trace in Statistics"));
firmware->addOption("pgbar", QObject::tr("EEprom write Progress bar"));
firmware->addOption("imperial", QObject::tr("Imperial units"));
firmware->addOption("nowshh", QObject::tr("No Winged Shadow How High support"));
firmware->addOption("novario", QObject::tr("No vario support"));
firmware->addOption("nogps", QObject::tr("No GPS support"));
firmware->addOption("nogauges", QObject::tr("No gauges in the custom telemetry screen"));
firmware->addOption("stickrev", QObject::tr("Add support for reversing stick inputs (e.g. needed for FrSky gimbals)"));
firmware->addOption("bluetooth", QObject::tr("Bluetooth interface"));
firmware->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
// firmware->addOption("rtc", QObject::tr("Optional RTC added"));
// firmware->addOption("volume", QObject::tr("i2c volume control added"));
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* 9XR board with M128 chip */
firmware = new OpenTxFirmware("opentx-9xr128", QObject::tr("9XR with M128 chip"), BOARD_M128);
firmware->addOptions(extr_options);
firmware->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support"));
/* Sky9x board */
firmware = new OpenTxFirmware("opentx-sky9x", QObject::tr("9X with Sky9x board"), BOARD_SKY9X);
firmware->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support"));
firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
firmware->addOption("nosplash", QObject::tr("No splash screen"));
firmware->addOption("nofp", QObject::tr("No flight modes"));
firmware->addOption("nocurves", QObject::tr("Disable curves menus"));
firmware->addOption("audio", QObject::tr("Support for radio modified with regular speaker"));
firmware->addOption("voice", QObject::tr("Used if you have modified your radio with voice mode"));
firmware->addOption("haptic", QObject::tr("Used if you have modified your radio with haptic mode"));
// NOT TESTED firmware->addOption("PXX", QObject::tr("Support of FrSky PXX protocol"));
firmware->addOption("DSM2", QObject::tr("Support for DSM2 modules"));
firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
firmware->addOption("symlimits", QObject::tr("Symetrical Limits"));
firmware->addOption("timer3", QObject::tr("Support for a third timer"));
firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation"));
firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control"));
firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control"));
firmware->addOption("dblkeys", QObject::tr("Enable resetting values by pressing up and down at the same time"));
firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
firmware->addOption("battgraph", QObject::tr("Battery graph"));
firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
firmware->addOption("thrtrace", QObject::tr("Enable the throttle trace in Statistics"));
firmware->addOption("pgbar", QObject::tr("EEprom write Progress bar"));
firmware->addOption("imperial", QObject::tr("Imperial units"));
firmware->addOption("bluetooth", QObject::tr("Bluetooth interface"));
firmware->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* Gruvin9x board */
firmware = new OpenTxFirmware("opentx-gruvin9x", QObject::tr("Gruvin9x board / 9X"), BOARD_GRUVIN9X);
firmware = new OpenTxFirmware("opentx-gruvin9x", QObject::tr("9X with Gruvin9x board"), BOARD_GRUVIN9X);
firmware->addOption("heli", QObject::tr("Enable heli menu and cyclic mix support"));
firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
firmware->addOption("nofp", QObject::tr("No flight modes"));
@@ -1310,11 +1429,12 @@ void registerOpenTxFirmwares()
firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
firmware->addOption("pgbar", QObject::tr("EEprom write Progress bar"));
firmware->addOption("imperial", QObject::tr("Imperial units"));
firmware->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* MEGA2560 board */
firmware = new OpenTxFirmware("opentx-mega2560", QObject::tr("MEGA2560 board"), BOARD_MEGA2560);
firmware = new OpenTxFirmware("opentx-mega2560", QObject::tr("DIY MEGA2560 radio"), BOARD_MEGA2560);
addOpenTxLcdOptions(firmware);
firmware->addOption("PWR", QObject::tr("Power management by soft-off circuitry"));
firmware->addOptions(ext_options);
@@ -1326,7 +1446,7 @@ void registerOpenTxFirmwares()
firmware->addOption("nocurves", QObject::tr("Disable curves menus"));
firmware->addOption("sdcard", QObject::tr("Support for SD memory card"));
firmware->addOption("audio", QObject::tr("Support for radio modified with regular speaker"));
//firmware->addOption("voice", QObject::tr("Used if you have modified your radio with voice mode"));
firmware->addOption("voice", QObject::tr("Used if you have modified your radio with voice mode"));
firmware->addOption("haptic", QObject::tr("Used if you have modified your radio with haptic mode"));
firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
@@ -1340,103 +1460,11 @@ void registerOpenTxFirmwares()
firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
firmware->addOption("pgbar", QObject::tr("EEprom write Progress bar"));
firmware->addOption("imperial", QObject::tr("Imperial units"));
firmware->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* Sky9x board */
firmware = new OpenTxFirmware("opentx-sky9x", QObject::tr("Sky9x board / 9X"), BOARD_SKY9X);
firmware->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support"));
firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
firmware->addOption("nofp", QObject::tr("No flight modes"));
firmware->addOption("nocurves", QObject::tr("Disable curves menus"));
firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
firmware->addOption("symlimits", QObject::tr("Symetrical Limits"));
firmware->addOption("timer3", QObject::tr("Support for a third timer"));
firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation"));
firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control"));
firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control"));
firmware->addOption("dblkeys", QObject::tr("Enable resetting values by pressing up and down at the same time"));
firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
firmware->addOption("battgraph", QObject::tr("Battery graph"));
firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
firmware->addOption("bluetooth", QObject::tr("Bluetooth interface"));
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* ar9x board */
firmware = new OpenTxFirmware("opentx-ar9x", QObject::tr("ar9x board / 9X"), BOARD_AR9X);
firmware->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support"));
firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
firmware->addOption("nofp", QObject::tr("No flight modes"));
firmware->addOption("nocurves", QObject::tr("Disable curves menus"));
firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
firmware->addOption("symlimits", QObject::tr("Symetrical Limits"));
firmware->addOption("timer3", QObject::tr("Support for a third timer"));
firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation"));
firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control"));
firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control"));
firmware->addOption("dblkeys", QObject::tr("Enable resetting values by pressing up and down at the same time"));
firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
firmware->addOption("battgraph", QObject::tr("Battery graph"));
firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
firmware->addOption("bluetooth", QObject::tr("Bluetooth interface"));
// firmware->addOption("rtc", QObject::tr("Optional RTC added"));
// firmware->addOption("volume", QObject::tr("i2c volume control added"));
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* 9XR-Pro */
firmware = new OpenTxFirmware("opentx-9xrpro", QObject::tr("9XR-PRO"), BOARD_9XRPRO);
firmware->addOption("heli", QObject::tr("Enable HELI menu and cyclic mix support"));
firmware->addOption("templates", QObject::tr("Enable TEMPLATES menu"));
firmware->addOption("nofp", QObject::tr("No flight modes"));
firmware->addOption("nocurves", QObject::tr("Disable curves menus"));
firmware->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
firmware->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
firmware->addOption("symlimits", QObject::tr("Symetrical Limits"));
firmware->addOption("timer3", QObject::tr("Support for a third timer"));
firmware->addOption("potscroll", QObject::tr("Pots use in menus navigation"));
firmware->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control"));
firmware->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control"));
firmware->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
firmware->addOption("battgraph", QObject::tr("Battery graph"));
firmware->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
firmware->addOption("bluetooth", QObject::tr("Bluetooth interface"));
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* Taranis board */
firmware = new OpenTxFirmware("opentx-taranis", QObject::tr("FrSky Taranis"), BOARD_TARANIS);
firmware->addOption("haptic", QObject::tr("Haptic module installed"));
addOpenTxTaranisOptions(firmware);
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* Taranis Plus board */
firmware = new OpenTxFirmware("opentx-taranisplus", QObject::tr("FrSky Taranis Plus"), BOARD_TARANIS_PLUS);
addOpenTxTaranisOptions(firmware);
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* Taranis X9E board */
firmware = new OpenTxFirmware("opentx-taranisx9e", QObject::tr("FrSky Taranis X9E"), BOARD_TARANIS_X9E);
firmware->addOption("shutdownconfirm", QObject::tr("Confirmation before radio shutdown"));
firmware->addOption("horussticks", QObject::tr("Horus magnetic sticks"));
addOpenTxTaranisOptions(firmware);
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
/* Horus board */
firmware = new OpenTxFirmware("opentx-horus", QObject::tr("FrSky Horus"), BOARD_HORUS);
firmware->addOption("noheli", QObject::tr("Disable HELI menu and cyclic mix support"));
firmware->addOption("nogvars", QObject::tr("Disable Global variables"));
firmware->addOption("lua", QObject::tr("Support for Lua model scripts"));
addOpenTxCommonOptions(firmware);
firmwares.push_back(firmware);
default_firmware_variant = GetFirmware("opentx-taranisplus-en");
default_firmware_variant = GetFirmware("opentx-x9d+");
current_firmware_variant = default_firmware_variant;
}
@@ -118,6 +118,8 @@ class OpenTxFirmware: public Firmware {
virtual QString getFirmwareUrl();
virtual int getCapability(const Capability);
virtual QTime getMaxTimerStart();
virtual bool isTelemetrySourceAvailable(int source);
@@ -24,9 +24,10 @@
#undef min
#undef max
#define NUM_POTS 3
#define NUM_CSW 12
#define SWSRC_SW1 10
#define NUM_POTS 3
#define NUM_SLIDERS 0
#define NUM_CSW 12
#define SWSRC_SW1 10
#include <exception>
#include <algorithm>
@@ -156,7 +157,7 @@ void simuSetKey(uint8_t key, bool state)
}
}
#define isBacklightEnable() (PORTB & (1<<OUT_B_LIGHT))
#define isBacklightEnabled() (PORTB & (1<<OUT_B_LIGHT))
}
+1 -1
View File
@@ -273,7 +273,7 @@ t_Th9xModelData::operator ModelData ()
c9x.moduleData[0].channelsCount = 8 + 2 * ppmNCH;
c9x.thrTrim = thrTrim;
c9x.trimInc = trimInc;
c9x.moduleData[0].ppmDelay = 300 + 50 * ppmDelay;
c9x.moduleData[0].ppm.delay = 300 + 50 * ppmDelay;
c9x.customFn[0].func = FuncTrims2Offsets;
if (trimSw) {
c9x.customFn[0].swtch = trimSw;
+3 -2
View File
@@ -37,7 +37,7 @@ fwName(g.profile[g.id()].fwName())
ui->useProfileSplash->setDisabled(true);
}
if (IS_TARANIS(GetEepromInterface()->getBoard())) {
if (IS_STM32(GetEepromInterface()->getBoard())) {
// No backup on Taranis ... could be done if in massstorage
ui->backupEEprom->hide();
ui->backupEEprom->setCheckState(Qt::Unchecked);
@@ -124,7 +124,7 @@ void FlashFirmwareDialog::on_firmwareLoad_clicked()
QString fileName = QFileDialog::getOpenFileName(this, tr("Open Firmware File"), g.flashDir(), FLASH_FILES_FILTER);
if (!fileName.isEmpty()) {
fwName = fileName;
if (!fwName.isEmpty() && !FirmwareInterface(fwName).isValid()) {
if (!fwName.isEmpty() && !fwName.endsWith(".dfu") && !FirmwareInterface(fwName).isValid()) {
QMessageBox::warning(this, tr("Warning"), tr("%1 may not be a valid firmware file").arg(fwName));
}
updateUI();
@@ -203,6 +203,7 @@ void FlashFirmwareDialog::on_useLibrarySplash_clicked()
void FlashFirmwareDialog::on_burnButton_clicked()
{
g.flashDir(QFileInfo(fwName).dir().absolutePath());
g.profile[g.id()].fwName(fwName);
g.checkHardwareCompatibility(ui->checkHardwareCompatibility->isChecked());
g.backupOnFlash(ui->backupEEprom->isChecked());
+2 -1
View File
@@ -8,9 +8,10 @@
#define HEX_FILES_FILTER "HEX files (*.hex);;"
#define BIN_FILES_FILTER "BIN files (*.bin);;"
#define DFU_FILES_FILTER "DFU files (*.dfu);;"
#define EEPE_FILES_FILTER "EEPE EEPROM files (*.eepe);;"
#define EEPROM_FILES_FILTER "EEPE files (*.eepe *.bin *.hex);;" EEPE_FILES_FILTER BIN_FILES_FILTER HEX_FILES_FILTER
#define FLASH_FILES_FILTER "FLASH files (*.bin *.hex);;" BIN_FILES_FILTER HEX_FILES_FILTER
#define FLASH_FILES_FILTER "FLASH files (*.bin *.hex *.dfu);;" BIN_FILES_FILTER HEX_FILES_FILTER DFU_FILES_FILTER
#define EXTERNAL_EEPROM_FILES_FILTER "EEPROM files (*.bin *.hex);;" BIN_FILES_FILTER HEX_FILES_FILTER
#define ER9X_EEPROM_FILE_TYPE "ER9X_EEPROM_FILE"
#define EEPE_EEPROM_FILE_HEADER "EEPE EEPROM FILE"
+23 -37
View File
@@ -108,22 +108,18 @@ void GeneralEdit::on_calretrieve_PB_clicked()
for (int i=0; i<(NUM_STICKS+potsnum); i++) {
Byte=calib.mid(i*12,4);
byte16=(int16_t)Byte.toInt(&ok,16);
if (ok)
generalSettings.calibMid[i]=byte16;
if (ok) generalSettings.calibMid[i]=byte16;
Byte=calib.mid(4+i*12,4);
byte16=(int16_t)Byte.toInt(&ok,16);
if (ok)
generalSettings.calibSpanNeg[i]=byte16;
if (ok) generalSettings.calibSpanNeg[i]=byte16;
Byte=calib.mid(8+i*12,4);
byte16=(int16_t)Byte.toInt(&ok,16);
if (ok)
generalSettings.calibSpanPos[i]=byte16;
if (ok) generalSettings.calibSpanPos[i]=byte16;
}
for (int i=0; i<4; i++) {
Byte=trainercalib.mid(i*4,4);
byte16=(int16_t)Byte.toInt(&ok,16);
if (ok)
generalSettings.trainer.calib[i]=byte16;
if (ok) generalSettings.trainer.calib[i]=byte16;
}
generalSettings.txCurrentCalibration=txCurrentCalibration;
generalSettings.txVoltageCalibration=txVoltageCalibration;
@@ -150,27 +146,30 @@ void GeneralEdit::on_calretrieve_PB_clicked()
Byte=hwtypes.mid(i,1);
byte16=(int16_t)Byte.toInt(&ok,16);
qba=controlNames.mid(3*(i+NUM_STICKS),3).toLatin1();
if (ok)
if (ok) {
generalSettings.switchConfig[i]=byte16;
strcpy(generalSettings.switchName[i], qba.data());
}
}
offset = GetCurrentFirmware()->getCapability(Switches);
for (int i=0; i<(GetCurrentFirmware()->getCapability(Pots)); i++) {
Byte=hwtypes.mid(i+offset,1);
byte16=(int16_t)Byte.toInt(&ok,16);
qba=controlNames.mid(3*(i+NUM_STICKS+offset),3).toLatin1();
if (ok)
if (ok) {
generalSettings.potConfig[i]=byte16;
strcpy(generalSettings.potName[i], qba.data());
}
}
offset += GetCurrentFirmware()->getCapability(Pots);
for (int i=0; i<(GetCurrentFirmware()->getCapability(Sliders)); i++) {
Byte=hwtypes.mid(i+offset,1);
byte16=(int16_t)Byte.toInt(&ok,16);
qba=controlNames.mid(3*(i+NUM_STICKS+offset),3).toLatin1();
if (ok)
if (ok) {
generalSettings.sliderConfig[i]=byte16;
strcpy(generalSettings.sliderName[i], qba.data());
}
}
} else {
QMessageBox::critical(this, tr("Warning"), tr("Wrong data in profile, Switch/pot config not retrieved"));
@@ -182,45 +181,32 @@ void GeneralEdit::on_calretrieve_PB_clicked()
QString chars;
bool ok;
byte8=(int8_t)DisplaySet.mid(0,2).toInt(&ok,16);
if (ok)
generalSettings.optrexDisplay=(byte8==1 ? true : false);
if (ok) generalSettings.optrexDisplay=(byte8==1 ? true : false);
byte8u=(uint8_t)DisplaySet.mid(2,2).toUInt(&ok,16);
if (ok)
generalSettings.contrast=byte8u;
if (ok) generalSettings.contrast=byte8u;
byte8u=(uint8_t)DisplaySet.mid(4,2).toUInt(&ok,16);
if (ok)
generalSettings.backlightBright=byte8u;
if (ok) generalSettings.backlightBright=byte8u;
byte8=(int8_t)BeeperSet.mid(0,2).toUInt(&ok,16);
if (ok)
generalSettings.beeperMode = (GeneralSettings::BeeperMode)byte8;
if (ok) generalSettings.beeperMode = (GeneralSettings::BeeperMode)byte8;
byte8=(int8_t)BeeperSet.mid(2,2).toInt(&ok,16);
if (ok)
generalSettings.beeperLength=byte8;
if (ok) generalSettings.beeperLength=byte8;
byte8=(int8_t)HapticSet.mid(0,2).toUInt(&ok,16);
if (ok)
generalSettings.hapticMode=(GeneralSettings::BeeperMode)byte8;
if (ok) generalSettings.hapticMode=(GeneralSettings::BeeperMode)byte8;
byte8=(int8_t)HapticSet.mid(2,2).toInt(&ok,16);
if (ok)
generalSettings.hapticStrength=byte8;
if (ok) generalSettings.hapticStrength=byte8;
byte8=(int8_t)HapticSet.mid(4,2).toInt(&ok,16);
if (ok)
generalSettings.hapticLength=byte8;
if (ok) generalSettings.hapticLength=byte8;
byte8u=(uint8_t)SpeakerSet.mid(0,2).toUInt(&ok,16);
if (ok)
generalSettings.speakerMode=byte8u;
if (ok) generalSettings.speakerMode=byte8u;
byte8u=(uint8_t)SpeakerSet.mid(2,2).toUInt(&ok,16);
if (ok)
generalSettings.speakerPitch=byte8u;
if (ok) generalSettings.speakerPitch=byte8u;
byte8u=(uint8_t)SpeakerSet.mid(4,2).toUInt(&ok,16);
if (ok)
generalSettings.speakerVolume=byte8u;
if (ok) generalSettings.speakerVolume=byte8u;
if (CountrySet.length()==6) {
byte8u=(uint8_t)CountrySet.mid(0,2).toUInt(&ok,16);
if (ok)
generalSettings.countryCode=byte8u;
if (ok) generalSettings.countryCode=byte8u;
byte8u=(uint8_t)CountrySet.mid(2,2).toUInt(&ok,16);
if (ok)
generalSettings.imperial=byte8u;
if (ok) generalSettings.imperial=byte8u;
chars=CountrySet.mid(4,2);
generalSettings.ttsLanguage[0]=chars[0].toLatin1();
generalSettings.ttsLanguage[1]=chars[1].toLatin1();
+22 -14
View File
@@ -103,7 +103,7 @@ void populatePhasesCB(QComboBox *b, int value)
b->setCurrentIndex(value + GetCurrentFirmware()->getCapability(FlightModes));
}
GVarGroup::GVarGroup(QCheckBox *weightGV, QAbstractSpinBox *weightSB, QComboBox *weightCB, int & weight, const int deflt, const int mini, const int maxi, const double step, bool allowGvars):
GVarGroup::GVarGroup(QCheckBox * weightGV, QAbstractSpinBox * weightSB, QComboBox * weightCB, int & weight, const ModelData & model, const int deflt, const int mini, const int maxi, const double step, bool allowGvars):
QObject(),
weightGV(weightGV),
weightSB(weightSB),
@@ -115,7 +115,7 @@ GVarGroup::GVarGroup(QCheckBox *weightGV, QAbstractSpinBox *weightSB, QComboBox
lock(true)
{
if (allowGvars && GetCurrentFirmware()->getCapability(Gvars)) {
populateGVCB(weightCB, weight);
populateGVCB(*weightCB, weight, model);
connect(weightGV, SIGNAL(stateChanged(int)), this, SLOT(gvarCBChanged(int)));
connect(weightCB, SIGNAL(currentIndexChanged(int)), this, SLOT(valuesChanged()));
}
@@ -179,13 +179,14 @@ void GVarGroup::valuesChanged()
}
}
CurveGroup::CurveGroup(QComboBox *curveTypeCB, QCheckBox *curveGVarCB, QComboBox *curveValueCB, QSpinBox *curveValueSB, CurveReference & curve, unsigned int flags):
CurveGroup::CurveGroup(QComboBox * curveTypeCB, QCheckBox * curveGVarCB, QComboBox * curveValueCB, QSpinBox * curveValueSB, CurveReference & curve, const ModelData & model, unsigned int flags):
QObject(),
curveTypeCB(curveTypeCB),
curveGVarCB(curveGVarCB),
curveValueCB(curveValueCB),
curveValueSB(curveValueSB),
curve(curve),
model(model),
flags(flags),
lock(false),
lastType(-1)
@@ -219,7 +220,7 @@ void CurveGroup::update()
curveGVarCB->setChecked(true);
if (lastType != CurveReference::CURVE_REF_DIFF && lastType != CurveReference::CURVE_REF_EXPO) {
lastType = curve.type;
populateGVCB(curveValueCB, curve.value);
populateGVCB(*curveValueCB, curve.value, model);
}
curveValueCB->show();
curveValueSB->hide();
@@ -276,6 +277,7 @@ void CurveGroup::gvarCBChanged(int state)
if (!lock) {
if (state) {
curve.value = 10000+1; // TODO constant in EEpromInterface ...
lastType = -1; // quickfix for issue #3518: force refresh of curveValueCB at next update() to set current index to GV1
}
else {
curve.value = 0; // TODO could be better
@@ -478,33 +480,39 @@ void populateSwitchCB(QComboBox *b, const RawSwitch & value, const GeneralSettin
b->setMaxVisibleItems(10);
}
void populateGVCB(QComboBox *b, int value)
void populateGVCB(QComboBox & b, int value, const ModelData & model)
{
bool selected = false;
b->clear();
b.clear();
int pgvars = GetCurrentFirmware()->getCapability(Gvars);
for (int i=-pgvars; i<=-1; i++) {
int count = GetCurrentFirmware()->getCapability(Gvars);
for (int i=-count; i<=-1; i++) {
int16_t gval = (int16_t)(-10000+i);
b->addItem(QObject::tr("-GV%1").arg(-i), gval);
if (strlen(model.gvars_names[-i-1]) > 0)
b.addItem(QObject::tr("-GV%1 (%2)").arg(-i).arg(model.gvars_names[-i-1]), gval);
else
b.addItem(QObject::tr("-GV%1").arg(-i), gval);
if (value == gval) {
b->setCurrentIndex(b->count()-1);
b.setCurrentIndex(b.count()-1);
selected = true;
}
}
for (int i=1; i<=pgvars; i++) {
for (int i=1; i<=count; i++) {
int16_t gval = (int16_t)(10000+i);
b->addItem(QObject::tr("GV%1").arg(i), gval);
if (strlen(model.gvars_names[i-1]) > 0)
b.addItem(QObject::tr("GV%1 (%2)").arg(i).arg(model.gvars_names[i-1]), gval);
else
b.addItem(QObject::tr("GV%1").arg(i), gval);
if (value == gval) {
b->setCurrentIndex(b->count()-1);
b.setCurrentIndex(b.count()-1);
selected = true;
}
}
if (!selected) {
b->setCurrentIndex(pgvars);
b.setCurrentIndex(count);
}
}
+4 -4
View File
@@ -46,7 +46,7 @@ class GVarGroup: public QObject {
Q_OBJECT
public:
GVarGroup(QCheckBox *weightGV, QAbstractSpinBox *weightSB, QComboBox *weightCB, int & weight, const int deflt, const int mini, const int maxi, const double step=1.0, bool allowGVars=true);
GVarGroup(QCheckBox * weightGV, QAbstractSpinBox * weightSB, QComboBox * weightCB, int & weight, const ModelData & model, const int deflt, const int mini, const int maxi, const double step=1.0, bool allowGVars=true);
protected slots:
void gvarCBChanged(int);
@@ -72,7 +72,7 @@ class CurveGroup : public QObject {
Q_OBJECT
public:
CurveGroup(QComboBox *curveTypeCB, QCheckBox *curveGVarCB, QComboBox *curveValueCB, QSpinBox *curveValueSB, CurveReference & curve, unsigned int flags=0);
CurveGroup(QComboBox *curveTypeCB, QCheckBox *curveGVarCB, QComboBox *curveValueCB, QSpinBox *curveValueSB, CurveReference & curve, const ModelData & model, unsigned int flags=0);
void update();
protected slots:
@@ -86,6 +86,7 @@ class CurveGroup : public QObject {
QComboBox *curveValueCB;
QSpinBox *curveValueSB;
CurveReference & curve;
const ModelData & model;
unsigned int flags;
bool lock;
int lastType;
@@ -118,8 +119,7 @@ void populateGvarUseCB(QComboBox *b, unsigned int phase);
#define GVARS_VARIANT 0x0001
#define FRSKY_VARIANT 0x0002
// void populateGVarCB(QComboBox *b, int value, int min, int max,int pgvars=5); //TODO: Clean Up
void populateGVCB(QComboBox *b, int value);
void populateGVCB(QComboBox & b, int value, const ModelData & model);
void populateSourceCB(QComboBox *b, const RawSource &source, const GeneralSettings generalSettings, const ModelData * model, unsigned int flags);
QString image2qstring(QImage image);
int findmult(float value, float base);
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 866 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 960 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

+164 -4
View File
@@ -1,3 +1,4 @@
#include <math.h>
#include "logsdialog.h"
#include "appdata.h"
#include "ui_logsdialog.h"
@@ -10,7 +11,11 @@
LogsDialog::LogsDialog(QWidget *parent) :
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
ui(new Ui::LogsDialog)
ui(new Ui::LogsDialog),
tracerMaxAlt(0),
cursorA(0),
cursorB(0),
cursorLine(0)
{
csvlog.clear();
@@ -78,7 +83,7 @@ LogsDialog::LogsDialog(QWidget *parent) :
// connect slot that ties some axis selections together (especially opposite axes):
connect(ui->customPlot, SIGNAL(selectionChangedByUser()), this, SLOT(selectionChanged()));
// connect slots that takes care that when an axis is selected, only that direction can be dragged and zoomed:
connect(ui->customPlot, SIGNAL(mousePress(QMouseEvent*)), this, SLOT(mousePress()));
connect(ui->customPlot, SIGNAL(mousePress(QMouseEvent*)), this, SLOT(mousePress(QMouseEvent*)));
connect(ui->customPlot, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(mouseWheel()));
// make left axes transfer its range to right axes:
@@ -419,7 +424,7 @@ void LogsDialog::on_mapsButton_clicked()
ui->logTable->setDisabled(false);
}
void LogsDialog::mousePress()
void LogsDialog::mousePress(QMouseEvent * event)
{
// if an axis is selected, only allow the direction of that axis to be dragged
// if no axis is selected, both directions may be dragged
@@ -430,6 +435,74 @@ void LogsDialog::mousePress()
axisRect->setRangeDrag(axisRect->axis(QCPAxis::atLeft)->orientation());
else
axisRect->setRangeDrag(Qt::Horizontal | Qt::Vertical);
if (event->button() == Qt::RightButton) {
double x = axisRect->axis(QCPAxis::atBottom)->pixelToCoord(event->pos().x());
placeCursor(x, event->modifiers() & Qt::ShiftModifier);
}
}
void LogsDialog::placeCursor(double x, bool second)
{
QCPItemTracer * cursor = second ? cursorB : cursorA;
if (cursor) {
cursor->setGraphKey(x);
cursor->updatePosition();
cursor->setVisible(true);
}
if (cursorA && cursorB) {
updateCursorsLabel();
}
}
void LogsDialog::updateCursorsLabel()
{
QString text = QString("Max Altitude: %1 m\n").arg(tracerMaxAlt->position->value(), 0, 'f', 1);
if (cursorA->visible() ) {
text += tr("Cursor A: %1 m").arg(cursorA->position->value(), 0, 'f', 1) + "\n";
}
if (cursorB->visible() ) {
text += tr("Cursor B: %1 m").arg(cursorB->position->value(), 0, 'f', 1) + "\n";
}
if (cursorA->visible() && cursorB->visible()) {
cursorLine->setVisible(true);
// calc deltas
double deltaX = cursorB->position->key() - cursorA->position->key();
double deltaY = cursorB->position->value() - cursorA->position->value();
double slope = 0;
if (deltaX != 0) {
slope = deltaY / deltaX;
}
qDebug() << "Cursors: dt:" << formatTimeDelta(deltaX) << "dy:" << deltaY << "rate:" << slope;
text += tr("Time delta: %1").arg(formatTimeDelta(deltaX)) + "\n";
text += tr("Climb rate: %1 m/s").arg(slope, 0, 'f', fabs(slope)<1.0 ? 2 : 1) + "\n";
}
ui->labelCursors->setText(text);
}
QString LogsDialog::formatTimeDelta(double timeDelta)
{
if (abs(timeDelta) < 10) {
return QString("%1 s").arg(timeDelta, 1, 'f', 1);
}
int seconds = (int)round(abs(timeDelta));
int hours = seconds / 3600;
seconds %= 3600;
int minutes = seconds / 60;
seconds %= 60;
if (hours) {
return QString("%1h:%2:%3").arg(hours).arg(minutes, 2, 10, QChar('0')).arg(seconds, 2, 10, QChar('0'));
}
else if (minutes) {
return QString("%1m:%2").arg(minutes).arg(seconds, 2, 10, QChar('0'));
}
else {
return QString("%1 s").arg(seconds);
}
}
void LogsDialog::mouseWheel()
@@ -453,6 +526,7 @@ void LogsDialog::mouseWheel()
void LogsDialog::removeAllGraphs()
{
ui->customPlot->clearGraphs();
ui->customPlot->clearItems();
ui->customPlot->legend->setVisible(false);
rightLegend->clearItems();
rightLegend->setVisible(false);
@@ -466,6 +540,11 @@ void LogsDialog::removeAllGraphs()
axisRect->axis(QCPAxis::atRight, 1)->setSelectedParts(QCPAxis::spNone);
axisRect->axis(QCPAxis::atBottom)->setSelectedParts(QCPAxis::spNone);
ui->customPlot->replot();
tracerMaxAlt = 0;
cursorA = 0;
cursorB = 0;
cursorLine = 0;
ui->labelCursors->setText("");
}
void LogsDialog::on_fileOpen_BT_clicked()
@@ -608,7 +687,7 @@ void LogsDialog::setFlightSessions()
QDateTime lastvalue;
for (int i = 1; i < n; i++) {
QDateTime tmp = getRecordTimeStamp(i);
if (lastvalue.secsTo(tmp) > 60) {
if (!lastvalue.isValid() || lastvalue.secsTo(tmp) > 60) {
sessions.push_back(i-1);
// qDebug() << "session index" << i-1;
}
@@ -904,6 +983,17 @@ void LogsDialog::plotLogs()
plots.coords.at(i).y);
pen.setColor(colors.at(i % colors.size()));
ui->customPlot->graph(i)->setPen(pen);
if (!tracerMaxAlt && (plots.coords.at(i).name.endsWith("(m)") ||
plots.coords.at(i).name.endsWith(" Alt") ||
plots.coords.at(i).name.endsWith("(ft)"))) {
addMaxAltitudeMarker(plots.coords.at(i), ui->customPlot->graph(i));
countNumberOfThrows(plots.coords.at(i), ui->customPlot->graph(i));
addCursor(&cursorA, ui->customPlot->graph(i), Qt::blue);
addCursor(&cursorB, ui->customPlot->graph(i), Qt::red);
addCursorLine(&cursorLine, ui->customPlot->graph(i), Qt::black);
updateCursorsLabel();
}
}
ui->customPlot->legend->setVisible(true);
@@ -951,3 +1041,73 @@ void LogsDialog::yAxisChangeRanges(QCPRange range)
yAxesRanges[firstLeft].max = range.upper;
}
}
void LogsDialog::addMaxAltitudeMarker(const coords & c, QCPGraph * graph) {
// find max altitude
int positionIndex = 0;
double maxAlt = -100000;
for(int i=0; i<c.x.count(); ++i) {
double alt = c.y.at(i);
if (alt > maxAlt) {
maxAlt = alt;
positionIndex = i;
// qDebug() << "max alt: " << maxAlt << "@" << result;
}
}
// qDebug() << "max alt: " << maxAlt << "@" << positionIndex;
// add max altitude marker
tracerMaxAlt = new QCPItemTracer(ui->customPlot);
ui->customPlot->addItem(tracerMaxAlt);
tracerMaxAlt->setGraph(graph);
tracerMaxAlt->setInterpolating(true);
tracerMaxAlt->setStyle(QCPItemTracer::tsSquare);
tracerMaxAlt->setPen(QPen(Qt::blue));
tracerMaxAlt->setBrush(Qt::NoBrush);
tracerMaxAlt->setSize(7);
tracerMaxAlt->setGraphKey(c.x.at(positionIndex));
tracerMaxAlt->updatePosition();
}
void LogsDialog::countNumberOfThrows(const coords & c, QCPGraph * graph)
{
#if 0
// find all launches
// TODO
double startTime = c.x.at(0);
for(int i=0; i<c.x.count(); ++i) {
double alt = c.y.at(i);
double time = c.x.at(i);
}
#endif
}
void LogsDialog::addCursor(QCPItemTracer ** cursor, QCPGraph * graph, const QColor & color) {
QCPItemTracer * c = new QCPItemTracer(ui->customPlot);
ui->customPlot->addItem(c);
c->setGraph(graph);
c->setInterpolating(false);
c->setStyle(QCPItemTracer::tsCrosshair);
QPen pen(color);
pen.setStyle(Qt::DashLine);
c->setPen(pen);
c->setBrush(color);
c->setSize(7);
c->setVisible(false);
*cursor = c;
}
void LogsDialog::addCursorLine(QCPItemStraightLine ** line, QCPGraph * graph, const QColor & color) {
QCPItemStraightLine * l = new QCPItemStraightLine(ui->customPlot);
ui->customPlot->addItem(l);
l->point1->setParentAnchor(cursorA->position);
l->point2->setParentAnchor(cursorB->position);
QPen pen(color);
pen.setStyle(Qt::DashLine);
l->setPen(pen);
l->setVisible(false);
*line = l;
}
+15 -1
View File
@@ -53,7 +53,7 @@ private slots:
void axisLabelDoubleClick(QCPAxis* axis, QCPAxis::SelectablePart part);
void legendDoubleClick(QCPLegend* legend, QCPAbstractLegendItem* item);
void selectionChanged();
void mousePress();
void mousePress(QMouseEvent * event);
void mouseWheel();
void removeAllGraphs();
void plotLogs();
@@ -76,6 +76,11 @@ private:
double yAxesRatios[AXES_LIMIT];
minMax yAxesRanges[AXES_LIMIT];
QCPItemTracer * tracerMaxAlt;
QCPItemTracer * cursorA;
QCPItemTracer * cursorB;
QCPItemStraightLine * cursorLine;
bool cvsFileParse();
QList<QStringList> filterGePoints(const QList<QStringList> & input);
void exportToGoogleEarth();
@@ -83,6 +88,15 @@ private:
QString generateDuration(const QDateTime & start, const QDateTime & end);
void setFlightSessions();
void addMaxAltitudeMarker(const coords & c, QCPGraph * graph);
void countNumberOfThrows(const coords & c, QCPGraph * graph);
void addCursor(QCPItemTracer ** cursor, QCPGraph * graph, const QColor & color);
void addCursorLine(QCPItemStraightLine ** line, QCPGraph * graph, const QColor & color);
void placeCursor(double x, bool second);
QString formatTimeDelta(double timeDelta);
void updateCursorsLabel();
};
#endif // _LOGSDIALOG_H_
+159 -129
View File
@@ -16,32 +16,78 @@
<property name="sizeGripEnabled">
<bool>true</bool>
</property>
<layout class="QGridLayout" name="gridLayout" rowstretch="0,1,0,0,0,0,0,0">
<item row="0" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,0,0,0,0,0,0,0,0,0">
<item row="4" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label">
<widget class="QLabel" name="label_2">
<property name="text">
<string>Filename</string>
<string>Fly sessions</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="FileName_LE">
<property name="readOnly">
<bool>true</bool>
<widget class="QComboBox" name="sessions_CB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="fileOpen_BT">
<property name="text">
<string>Open LogFile</string>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="1" column="0" rowspan="12">
<widget class="QTableWidget" name="FieldsTW">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="autoScrollMargin">
<number>0</number>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="showGrid">
<bool>false</bool>
</property>
<property name="sortingEnabled">
<bool>false</bool>
</property>
<property name="columnCount">
<number>0</number>
</property>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
<item row="1" column="1">
<widget class="QFrame" name="frame_2">
<property name="sizePolicy">
@@ -127,121 +173,7 @@
</item>
</layout>
</item>
<item row="3" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Fly sessions</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="sessions_CB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="4" column="1" rowspan="4">
<widget class="QTableWidget" name="logTable">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="showDropIndicator" stdset="0">
<bool>false</bool>
</property>
<property name="dragDropOverwriteMode">
<bool>false</bool>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="textElideMode">
<enum>Qt::ElideNone</enum>
</property>
<property name="rowCount">
<number>0</number>
</property>
<property name="columnCount">
<number>0</number>
</property>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>18</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderStretchLastSection">
<bool>false</bool>
</attribute>
</widget>
</item>
<item row="1" column="0" rowspan="6">
<widget class="QTableWidget" name="FieldsTW">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>120</width>
<height>16777215</height>
</size>
</property>
<property name="autoScrollMargin">
<number>0</number>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="showGrid">
<bool>false</bool>
</property>
<property name="sortingEnabled">
<bool>false</bool>
</property>
<property name="columnCount">
<number>0</number>
</property>
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
</widget>
</item>
<item row="7" column="0">
<item row="13" column="0">
<widget class="QPushButton" name="mapsButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Maximum">
@@ -276,6 +208,106 @@
</property>
</widget>
</item>
<item row="0" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Filename</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="FileName_LE">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="fileOpen_BT">
<property name="text">
<string>Open LogFile</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="6" column="1" rowspan="8">
<layout class="QHBoxLayout" name="horizontalLayout_4" stretch="5,1">
<item>
<widget class="QTableWidget" name="logTable">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="showDropIndicator" stdset="0">
<bool>false</bool>
</property>
<property name="dragDropOverwriteMode">
<bool>false</bool>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="textElideMode">
<enum>Qt::ElideNone</enum>
</property>
<property name="rowCount">
<number>0</number>
</property>
<property name="columnCount">
<number>0</number>
</property>
<attribute name="verticalHeaderVisible">
<bool>false</bool>
</attribute>
<attribute name="verticalHeaderDefaultSectionSize">
<number>18</number>
</attribute>
<attribute name="verticalHeaderHighlightSections">
<bool>true</bool>
</attribute>
<attribute name="verticalHeaderStretchLastSection">
<bool>false</bool>
</attribute>
</widget>
</item>
<item>
<widget class="QLabel" name="labelCursors">
<property name="minimumSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
<property name="frameShape">
<enum>QFrame::Panel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="lineWidth">
<number>1</number>
</property>
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
<property name="wordWrap">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11"/>
@@ -289,14 +321,12 @@
</customwidgets>
<tabstops>
<tabstop>FileName_LE</tabstop>
<tabstop>fileOpen_BT</tabstop>
<tabstop>FieldsTW</tabstop>
<tabstop>mapsButton</tabstop>
<tabstop>ZoomX_ChkB</tabstop>
<tabstop>ZoomY_ChkB</tabstop>
<tabstop>Reset_PB</tabstop>
<tabstop>sessions_CB</tabstop>
<tabstop>logTable</tabstop>
</tabstops>
<resources>
<include location="companion.qrc"/>
+46 -11
View File
@@ -360,16 +360,25 @@ void MainWindow::firmwareDownloadAccepted()
int errnum = hline.mid(6).toInt();
switch(errnum) {
case 1:
errormsg = tr("Not enough memory for all the selected firmware options");
errormsg = tr("Not enough flash available on this board for all the selected options");
break;
case 2:
errormsg = tr("Compilation server termporary failure, try later");
errormsg = tr("Compilation server temporary failure, try later");
break;
case 3:
errormsg = tr("Compilation server too busy, try later");
break;
case 4:
errormsg = tr("Compilation server requires registration, please check OpenTX web site");
errormsg = tr("Compilation error");
break;
case 5:
errormsg = tr("Invalid firmware");
break;
case 6:
errormsg = tr("Invalid board");
break;
case 7:
errormsg = tr("Invalid language");
break;
default:
errormsg = tr("Unknown server failure, try later");
@@ -493,6 +502,7 @@ void MainWindow::checkForFirmwareUpdateFinished(QNetworkReply * reply)
}
}
else if (download == true) {
firmwareVersionString = versionString;
startFirmwareDownload();
}
@@ -910,15 +920,38 @@ void MainWindow::about()
void MainWindow::updateMenus()
{
bool hasMdiChild = (activeMdiChild() != 0);
saveAct->setEnabled(hasMdiChild);
saveAsAct->setEnabled(hasMdiChild);
pasteAct->setEnabled(hasMdiChild ? activeMdiChild()->hasPasteData() : false);
writeEepromAct->setEnabled(hasMdiChild);
separatorAct->setVisible(hasMdiChild);
bool hasSelection = (activeMdiChild() && activeMdiChild()->hasSelection());
cutAct->setEnabled(hasSelection);
copyAct->setEnabled(hasSelection);
if(GetCurrentFirmware()->getBoard() == BOARD_HORUS) {
newAct->setEnabled(false);
openAct->setEnabled(false);
saveAct->setEnabled(false);
saveAsAct->setEnabled(false);
writeEepromAct->setEnabled(false);
readEepromAct->setEnabled(false);
writeBackupToRadioAct->setEnabled(false);
readBackupToFileAct->setEnabled(false);
cutAct->setEnabled(false);
copyAct->setEnabled(false);
pasteAct->setEnabled(false);
for (int i=0; i<MAX_RECENT; ++i)
recentFileActs[i]->setEnabled(false);
} else {
newAct->setEnabled(true);
openAct->setEnabled(true);
saveAct->setEnabled(hasMdiChild);
saveAsAct->setEnabled(hasMdiChild);
cutAct->setEnabled(hasSelection);
copyAct->setEnabled(hasSelection);
pasteAct->setEnabled(hasMdiChild ? activeMdiChild()->hasPasteData() : false);
writeEepromAct->setEnabled(hasMdiChild);
readEepromAct->setEnabled(true);
writeBackupToRadioAct->setEnabled(true);
readBackupToFileAct->setEnabled(true);
for (int i=0; i<MAX_RECENT; ++i)
recentFileActs[i]->setEnabled(true);
}
separatorAct->setVisible(hasMdiChild);
simulateAct->setEnabled(hasSelection);
printAct->setEnabled(hasSelection);
loadbackupAct->setEnabled(hasMdiChild);
@@ -1438,6 +1471,8 @@ void MainWindow::dragEnterEvent(QDragEnterEvent *event)
void MainWindow::dropEvent(QDropEvent *event)
{
if(GetCurrentFirmware()->getBoard()== BOARD_HORUS)
return;
QList<QUrl> urls = event->mimeData()->urls();
if (urls.isEmpty())
return;
+5 -5
View File
@@ -1,7 +1,7 @@
#include "channels.h"
#include "helpers.h"
LimitsGroup::LimitsGroup(Firmware * firmware, TableLayout *tableLayout, int row, int col, int & value, int min, int max, int deflt):
LimitsGroup::LimitsGroup(Firmware * firmware, TableLayout * tableLayout, int row, int col, int & value, const ModelData & model, int min, int max, int deflt):
firmware(firmware),
spinbox(new QDoubleSpinBox()),
value(value),
@@ -44,7 +44,7 @@ LimitsGroup::LimitsGroup(Firmware * firmware, TableLayout *tableLayout, int row,
horizontalLayout->addWidget(cb);
horizontalLayout->addWidget(spinbox);
tableLayout->addLayout(row, col, horizontalLayout);
gvarGroup = new GVarGroup(gv, spinbox, cb, value, deflt, min, max, displayStep, allowGVars);
gvarGroup = new GVarGroup(gv, spinbox, cb, value, model, deflt, min, max, displayStep, allowGVars);
}
LimitsGroup::~LimitsGroup()
@@ -113,13 +113,13 @@ Channels::Channels(QWidget * parent, ModelData & model, GeneralSettings & genera
}
// Channel offset
limitsGroups << new LimitsGroup(firmware, tableLayout, i, col++, model.limitData[i].offset, -1000, 1000, 0);
limitsGroups << new LimitsGroup(firmware, tableLayout, i, col++, model.limitData[i].offset, model, -1000, 1000, 0);
// Channel min
limitsGroups << new LimitsGroup(firmware, tableLayout, i, col++, model.limitData[i].min, -model.getChannelsMax()*10, 0, -1000);
limitsGroups << new LimitsGroup(firmware, tableLayout, i, col++, model.limitData[i].min, model, -model.getChannelsMax()*10, 0, -1000);
// Channel max
limitsGroups << new LimitsGroup(firmware, tableLayout, i, col++, model.limitData[i].max, 0, model.getChannelsMax()*10, 1000);
limitsGroups << new LimitsGroup(firmware, tableLayout, i, col++, model.limitData[i].max, model, 0, model.getChannelsMax()*10, 1000);
// Channel inversion
QComboBox * invCB = new QComboBox(this);
+1 -1
View File
@@ -9,7 +9,7 @@ class GVarGroup;
class LimitsGroup
{
public:
LimitsGroup(Firmware * firmware, TableLayout *tableLayout, int row, int col, int & value, int min, int max, int deflt);
LimitsGroup(Firmware * firmware, TableLayout *tableLayout, int row, int col, int & value, const ModelData & model, int min, int max, int deflt);
~LimitsGroup();
void updateMinMax(int max);
+1 -2
View File
@@ -498,9 +498,8 @@ void Curves::resizeEvent(QResizeEvent *event)
ModelPanel::resizeEvent(event);
}
void Curves::on_curveType_currentIndexChanged()
void Curves::on_curveType_currentIndexChanged(int index)
{
int index = ui->curveType->currentIndex();
unsigned int flags = templates[index].flags;
ui->curveCoeffLabel->setVisible(flags & CURVE_COEFF_ENABLE);
ui->curveCoeff->setVisible(flags & CURVE_COEFF_ENABLE);
+1 -1
View File
@@ -45,7 +45,7 @@ class Curves : public ModelPanel
void onNodeMoved(int x, int y);
void onNodeFocus();
void onNodeUnfocus();
void on_curveType_currentIndexChanged();
void on_curveType_currentIndexChanged(int index);
void on_curveApply_clicked();
protected:
+1 -1
View File
@@ -397,7 +397,7 @@ void CustomFunctionsPanel::refreshCustomFunction(int i, bool modified)
else if (func>=FuncSetTimer1 && func<=FuncSetTimer3) {
if (modified) cfn.param = QTimeS(fswtchParamTime[i]->time()).seconds();
fswtchParamTime[i]->setMinimumTime(QTime(0, 0, 0));
fswtchParamTime[i]->setMaximumTime(QTime(0, 59, 59));
fswtchParamTime[i]->setMaximumTime(firmware->getMaxTimerStart());
fswtchParamTime[i]->setTime(QTimeS(cfn.param));
widgetsMask |= CUSTOM_FUNCTION_TIME_PARAM + CUSTOM_FUNCTION_ENABLE;
}
+4 -4
View File
@@ -21,11 +21,11 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
QRegExp rx(CHAR_FOR_NAMES_REGEX);
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);
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, model, 100, -100, 100);
gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, ed->offset, model, 0, -100, 100);
}
else {
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, 100, 0, 100);
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, ed->weight, model, 100, 0, 100);
gvOffsetGroup = NULL;
ui->offsetLabel->hide();
ui->offsetGV->hide();
@@ -33,7 +33,7 @@ ExpoDialog::ExpoDialog(QWidget *parent, ModelData & model, ExpoData *expoData, G
ui->offsetCB->hide();
}
curveGroup = new CurveGroup(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueCB, ui->curveValueSB, ed->curve,
curveGroup = new CurveGroup(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueCB, ui->curveValueSB, ed->curve, model,
firmware->getCapability(HasInputDiff) ? 0 : (HIDE_DIFF | HIDE_NEGATIVE_CURVES));
populateSwitchCB(ui->switchesCB, ed->swtch, generalSettings, MixesContext);
+49 -19
View File
@@ -107,14 +107,14 @@ FlightModePanel::FlightModePanel(QWidget * parent, ModelData & model, int phaseI
reLayout->addWidget(label, i, 0, 1, 1);
if (phaseIdx > 0) {
// RE link to another RE
QComboBox *link = new QComboBox(ui->gvGB);
link->setProperty("index", i);
populateGvarUseCB(link, phaseIdx);
connect(link, SIGNAL(currentIndexChanged(int)), this, SLOT(phaseREUse_currentIndexChanged(int)));
reUse[i] = new QComboBox(ui->reGB);
reUse[i]->setProperty("index", i);
populateGvarUseCB(reUse[i], phaseIdx);
if (phase.rotaryEncoders[i] > 1024) {
link->setCurrentIndex(phase.rotaryEncoders[i] - 1024);
reUse[i]->setCurrentIndex(phase.rotaryEncoders[i] - 1024);
}
reLayout->addWidget(link, i, 1, 1, 1);
connect(reUse[i], SIGNAL(currentIndexChanged(int)), this, SLOT(phaseREUse_currentIndexChanged(int)));
reLayout->addWidget(reUse[i], i, 1, 1, 1);
}
// RE value
reValues[i] = new QSpinBox(ui->reGB);
@@ -149,14 +149,14 @@ FlightModePanel::FlightModePanel(QWidget * parent, ModelData & model, int phaseI
}
if (phaseIdx > 0) {
// GVar link to another GVar
QComboBox *link = new QComboBox(ui->gvGB);
link->setProperty("index", i);
populateGvarUseCB(link, phaseIdx);
gvUse[i] = new QComboBox(ui->gvGB);
gvUse[i]->setProperty("index", i);
populateGvarUseCB(gvUse[i], phaseIdx);
if (phase.gvars[i] > 1024) {
link->setCurrentIndex(phase.gvars[i] - 1024);
gvUse[i]->setCurrentIndex(phase.gvars[i] - 1024);
}
connect(link, SIGNAL(currentIndexChanged(int)), this, SLOT(phaseGVUse_currentIndexChanged(int)));
gvLayout->addWidget(link, i, col++, 1, 1);
connect(gvUse[i], SIGNAL(currentIndexChanged(int)), this, SLOT(phaseGVUse_currentIndexChanged(int)));
gvLayout->addWidget(gvUse[i], i, col++, 1, 1);
}
// GVar value
gvValues[i] = new QSpinBox(ui->gvGB);
@@ -229,8 +229,9 @@ void FlightModePanel::update()
int idx = phase.rotaryEncoders[i];
FlightModeData *phasere = &phase;
while (idx > 1024) {
idx -= 1025;
phasere = &model->flightModeData[idx];
int nextPhase = idx - 1025;
if (nextPhase >= phaseIdx) nextPhase += 1;
phasere = &model->flightModeData[nextPhase];
idx = phasere->rotaryEncoders[i];
reValues[i]->setDisabled(true);
}
@@ -248,9 +249,11 @@ void FlightModePanel::phaseName_editingFinished()
void FlightModePanel::phaseSwitch_currentIndexChanged(int index)
{
if (!lock) {
QComboBox *comboBox = qobject_cast<QComboBox*>(sender());
phase.swtch = RawSwitch(comboBox->itemData(index).toInt());
emit modified();
}
}
void FlightModePanel::phaseFadeIn_editingFinished()
@@ -287,8 +290,14 @@ void FlightModePanel::trimUpdate(unsigned int trim)
trimsUse[trim]->setCurrentIndex(1 + 2*phase.trimRef[chn] + phase.trimMode[chn] - (phase.trimRef[chn] > phaseIdx ? 1 : 0));
else
trimsUse[trim]->setCurrentIndex(phase.trimRef[chn]);
trimsValue[trim]->setEnabled(true);
trimsSlider[trim]->setEnabled(true);
if (phaseIdx == 0 || phase.trimRef[chn] == phaseIdx || (IS_TARANIS(board) && phase.trimMode[chn] != 0)) {
trimsValue[trim]->setEnabled(true);
trimsSlider[trim]->setEnabled(true);
}
else {
trimsValue[trim]->setEnabled(false);
trimsSlider[trim]->setEnabled(false);
}
}
lock = false;
}
@@ -337,6 +346,7 @@ void FlightModePanel::phaseGVPopupToggled(bool checked)
QCheckBox *cb = qobject_cast<QCheckBox*>(sender());
int gvar = cb->property("index").toInt();
model->gvars_popups[gvar] = checked;
emit modified();
}
void FlightModePanel::phaseREValue_editingFinished()
@@ -439,9 +449,29 @@ void FlightModePanel::fmClear()
{
int res = QMessageBox::question(this, "Companion", tr("Clear all current Flight Mode properties?"), QMessageBox::Yes | QMessageBox::No);
if (res == QMessageBox::Yes) {
phase.clear();
for(int i=0; i < 4; ++i) {
model->setTrimValue(phaseIdx, i, 0);
phase.clear(phaseIdx);
if (phaseIdx == 0) {
if (IS_TARANIS(GetEepromInterface()->getBoard())) {
for (int i=0; i < gvCount; ++i) {
memset(&model->gvars_names[i], 0, sizeof(model->gvars_names[i]));
model->gvars_popups[i] = 0;
}
}
}
else {
lock = true;
QComboBox * pswtch = ui->swtch;
RawSwitch item = RawSwitch(SWITCH_TYPE_NONE);
pswtch->setCurrentIndex(pswtch->findText(item.toString()));
if (gvCount > 0 && (firmware->getCapability(GvarsFlightModes))) {
for (int i=0; i<gvCount; i++) {
gvUse[i]->setCurrentIndex((phase.gvars[i] > 1024 ? (phase.gvars[i] - 1024) : 0));
}
}
for (int i=0; i<reCount; i++) {
reUse[i]->setCurrentIndex((phase.rotaryEncoders[i] > 1024 ? (phase.rotaryEncoders[i] - 1024) : 0));
}
lock = false;
}
update();
emit modified();
+2
View File
@@ -48,7 +48,9 @@ class FlightModePanel : public ModelPanel
QLineEdit * gvNames[C9X_MAX_GVARS];
QSpinBox * gvValues[C9X_MAX_GVARS];
QCheckBox * gvPopups[C9X_MAX_GVARS];
QComboBox * gvUse[C9X_MAX_GVARS];
QSpinBox * reValues[C9X_MAX_ENCODERS];
QComboBox * reUse[C9X_MAX_ENCODERS];
QVector<QComboBox *> trimsUse;
QVector<QSpinBox *> trimsValue;
QVector<QSlider *> trimsSlider;
+3 -3
View File
@@ -25,10 +25,10 @@ MixerDialog::MixerDialog(QWidget *parent, ModelData & model, MixData *mixdata, G
int limit = firmware->getCapability(OffsetWeight);
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, md->weight, 100, -limit, limit);
gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, md->sOffset, 0, -limit, limit);
gvWeightGroup = new GVarGroup(ui->weightGV, ui->weightSB, ui->weightCB, md->weight, model, 100, -limit, limit);
gvOffsetGroup = new GVarGroup(ui->offsetGV, ui->offsetSB, ui->offsetCB, md->sOffset, model, 0, -limit, limit);
curveGroup = new CurveGroup(ui->curveTypeCB, ui->curveGVarCB, ui->curveValueCB, ui->curveValueSB,
md->curve, firmware->getCapability(HasMixerExpo) ? 0 : HIDE_EXPO);
md->curve, model, firmware->getCapability(HasMixerExpo) ? 0 : HIDE_EXPO);
ui->MixDR_CB->setChecked(md->noExpo == 0);
+2 -2
View File
@@ -82,7 +82,7 @@ void Node::stepToCenter(qreal step)
if(centerX)
{
qreal x = qr.right() - qr.width()/2;
if(abs(x-p.x())>xStep)
if(fabs(x-p.x())>xStep)
p.rx() += p.x()>x ? -xStep : xStep;
else
p.rx() = x;
@@ -91,7 +91,7 @@ void Node::stepToCenter(qreal step)
if(centerY)
{
qreal y = qr.bottom() - qr.height()/2;
if(abs(y-p.y())>yStep)
if(fabs(y-p.y())>yStep)
p.ry() += p.y()>y ? -yStep : yStep;
else
p.ry() = y;
+86 -14
View File
@@ -42,6 +42,8 @@ TimerPanel::TimerPanel(QWidget *parent, ModelData & model, TimerData & timer, Ge
ui->countdownBeep->addItem(tr("Voice"), TimerData::COUNTDOWN_VOICE);
ui->countdownBeep->addItem(tr("Haptic"), TimerData::COUNTDOWN_HAPTIC);
}
ui->value->setMaximumTime(firmware->getMaxTimerStart());
ui->persistent->setField(timer.persistent, this);
ui->persistent->addItem(tr("Not persistent"), 0);
@@ -66,9 +68,11 @@ TimerPanel::~TimerPanel()
void TimerPanel::update()
{
int min = timer.val / 60;
int sec = timer.val % 60;
ui->value->setTime(QTime(0, min, sec));
int hour = timer.val / 3600;
int min = (timer.val - (hour * 3600)) / 60;
int sec = (timer.val - (hour * 3600)) % 60;
ui->value->setTime(QTime(hour, min, sec));
if (firmware->getCapability(PermTimers)) {
int sign = 1;
@@ -94,7 +98,7 @@ QWidget * TimerPanel::getLastFocus()
void TimerPanel::on_value_editingFinished()
{
timer.val = ui->value->time().minute()*60 + ui->value->time().second();
timer.val = ui->value->time().hour()*3600 + ui->value->time().minute()*60 + ui->value->time().second();
emit modified();
}
@@ -177,6 +181,11 @@ ModulePanel::ModulePanel(QWidget *parent, ModelData & model, ModuleData & module
}
}
for (int i=0; i<=MM_RF_PROTO_LAST; i++)
{
ui->multiProtocol->addItem(ModelPrinter::printMultiRfProtocol(i), (QVariant) i);
}
if (firmware->getCapability(HasFailsafe)) {
for (int i=0; i<maxChannels; i++) {
QLabel * label = new QLabel(this);
@@ -222,6 +231,7 @@ ModulePanel::~ModulePanel()
#define MASK_PPM_FIELDS 16
#define MASK_FAILSAFES 32
#define MASK_OPEN_DRAIN 64
#define MASK_MULTIMODULE 128
void ModulePanel::update()
{
@@ -257,6 +267,9 @@ void ModulePanel::update()
mask |= MASK_OPEN_DRAIN;
}
break;
case PULSES_MULTIMODULE:
mask |= MASK_CHANNELS_RANGE | MASK_RX_NUMBER | MASK_MULTIMODULE;
break;
case PULSES_OFF:
default:
break;
@@ -289,18 +302,44 @@ void ModulePanel::update()
// PPM settings fields
ui->label_ppmPolarity->setVisible(mask & MASK_PPM_FIELDS);
ui->ppmPolarity->setVisible(mask & MASK_PPM_FIELDS);
ui->ppmPolarity->setCurrentIndex(module.ppmPulsePol);
ui->ppmPolarity->setCurrentIndex(module.ppm.pulsePol);
ui->label_ppmOutputType->setVisible(mask & MASK_OPEN_DRAIN);
ui->ppmOutputType->setVisible(mask & MASK_OPEN_DRAIN);
ui->ppmOutputType->setCurrentIndex(module.ppmOutputType);
ui->ppmOutputType->setCurrentIndex(module.ppm.outputType);
ui->label_ppmDelay->setVisible(mask & MASK_PPM_FIELDS);
ui->ppmDelay->setVisible(mask & MASK_PPM_FIELDS);
ui->ppmDelay->setValue(module.ppmDelay);
ui->ppmDelay->setValue(module.ppm.delay);
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->setMaximum(firmware->getCapability(PPMFrameLength));
ui->ppmFrameLength->setValue(22.5+((double)module.ppmFrameLength)*0.5);
ui->ppmFrameLength->setValue(22.5+((double)module.ppm.frameLength)*0.5);
// Multi settings fields
ui->label_multiProtocol->setVisible(mask & MASK_MULTIMODULE);
ui->multiProtocol->setVisible(mask & MASK_MULTIMODULE);
ui->multiProtocol->setCurrentIndex(module.getMultiRfProtocol());
ui->label_multiSubType->setVisible(mask & MASK_MULTIMODULE);
ui->multiSubType->setVisible(mask & MASK_MULTIMODULE);
if (mask & MASK_MULTIMODULE) {
int numEntries = getNumSubtypes(static_cast<MultiModuleRFProtocols>(module.getMultiRfProtocol()));
// Removes extra items
ui->multiSubType->setMaxCount(numEntries);
for (int i=0; i < numEntries; i++) {
if (i < ui->multiSubType->count())
ui->multiSubType->setItemText(i, ModelPrinter::printMultiSubType(module.getMultiRfProtocol(), i));
else
ui->multiSubType->addItem(ModelPrinter::printMultiSubType(module.getMultiRfProtocol(), i), (QVariant) i);
}
}
ui->multiSubType->setCurrentIndex(module.subType);
ui->cb_autoBind->setVisible(mask & MASK_MULTIMODULE);
ui->cb_autoBind->setChecked(module.multi.autoBindMode ? Qt::Checked : Qt::Unchecked);
ui->cb_lowPower->setVisible(mask & MASK_MULTIMODULE);
ui->cb_lowPower->setChecked(module.multi.lowPowerMode ? Qt::Checked : Qt::Unchecked);
if (firmware->getCapability(HasFailsafe)) {
ui->label_failsafeMode->setVisible(mask & MASK_FAILSAFES);
@@ -327,8 +366,8 @@ void ModulePanel::update()
ui->failsafesFrame->setVisible(mask & MASK_FAILSAFES);
if (mask & MASK_CHANNELS_RANGE) {
ui->channelsStart->setMaximum(32 - ui->channelsCount->value());
ui->channelsCount->setMaximum(qMin(16, 32-ui->channelsStart->value()));
ui->channelsStart->setMaximum(33 - ui->channelsCount->value());
ui->channelsCount->setMaximum(qMin(16, 33-ui->channelsStart->value()));
}
}
@@ -352,13 +391,13 @@ void ModulePanel::on_protocol_currentIndexChanged(int index)
void ModulePanel::on_ppmPolarity_currentIndexChanged(int index)
{
module.ppmPulsePol = index;
module.ppm.pulsePol = index;
emit modified();
}
void ModulePanel::on_ppmOutputType_currentIndexChanged(int index)
{
module.ppmOutputType = index;
module.ppm.outputType = index;
emit modified();
}
@@ -384,7 +423,7 @@ void ModulePanel::on_ppmDelay_editingFinished()
{
if (!lock) {
// TODO only accept valid values
module.ppmDelay = ui->ppmDelay->value();
module.ppm.delay = ui->ppmDelay->value();
emit modified();
}
}
@@ -397,7 +436,7 @@ void ModulePanel::on_rxNumber_editingFinished()
void ModulePanel::on_ppmFrameLength_editingFinished()
{
module.ppmFrameLength = (ui->ppmFrameLength->value()-22.5) / 0.5;
module.ppm.frameLength = (ui->ppmFrameLength->value()-22.5) / 0.5;
emit modified();
}
@@ -431,6 +470,39 @@ void ModulePanel::onFailsafeComboIndexChanged(int index)
}
}
void ModulePanel::on_multiProtocol_currentIndexChanged(int index)
{
if (!lock) {
lock=true;
module.setMultiRfProtocol(index);
unsigned int maxSubTypes = getNumSubtypes(static_cast<MultiModuleRFProtocols>(index));
module.subType = std::min(module.subType, maxSubTypes -1);
update();
emit modified();
lock = false;
}
}
void ModulePanel::on_multiSubType_currentIndexChanged(int index)
{
if (!lock) {
lock=true;
module.subType = index;
update();
emit modified();
lock = false;
}
}
void ModulePanel::on_autoBind_stateChanged(int state)
{
module.multi.autoBindMode = (state == Qt::Checked);
}
void ModulePanel::on_lowPower_stateChanged(int state)
{
module.multi.lowPowerMode = (state == Qt::Checked);
}
void ModulePanel::updateFailsafe(int channel)
{
int failsafeValue = module.failsafeChannels[channel];
+4
View File
@@ -65,6 +65,10 @@ class ModulePanel : public ModelPanel
void on_failsafeMode_currentIndexChanged(int value);
void onFailsafeComboIndexChanged(int index);
void onFailsafeSpinChanged(double value);
void on_multiProtocol_currentIndexChanged(int index);
void on_multiSubType_currentIndexChanged(int index);
void on_autoBind_stateChanged(int state);
void on_lowPower_stateChanged(int state);
private:
ModuleData & module;
+51
View File
@@ -534,6 +534,26 @@
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_multiProtocol">
<property name="text">
<string>Multi Radio Protocol</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QComboBox" name="multiProtocol">
<property name="maximumSize">
<size>
<width>125</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="5" column="4">
<widget class="QLabel" name="label_rxNumber">
<property name="maximumSize">
@@ -571,6 +591,37 @@
</item>
</widget>
</item>
<item row="4" column="2">
<widget class="QLabel" name="label_multiSubType">
<property name="text">
<string>SubType</string>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QComboBox" name="multiSubType">
<property name="maximumSize">
<size>
<width>125</width>
<height>16777215</height>
</size>
</property>
</widget>
</item>
<item row="4" column="4">
<widget class="QCheckBox" name="cb_autoBind">
<property name="text">
<string>Autobind</string>
</property>
</widget>
</item>
<item row="4" column="5">
<widget class="QCheckBox" name="cb_lowPower">
<property name="text">
<string>Low Power</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
+3 -3
View File
@@ -18,7 +18,7 @@
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>-1</number>
<number>6</number>
</property>
<property name="margin">
<number>0</number>
@@ -39,10 +39,10 @@
<bool>true</bool>
</property>
<property name="currentSection">
<enum>QDateTimeEdit::MinuteSection</enum>
<enum>QDateTimeEdit::HourSection</enum>
</property>
<property name="displayFormat">
<string notr="true">mm:ss</string>
<string notr="true">hh:mm:ss</string>
</property>
</widget>
</item>
+5 -4
View File
@@ -619,7 +619,7 @@ void TelemetrySensorPanel::update()
ui->source4->setVisible(sources34FieldsDisplayed);
ui->autoOffset->setVisible(sensor.unit != SensorData::UNIT_RPMS && isConfigurable);
ui->filter->setVisible(isConfigurable);
ui->persistent->setVisible((sensor.type == SensorData::TELEM_TYPE_CALCULATED && sensor.formula == SensorData::TELEM_FORMULA_CONSUMPTION) || isConfigurable);
ui->persistent->setVisible(sensor.type == SensorData::TELEM_TYPE_CALCULATED);
lock = false;
}
@@ -696,10 +696,10 @@ void TelemetrySensorPanel::on_unit_currentIndexChanged(int index)
}
}
void TelemetrySensorPanel::on_prec_valueChanged()
void TelemetrySensorPanel::on_prec_valueChanged(double value)
{
if (!lock) {
sensor.prec = ui->prec->value();
sensor.prec = value;
emit dataModified();
emit modified();
}
@@ -800,7 +800,8 @@ void TelemetryPanel::setup()
if (IS_ARM(firmware->getBoard())) {
ui->telemetryProtocol->addItem(tr("FrSky S.PORT"), 0);
ui->telemetryProtocol->addItem(tr("FrSky D"), 1);
if (IS_9XRPRO(firmware->getBoard())) {
if (IS_9XRPRO(firmware->getBoard()) ||
(IS_TARANIS(firmware->getBoard()) && generalSettings.hw_uartMode == 2)) {
ui->telemetryProtocol->addItem(tr("FrSky D (cable)"), 2);
}
ui->telemetryProtocol->setCurrentIndex(model->telemetryProtocol);
+1 -1
View File
@@ -93,7 +93,7 @@ class TelemetrySensorPanel: public ModelPanel
void on_type_currentIndexChanged(int index);
void on_formula_currentIndexChanged(int index);
void on_unit_currentIndexChanged(int index);
void on_prec_valueChanged();
void on_prec_valueChanged(double value);
protected:
void updateSourcesComboBox(AutoComboBox * cb, bool negative);
+91 -12
View File
@@ -91,31 +91,91 @@ QString ModelPrinter::printThrottleTrimMode()
QString ModelPrinter::printModuleProtocol(unsigned int protocol)
{
static const char * strings[] = {
"OFF",
"PPM",
"Silverlit A", "Silverlit B", "Silverlit C",
"CTP1009",
"LP45", "DSM2", "DSMX",
"PPM16", "PPMsim",
"FrSky XJT (D16)", "FrSky XJT (D8)", "FrSky XJT (LR12)", "FrSky DJT",
"Crossfire"
"OFF",
"PPM",
"Silverlit A", "Silverlit B", "Silverlit C",
"CTP1009",
"LP45", "DSM2", "DSMX",
"PPM16", "PPMsim",
"FrSky XJT (D16)", "FrSky XJT (D8)", "FrSky XJT (LR12)", "FrSky DJT",
"Crossfire",
"DIY Multiprotocol Module"
};
return CHECK_IN_ARRAY(strings, protocol);
}
QString ModelPrinter::printModule(int idx)
QString ModelPrinter::printMultiRfProtocol(int rfProtocol)
{
const ModuleData & module = model.moduleData[idx];
static const char *strings[] = {
"FlySky", "Hubsan", "FrSky", "Hisky", "V2x2", "DSM", "Devo", "YD717", "KN", "SymaX", "SLT", "CX10", "CG023",
"Bayang", "ESky", "MT99XX", "MJXQ", "Shenqi", "FY326", "SFHSS", "Custom"
};
if (rfProtocol > MM_RF_PROTO_CUSTOM)
return "Custom - proto " + QString::number(rfProtocol & 0x1f);
else
return CHECK_IN_ARRAY(strings, rfProtocol);
}
QString ModelPrinter::printMultiSubType(int rfProtocol, int subType) {
/* custom protocols */
static const char *custom_subtype_strings[] = {"Subtype 0","Subtype 1","Subtype 2","Subtype 3","Subtype 4","Subtype 5","Subtype 6","Subtype 7"};
static const char *flysky_strings[] = {"Standard","V9x9","V6x6","V912"};
static const char *frsky_strings[] = {"D16", "D8", "D16 8ch"};
static const char *hisky_strings[] = { "HiSky", "HK310" };
static const char *dsm2_strings[] = {"DSM2", "DSMX"};
static const char *yd717_strings[] = {"YD717", "Skywalker", "Syma X2", "XINXUN", "NIHUI"};
static const char *symax_strings[] = {"Standard", "Syma X5C"};
static const char *cx10_strings[] = {"Green", "Blue", "DM007", "Q282", "JC3015a", "JC3015b", "MK33041", "Q242"};
static const char *cg023_strings[] = {"CG023", "YD829", "H3 3D"};
static const char* kn_strings[] = {"WLtoys", "FeiLun"};
static const char* mt99_strings[] = {"MT99","H7","YZ"};
static const char* mjxq_strings[] = {"WLH08", "X600", "X800", "H26D"};
if (rfProtocol >= MM_RF_PROTO_CUSTOM) {
return CHECK_IN_ARRAY(custom_subtype_strings, subType);
}
switch (rfProtocol) {
case MM_RF_PROTO_FLYSKY:
return CHECK_IN_ARRAY(flysky_strings, subType);
case MM_RF_PROTO_FRSKY:
return CHECK_IN_ARRAY(frsky_strings, subType);
case MM_RF_PROTO_HISKY:
return CHECK_IN_ARRAY(hisky_strings, subType);
case MM_RF_PROTO_DSM2:
return CHECK_IN_ARRAY(dsm2_strings, subType);
case MM_RF_PROTO_YD717:
return CHECK_IN_ARRAY(yd717_strings, subType);
case MM_RF_PROTO_SYMAX:
return CHECK_IN_ARRAY(symax_strings, subType);
case MM_RF_PROTO_CX10:
return CHECK_IN_ARRAY(cx10_strings, subType);
case MM_RF_PROTO_CG023:
return CHECK_IN_ARRAY(cg023_strings, subType);
case MM_RF_PROTO_KN:
return CHECK_IN_ARRAY(kn_strings, subType);
case MM_RF_PROTO_MT99XX:
return CHECK_IN_ARRAY(mt99_strings, subType);
case MM_RF_PROTO_MJXQ:
return CHECK_IN_ARRAY(mjxq_strings, subType);
default:
return "DEFAULT";
}
}
QString ModelPrinter::printModule(int idx) {
const ModuleData &module = model.moduleData[idx];
if (module.protocol == PULSES_OFF)
return printModuleProtocol(module.protocol);
else if (module.protocol == PULSES_PPM)
return tr("%1, Channels(%2-%3), PPM delay(%4usec), Pulse polarity(%5)").arg(printModuleProtocol(module.protocol)).arg(module.channelsStart+1).arg(module.channelsStart+module.channelsCount).arg(module.ppmDelay).arg(module.polarityToString());
return tr("%1, Channels(%2-%3), PPM delay(%4usec), Pulse polarity(%5)").arg(printModuleProtocol(module.protocol)).arg(module.channelsStart + 1).arg(module.channelsStart + module.channelsCount).arg(module.ppm.delay).arg(module.polarityToString());
else {
QString result = tr("%1, Channels(%2-%3)").arg(printModuleProtocol(module.protocol)).arg(module.channelsStart+1).arg(module.channelsStart+module.channelsCount);
if (module.protocol != PULSES_PXX_XJT_D8) {
result += " " + tr("Receiver number(%1)").arg(module.modelId);
}
if (module.protocol == PULSES_MULTIMODULE)
result += " " + tr("radio Protocol %1, subType %2, option value %3").arg(printMultiRfProtocol(module.multi.rfProtocol)).arg(printMultiSubType(module.multi.rfProtocol, module.subType)).arg(module.multi.optionValue);
return result;
}
}
@@ -125,7 +185,7 @@ QString ModelPrinter::printTrainerMode()
QString result;
switch (model.trainerMode) {
case 1:
result = tr("Slave/Jack"); // TODO + tr(": Channel start: %1, %2 Channels, %3usec Delay, Pulse polarity %4").arg(module.channelsStart+1).arg(module.channelsCount).arg(module.ppmDelay).arg(module.polarityToString());
result = tr("Slave/Jack"); // TODO + tr(": Channel start: %1, %2 Channels, %3usec Delay, Pulse polarity %4").arg(module.channelsStart+1).arg(module.channelsCount).arg(module.ppm.delay).arg(module.polarityToString());
break;
case 2:
result = tr("Master/SBUS Module");
@@ -142,6 +202,25 @@ QString ModelPrinter::printTrainerMode()
return result;
}
QString ModelPrinter::printHeliSwashType ()
{
switch (model.swashRingData.type) {
case HELI_SWASH_TYPE_90:
return tr("90");
case HELI_SWASH_TYPE_120:
return tr("120");
case HELI_SWASH_TYPE_120X:
return tr("120X");
case HELI_SWASH_TYPE_140:
return tr("140");
case HELI_SWASH_TYPE_NONE:
return tr("Off");
default:
return "???";
}
}
QString ModelPrinter::printCenterBeep()
{
QStringList strl;
+3
View File
@@ -38,12 +38,15 @@ class ModelPrinter: public QObject
QString printTrimIncrementMode();
QString printThrottleTrimMode();
static QString printModuleProtocol(unsigned int protocol);
static QString printMultiRfProtocol(int rfProtocol);
static QString printMultiSubType(int rfProtocol, int subType);
QString printFlightModeSwitch(int index);
QString printFlightModeName(int index);
QString printFlightModes(unsigned int flightModes);
QString printModule(int idx);
QString printTrainerMode();
QString printCenterBeep();
QString printHeliSwashType();
QString printTrim(int flightModeIndex, int stickIndex);
QString printGlobalVar(int flightModeIndex, int gvarIndex);
QString printRotaryEncoder(int flightModeIndex, int reIndex);
+53
View File
@@ -128,6 +128,8 @@ QString MultiModelPrinter::print(QTextDocument * document)
QString str = "<table border='1' cellspacing='0' cellpadding='3' width='100%' style='font-family: monospace;'>";
str += printSetup();
if (firmware->getCapability(Heli))
str += printHeliSetup();
if (firmware->getCapability(FlightModes))
str += printFlightModes();
str += printInputs();
@@ -181,6 +183,57 @@ QString MultiModelPrinter::printSetup()
return str;
}
QString MultiModelPrinter::printHeliSetup()
{
bool heliEnabled = false;
for (int k=0; k<models.size(); k++) {
heliEnabled = heliEnabled || models[k]->swashRingData.type != HELI_SWASH_TYPE_NONE;
}
if (!heliEnabled)
return "";
QString str = printTitle(tr("Helicopter Setup"));
MultiColumns columns(models.size());
columns.appendTitle (tr("Swash Type:"));
COMPARE(modelPrinter->printHeliSwashType());
columns.append ("<br/>");
columns.appendTitle (tr("Swash Ring:"));
COMPARE(model->swashRingData.value);
columns.append ("<table cellspacing='0' cellpadding='1' width='100%' border='0' style='border-collapse:collapse'>");
columns.append("<tr>");
columns.append("<td></td><td><b>" + tr("Input") + "</b></td><td><b>" + tr("Weight") + "</b></td>");
columns.append("</tr>");
columns.append("<tr><td><b>" + tr("Long. cyc") + "</b></td><td>");
COMPARE(model->swashRingData.elevatorSource.toString(model));
columns.append("</td><td>");
COMPARE(model->swashRingData.elevatorWeight)
columns.append("</td></tr>");
columns.append("<tr><td><b>" + tr("Lateral cyc") + "</b></td><td>");
COMPARE(model->swashRingData.aileronSource.toString(model));
columns.append("</td><td>");
COMPARE(model->swashRingData.aileronWeight)
columns.append("</td></tr>");
columns.append("<tr><td><b>" + tr("Collective") + "</b></td><td>");
COMPARE(model->swashRingData.collectiveSource.toString(model));
columns.append("</td><td>");
COMPARE(model->swashRingData.collectiveWeight)
columns.append("</td></tr>");
columns.append("</table>");
str.append(columns.print());
return str;
}
QString MultiModelPrinter::printFlightModes()
{
QString str = printTitle(tr("Flight modes"));
+1
View File
@@ -43,6 +43,7 @@ class MultiModelPrinter: public QObject
QString printTitle(const QString & label);
QString printSetup();
QString printHeliSetup();
QString printFlightModes();
QString printLimits();
QString printInputs();
+1 -1
View File
@@ -108,7 +108,7 @@ QString SyncProcess::updateEntry(const QString & path, const QDir & source, cons
QString sourceContents = sourceFile.readAll();
sourceFile.close();
// try to retrieve destination contents
QFile destinationFile(path);
QFile destinationFile(destinationPath);
if (destinationFile.open(QFile::ReadOnly)) {
QString destinationContents = destinationFile.readAll();
destinationFile.close();
+19 -17
View File
@@ -60,20 +60,22 @@ QStringList getAvrdudeArgs(const QString &cmd, const QString &filename)
return args;
}
QStringList getDfuArgs(const QString &cmd, const QString &filename)
QStringList getDfuArgs(const QString & cmd, const QString & filename)
{
QStringList arguments;
QStringList args;
burnConfigDialog bcd;
QString memory="0x08000000";
if (cmd=="-U") {
memory.append(QString(":%1").arg(MAX_FSIZE));
QString memory = "0x08000000";
if (cmd == "-U") {
memory.append(QString(":%1").arg(GetCurrentFirmware()->getFlashSize()));
}
arguments << bcd.getDFUArgs() << "--dfuse-address" << memory << "-d" << "0483:df11";
args << bcd.getDFUArgs();
if (!filename.endsWith(".dfu")) {
args << "--dfuse-address" << memory;
}
args << "-d" << "0483:df11";
QString fullcmd = cmd + filename;
arguments << "" << fullcmd;
return arguments;
args << "" << fullcmd;
return args;
}
QStringList getSambaArgs(const QString &tcl)
@@ -102,7 +104,7 @@ QStringList getReadEEpromCmd(const QString &filename)
{
QStringList result;
EEPROMInterface *eepromInterface = GetEepromInterface();
if (IS_TARANIS(eepromInterface->getBoard())) {
if (IS_STM32(eepromInterface->getBoard())) {
// impossible
}
else if (IS_SKY9X(eepromInterface->getBoard())) {
@@ -117,7 +119,7 @@ QStringList getReadEEpromCmd(const QString &filename)
QStringList getWriteEEpromCmd(const QString &filename)
{
EEPROMInterface *eepromInterface = GetEepromInterface();
if (IS_TARANIS(eepromInterface->getBoard())) {
if (IS_STM32(eepromInterface->getBoard())) {
// impossible
return QStringList();
}
@@ -132,7 +134,7 @@ QStringList getWriteEEpromCmd(const QString &filename)
QStringList getWriteFirmwareArgs(const QString &filename)
{
EEPROMInterface *eepromInterface = GetEepromInterface();
if (IS_TARANIS(eepromInterface->getBoard())) {
if (IS_STM32(eepromInterface->getBoard())) {
return getDfuArgs("-D", filename);
}
else if (eepromInterface->getBoard() == BOARD_SKY9X) {
@@ -149,7 +151,7 @@ QStringList getWriteFirmwareArgs(const QString &filename)
QStringList getReadFirmwareArgs(const QString &filename)
{
EEPROMInterface *eepromInterface = GetEepromInterface();
if (IS_TARANIS(eepromInterface->getBoard())) {
if (IS_STM32(eepromInterface->getBoard())) {
return getDfuArgs("-U", filename);
}
else if (eepromInterface->getBoard() == BOARD_SKY9X) {
@@ -191,7 +193,7 @@ void resetAvrdudeFuses(bool eepromProtect, ProgressWidget *progress)
QStringList str;
if (bcd.getMCU() == "m2560") {
args << "-B8";
QString erStr = eepromProtect ? "hfuse:w:0x11:m" : "hfuse:w:0x19:m";
QString erStr = eepromProtect ? "hfuse:w:0x51:m" : "hfuse:w:0x59:m";
str << "-U" << "lfuse:w:0xD7:m" << "-U" << erStr << "-U" << "efuse:w:0xFC:m";
//use hfuse = 0x81 to prevent eeprom being erased with every flashing
}
@@ -220,7 +222,7 @@ void resetAvrdudeFuses(bool eepromProtect, ProgressWidget *progress)
lfuses = "lfuse:w:0x3F:m";
}
QString erStr = eepromProtect ? "hfuse:w:0x81:m" : "hfuse:w:0x89:m";
QString erStr = eepromProtect ? "hfuse:w:0xC1:m" : "hfuse:w:0xC9:m";
str << "-U" << lfuses << "-U" << erStr << "-U" << "efuse:w:0xFF:m";
//use hfuse = 0x81 to prevent eeprom being erased with every flashing
}
@@ -313,7 +315,7 @@ bool readEeprom(const QString &filename, ProgressWidget *progress)
}
}
if (result == false && !IS_TARANIS(GetCurrentFirmware()->getBoard())) {
if (result == false && !IS_STM32(GetCurrentFirmware()->getBoard())) {
FlashProcess flashProcess(getRadioInterfaceCmd(), getReadEEpromCmd(filename), progress);
result = flashProcess.run();
}
+1 -1
View File
@@ -2,7 +2,7 @@
#include "ui_htmldialog.h"
ReleaseNotesDialog::ReleaseNotesDialog(QWidget * parent) :
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
QDialog(parent),
ui(new Ui::HtmlDialog)
{
ui->setupUi(this);
+1 -1
View File
@@ -3,7 +3,7 @@
#include "helpers.h"
ReleaseNotesFirmwareDialog::ReleaseNotesFirmwareDialog(QWidget * parent, const QString & rnurl):
QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint),
QDialog(parent),
ui(new Ui::HtmlDialog)
{
ui->setupUi(this);
-2
View File
@@ -5,8 +5,6 @@
#include "modeledit/modeledit.h"
#if __GNUC__
#include <math.h>
#else
#include "../targets/windows/winbuild.h"
#endif
class AutoDoubleSpinBox: public QDoubleSpinBox
+10 -1
View File
@@ -62,7 +62,16 @@ class LcdWidget : public QWidget
void makeScreenshot(const QString & fileName)
{
QPixmap buffer(2*lcdWidth, 2*lcdHeight);
int width, height;
if (lcdDepth < 12) {
width = 2 * lcdWidth;
height = 2 * lcdHeight;
}
else {
width = lcdWidth;
height = lcdHeight;
}
QPixmap buffer(width, height);
QPainter p(&buffer);
doPaint(p);
bool toclipboard = g.snapToClpbrd();
@@ -141,7 +141,12 @@ void SimulatorDialogHorus::getValues()
trimPressed == TRIM_RV_DN,
trimPressed == TRIM_RV_UP,
trimPressed == TRIM_RH_L,
trimPressed == TRIM_RH_R
trimPressed == TRIM_RH_R,
0,0,0,0
/*trimPressed == TRIM_T5_DN,
trimPressed == TRIM_T5_UP,
trimPressed == TRIM_T6_DN,
trimPressed == TRIM_T6_UP*/
}
};
@@ -120,7 +120,7 @@ void SimulatorDialogTaranis::getValues()
{
-pots[0]->value(),
pots[1]->value(),
((flags && SIMULATOR_FLAGS_S3) ? pots[2]->value() : 0),
((flags & SIMULATOR_FLAGS_S3) ? pots[2]->value() : 0),
-sliders[0]->value(),
sliders[1]->value()
},
+9 -9
View File
@@ -16,14 +16,14 @@
#include <stdint.h>
#if !defined(NUM_LOGICAL_SWITCH) && defined(NUM_CSW)
#define NUM_LOGICAL_SWITCH NUM_CSW
#if !defined(MAX_LOGICAL_SWITCHES) && defined(NUM_CSW)
#define MAX_LOGICAL_SWITCHES NUM_CSW
#endif
#ifdef INIT_IMPORT
#undef INIT_IMPORT
#ifdef FRSKY
frskyStreaming = 20;
#ifdef TELEMETRY_FRSKY
telemetryStreaming = 20;
#endif
#endif
@@ -31,13 +31,13 @@ frskyStreaming = 20;
#undef SETVALUES_IMPORT
for (int i=0; i<NUM_STICKS; i++)
g_anas[i] = inputs.sticks[i];
for (int i=0; i<NUM_POTS; i++)
for (int i=0; i<NUM_POTS+NUM_SLIDERS; i++)
g_anas[NUM_STICKS+i] = inputs.pots[i];
for (int i=0; i<C9X_NUM_SWITCHES; i++)
simuSetSwitch(i, inputs.switches[i]);
for (int i=0; i<C9X_NUM_KEYS; i++)
simuSetKey(i, inputs.keys[i]);
for (int i=0; i<NUM_STICKS*2; i++)
for (int i=0; i<(NUM_STICKS+NUM_AUX_TRIMS)*2; i++)
simuSetTrim(i, inputs.trims[i]);
#ifdef PCBGRUVIN9X
@@ -50,7 +50,7 @@ if (inputs.rotenc) pind |= 0x20;
if (inputs.rotenc) PIOB->PIO_PDSR &= ~0x40; else PIOB->PIO_PDSR |= 0x40;
#endif
#if defined(PCBFLAMENCO) || (defined(PCBTARANIS) && defined(REV9E))
#if defined(PCBFLAMENCO) || defined(PCBX9E)
if (inputs.rotenc) simuSetKey(KEY_ENTER, true);
#endif
#endif
@@ -60,7 +60,7 @@ if (inputs.rotenc) simuSetKey(KEY_ENTER, true);
memset(outputs.chans, 0, sizeof(outputs.chans));
for (unsigned int i=0; i<DIM(g_chans512); i++)
outputs.chans[i] = g_chans512[i];
for (int i=0; i<NUM_LOGICAL_SWITCH; i++)
for (int i=0; i<MAX_LOGICAL_SWITCHES; i++)
#if defined(BOLD_FONT)
outputs.vsw[i] = getSwitch(SWSRC_SW1+i);
#else
@@ -81,7 +81,7 @@ for (int fm=0; fm<MAX_FLIGHT_MODES; fm++) {
#ifdef LCDCHANGED_IMPORT
#undef LCDCHANGED_IMPORT
if (simuLcdRefresh) {
lightEnable = isBacklightEnable();
lightEnable = isBacklightEnabled();
simuLcdRefresh = false;
return true;
}
@@ -56,9 +56,9 @@ void registerSimulators()
#elif (!defined __GNUC__)
char name[MAX_PATH];
GetModuleFileName(NULL, name, MAX_PATH);
QString path(name);
path.truncate(path.lastIndexOf('\\'));
dir.setPath(path);
QString path(name);
path.truncate(path.lastIndexOf('\\'));
dir.setPath(path);
#else
dir = SIMULATOR_LIB_SEARCH_PATH;
#endif
@@ -69,7 +69,7 @@ void registerSimulators()
}
}
SimulatorFactory *getSimulatorFactory(const QString &name)
SimulatorFactory * getSimulatorFactory(const QString & name)
{
QString simuName = name;
while(1) {
@@ -85,6 +85,8 @@ SimulatorFactory *getSimulatorFactory(const QString &name)
if (pos <= 0)
break;
simuName = simuName.mid(0, pos);
if (simuName.count('-') == 0)
break;
}
return NULL;
}
@@ -24,12 +24,7 @@
#include <QMap>
#include <algorithm>
#if __GNUC__
#define PACK( __Declaration__ ) __Declaration__ __attribute__((__packed__))
#else
#include "../targets/windows/winbuild.h"
#endif
// TODO can be removed?
template<class t> t LIMIT(t mi, t x, t ma) { return std::min(std::max(mi, x), ma); }
struct TxInputs
@@ -39,7 +34,7 @@ struct TxInputs
int switches[C9X_NUM_SWITCHES];
bool keys[C9X_NUM_KEYS];
bool rotenc;
bool trims[8];
bool trims[12];
};
class TxOutputs
+39 -28
View File
@@ -147,31 +147,32 @@ void TelemetrySimulator::closeEvent(QCloseEvent *event)
void TelemetrySimulator::showEvent(QShowEvent *event)
{
SET_INSTANCE(rxbt_inst, BATT_ID, 0);
SET_INSTANCE(rssi_inst, RSSI_ID, 24);
SET_INSTANCE(swr_inst, SWR_ID, 24);
SET_INSTANCE(a1_inst, ADC1_ID, 0);
SET_INSTANCE(a2_inst, ADC2_ID, 0);
SET_INSTANCE(a3_inst, A3_FIRST_ID, 0);
SET_INSTANCE(a4_inst, A4_FIRST_ID, 0);
SET_INSTANCE(t1_inst, T1_FIRST_ID, 0);
SET_INSTANCE(t2_inst, T2_FIRST_ID, 0);
SET_INSTANCE(rpm_inst, RPM_FIRST_ID, DATA_ID_RPM);
SET_INSTANCE(fuel_inst, FUEL_FIRST_ID, 0);
SET_INSTANCE(aspd_inst, AIR_SPEED_FIRST_ID, 0);
SET_INSTANCE(vvspd_inst, VARIO_FIRST_ID, DATA_ID_VARIO);
SET_INSTANCE(valt_inst, ALT_FIRST_ID, DATA_ID_VARIO);
SET_INSTANCE(fasv_inst, VFAS_FIRST_ID, DATA_ID_FAS);
SET_INSTANCE(fasc_inst, CURR_FIRST_ID, DATA_ID_FAS);
SET_INSTANCE(cells_inst, CELLS_FIRST_ID, DATA_ID_FLVSS);
SET_INSTANCE(gpsa_inst, GPS_ALT_FIRST_ID, DATA_ID_GPS);
SET_INSTANCE(gpss_inst, GPS_SPEED_FIRST_ID, DATA_ID_GPS);
SET_INSTANCE(gpsc_inst, GPS_COURS_FIRST_ID, DATA_ID_GPS);
SET_INSTANCE(gpst_inst, GPS_TIME_DATE_FIRST_ID, DATA_ID_GPS);
SET_INSTANCE(gpsll_inst, GPS_LONG_LATI_FIRST_ID, DATA_ID_GPS);
SET_INSTANCE(accx_inst, ACCX_FIRST_ID, 0);
SET_INSTANCE(accy_inst, ACCY_FIRST_ID, 0);
SET_INSTANCE(accz_inst, ACCZ_FIRST_ID, 0);
SET_INSTANCE(rxbt_inst, BATT_ID, 0);
SET_INSTANCE(rssi_inst, RSSI_ID, 24);
SET_INSTANCE(swr_inst, SWR_ID, 24);
SET_INSTANCE(a1_inst, ADC1_ID, 0);
SET_INSTANCE(a2_inst, ADC2_ID, 0);
SET_INSTANCE(a3_inst, A3_FIRST_ID, 0);
SET_INSTANCE(a4_inst, A4_FIRST_ID, 0);
SET_INSTANCE(t1_inst, T1_FIRST_ID, 0);
SET_INSTANCE(t2_inst, T2_FIRST_ID, 0);
SET_INSTANCE(rpm_inst, RPM_FIRST_ID, DATA_ID_RPM);
SET_INSTANCE(fuel_inst, FUEL_FIRST_ID, 0);
SET_INSTANCE(fuel_qty_inst, FUEL_QTY_FIRST_ID, 0);
SET_INSTANCE(aspd_inst, AIR_SPEED_FIRST_ID, 0);
SET_INSTANCE(vvspd_inst, VARIO_FIRST_ID, DATA_ID_VARIO);
SET_INSTANCE(valt_inst, ALT_FIRST_ID, DATA_ID_VARIO);
SET_INSTANCE(fasv_inst, VFAS_FIRST_ID, DATA_ID_FAS);
SET_INSTANCE(fasc_inst, CURR_FIRST_ID, DATA_ID_FAS);
SET_INSTANCE(cells_inst, CELLS_FIRST_ID, DATA_ID_FLVSS);
SET_INSTANCE(gpsa_inst, GPS_ALT_FIRST_ID, DATA_ID_GPS);
SET_INSTANCE(gpss_inst, GPS_SPEED_FIRST_ID, DATA_ID_GPS);
SET_INSTANCE(gpsc_inst, GPS_COURS_FIRST_ID, DATA_ID_GPS);
SET_INSTANCE(gpst_inst, GPS_TIME_DATE_FIRST_ID, DATA_ID_GPS);
SET_INSTANCE(gpsll_inst, GPS_LONG_LATI_FIRST_ID, DATA_ID_GPS);
SET_INSTANCE(accx_inst, ACCX_FIRST_ID, 0);
SET_INSTANCE(accy_inst, ACCY_FIRST_ID, 0);
SET_INSTANCE(accz_inst, ACCZ_FIRST_ID, 0);
ui->rxbt_ratio->setValue(simulator->getSensorRatio(BATT_ID) / 10.0);
ui->A1_ratio->setValue(simulator->getSensorRatio(ADC1_ID) / 10.0);
@@ -283,7 +284,7 @@ void TelemetrySimulator::generateTelemetryFrame()
case 10:
if (ui->rpm->value() > 0)
generateSportPacket(buffer, ui->rpm_inst->text().toInt(&ok, 0) - 1, DATA_FRAME, RPM_FIRST_ID, LIMIT<uint32_t>(0, ui->rpm->value(), 0xFFFF));
generateSportPacket(buffer, ui->rpm_inst->text().toInt(&ok, 0) - 1, DATA_FRAME, RPM_FIRST_ID, LIMIT<uint32_t>(0, ui->rpm->value(), 0x7FFFFFFF));
break;
case 11:
@@ -383,6 +384,11 @@ void TelemetrySimulator::generateTelemetryFrame()
generateSportPacket(buffer, ui->accz_inst->text().toInt(&ok, 0) - 1, DATA_FRAME, ACCZ_FIRST_ID, LIMIT<int32_t>(-0x7FFFFFFF, ui->accz->value() * 100.0, 0x7FFFFFFF));
break;
case 26:
if (ui->fuel_qty->value() > 0)
generateSportPacket(buffer, ui->fuel_qty_inst->text().toInt(&ok, 0) - 1, DATA_FRAME, FUEL_QTY_FIRST_ID, LIMIT<uint32_t>(0, ui->fuel_qty->value() * 100.0, 0xFFFFFF));
break;
default:
item = 0;
return;
@@ -596,6 +602,7 @@ TelemetrySimulator::LogPlaybackController::LogPlaybackController(Ui::TelemetrySi
colToFuncMap.insert("Tmp2(@F)", T2_DEGF);
colToFuncMap.insert("RPM(rpm)", RPM);
colToFuncMap.insert("Fuel(%)", FUEL);
colToFuncMap.insert("Fuel(ml)", FUEL_QTY);
colToFuncMap.insert("VSpd(m/s)", VSPD_MS);
colToFuncMap.insert("VSpd(f/s)", VSPD_FS);
colToFuncMap.insert("Alt(ft)", ALT_FEET);
@@ -644,14 +651,15 @@ QDateTime TelemetrySimulator::LogPlaybackController::parseTransmittterTimestamp(
void TelemetrySimulator::LogPlaybackController::calcLogFrequency()
{
// examine up to 20 rows to determine log frequency in seconds
// Skip the first entry which contains the file open time
logFrequency = 25.5; // default value
QDateTime lastTime;
for (int i = 1; (i < 20) && (i < csvRecords.count()); i++)
for (int i = 2; (i < 21) && (i < csvRecords.count()); i++)
{
QDateTime logTime = parseTransmittterTimestamp(csvRecords[i]);
// ugh - no timespan in this Qt version
double timeDiff = (logTime.toMSecsSinceEpoch() - lastTime.toMSecsSinceEpoch()) / 1000.0;
if ((timeDiff > 0) && (timeDiff < logFrequency)) {
if ((timeDiff > 0.1) && (timeDiff < logFrequency)) {
logFrequency = timeDiff;
}
lastTime = logTime;
@@ -890,6 +898,9 @@ void TelemetrySimulator::LogPlaybackController::setUiDataValues()
case FUEL:
ui->fuel->setValue(columnData[info.dataIndex].toDouble());
break;
case FUEL_QTY:
ui->fuel_qty->setValue(columnData[info.dataIndex].toDouble());
break;
case VSPD_MS:
ui->vspeed->setValue(columnData[info.dataIndex].toDouble());
break;
+1
View File
@@ -80,6 +80,7 @@ class TelemetrySimulator : public QDialog
ACCX,
ACCY,
ACCZ,
FUEL_QTY,
};
QMap<QString, CONVERT_TYPE> colToFuncMap; // contains all 'known' column headings and how they are to be processed
Ui::TelemetrySimulator * ui;
+75 -28
View File
@@ -1360,7 +1360,7 @@ Timestamp</string>
</font>
</property>
<property name="maximum">
<number>65535</number>
<number>2147483647</number>
</property>
</widget>
</item>
@@ -1520,23 +1520,20 @@ Timestamp</string>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QLabel" name="label_11">
<item row="11" column="0">
<widget class="QLabel" name="label_51">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>VSpd</string>
<string>Fuel Qty</string>
</property>
</widget>
</item>
<item row="11" column="1">
<widget class="QLineEdit" name="vvspd_inst">
<widget class="QLineEdit" name="fuel_qty_inst">
<property name="font">
<font>
<pointsize>8</pointsize>
@@ -1545,35 +1542,26 @@ Timestamp</string>
</widget>
</item>
<item row="11" column="2">
<widget class="QDoubleSpinBox" name="vspeed">
<widget class="QSpinBox" name="fuel_qty">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="decimals">
<number>2</number>
</property>
<property name="minimum">
<double>-16777215.000000000000000</double>
</property>
<property name="maximum">
<double>16777215.000000000000000</double>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
<double>100000.000000000000000</double>
</property>
</widget>
</item>
<item row="11" column="3">
<widget class="QLabel" name="label_48">
<widget class="QLabel" name="label_52">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>m/s</string>
<string>ml</string>
</property>
</widget>
</item>
@@ -1632,7 +1620,7 @@ Timestamp</string>
</widget>
</item>
<item row="12" column="0">
<widget class="QLabel" name="label_12">
<widget class="QLabel" name="label_11">
<property name="font">
<font>
<pointsize>8</pointsize>
@@ -1642,12 +1630,12 @@ Timestamp</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Alt</string>
<string>VSpd</string>
</property>
</widget>
</item>
<item row="12" column="1">
<widget class="QLineEdit" name="valt_inst">
<widget class="QLineEdit" name="vvspd_inst">
<property name="font">
<font>
<pointsize>8</pointsize>
@@ -1656,7 +1644,7 @@ Timestamp</string>
</widget>
</item>
<item row="12" column="2">
<widget class="QDoubleSpinBox" name="valt">
<widget class="QDoubleSpinBox" name="vspeed">
<property name="font">
<font>
<pointsize>8</pointsize>
@@ -1677,14 +1665,14 @@ Timestamp</string>
</widget>
</item>
<item row="12" column="3">
<widget class="QLabel" name="label_49">
<widget class="QLabel" name="label_48">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>Meters</string>
<string>m/s</string>
</property>
</widget>
</item>
@@ -1742,7 +1730,64 @@ Timestamp</string>
</property>
</widget>
</item>
</layout>
<item row="13" column="0">
<widget class="QLabel" name="label_12">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Alt</string>
</property>
</widget>
</item>
<item row="13" column="1">
<widget class="QLineEdit" name="valt_inst">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
</widget>
</item>
<item row="13" column="2">
<widget class="QDoubleSpinBox" name="valt">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="decimals">
<number>2</number>
</property>
<property name="minimum">
<double>-16777215.000000000000000</double>
</property>
<property name="maximum">
<double>16777215.000000000000000</double>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
</widget>
</item>
<item row="13" column="3">
<widget class="QLabel" name="label_49">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>Meters</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<tabstops>
@@ -1812,6 +1857,8 @@ Timestamp</string>
<tabstop>accy</tabstop>
<tabstop>accz_inst</tabstop>
<tabstop>accz</tabstop>
<tabstop>fuel_qty_inst</tabstop>
<tabstop>fuel_qty</tabstop>
</tabstops>
<resources/>
<connections/>
+2 -2
View File
@@ -425,12 +425,12 @@ May be different from firmware language</source>
<message>
<location filename="../apppreferencesdialog.ui" line="877"/>
<source>Find Executable</source>
<translation>Suche die *.EXE-Datei</translation>
<translation>Ausführbare Datei auswählen</translation>
</message>
<message>
<location filename="../apppreferencesdialog.ui" line="751"/>
<source>Google Earth Executable</source>
<translation>Google Earth *.EXE Datei</translation>
<translation>Ausführbare Datei Google Earth</translation>
</message>
<message>
<location filename="../apppreferencesdialog.ui" line="831"/>
+2 -2
View File
@@ -8067,8 +8067,8 @@ Mixage actif par défaut si non-renseigné.</translation>
</message>
<message>
<location filename="../firmwares/opentx/opentxinterface.cpp" line="1144"/>
<source>Removes D8 and LR12 FrSky protocols that are not legal for use in the EU on radios sold after Jan 1st, 2015</source>
<translation>Supprime les protocoles RF D8 et LR12 qui ne sont plus utilisable légalementen Europe sur les radios vendues après le 1er janvier 2015</translation>
<source>Removes D8 FrSky protocol support which is not legal for use in the EU on radios sold after Jan 1st, 2015</source>
<translation>Supprime le protocole RF D8 qui n&apos;est plus utilisable légalement en Europe sur les radios vendues après le 1er janvier 2015</translation>
</message>
<message>
<location filename="../firmwares/opentx/opentxinterface.cpp" line="1145"/>
+3 -3
View File
@@ -124,12 +124,12 @@ void saveModel(ModelData & m, model & xm)
}
}
*/
if (m.moduleData[0].protocol != PULSES_PPM || m.moduleData[0].channelsCount != 8 || m.moduleData[0].ppmDelay != 300 || m.moduleData[0].ppmPulsePol != 0) {
if (m.moduleData[0].protocol != PULSES_PPM || m.moduleData[0].channelsCount != 8 || m.moduleData[0].ppm.delay != 300 || m.moduleData[0].ppm.pulsePol != 0) {
modulation mod;
mod.type(modulation::type_type::value(m.moduleData[0].protocol));
mod.channels(m.moduleData[0].channelsCount);
mod.delay(m.moduleData[0].ppmDelay);
mod.polarity(modulation::polarity_type::value(m.moduleData[0].ppmPulsePol));
mod.delay(m.moduleData[0].ppm.delay);
mod.polarity(modulation::polarity_type::value(m.moduleData[0].ppm.pulsePol));
xm.modulation(mod);
}
{
-34
View File
@@ -1,34 +0,0 @@
/*
* Author - Bertrand Songis <bsongis@gmail.com>
*
* Based on th9x -> http://code.google.com/p/th9x/
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef WINBUILD_H
#define WINBUILD_H
#define PACK( __Declaration__ ) __pragma( pack(push, 1) ) __Declaration__ __pragma( pack(pop) )
#undef FORCEINLINE
#define FORCEINLINE inline
#define NOINLINE
#define strcasecmp _stricmp
#define strncasecmp _tcsnicmp
#define snprintf _snprintf
inline double round(double number)
{
return number < 0.0 ? ceil(number - 0.5) : floor(number + 0.5);
}
#endif
-43
View File
@@ -1,43 +0,0 @@
SET CODE_DIR=%~dp0%
cd %CODE_DIR%
git fetch
git checkout next
git reset --hard origin/next
cd ..
rmdir build /s /q
mkdir build
cd build
cmake -DCMAKE_PREFIX_PATH=C:\Qt\5.6\msvc2015 -DVERSION_SUFFIX=%1 -DPCB=9X %CODE_DIR%
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release
cmake -DCMAKE_PREFIX_PATH=C:\Qt\5.6\msvc2015 -DVERSION_SUFFIX=%1 -DPCB=GRUVIN9X %CODE_DIR%
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release
cmake -DCMAKE_PREFIX_PATH=C:\Qt\5.6\msvc2015 -DVERSION_SUFFIX=%1 -DPCB=MEGA2560 %CODE_DIR%
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release
cmake -DCMAKE_PREFIX_PATH=C:\Qt\5.6\msvc2015 -DVERSION_SUFFIX=%1 -DPCB=SKY9X %CODE_DIR%
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release
cmake -DCMAKE_PREFIX_PATH=C:\Qt\5.6\msvc2015 -DVERSION_SUFFIX=%1 -DPCB=9XRPRO %CODE_DIR%
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release
cmake -DCMAKE_PREFIX_PATH=C:\Qt\5.6\msvc2015 -DVERSION_SUFFIX=%1 -DPCB=TARANIS %CODE_DIR%
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release
cmake -DCMAKE_PREFIX_PATH=C:\Qt\5.6\msvc2015 -DVERSION_SUFFIX=%1 -DPCB=TARANIS -DPCBREV=REVPLUS %CODE_DIR%
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release
cmake -DCMAKE_PREFIX_PATH=C:\Qt\5.6\msvc2015 -DVERSION_SUFFIX=%1 -DPCB=TARANIS -DPCBREV=REV9E %CODE_DIR%
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release
cmake -DCMAKE_PREFIX_PATH=C:\Qt\5.6\msvc2015 -DVERSION_SUFFIX=%1 -DPCB=HORUS %CODE_DIR%
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" radio\src\targets\simu\opentx-simulator.vcxproj /t:Rebuild /p:Configuration=Release
cmake -DCMAKE_PREFIX_PATH=C:\Qt\5.6\msvc2015 -DVERSION_SUFFIX=%1 -DPCB=HORUS %CODE_DIR%
"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe" companion\src\installer.vcxproj /t:Rebuild /p:Configuration=Release
+390 -306
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Before

Width:  |  Height:  |  Size: 873 B

After

Width:  |  Height:  |  Size: 873 B

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before

Width:  |  Height:  |  Size: 978 B

After

Width:  |  Height:  |  Size: 978 B

Before

Width:  |  Height:  |  Size: 674 B

After

Width:  |  Height:  |  Size: 674 B

Before

Width:  |  Height:  |  Size: 814 B

After

Width:  |  Height:  |  Size: 814 B

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Before

Width:  |  Height:  |  Size: 807 B

After

Width:  |  Height:  |  Size: 807 B

Before

Width:  |  Height:  |  Size: 671 B

After

Width:  |  Height:  |  Size: 671 B

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