Compare commits

...

210 Commits

Author SHA1 Message Date
bsongis 3d4a791940 Timers display bug on main view 2014-07-16 19:27:08 +02:00
bsongis 7373ce2cae Better fix for model backups import 2014-07-16 19:07:09 +02:00
Bertrand Songis 5da1e35efe Update DONATIONS.txt 2014-07-16 14:54:42 +02:00
bsongis fe5b7bee8c Fixes #1516 2014-07-16 14:53:36 +02:00
bsongis 2da1134796 Quick & dirty fix to allow open of backup models from Taranis 2014-07-16 14:52:46 +02:00
Damjan Adamic 83e47d9e35 Typo in german translation for "Änderungen" 2014-07-16 10:37:20 +02:00
Damjan Adamic f0c76efaf7 Re #1506 - FAS offest was limited to +-1.5A in Companion, now +-12A (same as radio) 2014-07-16 09:30:44 +02:00
Bertrand Songis 2fe7d856c3 Update DONATIONS.txt 2014-07-16 08:16:13 +02:00
bsongis a7c1f22b36 Missing reference screenshot for 128x64 Smlsize test 2014-07-15 23:47:20 +02:00
bsongis d92620919b SMLSIZE last row missing 2014-07-15 23:14:02 +02:00
Bertrand Songis 94bb21886b Update DONATIONS.txt 2014-07-15 23:13:17 +02:00
bsongis 5db98a3fef SMLSIZE last row missing 2014-07-15 23:03:48 +02:00
Bertrand Songis 763c7fbb7d Update DONATIONS.txt 2014-07-15 22:11:05 +02:00
bsongis b2d1a4ed22 Fixes #1506 - There was an EEPROM shift in vario settings ... 2014-07-15 16:04:26 +02:00
bsongis e7211065ab Function duplicated 2014-07-15 16:04:26 +02:00
bsongis 68b8b0e38f make clean didn't remove lbm files on Windows (because find doesn't work
correctly)
2014-07-15 16:04:26 +02:00
bsongis 644c833311 Inverted DBLSIZE was one row too big on Taranis 2014-07-15 16:04:26 +02:00
bsongis 30b1f62e99 Fonts improvement on 9XR-PRO / Sky9x 2014-07-15 16:04:26 +02:00
Bertrand Songis 03aa787c8e Update DONATIONS.txt 2014-07-15 14:01:51 +02:00
bsongis 79592d3b00 Fixes #1506 2014-07-15 13:27:05 +02:00
Bertrand Songis 7ed527a328 Update DONATIONS.txt 2014-07-15 13:15:09 +02:00
bsongis 3e0766f2bf Missing sticks reset in google tests (stick position reused in next
tests)
2014-07-15 09:19:22 +02:00
bsongis 71e7926045 Release notes updated #1508 2014-07-15 08:51:18 +02:00
bsongis 8c3d47deac Instant Trim automatic tests - Issue #1508 2014-07-15 08:49:55 +02:00
bsongis 197f31d5a1 Fixes #1508 - Needs another non regression test 2014-07-14 23:41:37 +02:00
Bertrand Songis 1a198c35ad Update DONATIONS.txt 2014-07-14 22:31:15 +02:00
Bertrand Songis 2934fc4d23 Merge pull request #1513 from opentx/projectkk2glider/issue_1510
Re #1510 - This might be a better warning message
2014-07-14 21:26:09 +02:00
Damjan Adamic 4ae9585080 Re #1510 - Added switches warning, better protocol warnings and limited display to max 10 warnings 2014-07-14 20:11:21 +02:00
Damjan Adamic 161016a02a Bad string "Write Backup from file to to Radio" fixed 2014-07-14 19:16:53 +02:00
Damjan Adamic 559bb83864 Re #1510 - This might be a better warning message 2014-07-14 19:13:39 +02:00
bsongis 9a37c3027e Release notes updated 2014-07-14 18:32:17 +02:00
bsongis 6548afcad3 Fixes #1510 - The warning is not very explicit, but at least it is there
...
2014-07-14 18:26:36 +02:00
bsongis ee31c51275 9XR-PRO / Sky9x compilation failure when BOLD=NO 2014-07-14 17:50:01 +02:00
bsongis 63aadad10c Preparation for 2.0.7 2014-07-14 08:11:02 +02:00
bsongis 30958a9a65 I forgot to include this in Companion. Should be ok in the Tx though 2014-07-14 01:42:42 +02:00
bsongis 995183bf22 Compilation error when no gauges 2014-07-14 01:06:54 +02:00
Bertrand Songis 99fedb081e Update DONATIONS.txt 2014-07-13 20:24:07 +02:00
Damjan Adamic cc934c3ac0 Gtest updated according to 28c900e3f7 hack 2014-07-13 15:44:00 +02:00
Damjan Adamic c1d789d004 Fixes #1494 2014-07-13 15:41:18 +02:00
Andre Bernet 4d945b5d95 DSM2=SERIAL was broken if EXT!=FRSKY (fix #1498) 2014-07-13 15:26:14 +02:00
Andre Bernet 28c900e3f7 Dirty hack to filter out bogus cell values from FLVSS... 2014-07-13 14:48:12 +02:00
Damjan Adamic b41ba50b53 Removed raw member that was introduced in commit 3f39352d95. Its role now plays last member of values[] array. Same RAM usage, reduced FLASH usage. 2014-07-13 14:44:42 +02:00
Damjan Adamic 2d22c18758 Added RAW_FRSKY_MINMAX() macro for access to the raw telemetry value and gtests for it 2014-07-13 14:35:15 +02:00
Damjan Adamic 8ce05b3284 Data from tow FLVSS sensors and parsing program for sport.log 2014-07-13 12:18:40 +02:00
bsongis 6d18820b53 Added a new test with real logs from FLVSS. It seems there is a bug on
the FLVSS :(
2014-07-11 23:53:36 +02:00
Bertrand Songis 58ed329ac2 Update DONATIONS.txt 2014-07-11 14:23:12 +02:00
bsongis 2e0858bc0c Whole Cells telemetry info not updated after Telemetry Reset 2014-07-11 12:22:54 +02:00
bsongis 7c9636c58c I try this for #1444, if needed we will revert 2014-07-11 11:40:42 +02:00
Bertrand Songis 9dbd1326da Update DONATIONS.txt 2014-07-11 10:29:24 +02:00
Damjan Adamic 4c82d12c1a Re #1481 - added gtests for SPort FAS sensor 2014-07-10 11:32:04 +02:00
Bertrand Songis 972685bc15 Merge pull request #1477 from opentx/projectkk2glider/cells_gtests
Tests and support for second FLVSS
2014-07-10 09:56:11 +02:00
bsongis 00f8b97ee4 Fixes #1478 2014-07-10 09:32:10 +02:00
bsongis 0b7bbbbdbd Fixes #1475 2014-07-10 09:04:33 +02:00
bsongis 47bc3e896c Fixes #1481 2014-07-10 08:08:33 +02:00
bsongis 904249b2dc Fixes #1478 2014-07-10 08:06:48 +02:00
Damjan Adamic 3700047d2c Re #1409 and #1444:
* added support for two FLVSS
* added gtests for FLVSS
2014-07-09 14:18:39 +02:00
Romolo Manfredini d44e851648 Fix problems with libpng 2014-07-09 13:04:51 +02:00
bsongis 1be75735be Fixes #1476 2014-07-09 09:53:04 +02:00
Bertrand Songis 7da72240a3 Update DONATIONS.txt 2014-07-09 00:17:18 +02:00
bsongis 9357c951f1 Fixes #1474 - I am not happy with this fix, but I don't want to modify
the font right now
2014-07-08 22:05:56 +02:00
Bertrand Songis 1afeb9f977 Merge pull request #1473 from opentx/MicheleVilla/FW_Translation
Update it.h.txt
2014-07-08 19:19:35 +02:00
Michele 000e55725c Update it.h.txt 2014-07-08 18:39:53 +02:00
bsongis 38e342b27b Cosmetics in the voltages screen. Cells, Cells-, Cell, Cell- tested, it
works.
2014-07-08 13:16:37 +02:00
bsongis 3e9064e2e2 2.0.6 preparation 2014-07-08 12:03:48 +02:00
bsongis 2d764e73fd Cosmetics 2014-07-08 11:39:27 +02:00
bsongis f8efcf420a 200 extra bytes used on 9x with FRSKY_HUB option. I return to previous
implementation. Only ARM boards will have the extra features.
2014-07-08 11:38:47 +02:00
bsongis cf546a2341 Refactoring FLVSS - only one sensor for now 2014-07-08 11:02:00 +02:00
Bertrand Songis 87a4f3526b Merge pull request #1465 from opentx/projectkk2glider/reimplementation_of_1443
Projectkk2glider/reimplementation of 1443
2014-07-08 08:26:32 +02:00
bsongis 6b49119af7 getValue(...) Lua identifiers more consistent 2014-07-08 08:04:05 +02:00
bsongis 4c6314331d The compilation server complains with pl language ... 2014-07-07 23:10:26 +02:00
Bertrand Songis 55ab067a0c Merge pull request #1468 from opentx/projectkk2glider/issue_1457
Projectkk2glider/issue 1457
2014-07-07 22:58:42 +02:00
bsongis 3fc18b1cf7 Fixes #1467 - Check your mixes on Sky9x / 9XR-PRO especially if you used
mix warnings!
2014-07-07 22:55:52 +02:00
bsongis f2f8419da1 I forgot to remove the persistent toggled handler 2014-07-07 21:45:51 +02:00
Damjan Adamic 365c2f9e34 Re #1457 - cleanup 2014-07-07 21:38:55 +02:00
bsongis 01fde3db27 Some TODOs removed 2014-07-07 20:56:40 +02:00
Damjan Adamic d743ed9645 Forgoten makefile for split gtests 2014-07-07 19:54:55 +02:00
Damjan Adamic dd67811638 Cosmetics 2014-07-07 19:49:18 +02:00
Damjan Adamic ebe4f6a365 Gtests split into several source files 2014-07-07 19:23:43 +02:00
Damjan Adamic b4e816b784 Re #1443 - Reverting back d675ab1578 with some improvements:
* when telemetry is not streaming all logical switches that involve telemetry value evaluate to FALSE (same as before the change in above commit)
* the duration and delay processing is now enabled for such logical switches (new functionality that was not present before above commit)
2014-07-07 19:18:18 +02:00
bsongis 2798fa7ba9 Fixes #1451 2014-07-07 18:03:48 +02:00
Damjan Adamic ee077a06e6 Re #1464 - added test: "L1 Vfas < 9.6 Delay (0.5s)" 2014-07-07 15:48:46 +02:00
Romolo Manfredini 8f73e9bde0 Fix warnings with libpng 2014-07-07 12:57:33 +02:00
Romolo Manfredini 45d8fca125 Merge origin/next into next 2014-07-07 12:38:13 +02:00
Romolo Manfredini 2bc6c1e754 Fix warnings with libpng 2014-07-07 12:37:10 +02:00
bsongis 39a0feae3b Fixes #1463 2014-07-07 12:19:28 +02:00
bsongis ad7da779c7 Curves in Mixes were not correctly restored on Companion for Sky9x
boards
2014-07-07 07:21:12 +02:00
bsongis 23cafa84f2 Fixes #1392 2014-07-06 23:37:13 +02:00
Damjan Adamic a20e5aee3b Re #1457 - added display of channels 17-32 to Companion simulator 2014-07-06 19:50:42 +02:00
bsongis fa3c50df8e Fixes #1458 2014-07-06 18:58:34 +02:00
bsongis 81eb9326eb Fixes #1461 2014-07-06 18:40:02 +02:00
bsongis 7c71d56383 Fixes #1451 2014-07-06 17:46:16 +02:00
Bertrand Songis 5109a2d7c1 Merge pull request #1460 from opentx/projectkk2glider/issue_1458
Fixes #1458 - Incorrect display of free mem on statistics page
2014-07-06 13:23:08 +02:00
bsongis 82cc799afe Fixes #1458 - 64k was hardcoded 2014-07-06 13:09:33 +02:00
Damjan Adamic 88bb28e3f1 Re #1458 - added gtest for big numbers (>uint16_t) 2014-07-06 09:25:38 +02:00
Damjan Adamic f4fdc233c0 Re #1458 - Forgoten files for new gtest 2014-07-06 09:14:20 +02:00
Damjan Adamic 7130e48089 Re #1458 - the cast is back, but cast to different type depending on platform. Gtest modernized. 2014-07-06 09:11:29 +02:00
Damjan Adamic ed094f89e8 Fixes #1458 - Incorrect display of free mem on statistics page
lcd_outdezNAtt() on ARM was casting values to uint16_t.
2014-07-06 08:49:35 +02:00
bsongis 58f81b193b PPM polarity was inverted in Companion PrintDialog and CompareDialog 2014-07-05 23:17:57 +02:00
Damjan Adamic 50122d4ee1 Bad indentation 2014-07-05 19:43:31 +02:00
bsongis f66388c1d3 LCD asynchronous refresh prepared for Taranis+ 2014-07-05 19:32:00 +02:00
Bertrand Songis 838190ce80 Merge pull request #1455 from opentx/projectkk2glider/issue_1440
Fixes #1440 - Logical switches state not reset after model load
2014-07-05 19:22:42 +02:00
Damjan Adamic 1bc04db9cd gtest only for Taranis (thanks Jenkins) 2014-07-05 19:20:56 +02:00
Damjan Adamic 30a68cf170 Fixes #1440 - Logical switches state not reset after model load:
* logical switches reset not called anymore when user selects "Reset Flight", but only after model load
* logical switches reset now includes a reset of switches state (set to false)
2014-07-05 19:11:16 +02:00
bsongis ec8c207631 Cosmetics 2014-07-05 19:07:32 +02:00
bsongis 9337080307 Hardware SPI used for the Taranis+ LCD. Thanks Mike! 2014-07-05 19:03:11 +02:00
bsongis 8200164797 LCD contrast was set before lcdInit on Taranis 2014-07-05 19:03:11 +02:00
Damjan Adamic 7d85d40f68 Fixes #1452 - Backlight simulation 2014-07-05 17:08:56 +02:00
bsongis 5d23135b0d DBLSIZE restrictions on 9x make the gtests fail 2014-07-05 15:46:26 +02:00
bsongis be6f1587ed Display problems on Sky9x 2014-07-05 15:37:49 +02:00
bsongis c184ddd996 Fixes #1447 - Needs tests 2014-07-05 11:32:22 +02:00
bsongis c903bbcb13 Issue #1428 - SafetyCH changed to OverrideCH on Taranis 2014-07-04 16:53:50 +02:00
Andre Bernet 9b008ded21 Merge pull request #1446 from opentx/bsongis/Taranis+_LCD_refactoring
Bsongis/taranis+ lcd refactoring
2014-07-04 15:33:35 +02:00
bsongis 6f79de6cae Fixes the grayscale inversion on Taranis (not Plus) 2014-07-04 15:20:36 +02:00
bsongis 711b54c98e Fixes #1436 - Be careful, there is a conversion on M128/gruvin9x boards,
L13, L14 and L15 are removed
2014-07-04 12:23:08 +02:00
bsongis 6876718d72 The top bar was a little bit too dark 2014-07-04 11:53:59 +02:00
bsongis 4ffb9f69c6 Taranis LCD functions refactoring 2014-07-04 11:53:29 +02:00
Bertrand Songis b8a6548686 Merge pull request #1442 from opentx/projectkk2glider/total_timer_fixes
Bug fix and refactoring of globalTimer
2014-07-04 11:23:00 +02:00
Damjan Adamic 8c010277c9 Renamed s_timeCumTot to sessionTimer 2014-07-04 11:09:30 +02:00
Bertrand Songis f30e3db1ef Merge pull request #1443 from opentx/projectkk2glider/telemetry_ls_duration_bug
Fixes a bug for case: telemetry values used in logical switches and they...
2014-07-04 10:19:15 +02:00
Damjan Adamic d675ab1578 Fixes a bug for case: telemetry values used in logical switches and they have a duration and/or delay set. 2014-07-03 20:50:31 +02:00
Damjan Adamic b6cbde48be Removed sessionTimer and replaced with existing s_timeCumTot.
Corrected bug when saving g_eeGeneral.globalTimer (missing reset of session timer and eeprom dirty)
2014-07-03 19:14:15 +02:00
Bertrand Songis 1fef79ce80 Update DONATIONS.txt 2014-07-03 14:07:56 +02:00
Bertrand Songis 4f03ae75c5 Merge pull request #1438 from opentx/driver13/PL_TR
translation fixes
2014-07-03 09:47:11 +02:00
Jacek Drewniak 34850fb73d translation fixes 2014-07-03 09:06:41 +02:00
Bertrand Songis ee05f7f80e Update DONATIONS.txt 2014-07-02 23:58:49 +02:00
bsongis 83614359aa Fixes #1434 2014-07-02 23:26:55 +02:00
bsongis 17a2865070 Fixes #1424 2014-07-02 21:50:25 +02:00
bsongis e3866fda45 Fixes #1395 2014-07-02 21:38:05 +02:00
bsongis 81ed325830 Fixes #1422 2014-07-02 17:49:15 +02:00
Bertrand Songis 36e78b9315 Merge pull request #1429 from opentx/projectkk2glider/frsky_refactoring
Projectkk2glider/frsky refactoring
2014-07-02 16:36:54 +02:00
bsongis 6716482ae4 Fixes #1428 2014-07-02 16:34:26 +02:00
Damjan Adamic 7e758ce7ad Wrong type corrected and cosmetic fixes 2014-07-02 16:08:31 +02:00
bsongis 63fe996ebc Fixes #1427 - M badly displayed when SMLSIZE font used 2014-07-02 15:28:34 +02:00
Damjan Adamic 038365e639 Introduced frskyCellVoltage_t type and united code with frskyUpdateCells() 2014-07-02 12:57:36 +02:00
bsongis c3aebfa239 Fixes #1425 2014-07-02 12:25:28 +02:00
Damjan Adamic e6370ebb2a United setting of cell voltage in frskySetCellVoltage() 2014-07-02 12:24:19 +02:00
bsongis 1e25e368d2 #1397 fix continued 2014-07-02 11:17:33 +02:00
Damjan Adamic 645350a1a2 Fixes #1397 - Refactored telemetry view page navigation, long PAGE key press now cycles in oposite direction 2014-07-02 11:17:33 +02:00
Bertrand Songis dd927e6761 Merge pull request #1423 from opentx/projectkk2glider/missing_minCell
Projectkk2glider/missing min cell
2014-07-02 09:50:57 +02:00
Damjan Adamic 713b2e2cf5 Added missing frskyData.hub.minCell update if using SPORT FLVS sensor 2014-07-02 09:41:25 +02:00
Damjan Adamic 7a02e57dcf Cells initialization in simulator 2014-07-02 09:40:30 +02:00
Bertrand Songis 724949b8fc Merge pull request #1417 from opentx/MicheleVilla/IT_TranslationFW
Update it.h.txt
2014-07-02 09:27:03 +02:00
bsongis 1f5295db9c Compilation problem (thanks Jenkins) 2014-07-01 23:08:54 +02:00
bsongis 72ef865c10 Prevents lines from wrapping when writing text 2014-07-01 22:53:28 +02:00
bsongis be0ebe833c Sleep a little bit more between read eeprom / flash / write eeprom on 9x
/ 9xr
2014-07-01 22:53:28 +02:00
bsongis 57b08fb064 Fixes #1362 2014-07-01 22:53:28 +02:00
bsongis 7162ab5399 Warning raised by Valgrind 2014-07-01 22:53:27 +02:00
Michele 4eb44837f3 Update it.h.txt
One change in Italian translation
2014-07-01 22:07:33 +02:00
Damjan Adamic 194a635800 Ups, forgot a bit of debugging code 2014-07-01 21:56:06 +02:00
Damjan Adamic e4314004a8 ACCURAT_THROTTLE_TIMER was lost when splitting code into mixers.cpp in 2fbd4ff13a 2014-07-01 21:53:56 +02:00
bsongis 74534b74c2 Fixes #1415 2014-07-01 19:02:34 +02:00
bsongis 59eb020eb1 getGeneralSettings(), lcd.getLastPos() and lcd.drawGauge() added 2014-07-01 18:06:37 +02:00
bsongis 1d1a815ef7 lcd.drawChannel(...) added. Possibility to write telemetry values using
different sizes
2014-07-01 17:36:39 +02:00
Bertrand Songis 4088abaafb Merge pull request #1413 from opentx/projectkk2glider/telemetry_enhancements
Unfiltered value used for writing into telemetry log
2014-07-01 16:01:03 +02:00
bsongis 9333f3778f The check on the BL size was wrong as it didn't take care of the
_bootStart() function size
2014-07-01 15:59:45 +02:00
Damjan Adamic 070a133cd5 Merge branch 'next-upstream' 2014-07-01 15:45:35 +02:00
Damjan Adamic 74f4f99280 Added regresion test for FrskyValueWithMin averaging algorithm 2014-07-01 15:40:12 +02:00
Damjan Adamic 66848156a8 Removed test code 2014-07-01 15:32:17 +02:00
bsongis 74dfd64e29 The background function is not anymore mandatory in Telemetry scripts 2014-07-01 14:45:39 +02:00
Bertrand Songis ef0b81cd2d Update DONATIONS.txt 2014-07-01 14:40:26 +02:00
bsongis 09842fe531 Telemetry "voltages" and "after flight" screens may be overriden by
telempw.lua and telemaf.lua
2014-07-01 12:10:17 +02:00
bsongis 3c93699f8f Ignore list updated 2014-07-01 11:39:44 +02:00
bsongis a9dd0d0dfb Taranis+ LCD driver a little bit improved 2014-07-01 11:39:01 +02:00
Bertrand Songis 013e6925dc Update DONATIONS.txt 2014-07-01 09:10:04 +02:00
bsongis 591ccfd25f Cosmetics 2014-07-01 08:06:22 +02:00
bsongis b0bdaf6b65 Warning removed 2014-07-01 08:06:22 +02:00
Bertrand Songis f77e6370cf Merge pull request #1412 from opentx/projectkk2glider/issue_1407
Fixes #1407 - Strange input interaction when Throttle trim idle only
2014-06-30 22:44:04 +02:00
Bertrand Songis ce70efa31d Update DONATIONS.txt 2014-06-30 22:31:39 +02:00
bsongis 3a7fe01950 Taranis+ LCD driver is now working! 2014-06-30 22:24:04 +02:00
Damjan Adamic 3f39352d95 Reduced the size of averaging buffer and introduced a raw (unfiltered) value. Averaged value is same as before, but one byte saved per class instance. Unfiltered value is used for writing into telemetry log. 2014-06-30 21:12:01 +02:00
Damjan Adamic d38c02f847 Fixes #1403 - "make clean PCB=TARANIS" deletes necessary source file 2014-06-30 17:58:05 +02:00
Bertrand Songis 2dddd76320 Fixes #1410 2014-06-30 17:57:28 +02:00
bsongis 391e6a867f It's easier to check gtests screenshots with the right filenames 2014-06-30 17:43:33 +02:00
bsongis 1df8b5f5c1 Fixes #1358 2014-06-30 17:43:33 +02:00
bsongis 6913c8e7e5 Cosmetics 2014-06-30 17:43:33 +02:00
bsongis aab03a2b9f BIGBIG font added 2014-06-30 17:43:33 +02:00
Damjan Adamic a83c6c8a0c Fixes #1408 - Move down in Inputs tab not working 2014-06-30 17:24:36 +02:00
Damjan Adamic b5cdd60367 Fixes #1407 - Strange input interaction when Throttle trim idle only 2014-06-30 17:03:59 +02:00
Bertrand Songis 5453ff5678 Update DONATIONS.txt 2014-06-30 17:00:09 +02:00
Bertrand Songis 7b69fb2f79 Update DONATIONS.txt 2014-06-30 16:12:46 +02:00
bsongis 19ac5d3038 New LCD tests added 2014-06-30 16:09:10 +02:00
bsongis 4b64862cf2 New automatic tests added for the LCD 2014-06-30 15:55:19 +02:00
bsongis f643f0be85 Mike's Taranis+ lcd driver 2014-06-30 12:08:01 +02:00
bsongis 0e0b1792e4 switchState function is not needed in the bootloader 2014-06-30 12:07:04 +02:00
bsongis f81c31510b Fixes #1385 2014-06-30 11:27:46 +02:00
bsongis 5c3bd1faf9 Fixes #1389 2014-06-30 11:17:16 +02:00
bsongis 90cf98465b No Telemetry tab in Companion when the firmware doesn't need it 2014-06-30 11:15:26 +02:00
bsongis 1dd47484d4 Stack alignment change doesn't compile on VC++ 2014-06-30 11:15:26 +02:00
Kjell Kernen bd4a85c6a7 Swedish Companion translation 2014-06-30 11:07:04 +02:00
Kjell Kernen b6520e2db6 Finnish Companion translation from Janne Huuskonen 2014-06-30 11:02:12 +02:00
Bertrand Songis 0ea114b219 Merge pull request #1400 from opentx/projectkk2glider/issue_1399
Fixes #1399 - Option to hide inv parameter effect in the channel monitor
2014-06-30 00:39:59 +02:00
Bertrand Songis e36f54eda5 Merge pull request #1401 from opentx/projectkk2glider/lua_stuff
Projectkk2glider/lua stuff
2014-06-30 00:26:41 +02:00
Bertrand Songis d983404656 Update DONATIONS.txt 2014-06-30 00:22:53 +02:00
Bertrand Songis 677b50d39c Update DONATIONS.txt 2014-06-30 00:21:48 +02:00
Damjan Adamic e5ae504bae Fixes #1394 - Taranis GPS Speed still 120km/h limited 2014-06-29 20:31:59 +02:00
Damjan Adamic ce302aae60 Fixes #1338 - Extend limits - Companion (scale bug) 2014-06-29 17:57:56 +02:00
Damjan Adamic b0869fccfc Re #1358 - defined PREC2 in Lua 2014-06-29 14:29:22 +02:00
Damjan Adamic 17ab12f7bf Added missing eeDirty(EE_MODEL) 2014-06-29 14:26:39 +02:00
Damjan Adamic 816f9ce8a0 Fixes #1388 -New Lua functions: model.getInfo() and model.setInfo() 2014-06-29 13:54:50 +02:00
Damjan Adamic 5fb41eb32f Fixes #1396 - Special functions, adjust GV1 Source CHxx not saved in .eepe file (on AVR platforms) 2014-06-29 13:08:28 +02:00
Damjan Adamic c687e20fff Fixes #1390 - hide switches !SHup, !SHdown, !SFup and !SFdown for Taranis 2014-06-29 12:43:34 +02:00
Damjan Adamic c5aa691467 Fixes #1399 - Option to hide inv parameter effect in the channel monitor 2014-06-29 12:00:29 +02:00
Andre Bernet a3d7c694ef Merge pull request #1391 from opentx/driver33/PL_TR
fixes
2014-06-27 23:58:19 +02:00
Jacek Drewniak 2c8b51c9d6 fixes 2014-06-27 23:27:43 +02:00
Andre Bernet a518a34055 String lengths corrected 2014-06-27 16:44:01 +02:00
Andre Bernet 4d3ca7e82e No DBLKEYS on 9XR-PRo 2014-06-27 16:41:30 +02:00
Andre Bernet 98c756a6d2 Remove orphan "tsticks" option 2014-06-27 16:37:11 +02:00
Andre Bernet 84d5c6c4b0 9XR-Pro in standalone simu 2014-06-27 16:28:27 +02:00
Damjan Adamic 935458caa4 No time on full EEPROM backup (reverted from commit e3b8e91a0a) 2014-06-27 08:48:53 +02:00
Bertrand Songis dcec97411e Update DONATIONS.txt 2014-06-27 07:11:16 +02:00
330 changed files with 8954 additions and 8351 deletions
+25
View File
@@ -500,3 +500,28 @@ Emay Toha
Kamco Enterprises
Peter Mueller
Giovanni Trentini
Cecil Porter
Robert Canavan
Greg Higginbottom
Tim Walker
Thos. O'Meara Photography
Spis Ltd/TurboNote
Patricia Cox
Matthew Lukes
Sabine Witte
Phillip Perry
Beat Zurflueh
Russell Stutzman
Dietmar Drees
Kenneth Ward
Jens Lochmüller
Anthony Witham
Peter Hauke
Arizona Action Photos
Francis F Dale
Willie Swanepoel
Edward Hauser
Adilson Oliveira
Joseph Ordille
Michael Shellim
Teddie Holmes
+16
View File
@@ -1,3 +1,19 @@
<h2>Version 2.0.7</h2>
<ul>
<li>SafetyCH function was missing in simulator</li>
<li>EEPROM export warning when exporting logical switches > L12 on 9X128</li>
<li>FAS offset was not exported on 9X/9XR boards</li>
<li>Trims modes bugfix on non Taranis boards</li>
<li>It was impossible to open a backuped model from the Tx</li>
</ul>
<h2>Version 2.0.6</h2>
<ul>
<li>Fix Mix curves bug on Sky9x boards</li>
<li>Channels 17-32 are displayed in the simulator</li>
<li>Backlight simulation bugfix</li>
</ul>
<h2>Version 2.0.5</h2>
<ul>
<li>Fix crash on startup</li>
+1 -1
View File
@@ -2,7 +2,7 @@ PROJECT( companion )
SET( C9X_VERSION_MAJOR "2" )
SET( C9X_VERSION_MINOR "0" )
SET( C9X_VERSION_REVISION "5" )
SET( C9X_VERSION_REVISION "7" )
SET( C9X_VERSION ${C9X_VERSION_MAJOR}.${C9X_VERSION_MINOR}.${C9X_VERSION_REVISION} )
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 )
+4 -4
View File
@@ -256,8 +256,8 @@ void CompareDialog::printSetup()
str.append(fv(tr("Timer2"), getTimerStr(g_model1->timers[1]), color)); //value, mode, count up/down
color=getColor1(getProtocol(g_model1),getProtocol(g_model2));
str.append(fv(tr("Protocol"), getProtocol(g_model1), color)); //proto, numch, delay,
color=getColor1(g_model1->moduleData[0].ppmPulsePol,g_model2->moduleData[0].ppmPulsePol);
str.append(fv(tr("Pulse Polarity"), g_model1->moduleData[0].ppmPulsePol ? "NEG" : "POS", color));
color=getColor1(g_model1->moduleData[0].ppmPulsePol, g_model2->moduleData[0].ppmPulsePol);
str.append(fv(tr("Pulse Polarity"), g_model1->moduleData[0].polarityToString(), color));
color=getColor1(g_model1->thrTrim,g_model2->thrTrim);
str.append(fv(tr("Throttle Trim"), g_model1->thrTrim ? tr("Enabled") : tr("Disabled"), color));
color=getColor1(g_model1->thrExpo,g_model2->thrExpo);
@@ -279,8 +279,8 @@ void CompareDialog::printSetup()
str.append(fv(tr("Timer2"), getTimerStr(g_model2->timers[1]),color)); //value, mode, count up/down
color=getColor2(getProtocol(g_model1),getProtocol(g_model2));
str.append(fv(tr("Protocol"), getProtocol(g_model2), color)); //proto, numch, delay,
color=getColor2(g_model1->moduleData[0].ppmPulsePol,g_model2->moduleData[0].ppmPulsePol);
str.append(fv(tr("Pulse Polarity"), g_model2->moduleData[0].ppmPulsePol ? "NEG" : "POS", color));
color=getColor2(g_model1->moduleData[0].ppmPulsePol, g_model2->moduleData[0].ppmPulsePol);
str.append(fv(tr("Pulse Polarity"), g_model2->moduleData[0].polarityToString(), color));
color=getColor2(g_model1->thrTrim,g_model2->thrTrim);
str.append(fv(tr("Throttle Trim"), g_model2->thrTrim ? tr("Enabled") : tr("Disabled"), color));
color=getColor2(g_model1->thrExpo,g_model2->thrExpo);
+1 -1
View File
@@ -648,7 +648,7 @@ class ConversionField: public TransformedField {
if (table->exportValue(_field, _field))
return;
if (!error.isEmpty())
EEPROMWarnings += error + "\n";
EEPROMWarnings.push_back(error);
}
if (shift) {
+21 -84
View File
@@ -12,7 +12,7 @@
#include "helpers.h"
#include "wizarddata.h"
QString EEPROMWarnings;
std::list<QString> EEPROMWarnings;
const char * switches9X[] = { "3POS", "THR", "RUD", "ELE", "AIL", "GEA", "TRN" };
const char * switchesX9D[] = { "SA", "SB", "SC", "SD", "SE", "SF", "SG", "SH" };
@@ -186,6 +186,20 @@ RawSourceRange RawSource::getRange(const ModelData & model, const GeneralSetting
break;
case TELEMETRY_SOURCE_ASPEED:
case TELEMETRY_SOURCE_ASPEED_MAX:
result.decimals = 1;
result.step = singleprec ? 2.0 : 0.1;
result.max = singleprec ? (2*255) : 2000;
if (firmware->getCapability(Imperial) || settings.imperial) {
result.step *= 1.150779;
result.max *= 1.150779;
result.unit = QObject::tr("mph");
}
else {
result.step *= 1.852;
result.max *= 1.852;
result.unit = QObject::tr("km/h");
}
break;
case TELEMETRY_SOURCE_SPEED:
case TELEMETRY_SOURCE_SPEED_MAX:
result.step = singleprec ? 2 : 1;
@@ -698,92 +712,13 @@ QString LogicalSwitchData::toString(const ModelData & model, const GeneralSettin
return result;
}
#if 0
QStringList FuncSwData::toStringList()
void FuncSwData::clear()
{
QStringList result;
QStringList qs;
result << swtch.toString();
result << funcToString();
if (func < FuncInstantTrim) {
result << QString("%1").arg(param);
memset(this, 0, sizeof(FuncSwData));
if (!GetCurrentFirmware()->getCapability(SafetyChannelCustomFunction)) {
func = FuncTrainer;
}
else if (func==FuncPlaySound) {
qs <<"Beep 1" << "Beep 2" << "Beep 3" << "Warn1" << "Warn2" << "Cheep" << "Ratata" << "Tick" << "Siren" << "Ring" ;
qs << "SciFi" << "Robot" << "Chirp" << "Tada" << "Crickt" << "AlmClk" ;
if (param>=0 && param<(int)qs.count())
result << qs.at(param);
else
result << QObject::tr("<font color=red><b>Inconsistent parameter</b></font>");
}
else if (func==FuncPlayHaptic) {
qs << "0" << "1" << "2" << "3";
if (param>=0 && param<(int)qs.count())
result << qs.at(param);
else
result << QObject::tr("<font color=red><b>Inconsistent parameter</b></font>");
}
else if (func==FuncReset) {
qs.append( QObject::tr("Timer1"));
qs.append( QObject::tr("Timer2"));
qs.append( QObject::tr("All"));
qs.append( QObject::tr("Telemetry"));
if (param>=0 && param<(int)qs.count())
result << qs.at(param);
else
result << QObject::tr("<font color=red><b>Inconsistent parameter</b></font>");
}
else if ((func==FuncVolume)|| (func==FuncPlayValue)) {
RawSource item(param);
result << item.toString();
}
else if ((func==FuncPlayPrompt) || (func==FuncPlayBoth)) {
if ( GetCurrentFirmware()->getCapability(VoicesAsNumbers)) {
result << QString("%1").arg(param);
} else {
result << paramarm;
}
}
else if ((func>FuncBackgroundMusicPause) && (func<FuncCount)) {
switch (adjustMode) {
case 0:
result << QObject::tr("Value ")+QString("%1").arg(param);
break;
case 1:
result << RawSource(param).toString();
break;
case 2:
result << RawSource(param).toString();
break;
case 3:
if (param==0) {
result << QObject::tr("Decr:")+QString(" -1");
}
else {
result << QObject::tr("Incr:")+QString(" +1");
}
break;
default:
break;
}
}
if (func==FuncPlaySound || func==FuncPlayHaptic || func==FuncPlayValue || func==FuncPlayPrompt || func==FuncPlayBoth || func==FuncBackgroundMusic) {
str.append(doTC(QString("%1").arg(g_model->funcSw[i].repeatParam),"green"));
} else {
str.append(doTC( "&nbsp;","green"));
}
if ((index<=FuncInstantTrim) || (index>FuncBackgroundMusicPause)) {
str.append(doTC((g_model->funcSw[i].enabled ? "ON" : "OFF"),"green"));
} else {
str.append(doTC( "---","green"));
}
return result;
}
#endif
QString FuncSwData::funcToString()
{
@@ -1201,6 +1136,8 @@ void ModelData::clear()
expoData[i].clear();
for (int i=0; i<C9X_NUM_CSW; i++)
customSw[i].clear();
for (int i=0; i<C9X_MAX_CUSTOM_FUNCTIONS; i++)
funcSw[i].clear();
for (int i=0; i<C9X_MAX_CURVES; i++)
curves[i].clear(5);
for (int i=0; i<2; i++)
+5 -3
View File
@@ -760,7 +760,7 @@ class FuncSwData { // Function Switches data
unsigned int enabled; // TODO perhaps not any more the right name
unsigned int adjustMode;
int repeatParam;
void clear() { memset(this, 0, sizeof(FuncSwData)); }
void clear();
QString funcToString();
QString paramToString();
QString repeatToString();
@@ -918,7 +918,7 @@ class TimerData {
unsigned int countdownBeep;
bool dir; // 0=>Count Down, 1=>Count Up
unsigned int val;
bool persistent;
unsigned int persistent;
int pvalue;
void clear() { memset(this, 0, sizeof(TimerData)); mode = RawSwitch(SWITCH_TYPE_TIMER_MODE, 0); }
};
@@ -954,6 +954,7 @@ class ModuleData {
bool ppmPulsePol; // false = positive
int ppmFrameLength;
void clear() { memset(this, 0, sizeof(ModuleData)); }
QString polarityToString() { return ppmPulsePol ? QObject::tr("Positive") : QObject::tr("Negative"); }
};
#define C9X_MAX_SCRIPTS 7
@@ -1063,6 +1064,7 @@ enum Capability {
Timers,
TimeDivisions,
CustomFunctions,
SafetyChannelCustomFunction,
VoicesAsNumbers,
VoicesMaxLength,
ModelVoice,
@@ -1196,7 +1198,7 @@ class EEPROMInterface
};
extern QString EEPROMWarnings;
extern std::list<QString> EEPROMWarnings;
/* EEPROM string conversion functions */
void setEEPROMString(char *dst, const char *src, int size);
+51
View File
@@ -344,6 +344,57 @@ unsigned int RleFile::readRlc12(uint8_t *buf, unsigned int i_len, bool rlc2)
}
}
unsigned int importRlc(QByteArray & dst, QByteArray & src, unsigned int rlcVersion)
{
uint8_t *buf = (uint8_t *)src.data();
unsigned int len = src.size();
uint8_t zeroes = 0;
uint8_t bRlc = 0;
dst.resize(0);
for( ; 1; ) {
for (int i=0; i<zeroes; i++)
dst.append((char)0);
zeroes = 0;
if (len == 0)
return dst.size();
for (int i=0; i<bRlc; i++) {
dst.append(*buf++);
if (--len == 0)
return dst.size();
}
bRlc = *buf++;
--len;
if (!(bRlc & 0x7f)) {
qDebug() << "RLC decoding error!";
return 0;
}
if (rlcVersion == 2) {
if (bRlc&0x80){ // if contains high byte
zeroes = (bRlc>>4) & 0x07;
bRlc = bRlc & 0x0f;
}
else if (bRlc&0x40){
zeroes = bRlc & 0x3f;
bRlc = 0;
}
}
else {
if (bRlc&0x80){ // if contains high byte
zeroes = bRlc & 0x7f;
bRlc = 0;
}
}
}
return dst.size();
}
unsigned int RleFile::write1(uint8_t b)
{
return write(&b, 1);
+2
View File
@@ -146,4 +146,6 @@ public:
unsigned int get_current_block_number(unsigned int block_no, uint16_t *p_size);
};
unsigned int importRlc(QByteArray & dst, QByteArray & src, unsigned int rlcVersion=2);
#endif
@@ -149,7 +149,7 @@ t_Open9xArmExpoData_v208::operator ExpoData ()
c9x.chn = chn;
if (expo!=0 && curve!=0) {
EEPROMWarnings += ::QObject::tr("Simultaneous usage of expo and curves is no longer supported") + "\n";
EEPROMWarnings.push_back(::QObject::tr("Simultaneous usage of expo and curves is no longer supported"));
}
else {
if (curve == 0) {
@@ -179,7 +179,7 @@ t_Open9xArmExpoData_v210::operator ExpoData ()
c9x.chn = chn;
if (expo!=0 && curve!=0) {
EEPROMWarnings += ::QObject::tr("Simultaneous usage of expo and curves is no longer supported") + "\n";
EEPROMWarnings.push_back(::QObject::tr("Simultaneous usage of expo and curves is no longer supported"));
}
else {
if (curve == 0) {
@@ -89,7 +89,7 @@ t_Open9xExpoData_v201::operator ExpoData ()
c9x.mode = mode;
c9x.chn = chn;
if (expo!=0 && curve!=0) {
EEPROMWarnings += ::QObject::tr("Simultaneous usage of expo and curves is no longer supported in OpenTX") + "\n";
EEPROMWarnings.push_back(::QObject::tr("Simultaneous usage of expo and curves is no longer supported in OpenTX"));
}
else {
if (curve == 0) {
@@ -48,6 +48,7 @@
#define GPS
#define FAI_CHOICE
#define FRSKY_STICKS
#define SAFETY_CHANNEL_FUNCTION
#define EEPROM_VARIANT 3
@@ -76,9 +77,10 @@ namespace Open9xGruvin9x {
#include "radio/src/gui/view_main.cpp"
#include "radio/src/gui/view_statistics.cpp"
#include "radio/src/gui/view_telemetry.cpp"
#include "radio/src/lcd.cpp"
#include "radio/src/lcd_common.cpp"
#include "radio/src/lcd_default.cpp"
#include "radio/src/keys.cpp"
#include "radio/src/simpgmspace.cpp"
#include "radio/src/targets/simu/simpgmspace.cpp"
#include "radio/src/templates.cpp"
#include "radio/src/translations.cpp"
#include "radio/src/fonts.cpp"
@@ -48,6 +48,7 @@
#define FRSKY_STICKS
#define DSM2
#define DSM2_PPM
#define SAFETY_CHANNEL_FUNCTION
#define EEPROM_VARIANT SIMU_M128_VARIANTS
#define GAUGES
@@ -77,9 +78,10 @@ namespace OpenTxM128 {
#include "radio/src/gui/view_main.cpp"
#include "radio/src/gui/view_statistics.cpp"
#include "radio/src/gui/view_telemetry.cpp"
#include "radio/src/lcd.cpp"
#include "radio/src/lcd_common.cpp"
#include "radio/src/lcd_default.cpp"
#include "radio/src/keys.cpp"
#include "radio/src/simpgmspace.cpp"
#include "radio/src/targets/simu/simpgmspace.cpp"
#include "radio/src/templates.cpp"
#include "radio/src/translations.cpp"
#include "radio/src/fonts.cpp"
@@ -50,6 +50,8 @@
#define GPS
#define FAI_CHOICE
#define FRSKY_STICKS
#define SAFETY_CHANNEL_FUNCTION
#define FAS_OFFSET
#define EEPROM_VARIANT SIMU_STOCK_VARIANTS
#define GAUGES
@@ -81,9 +83,10 @@ namespace OpenTxM64 {
#include "radio/src/gui/view_main.cpp"
#include "radio/src/gui/view_statistics.cpp"
#include "radio/src/gui/view_telemetry.cpp"
#include "radio/src/lcd.cpp"
#include "radio/src/lcd_common.cpp"
#include "radio/src/lcd_default.cpp"
#include "radio/src/keys.cpp"
#include "radio/src/simpgmspace.cpp"
#include "radio/src/targets/simu/simpgmspace.cpp"
#include "radio/src/telemetry/frsky.cpp"
#include "radio/src/telemetry/frsky_d.cpp"
#include "radio/src/templates.cpp"
@@ -54,6 +54,7 @@
#define GPS
#define FAI_CHOICE
#define FRSKY_STICKS
#define SAFETY_CHANNEL_FUNCTION
#define NUM_POTS 3
#define EEPROM_VARIANT 3
@@ -92,11 +93,12 @@ namespace Open9xSky9x {
#include "radio/src/gui/view_telemetry.cpp"
#include "radio/src/gui/view_about.cpp"
#include "radio/src/gui/view_text.cpp"
#include "radio/src/lcd.cpp"
#include "radio/src/lcd_common.cpp"
#include "radio/src/lcd_default.cpp"
#include "radio/src/logs.cpp"
#include "radio/src/targets/sky9x/keys_driver.cpp"
#include "radio/src/keys.cpp"
#include "radio/src/simpgmspace.cpp"
#include "radio/src/targets/simu/simpgmspace.cpp"
#include "radio/src/templates.cpp"
#include "radio/src/translations.cpp"
#include "radio/src/fonts.cpp"
@@ -54,6 +54,7 @@
#define EEPROM_VARIANT 3
#define HAPTIC
#define REVPLUS
#define SAFETY_CHANNEL_FUNCTION
#define NUM_POTS 5
@@ -99,7 +100,8 @@ inline int geteepromsize() {
#include "radio/src/gui/view_telemetry.cpp"
#include "radio/src/gui/view_text.cpp"
#include "radio/src/gui/view_about.cpp"
#include "radio/src/lcd.cpp"
#include "radio/src/lcd_common.cpp"
#include "radio/src/lcd_taranis.cpp"
#include "radio/src/logs.cpp"
#include "radio/src/rtc.cpp"
#include "radio/src/targets/taranis/keys_driver.cpp"
@@ -109,7 +111,7 @@ inline int geteepromsize() {
#include "radio/src/targets/taranis/haptic_driver.cpp"
// TODO Because FatFS in not C++ there cannot be namespaces there and the functions are defined several times!
#undef SDCARD
#include "radio/src/simpgmspace.cpp"
#include "radio/src/targets/simu/simpgmspace.cpp"
#define SDCARD
#include "radio/src/translations.cpp"
#include "radio/src/fonts.cpp"
+37 -27
View File
@@ -19,7 +19,7 @@
#define MAX_MIXERS(board, version) (IS_ARM(board) ? 64 : 32)
#define MAX_CHANNELS(board, version) (IS_ARM(board) ? 32 : 16)
#define MAX_EXPOS(board, version) (IS_ARM(board) ? ((IS_TARANIS(board) && version >= 216) ? 64 : 32) : (IS_DBLRAM(board, version) ? 16 : 14))
#define MAX_CUSTOM_SWITCHES(board, version) (IS_ARM(board) ? 32 : (IS_DBLEEPROM(board, version) ? 15 : 12))
#define MAX_CUSTOM_SWITCHES(board, version) (IS_ARM(board) ? 32 : ((IS_DBLEEPROM(board, version) && version<217) ? 15 : 12))
#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) : O9X_MAX_CURVES)
#define MAX_GVARS(board, version) ((IS_ARM(board) && version >= 216) ? 9 : 5)
@@ -235,8 +235,9 @@ class SourcesConversionTable: public ConversionTable {
addConversion(RawSource(SOURCE_TYPE_SWITCH, i), val++);
}
}
for (int i=0; i<MAX_CUSTOM_SWITCHES(board, version); i++)
for (int i=0; i<MAX_CUSTOM_SWITCHES(board, version); i++) {
addConversion(RawSource(SOURCE_TYPE_CUSTOM_SWITCH, i), val++);
}
}
if (!afterrelease21March2013) {
@@ -369,7 +370,8 @@ template <int N>
class SwitchField: public ConversionField< SignedField<N> > {
public:
SwitchField(RawSwitch & sw, BoardEnum board, unsigned int version, unsigned long flags=0):
ConversionField< SignedField<N> >(_switch, SwitchesConversionTable::getInstance(board, version, flags), "Switch"),
ConversionField< SignedField<N> >(_switch, SwitchesConversionTable::getInstance(board, version, flags), "Switch",
"Switch "+ sw.toString()+" cannot be exported on this board!"),
sw(sw),
_switch(0)
{
@@ -503,7 +505,8 @@ template <int N>
class SourceField: public ConversionField< UnsignedField<N> > {
public:
SourceField(RawSource & source, BoardEnum board, unsigned int version, unsigned int variant, unsigned long flags=0):
ConversionField< UnsignedField<N> >(_source, SourcesConversionTable::getInstance(board, version, variant, flags), "Source"),
ConversionField< UnsignedField<N> >(_source, SourcesConversionTable::getInstance(board, version, variant, flags),
"Source", "Source "+ source.toString(ModelData())+" cannot be exported on this board!"),
source(source),
_source(0)
{
@@ -867,8 +870,8 @@ class MixField: public TransformedField {
internalField.Append(new SpareBitsField<8>());
}
else if (IS_ARM(board) && version >= 216) {
internalField.Append(new UnsignedField<4>(_destCh));
internalField.Append(new UnsignedField<4>(mix.mixWarn));
internalField.Append(new UnsignedField<5>(_destCh));
internalField.Append(new UnsignedField<3>(mix.mixWarn));
internalField.Append(new UnsignedField<16>(mix.phases));
internalField.Append(new BoolField<1>(_curveMode));
internalField.Append(new BoolField<1>(mix.noExpo));
@@ -1016,7 +1019,7 @@ class MixField: public TransformedField {
if (mix.srcRaw.type != SOURCE_TYPE_NONE) {
mix.destCh = _destCh + 1;
if (!IS_ARM(board) || version < 216) {
if (!IS_TARANIS(board) || version < 216) {
if (!_curveMode)
mix.curve = CurveReference(CurveReference::CURVE_REF_DIFF, smallGvarToC9x(_curveParam));
else if (_curveParam > 6)
@@ -1255,14 +1258,14 @@ class CurvesField: public TransformedField {
if (IS_TARANIS(board) && version >= 216) {
offset += (curve->type == CurveData::CURVE_TYPE_CUSTOM ? curve->count * 2 - 2 : curve->count);
if (offset > maxPoints) {
EEPROMWarnings += ::QObject::tr("OpenTX only accepts %1 points in all curves").arg(maxPoints) + "\n";
EEPROMWarnings.push_back(::QObject::tr("OpenTX only accepts %1 points in all curves").arg(maxPoints));
break;
}
}
else {
offset += (curve->type == CurveData::CURVE_TYPE_CUSTOM ? curve->count * 2 - 2 : curve->count) - 5;
if (offset > maxPoints - 5 * maxCurves) {
EEPROMWarnings += ::QObject::tr("OpenTx only accepts %1 points in all curves").arg(maxPoints) + "\n";
EEPROMWarnings.push_back(::QObject::tr("OpenTx only accepts %1 points in all curves").arg(maxPoints));
break;
}
_curves[i] = offset;
@@ -2061,6 +2064,10 @@ class AvrCustomFunctionField: public TransformedField {
if (version >= 216) {
fn.func = AssignFunc(fn.func + (_union_param >> 2));
fn.adjustMode = (_union_param & 0x03);
if (fn.adjustMode == 1)
sourcesConversionTable->importValue(_param, (int &)fn.param);
else if (fn.adjustMode == 2)
fn.param = RawSource(SOURCE_TYPE_GVAR, _param).toValue();
}
else if (version >= 213) {
fn.adjustMode = ((_active >> 1) & 0x03);
@@ -2331,10 +2338,9 @@ class FrskyField: public StructField {
Append(new UnsignedField<3>(frsky.varioSource));
Append(new SignedField<5>(frsky.varioCenterMin));
Append(new ConversionField< UnsignedField<3> >(frsky.currentSource, &telemetryCurrentSourceConversionTable, "Current Source"));
Append(new SignedField<8>(frsky.varioCenterMax));
Append(new SignedField<5>(frsky.varioCenterMax));
if (version >= 216) {
// TODO int8_t fasOffset;
Append(new SpareBitsField<8>());
Append(new SignedField<8>(frsky.fasOffset));
}
}
}
@@ -2395,8 +2401,8 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
internalField.Append(new UnsignedField<16>(modelData.timers[i].val));
internalField.Append(new UnsignedField<2>(modelData.timers[i].countdownBeep));
internalField.Append(new BoolField<1>(modelData.timers[i].minuteBeep));
internalField.Append(new BoolField<1>(modelData.timers[i].persistent));
internalField.Append(new SpareBitsField<4>());
internalField.Append(new UnsignedField<2>(modelData.timers[i].persistent));
internalField.Append(new SpareBitsField<3>());
internalField.Append(new SignedField<16>(modelData.timers[i].pvalue));
}
else if (afterrelease21March2013) {
@@ -2404,7 +2410,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
internalField.Append(new BoolField<1>((bool &)modelData.timers[i].countdownBeep));
internalField.Append(new BoolField<1>(modelData.timers[i].minuteBeep));
if (HAS_PERSISTENT_TIMERS(board)) {
internalField.Append(new BoolField<1>(modelData.timers[i].persistent));
internalField.Append(new UnsignedField<1>(modelData.timers[i].persistent));
internalField.Append(new SpareBitsField<1>());
internalField.Append(new SignedField<16>(modelData.timers[i].pvalue));
}
@@ -2415,7 +2421,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
else {
internalField.Append(new UnsignedField<16>(modelData.timers[i].val));
if (HAS_PERSISTENT_TIMERS(board)) {
internalField.Append(new BoolField<1>(modelData.timers[i].persistent));
internalField.Append(new UnsignedField<1>(modelData.timers[i].persistent));
internalField.Append(new SpareBitsField<15>());
}
}
@@ -2424,7 +2430,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
if (IS_ARM(board))
internalField.Append(new UnsignedField<3>(modelData.telemetryProtocol));
else
internalField.Append(new ConversionField< UnsignedField<3> >((unsigned int &)modelData.moduleData[0].protocol, &protocolsConversionTable, "Protocol", ::QObject::tr("OpenTX doesn't accept this protocol")));
internalField.Append(new ConversionField< UnsignedField<3> >((unsigned int &)modelData.moduleData[0].protocol, &protocolsConversionTable, "Protocol", ::QObject::tr("OpenTX doesn't accept this telemetry protocol")));
internalField.Append(new BoolField<1>(modelData.thrTrim));
@@ -2528,12 +2534,12 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, BoardEnum board, unsigne
if (IS_TARANIS(board)) {
modulesCount = 3;
internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[1].protocol, &protocolsConversionTable, "Protocol", ::QObject::tr("OpenTX doesn't accept this protocol")));
internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[1].protocol, &protocolsConversionTable, "Protocol", ::QObject::tr("OpenTX doesn't accept this rado protocol")));
internalField.Append(new UnsignedField<8>(modelData.trainerMode));
}
else if (IS_ARM(board) && version >= 216) {
modulesCount = 3;
internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[0].protocol, &protocolsConversionTable, "Protocol", ::QObject::tr("OpenTX doesn't accept this protocol")));
internalField.Append(new ConversionField< SignedField<8> >(modelData.moduleData[0].protocol, &protocolsConversionTable, "Protocol", ::QObject::tr("OpenTX doesn't accept this radio protocol")));
}
if (IS_ARM(board) && version >= 215) {
@@ -2800,10 +2806,12 @@ void OpenTxGeneralData::beforeExport()
sum += generalData.calibSpanPos[i];
if (++count == 12) break;
}
for (int i=0; i<4; i++) {
potsType[i] = generalData.potsType[i];
if (i<2 && potsType[i] == 1)
potsType[i] = 0;
if (IS_TARANIS(board)) {
for (int i=0; i<4; i++) {
potsType[i] = generalData.potsType[i];
if (i<2 && potsType[i] == 1)
potsType[i] = 0;
}
}
}
else {
@@ -2817,9 +2825,11 @@ void OpenTxGeneralData::beforeExport()
void OpenTxGeneralData::afterImport()
{
for (int i=0; i<4; i++) {
generalData.potsType[i] = potsType[i];
if (i<2 && potsType[i] == 0)
generalData.potsType[i] = 1;
if (IS_TARANIS(board)) {
for (int i=0; i<4; i++) {
generalData.potsType[i] = potsType[i];
if (i<2 && potsType[i] == 0)
generalData.potsType[i] = 1;
}
}
}
@@ -163,8 +163,20 @@ bool OpenTxEepromInterface::loadModelVariant(unsigned int index, ModelData &mode
}
else {
// load from SD Backup, size is stored in index
QByteArray eepromData((char *)data, index);
open9xModel.Import(eepromData);
QByteArray backupData((char *)data, index);
QByteArray modelData;
if (IS_SKY9X(board))
modelData = backupData;
else
importRlc(modelData, backupData);
if (modelData.size()) {
open9xModel.Import(modelData);
// open9xModel.Dump();
model.used = true;
}
else {
model.clear();
}
}
return true;
@@ -369,10 +381,10 @@ int OpenTxEepromInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t
break;
case BOARD_GRUVIN9X:
case BOARD_MEGA2560:
version = 216;
version = 217;
break;
case BOARD_M128:
version = 216;
version = 217;
break;
case BOARD_STOCK:
version = 216;
@@ -402,10 +414,21 @@ int OpenTxEepromInterface::save(uint8_t *eeprom, RadioData &radioData, uint32_t
}
}
if (!EEPROMWarnings.isEmpty())
if (!EEPROMWarnings.empty()) {
QString msg;
int noErrorsToDisplay = std::min((int)EEPROMWarnings.size(),10);
for (int n = 0; n < noErrorsToDisplay; n++) {
msg += "-" + EEPROMWarnings.front() + "\n";
EEPROMWarnings.pop_front();
}
if (!EEPROMWarnings.empty()) {
msg = QObject::tr("(displaying only first 10 warnings)") + "\n" + msg;
}
EEPROMWarnings.clear();
QMessageBox::warning(NULL,
QObject::tr("Warning"),
QObject::tr("EEPROM saved with these warnings:") + "\n- " + EEPROMWarnings.remove(EEPROMWarnings.length()-1, 1).replace("\n", "\n- "));
QObject::tr("EEPROM saved with these warnings:") + "\n" + msg);
}
return size;
}
@@ -556,11 +579,11 @@ int OpenTxFirmware::getCapability(const Capability capability)
return 24;
else
return 16;
case SafetyChannelCustomFunction:
return id.contains("nosafetych") ? 0 : 1;
case LogicalSwitches:
if (IS_ARM(board))
return 32;
else if (board==BOARD_GRUVIN9X||board==BOARD_M128)
return 15;
else
return 12;
case CustomAndSwitches:
@@ -621,7 +644,10 @@ int OpenTxFirmware::getCapability(const Capability capability)
case HasCvNames:
return (IS_TARANIS(board) ? 1 : 0);
case Telemetry:
return TM_HASTELEMETRY|TM_HASOFFSET|TM_HASWSHH;
if (board == BOARD_GRUVIN9X || IS_ARM(board) || id.contains("frsky"))
return TM_HASTELEMETRY|TM_HASOFFSET|TM_HASWSHH;
else
return 0;
case TelemetryBars:
return 1;
case TelemetryCustomScreens:
@@ -871,6 +897,9 @@ bool OpenTxEepromInterface::checkVersion(unsigned int version)
case 216:
// A lot of things (first github release)
break;
case 217:
// 3 logical switches removed on M128 / gruvin9x boards
break;
default:
return false;
}
@@ -904,11 +933,32 @@ bool OpenTxEepromInterface::loadBackup(RadioData &radioData, uint8_t *eeprom, in
{
std::cout << "trying " << getName() << " backup import...";
if (esize < 8 || memcmp(eeprom, "o9x", 3) != 0 || eeprom[3] != 0x30+board) {
if (esize < 8 || memcmp(eeprom, "o9x", 3) != 0) {
std::cout << " no\n";
return false;
}
BoardEnum backupBoard = (BoardEnum)-1;
switch (eeprom[3]) {
case 0x33:
backupBoard = BOARD_TARANIS;
break;
case 0x32:
backupBoard = BOARD_SKY9X;
break;
case 0x31:
backupBoard = BOARD_GRUVIN9X;
break;
default:
std::cout << " unknown board\n";
return false;
}
if (backupBoard != board) {
std::cout << " not right board\n";
return false;
}
uint8_t version = eeprom[4];
uint8_t bcktype = eeprom[5];
uint16_t size = ((uint16_t)eeprom[7] << 8) + eeprom[6];
@@ -997,6 +1047,15 @@ SimulatorInterface * OpenTxFirmware::getSimulator()
}
}
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("nosafetych", QObject::tr("No SafetyCH functions available"));
Option fai_options[] = { { "faichoice", QObject::tr("Possibility to enable FAI MODE at field") }, { "faimode", QObject::tr("FAI MODE always enabled") }, { NULL } };
firmware->addOptions(fai_options);
}
void registerOpenTxFirmwares()
{
OpenTxFirmware * openTx;
@@ -1004,7 +1063,6 @@ void registerOpenTxFirmwares()
Option ext_options[] = { { "frsky", QObject::tr("Support for frsky telemetry mod"), FRSKY_VARIANT }, { "telemetrez", QObject::tr("Support for telemetry easy board"), FRSKY_VARIANT }, { "jeti", QObject::tr("Support for jeti telemetry mod"), 0 }, { "ardupilot", QObject::tr("Support for receiving ardupilot data"), 0 }, { "nmea", QObject::tr("Support for receiving NMEA data"), 0 }, { "mavlink", QObject::tr("Support for MAVLINK devices"), MAVLINK_VARIANT }, { NULL } };
Option nav_options[] = { { "rotenc", QObject::tr("Rotary Encoder use in menus navigation") }, { "potscroll", QObject::tr("Pots use in menus navigation") }, { NULL } };
Option extr_options[] = { { "frsky", QObject::tr("Support for frsky telemetry mod"), FRSKY_VARIANT }, { "jeti", QObject::tr("Support for jeti telemetry mod"), 0 }, { "ardupilot", QObject::tr("Support for receiving ardupilot data"), 0 }, { "nmea", QObject::tr("Support for receiving NMEA data"), 0 }, { "mavlink", QObject::tr("Support for MAVLINK devices"), MAVLINK_VARIANT }, { NULL } };
Option fai_options[] = { { "faichoice", QObject::tr("Possibility to enable FAI MODE at field") }, { "faimode", QObject::tr("FAI MODE always enabled") }, { NULL } };
/* 9x board */
openTx = new OpenTxFirmware("opentx-9x", QObject::tr("OpenTX for 9X board"), BOARD_STOCK);
@@ -1020,7 +1078,6 @@ void registerOpenTxFirmwares()
// NOT TESTED openTx->addOption("PXX", QObject::tr("Support of FrSky PXX protocol"));
openTx->addOption("DSM2", QObject::tr("Support for DSM2 modules"));
openTx->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
openTx->addOption("ppmus", QObject::tr("Channel values displayed in us"));
openTx->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
openTx->addOption("symlimits", QObject::tr("Symetrical Limits"));
openTx->addOptions(nav_options);
@@ -1031,7 +1088,6 @@ void registerOpenTxFirmwares()
openTx->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
openTx->addOption("battgraph", QObject::tr("Battery graph"));
openTx->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
openTx->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
openTx->addOption("thrtrace", QObject::tr("Enable the throttle trace in Statistics"));
openTx->addOption("pgbar", QObject::tr("EEprom write progress bar"));
openTx->addOption("imperial", QObject::tr("Imperial units"));
@@ -1039,9 +1095,10 @@ void registerOpenTxFirmwares()
openTx->addOption("novario", QObject::tr("No vario support"));
openTx->addOption("nogps", QObject::tr("No GPS support"));
openTx->addOption("nogauges", QObject::tr("No gauges in the custom telemetry screen"));
openTx->addOption("nosafetych", QObject::tr("No SafetyCH functions available"));
openTx->addOption("fasoffset", QObject::tr("Allow compensating for offset errors in FrSky FAS current sensors"));
openTx->addOption("stickrev", QObject::tr("Add support for reversing stick inputs (e.g. needed for FrSky gimbals)"));
openTx->addOptions(fai_options);
addOpenTxCommonOptions(openTx);
firmwares.push_back(openTx);
/* 9x board with M128 chip */
@@ -1058,7 +1115,6 @@ void registerOpenTxFirmwares()
// NOT TESTED openTx->addOption("PXX", QObject::tr("Support of FrSky PXX protocol"));
openTx->addOption("DSM2", QObject::tr("Support for DSM2 modules"));
openTx->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
openTx->addOption("ppmus", QObject::tr("Channel values displayed in us"));
openTx->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
openTx->addOption("symlimits", QObject::tr("Symetrical Limits"));
openTx->addOptions(nav_options);
@@ -1069,11 +1125,10 @@ void registerOpenTxFirmwares()
openTx->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
openTx->addOption("battgraph", QObject::tr("Battery graph"));
openTx->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
openTx->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
openTx->addOption("thrtrace", QObject::tr("Enable the throttle trace in Statistics"));
openTx->addOption("pgbar", QObject::tr("EEprom write Progress bar"));
openTx->addOption("imperial", QObject::tr("Imperial units"));
openTx->addOptions(fai_options);
addOpenTxCommonOptions(openTx);
firmwares.push_back(openTx);
/* 9XR board */
@@ -1090,7 +1145,6 @@ void registerOpenTxFirmwares()
// NOT TESTED openTx->addOption("PXX", QObject::tr("Support of FrSky PXX protocol"));
openTx->addOption("DSM2", QObject::tr("Support for DSM2 modules"));
openTx->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
openTx->addOption("ppmus", QObject::tr("Channel values displayed in us"));
openTx->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
openTx->addOption("symlimits", QObject::tr("Symetrical Limits"));
openTx->addOption("potscroll", QObject::tr("Pots use in menus navigation"));
@@ -1099,7 +1153,6 @@ void registerOpenTxFirmwares()
openTx->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
openTx->addOption("battgraph", QObject::tr("Battery graph"));
openTx->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
openTx->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
openTx->addOption("thrtrace", QObject::tr("Enable the throttle trace in Statistics"));
openTx->addOption("pgbar", QObject::tr("EEprom write Progress bar"));
openTx->addOption("imperial", QObject::tr("Imperial units"));
@@ -1108,7 +1161,7 @@ void registerOpenTxFirmwares()
openTx->addOption("nogps", QObject::tr("No GPS support"));
openTx->addOption("nogauges", QObject::tr("No gauges in the custom telemetry screen"));
openTx->addOption("stickrev", QObject::tr("Add support for reversing stick inputs (e.g. needed for FrSky gimbals)"));
openTx->addOptions(fai_options);
addOpenTxCommonOptions(openTx);
firmwares.push_back(openTx);
/* 9XR board with M128 chip */
@@ -1125,7 +1178,6 @@ void registerOpenTxFirmwares()
// NOT TESTED openTx->addOption("PXX", QObject::tr("Support of FrSky PXX protocol"));
openTx->addOption("DSM2", QObject::tr("Support for DSM2 modules"));
openTx->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
openTx->addOption("ppmus", QObject::tr("Channel values displayed in us"));
openTx->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
openTx->addOption("symlimits", QObject::tr("Symetrical Limits"));
openTx->addOption("potscroll", QObject::tr("Pots use in menus navigation"));
@@ -1134,11 +1186,10 @@ void registerOpenTxFirmwares()
openTx->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
openTx->addOption("battgraph", QObject::tr("Battery graph"));
openTx->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
openTx->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
openTx->addOption("thrtrace", QObject::tr("Enable the throttle trace in Statistics"));
openTx->addOption("pgbar", QObject::tr("EEprom write Progress bar"));
openTx->addOption("imperial", QObject::tr("Imperial units"));
openTx->addOptions(fai_options);
addOpenTxCommonOptions(openTx);
firmwares.push_back(openTx);
/* Gruvin9x board */
@@ -1153,7 +1204,6 @@ void registerOpenTxFirmwares()
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 } };
openTx->addOptions(dsm2_options);
openTx->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
openTx->addOption("ppmus", QObject::tr("Channel values displayed in us"));
openTx->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
openTx->addOption("symlimits", QObject::tr("Symetrical Limits"));
openTx->addOption("potscroll", QObject::tr("Pots use in menus navigation"));
@@ -1163,10 +1213,9 @@ void registerOpenTxFirmwares()
openTx->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
openTx->addOption("battgraph", QObject::tr("Battery graph"));
openTx->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
openTx->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
openTx->addOption("pgbar", QObject::tr("EEprom write Progress bar"));
openTx->addOption("imperial", QObject::tr("Imperial units"));
openTx->addOptions(fai_options);
addOpenTxCommonOptions(openTx);
firmwares.push_back(openTx);
/* Sky9x board */
@@ -1176,7 +1225,6 @@ void registerOpenTxFirmwares()
openTx->addOption("nofp", QObject::tr("No flight modes"));
openTx->addOption("nocurves", QObject::tr("Disable curves menus"));
openTx->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
openTx->addOption("ppmus", QObject::tr("Channel values displayed in us"));
openTx->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
openTx->addOption("symlimits", QObject::tr("Symetrical Limits"));
openTx->addOption("potscroll", QObject::tr("Pots use in menus navigation"));
@@ -1186,10 +1234,8 @@ void registerOpenTxFirmwares()
openTx->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
openTx->addOption("battgraph", QObject::tr("Battery graph"));
openTx->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
openTx->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
openTx->addOption("tsticks", QObject::tr("Use FrSky Taranis sticks in a 9X/9XR"));
openTx->addOption("bluetooth", QObject::tr("Bluetooth interface"));
openTx->addOptions(fai_options);
addOpenTxCommonOptions(openTx);
firmwares.push_back(openTx);
/* 9XR-Pro */
@@ -1199,20 +1245,16 @@ void registerOpenTxFirmwares()
openTx->addOption("nofp", QObject::tr("No flight modes"));
openTx->addOption("nocurves", QObject::tr("Disable curves menus"));
openTx->addOption("ppmca", QObject::tr("PPM center adjustment in limits"));
openTx->addOption("ppmus", QObject::tr("Channel values displayed in us"));
openTx->addOption("gvars", QObject::tr("Global variables"), GVARS_VARIANT);
openTx->addOption("symlimits", QObject::tr("Symetrical Limits"));
openTx->addOption("potscroll", QObject::tr("Pots use in menus navigation"));
openTx->addOption("autosource", QObject::tr("In model setup menus automatically set source by moving the control"));
openTx->addOption("autoswitch", QObject::tr("In model setup menus automatically set switch by moving the control"));
openTx->addOption("dblkeys", QObject::tr("Enable resetting values by pressing up and down at the same time"));
openTx->addOption("nographics", QObject::tr("No graphical check boxes and sliders"));
openTx->addOption("battgraph", QObject::tr("Battery graph"));
openTx->addOption("nobold", QObject::tr("Don't use bold font for highlighting active items"));
openTx->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
openTx->addOption("tsticks", QObject::tr("Use FrSky Taranis sticks in a 9X/9XR"));
openTx->addOption("bluetooth", QObject::tr("Bluetooth interface"));
openTx->addOptions(fai_options);
addOpenTxCommonOptions(openTx);
firmwares.push_back(openTx);
/* Taranis board */
@@ -1221,9 +1263,7 @@ void registerOpenTxFirmwares()
openTx->addOption("nogvars", QObject::tr("Disable Global variables"));
openTx->addOption("haptic", QObject::tr("Haptic module installed"));
openTx->addOption("lua", QObject::tr("Support for Lua model scripts"));
openTx->addOption("ppmus", QObject::tr("Channel values displayed in us"));
openTx->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
openTx->addOptions(fai_options);
addOpenTxCommonOptions(openTx);
firmwares.push_back(openTx);
/* Taranis Plus board */
@@ -1231,9 +1271,7 @@ void registerOpenTxFirmwares()
openTx->addOption("noheli", QObject::tr("Disable HELI menu and cyclic mix support"));
openTx->addOption("nogvars", QObject::tr("Disable Global variables"));
openTx->addOption("lua", QObject::tr("Support for Lua model scripts"));
openTx->addOption("ppmus", QObject::tr("Channel values displayed in us"));
openTx->addOption("sqt5font", QObject::tr("Use alternative SQT5 font"));
openTx->addOptions(fai_options);
addOpenTxCommonOptions(openTx);
firmwares.push_back(openTx);
default_firmware_variant = GetFirmware("opentx-9x-heli-templates-en");
@@ -18,7 +18,6 @@
#include "eeprominterface.h"
#define OPENTX_COMPANION_DOWNLOADS "http://downloads-20.open-tx.org/companion"
#define OPENTX_FIRMWARE_DOWNLOADS "http://downloads-20.open-tx.org/firmware"
class RleFile;
+1 -1
View File
@@ -197,7 +197,7 @@ int8_t t_Th9xLogicalSwitchData::fromSource(RawSource source)
if (source.type == SOURCE_TYPE_STICK)
v1 = 1+source.index;
else if (source.type == SOURCE_TYPE_ROTARY_ENCODER) {
EEPROMWarnings += ::QObject::tr("th9x on this board doesn't have Rotary Encoders") + "\n";
EEPROMWarnings.push_back(::QObject::tr("th9x on this board doesn't have Rotary Encoders"));
v1 = 5+source.index;
}
else if (source.type == SOURCE_TYPE_MAX)
+16 -22
View File
@@ -219,21 +219,13 @@ bool FlashInterface::setSplash(const QImage & newsplash)
QColor color;
QByteArray splash;
if (splash_format == QImage::Format_Indexed8) {
unsigned int idx = 0;
for (unsigned int y=0; y<splash_height; y+=8) {
for (unsigned int x=0; x<splash_width; x++) {
unsigned int values[] = { 255, 255, 255, 255 };
for (unsigned int z=0; z<8; z++) {
if (y+z < splash_height) {
QRgb gray = qGray(newsplash.pixel(x, y+z));
for (unsigned int i=0; i<4; i++) {
if (gray & (1<<(4+i)))
values[i] -= 1 << z;
}
}
}
for (int i=0; i<4; i++)
b[idx++] = values[i];
for (unsigned int y=0; y<splash_height; y++) {
unsigned int idx = (y/2)*splash_width;
for (unsigned int x=0; x<splash_width; x++, idx++) {
QRgb gray = qGray(newsplash.pixel(x, y));
uint8_t z = ((255-gray)*15)/255;
if (y & 1) z <<= 4;
b[idx] |= z;
}
}
}
@@ -243,7 +235,7 @@ bool FlashInterface::setSplash(const QImage & newsplash)
for (uint y=0; y<splash_height; y++) {
for (uint x=0; x<splash_width; x++) {
color = QColor(blackNwhite.pixel(x,y));
b[splash_width*(y/8) + x] |=((color==black ? 1: 0)<<(y % 8));
b[splash_width*(y/8) + x] |= ((color==black ? 1: 0)<<(y % 8));
}
}
}
@@ -278,10 +270,10 @@ QImage FlashInterface::getSplash()
QImage image(splash_width, splash_height, QImage::Format_RGB888);
if (splash_offset > 0) {
for (unsigned int y=0; y<splash_height; y++) {
unsigned int idx = (y/8)*splash_width*4;
unsigned int mask = (1 << (y%8));
for (unsigned int x=0; x<splash_width; x++, idx+=4) {
unsigned int z = ((flash.at(splash_offset+idx) & mask) ? 0x1 : 0) + ((flash.at(splash_offset+idx+1) & mask) ? 0x2 : 0) + ((flash.at(splash_offset+idx+2) & mask) ? 0x4 : 0) + ((flash.at(splash_offset+idx+3) & mask) ? 0x8 : 0);
unsigned int idx = (y/2)*splash_width;
for (unsigned int x=0; x<splash_width; x++, idx++) {
uint8_t byte = flash.at(splash_offset+idx);
unsigned int z = (y & 1) ? (byte >> 4) : (byte & 0x0F);
z = 255-(z*255)/15;
QRgb rgb = qRgb(z, z, z);
image.setPixel(x, y, rgb);
@@ -293,9 +285,11 @@ QImage FlashInterface::getSplash()
else {
QImage image(splash_width, splash_height, QImage::Format_Mono);
if (splash_offset > 0) {
for (unsigned int y=0; y<splash_height; y++)
for(unsigned int x=0; x<splash_width; x++)
for (unsigned int y=0; y<splash_height; y++) {
for(unsigned int x=0; x<splash_width; x++) {
image.setPixel(x, y, (flash.at(splash_offset+(splash_width*(y/8)+x)) & (1<<(y % 8))) ? 0 : 1);
}
}
}
return image;
}
+4
View File
@@ -404,6 +404,10 @@ void populateSwitchCB(QComboBox *b, const RawSwitch & value, const GeneralSettin
for (int i=-GetCurrentFirmware()->getCapability(SwitchesPositions); i<0; i++) {
item = RawSwitch(SWITCH_TYPE_SWITCH, i);
if (IS_TARANIS(GetCurrentFirmware()->getBoard())) {
//hide up and down for !SH and !SF, because they are redundant (!SFup == SFdown)
if (item.toString().contains("H") || item.toString().contains("F")) continue;
}
b->addItem(item.toString(), item.toValue());
if (item == value) b->setCurrentIndex(b->count()-1);
}
+5 -5
View File
@@ -64,8 +64,8 @@
#include "helpers.h"
#include "appdata.h"
#include "radionotfound.h"
#include "firmwares/opentx/opentxinterface.h" // TODO get rid of this include
#define OPENTX_COMPANION_DOWNLOADS "http://downloads-20.open-tx.org/companion"
#define DONATE_STR "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QUZ48K4SEXDP2"
#ifdef __APPLE__
@@ -632,7 +632,6 @@ void MainWindow::loadProfile() //TODO Load all variables - Also HW!
int profnum=action->data().toInt();
g.id( profnum );
// TODO Get rid of this global variable - The profile.firmware is the real source
current_firmware_variant = GetFirmware(g.profile[g.id()].fwType());
foreach (QMdiSubWindow *window, mdiArea->subWindowList()) {
@@ -1328,7 +1327,7 @@ void MainWindow::writeFlash(QString fileToFlash)
}
if (readEepromFromRadio(backupFile, tr("Backup Models and Settings From Radio"))) {
sleep(1);
sleep(2);
int res = writeFirmwareToRadio(fileName);
if (res) {
QString restoreFile = tempDir + "/restore.bin";
@@ -1336,7 +1335,7 @@ void MainWindow::writeFlash(QString fileToFlash)
QMessageBox::warning(this, tr("Conversion failed"), tr("Cannot convert Models and Settings for use with this firmware, original data will be used"));
restoreFile = backupFile;
}
sleep(1);
sleep(2);
if (!writeEepromToRadio(restoreFile, tr("Restore Models and Settings To Radio"))) {
QMessageBox::warning(this, tr("Restore failed"), tr("Could not restore Models and Settings to Radio. The models and settings data file can be found at: %1").arg(backupFile));
}
@@ -1362,6 +1361,7 @@ void MainWindow::writeFlash(QString fileToFlash)
QDateTime datetime;
QString backupFile = backupPath+"/backup-"+QDateTime().currentDateTime().toString("yyyy-MM-dd-hhmmss")+".bin";
readEepromFromRadio(backupFile, tr("Backup Models and Settings From Radio"));
sleep(2);
}
writeFirmwareToRadio(fileName);
@@ -1596,7 +1596,7 @@ void MainWindow::createActions()
writeEepromAct = addAct("write_eeprom.png", tr("Write Models and Settings To Radio"), tr("Write Models and Settings to Radio"), SLOT(writeEeprom()));
readEepromAct = addAct("read_eeprom.png", tr("Read Models and Settings From Radio"), tr("Read Models and Settings from Radio"), SLOT(readEeprom()));
burnConfigAct = addAct("configure.png", tr("Configure Communications..."), tr("Configure software for communicating with the Radio"), SLOT(burnConfig()));
writeBackupToRadioAct = addAct("write_eeprom_file.png", tr("Write Backup to Radio"), tr("Write Backup from file to to Radio"), SLOT(writeBackup()));
writeBackupToRadioAct = addAct("write_eeprom_file.png", tr("Write Backup to Radio"), tr("Write Backup from file to Radio"), SLOT(writeBackup()));
readBackupToFileAct = addAct("read_eeprom_file.png", tr("Backup Radio to File"), tr("Save a complete backup file of all settings and model data in the Radio"), SLOT(readBackup()));
contributorsAct = addAct("contributors.png", tr("Contributors..."), tr("A tribute to those who have contributed to OpenTX and Companion"), SLOT(contributors()));
+7 -4
View File
@@ -190,16 +190,19 @@ void Channels::maxEdited()
void Channels::refreshExtendedLimits()
{
int channelMax = model.getChannelsMax();
int channelMaxValue = channelMax * 10;
for (int i=0; i<firmware->getCapability(Outputs); i++) {
QDoubleSpinBox * minDSB = minSpins[i];
QDoubleSpinBox * maxDSB = maxSpins[i];
minDSB->setMinimum(-model.getChannelsMax());
maxDSB->setMaximum(model.getChannelsMax());
minDSB->setMinimum(-channelMax);
maxDSB->setMaximum(+channelMax);
//reset any limit that is bigger than current maximum (dependent on extended limits setting)
if ( model.limitData[i].min < -model.getChannelsMax() ) model.limitData[i].min = -model.getChannelsMax();
if ( model.limitData[i].max > +model.getChannelsMax() ) model.limitData[i].max = +model.getChannelsMax();
if ( model.limitData[i].min < -channelMaxValue ) model.limitData[i].min = -channelMaxValue;
if ( model.limitData[i].max > +channelMaxValue ) model.limitData[i].max = +channelMaxValue;
}
emit modified();
}
+8 -8
View File
@@ -147,6 +147,13 @@ Curves::Curves(QWidget * parent, ModelData & model, GeneralSettings & generalSet
}
for (int i=0; i<C9X_MAX_POINTS; i++) {
spnx[i] = new QSpinBox(this);
spnx[i]->setProperty("index", i);
spnx[i]->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
spnx[i]->setAccelerated(true);
connect(spnx[i], SIGNAL(valueChanged(int)), this, SLOT(onPointEdited()));
ui->pointsLayout->addWidget(spnx[i], i, 0, 1, 1);
spny[i] = new QSpinBox(this);
spny[i]->setProperty("index", i);
spny[i]->setMinimum(-100);
@@ -154,14 +161,7 @@ Curves::Curves(QWidget * parent, ModelData & model, GeneralSettings & generalSet
spny[i]->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
spny[i]->setAccelerated(true);
connect(spny[i], SIGNAL(valueChanged(int)), this, SLOT(onPointEdited()));
ui->pointsLayout->addWidget(spny[i], i, 0, 1, 1);
spnx[i] = new QSpinBox(this);
spnx[i]->setProperty("index", i);
spnx[i]->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
spnx[i]->setAccelerated(true);
connect(spnx[i], SIGNAL(valueChanged(int)), this, SLOT(onPointEdited()));
ui->pointsLayout->addWidget(spnx[i], i, 1, 1, 1);
ui->pointsLayout->addWidget(spny[i], i, 1, 1, 1);
bool insert;
if (firmware->getCapability(EnhancedCurves)) {
+2 -1
View File
@@ -590,7 +590,8 @@ void CustomFunctionsPanel::populateFuncCB(QComboBox *b, unsigned int value)
b->clear();
for (unsigned int i=0; i<FuncCount; i++) {
b->addItem(FuncSwData(AssignFunc(i)).funcToString());
if (((i==FuncVolume || i==FuncBackgroundMusic || i==FuncBackgroundMusicPause) && !firmware->getCapability(HasVolume)) ||
if (((i>=FuncSafetyCh1 && i<=FuncSafetyCh32) && !firmware->getCapability(SafetyChannelCustomFunction)) ||
((i==FuncVolume || i==FuncBackgroundMusic || i==FuncBackgroundMusicPause) && !firmware->getCapability(HasVolume)) ||
((i==FuncPlayHaptic) && !firmware->getCapability(Haptic)) ||
((i==FuncPlayBoth) && !firmware->getCapability(HasBeeper)) ||
((i==FuncLogs) && !firmware->getCapability(HasSDLogs)) ||
+23 -6
View File
@@ -63,19 +63,25 @@ FlightModePanel::FlightModePanel(QWidget * parent, ModelData & model, int phaseI
trimsValue << ui->trim1Value << ui->trim2Value << ui->trim3Value << ui->trim4Value;
trimsSlider << ui->trim1Slider << ui->trim2Slider << ui->trim3Slider << ui->trim4Slider;
BoardEnum board = firmware->getBoard();
for (int i=0; i<4; i++) {
trimsLabel[i]->setText(labels[CONVERT_MODE(i+1)-1]);
QComboBox * cb = trimsUse[i];
cb->setProperty("index", i);
cb->addItem(QObject::tr("Trim disabled"), -1);
if (IS_TARANIS(board)) {
cb->addItem(QObject::tr("Trim disabled"), -1);
}
for (int m=0; m<modesCount; m++) {
if (m == phaseIdx) {
cb->addItem(QObject::tr("Own Trim"), m*2);
}
else if (phaseIdx > 0) {
cb->addItem(QObject::tr("Use Trim from Flight mode %1").arg(m), m*2);
cb->addItem(QObject::tr("Use Trim from Flight mode %1 + Own Trim as an offset").arg(m), m*2+1);
if (IS_TARANIS(board)) {
cb->addItem(QObject::tr("Use Trim from Flight mode %1 + Own Trim as an offset").arg(m), m*2+1);
}
}
}
connect(cb, SIGNAL(currentIndexChanged(int)), this, SLOT(phaseTrimUse_currentIndexChanged(int)));
@@ -157,7 +163,7 @@ FlightModePanel::FlightModePanel(QWidget * parent, ModelData & model, int phaseI
gvLayout->addWidget(gvValues[i], i, col++, 1, 1);
// Popups
if (IS_TARANIS(GetEepromInterface()->getBoard()) && (phaseIdx == 0)) {
if (IS_TARANIS(board) && phaseIdx == 0) {
gvPopups[i] = new QCheckBox(ui->gvGB);
gvPopups[i]->setProperty("index", i);
gvPopups[i]->setText(tr("Popup enabled"));
@@ -270,7 +276,11 @@ void FlightModePanel::trimUpdate(unsigned int trim)
trimsSlider[trim]->setEnabled(false);
}
else {
trimsUse[trim]->setCurrentIndex(1 + 2*phase.trimRef[chn] + phase.trimMode[chn] - (phase.trimRef[chn] > phaseIdx ? 1 : 0));
BoardEnum board = firmware->getBoard();
if (IS_TARANIS(board))
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);
}
@@ -364,8 +374,15 @@ void FlightModePanel::phaseTrimUse_currentIndexChanged(int index)
phase.trim[chn] = 0;
}
else {
phase.trimMode[chn] = data % 2;
phase.trimRef[chn] = data / 2;
BoardEnum board = firmware->getBoard();
if (IS_TARANIS(board)) {
phase.trimMode[chn] = data % 2;
phase.trimRef[chn] = data / 2;
}
else {
phase.trimMode[chn] = 0;
phase.trimRef[chn] = data / 2;
}
phase.trim[chn] = 0;
}
trimUpdate(trim);
+21 -15
View File
@@ -7,6 +7,10 @@ InputsPanel::InputsPanel(QWidget *parent, ModelData & model, GeneralSettings & g
ModelPanel(parent, model, generalSettings, firmware),
expoInserted(false)
{
inputsCount = firmware->getCapability(VirtualInputs);
if (inputsCount == 0)
inputsCount = NUM_STICKS;
QGridLayout * exposLayout = new QGridLayout(this);
ExposlistWidget = new MixersList(this, true);
@@ -47,10 +51,6 @@ void InputsPanel::update()
{
lock = true;
int inputsCount = firmware->getCapability(VirtualInputs);
if (inputsCount == 0)
inputsCount = NUM_STICKS;
// curDest -> destination channel
// i -> mixer number
QByteArray qba;
@@ -446,6 +446,7 @@ void InputsPanel::expolistWidget_KeyPress(QKeyEvent *event)
int InputsPanel::gm_moveExpo(int idx, bool dir) //true=inc=down false=dec=up
{
if(idx>C9X_MAX_EXPOS || (idx==C9X_MAX_EXPOS && dir)) return idx;
int tdx = dir ? idx+1 : idx-1;
@@ -456,22 +457,27 @@ int InputsPanel::gm_moveExpo(int idx, bool dir) //true=inc=down false=dec=up
if (!dir && tdx<0 && src.chn>0) {
src.chn--;
return idx;
} else if (!dir && tdx<0) {
}
else if (!dir && tdx<0) {
return idx;
}
if(memcmp(&src,&temp,sizeof(ExpoData))==0) return idx;
bool tgtempty=(memcmp(&tgt,&temp,sizeof(ExpoData))==0 ? 1:0);
if(tgt.chn!=src.chn || tgtempty) {
if ((dir) && (src.chn<(NUM_STICKS-1))) src.chn++;
if ((!dir) && (src.chn>0)) src.chn--;
return idx;
if (memcmp(&src, &temp, sizeof(ExpoData)) == 0) {
return idx;
}
//flip between idx and tgt
memcpy(&temp,&src,sizeof(ExpoData));
memcpy(&src,&tgt,sizeof(ExpoData));
memcpy(&tgt,&temp,sizeof(ExpoData));
bool tgtempty = (memcmp(&tgt, &temp, sizeof(ExpoData)) == 0);
if (tgt.chn!=src.chn || tgtempty) {
if ((dir) && (src.chn<unsigned(inputsCount-1))) src.chn++;
if ((!dir) && (src.chn>0)) src.chn--;
return idx;
}
// flip between idx and tgt
memcpy(&temp, &src, sizeof(ExpoData));
memcpy(&src, &tgt, sizeof(ExpoData));
memcpy(&tgt, &temp, sizeof(ExpoData));
return tdx;
}
+1
View File
@@ -34,6 +34,7 @@ class InputsPanel : public ModelPanel
bool expoInserted;
MixersList *ExposlistWidget;
bool firstLine;
int inputsCount;
int getExpoIndex(unsigned int dch);
bool gm_insertExpo(int idx);
+7 -8
View File
@@ -25,8 +25,14 @@ TimerPanel::TimerPanel(QWidget *parent, ModelData & model, TimerData & timer, Ge
ui->countdownBeep->setField(&timer.countdownBeep, this);
ui->countdownBeep->addItem(tr("Silent"), 0);
ui->countdownBeep->addItem(tr("Beeps"), 1);
if (IS_ARM(GetEepromInterface()->getBoard()) || IS_2560(GetEepromInterface()->getBoard()))
if (IS_ARM(GetEepromInterface()->getBoard()) || IS_2560(GetEepromInterface()->getBoard())) {
ui->countdownBeep->addItem(tr("Voice"), 2);
}
ui->persistent->setField(&timer.persistent, this);
ui->persistent->addItem(tr("Not persistent"), 0);
ui->persistent->addItem(tr("Persistent (flight)"), 1);
ui->persistent->addItem(tr("Persistent (manual reset)"), 2);
disableMouseScrolling();
@@ -55,7 +61,6 @@ void TimerPanel::update()
pvalue -= hours * 3600;
int minutes = pvalue / 60;
int seconds = pvalue % 60;
ui->persistent->setChecked(timer.persistent);
ui->persistentValue->setText(QString(" %1(%2:%3:%4)").arg(sign<0 ? "-" :" ").arg(hours, 2, 10, QLatin1Char('0')).arg(minutes, 2, 10, QLatin1Char('0')).arg(seconds, 2, 10, QLatin1Char('0')));
}
@@ -76,12 +81,6 @@ void TimerPanel::on_mode_currentIndexChanged(int index)
}
}
void TimerPanel::on_persistent_toggled(bool checked)
{
timer.persistent = checked;
emit modified();
}
void TimerPanel::on_minuteBeep_toggled(bool checked)
{
timer.minuteBeep = checked;
-1
View File
@@ -28,7 +28,6 @@ class TimerPanel : public ModelPanel
private slots:
void on_mode_currentIndexChanged(int index);
void on_value_editingFinished();
void on_persistent_toggled(bool checked);
void on_minuteBeep_toggled(bool checked);
private:
+1 -5
View File
@@ -51,11 +51,7 @@
</widget>
</item>
<item>
<widget class="QCheckBox" name="persistent">
<property name="text">
<string>Persistent</string>
</property>
</widget>
<widget class="QUnsignedAutoComboBox" name="persistent"/>
</item>
<item>
<widget class="QLabel" name="persistentValue">
+27 -7
View File
@@ -28,7 +28,7 @@ TelemetryAnalog::TelemetryAnalog(QWidget *parent, FrSkyChannelData & analog, Mod
update();
ui->UnitCB->setCurrentIndex(analog.type);
if (!IS_TARANIS(GetEepromInterface()->getBoard())) {
if (!IS_TARANIS(firmware->getBoard())) {
ui->alarm1LevelCB->setCurrentIndex(analog.alarms[0].level);
ui->alarm1GreaterCB->setCurrentIndex(analog.alarms[0].greater);
ui->alarm2LevelCB->setCurrentIndex(analog.alarms[1].level);
@@ -434,9 +434,11 @@ void TelemetryCustomScreen::on_screenType_currentIndexChanged(int index)
void TelemetryCustomScreen::customFieldChanged(int value)
{
int index = sender()->property("index").toInt();
screen.body.lines[index/256].source[index%256] = value;
emit modified();
if (!lock) {
int index = sender()->property("index").toInt();
screen.body.lines[index/256].source[index%256] = value;
emit modified();
}
}
void TelemetryCustomScreen::barSourceChanged(int index)
@@ -485,6 +487,11 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
}
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())) {
ui->telemetryProtocol->addItem(tr("FrSky D (cable)"), 2);
}
ui->telemetryProtocol->setCurrentIndex(model.telemetryProtocol);
}
else {
@@ -500,7 +507,7 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
ui->A2Layout->addWidget(analogs[1]);
connect(analogs[1], SIGNAL(modified()), this, SLOT(onAnalogModified()));
if (IS_ARM(GetEepromInterface()->getBoard())) {
if (IS_ARM(firmware->getBoard())) {
analogs[2] = new TelemetryAnalog(this, model.frsky.channels[2], model, generalSettings, firmware);
ui->A3Layout->addWidget(analogs[2]);
connect(analogs[2], SIGNAL(modified()), this, SLOT(onAnalogModified()));
@@ -520,7 +527,7 @@ TelemetryPanel::TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettin
telemetryCustomScreens[i] = tab;
}
if (IS_ARM(GetEepromInterface()->getBoard())) {
if (IS_ARM(firmware->getBoard())) {
ui->bladesCount->setMinimum(1);
ui->bladesCount->setMaximum(128);
}
@@ -535,6 +542,19 @@ TelemetryPanel::~TelemetryPanel()
delete ui;
}
void TelemetryPanel::update()
{
if (IS_TARANIS(firmware->getBoard())) {
if (model.moduleData[0].protocol == OFF && model.moduleData[1].protocol == PPM) {
ui->telemetryProtocol->setEnabled(true);
}
else {
ui->telemetryProtocol->setEnabled(false);
ui->telemetryProtocol->setCurrentIndex(0);
}
}
}
void TelemetryPanel::setup()
{
QString firmware_id = g.profile[g.id()].fwType();
@@ -543,7 +563,7 @@ void TelemetryPanel::setup()
ui->rssiAlarm1SB->setValue(model.frsky.rssiAlarms[0].value);
ui->rssiAlarm2SB->setValue(model.frsky.rssiAlarms[1].value);
if (!IS_TARANIS(GetEepromInterface()->getBoard())) {
if (!IS_TARANIS(firmware->getBoard())) {
ui->rssiAlarm1CB->setCurrentIndex(model.frsky.rssiAlarms[0].level);
ui->rssiAlarm2CB->setCurrentIndex(model.frsky.rssiAlarms[1].level);
}
+1
View File
@@ -81,6 +81,7 @@ class TelemetryPanel : public ModelPanel
public:
TelemetryPanel(QWidget *parent, ModelData & model, GeneralSettings & generalSettings, FirmwareInterface * firmware);
virtual ~TelemetryPanel();
virtual void update();
private slots:
void on_telemetryProtocol_currentIndexChanged(int index);
+2 -12
View File
@@ -46,16 +46,6 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>FrSky S.PORT</string>
</property>
</item>
<item>
<property name="text">
<string>FrSky D</string>
</property>
</item>
</widget>
</item>
</layout>
@@ -668,10 +658,10 @@
<number>1</number>
</property>
<property name="minimum">
<double>-1.500000000000000</double>
<double>-12.000000000000000</double>
</property>
<property name="maximum">
<double>1.500000000000000</double>
<double>12.000000000000000</double>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
+1 -1
View File
@@ -119,7 +119,7 @@ void PrintDialog::printSetup()
str.append(fv(tr("Timer1"), getTimerStr(g_model->timers[0]))); //value, mode, count up/down
str.append(fv(tr("Timer2"), getTimerStr(g_model->timers[1]))); //value, mode, count up/down
str.append(fv(tr("Protocol"), getProtocol(g_model))); //proto, numch, delay,
str.append(fv(tr("Pulse Polarity"), g_model->moduleData[0].ppmPulsePol ? "NEG" : "POS"));
str.append(fv(tr("Pulse Polarity"), g_model->moduleData[0].polarityToString()));
str.append(fv(tr("Throttle Trim"), g_model->thrTrim ? tr("Enabled") : tr("Disabled")));
str.append(fv(tr("Throttle Expo"), g_model->thrExpo ? tr("Enabled") : tr("Disabled")));
// TODO str.append(fv(tr("Trim Switch"), getSWName(g_model->trimSw)));
+15 -13
View File
@@ -59,16 +59,18 @@ class lcdWidget : public QWidget {
QPixmap buffer(2*lcdWidth, 2*lcdHeight);
QPainter p(&buffer);
doPaint(p);
bool toclipboard=g.snapToClpbrd();
QApplication::clipboard()->setPixmap( buffer );
if (!toclipboard) {
QString Path=g.snapshotDir();
if (Path.isEmpty() || !QDir(Path).exists()) {
Path=".";
bool toclipboard = g.snapToClpbrd();
if (toclipboard) {
QApplication::clipboard()->setPixmap( buffer );
}
else {
QString path = g.snapshotDir();
if (path.isEmpty() || !QDir(path).exists()) {
path = ".";
}
Path.append(QDir::separator()+fileName);
qDebug() << "Screenshot" << Path;
buffer.toImage().save(Path);
path.append(QDir::separator() + fileName);
qDebug() << "Screenshot" << path;
buffer.toImage().save(path);
}
}
@@ -120,18 +122,18 @@ class lcdWidget : public QWidget {
}
unsigned int previousDepth = 0xFF;
const int planSize = (lcdWidth * ((lcdHeight+7) / 8));
for (int y=0; y<lcdHeight; y++) {
unsigned int idx = (y/8)*lcdWidth;
unsigned int idx = (y*lcdDepth/8)*lcdWidth;
unsigned int mask = (1 << (y%8));
for (int x=0; x<lcdWidth; x++, idx++) {
if (lcdDepth == 1) {
if (lcdBuf[idx] & mask)
if (lcdBuf[idx] & mask) {
p.drawRect(2*x, 2*y, 1, 1);
}
}
else {
unsigned int z = (((lcdBuf[idx] & mask) ? 0x1 : 0) + ((lcdBuf[planSize+idx] & mask) ? 0x2 : 0) + ((lcdBuf[2*planSize+idx] & mask) ? 0x4 : 0) + ((lcdBuf[3*planSize+idx] & mask) ? 0x8 : 0));
unsigned int z = (y & 1) ? (lcdBuf[idx] >> 4) : (lcdBuf[idx] & 0x0F);
if (z) {
if (z != previousDepth) {
previousDepth = z;
+14 -1
View File
@@ -1232,7 +1232,7 @@ QPushButton:checked {
</size>
</property>
<property name="currentIndex">
<number>0</number>
<number>2</number>
</property>
<widget class="QWidget" name="simu">
<attribute name="title">
@@ -1440,6 +1440,19 @@ QPushButton:checked {
</item>
</layout>
</widget>
<widget class="QWidget" name="outputs2">
<attribute name="title">
<string>Outputs2</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<layout class="QGridLayout" name="logicalSwitchesLayout2"/>
</item>
<item>
<layout class="QGridLayout" name="channelsLayout2"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Gvars</string>
@@ -70,7 +70,7 @@
</size>
</property>
<property name="currentIndex">
<number>0</number>
<number>2</number>
</property>
<widget class="QWidget" name="simu">
<attribute name="title">
@@ -240,6 +240,19 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="outputs2">
<attribute name="title">
<string>Outputs2</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QGridLayout" name="logicalSwitchesLayout2"/>
</item>
<item>
<layout class="QGridLayout" name="channelsLayout2"/>
</item>
</layout>
</widget>
<widget class="QWidget" name="misc">
<attribute name="title">
<string>Gvars</string>
+55 -28
View File
@@ -282,9 +282,6 @@ void SimulatorDialog::initUi(T * ui)
trimHRight = ui->trimHRight;
trimVRight = ui->trimVRight;
tabWidget = ui->tabWidget;
logicalSwitchesLayout = ui->logicalSwitchesLayout;
channelsLayout = ui->channelsLayout;
gvarsLayout = ui->gvarsLayout;
leftXPerc = ui->leftXPerc;
leftYPerc = ui->leftYPerc;
rightXPerc = ui->rightXPerc;
@@ -356,14 +353,28 @@ void SimulatorDialog::initUi(T * ui)
setTrims();
int outputs = std::min(16, GetCurrentFirmware()->getCapability(Outputs));
int outputs = std::min(32,GetCurrentFirmware()->getCapability(Outputs));
if (outputs <= 16) {
// hide second Outputs tab
tabWidget->removeTab(tabWidget->indexOf(ui->outputs2));
}
else {
tabWidget->setTabText(tabWidget->indexOf(ui->outputs), tr("Outputs") + QString(" 1-%1").arg(16));
tabWidget->setTabText(tabWidget->indexOf(ui->outputs2), tr("Outputs") + QString(" 17-%1").arg(outputs));
}
for (int i=0; i<outputs; i++) {
int column = i / (outputs/2);
int line = i % (outputs/2);
QGridLayout * outputTab = ui->channelsLayout;
int column = i / (std::min(16,outputs)/2);
int line = i % (std::min(16,outputs)/2);
if (i >= 16 ) {
outputTab = ui->channelsLayout2;
column = (i-16) / (std::min(16,outputs-16)/2);
line = (i-16) % (std::min(16,outputs-16)/2);
}
QLabel * label = new QLabel(tabWidget);
ModelData model;
label->setText(RawSource(SOURCE_TYPE_CH, i).toString(model));
channelsLayout->addWidget(label, line, column == 0 ? 0 : 5, 1, 1);
outputTab->addWidget(label, line, column == 0 ? 0 : 5, 1, 1);
QSlider * slider = new QSlider(tabWidget);
slider->setEnabled(false);
@@ -389,30 +400,24 @@ void SimulatorDialog::initUi(T * ui)
slider->setInvertedAppearance(false);
slider->setTickPosition(QSlider::TicksBelow);
channelSliders << slider;
channelsLayout->addWidget(slider, line, column == 0 ? 1 : 4, 1, 1);
outputTab->addWidget(slider, line, column == 0 ? 1 : 4, 1, 1);
QLabel * value = new QLabel(tabWidget);
value->setMinimumSize(QSize(50, 0));
value->setAlignment(Qt::AlignCenter);
channelValues << value;
channelsLayout->addWidget(value, line, column == 0 ? 2 : 3, 1, 1);
outputTab->addWidget(value, line, column == 0 ? 2 : 3, 1, 1);
}
int switches = GetCurrentFirmware()->getCapability(LogicalSwitches);
for (int i=0; i<switches; i++) {
QFrame * swtch = new QFrame(tabWidget);
swtch->setAutoFillBackground(true);
swtch->setFrameShape(QFrame::Panel);
swtch->setFrameShadow(QFrame::Raised);
swtch->setLineWidth(2);
QVBoxLayout * layout = new QVBoxLayout(swtch);
layout->setContentsMargins(2, 2, 2, 2);
QLabel * label = new QLabel(swtch);
label->setText(RawSwitch(SWITCH_TYPE_VIRTUAL, i+1).toString());
label->setAlignment(Qt::AlignCenter);
logicalSwitchLabels << label;
layout->addWidget(label);
logicalSwitchesLayout->addWidget(swtch, i / (switches/2), i % (switches/2), 1, 1);
QFrame * swtch = createLogicalSwitch(tabWidget, i, logicalSwitchLabels);
ui->logicalSwitchesLayout->addWidget(swtch, i / (switches/2), i % (switches/2), 1, 1);
if (outputs > 16) {
// repeat logical switches on second outputs tab
swtch = createLogicalSwitch(tabWidget, i, logicalSwitchLabels2);
ui->logicalSwitchesLayout2->addWidget(swtch, i / (switches/2), i % (switches/2), 1, 1);
}
}
int fmodes = GetCurrentFirmware()->getCapability(FlightModes);
@@ -421,16 +426,16 @@ void SimulatorDialog::initUi(T * ui)
for (int fm=0; fm<fmodes; fm++) {
QLabel * label = new QLabel(tabWidget);
label->setText(QString("FM%1").arg(fm));
gvarsLayout->addWidget(label, 0, fm+1);
ui->gvarsLayout->addWidget(label, 0, fm+1);
}
for (int i=0; i<gvars; i++) {
QLabel * label = new QLabel(tabWidget);
label->setText(QString("GV%1").arg(i+1));
gvarsLayout->addWidget(label, i+1, 0);
ui->gvarsLayout->addWidget(label, i+1, 0);
for (int fm=0; fm<fmodes; fm++) {
QLabel * value = new QLabel(tabWidget);
gvarValues << value;
gvarsLayout->addWidget(value, i+1, fm+1);
ui->gvarsLayout->addWidget(value, i+1, fm+1);
}
}
}
@@ -443,6 +448,23 @@ void SimulatorDialog::initUi(T * ui)
}
}
QFrame * SimulatorDialog::createLogicalSwitch(QWidget * parent, int switchNo, QVector<QLabel *> & labels)
{
QFrame * swtch = new QFrame(parent);
swtch->setAutoFillBackground(true);
swtch->setFrameShape(QFrame::Panel);
swtch->setFrameShadow(QFrame::Raised);
swtch->setLineWidth(2);
QVBoxLayout * layout = new QVBoxLayout(swtch);
layout->setContentsMargins(2, 2, 2, 2);
QLabel * label = new QLabel(swtch);
label->setText(RawSwitch(SWITCH_TYPE_VIRTUAL, switchNo+1).toString());
label->setAlignment(Qt::AlignCenter);
labels << label;
layout->addWidget(label);
return swtch;
}
void SimulatorDialog::onButtonPressed(int value)
{
if (value == Qt::Key_Print) {
@@ -814,9 +836,11 @@ void SimulatorDialog::setValues()
Trims trims;
simulator->getTrims(trims);
for (int i=0; i<std::min(16, GetCurrentFirmware()->getCapability(Outputs)); i++) {
channelSliders[i]->setValue(chVal(outputs.chans[i]));
channelValues[i]->setText(QString("%1").arg((qreal)outputs.chans[i]*100/1024, 0, 'f', 1));
for (int i=0; i<GetCurrentFirmware()->getCapability(Outputs); i++) {
if (i < channelSliders.size()) {
channelSliders[i]->setValue(chVal(outputs.chans[i]));
channelValues[i]->setText(QString("%1").arg((qreal)outputs.chans[i]*100/1024, 0, 'f', 1));
}
}
leftXPerc->setText(QString("X %1%").arg((qreal)nodeLeft->getX()*100+trims.values[0]/5, 2, 'f', 0));
@@ -830,6 +854,9 @@ void SimulatorDialog::setValues()
for (int i=0; i<GetCurrentFirmware()->getCapability(LogicalSwitches); i++) {
logicalSwitchLabels[i]->setStyleSheet(outputs.vsw[i] ? CSWITCH_ON : CSWITCH_OFF);
if (!logicalSwitchLabels2.isEmpty()) {
logicalSwitchLabels2[i]->setStyleSheet(outputs.vsw[i] ? CSWITCH_ON : CSWITCH_OFF);
}
}
for (unsigned int gv=0; gv<numGvars; gv++) {
+2 -3
View File
@@ -51,10 +51,8 @@ class SimulatorDialog : public QDialog
mySlider * trimHLeft, * trimVLeft, * trimHRight, * trimVRight;
QLabel * leftXPerc, * rightXPerc, * leftYPerc, * rightYPerc;
QTabWidget * tabWidget;
QGridLayout * logicalSwitchesLayout;
QGridLayout * channelsLayout;
QGridLayout * gvarsLayout;
QVector<QLabel *> logicalSwitchLabels;
QVector<QLabel *> logicalSwitchLabels2;
QVector<QSlider *> channelSliders;
QVector<QLabel *> channelValues;
QVector<QLabel *> gvarValues;
@@ -91,6 +89,7 @@ class SimulatorDialog : public QDialog
int getValue(qint8 i);
bool getSwitch(int swtch, bool nc, qint8 level=0);
void setTrims();
QFrame * createLogicalSwitch(QWidget * parent, int switchNo, QVector<QLabel *> & labels);
int beepVal;
+8
View File
@@ -115,6 +115,7 @@ int main(int argc, char *argv[])
QAbstractButton *taranisButton = msgBox.addButton("Taranis", QMessageBox::ActionRole);
QAbstractButton *sky9xButton = msgBox.addButton("9X-Sky9X", QMessageBox::ActionRole);
QAbstractButton *gruvinButton = msgBox.addButton("9X-Gruvin9X", QMessageBox::ActionRole);
QAbstractButton *proButton = msgBox.addButton("9XR-Pro", QMessageBox::ActionRole);
msgBox.addButton("9X-M128", QMessageBox::ActionRole);
QPushButton *exitButton = msgBox.addButton(QMessageBox::Close);
@@ -149,6 +150,13 @@ int main(int argc, char *argv[])
eepromFileName = path.data();
dialog = new SimulatorDialog9X();
}
else if (msgBox.clickedButton() == proButton) {
current_firmware_variant = GetFirmware("opentx-9xrpro-heli-templates-ppmca-gvars-symlimits-autosource-autoswitch-battgraph-en");
fileName = eedir.filePath("eeprom-9xrpro.bin");
path = fileName.toAscii();
eepromFileName = path.data();
dialog = new SimulatorDialog9X();
}
else {
current_firmware_variant = GetFirmware("opentx-9x128-frsky-heli-templates-audio-voice-haptic-DSM2-ppmca-gvars-symlimits-autosource-autoswitch-battgraph-thrtrace-en");
fileName = eedir.filePath("eeprom-9x128.bin");
Binary file not shown.

Before

Width:  |  Height:  |  Size: 876 B

After

Width:  |  Height:  |  Size: 876 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 405 B

After

Width:  |  Height:  |  Size: 472 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 401 B

After

Width:  |  Height:  |  Size: 470 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 975 B

After

Width:  |  Height:  |  Size: 975 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 661 B

After

Width:  |  Height:  |  Size: 591 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 877 B

After

Width:  |  Height:  |  Size: 877 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 961 B

After

Width:  |  Height:  |  Size: 961 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 947 B

After

Width:  |  Height:  |  Size: 947 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 792 B

After

Width:  |  Height:  |  Size: 792 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1015 B

After

Width:  |  Height:  |  Size: 1015 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 783 B

After

Width:  |  Height:  |  Size: 1020 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 930 B

After

Width:  |  Height:  |  Size: 930 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 924 B

After

Width:  |  Height:  |  Size: 924 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 998 B

After

Width:  |  Height:  |  Size: 998 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 891 B

After

Width:  |  Height:  |  Size: 891 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 739 B

After

Width:  |  Height:  |  Size: 739 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 660 B

After

Width:  |  Height:  |  Size: 826 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 B

After

Width:  |  Height:  |  Size: 423 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1001 B

After

Width:  |  Height:  |  Size: 1001 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 665 B

After

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 911 B

After

Width:  |  Height:  |  Size: 911 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 812 B

After

Width:  |  Height:  |  Size: 812 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 873 B

After

Width:  |  Height:  |  Size: 873 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 935 B

After

Width:  |  Height:  |  Size: 935 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 312 B

After

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1003 B

After

Width:  |  Height:  |  Size: 1003 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 904 B

After

Width:  |  Height:  |  Size: 904 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 489 B

After

Width:  |  Height:  |  Size: 591 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 479 B

After

Width:  |  Height:  |  Size: 587 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

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