kopia lustrzana https://gitlab.com/eliggett/wfview
Porównaj commity
56 Commity
Autor | SHA1 | Data |
---|---|---|
Roeland Jansen | 85178de1d5 | |
Roeland Jansen | c7e8e90928 | |
Phil Taylor | 9db9be5dec | |
Phil Taylor | 637e94dfd8 | |
Elliott Liggett | b68874d328 | |
AsciiWolf | e5c6e2030a | |
AsciiWolf | 9be0acdf2e | |
Roeland Jansen | 1805861274 | |
Phil Taylor | b4c079f7f4 | |
Phil Taylor | 80d6614ca7 | |
Phil Taylor | 7df55bc41f | |
Roeland Jansen | 54b00b9022 | |
Roeland Jansen | 0c072f4665 | |
M0VSE | 6fc63df321 | |
M0VSE | d5e4a67ac1 | |
Roeland Jansen | c7e53f6a4d | |
Roeland Jansen | 375acead89 | |
Phil Taylor | e274271820 | |
Phil Taylor | 34655f6348 | |
Phil Taylor | 8ad74ac7f6 | |
Phil Taylor | 5d897c127a | |
Phil Taylor | 3c90a9363b | |
Phil Taylor | c392874b3b | |
Phil Taylor | 7b101d5ad4 | |
Phil Taylor | 6a2e2024ef | |
Phil Taylor | d941c831f3 | |
Phil Taylor | f35ac25ad3 | |
Phil Taylor | 58f38c1735 | |
Phil Taylor | 59bc2077e4 | |
Phil Taylor | 8b786c1821 | |
Phil Taylor | 5ded2a0e79 | |
M0VSE | c9300f4d86 | |
Roeland Jansen | 1549819ad6 | |
M0VSE | 4874d70215 | |
Phil Taylor | d5f0e0f63c | |
Phil Taylor | 1da3696ba2 | |
Phil Taylor | 289170e22d | |
Phil Taylor | ae0271c7f9 | |
Phil Taylor | a0f3f7de07 | |
Phil Taylor | 0304ac67f6 | |
Phil Taylor | 468cd2de0d | |
Phil Taylor | 592c583d19 | |
Phil Taylor | cadf835d95 | |
Phil Taylor | 75288b5e78 | |
Phil Taylor | 6fd0d4e763 | |
Phil Taylor | 03c45663dc | |
Phil Taylor | ac58289188 | |
Phil Taylor | d7ba3d9d9a | |
Phil Taylor | d1688a99c5 | |
Phil Taylor | a74f68d9d4 | |
Phil Taylor | f663550da7 | |
M0VSE | 9d63c5cb71 | |
Phil Taylor | eb65ae0b1c | |
Phil Taylor | 898d5960d8 | |
Phil Taylor | a461babf73 | |
Phil Taylor | 792fac11d6 |
256
CHANGELOG
256
CHANGELOG
|
@ -1,3 +1,259 @@
|
|||
commit 375acead898ee98ca46bc9946d7338fa4630e719
|
||||
Merge: e274271 34655f6
|
||||
Author: Roeland Jansen <roeland.jansen69@gmail.com>
|
||||
Date: Wed Apr 19 07:36:20 2023 +0200
|
||||
|
||||
Merge branch 'multi-usb'
|
||||
|
||||
commit e274271820f4562423a6cd89bfaa6033b9a4e609
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Mon Apr 17 11:19:00 2023 +0100
|
||||
|
||||
Add support for IC-905
|
||||
|
||||
commit 34655f63488d4b998255c4dfa5a03f96939d5a67
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sat Apr 15 21:13:43 2023 +0100
|
||||
|
||||
Allow user to select which LED is updated by the button.
|
||||
|
||||
commit 8ad74ac7f66e4f2201751f6590431324c88df720
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sat Apr 15 20:13:20 2023 +0100
|
||||
|
||||
First step at improving LED support
|
||||
|
||||
commit 5d897c127a1f066753834dc718f7adff7c72cadd
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sat Apr 15 11:34:41 2023 +0100
|
||||
|
||||
Make TX LED work on RC28
|
||||
|
||||
commit 3c90a9363b994240ec8f8b6417b5db31839c97e6
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sat Apr 15 11:25:35 2023 +0100
|
||||
|
||||
Various fixes
|
||||
|
||||
commit c392874b3b58bd90196f47b936ea54ac38cbc95f
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Fri Apr 14 21:36:46 2023 +0100
|
||||
|
||||
Comment out RC28 LED for now.
|
||||
|
||||
commit 7b101d5ad4c03082c5bcc2f0ca0c17ad80722434
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Fri Apr 14 21:33:45 2023 +0100
|
||||
|
||||
Another attempt to fix for GCC
|
||||
|
||||
commit 6a2e2024ef1e7cb8ea1b6641f751ecff5a404445
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Fri Apr 14 21:03:15 2023 +0100
|
||||
|
||||
Fix compile error
|
||||
|
||||
commit d941c831f357f294d29b6a39421e82f71d3810d4
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Fri Apr 14 10:26:54 2023 +0100
|
||||
|
||||
Resize the controller display on tab change
|
||||
|
||||
commit f35ac25ad35ac3e3736caf9db15051e61f20c748
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Thu Apr 13 15:28:46 2023 +0100
|
||||
|
||||
Various other fixes
|
||||
|
||||
commit 58f38c17357661333218fe8202c069760c3a13ca
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Thu Apr 13 14:36:16 2023 +0100
|
||||
|
||||
Add RC28 LED Control to the features and disable controls that don't make sense
|
||||
|
||||
commit 59bc2077e4e931293ffe2a0f262d99d2e07157ea
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Thu Apr 13 14:02:43 2023 +0100
|
||||
|
||||
Replace + with | in keyboard shortcuts
|
||||
|
||||
commit 8b786c1821f80708a2726cd5369736d6f8ae8ca3
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Wed Apr 12 11:14:40 2023 +0100
|
||||
|
||||
Fix recursive calling of pageChanged()
|
||||
|
||||
commit 5ded2a0e79d88b4422bd782c6036f1effd72c089
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Wed Apr 12 10:24:00 2023 +0100
|
||||
|
||||
Some more fixes
|
||||
|
||||
commit c9300f4d865968d017626c3617350965e01ad465
|
||||
Author: M0VSE <phil@m0vse.uk>
|
||||
Date: Tue Apr 11 20:25:29 2023 +0100
|
||||
|
||||
Add linux USB hotplug
|
||||
|
||||
commit 1549819ad6890ec2a554575eddfe6caf3454cd94
|
||||
Author: Roeland Jansen <roeland.jansen69@gmail.com>
|
||||
Date: Tue Apr 11 19:17:11 2023 +0200
|
||||
|
||||
Fedora 36 instr. added 2023-04-11/Knud OZ1DGN
|
||||
|
||||
commit 4874d70215b19bd8a4c6e14618b2a04e051030ce
|
||||
Author: M0VSE <phil@m0vse.uk>
|
||||
Date: Mon Apr 10 13:46:29 2023 +0100
|
||||
|
||||
Fix linux compile
|
||||
|
||||
commit d5f0e0f63c37eced89c70fc2bd65fbaddfa53434
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sun Apr 9 23:53:51 2023 +0100
|
||||
|
||||
Lots more features and other fixes
|
||||
|
||||
commit 1da3696ba23ce5593c864beb365df23fa493aba0
|
||||
Merge: a0f3f7d 289170e
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Mon Apr 3 14:31:48 2023 +0100
|
||||
|
||||
Merge branch 'tristate' into multi-usb
|
||||
|
||||
commit 289170e22d8e1a0a8e09ad8000f8fc24126c5fb1
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sun Apr 2 21:11:14 2023 +0100
|
||||
|
||||
Enable wf by default
|
||||
|
||||
commit ae0271c7f90d80233a1f3f2a2fce3116b12b34cc
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sun Apr 2 21:09:37 2023 +0100
|
||||
|
||||
Use tristate checkbox for Scope enable/disable (also add saving state)
|
||||
|
||||
commit a0f3f7de07da006799cdbff86251ee7f8d29a739
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sun Apr 2 20:07:13 2023 +0100
|
||||
|
||||
More work, tidying and improving stablity
|
||||
|
||||
commit 0304ac67f6a928624b1dd3850bab75525c4cbc9f
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Wed Mar 29 23:33:18 2023 +0100
|
||||
|
||||
Add backup/restore of button config
|
||||
|
||||
commit 468cd2de0d716238fbb3f0f558a7e98f5b05ac6d
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Tue Mar 28 21:58:46 2023 +0100
|
||||
|
||||
Add various commands, monitor, NB, NR etc.
|
||||
|
||||
commit 592c583d19aef88941c039d7fa3df0e727f8b363
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Tue Mar 28 19:07:54 2023 +0100
|
||||
|
||||
Add USB hotplug support in Windows
|
||||
|
||||
commit cadf835d958050be5f7b58074c0e9f5f27cb065d
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Mon Mar 27 12:38:01 2023 +0100
|
||||
|
||||
Receive current knob values from rig
|
||||
|
||||
commit 75288b5e7826ca05fc32263163d03334ada1d29d
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sun Mar 26 23:23:40 2023 +0100
|
||||
|
||||
Allow storing of icons and various other fixes
|
||||
|
||||
commit 6fd0d4e76310794a5b5a19d93bfcd3f890eb0ea0
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sun Mar 26 16:08:53 2023 +0100
|
||||
|
||||
various other fixes and stability improvements
|
||||
|
||||
commit 03c45663dcc9c9b7eb2246d93ce0329c779b0d3b
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sat Mar 25 16:58:28 2023 +0000
|
||||
|
||||
Fix crash when clicking on a knob.
|
||||
|
||||
commit ac582891886fd1706f0bf217a7b3b1e0d06bc20a
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sat Mar 25 09:09:42 2023 +0000
|
||||
|
||||
Initial support for Stream Deck Pro (other Stream Deck support to follow)
|
||||
|
||||
commit d7ba3d9d9ac7f47709ba52c20bbce54b2ff920f1
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Tue Mar 21 15:37:57 2023 +0000
|
||||
|
||||
Fix for wrong VFO being set on haveBandStackReg
|
||||
|
||||
commit d1688a99c5207cacdc6f6d1025d36c8664afe58d
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Tue Mar 21 13:24:48 2023 +0000
|
||||
|
||||
Fix controller setup window resizing
|
||||
|
||||
commit a74f68d9d410f8531ec59fc19941c4626eccd758
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Tue Mar 21 13:17:35 2023 +0000
|
||||
|
||||
Various fixes
|
||||
|
||||
commit f663550da77131ea8b70438d8c022114197752a6
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Mon Mar 20 15:37:11 2023 +0000
|
||||
|
||||
Set tab name correctly
|
||||
|
||||
commit 9d63c5cb71ba226e1e0d6f92c18c4cb17b3271ff
|
||||
Author: M0VSE <phil@m0vse.uk>
|
||||
Date: Mon Mar 20 15:32:04 2023 +0000
|
||||
|
||||
Fix window issue in linux
|
||||
|
||||
commit eb65ae0b1ce8a190c734f62e803d5a6e0e108034
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sat Mar 18 16:38:24 2023 +0000
|
||||
|
||||
Various fixes
|
||||
|
||||
Improve UI handling, add disable option
|
||||
|
||||
commit 898d5960d8525184efc89bb4f26ce65c4e14c88d
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sat Mar 18 01:34:40 2023 +0000
|
||||
|
||||
Allow main knob to be used for other values than VFO
|
||||
|
||||
commit a461babf73f156c08b83b9160098fb8f2a34f9ce
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sat Mar 18 00:17:33 2023 +0000
|
||||
|
||||
Fix warning
|
||||
|
||||
commit 792fac11d67328d1443e591b25d4d70f96db12ef
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Fri Mar 17 23:35:40 2023 +0000
|
||||
|
||||
Support multiple USB controllers
|
||||
|
||||
commit f3a25fade42ad6b99bbb3de033ccbfd6c40d86dc
|
||||
Author: Phil Taylor <phil@m0vse.uk>
|
||||
Date: Sun Mar 12 18:25:17 2023 +0000
|
||||
|
||||
Remove unnecessary stepType setting from cwsender.ui
|
||||
|
||||
commit 3fa14ebc37c4e6c2f9d5fba47103e293e0a96d51
|
||||
Author: Roeland Jansen <roeland.jansen69@gmail.com>
|
||||
Date: Sun Mar 12 12:44:46 2023 +0100
|
||||
|
||||
v1.62 released; performance fix 9700 and cw sidetone
|
||||
|
||||
commit 6049e1dee67e981625652b43492f1f2f6c8edac1
|
||||
Merge: e8ca39c 5328838
|
||||
Author: Roeland Jansen <roeland.jansen69@gmail.com>
|
||||
|
|
|
@ -0,0 +1,109 @@
|
|||
|
||||
|
||||
|
||||
|
||||
## this is a merged list of CI-V addresses, type of interface(s), rates and all.
|
||||
|
||||
It has been merged from many sources but the most important ones are these:
|
||||
|
||||
1) https://www.docksideradio.com/Icom%20Radio%20Hex%20Addresses.htm
|
||||
2) http://www.plicht.de/ci-v/civ-bus-adressing/
|
||||
3) https://www.icomjapan.com/support/manual/
|
||||
|
||||
|
||||
|
||||
first of all a list that appears not to be a known CI-V address in use:
|
||||
|
||||
| model | addr |
|
||||
| ----- | ---- |
|
||||
|? | 0x06 |
|
||||
|? | 0x36 |
|
||||
|? | 0x54 |
|
||||
|? | 0x7E |
|
||||
|? | 0x82 |
|
||||
|? | 0x84 |
|
||||
|? | 0x8A |
|
||||
|? | 0x90 |
|
||||
|? | 0x92 |
|
||||
|? | 0x9E |
|
||||
|? | 0xA0 |
|
||||
|? | 0xA8 |
|
||||
|? | 0xAA |
|
||||
|
||||
|
||||
|
||||
and here the list of known CI-V addresses
|
||||
|
||||
|
||||
|
||||
| model | addr | year | interface | rate |
|
||||
| ------------ | ---- | ---- | -------------------------------------- | ---- |
|
||||
| IC-1271 | 0x24 | 1987 | TTL | auto |
|
||||
| IC-1275 | 0x18 | 1989 | TTL | auto |
|
||||
| IC-271 | 0x20 | 1983 | TTL | auto |
|
||||
| IC-275 | 0x10 | 1987 | TTL | auto |
|
||||
| IC-375 | 0x12 | 198? | TTL | auto |
|
||||
| IC-471 | 0x22 | 1984 | TTL | auto |
|
||||
| IC-475 | 0x14 | 1987 | TTL | auto |
|
||||
| IC-575 | 0x16 | 1988 | TTL | auto |
|
||||
| IC-7000 | 0x70 | 2005 | TTL | auto |
|
||||
| IC-703 | 0x68 | 2003 | TTL | auto |
|
||||
| IC-705 | 0xA4 | 2020 | USB, Bluetooth, Wifi | auto |
|
||||
| IC-706 | 0x48 | 1995 | TTL | auto |
|
||||
| IC-706MkII | 0x4E | 1997 | TTL | auto |
|
||||
| IC-706MkII-G | 0x58 | 1998 | TTL | auto |
|
||||
| IC-707 | 0x3E | 1993 | TTL | auto |
|
||||
| IC-7100 | 0x88 | 2012 | TTL | auto |
|
||||
| IC-718 | 0x5E | 2001 | TTL | auto |
|
||||
| IC-7200 | 0x76 | 2007 | TTL | auto |
|
||||
| IC-725 | 0x28 | 1988 | TTL | 1200 |
|
||||
| IC-726 | 0x30 | 1989 | TTL | auto |
|
||||
| IC-728 | 0x38 | 1992 | TTL | 1200 |
|
||||
| IC-729 | 0x3A | 1992 | TTL | 9600 |
|
||||
| IC-7300 | 0x94 | 2016 | TTL, USB | auto |
|
||||
| IC-735 | 0x04 | 1985 | TTL | 1200 |
|
||||
| IC-736 | 0x40 | 1994 | TTL | 9600 |
|
||||
| IC-737 | 0x3C | 1993 | TTL | 9600 |
|
||||
| IC-738 | 0x44 | 1994 | TTL | 9600 |
|
||||
| IC-7410 | 0x80 | 2011 | TTL, USB | auto |
|
||||
| IC-746 | 0x56 | 1998 | TTL | auto |
|
||||
| IC-746Pro | 0x66 | 2001 | TTL | auto |
|
||||
| IC-751A | 0x1C | 1985 | TTL | 1200 |
|
||||
| IC-756 | 0x50 | 1997 | TTL | auto |
|
||||
| IC-756Pro | 0x5C | 2000 | TTL | auto |
|
||||
| IC-756ProII | 0x64 | 2001 | TTL | auto |
|
||||
| IC-756ProIII | 0x6E | 2004 | TTL | auto |
|
||||
| IC-7600 | 0x7A | 2009 | TTL, USB | auto |
|
||||
| IC-7610 | 0x98 | 2017 | TTL, USB, Ethernet | auto |
|
||||
| IC-761 | 0x1E | 1987 | TTL | 1200 |
|
||||
| IC-765 | 0x2C | 1989 | TTL | 1200 |
|
||||
| IC-7700 | 0x74 | 2007 | TTL, RS-232C 9 pin, Ethernet | auto |
|
||||
| IC-775 | 0x46 | 1995 | TTL | auto |
|
||||
| IC-7800 | 0x6A | 2004 | TTL, RS-232C 9 pin, Ethernet | auto |
|
||||
| IC-78 | 0x62 | 2000 | TTL | auto |
|
||||
| IC-781 | 0x26 | 1987 | TTL | 1200 |
|
||||
| IC-785x | 0x8E | 2015 | TTL, USB, Ethernet | auto |
|
||||
| IC-820 | 0x42 | 1994 | TTL | auto |
|
||||
| IC-821 | 0x4C | 1996 | TTL | auto |
|
||||
| IC-905 | 0xAC | 2023 | USB, Ethernet | auto |
|
||||
| IC-9100 | 0x7C | 2010 | TTL, USB | auto |
|
||||
| IC-910 | 0x60 | 2001 | TTL | auto |
|
||||
| IC-9700 | 0xA2 | 2019 | TTL, USB, Ethernet | auto |
|
||||
| IC-970 | 0x2E | 1990 | TTL | auto |
|
||||
| IC-R10 | 0x52 | 1996 | TTL | auto |
|
||||
| IC-R20 | 0x6C | 2004 | TTL | auto |
|
||||
| IC-R30 | 0x9C | 2018 | TTL, Bluetooth | auto |
|
||||
| IC-R7000 | 0x08 | 1986 | TTL | auto |
|
||||
| IC-R7100 | 0x34 | 1991 | TTL | auto |
|
||||
| IC-R71 | 0x1A | 1984 | TTL | auto |
|
||||
| IC-R72 | 0x32 | 1992 | TTL | auto |
|
||||
| IC-R75 | 0x5A | 1999 | TTL, RS-232C 9 pin | auto |
|
||||
| IC-R8500 | 0x4A | 1996 | TTL, RS-232C 25 pin | auto |
|
||||
| IC-R8600 | 0x96 | 2017 | TTL, USB, Ethernet | auto |
|
||||
| IC-R9000 | 0x2A | 1989 | TTL | auto |
|
||||
| IC-R9500 | 0x72 | 2007 | TTL, RS-232C 9 pin, Ethernet | auto |
|
||||
| IC-RX7 | 0x78 | 2007 | TTL | auto |
|
||||
| ID-4100 | 0x9A | 2017 | TTL, Bluetooth | auto |
|
||||
| ID-5100 | 0x8C | 2014 | TTL, Bluetooth | auto |
|
||||
| ID-51 | 0x86 | 2012 | TTL | auto |
|
||||
| ID-52 | 0xA6 | 2021 | TTL, Bluetooth | auto |
|
26
INSTALL.md
26
INSTALL.md
|
@ -18,6 +18,7 @@ sudo apt-get install libeigen3-dev
|
|||
sudo apt-get install portaudio19-dev
|
||||
sudo apt-get install librtaudio-dev
|
||||
sudo apt-get install libhidapi-dev libqt5gamepad5-dev
|
||||
sudo apt-get install libudev-dev
|
||||
~~~
|
||||
Now you need to install qcustomplot. There are two versions that are commonly found in linux distros: 1.3 and 2.0. Either will work fine. If you are not sure which version your linux install comes with, simply run both commands. One will work and the other will fail, and that's fine!
|
||||
|
||||
|
@ -79,8 +80,7 @@ install wfview on suse 15.3 & up, sles 15.x or tumbleweed; this was done on a cl
|
|||
we need to add packages to be able to build the stuff.
|
||||
|
||||
- sudo zypper in --type pattern devel_basis
|
||||
- sudo zypper in libQt5Widgets-devel libqt5-qtbase-common-devel libqt5-qtserialport-devel libQt5SerialPort5 qcustomplot-devel libqcustomplot2 libQt5PrintSupport-devel libqt5-qtmultimedia-devel lv2-devel libopus-devel eigen3-devel libQt5Xml-devel portaudio-devel rtaudio-devel libqt5-qtgamepad-dev
|
||||
libQt5Gamepad5
|
||||
- sudo zypper in libQt5Widgets-devel libqt5-qtbase-common-devel libqt5-qtserialport-devel libQt5SerialPort5 qcustomplot-devel libqcustomplot2 libQt5PrintSupport-devel libqt5-qtmultimedia-devel lv2-devel libopus-devel eigen3-devel libQt5Xml-devel portaudio-devel rtaudio-devel libqt5-qtgamepad-devel libQt5Gamepad5
|
||||
|
||||
optional (mainly for development specifics): get and install qt5:
|
||||
|
||||
|
@ -129,6 +129,28 @@ When done, create a build area, clone the repo, build and install:
|
|||
|
||||
wfview is now installed in /usr/local/bin
|
||||
|
||||
|
||||
Fedora 36:
|
||||
|
||||
2023-04-11/Knud OZ1DGN
|
||||
|
||||
|
||||
Precondition:
|
||||
|
||||
F36 KDE plasma desktop
|
||||
wfview 1.61 prebuild binary
|
||||
|
||||
Install following packages:
|
||||
sudo dnf install qcustomplot-qt5 qt5-qtmultimedia qt5-qtserialport rtaudio portaudio hidapi qt5-qtgamepad
|
||||
|
||||
sudo ln -s /usr/lib64/libqcustomplot-qt5.so.2 /usr/lib64/libqcustomplot.so.2
|
||||
|
||||
Move /usr/share/wfview to /usr/local/share:
|
||||
|
||||
sudo mv /usr/share/wfview/stylesheets/* /usr/local/share/wfview
|
||||
|
||||
|
||||
|
||||
# How to configure your RC-28 knob under Linux
|
||||
|
||||
To use RC-28 knob you need to add udev rules, please execute as root:
|
||||
|
|
4
WHATSNEW
4
WHATSNEW
|
@ -5,7 +5,9 @@ The following highlights are in this 1.6x-release since v1.60:
|
|||
+1.61 many small fixes for several platforms
|
||||
+1.62 cw side tone added
|
||||
performance fix for 9700
|
||||
|
||||
+1.63 started adding IC-905 (obviously untested)
|
||||
started multi-usb
|
||||
|
||||
Notes:
|
||||
|
||||
- We know about high CPU usage on RPi.
|
||||
|
|
|
@ -15,8 +15,7 @@ aboutbox::aboutbox(QWidget *parent) :
|
|||
ui->topText->setText("wfview version " + QString(WFVIEW_VERSION));
|
||||
|
||||
QString head = QString("<html><head></head><body>");
|
||||
QString copyright = QString("Copyright 2017-2022 Elliott H. Liggett, W6EL. All rights reserved.<br/>wfview source code is <a href=\"https://gitlab.com/eliggett/wfview/-/blob/master/LICENSE\">licensed</a> under the GNU GPLv3.");
|
||||
QString nacode = QString("<br/><br/>Networking, audio, rigctl server, and much more written by Phil Taylor, M0VSE");
|
||||
QString copyright = QString("Copyright 2017-2023 Elliott H. Liggett, W6EL and Phil E. Taylor, M0VSE. All rights reserved.<br/>wfview source code is <a href=\"https://gitlab.com/eliggett/wfview/-/blob/master/LICENSE\">licensed</a> under the GNU GPLv3.");
|
||||
QString scm = QString("<br/><br/>Source code and issues managed by Roeland Jansen, PA3MET");
|
||||
QString doctest = QString("<br/><br/>Testing and development mentorship from Jim Nijkamp, PA8E.");
|
||||
|
||||
|
@ -86,7 +85,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.");
|
|||
|
||||
// String it all together:
|
||||
|
||||
QString aboutText = head + copyright + "\n" + nacode + "\n" + scm + "\n" + doctest + dedication + wfviewcommunityack;
|
||||
QString aboutText = head + copyright + "\n" + "\n" + scm + "\n" + doctest + dedication + wfviewcommunityack;
|
||||
aboutText.append(website + "\n" + donate + "\n"+ docs + support + contact +"\n");
|
||||
aboutText.append("\n" + ssCredit + "\n" + rsCredit + "\n");
|
||||
|
||||
|
|
|
@ -113,13 +113,11 @@ bool audioConverter::convert(audioPacket audio)
|
|||
QByteArray outPacket(nSamples * sizeof(float) * inFormat.channelCount(), (char)0xff); // Preset the output buffer size.
|
||||
float* out = (float*)outPacket.data();
|
||||
|
||||
//if (audio.seq > lastAudioSequence + 1) {
|
||||
// nSamples = opus_decode_float(opusDecoder, Q_NULLPTR, 0, out, nSamples, 1);
|
||||
//}
|
||||
//else {
|
||||
nSamples = opus_decode_float(opusDecoder, in, audio.data.size(), out, nSamples, 0);
|
||||
//}
|
||||
//lastAudioSequence = audio.seq;
|
||||
int ret = opus_decode_float(opusDecoder, in, audio.data.size(), out, nSamples, 0);
|
||||
if (ret != nSamples)
|
||||
{
|
||||
qDebug(logAudio()) << "opus_decode_float: returned:" << ret << "samples, expected:" << nSamples;
|
||||
}
|
||||
audio.data.clear();
|
||||
audio.data = outPacket; // Replace incoming data with converted.
|
||||
}
|
||||
|
|
1294
controllersetup.cpp
1294
controllersetup.cpp
Plik diff jest za duży
Load Diff
|
@ -6,6 +6,7 @@
|
|||
#include <QGraphicsScene>
|
||||
#include <QGraphicsTextItem>
|
||||
#include <QGraphicsPixmapItem>
|
||||
#include <QGraphicsRectItem>
|
||||
#include <QPoint>
|
||||
#include <QGraphicsSceneMouseEvent>
|
||||
#include <QVector>
|
||||
|
@ -14,14 +15,99 @@
|
|||
#include <QLabel>
|
||||
#include <QGraphicsProxyWidget>
|
||||
#include <QAbstractItemView>
|
||||
#include <QHBoxLayout>
|
||||
#include <QGridLayout>
|
||||
#include <QPushButton>
|
||||
#include <QScopedPointer>
|
||||
#include <QCheckBox>
|
||||
#include <QFileDialog>
|
||||
#include <QMessageBox>
|
||||
#include <QLayoutItem>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QObject>
|
||||
#include <QColorDialog>
|
||||
#include <QWidget>
|
||||
#include <QSpinBox>
|
||||
#include <QCheckBox>
|
||||
|
||||
#include "usbcontroller.h"
|
||||
|
||||
|
||||
class controllerScene : public QGraphicsScene
|
||||
{
|
||||
Q_OBJECT
|
||||
QGraphicsLineItem* item = Q_NULLPTR;
|
||||
|
||||
signals:
|
||||
void showMenu(controllerScene* scene, QPoint p);
|
||||
void buttonAction(bool pressed, QPoint p);
|
||||
protected:
|
||||
void mousePressEvent(QGraphicsSceneMouseEvent* event) {
|
||||
|
||||
if (event->button() == Qt::RightButton)
|
||||
{
|
||||
emit showMenu(this, event->scenePos().toPoint());
|
||||
}
|
||||
else if (event->button() == Qt::LeftButton)
|
||||
{
|
||||
// Simulate a button press
|
||||
emit buttonAction(true,event->scenePos().toPoint());
|
||||
}
|
||||
else
|
||||
{
|
||||
QGraphicsScene::mousePressEvent(event);
|
||||
}
|
||||
}
|
||||
void mouseReleaseEvent(QGraphicsSceneMouseEvent* event) {
|
||||
|
||||
if (event->button() == Qt::LeftButton)
|
||||
{
|
||||
// Simulate a button release
|
||||
emit buttonAction(false,event->scenePos().toPoint());
|
||||
}
|
||||
else
|
||||
{
|
||||
QGraphicsScene::mouseReleaseEvent(event);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
struct tabContent {
|
||||
QWidget* tab;
|
||||
QVBoxLayout* mainLayout;
|
||||
QHBoxLayout* topLayout;
|
||||
QWidget* widget;
|
||||
QVBoxLayout* layout;
|
||||
QCheckBox* disabled;
|
||||
QLabel* message;
|
||||
QGraphicsView* view;
|
||||
QLabel* pageLabel;
|
||||
QSpinBox* page;
|
||||
QHBoxLayout* sensLayout;
|
||||
QLabel* sensLabel;
|
||||
QSlider* sens;
|
||||
QImage* image;
|
||||
QGraphicsItem* bgImage = Q_NULLPTR;
|
||||
controllerScene* scene = Q_NULLPTR;
|
||||
QGridLayout* grid;
|
||||
QLabel* brightLabel;
|
||||
QComboBox* brightness;
|
||||
QLabel* speedLabel;
|
||||
QComboBox* speed;
|
||||
QLabel* orientLabel;
|
||||
QComboBox* orientation;
|
||||
QLabel* colorLabel;
|
||||
QPushButton* color;
|
||||
QLabel* timeoutLabel;
|
||||
QSpinBox* timeout;
|
||||
QLabel* pagesLabel;
|
||||
QSpinBox* pages;
|
||||
QLabel* helpText;
|
||||
};
|
||||
|
||||
|
||||
|
||||
namespace Ui {
|
||||
class controllerSetup;
|
||||
|
@ -36,81 +122,102 @@ public:
|
|||
~controllerSetup();
|
||||
|
||||
signals:
|
||||
void sendSensitivity(int val);
|
||||
void programButton(quint8 but, QString text);
|
||||
void programBrightness(quint8 level);
|
||||
void programWheelColour(quint8 r, quint8 g, quint8 b);
|
||||
void programOverlay(quint8 duration, QString text);
|
||||
void programOrientation(quint8 value);
|
||||
void programSpeed(quint8 value);
|
||||
void programTimeout(quint8 value);
|
||||
void updateSettings(quint8 bright, quint8 orient, quint8 speed, quint8 timeout, QColor color);
|
||||
void started();
|
||||
void sendRequest(USBDEVICE* dev, usbFeatureType request, int val=0, QString text="", QImage* img=Q_NULLPTR, QColor* color=Q_NULLPTR);
|
||||
void programDisable(USBDEVICE* dev, bool disable);
|
||||
void programPages(USBDEVICE* dev, int pages);
|
||||
void backup(USBDEVICE* dev, QString path);
|
||||
void restore(USBDEVICE *dev, QString path);
|
||||
|
||||
public slots:
|
||||
void newDevice(unsigned char devType, QVector<BUTTON>* but, QVector<KNOB>* kb, QVector<COMMAND>* cmd, QMutex* mut);
|
||||
void mousePressed(QPoint p);
|
||||
void init(usbDevMap* dev, QVector<BUTTON>* but, QVector<KNOB>* kb, QVector<COMMAND>* cmd, QMutex* mut);
|
||||
void newDevice(USBDEVICE* dev);
|
||||
void removeDevice(USBDEVICE* dev);
|
||||
void showMenu(controllerScene *scene,QPoint p);
|
||||
void onEventIndexChanged(int index);
|
||||
void offEventIndexChanged(int index);
|
||||
void knobEventIndexChanged(int index);
|
||||
void receiveSensitivity(int val);
|
||||
void on_sensitivitySlider_valueChanged(int val);
|
||||
void on_qkBrightCombo_currentIndexChanged(int index);
|
||||
void on_qkOrientCombo_currentIndexChanged(int index);
|
||||
void on_qkSpeedCombo_currentIndexChanged(int index);
|
||||
void on_qkColorButton_clicked();
|
||||
void on_qkTimeoutSpin_valueChanged(int arg1);
|
||||
void setDefaults(quint8 bright, quint8 orient, quint8 speed, quint8 timeout, QColor color);
|
||||
void ledNumberChanged(int index);
|
||||
void sensitivityMoved(USBDEVICE* dev, int val);
|
||||
void brightnessChanged(USBDEVICE* dev, int index);
|
||||
void orientationChanged(USBDEVICE* dev, int index);
|
||||
void speedChanged(USBDEVICE* dev, int index);
|
||||
void colorPicker(USBDEVICE* dev, QPushButton* btn, QColor color);
|
||||
void buttonOnColorClicked();
|
||||
void buttonOffColorClicked();
|
||||
void buttonIconClicked();
|
||||
void latchStateChanged(int state);
|
||||
|
||||
void timeoutChanged(USBDEVICE* dev, int val);
|
||||
void pageChanged(USBDEVICE* dev, int val);
|
||||
void pagesChanged(USBDEVICE* dev, int val);
|
||||
void disableClicked(USBDEVICE* dev, bool clicked, QWidget* widget);
|
||||
void setConnected(USBDEVICE* dev);
|
||||
void hideEvent(QHideEvent *event);
|
||||
void on_tabWidget_currentChanged(int index);
|
||||
void on_backupButton_clicked();
|
||||
void on_restoreButton_clicked();
|
||||
|
||||
private:
|
||||
|
||||
usbDeviceType usbDevice = usbNone;
|
||||
usbDeviceType type = usbNone;
|
||||
Ui::controllerSetup* ui;
|
||||
QGraphicsScene* scene;
|
||||
QGraphicsTextItem* textItem;
|
||||
QGraphicsItem* bgImage = Q_NULLPTR;
|
||||
QLabel* imgLabel;
|
||||
unsigned char currentDevice = 0;
|
||||
QVector<BUTTON>* buttons;
|
||||
QVector<KNOB>* knobs;
|
||||
QVector<COMMAND>* commands;
|
||||
usbDevMap* devices;
|
||||
|
||||
BUTTON* currentButton = Q_NULLPTR;
|
||||
KNOB* currentKnob = Q_NULLPTR;
|
||||
QComboBox* onEvent = Q_NULLPTR;
|
||||
QComboBox* offEvent = Q_NULLPTR;
|
||||
QComboBox* knobEvent = Q_NULLPTR;
|
||||
QComboBox* qkBright = Q_NULLPTR;
|
||||
QGraphicsProxyWidget* onEventProxy = Q_NULLPTR;
|
||||
QGraphicsProxyWidget* offEventProxy = Q_NULLPTR;
|
||||
QGraphicsProxyWidget* knobEventProxy = Q_NULLPTR;
|
||||
QGraphicsProxyWidget* qkBrightProxy = Q_NULLPTR;
|
||||
|
||||
// Update Dialog
|
||||
QDialog * updateDialog = Q_NULLPTR;
|
||||
QComboBox* onEvent;
|
||||
QComboBox* offEvent;
|
||||
QComboBox* knobEvent;
|
||||
QLabel* onLabel;
|
||||
QLabel* offLabel;
|
||||
QLabel* knobLabel;
|
||||
QPushButton* buttonOnColor;
|
||||
QPushButton* buttonOffColor;
|
||||
QCheckBox *buttonLatch;
|
||||
QPushButton* buttonIcon;
|
||||
QLabel* iconLabel;
|
||||
QSpinBox* ledNumber;
|
||||
|
||||
QString deviceName;
|
||||
QMutex* mutex;
|
||||
QColor initialColor = Qt::white;
|
||||
|
||||
QLabel* noControllersText;
|
||||
|
||||
int numTabs=0;
|
||||
QMap<QString,tabContent*> tabs;
|
||||
|
||||
// Below are used for each tab:
|
||||
/*
|
||||
QList<QWidget *> tabs;
|
||||
QList<QVBoxLayout *> layouts;
|
||||
QList<QWidget *> widgets;
|
||||
QList<QGraphicsView *> graphicsViews;
|
||||
QList<QGraphicsScene*> scenes;
|
||||
QList<QGraphicsItem*> bgImages;
|
||||
QList<QSlider *>sensitivitys;
|
||||
|
||||
// Just used for QuickKeys device
|
||||
QList<QComboBox *>brightCombos;
|
||||
QList<QComboBox *>speedCombos;
|
||||
QList<QComboBox *>orientCombos;
|
||||
QList<QPushButton *>colorButtons;
|
||||
QList<QSpinBox *>timeoutSpins;
|
||||
*/
|
||||
};
|
||||
|
||||
|
||||
|
||||
class controllerScene : public QGraphicsScene
|
||||
{
|
||||
Q_OBJECT
|
||||
QGraphicsLineItem* item = Q_NULLPTR;
|
||||
|
||||
signals:
|
||||
void mousePressed(QPoint p);
|
||||
protected:
|
||||
void mousePressEvent(QGraphicsSceneMouseEvent* event) {
|
||||
|
||||
if (event->button() == Qt::RightButton)
|
||||
{
|
||||
emit mousePressed(event->scenePos().toPoint());
|
||||
}
|
||||
else
|
||||
{
|
||||
QGraphicsScene::mousePressEvent(event);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -6,15 +6,35 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>442</width>
|
||||
<height>343</height>
|
||||
<width>788</width>
|
||||
<height>646</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Controller setup</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="7" column="0">
|
||||
<item row="0" column="0">
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="tabPosition">
|
||||
<enum>QTabWidget::North</enum>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab">
|
||||
<attribute name="title">
|
||||
<string>Tab 1</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
<widget class="QWidget" name="tab_2">
|
||||
<attribute name="title">
|
||||
<string>Tab 2</string>
|
||||
</attribute>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<layout class="QHBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
|
@ -31,6 +51,20 @@
|
|||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QPushButton" name="backupButton">
|
||||
<property name="text">
|
||||
<string>Backup</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="restoreButton">
|
||||
<property name="text">
|
||||
<string>Restore</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer>
|
||||
<property name="orientation">
|
||||
|
@ -60,197 +94,6 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QComboBox" name="qkBrightCombo">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Brightness</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Off</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Low</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Medium</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>High</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="qkSpeedCombo">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Speed</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Fastest</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Faster</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Normal</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Slower</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Slowest</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="qkOrientCombo">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Orientation</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Rotate 0</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Rotate 90</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Rotate 180</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Rotate 270</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="qkColorButton">
|
||||
<property name="text">
|
||||
<string>Color</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="qkTimeoutLabel">
|
||||
<property name="text">
|
||||
<string>Timeout</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="qkTimeoutSpin">
|
||||
<property name="maximum">
|
||||
<number>255</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>Sensitivity</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSlider" name="sensitivitySlider">
|
||||
<property name="minimum">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>21</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="invertedAppearance">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string><html><head/><body><p align="center"><span style=" font-weight:700;">Button configuration: </span>Right-click on each button to configure it.</p><p align="center">Top selection is command to send when button is pressed and bottom is (optional) command to send when button is released.</p></body></html></string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QGraphicsView" name="graphicsView"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
|
|
@ -493,7 +493,7 @@ void meter::drawScalePo(QPainter *qp)
|
|||
|
||||
// Here, P is now 60 watts:
|
||||
// Higher scale:
|
||||
i = i - (int)(10*dnPerWatt); // back one tick first. Otherwise i starts at 178.
|
||||
//i = i - (int)(10*dnPerWatt); // back one tick first. Otherwise i starts at 178. **Not used?**
|
||||
//qDebug() << "meter i: " << i;
|
||||
dnPerWatt = (213-143.0f) / 50.0f; // 1.4 dn per watt
|
||||
// P=5 here.
|
||||
|
|
|
@ -399,6 +399,49 @@ typedef union capabilities_packet {
|
|||
} *capabilities_packet_t;
|
||||
|
||||
|
||||
typedef union streamdeck_image_header {
|
||||
struct
|
||||
{
|
||||
quint8 cmd;
|
||||
quint8 suffix;
|
||||
quint8 button;
|
||||
quint8 isLast;
|
||||
quint16 length;
|
||||
quint16 index;
|
||||
};
|
||||
char packet[8];
|
||||
} *streamdeck_image_header_t;
|
||||
|
||||
typedef union streamdeck_v1_image_header {
|
||||
struct
|
||||
{
|
||||
quint8 cmd;
|
||||
quint8 suffix;
|
||||
quint16 index;
|
||||
quint8 isLast;
|
||||
quint8 button;
|
||||
quint8 unused[10];
|
||||
};
|
||||
char packet[16];
|
||||
} *streamdeck_v1_image_header_t;
|
||||
|
||||
typedef union streamdeck_lcd_header {
|
||||
struct
|
||||
{
|
||||
quint8 cmd;
|
||||
quint8 suffix;
|
||||
quint16 x;
|
||||
quint16 y;
|
||||
quint16 width;
|
||||
quint16 height;
|
||||
quint8 isLast;
|
||||
quint16 index;
|
||||
quint16 length;
|
||||
quint8 unused;
|
||||
};
|
||||
char packet[16];
|
||||
} *streamdeck_lcd_header_t;
|
||||
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
|
|
11
prefs.h
11
prefs.h
|
@ -2,9 +2,11 @@
|
|||
#define PREFS_H
|
||||
|
||||
#include <QString>
|
||||
|
||||
#include <QColor>
|
||||
#include <QMap>
|
||||
#include "wfviewtypes.h"
|
||||
|
||||
|
||||
struct preferences {
|
||||
// Program:
|
||||
QString version;
|
||||
|
@ -15,6 +17,7 @@ struct preferences {
|
|||
// Interface:
|
||||
bool useFullScreen;
|
||||
bool useSystemTheme;
|
||||
int wfEnable;
|
||||
bool drawPeaks;
|
||||
underlay_t underlayMode = underlayNone;
|
||||
int underlayBufferSize = 64;
|
||||
|
@ -46,12 +49,6 @@ struct preferences {
|
|||
bool niceTS;
|
||||
bool automaticSidebandSwitching = true;
|
||||
bool enableUSBControllers;
|
||||
int usbSensitivity;
|
||||
quint8 usbSpeed;
|
||||
quint8 usbTimeout;
|
||||
quint8 usbBrightness;
|
||||
quint8 usbOrientation;
|
||||
QColor usbColor;
|
||||
|
||||
// LAN:
|
||||
bool enableLAN;
|
||||
|
|
|
@ -688,6 +688,7 @@ void repeaterSetup::on_splitPlusButton_clicked()
|
|||
txfreqhz = currentMainFrequency.Hz + hzOffset;
|
||||
f.Hz = txfreqhz;
|
||||
f.VFO = inactiveVFO;
|
||||
f.MHzDouble = f.Hz/1E6;
|
||||
txString = QString::number(f.Hz / double(1E6), 'f', 6);
|
||||
ui->splitTransmitFreqEdit->setText(txString);
|
||||
usedPlusSplit = true;
|
||||
|
@ -707,6 +708,7 @@ void repeaterSetup::on_splitMinusBtn_clicked()
|
|||
txfreqhz = currentMainFrequency.Hz - hzOffset;
|
||||
f.Hz = txfreqhz;
|
||||
f.VFO = inactiveVFO;
|
||||
f.MHzDouble = f.Hz/1E6;
|
||||
txString = QString::number(f.Hz / double(1E6), 'f', 6);
|
||||
ui->splitTransmitFreqEdit->setText(txString);
|
||||
usedPlusSplit = false;
|
||||
|
@ -723,6 +725,7 @@ void repeaterSetup::on_splitTxFreqSetBtn_clicked()
|
|||
{
|
||||
f.Hz = fHz;
|
||||
f.VFO = inactiveVFO;
|
||||
f.MHzDouble = f.Hz/1E6;
|
||||
emit setTransmitFrequency(f);
|
||||
emit setTransmitMode(modeTransmitVFO);
|
||||
}
|
||||
|
@ -812,6 +815,8 @@ void repeaterSetup::on_rptrOffsetSetBtn_clicked()
|
|||
{
|
||||
freqt f;
|
||||
f.Hz = getFreqHzFromMHzString(ui->rptrOffsetEdit->text());
|
||||
f.MHzDouble = f.Hz/1E6;
|
||||
f.VFO=activeVFO;
|
||||
if(f.Hz != 0)
|
||||
{
|
||||
emit setRptDuplexOffset(f);
|
||||
|
|
|
@ -710,7 +710,7 @@ static int update_filter(SpeexResamplerState* st)
|
|||
/* Adding buffer_size to filt_len won't overflow here because filt_len
|
||||
could be multiplied by sizeof(spx_word16_t) above. */
|
||||
min_alloc_size = st->filt_len - 1 + st->buffer_size;
|
||||
if (min_alloc_size > st->mem_alloc_size)
|
||||
if (min_alloc_size > st->mem_alloc_size && st->nb_channels>0)
|
||||
{
|
||||
spx_word16_t* mem;
|
||||
if (INT_MAX / sizeof(spx_word16_t) / st->nb_channels < min_alloc_size)
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
#!/bin/bash
|
||||
echo "This script copies the following items into your system:"
|
||||
echo ""
|
||||
echo "icon: wfview.png to /usr/share/pixmaps/"
|
||||
echo "icon: unix_icons/wfview.png to /usr/share/icons/hicolor/256x256/apps/"
|
||||
echo "wfview application to /usr/local/bin/"
|
||||
echo "wfview.desktop to /usr/share/applications/"
|
||||
echo "qdarkstyle stylesheet to /usr/share/wfview/stylesheets"
|
||||
echo "org.wfview.wfview.metainfo.xml metadata file to /usr/share/metainfo/"
|
||||
echo "qdarkstyle stylesheet to /usr/share/wfview/stylesheets/"
|
||||
|
||||
echo ""
|
||||
echo "This script MUST be run from the build directory. Do not run it from the source directory!"
|
||||
|
@ -30,7 +31,8 @@ echo ""
|
|||
|
||||
cp wfview /usr/local/bin/wfview
|
||||
cp wfview.desktop /usr/share/applications/
|
||||
cp wfview.png /usr/share/pixmaps/
|
||||
cp unix_icons/wfview.png /usr/share/icons/hicolor/256x256/apps/
|
||||
cp org.wfview.wfview.metainfo.xml /usr/share/metainfo/
|
||||
mkdir -p /usr/share/wfview/stylesheets
|
||||
cp -r qdarkstyle /usr/share/wfview/stylesheets/
|
||||
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<component type="desktop-application">
|
||||
<id>org.wfview.wfview</id>
|
||||
<launchable type="desktop-id">wfview.desktop</launchable>
|
||||
<metadata_license>CC0-1.0</metadata_license>
|
||||
<project_license>GPL-3.0-or-later</project_license>
|
||||
<name>wfview</name>
|
||||
<developer_name>Elliott H. Liggett</developer_name>
|
||||
<summary>Open Source interface for Icom transceivers</summary>
|
||||
<description>
|
||||
<p>
|
||||
wfview is a program developed by amateur radio enthusiasts to control modern Icom ham radios. It provides the user with controls
|
||||
that may be comfortably operated from a keyboard, mouse, or touch screen interface. wfview is free and open source software.
|
||||
</p>
|
||||
<p>
|
||||
wfview has been developed with an eye towards compatibility. Even though our target platform consists of modern-era transceivers,
|
||||
wfview’s command dictionary is focused on commands with the most compatibility. Many of Icom’s transceivers from the last 20 years
|
||||
will work to some degree with wfview, and we are always adding more.
|
||||
</p>
|
||||
</description>
|
||||
<screenshots>
|
||||
<screenshot type="default">
|
||||
<image type="source">https://wfview.org/wp-content/uploads/2021/11/7300-remote-screenshot.png</image>
|
||||
</screenshot>
|
||||
</screenshots>
|
||||
<url type="homepage">https://wfview.org</url>
|
||||
<url type="bugtracker">https://gitlab.com/eliggett/wfview/-/issues</url>
|
||||
<content_rating type="oars-1.1"/>
|
||||
</component>
|
|
@ -7,5 +7,10 @@
|
|||
<file>ecoder.png</file>
|
||||
<file>quickkeys.png</file>
|
||||
<file>xbox.png</file>
|
||||
<file>streamdeck.png</file>
|
||||
<file>streamdeckmini.png</file>
|
||||
<file>streamdeckxl.png</file>
|
||||
<file>streamdeckpedal.png</file>
|
||||
<file>streamdeckplus.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 179 KiB |
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 331 KiB |
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 396 KiB |
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 217 KiB |
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 412 KiB |
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 53 KiB |
191
rigcommander.cpp
191
rigcommander.cpp
|
@ -872,6 +872,18 @@ void rigCommander::setDataMode(bool dataOn, unsigned char filter)
|
|||
prepDataAndSend(payload);
|
||||
}
|
||||
|
||||
void rigCommander::getFrequency(unsigned char vfo)
|
||||
{
|
||||
if (rigCaps.hasVFOAB || rigCaps.hasVFOMS)
|
||||
{
|
||||
QByteArray payload("\x25");
|
||||
payload.append(vfo);
|
||||
prepDataAndSend(payload);
|
||||
} else {
|
||||
getFrequency();
|
||||
}
|
||||
}
|
||||
|
||||
void rigCommander::getFrequency()
|
||||
{
|
||||
// figure out frequency and then respond with haveFrequency();
|
||||
|
@ -1675,11 +1687,9 @@ void rigCommander::parseCommand()
|
|||
parseFrequency();
|
||||
break;
|
||||
case '\x25':
|
||||
if((int)payloadIn[1] == 0)
|
||||
{
|
||||
emit haveFrequency(parseFrequency(payloadIn, 5));
|
||||
}
|
||||
break;
|
||||
// Parse both VFOs
|
||||
emit haveFrequency(parseFrequency(payloadIn, 5));
|
||||
break;
|
||||
case '\x01':
|
||||
//qInfo(logRig()) << "Have mode data";
|
||||
this->parseMode();
|
||||
|
@ -1844,6 +1854,11 @@ void rigCommander::parseLevels()
|
|||
emit haveTPBFOuter(level);
|
||||
state.set(PBTOUT, level, false);
|
||||
break;
|
||||
case '\x06':
|
||||
// NR Level
|
||||
emit haveNRLevel(level);
|
||||
state.set(NR, level, false);
|
||||
break;
|
||||
case '\x09':
|
||||
// CW Pitch
|
||||
emit haveCwPitch(level);
|
||||
|
@ -1874,12 +1889,12 @@ void rigCommander::parseLevels()
|
|||
state.set(COMPLEVEL, level, false);
|
||||
break;
|
||||
case '\x12':
|
||||
// NB level - ignore for now
|
||||
emit haveNB((bool)level);
|
||||
state.set(NB, level, false);
|
||||
break;
|
||||
case '\x15':
|
||||
// monitor level
|
||||
emit haveMonitorLevel(level);
|
||||
emit haveMonitorGain(level);
|
||||
state.set(MONITORLEVEL, level, false);
|
||||
break;
|
||||
case '\x16':
|
||||
|
@ -2399,9 +2414,9 @@ void rigCommander::setCompLevel(unsigned char compLevel)
|
|||
prepDataAndSend(payload);
|
||||
}
|
||||
|
||||
void rigCommander::setMonitorLevel(unsigned char monitorLevel)
|
||||
void rigCommander::setMonitorGain(unsigned char monitorLevel)
|
||||
{
|
||||
QByteArray payload("\x14\x0E");
|
||||
QByteArray payload("\x14\x15");
|
||||
payload.append(bcdEncodeInt(monitorLevel));
|
||||
prepDataAndSend(payload);
|
||||
}
|
||||
|
@ -2420,6 +2435,22 @@ void rigCommander::setAntiVoxGain(unsigned char gain)
|
|||
prepDataAndSend(payload);
|
||||
}
|
||||
|
||||
void rigCommander::setNBLevel(unsigned char level)
|
||||
{
|
||||
if (rigCaps.hasNB) {
|
||||
QByteArray payload(rigCaps.nbCommand);
|
||||
payload.append(bcdEncodeInt(level));
|
||||
prepDataAndSend(payload);
|
||||
}
|
||||
}
|
||||
|
||||
void rigCommander::setNRLevel(unsigned char level)
|
||||
{
|
||||
QByteArray payload("\x14\x06");
|
||||
payload.append(bcdEncodeInt(level));
|
||||
prepDataAndSend(payload);
|
||||
}
|
||||
|
||||
|
||||
void rigCommander::getRfGain()
|
||||
{
|
||||
|
@ -2429,8 +2460,13 @@ void rigCommander::getRfGain()
|
|||
|
||||
void rigCommander::getAfGain()
|
||||
{
|
||||
QByteArray payload("\x14\x01");
|
||||
prepDataAndSend(payload);
|
||||
if (udp == Q_NULLPTR) {
|
||||
QByteArray payload("\x14\x01");
|
||||
prepDataAndSend(payload);
|
||||
}
|
||||
else {
|
||||
emit haveAfGain(localVolume);
|
||||
}
|
||||
}
|
||||
|
||||
void rigCommander::getIFShift()
|
||||
|
@ -2475,7 +2511,7 @@ void rigCommander::getCompLevel()
|
|||
prepDataAndSend(payload);
|
||||
}
|
||||
|
||||
void rigCommander::getMonitorLevel()
|
||||
void rigCommander::getMonitorGain()
|
||||
{
|
||||
QByteArray payload("\x14\x15");
|
||||
prepDataAndSend(payload);
|
||||
|
@ -2493,6 +2529,19 @@ void rigCommander::getAntiVoxGain()
|
|||
prepDataAndSend(payload);
|
||||
}
|
||||
|
||||
void rigCommander::getNBLevel()
|
||||
{
|
||||
if (rigCaps.hasNB) {
|
||||
prepDataAndSend(rigCaps.nbCommand);
|
||||
}
|
||||
}
|
||||
|
||||
void rigCommander::getNRLevel()
|
||||
{
|
||||
QByteArray payload("\x14\x06");
|
||||
prepDataAndSend(payload);
|
||||
}
|
||||
|
||||
void rigCommander::getLevels()
|
||||
{
|
||||
// Function to grab all levels
|
||||
|
@ -2502,7 +2551,7 @@ void rigCommander::getLevels()
|
|||
getTxLevel(); // 0x0A
|
||||
getMicGain(); // 0x0B
|
||||
getCompLevel(); // 0x0E
|
||||
// getMonitorLevel(); // 0x15
|
||||
// getMonitorGain(); // 0x15
|
||||
// getVoxGain(); // 0x16
|
||||
// getAntiVoxGain(); // 0x17
|
||||
}
|
||||
|
@ -3026,9 +3075,11 @@ void rigCommander::parseRegister16()
|
|||
state.set(PREAMP, (quint8)payloadIn.at(2), false);
|
||||
break;
|
||||
case '\x22':
|
||||
emit haveNB(payloadIn.at(2) != 0);
|
||||
state.set(NBFUNC, payloadIn.at(2) != 0, false);
|
||||
break;
|
||||
case '\x40':
|
||||
emit haveNR(payloadIn.at(2) != 0);
|
||||
state.set(NRFUNC, payloadIn.at(2) != 0, false);
|
||||
break;
|
||||
case '\x41': // Auto notch
|
||||
|
@ -3055,12 +3106,15 @@ void rigCommander::parseRegister16()
|
|||
emit haveRptAccessMode(ra);
|
||||
break;
|
||||
case '\x44':
|
||||
emit haveComp(payloadIn.at(2) != 0);
|
||||
state.set(COMPFUNC, payloadIn.at(2) != 0, false);
|
||||
break;
|
||||
case '\x45':
|
||||
emit haveMonitor(payloadIn.at(2) != 0);
|
||||
state.set(MONFUNC, payloadIn.at(2) != 0, false);
|
||||
break;
|
||||
case '\x46':
|
||||
emit haveVox(payloadIn.at(2) != 0);
|
||||
state.set(VOXFUNC, payloadIn.at(2) != 0, false);
|
||||
break;
|
||||
case '\x47':
|
||||
|
@ -3104,6 +3158,10 @@ void rigCommander::parseBandStackReg()
|
|||
freqt freqs = parseFrequency(payloadIn, 7);
|
||||
//float freq = (float)freqs.MHzDouble;
|
||||
|
||||
// The Band Stacking command returns the regCode in the position that VFO is expected.
|
||||
// As BSR is always on the active VFO, just set that.
|
||||
freqs.VFO = selVFO_t::activeVFO;
|
||||
|
||||
bool dataOn = (payloadIn[11] & 0x10) >> 4; // not sure...
|
||||
char mode = payloadIn[9];
|
||||
char filter = payloadIn[10];
|
||||
|
@ -3484,6 +3542,10 @@ void rigCommander::determineRigCaps()
|
|||
bandType bandDef4m = bandType(band4m, 70000000, 70500000, modeUSB);
|
||||
bandType bandDef70cm = bandType(band70cm, 420000000, 450000000, modeUSB);
|
||||
bandType bandDef23cm = bandType(band23cm, 1240000000, 1400000000, modeUSB);
|
||||
bandType bandDef13cm = bandType(band13cm, 2300000000, 2450000000, modeUSB);
|
||||
//bandType bandDef9cm = bandType(band9cm, 3300000000, 3500000000, modeUSB);
|
||||
bandType bandDef6cm = bandType(band6cm, 5650000000, 5925000000, modeUSB);
|
||||
bandType bandDef3cm = bandType(band3cm, 10000000000, 10500000000, modeUSB);
|
||||
|
||||
bandType bandDefAir(bandAir, 108000000, 137000000, modeAM);
|
||||
bandType bandDefWFM(bandWFM, 88000000, 108000000, modeWFM);
|
||||
|
@ -3679,6 +3741,55 @@ void rigCommander::determineRigCaps()
|
|||
rigCaps.hasQuickSplitCommand = true;
|
||||
rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x00\x43");
|
||||
break;
|
||||
case model905:
|
||||
rigCaps.modelName = QString("IC-905");
|
||||
rigCaps.rigctlModel = 0;
|
||||
rigCaps.hasSpectrum = true;
|
||||
rigCaps.spectSeqMax = 11;
|
||||
rigCaps.spectAmpMax = 160;
|
||||
rigCaps.spectLenMax = 475;
|
||||
rigCaps.inputs.append(inputLAN);
|
||||
rigCaps.inputs.append(inputUSB);
|
||||
rigCaps.hasLan = true;
|
||||
rigCaps.hasEthernet = true;
|
||||
rigCaps.hasWiFi = false;
|
||||
rigCaps.hasDD = true;
|
||||
rigCaps.hasDV = true;
|
||||
rigCaps.hasCTCSS = true;
|
||||
rigCaps.hasDTCS = true;
|
||||
rigCaps.hasRepeaterModes = true;
|
||||
rigCaps.hasTBPF = true;
|
||||
rigCaps.attenuators.push_back('\x10');
|
||||
rigCaps.preamps.push_back('\x01');
|
||||
rigCaps.bands = standardVU;
|
||||
rigCaps.bands.push_back(bandDef23cm);
|
||||
rigCaps.bands.push_back(bandDef13cm);
|
||||
rigCaps.bands.push_back(bandDef6cm);
|
||||
rigCaps.bands.push_back(bandDef3cm);
|
||||
rigCaps.bsr[band2m] = 0x01;
|
||||
rigCaps.bsr[band70cm] = 0x02;
|
||||
rigCaps.bsr[band23cm] = 0x03;
|
||||
rigCaps.bsr[band13cm] = 0x04;
|
||||
rigCaps.bsr[band6cm] = 0x05;
|
||||
rigCaps.bsr[band3cm] = 0x06;
|
||||
rigCaps.modes = commonModes;
|
||||
rigCaps.modes.insert(rigCaps.modes.end(), {createMode(modeDV, 0x17, "DV"),
|
||||
createMode(modeDD, 0x22, "DD"),
|
||||
createMode(modeATV, 0x23, "ATV")
|
||||
});
|
||||
|
||||
rigCaps.scopeCenterSpans.insert(rigCaps.scopeCenterSpans.end(), {createScopeCenter(cs1M, "±1M"),
|
||||
createScopeCenter(cs2p5M, "±2.5M"),
|
||||
createScopeCenter(cs5M, "±5M"),
|
||||
createScopeCenter(cs10M, "±10M"),
|
||||
createScopeCenter(cs25M, "±25M")});
|
||||
rigCaps.transceiveCommand = QByteArrayLiteral("\x1a\x05\x01\x42");
|
||||
rigCaps.hasVFOMS = false;
|
||||
rigCaps.hasVFOAB = true;
|
||||
rigCaps.hasAdvancedRptrToneCmds = true;
|
||||
rigCaps.hasQuickSplitCommand = true;
|
||||
rigCaps.quickSplitCommand = QByteArrayLiteral("\x1a\x05\x00\x46");
|
||||
break;
|
||||
case model910h:
|
||||
rigCaps.modelName = QString("IC-910H");
|
||||
rigCaps.rigctlModel = 3044;
|
||||
|
@ -4591,6 +4702,7 @@ void rigCommander::parseFrequency()
|
|||
// payloadIn[01] = ; // . XX KHz
|
||||
|
||||
// printHex(payloadIn, false, true);
|
||||
|
||||
frequencyMhz = 0.0;
|
||||
if (payloadIn.length() == 7)
|
||||
{
|
||||
|
@ -4661,6 +4773,8 @@ freqt rigCommander::parseFrequencyRptOffset(QByteArray data)
|
|||
f.Hz += (data[1] & 0x0f) * 100; // 100 Hz
|
||||
f.Hz += ((data[1] & 0xf0) >> 4) * 1000; // 1 KHz
|
||||
|
||||
f.MHzDouble=f.Hz/1E6;
|
||||
f.VFO = activeVFO;
|
||||
return f;
|
||||
}
|
||||
|
||||
|
@ -4680,40 +4794,25 @@ freqt rigCommander::parseFrequency(QByteArray data, unsigned char lastPosition)
|
|||
// NOTE: This function was written on the IC-7300, which has no need for 100 MHz and 1 GHz.
|
||||
// Therefore, this function has to go to position +1 to retrieve those numbers for the IC-9700.
|
||||
|
||||
// TODO: 64-bit value is incorrect, multiplying by wrong numbers.
|
||||
|
||||
float freq = 0.0;
|
||||
|
||||
freqt freqs;
|
||||
freqs.MHzDouble = 0;
|
||||
freqs.Hz = 0;
|
||||
|
||||
// MHz:
|
||||
freq += 100*(data[lastPosition+1] & 0x0f);
|
||||
freq += (1000*((data[lastPosition+1] & 0xf0) >> 4));
|
||||
|
||||
freq += data[lastPosition] & 0x0f;
|
||||
freq += 10*((data[lastPosition] & 0xf0) >> 4);
|
||||
|
||||
freqs.Hz += (data[lastPosition] & 0x0f) * 1E6;
|
||||
freqs.Hz += ((data[lastPosition] & 0xf0) >> 4) * 1E6 * 10; // 10 MHz
|
||||
|
||||
// Does Frequency contain 100 MHz/1 GHz data?
|
||||
if(data.length() >= lastPosition+1)
|
||||
{
|
||||
freqs.Hz += (data[lastPosition+1] & 0x0f) * 1E6 * 100; // 100 MHz
|
||||
freqs.Hz += ((data[lastPosition+1] & 0xf0) >> 4) * 1E6 * 1000; // 1000 MHz
|
||||
}
|
||||
|
||||
// Does Frequency contain VFO data? (\x25 command)
|
||||
if (lastPosition-4 >= 0 && (quint8)data[lastPosition-4] < 0x02)
|
||||
{
|
||||
freqs.VFO=(selVFO_t)(quint8)data[lastPosition-4];
|
||||
}
|
||||
|
||||
// Hz:
|
||||
freq += ((data[lastPosition-1] & 0xf0) >>4)/10.0 ;
|
||||
freq += (data[lastPosition-1] & 0x0f) / 100.0;
|
||||
|
||||
freq += ((data[lastPosition-2] & 0xf0) >> 4) / 1000.0;
|
||||
freq += (data[lastPosition-2] & 0x0f) / 10000.0;
|
||||
|
||||
freq += ((data[lastPosition-3] & 0xf0) >> 4) / 100000.0;
|
||||
freq += (data[lastPosition-3] & 0x0f) / 1000000.0;
|
||||
freqs.Hz += (data[lastPosition] & 0x0f) * 1E6;
|
||||
freqs.Hz += ((data[lastPosition] & 0xf0) >> 4) * 1E6 * 10; // 10 MHz
|
||||
|
||||
freqs.Hz += (data[lastPosition-1] & 0x0f) * 10E3; // 10 KHz
|
||||
freqs.Hz += ((data[lastPosition-1] & 0xf0) >> 4) * 100E3; // 100 KHz
|
||||
|
@ -4894,26 +4993,26 @@ void rigCommander::setAntenna(unsigned char ant, bool rx)
|
|||
prepDataAndSend(payload);
|
||||
}
|
||||
|
||||
void rigCommander::setNb(bool enabled) {
|
||||
void rigCommander::setNB(bool enabled) {
|
||||
QByteArray payload("\x16\x22");
|
||||
payload.append((unsigned char)enabled);
|
||||
prepDataAndSend(payload);
|
||||
}
|
||||
|
||||
void rigCommander::getNb()
|
||||
void rigCommander::getNB()
|
||||
{
|
||||
QByteArray payload;
|
||||
payload.setRawData("\x16\x22", 2);
|
||||
prepDataAndSend(payload);
|
||||
}
|
||||
|
||||
void rigCommander::setNr(bool enabled) {
|
||||
void rigCommander::setNR(bool enabled) {
|
||||
QByteArray payload("\x16\x40");
|
||||
payload.append((unsigned char)enabled);
|
||||
prepDataAndSend(payload);
|
||||
}
|
||||
|
||||
void rigCommander::getNr()
|
||||
void rigCommander::getNR()
|
||||
{
|
||||
QByteArray payload;
|
||||
payload.setRawData("\x16\x40", 2);
|
||||
|
@ -5289,9 +5388,9 @@ void rigCommander::stateUpdated()
|
|||
break;
|
||||
case MONITORLEVEL:
|
||||
if (i.value()._valid) {
|
||||
setMonitorLevel(state.getChar(MONITORLEVEL));
|
||||
setMonitorGain(state.getChar(MONITORLEVEL));
|
||||
}
|
||||
getMonitorLevel();
|
||||
getMonitorGain();
|
||||
break;
|
||||
case VOXGAIN:
|
||||
if (i.value()._valid) {
|
||||
|
@ -5307,15 +5406,15 @@ void rigCommander::stateUpdated()
|
|||
break;
|
||||
case NBFUNC:
|
||||
if (i.value()._valid) {
|
||||
setNb(state.getBool(NBFUNC));
|
||||
setNB(state.getBool(NBFUNC));
|
||||
}
|
||||
getNb();
|
||||
getNB();
|
||||
break;
|
||||
case NRFUNC:
|
||||
if (i.value()._valid) {
|
||||
setNr(state.getBool(NRFUNC));
|
||||
setNR(state.getBool(NRFUNC));
|
||||
}
|
||||
getNr();
|
||||
getNR();
|
||||
break;
|
||||
case ANFFUNC:
|
||||
if (i.value()._valid) {
|
||||
|
|
|
@ -70,6 +70,7 @@ public slots:
|
|||
|
||||
// Frequency, Mode, BSR:
|
||||
void setFrequency(unsigned char vfo, freqt freq);
|
||||
void getFrequency(unsigned char vfo);
|
||||
void getFrequency();
|
||||
void selectVFO(vfo_t vfo);
|
||||
void equalizeVFOsAB();
|
||||
|
@ -103,10 +104,10 @@ public slots:
|
|||
void setAttenuator(unsigned char att);
|
||||
void setPreamp(unsigned char pre);
|
||||
void setAntenna(unsigned char ant, bool rx);
|
||||
void setNb(bool enabled);
|
||||
void getNb();
|
||||
void setNr(bool enabled);
|
||||
void getNr();
|
||||
void setNB(bool enabled);
|
||||
void getNB();
|
||||
void setNR(bool enabled);
|
||||
void getNR();
|
||||
void setAutoNotch(bool enabled);
|
||||
void getAutoNotch();
|
||||
void setToneEnabled(bool enabled);
|
||||
|
@ -127,7 +128,8 @@ public slots:
|
|||
void getManualNotch();
|
||||
|
||||
void getPassband();
|
||||
void getCwPitch();
|
||||
void getNBLevel();
|
||||
void getNRLevel(); void getCwPitch();
|
||||
void setCwPitch(unsigned char pitch);
|
||||
void getDashRatio();
|
||||
void setDashRatio(unsigned char ratio);
|
||||
|
@ -166,7 +168,7 @@ public slots:
|
|||
void getTxLevel();
|
||||
void getMicGain();
|
||||
void getCompLevel();
|
||||
void getMonitorLevel();
|
||||
void getMonitorGain();
|
||||
void getVoxGain();
|
||||
void getAntiVoxGain();
|
||||
void getUSBGain();
|
||||
|
@ -192,13 +194,15 @@ public slots:
|
|||
void setACCGain(unsigned char gain);
|
||||
void setACCGain(unsigned char gain, unsigned char ab);
|
||||
void setCompLevel(unsigned char compLevel);
|
||||
void setMonitorLevel(unsigned char monitorLevel);
|
||||
void setMonitorGain(unsigned char monitorLevel);
|
||||
void setVoxGain(unsigned char gain);
|
||||
void setAntiVoxGain(unsigned char gain);
|
||||
void setModInput(rigInput input, bool dataOn);
|
||||
void setModInputLevel(rigInput input, unsigned char level);
|
||||
void setAfMute(bool muteOn);
|
||||
void setDialLock(bool lockOn);
|
||||
void setNBLevel(unsigned char level);
|
||||
void setNRLevel(unsigned char level);
|
||||
|
||||
// NB, NR, IP+:
|
||||
void setIPP(bool enabled);
|
||||
|
@ -330,9 +334,16 @@ signals:
|
|||
void haveTxPower(unsigned char level);
|
||||
void haveMicGain(unsigned char level);
|
||||
void haveCompLevel(unsigned char level);
|
||||
void haveMonitorLevel(unsigned char level);
|
||||
void haveMonitorGain(unsigned char level);
|
||||
void haveVoxGain(unsigned char gain);
|
||||
void haveAntiVoxGain(unsigned char gain);
|
||||
void haveNBLevel(unsigned char level);
|
||||
void haveNRLevel(unsigned char level);
|
||||
void haveVox(bool en);
|
||||
void haveMonitor(bool en);
|
||||
void haveComp(bool en);
|
||||
void haveNB(bool en);
|
||||
void haveNR(bool en);
|
||||
|
||||
// Modulation source and gain:
|
||||
void haveModInput(rigInput input, bool isData);
|
||||
|
|
|
@ -360,7 +360,7 @@ signals:
|
|||
void setMicGain(quint8);
|
||||
void setCompLevel(quint8);
|
||||
void setTxPower(quint8);
|
||||
void setMonitorLevel(quint8);
|
||||
void setMonitorGain(quint8);
|
||||
void setVoxGain(quint8);
|
||||
void setAntiVoxGain(quint8);
|
||||
void setSpectrumRefLevel(int);
|
||||
|
|
|
@ -40,6 +40,7 @@ enum model_kind {
|
|||
model756pro = 0x5C,
|
||||
model756proii = 0x64,
|
||||
model756proiii = 0x6E,
|
||||
model905 = 0xAC,
|
||||
model910h = 0x60,
|
||||
model9100 = 0x7C,
|
||||
modelUnknown = 0xFF
|
||||
|
@ -55,7 +56,12 @@ enum rigInput{ inputMic=0,
|
|||
inputUnknown=0xff
|
||||
};
|
||||
|
||||
enum availableBands { band23cm=0,
|
||||
enum availableBands {
|
||||
band3cm = 0,
|
||||
band6cm,
|
||||
band9cm,
|
||||
band13cm,
|
||||
band23cm,
|
||||
band70cm,
|
||||
band2m,
|
||||
bandAir,
|
||||
|
@ -87,7 +93,10 @@ enum centerSpansType {
|
|||
cs250k = 6,
|
||||
cs500k = 7,
|
||||
cs1M = 8,
|
||||
cs2p5M = 9
|
||||
cs2p5M = 9,
|
||||
cs5M = 10,
|
||||
cs10M = 11,
|
||||
cs25M = 12,
|
||||
};
|
||||
|
||||
struct centerSpanData {
|
||||
|
@ -96,14 +105,14 @@ struct centerSpanData {
|
|||
};
|
||||
|
||||
struct bandType {
|
||||
bandType(availableBands band, quint32 lowFreq, quint32 highFreq, mode_kind defaultMode) :
|
||||
bandType(availableBands band, quint64 lowFreq, quint64 highFreq, mode_kind defaultMode) :
|
||||
band(band), lowFreq(lowFreq), highFreq(highFreq), defaultMode(defaultMode) {}
|
||||
|
||||
bandType() {}
|
||||
|
||||
availableBands band;
|
||||
quint32 lowFreq;
|
||||
quint32 highFreq;
|
||||
quint64 lowFreq;
|
||||
quint64 highFreq;
|
||||
mode_kind defaultMode;
|
||||
};
|
||||
|
||||
|
@ -128,6 +137,9 @@ struct rigCapabilities {
|
|||
quint16 spectAmpMax;
|
||||
quint16 spectLenMax;
|
||||
|
||||
bool hasNB = false;
|
||||
QByteArray nbCommand;
|
||||
|
||||
bool hasDD;
|
||||
bool hasDV;
|
||||
bool hasATU;
|
||||
|
@ -161,7 +173,7 @@ struct rigCapabilities {
|
|||
std::vector <unsigned char> antennas;
|
||||
std::vector <centerSpanData> scopeCenterSpans;
|
||||
std::vector <bandType> bands;
|
||||
unsigned char bsr[20] = {0};
|
||||
unsigned char bsr[24] = {0};
|
||||
|
||||
std::vector <mode_info> modes;
|
||||
|
||||
|
|
|
@ -382,31 +382,32 @@ void udpServer::controlReceived()
|
|||
qCritical(logAudio()) << "Unsupported Transmit Audio Handler selected!";
|
||||
}
|
||||
|
||||
//radio->txaudio = new audioHandler();
|
||||
radio->txAudioThread = new QThread(this);
|
||||
radio->txAudioThread->setObjectName("txAudio()");
|
||||
|
||||
if (radio->txaudio != Q_NULLPTR) {
|
||||
radio->txAudioThread = new QThread(this);
|
||||
radio->txAudioThread->setObjectName("txAudio()");
|
||||
|
||||
|
||||
radio->txaudio->moveToThread(radio->txAudioThread);
|
||||
radio->txaudio->moveToThread(radio->txAudioThread);
|
||||
|
||||
radio->txAudioThread->start(QThread::TimeCriticalPriority);
|
||||
radio->txAudioThread->start(QThread::TimeCriticalPriority);
|
||||
|
||||
connect(this, SIGNAL(setupTxAudio(audioSetup)), radio->txaudio, SLOT(init(audioSetup)));
|
||||
connect(radio->txAudioThread, SIGNAL(finished()), radio->txaudio, SLOT(deleteLater()));
|
||||
connect(this, SIGNAL(setupTxAudio(audioSetup)), radio->txaudio, SLOT(init(audioSetup)));
|
||||
connect(radio->txAudioThread, SIGNAL(finished()), radio->txaudio, SLOT(deleteLater()));
|
||||
|
||||
// Not sure how we make this work in QT5.9?
|
||||
// Not sure how we make this work in QT5.9?
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5,10,0))
|
||||
QMetaObject::invokeMethod(radio->txaudio, [=]() {
|
||||
radio->txaudio->init(radio->txAudioSetup);
|
||||
}, Qt::QueuedConnection);
|
||||
QMetaObject::invokeMethod(radio->txaudio, [=]() {
|
||||
radio->txaudio->init(radio->txAudioSetup);
|
||||
}, Qt::QueuedConnection);
|
||||
#else
|
||||
emit setupTxAudio(radio->txAudioSetup);
|
||||
#warning "QT 5.9 is not fully supported multiple rigs will NOT work!"
|
||||
emit setupTxAudio(radio->txAudioSetup);
|
||||
#warning "QT 5.9 is not fully supported multiple rigs will NOT work!"
|
||||
#endif
|
||||
hasTxAudio = datagram.senderAddress();
|
||||
|
||||
connect(this, SIGNAL(haveAudioData(audioPacket)), radio->txaudio, SLOT(incomingAudio(audioPacket)));
|
||||
hasTxAudio = datagram.senderAddress();
|
||||
|
||||
connect(this, SIGNAL(haveAudioData(audioPacket)), radio->txaudio, SLOT(incomingAudio(audioPacket)));
|
||||
}
|
||||
}
|
||||
if ((!memcmp(radio->guid, current->guid, GUIDLEN) || config->rigs.size() == 1) && radio->rxaudio == Q_NULLPTR && !config->lan)
|
||||
{
|
||||
|
@ -431,27 +432,30 @@ void udpServer::controlReceived()
|
|||
qCritical(logAudio()) << "Unsupported Receive Audio Handler selected!";
|
||||
}
|
||||
|
||||
if (radio->rxaudio != Q_NULLPTR)
|
||||
{
|
||||
|
||||
radio->rxAudioThread = new QThread(this);
|
||||
radio->rxAudioThread->setObjectName("rxAudio()");
|
||||
radio->rxAudioThread = new QThread(this);
|
||||
radio->rxAudioThread->setObjectName("rxAudio()");
|
||||
|
||||
radio->rxaudio->moveToThread(radio->rxAudioThread);
|
||||
radio->rxaudio->moveToThread(radio->rxAudioThread);
|
||||
|
||||
radio->rxAudioThread->start(QThread::TimeCriticalPriority);
|
||||
radio->rxAudioThread->start(QThread::TimeCriticalPriority);
|
||||
|
||||
connect(radio->rxAudioThread, SIGNAL(finished()), radio->rxaudio, SLOT(deleteLater()));
|
||||
connect(radio->rxaudio, SIGNAL(haveAudioData(audioPacket)), this, SLOT(receiveAudioData(audioPacket)));
|
||||
connect(radio->rxAudioThread, SIGNAL(finished()), radio->rxaudio, SLOT(deleteLater()));
|
||||
connect(radio->rxaudio, SIGNAL(haveAudioData(audioPacket)), this, SLOT(receiveAudioData(audioPacket)));
|
||||
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5,10,0))
|
||||
QMetaObject::invokeMethod(radio->rxaudio, [=]() {
|
||||
radio->rxaudio->init(radio->rxAudioSetup);
|
||||
}, Qt::QueuedConnection);
|
||||
QMetaObject::invokeMethod(radio->rxaudio, [=]() {
|
||||
radio->rxaudio->init(radio->rxAudioSetup);
|
||||
}, Qt::QueuedConnection);
|
||||
#else
|
||||
//#warning "QT 5.9 is not fully supported multiple rigs will NOT work!"
|
||||
connect(this, SIGNAL(setupRxAudio(audioSetup)), radio->rxaudio, SLOT(init(audioSetup)));
|
||||
setupRxAudio(radio->rxAudioSetup);
|
||||
//#warning "QT 5.9 is not fully supported multiple rigs will NOT work!"
|
||||
connect(this, SIGNAL(setupRxAudio(audioSetup)), radio->rxaudio, SLOT(init(audioSetup)));
|
||||
setupRxAudio(radio->rxAudioSetup);
|
||||
#endif
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
2446
usbcontroller.cpp
2446
usbcontroller.cpp
Plik diff jest za duży
Load Diff
219
usbcontroller.h
219
usbcontroller.h
|
@ -8,12 +8,24 @@
|
|||
#include <QDateTime>
|
||||
#include <QRect>
|
||||
#include <QGraphicsTextItem>
|
||||
#include <QSpinBox>
|
||||
#include <QColor>
|
||||
#include <QVector>
|
||||
#include <QList>
|
||||
#include <QMap>
|
||||
#include <QMutex>
|
||||
#include <QIODevice>
|
||||
#include <QtEndian>
|
||||
#include <QUuid>
|
||||
#include <QLabel>
|
||||
#include <QImage>
|
||||
#include <QPainter>
|
||||
#include <QImageWriter>
|
||||
#include <QBuffer>
|
||||
#include <QSettings>
|
||||
#include <QMessageBox>
|
||||
#include <memory>
|
||||
|
||||
|
||||
#if defined(USB_CONTROLLER) && QT_VERSION < QT_VERSION_CHECK(6,0,0)
|
||||
#include <QGamepad>
|
||||
|
@ -23,7 +35,7 @@
|
|||
#ifndef Q_OS_WIN
|
||||
#include "hidapi/hidapi.h"
|
||||
#else
|
||||
#include "hidapi.h"
|
||||
#include "hidapi.h"
|
||||
#endif
|
||||
|
||||
#ifdef HID_API_VERSION_MAJOR
|
||||
|
@ -53,15 +65,88 @@
|
|||
|
||||
using namespace std;
|
||||
|
||||
|
||||
#define HIDDATALENGTH 64
|
||||
#define MAX_STR 255
|
||||
|
||||
struct USBTYPE {
|
||||
USBTYPE() {}
|
||||
USBTYPE(usbDeviceType model,quint32 manufacturerId, quint32 productId , quint32 usage, quint32 usagePage, int buttons, int cols, int knobs, int leds, int maxPayload, int iconSize) :
|
||||
model(model), manufacturerId(manufacturerId), productId(productId), usage(usage), usagePage(usagePage), buttons(buttons), cols(cols), knobs(knobs), leds(leds), maxPayload(maxPayload), iconSize(iconSize) {}
|
||||
|
||||
usbDeviceType model = usbNone;
|
||||
quint32 manufacturerId=0;
|
||||
quint32 productId=0;
|
||||
quint32 usage=0;
|
||||
quint32 usagePage=0;
|
||||
int buttons=0; // How many buttons
|
||||
int cols=0; // How many columns of buttons
|
||||
int knobs=0; // How many knobs
|
||||
int leds=0; // how many leds
|
||||
int maxPayload=0; // Max allowed payload
|
||||
int iconSize=0;
|
||||
};
|
||||
|
||||
|
||||
struct KNOBVALUE {
|
||||
int value=0;
|
||||
int previous=0;
|
||||
quint8 send=0;
|
||||
qint64 lastChanged=0;
|
||||
QString name="";
|
||||
};
|
||||
|
||||
struct USBDEVICE {
|
||||
USBDEVICE() {}
|
||||
USBDEVICE(USBTYPE type) : type(type) {}
|
||||
USBTYPE type;
|
||||
bool detected = false;
|
||||
bool remove = false;
|
||||
bool connected = false;
|
||||
bool uiCreated = false;
|
||||
bool disabled = false;
|
||||
quint8 speed=2;
|
||||
quint8 timeout=30;
|
||||
quint8 brightness=2;
|
||||
quint8 orientation=0;
|
||||
QColor color=Qt::darkGray;
|
||||
cmds lcd=cmdNone;
|
||||
|
||||
hid_device* handle = NULL;
|
||||
QString product = "";
|
||||
QString manufacturer = "";
|
||||
QString serial = "<none>";
|
||||
QString deviceId = "";
|
||||
QString path = "";
|
||||
int sensitivity = 1;
|
||||
unsigned char jogpos=0;
|
||||
unsigned char shutpos=0;
|
||||
unsigned char shutMult = 0;
|
||||
int jogCounter = 0;
|
||||
quint32 buttons = 0;
|
||||
quint32 knobs = 0;
|
||||
QList<KNOBVALUE> knobValues;
|
||||
|
||||
QTime lastusbController = QTime::currentTime();
|
||||
QByteArray lastData = QByteArray(8,0x0);
|
||||
unsigned char lastDialPos=0;
|
||||
QUuid uuid;
|
||||
QLabel *message;
|
||||
int pages=1;
|
||||
int currentPage=0;
|
||||
QGraphicsScene* scene = Q_NULLPTR;
|
||||
QSpinBox* pageSpin = Q_NULLPTR;
|
||||
QImage image;
|
||||
quint8 ledStatus=0x07;
|
||||
};
|
||||
|
||||
struct COMMAND {
|
||||
COMMAND() {}
|
||||
|
||||
COMMAND(int index, QString text, usbCommandType cmdType, int command, int value) :
|
||||
index(index), text(text), cmdType(cmdType), command(command), value(value) {}
|
||||
COMMAND(int index, QString text, usbCommandType cmdType, int command, unsigned char suffix) :
|
||||
index(index), text(text), cmdType(cmdType), command(command), suffix(suffix) {}
|
||||
COMMAND(int index, QString text, usbCommandType cmdType, int command, int getCommand, unsigned char suffix) :
|
||||
index(index), text(text), cmdType(cmdType), command(command), getCommand(getCommand), suffix(suffix) {}
|
||||
COMMAND(int index, QString text, usbCommandType cmdType, int command, availableBands band) :
|
||||
index(index), text(text), cmdType(cmdType), command(command), band(band) {}
|
||||
COMMAND(int index, QString text, usbCommandType cmdType, int command, mode_kind mode) :
|
||||
|
@ -71,7 +156,9 @@ struct COMMAND {
|
|||
QString text;
|
||||
usbCommandType cmdType = commandButton;
|
||||
int command=0;
|
||||
int getCommand=0;
|
||||
unsigned char suffix=0x0;
|
||||
int value=0;
|
||||
availableBands band=bandGen;
|
||||
mode_kind mode=modeLSB;
|
||||
};
|
||||
|
@ -79,21 +166,33 @@ struct COMMAND {
|
|||
struct BUTTON {
|
||||
BUTTON() {}
|
||||
|
||||
BUTTON(usbDeviceType dev, int num, QRect pos, const QColor textColour, COMMAND* on, COMMAND* off) :
|
||||
dev(dev), num(num), name(""), pos(pos), textColour(textColour), onCommand(on), offCommand(off) {}
|
||||
BUTTON(usbDeviceType dev, int num, QRect pos, const QColor textColour, COMMAND* on, COMMAND* off, bool graphics=false, int led=0) :
|
||||
dev(dev), num(num), name(""), pos(pos), textColour(textColour), onCommand(on), offCommand(off), on(onCommand->text), off(offCommand->text), graphics(graphics), led(led){}
|
||||
BUTTON(usbDeviceType dev, QString name, QRect pos, const QColor textColour, COMMAND* on, COMMAND* off) :
|
||||
dev(dev), num(-1), name(name), pos(pos), textColour(textColour), onCommand(on), offCommand(off) {}
|
||||
dev(dev), num(-1), name(name), pos(pos), textColour(textColour), onCommand(on), offCommand(off), on(onCommand->text), off(offCommand->text) {}
|
||||
|
||||
usbDeviceType dev;
|
||||
USBDEVICE* parent = Q_NULLPTR;
|
||||
int page=1;
|
||||
int num;
|
||||
QString name;
|
||||
QRect pos;
|
||||
QColor textColour;
|
||||
const COMMAND* onCommand = Q_NULLPTR;
|
||||
const COMMAND* offCommand = Q_NULLPTR;
|
||||
QGraphicsTextItem* onText;
|
||||
QGraphicsTextItem* offText;
|
||||
|
||||
QGraphicsRectItem* bgRect = Q_NULLPTR;
|
||||
QGraphicsTextItem* text = Q_NULLPTR;
|
||||
QString on;
|
||||
QString off;
|
||||
QString path;
|
||||
QColor backgroundOn = Qt::lightGray;
|
||||
QColor backgroundOff = Qt::blue;
|
||||
QString iconName = "";
|
||||
QImage* icon = Q_NULLPTR;
|
||||
bool toggle = false;
|
||||
bool isOn = false;
|
||||
bool graphics = false;
|
||||
int led = 0;
|
||||
};
|
||||
|
||||
|
||||
|
@ -101,18 +200,25 @@ struct KNOB {
|
|||
KNOB() {}
|
||||
|
||||
KNOB(usbDeviceType dev, int num, QRect pos, const QColor textColour, COMMAND* command) :
|
||||
dev(dev), num(num), name(""), pos(pos), textColour(textColour), command(command) {}
|
||||
dev(dev), num(num), name(""), pos(pos), textColour(textColour), command(command), cmd(command->text) {}
|
||||
|
||||
usbDeviceType dev;
|
||||
USBDEVICE* parent = Q_NULLPTR;
|
||||
int page=1;
|
||||
int num;
|
||||
QString name;
|
||||
QRect pos;
|
||||
QColor textColour;
|
||||
const COMMAND* command = Q_NULLPTR;
|
||||
QGraphicsTextItem* text;
|
||||
|
||||
QGraphicsTextItem* text = Q_NULLPTR;
|
||||
QString cmd;
|
||||
QString path;
|
||||
};
|
||||
|
||||
|
||||
typedef QMap<QString,USBDEVICE> usbDevMap;
|
||||
|
||||
|
||||
#if defined(USB_CONTROLLER)
|
||||
class usbController : public QObject
|
||||
{
|
||||
|
@ -121,25 +227,21 @@ class usbController : public QObject
|
|||
public:
|
||||
usbController();
|
||||
~usbController();
|
||||
bool hotPlugEvent(const QByteArray & eventType, void * message, long * result);
|
||||
|
||||
public slots:
|
||||
void init(int sens, QMutex *mut);
|
||||
void init(QMutex* mut,usbDevMap* prefs ,QVector<BUTTON>* buts,QVector<KNOB>* knobs);
|
||||
void run();
|
||||
void runTimer();
|
||||
void ledControl(bool on, unsigned char num);
|
||||
void receiveCommands(QVector<COMMAND>*);
|
||||
void receiveButtons(QVector<BUTTON>*);
|
||||
void receiveKnobs(QVector<KNOB>*);
|
||||
void receivePTTStatus(bool on);
|
||||
void getVersion();
|
||||
void receiveSensitivity(int val);
|
||||
void programButton(quint8 val, QString text);
|
||||
void programBrightness(quint8 val);
|
||||
void programOrientation(quint8 val);
|
||||
void programSpeed(quint8 val);
|
||||
void programWheelColour(quint8 r, quint8 g, quint8 b);
|
||||
void programOverlay(quint8 duration, QString text);
|
||||
void programTimeout(quint8 val);
|
||||
void receiveLevel(cmds cmd, unsigned char level);
|
||||
void programPages(USBDEVICE* dev, int pages);
|
||||
void programDisable(USBDEVICE* dev, bool disabled);
|
||||
|
||||
void sendRequest(USBDEVICE *dev, usbFeatureType feature, int val=0, QString text="", QImage* img=Q_NULLPTR, QColor* color=Q_NULLPTR);
|
||||
void sendToLCD(QImage *img);
|
||||
void backupController(USBDEVICE* dev, QString file);
|
||||
void restoreController(USBDEVICE* dev, QString file);
|
||||
|
||||
signals:
|
||||
void jogPlus();
|
||||
|
@ -148,56 +250,53 @@ signals:
|
|||
void doShuttle(bool plus, quint8 level);
|
||||
void setBand(int band);
|
||||
void button(const COMMAND* cmd);
|
||||
void newDevice(unsigned char devType, QVector<BUTTON>* but, QVector<KNOB>* kb, QVector<COMMAND>* cmd, QMutex* mut);
|
||||
void sendSensitivity(int val);
|
||||
void initUI(usbDevMap* devs, QVector<BUTTON>* but, QVector<KNOB>* kb, QVector<COMMAND>* cmd, QMutex* mut);
|
||||
void newDevice(USBDEVICE* dev);
|
||||
void removeDevice(USBDEVICE* dev);
|
||||
void setConnected(USBDEVICE* dev);
|
||||
void changePage(USBDEVICE* dev, int page);
|
||||
|
||||
private:
|
||||
hid_device* handle=NULL;
|
||||
void loadButtons();
|
||||
void loadKnobs();
|
||||
void loadCommands();
|
||||
|
||||
|
||||
int hidStatus = 1;
|
||||
bool isOpen=false;
|
||||
quint32 buttons = 0;
|
||||
quint32 knobs = 0;
|
||||
unsigned char jogpos=0;
|
||||
unsigned char shutpos=0;
|
||||
unsigned char shutMult = 0;
|
||||
int jogCounter = 0;
|
||||
QTime lastusbController = QTime::currentTime();
|
||||
QByteArray lastData = QByteArray(8,0x0);
|
||||
unsigned char lastDialPos=0;
|
||||
int devicesConnected=0;
|
||||
QVector<BUTTON>* buttonList;
|
||||
QVector<KNOB>* knobList;
|
||||
QVector<COMMAND>* commands = Q_NULLPTR;
|
||||
QString product="";
|
||||
QString manufacturer="";
|
||||
QString serial="<none>";
|
||||
QString deviceId = "";
|
||||
QString path = "";
|
||||
quint16 vendorId = 0;
|
||||
quint16 productId = 0;
|
||||
int sensitivity = 1;
|
||||
QList<int> knobValues;
|
||||
QList<quint8> knobSend;
|
||||
QMutex* mutex=Q_NULLPTR;
|
||||
QColor currentColour;
|
||||
|
||||
QVector<BUTTON> defaultButtons;
|
||||
QVector<KNOB> defaultKnobs;
|
||||
QVector<USBTYPE> knownDevices;
|
||||
QVector<COMMAND> commands;
|
||||
usbDevMap* devices;
|
||||
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(6,0,0))
|
||||
QGamepad* gamepad=Q_NULLPTR;
|
||||
#endif
|
||||
void buttonState(QString but, bool val);
|
||||
void buttonState(QString but, double val);
|
||||
usbDeviceType usbDevice = usbNone;
|
||||
QColor currentColour;
|
||||
|
||||
unsigned short knownUsbDevices[6][5] = {
|
||||
{shuttleXpress,0x0b33,0x0020,0x0000,0x0000},
|
||||
{shuttlePro2,0x0b33,0x0030,0x0000,0x0000},
|
||||
{RC28,0x0c26,0x001e,0x0004,0x0004},
|
||||
{eCoderPlus, 0x1fc9, 0x0003,0x0000,0x0000},
|
||||
{QuickKeys, 0x28bd, 0x5202,0x0001,0xff0a},
|
||||
{QuickKeys, 0x28bd, 0x5203,0x0001,0xff0a}
|
||||
};
|
||||
QMutex* mutex=Q_NULLPTR;
|
||||
COMMAND sendCommand;
|
||||
|
||||
QTimer* dataTimer = Q_NULLPTR;
|
||||
protected:
|
||||
};
|
||||
|
||||
|
||||
class usbControllerDev : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
968
wfmain.cpp
968
wfmain.cpp
Plik diff jest za duży
Load Diff
96
wfmain.h
96
wfmain.h
|
@ -19,6 +19,7 @@
|
|||
#include <QMutexLocker>
|
||||
#include <QColorDialog>
|
||||
#include <QColor>
|
||||
#include <QMap>
|
||||
|
||||
#include "logcategories.h"
|
||||
#include "wfviewtypes.h"
|
||||
|
@ -62,6 +63,18 @@
|
|||
#include "rtaudio/RtAudio.h"
|
||||
#endif
|
||||
|
||||
#ifdef USB_CONTROLLER
|
||||
#ifdef Q_OS_WIN
|
||||
#include <windows.h>
|
||||
#include <dbt.h>
|
||||
#define USB_HOTPLUG
|
||||
#elif defined(Q_OS_LINUX)
|
||||
#include <QSocketNotifier>
|
||||
#include <libudev.h>
|
||||
#define USB_HOTPLUG
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define numColorPresetsTotal (5)
|
||||
|
||||
namespace Ui {
|
||||
|
@ -78,7 +91,20 @@ public:
|
|||
static void messageHandler(QtMsgType type, const QMessageLogContext& context, const QString& msg);
|
||||
void handleLogText(QString text);
|
||||
|
||||
#ifdef USB_HOTPLUG
|
||||
#if defined(Q_OS_WIN)
|
||||
protected:
|
||||
virtual bool nativeEvent(const QByteArray& eventType, void* message, qintptr* result);
|
||||
#elif defined(Q_OS_LINUX)
|
||||
private slots:
|
||||
void uDevEvent();
|
||||
#endif
|
||||
#endif
|
||||
|
||||
signals:
|
||||
// Signal levels received to other parts of wfview
|
||||
void sendLevel(cmds cmd, unsigned char level);
|
||||
void usbHotplug();
|
||||
// Basic to rig:
|
||||
void setCIVAddr(unsigned char newRigCIVAddr);
|
||||
void setRigID(unsigned char rigID);
|
||||
|
@ -90,6 +116,7 @@ signals:
|
|||
|
||||
// Frequency, mode, band:
|
||||
void getFrequency();
|
||||
void getFrequency(unsigned char);
|
||||
void setFrequency(unsigned char vfo, freqt freq);
|
||||
void getMode();
|
||||
void setMode(unsigned char modeIndex, unsigned char modeFilter);
|
||||
|
@ -140,7 +167,20 @@ signals:
|
|||
void getModInputLevel(rigInput input);
|
||||
void getMeters(meterKind meter);
|
||||
void getPassband();
|
||||
void getVoxGain();
|
||||
void getAntiVoxGain();
|
||||
void getMonitorGain();
|
||||
void getNBLevel();
|
||||
void getNRLevel();
|
||||
void getCompLevel();
|
||||
void getCwPitch();
|
||||
|
||||
void getVox();
|
||||
void getMonitor();
|
||||
void getCompressor();
|
||||
void getNB();
|
||||
void getNR();
|
||||
|
||||
void getDashRatio();
|
||||
void getPskTone();
|
||||
void getRttyMark();
|
||||
|
@ -159,9 +199,18 @@ signals:
|
|||
void setMicGain(unsigned char);
|
||||
void setCompLevel(unsigned char);
|
||||
void setTxPower(unsigned char);
|
||||
void setMonitorLevel(unsigned char);
|
||||
void setMonitorGain(unsigned char);
|
||||
void setVoxGain(unsigned char);
|
||||
void setAntiVoxGain(unsigned char);
|
||||
void setNBLevel(unsigned char level);
|
||||
void setNRLevel(unsigned char level);
|
||||
|
||||
void setVox(bool en);
|
||||
void setMonitor(bool en);
|
||||
void setCompressor(bool en);
|
||||
void setNB(bool en);
|
||||
void setNR(bool en);
|
||||
|
||||
void setSpectrumRefLevel(int);
|
||||
|
||||
void setModLevel(rigInput input, unsigned char level);
|
||||
|
@ -170,6 +219,7 @@ signals:
|
|||
void setACCBGain(unsigned char level);
|
||||
void setUSBGain(unsigned char level);
|
||||
void setLANGain(unsigned char level);
|
||||
|
||||
void setPassband(quint16 pass);
|
||||
|
||||
// PTT, ATU, ATT, Antenna, Preamp:
|
||||
|
@ -225,11 +275,7 @@ signals:
|
|||
void openShuttle();
|
||||
void requestRigState();
|
||||
void stateUpdated();
|
||||
void initUsbController(int sens, QMutex* mutex);
|
||||
void sendUsbControllerCommands(QVector<COMMAND>* cmds);
|
||||
void sendUsbControllerButtons(QVector<BUTTON>* buts);
|
||||
void sendUsbControllerKnobs(QVector<KNOB>* kbs);
|
||||
void initUsbDefaults(quint8 bright, quint8 orient, quint8 speed, quint8 timeout, QColor color);
|
||||
void initUsbController(QMutex* mutex,usbDevMap* devs ,QVector<BUTTON>* buts,QVector<KNOB>* knobs);
|
||||
void setClusterUdpPort(int port);
|
||||
void setClusterEnableUdp(bool udp);
|
||||
void setClusterEnableTcp(bool tcp);
|
||||
|
@ -240,6 +286,7 @@ signals:
|
|||
void setClusterTimeout(int timeout);
|
||||
void setClusterSkimmerSpots(bool enable);
|
||||
void setFrequencyRange(double low, double high);
|
||||
void sendControllerRequest(USBDEVICE* dev, usbFeatureType request, int val=0, QString text="", QImage* img=Q_NULLPTR, QColor* color=Q_NULLPTR);
|
||||
|
||||
private slots:
|
||||
void setAudioDevicesUI();
|
||||
|
@ -299,9 +346,17 @@ private slots:
|
|||
void receiveModInput(rigInput input, bool dataOn);
|
||||
//void receiveDuplexMode(duplexMode dm);
|
||||
void receivePassband(quint16 pass);
|
||||
void receiveMonitorGain(unsigned char pass);
|
||||
void receiveNBLevel(unsigned char pass);
|
||||
void receiveNRLevel(unsigned char pass);
|
||||
void receiveCwPitch(unsigned char pitch);
|
||||
void receiveTPBFInner(unsigned char level);
|
||||
void receiveTPBFOuter(unsigned char level);
|
||||
void receiveVox(bool en);
|
||||
void receiveMonitor(bool en);
|
||||
void receiveComp(bool en);
|
||||
void receiveNB(bool en);
|
||||
void receiveNR(bool en);
|
||||
|
||||
// Levels:
|
||||
void receiveRfGain(unsigned char level);
|
||||
|
@ -317,7 +372,6 @@ private slots:
|
|||
void receiveTxPower(unsigned char power);
|
||||
void receiveMicGain(unsigned char gain);
|
||||
void receiveCompLevel(unsigned char compLevel);
|
||||
void receiveMonitorGain(unsigned char monitorGain);
|
||||
void receiveVoxGain(unsigned char voxGain);
|
||||
void receiveAntiVoxGain(unsigned char antiVoxGain);
|
||||
void receiveSpectrumRefLevel(int level);
|
||||
|
@ -354,8 +408,6 @@ private slots:
|
|||
void showStatusBarText(QString text);
|
||||
void receiveBaudRate(quint32 baudrate);
|
||||
void radioSelection(QList<radio_cap_packet> radios);
|
||||
void receiveUsbSensitivity(int val);
|
||||
void receiveUsbSettings(quint8 bright, quint8 orient, quint8 speed, quint8 timeout, QColor color);
|
||||
|
||||
|
||||
// Added for RC28/Shuttle support
|
||||
|
@ -405,8 +457,7 @@ private slots:
|
|||
void on_fEnterBtn_clicked();
|
||||
void on_usbControllerBtn_clicked();
|
||||
|
||||
void on_usbButtonsResetBtn_clicked();
|
||||
void on_usbCommandsResetBtn_clicked();
|
||||
void on_usbControllersResetBtn_clicked();
|
||||
|
||||
void on_enableUsbChk_clicked(bool checked);
|
||||
|
||||
|
@ -500,7 +551,7 @@ private slots:
|
|||
|
||||
void on_vspCombo_currentIndexChanged(int value);
|
||||
|
||||
void on_scopeEnableWFBtn_clicked(bool checked);
|
||||
void on_scopeEnableWFBtn_stateChanged(int state);
|
||||
|
||||
void on_sqlSlider_valueChanged(int value);
|
||||
|
||||
|
@ -926,6 +977,7 @@ private:
|
|||
double oldLowerFreq;
|
||||
double oldUpperFreq;
|
||||
freqt freq;
|
||||
freqt freqb;
|
||||
float tsKnobMHz;
|
||||
|
||||
unsigned char setModeVal=0;
|
||||
|
@ -1073,9 +1125,6 @@ private:
|
|||
|
||||
void updateUsbButtons();
|
||||
|
||||
void resetUsbButtons();
|
||||
void resetUsbKnobs();
|
||||
void resetUsbCommands();
|
||||
int oldFreqDialVal;
|
||||
|
||||
rigCapabilities rigCaps;
|
||||
|
@ -1102,7 +1151,7 @@ private:
|
|||
satelliteSetup *sat;
|
||||
transceiverAdjustments *trxadj;
|
||||
cwSender *cw;
|
||||
controllerSetup* shut;
|
||||
controllerSetup* usbWindow = Q_NULLPTR;
|
||||
aboutbox *abtBox;
|
||||
selectRadio *selRad;
|
||||
loggingWindow *logWindow;
|
||||
|
@ -1150,11 +1199,18 @@ private:
|
|||
#if defined (USB_CONTROLLER)
|
||||
usbController *usbControllerDev = Q_NULLPTR;
|
||||
QThread *usbControllerThread = Q_NULLPTR;
|
||||
QString usbDeviceName;
|
||||
QVector<COMMAND> usbCommands;
|
||||
QString typeName;
|
||||
QVector<BUTTON> usbButtons;
|
||||
QVector<KNOB> usbKnobs;
|
||||
usbDevMap usbDevices;
|
||||
QMutex usbMutex;
|
||||
qint64 lastUsbNotify=0;
|
||||
|
||||
#if defined (Q_OS_LINUX)
|
||||
struct udev* uDev = nullptr;
|
||||
struct udev_monitor* uDevMonitor = nullptr;
|
||||
QSocketNotifier* uDevNotifier = nullptr;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
dxClusterClient* cluster = Q_NULLPTR;
|
||||
|
@ -1166,6 +1222,7 @@ private:
|
|||
QMutex clusterMutex;
|
||||
QColor clusterColor;
|
||||
audioDevices* audioDev = Q_NULLPTR;
|
||||
QImage lcdImage;
|
||||
};
|
||||
|
||||
Q_DECLARE_METATYPE(struct rigCapabilities)
|
||||
|
@ -1192,12 +1249,15 @@ Q_DECLARE_METATYPE(QVector <BUTTON>*)
|
|||
Q_DECLARE_METATYPE(QVector <KNOB>*)
|
||||
Q_DECLARE_METATYPE(QVector <COMMAND>*)
|
||||
Q_DECLARE_METATYPE(const COMMAND*)
|
||||
Q_DECLARE_METATYPE(const USBDEVICE*)
|
||||
Q_DECLARE_METATYPE(codecType)
|
||||
Q_DECLARE_METATYPE(errorType)
|
||||
Q_DECLARE_METATYPE(enum duplexMode)
|
||||
Q_DECLARE_METATYPE(enum rptAccessTxRx)
|
||||
Q_DECLARE_METATYPE(struct rptrTone_t)
|
||||
Q_DECLARE_METATYPE(struct rptrAccessData_t)
|
||||
Q_DECLARE_METATYPE(enum usbFeatureType)
|
||||
Q_DECLARE_METATYPE(enum cmds)
|
||||
|
||||
//void (*wfmain::logthistext)(QString text) = NULL;
|
||||
|
||||
|
|
29
wfmain.ui
29
wfmain.ui
|
@ -18,7 +18,7 @@
|
|||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>3</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="mainTab">
|
||||
<attribute name="title">
|
||||
|
@ -159,12 +159,18 @@
|
|||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="scopeEnableWFBtn">
|
||||
<property name="toolTip">
|
||||
<string>Checked=WF enable, Unchecked=WF disable, Partial=Enable WF but no local display</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enable WF</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="tristate">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -3443,8 +3449,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>820</width>
|
||||
<height>302</height>
|
||||
<width>579</width>
|
||||
<height>254</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
|
@ -5015,7 +5021,7 @@
|
|||
<string/>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Setup USB Controller</string>
|
||||
<string>Setup USB Controllers</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -5033,23 +5039,16 @@
|
|||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="usbButtonsResetBtn">
|
||||
<widget class="QPushButton" name="usbControllersResetBtn">
|
||||
<property name="text">
|
||||
<string>Reset Buttons</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="usbCommandsResetBtn">
|
||||
<property name="text">
|
||||
<string>Reset Commands</string>
|
||||
<string>Reset Controllers</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="usbResetLbl">
|
||||
<property name="text">
|
||||
<string>Only reset buttons/commands if you have issues. </string>
|
||||
<string>Reset all USB controllers to defaults (delete all knobs/buttons)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
@ -5537,8 +5536,8 @@
|
|||
<resources/>
|
||||
<connections/>
|
||||
<buttongroups>
|
||||
<buttongroup name="underlayButtonGroup"/>
|
||||
<buttongroup name="buttonGroup"/>
|
||||
<buttongroup name="pollingButtonGroup"/>
|
||||
<buttongroup name="underlayButtonGroup"/>
|
||||
</buttongroups>
|
||||
</ui>
|
||||
|
|
|
@ -13,7 +13,7 @@ TEMPLATE = app
|
|||
|
||||
CONFIG += console
|
||||
|
||||
DEFINES += WFVIEW_VERSION=\\\"1.62\\\"
|
||||
DEFINES += WFVIEW_VERSION=\\\"1.65\\\"
|
||||
|
||||
DEFINES += BUILD_WFSERVER
|
||||
|
||||
|
|
38
wfview.pro
38
wfview.pro
|
@ -21,7 +21,7 @@ contains(DEFINES,USB_CONTROLLER){
|
|||
TARGET = wfview
|
||||
TEMPLATE = app
|
||||
|
||||
DEFINES += WFVIEW_VERSION=\\\"1.62\\\"
|
||||
DEFINES += WFVIEW_VERSION=\\\"1.65\\\"
|
||||
|
||||
DEFINES += BUILD_WFVIEW
|
||||
|
||||
|
@ -51,7 +51,7 @@ macx:DEFINES += __MACOSX_CORE__
|
|||
!linux:HEADERS += ../rtaudio/RTAUdio.h
|
||||
!linux:INCLUDEPATH += ../rtaudio
|
||||
|
||||
linux:LIBS += -lpulse -lpulse-simple -lrtaudio -lpthread
|
||||
linux:LIBS += -lpulse -lpulse-simple -lrtaudio -lpthread -ludev
|
||||
|
||||
win32:INCLUDEPATH += ../portaudio/include
|
||||
!win32:LIBS += -lportaudio
|
||||
|
@ -116,17 +116,22 @@ unix:target.path = $$PREFIX/bin
|
|||
INSTALLS += target
|
||||
|
||||
# Why doesn't this seem to do anything?
|
||||
unix:DISTFILES += resources/wfview.png \
|
||||
unix:DISTFILES += resources/unix_icons/wfview.png \
|
||||
resources/install.sh
|
||||
unix:DISTFILES += resources/wfview.desktop
|
||||
unix:DISTFILES += resources/org.wfview.wfview.metainfo.xml
|
||||
|
||||
unix:applications.files = resources/wfview.desktop
|
||||
unix:applications.path = $$PREFIX/share/applications
|
||||
INSTALLS += applications
|
||||
|
||||
unix:pixmaps.files = resources/wfview.png
|
||||
unix:pixmaps.path = $$PREFIX/share/pixmaps
|
||||
INSTALLS += pixmaps
|
||||
unix:icons.files = resources/unix_icons/wfview.png
|
||||
unix:icons.path = $$PREFIX/share/icons/hicolor/256x256/apps
|
||||
INSTALLS += icons
|
||||
|
||||
unix:metainfo.files = resources/org.wfview.wfview.metainfo.xml
|
||||
unix:metainfo.path = $$PREFIX/share/metainfo
|
||||
INSTALLS += metainfo
|
||||
|
||||
unix:stylesheets.files = qdarkstyle
|
||||
unix:stylesheets.path = $$PREFIX/share/wfview
|
||||
|
@ -138,8 +143,11 @@ macx:LIBS += -framework CoreAudio -framework CoreFoundation -lpthread -lopus
|
|||
# CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT
|
||||
|
||||
CONFIG(debug, release|debug) {
|
||||
!win32: QCPLIB = qcustomplotd
|
||||
win32: QCPLIB = qcustomplotd2
|
||||
linux:LIBS += $$system("/sbin/ldconfig -p | awk '/libQCustomPlotd.so/ {print \"-lQCustomPlotd\"}'")
|
||||
linux:LIBS += $$system("/sbin/ldconfig -p | awk '/libqcustomplotd2.so/ {print \"-lqcustomplotd2\"}'")
|
||||
linux:LIBS += $$system("/sbin/ldconfig -p | awk '/libqcustomplotd.so/ {print \"-lqcustomplotd\"}'")
|
||||
macos:LIBS += -lqcustomplotd
|
||||
win32:LIBS += -lqcustomplotd2
|
||||
win32 {
|
||||
contains(QMAKE_TARGET.arch, x86_64) {
|
||||
LIBS += -L../opus/win32/VS2015/x64/DebugDLL/
|
||||
|
@ -166,8 +174,11 @@ CONFIG(debug, release|debug) {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
!win32: QCPLIB = qcustomplot
|
||||
win32: QCPLIB = qcustomplot2
|
||||
linux:LIBS += $$system("/sbin/ldconfig -p | awk '/libQCustomPlot.so/ {print \"-lQCustomPlot\"}'")
|
||||
linux:LIBS += $$system("/sbin/ldconfig -p | awk '/libqcustomplot2.so/ {print \"-lqcustomplot2\"}'")
|
||||
linux:LIBS += $$system("/sbin/ldconfig -p | awk '/libqcustomplot.so/ {print \"-lqcustomplot\"}'")
|
||||
macos:LIBS += -lqcustomplot
|
||||
win32:LIBS += -lqcustomplot2
|
||||
win32 {
|
||||
contains(QMAKE_TARGET.arch, x86_64) {
|
||||
LIBS += -L../opus/win32/VS2015/x64/ReleaseDLL/
|
||||
|
@ -196,14 +207,13 @@ CONFIG(debug, release|debug) {
|
|||
}
|
||||
|
||||
contains(DEFINES,USB_CONTROLLER){
|
||||
linux:LIBS += -L./ -l$$QCPLIB -lhidapi-libusb
|
||||
linux:LIBS += -L./ -lhidapi-libusb
|
||||
macx:LIBS += -lhidapi
|
||||
win32:INCLUDEPATH += ../hidapi/hidapi
|
||||
}
|
||||
|
||||
!win32:LIBS += -L./ -l$$QCPLIB -lopus
|
||||
win32:LIBS += -l$$QCPLIB -lopus -lole32
|
||||
|
||||
!win32:LIBS += -L./ -lopus
|
||||
win32:LIBS += -lopus -lole32 -luser32
|
||||
|
||||
#macx:SOURCES += ../qcustomplot/qcustomplot.cpp
|
||||
#macx:HEADERS += ../qcustomplot/qcustomplot.h
|
||||
|
|
|
@ -48,6 +48,7 @@ enum mode_kind {
|
|||
modeLSB_D=0x80,
|
||||
modeUSB_D=0x81,
|
||||
modeDV=0x17,
|
||||
modeATV=0x23,
|
||||
modeDD=0x27,
|
||||
modeWFM,
|
||||
modeS_AMD,
|
||||
|
@ -147,16 +148,19 @@ struct timekind {
|
|||
};
|
||||
|
||||
enum cmds {
|
||||
cmdNone, cmdGetRigID, cmdGetRigCIV, cmdGetFreq, cmdSetFreq, cmdGetMode, cmdSetMode,
|
||||
cmdNone, cmdGetRigID, cmdGetRigCIV, cmdGetFreq, cmdGetFreqB, cmdSetFreq, cmdGetMode, cmdSetMode,
|
||||
cmdGetDataMode, cmdSetModeFilter, cmdSetDataModeOn, cmdSetDataModeOff, cmdGetRitEnabled, cmdGetRitValue,
|
||||
cmdSpecOn, cmdSpecOff, cmdDispEnable, cmdDispDisable, cmdGetRxGain, cmdSetRxRfGain, cmdGetAfGain, cmdSetAfGain,
|
||||
cmdGetSql, cmdSetSql, cmdGetIFShift, cmdSetIFShift, cmdGetTPBFInner, cmdSetTPBFInner,
|
||||
cmdGetTPBFOuter, cmdSetTPBFOuter, cmdGetPassband, cmdSetPassband,
|
||||
cmdGetSql, cmdSetSql, cmdGetIFShift, cmdSetIFShift, cmdGetNRLevel, cmdSetNRLevel, cmdGetTPBFInner, cmdSetTPBFInner,
|
||||
cmdGetTPBFOuter, cmdSetTPBFOuter, cmdGetPassband, cmdSetPassband, cmdGetNBLevel, cmdSetNBLevel,
|
||||
cmdGetCompLevel, cmdSetCompLevel,
|
||||
cmdGetMonitorGain, cmdSetMonitorGain, cmdGetVoxGain, cmdSetVoxGain, cmdGetAntiVoxGain, cmdSetAntiVoxGain,
|
||||
cmdGetCwPitch, cmdGetPskTone, cmdGetRttyMark, cmdSetCwPitch, cmdSetPskTone, cmdSetRttyMark,
|
||||
cmdGetVox,cmdSetVox, cmdGetMonitor,cmdSetMonitor, cmdGetComp, cmdSetComp, cmdGetNB, cmdSetNB, cmdGetNR, cmdSetNR,
|
||||
cmdSetATU, cmdStartATU, cmdGetATUStatus,
|
||||
cmdGetSpectrumMode, cmdGetSpectrumSpan, cmdScopeCenterMode, cmdScopeFixedMode,
|
||||
cmdGetPTT, cmdSetPTT,cmdPTTToggle,
|
||||
cmdGetTxPower, cmdSetTxPower, cmdGetMicGain, cmdSetMicGain, cmdSetModLevel,
|
||||
cmdGetTxPower, cmdSetTxPower, cmdGetMicGain, cmdSetMicGain, cmdGetModLevel, cmdSetModLevel,
|
||||
cmdGetSpectrumRefLevel, cmdGetDuplexMode, cmdGetModInput, cmdGetModDataInput,
|
||||
cmdGetCurrentModLevel, cmdStartRegularPolling, cmdStopRegularPolling, cmdQueNormalSpeed,
|
||||
cmdGetVdMeter, cmdGetIdMeter, cmdGetSMeter, cmdGetCenterMeter, cmdGetPowerMeter,
|
||||
|
@ -169,7 +173,9 @@ enum cmds {
|
|||
cmdGetBandStackReg, cmdGetKeySpeed, cmdSetKeySpeed, cmdGetBreakMode, cmdSetBreakMode, cmdSendCW, cmdStopCW, cmdGetDashRatio, cmdSetDashRatio,
|
||||
cmdSetTime, cmdSetDate, cmdSetUTCOffset,
|
||||
// Below Only used for USB Controller at the moment.
|
||||
cmdSetBandUp, cmdSetBandDown, cmdSetModeUp, cmdSetModeDown, cmdSetStepUp, cmdSetStepDown, cmdSetSpanUp, cmdSetSpanDown, cmdIFFilterUp, cmdIFFilterDown
|
||||
cmdSetBandUp, cmdSetBandDown, cmdSetModeUp, cmdSetModeDown, cmdSetStepUp, cmdSetStepDown,
|
||||
cmdSetSpanUp, cmdSetSpanDown, cmdIFFilterUp, cmdIFFilterDown, cmdPageDown, cmdPageUp,
|
||||
cmdLCDWaterfall, cmdLCDSpectrum, cmdLCDNothing, cmdSeparator
|
||||
};
|
||||
|
||||
struct commandtype {
|
||||
|
@ -194,7 +200,15 @@ enum codecType { LPCM, PCMU, OPUS };
|
|||
|
||||
enum passbandActions {passbandStatic, pbtInnerMove, pbtOuterMove, pbtMoving, passbandResizing};
|
||||
|
||||
enum usbDeviceType { usbNone = 0, shuttleXpress, shuttlePro2, RC28, xBoxGamepad, unknownGamepad, eCoderPlus, QuickKeys};
|
||||
enum usbCommandType{ commandButton, commandKnob };
|
||||
enum usbDeviceType { usbNone = 0, shuttleXpress, shuttlePro2,
|
||||
RC28, xBoxGamepad, unknownGamepad, eCoderPlus, QuickKeys,
|
||||
StreamDeckMini,StreamDeckMiniV2,StreamDeckOriginal,StreamDeckOriginalV2,
|
||||
StreamDeckOriginalMK2,StreamDeckXL,StreamDeckXLV2,StreamDeckPedal, StreamDeckPlus,
|
||||
XKeysXK3
|
||||
};
|
||||
|
||||
enum usbCommandType{ commandButton, commandKnob, commandAny };
|
||||
enum usbFeatureType { featureReset,featureResetKeys, featureEventsA, featureEventsB, featureFirmware, featureSerial, featureButton, featureSensitivity, featureBrightness,
|
||||
featureOrientation, featureSpeed, featureColor, featureOverlay, featureTimeout, featureLCD, featureGraph, featureLEDControl };
|
||||
|
||||
#endif // WFVIEWTYPES_H
|
||||
|
|
Ładowanie…
Reference in New Issue