Porównaj commity

...

56 Commity

Autor SHA1 Wiadomość Data
Roeland Jansen 85178de1d5 fixed small issue in the install stuff 2024-02-26 20:00:50 +01:00
Roeland Jansen c7e8e90928 Fix for original Streamdeck (maybe XL as well) and Add XKeysXK3 (very early) support 2024-02-20 18:19:08 +01:00
Phil Taylor 9db9be5dec Add XKeysXK3 (very early) support 2024-02-20 17:06:52 +00:00
Phil Taylor 637e94dfd8 FIx for original Streamdeck (maybe XL as well?) 2024-02-20 16:53:45 +00:00
Elliott Liggett b68874d328 Merge branch 'desktop-files' into 'master'
Add AppStream metainfo file, standard size icon

Thank you, AsciiWolf, for helping us with flatpak (and flathub). 

See merge request eliggett/wfview!19
2023-11-20 17:48:16 +00:00
AsciiWolf e5c6e2030a Use correct aspect ratio icon 2023-11-18 01:58:46 +01:00
AsciiWolf 9be0acdf2e Add AppStream metainfo file, standard size icon 2023-11-17 00:28:33 +01:00
Roeland Jansen 1805861274 DERP! the channel spacing 6.125 is not half of 12.5 kHz. Fixed it. 2023-08-13 21:09:00 +02:00
Phil Taylor b4c079f7f4 Prepare for v1.64 release 2023-07-16 14:05:53 +01:00
Phil Taylor 80d6614ca7 Fix compile warnings 2023-07-16 14:00:18 +01:00
Phil Taylor 7df55bc41f Fix errors identified by clang scan-build 2023-07-16 10:26:28 +01:00
Roeland Jansen 54b00b9022 added list of known CI-V addresses, interfaces, rates 2023-05-29 11:42:16 +02:00
Roeland Jansen 0c072f4665 added libudev-dev as prereq to build on debian based systems 2023-05-03 08:04:17 +02:00
M0VSE 6fc63df321 Fix user not having access to ldconfig 2023-04-27 18:11:31 +01:00
M0VSE d5e4a67ac1 Fix libQCustomPlot library issue 2023-04-27 17:52:20 +01:00
Roeland Jansen c7e53f6a4d added initial ic905 and usb multi-controller support 2023-04-19 07:52:23 +02:00
Roeland Jansen 375acead89 Merge branch 'multi-usb' 2023-04-19 07:36:20 +02:00
Phil Taylor e274271820 Add support for IC-905 2023-04-17 11:19:00 +01:00
Phil Taylor 34655f6348 Allow user to select which LED is updated by the button. 2023-04-15 21:13:43 +01:00
Phil Taylor 8ad74ac7f6 First step at improving LED support 2023-04-15 20:13:20 +01:00
Phil Taylor 5d897c127a Make TX LED work on RC28 2023-04-15 11:34:41 +01:00
Phil Taylor 3c90a9363b Various fixes 2023-04-15 11:25:35 +01:00
Phil Taylor c392874b3b Comment out RC28 LED for now. 2023-04-14 21:36:46 +01:00
Phil Taylor 7b101d5ad4 Another attempt to fix for GCC 2023-04-14 21:33:45 +01:00
Phil Taylor 6a2e2024ef Fix compile error 2023-04-14 21:03:15 +01:00
Phil Taylor d941c831f3 Resize the controller display on tab change 2023-04-14 10:26:54 +01:00
Phil Taylor f35ac25ad3 Various other fixes 2023-04-13 15:28:46 +01:00
Phil Taylor 58f38c1735 Add RC28 LED Control to the features and disable controls that don't make sense 2023-04-13 14:36:16 +01:00
Phil Taylor 59bc2077e4 Replace + with | in keyboard shortcuts 2023-04-13 14:02:43 +01:00
Phil Taylor 8b786c1821 Fix recursive calling of pageChanged() 2023-04-12 11:14:40 +01:00
Phil Taylor 5ded2a0e79 Some more fixes 2023-04-12 10:24:00 +01:00
M0VSE c9300f4d86 Add linux USB hotplug 2023-04-11 20:25:29 +01:00
Roeland Jansen 1549819ad6 Fedora 36 instr. added 2023-04-11/Knud OZ1DGN 2023-04-11 19:17:11 +02:00
M0VSE 4874d70215 Fix linux compile 2023-04-10 13:46:29 +01:00
Phil Taylor d5f0e0f63c Lots more features and other fixes 2023-04-09 23:53:51 +01:00
Phil Taylor 1da3696ba2 Merge branch 'tristate' into multi-usb 2023-04-03 14:31:48 +01:00
Phil Taylor 289170e22d Enable wf by default 2023-04-02 21:11:14 +01:00
Phil Taylor ae0271c7f9 Use tristate checkbox for Scope enable/disable (also add saving state) 2023-04-02 21:09:37 +01:00
Phil Taylor a0f3f7de07 More work, tidying and improving stablity 2023-04-02 20:07:13 +01:00
Phil Taylor 0304ac67f6 Add backup/restore of button config 2023-03-29 23:33:18 +01:00
Phil Taylor 468cd2de0d Add various commands, monitor, NB, NR etc. 2023-03-28 21:58:46 +01:00
Phil Taylor 592c583d19 Add USB hotplug support in Windows 2023-03-28 19:07:54 +01:00
Phil Taylor cadf835d95 Receive current knob values from rig 2023-03-27 12:38:01 +01:00
Phil Taylor 75288b5e78 Allow storing of icons and various other fixes 2023-03-26 23:23:40 +01:00
Phil Taylor 6fd0d4e763 various other fixes and stability improvements 2023-03-26 16:08:53 +01:00
Phil Taylor 03c45663dc Fix crash when clicking on a knob. 2023-03-25 16:58:28 +00:00
Phil Taylor ac58289188 Initial support for Stream Deck Pro (other Stream Deck support to follow) 2023-03-25 09:09:42 +00:00
Phil Taylor d7ba3d9d9a Fix for wrong VFO being set on haveBandStackReg 2023-03-21 15:37:57 +00:00
Phil Taylor d1688a99c5 Fix controller setup window resizing 2023-03-21 13:24:48 +00:00
Phil Taylor a74f68d9d4 Various fixes 2023-03-21 13:17:35 +00:00
Phil Taylor f663550da7 Set tab name correctly 2023-03-20 15:37:11 +00:00
M0VSE 9d63c5cb71 Fix window issue in linux 2023-03-20 15:32:04 +00:00
Phil Taylor eb65ae0b1c Various fixes
Improve UI handling, add disable option
2023-03-18 16:38:24 +00:00
Phil Taylor 898d5960d8 Allow main knob to be used for other values than VFO 2023-03-18 01:34:40 +00:00
Phil Taylor a461babf73 Fix warning 2023-03-18 00:17:33 +00:00
Phil Taylor 792fac11d6 Support multiple USB controllers 2023-03-17 23:35:40 +00:00
36 zmienionych plików z 4499 dodań i 1884 usunięć

256
CHANGELOG
Wyświetl plik

@ -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>

109
CI-V.md 100644
Wyświetl plik

@ -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 |

Wyświetl plik

@ -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:

Wyświetl plik

@ -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.

Wyświetl plik

@ -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");

Wyświetl plik

@ -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.
}

Plik diff jest za duży Load Diff

Wyświetl plik

@ -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

Wyświetl plik

@ -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>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;&lt;span style=&quot; font-weight:700;&quot;&gt;Button configuration: &lt;/span&gt;Right-click on each button to configure it.&lt;/p&gt;&lt;p align=&quot;center&quot;&gt;Top selection is command to send when button is pressed and bottom is (optional) command to send when button is released.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</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/>

Wyświetl plik

@ -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.

Wyświetl plik

@ -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
Wyświetl plik

@ -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;

Wyświetl plik

@ -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);

Wyświetl plik

@ -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)

Wyświetl plik

@ -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/

Wyświetl plik

@ -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,
wfviews command dictionary is focused on commands with the most compatibility. Many of Icoms 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>

Wyświetl plik

@ -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

Wyświetl plik

@ -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) {

Wyświetl plik

@ -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);

Wyświetl plik

@ -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);

Wyświetl plik

@ -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;

Wyświetl plik

@ -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
}
}
}

Plik diff jest za duży Load Diff

Wyświetl plik

@ -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

Plik diff jest za duży Load Diff

Wyświetl plik

@ -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;

Wyświetl plik

@ -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>

Wyświetl plik

@ -13,7 +13,7 @@ TEMPLATE = app
CONFIG += console
DEFINES += WFVIEW_VERSION=\\\"1.62\\\"
DEFINES += WFVIEW_VERSION=\\\"1.65\\\"
DEFINES += BUILD_WFSERVER

Wyświetl plik

@ -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

Wyświetl plik

@ -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