Porównaj commity

...

130 Commity
v1.1.0 ... main

Autor SHA1 Wiadomość Data
PianetaRadio 8fb790c1eb
CW 2024-04-16 20:34:52 +02:00
PianetaRadio 8fa52c8273
Bug fix IF shift 2024-04-16 19:55:41 +02:00
PianetaRadio f51d68fc0e
FM 2024-04-16 19:50:59 +02:00
PianetaRadio 29682cbad5
CW 2024-04-16 19:46:23 +02:00
PianetaRadio 882558b523
CW memory keyer
Yaesu only
2024-04-13 00:46:59 +02:00
PianetaRadio 0fdc71f98d
Check hamlib version on startup 2024-04-02 21:16:54 +02:00
PianetaRadio 146207cd98
Version 1.4.1 2024-03-17 18:13:15 +01:00
PianetaRadio 17a3cf614e
Hamlib 4.6 beta 2024-03-17 16:54:59 +01:00
PianetaRadio 46cad6b5bc
Add files via upload 2024-03-17 15:50:24 +01:00
PianetaRadio 1415cad921
Add files via upload 2024-03-17 15:36:46 +01:00
PianetaRadio ceccbe2b92
Add files via upload 2024-03-07 23:59:23 +01:00
PianetaRadio a258c1fe13
Add files via upload
#44
2024-03-07 23:29:02 +01:00
PianetaRadio df7e3bdcec
Allow serial netwotk port
#44
2024-03-07 22:53:15 +01:00
PianetaRadio b8bead15f3
Serial port configuration 2
#42
2024-03-03 19:16:26 +01:00
PianetaRadio 69d3995653
Serial port configuration
#42
2024-03-03 00:13:00 +01:00
PianetaRadio f4ea500269
Auto connect
#41
2024-02-26 19:30:25 +01:00
PianetaRadio 778761a1a8
Default value for NET connection 2024-02-25 21:31:50 +01:00
PianetaRadio 0ae620b732
Code optimization
Use has_get/set_func instead of rig cap
2024-02-25 20:52:04 +01:00
PianetaRadio 7909e2a0de
Fix NR level
#40
2023-10-02 21:08:30 +02:00
PianetaRadio 2043bb7b2a
NR level
#40
2023-05-30 21:44:47 +02:00
PianetaRadio 0e932dd3c5
Repeater shift bug fix
#39
2023-05-30 20:40:04 +02:00
PianetaRadio 8781583cd9
GUI update fix 2023-05-30 20:38:05 +02:00
PianetaRadio 7c4fad92a5
Auto power-on
#38
2023-05-29 21:18:10 +02:00
PianetaRadio ef30ab50eb
High SWR indicator
#37
2023-05-12 20:18:45 +02:00
PianetaRadio 97f2b54ab8
Power button 2023-04-30 01:09:25 +02:00
PianetaRadio a2fda861ce
GUI
Combo box and Spin box improvement
2023-04-27 20:24:22 +02:00
PianetaRadio c17bb04fd7
Copyright
date updated
2023-04-27 20:12:32 +02:00
PianetaRadio c2ea381757
Disconnect
Add meters reset and PTT status check
2023-04-27 20:11:48 +02:00
PianetaRadio e91f5aae09
Add files via upload 2023-04-09 00:43:10 +02:00
PianetaRadio 6d2356a04d
Fix NET rigctl connection when rig is off
When using NET rigctl, connect with option auto_power_on = 1
2023-04-09 00:39:30 +02:00
PianetaRadio d9a15a9826
Update to hamlib 4.5.5 2023-04-09 00:36:15 +02:00
PianetaRadio 18994840a5
Peak hold submeter
#35
2023-03-22 19:43:42 +01:00
PianetaRadio b8ce26670e
Power button
#36
2023-02-22 20:32:58 +01:00
PianetaRadio 068922c6b6
Power off msg
#19
2023-02-10 20:34:28 +01:00
PianetaRadio 2c3b14e2d0
Power status
#36
2023-02-10 19:52:33 +01:00
PianetaRadio 7fe09861b4
Sub meter peak hold
#35
2023-02-10 19:14:31 +01:00
PianetaRadio c22d15ea35
Sub meter peak hold
#35
2023-02-08 20:24:39 +01:00
PianetaRadio 8ee38b8b3a
Power status 2023-02-08 19:59:07 +01:00
PianetaRadio 0689460b40
Debug mode 2023-01-15 20:03:36 +01:00
PianetaRadio 94a79d7ff1
Add files via upload 2023-01-12 20:28:30 +01:00
PianetaRadio e9a5613888
Hamlib 4.5.4 2023-01-12 20:27:37 +01:00
PianetaRadio a055937a57
Peak hold
#34
2022-12-09 20:32:43 +01:00
PianetaRadio 8c4d24c5e2
Peak hold
#34
2022-12-09 20:22:08 +01:00
PianetaRadio d8c9bf1594
Add files via upload 2022-12-09 00:11:08 +01:00
PianetaRadio 1cbbc555af
Hamlib 4.5.1 2022-12-09 00:05:31 +01:00
PianetaRadio 0e19ee12cd
Meter peak hold
#34
2022-12-09 00:00:47 +01:00
PianetaRadio d2db142e34
COM port list
#32
2022-12-08 21:08:38 +01:00
PianetaRadio 4de9e1647b
COM port list
#32
2022-12-08 21:06:19 +01:00
PianetaRadio dfa37bedec
Meter Peak hold
#34
2022-12-07 20:50:23 +01:00
PianetaRadio 724a3dc356
Custom command
#22
2022-12-05 21:02:58 +01:00
PianetaRadio e642a6f545
v.1.3.0 2022-11-24 21:37:52 +01:00
PianetaRadio 11ce37a11e
Dark theme
#33
2022-11-24 20:24:58 +01:00
PianetaRadio 7fb5e4ccc4
Dark theme about
#33
2022-11-24 09:35:03 +01:00
PianetaRadio 2013e2db32
Add files via upload
Test
2022-11-23 21:35:15 +01:00
PianetaRadio a362556e88
Fix AGC levels list
#28
2022-11-23 21:33:07 +01:00
PianetaRadio 52bc03e048
Add files via upload
#15
2022-11-23 20:17:38 +01:00
PianetaRadio 79453ced7b
Update dialogradioinfo.cpp
#15
2022-11-23 10:23:28 +01:00
PianetaRadio 31dcbc3255
Radio info
#15
2022-11-22 21:47:32 +01:00
PianetaRadio bf2b4455ae
Working on command dialog
Add RIG pointer to rigdaemon functions
2022-11-20 21:48:13 +01:00
PianetaRadio 1273184597
Bug fix
Submeter color dark theme.
indexCmd for VFO A/B.
2022-11-20 18:45:08 +01:00
PianetaRadio 58b2875032
Delete .keep 2022-11-19 21:28:16 +01:00
PianetaRadio 4de36f3ee5
Delete .keep 2022-11-19 21:28:04 +01:00
PianetaRadio e3504ea7f2
Delete .keep 2022-11-19 21:27:54 +01:00
PianetaRadio df4c69092b
Dark theme
#33
2022-11-19 21:27:36 +01:00
PianetaRadio 011043816c
Dark theme
#33
2022-11-19 21:26:23 +01:00
PianetaRadio 8f17755b6e
Dark theme
#33
2022-11-19 21:25:08 +01:00
PianetaRadio d4fdccd0ff
Create .keep 2022-11-19 21:23:01 +01:00
PianetaRadio a028226807
Dark theme
#33
2022-11-19 21:22:27 +01:00
PianetaRadio 822b3fa482
Create .keep 2022-11-19 21:21:57 +01:00
PianetaRadio cf2709e6f9
Dark theme
#33
2022-11-19 21:21:16 +01:00
PianetaRadio 8cb9db1651
Create .keep 2022-11-19 21:20:21 +01:00
PianetaRadio 5ac75cee7c
Dark theme
#33
2022-11-19 21:13:20 +01:00
PianetaRadio 4b8ea4161c
Add files via upload 2022-11-18 21:11:48 +01:00
PianetaRadio 81f9ddec86
Update GUI when band change 2022-11-18 21:09:44 +01:00
PianetaRadio 888c4bb230
Sort band width list
#30
2022-11-17 20:18:24 +01:00
PianetaRadio 47eede5866
MIC controls
#25
2022-11-14 20:19:39 +01:00
PianetaRadio 3f8db6aa0f
Bug fix application path
#29
2022-11-07 20:58:41 +01:00
PianetaRadio cb80d59018
Versioning of radio.lst
#26
2022-11-07 20:15:02 +01:00
PianetaRadio 910f27bb04
VFO
Remove workaround for bug rigctld targetable_vfo in hamlib 4.4
2022-11-06 19:33:33 +01:00
PianetaRadio 664b504a71
CW func
#24
2022-11-06 19:30:40 +01:00
PianetaRadio 600090bece
AGC levels
#28
2022-11-06 19:19:07 +01:00
PianetaRadio c1b7b8cdc5
Connection messages
#19
2022-11-06 19:14:23 +01:00
PianetaRadio 8a0c0ee9a1
Add files via upload
#17
2022-11-06 18:58:55 +01:00
PianetaRadio 53d0e97a3a
Add files via upload 2022-11-06 00:52:40 +01:00
PianetaRadio 57da1330e8
Update changelog 2022-11-05 19:30:21 +01:00
PianetaRadio f749ee050b
NB2
#20
2022-11-05 19:26:21 +01:00
PianetaRadio b69f5c58ad
Sliders bug fix
#18
2022-11-05 13:35:38 +01:00
PianetaRadio af6c3b8eff
Add files via upload 2022-11-04 19:33:43 +01:00
PianetaRadio 737df6c764
Mouse wheel scroll step = 10
#27
2022-11-04 19:33:18 +01:00
PianetaRadio 41ba676d4f
Sub meter
#17
2022-11-04 17:57:35 +01:00
PianetaRadio ea9830a376
Sliders bug
#18
2022-11-04 17:04:42 +01:00
PianetaRadio e29b2d6ea5
Sliders bug
#18
2022-11-03 21:40:45 +01:00
PianetaRadio 2eef4f72e5
Sliders bug
#19
2022-11-03 21:37:57 +01:00
PianetaRadio ba02bc15d8
Add files via upload 2022-11-03 20:26:19 +01:00
PianetaRadio 60ed269bfb
Sub meter
#17
2022-11-03 20:24:55 +01:00
PianetaRadio 846293a019
Yaesu band stack
#23
2022-10-30 16:20:53 +01:00
PianetaRadio 10d884a966
Delete ChangeLog.txt 2022-10-30 10:35:54 +01:00
PianetaRadio 2585ef2780
Hamlib 4.5
#21
2022-10-30 10:33:20 +01:00
PianetaRadio aa150609f6
Update README.md 2022-09-20 19:58:13 +02:00
PianetaRadio f565722a7f
Add files via upload 2022-05-31 23:08:22 +02:00
PianetaRadio b254abbfe0
Update README.md 2022-05-26 13:35:39 +02:00
PianetaRadio 3bd4712008
Update README.md 2022-05-26 13:33:20 +02:00
PianetaRadio 278c884589
Save/Restore window settings
#16
2022-05-25 19:20:20 +02:00
PianetaRadio 462727c7fc
Version 1.2.0 2022-04-13 19:02:40 +02:00
PianetaRadio 0f0c46126a
vfodisplay WheelEvent pos
QT version check for compatibility pos or position
2022-04-12 20:25:54 +02:00
PianetaRadio 9486e3d17f
QSplit button
#13
2022-04-12 19:51:35 +02:00
PianetaRadio 150c6bf586
Removed external variable from vfodisplay widget 2022-04-12 19:27:46 +02:00
PianetaRadio 3bacb30eaa
VFO Display on Sub VFO
#12
2022-04-11 20:45:19 +02:00
PianetaRadio 6907aa68e9
PTT logic 2022-04-11 20:14:52 +02:00
PianetaRadio ac85aefff8
Improved Radio Configuration Dialog
#11
2022-04-11 20:02:37 +02:00
PianetaRadio 2e7641f8f4
change PTT button toggle logic 2022-04-09 21:27:04 +02:00
PianetaRadio 7539f8d9c6
fix VFO red Tx
#6
2022-04-08 18:24:25 +02:00
PianetaRadio fa5a12f0f3
Update changelog 2022-04-08 18:10:24 +02:00
PianetaRadio c28c1dbb35
Clarifier
#10
2022-04-08 18:04:54 +02:00
PianetaRadio d0d145d839
Repeater shift offset
#7
2022-03-29 23:02:18 +02:00
PianetaRadio f7c61e8484
Up/Down VFO buttons
#9
2022-03-29 22:58:09 +02:00
PianetaRadio fe51858e16
Communication dialog 2022-03-29 22:57:14 +02:00
PianetaRadio 41d79b0d05
DCS code
#3
2022-03-29 22:56:27 +02:00
PianetaRadio 7b640fffb4
Up / Down VFO buttons
#9
2022-03-28 23:37:04 +02:00
PianetaRadio 25e13f79d4
Repeater offset
#7
2022-03-27 13:56:20 +02:00
PianetaRadio c0d66fba54
Change file name
#8
2022-03-27 13:16:53 +02:00
PianetaRadio eb44e9c040
DCS code and squelch
#3
2022-03-27 13:09:10 +02:00
PianetaRadio 9baf4c7a2f
DCS code and squelch
#3
2022-03-27 12:42:01 +02:00
PianetaRadio a6aa5c4787
COM port for Linux OS
#5
2022-03-24 19:59:38 +01:00
PianetaRadio da8fdce9d3
Add COM port list
#5
2022-03-23 20:14:16 +01:00
PianetaRadio 034a0788a7
Update README.md 2022-03-22 12:02:19 +01:00
PianetaRadio 55ffcb86d7
Release v1.1.1
#1 #2
2022-03-19 13:54:28 +01:00
PianetaRadio 07b5a29765
Sub VFO and VFO operations improvement
#1 #2
2022-03-18 23:44:52 +01:00
PianetaRadio 1c872253c1
Sub VFO enhancement for non targetable_vfo rigs
#1
2022-03-16 23:37:41 +01:00
PianetaRadio eb528fe85e
Sub VFO enhancement for non targetable_vfo rigs 2022-03-16 23:18:47 +01:00
259 zmienionych plików z 8709 dodań i 1440 usunięć

9
CatRadio.desktop 100644
Wyświetl plik

@ -0,0 +1,9 @@
[Desktop Entry]
Name=CatRadio
Comment=Radio Control Software
Icon=/home/pi/CatRadio/catradio.png
Exec=/home/pi/CatRadio/CatRadio
Type=Application
Terminal=false
Encoding=UTF-8
Categories=HamRadio;

Wyświetl plik

@ -1,4 +1,5 @@
QT += core gui
QT += serialport
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
@ -9,7 +10,9 @@ CONFIG += c++11
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
dialogcommand.cpp \
dialogconfig.cpp \
dialogradioinfo.cpp \
dialogsetup.cpp \
guidata.cpp \
main.cpp \
@ -22,7 +25,9 @@ SOURCES += \
vfodisplay.cpp
HEADERS += \
dialogcommand.h \
dialogconfig.h \
dialogradioinfo.h \
dialogsetup.h \
guidata.h \
mainwindow.h \
@ -34,7 +39,9 @@ HEADERS += \
vfodisplay.h
FORMS += \
dialogcommand.ui \
dialogconfig.ui \
dialogradioinfo.ui \
dialogsetup.ui \
mainwindow.ui
@ -46,7 +53,11 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
LIBS += -L$$PWD/hamlib/ -lhamlib
INCLUDEPATH += $$PWD/hamlib
VERSION = 1.0.0
# RESOURCES += theme/breeze.qrc
RESOURCES += qdarkstyle/dark/darkstyle.qrc
# RESOURCES += qdarkstyle/light/lightstyle.qrc
VERSION = 1.4.1
RC_ICONS = catradio.ico

Wyświetl plik

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 5.0.1, 2022-02-15T23:49:28. -->
<!-- Written by QtCreator 6.0.2, 2022-11-19T20:47:40. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
@ -8,7 +8,7 @@
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
<value type="qlonglong">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
@ -28,7 +28,7 @@
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
@ -85,22 +85,25 @@
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
<valuemap type="QVariantMap" key="CppEditor.QuickFix">
<value type="bool" key="UseGlobalSettings">true</value>
</valuemap>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 6.1.3 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 6.1.3 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt6.613.win64_mingw81_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 6.2.4 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 6.2.4 MinGW 64-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt6.624.win64_mingw_kit</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\Johnny\Documents\QT\build-CatRadio-Desktop_Qt_6_1_3_MinGW_64_bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/Johnny/Documents/QT/build-CatRadio-Desktop_Qt_6_1_3_MinGW_64_bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\Johnny\Documents\QT\build-CatRadio-Desktop_Qt_6_2_4_MinGW_64_bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/Johnny/Documents/QT/build-CatRadio-Desktop_Qt_6_2_4_MinGW_64_bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@ -112,7 +115,7 @@
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
@ -123,7 +126,7 @@
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
@ -131,14 +134,15 @@
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\Johnny\Documents\QT\build-CatRadio-Desktop_Qt_6_1_3_MinGW_64_bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/Johnny/Documents/QT/build-CatRadio-Desktop_Qt_6_1_3_MinGW_64_bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\Johnny\Documents\QT\build-CatRadio-Desktop_Qt_6_2_4_MinGW_64_bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/Johnny/Documents/QT/build-CatRadio-Desktop_Qt_6_2_4_MinGW_64_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@ -150,7 +154,7 @@
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
@ -161,7 +165,7 @@
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
@ -169,6 +173,7 @@
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
@ -177,8 +182,8 @@
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\Johnny\Documents\QT\build-CatRadio-Desktop_Qt_6_1_3_MinGW_64_bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/Johnny/Documents/QT/build-CatRadio-Desktop_Qt_6_1_3_MinGW_64_bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\Johnny\Documents\QT\build-CatRadio-Desktop_Qt_6_2_4_MinGW_64_bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/Johnny/Documents/QT/build-CatRadio-Desktop_Qt_6_2_4_MinGW_64_bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@ -190,7 +195,7 @@
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
@ -201,7 +206,7 @@
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
@ -209,6 +214,7 @@
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
@ -216,10 +222,10 @@
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
@ -229,7 +235,7 @@
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
@ -237,182 +243,22 @@
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/Users/Johnny/Documents/QT/CatRadio/CatRadio.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">C:/Users/Johnny/Documents/QT/CatRadio/CatRadio.pro</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">CatRadio2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/Users/Johnny/Documents/QT/CatRadio_dark/CatRadio.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">C:/Users/Johnny/Documents/QT/CatRadio_dark/CatRadio.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">C:/Users/Johnny/Documents/QT/build-CatRadio-Desktop_Qt_6_1_3_MinGW_64_bit-Release</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">C:/Users/Johnny/Documents/QT/build-CatRadio-Desktop_Qt_6_2_4_MinGW_64_bit-Release</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.1</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.15.2 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.15.2 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5152.win32_mingw81_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\Johnny\Documents\QT\build-CatRadio-Desktop_Qt_5_15_2_MinGW_32_bit-Debug</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/Johnny/Documents/QT/build-CatRadio-Desktop_Qt_5_15_2_MinGW_32_bit-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\Johnny\Documents\QT\build-CatRadio-Desktop_Qt_5_15_2_MinGW_32_bit-Release</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/Johnny/Documents/QT/build-CatRadio-Desktop_Qt_5_15_2_MinGW_32_bit-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="int" key="EnableQmlDebugging">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\Johnny\Documents\QT\build-CatRadio-Desktop_Qt_5_15_2_MinGW_32_bit-Profile</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/Johnny/Documents/QT/build-CatRadio-Desktop_Qt_5_15_2_MinGW_32_bit-Profile</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value>
<value type="int" key="SeparateDebugInfo">0</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/Users/Johnny/Documents/QT/CatRadio/CatRadio.pro</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">C:/Users/Johnny/Documents/QT/CatRadio/CatRadio.pro</value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">2</value>
<value type="qlonglong">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>

Wyświetl plik

@ -2,6 +2,54 @@ CatRadio
(+ New, * Updated, - Removed)
1.4.1 - 2024-xx-xx
+ CW memory keyer
+ Check hamlib version on startup
* Bug fix: IF shift
1.4.0 - 2024-03-17
+ Auto Connect option
+ Auto Power-on option
+ High SWR indicator
+ Meter peak hold indicator
+ Debug mode
* Updated serial port configuration
* Bug fix: NR level
* Bug fix: Repeater shift
* Bug fix: Power status
* Bug fix: COM port list
* Updated to library Hamlib 4.6 beta
1.3.0 - 2022-11-24
+ Radio info
+ Dark theme
+ MIC levels
* Bug fix: Sort bandwidth list
* General GUI and code improvements
+ NB2
* Bug fix: Sliders
+ Sub meter COMP, ID, VDD
+ Band stack for supported Yaesu radios
* Updated to library Hamlib 4.5
+ Save/restore window settings
1.2.0 - 2022-04-13
+ VFO Display on Sub VFO
+ Clarifier RIT/XIT commands
+ Up/Down VFO buttons
+ Repeater shift offset
+ DCS code and squelch
+ COM port list in the Radio Config Dialog
* Improved Radio Config Dialog
* Bug fix: Quick Split button
* Bug fix: address the proper VFO red during Tx
* Bug fix: IF shift slider now correctly updated
* Bug fix: CW/FM tab autofocus freeze
1.1.1 - 2022-03-19
* VFO operations: check rig caps before perform VFO operations
* Sub VFO: improve sub VFO functions using targetable_vfo caps
1.1.0 - 2022-03-13
+ AF Gain and Squelch slider
+ Tab with CW and FM functions
@ -10,12 +58,11 @@ CatRadio
+ Red color VFO during transmit
* SWR meter with log scale
* CI-V Address entry in hex
* Bug correction: RF Gain slider now correctly updated
* Bug correction: noise filters init settings now correctly updated
* Bug correction: subVFO mode
* Bug correction: VFO dial now with pointer tracking
* Bug fix: RF Gain slider now correctly updated
* Bug fix: noise filters init settings now correctly updated
* Bug fix: subVFO mode
* Bug fix: VFO dial now with pointer tracking
* Cosmetic adjustement to fit the font for different SO compiler
1.0.0 - 2022-02-13
First release

Wyświetl plik

@ -1,3 +1,8 @@
# CatRadio
[![GitHub all releases](https://img.shields.io/github/downloads/PianetaRadio/CatRadio/total)](https://img.shields.io/github/downloads/PianetaRadio/CatRadio/total)
[![GitHub release (latest by date)](https://img.shields.io/github/downloads/PianetaRadio/CatRadio/latest/total)](https://github.com/PianetaRadio/CatRadio/releases)
Radio control software<br/>
More info https://www.pianetaradio.it/blog/catradio/
![CatRadio](https://www.pianetaradio.it/wp-content/uploads/2022/04/catradio_1.2.0_01.png)

101
dialogcommand.cpp 100644
Wyświetl plik

@ -0,0 +1,101 @@
/**
** This file is part of the CatRadio project.
** Copyright 2022 Gianfranco Sordetti IZ8EWD <iz8ewd@pianetaradio.it>.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
**/
#include "dialogcommand.h"
#include "ui_dialogcommand.h"
#include "rig.h"
#include <stdio.h>
#include <string.h>
#include <QDebug>
DialogCommand::DialogCommand(RIG *rig, QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogCommand)
{
ui->setupUi(this);
my_rig = rig;
int backend = RIG_BACKEND_NUM(my_rig->caps->rig_model);
if (backend == RIG_YAESU || backend == RIG_KENWOOD) ui->radioButton_yaesu->setChecked(true);
else if (backend == RIG_ICOM) ui->radioButton_icom->setChecked(true);
}
DialogCommand::~DialogCommand()
{
delete ui;
}
void DialogCommand::on_pushButton_send_clicked()
{
bool hex = false; //Flag for Hex command
QString sendCmdS = ui->lineEdit_commandSend->text();
QByteArray sendCmdA;
if (sendCmdS.isEmpty()) return;
if (sendCmdS.contains("0x", Qt::CaseInsensitive)) //Hex input
{
sendCmdS = sendCmdS.mid(2);
sendCmdA = QByteArray::fromHex(sendCmdS.toLatin1());
hex = true;
}
else sendCmdA = sendCmdS.toUtf8(); //Char input
QByteArray termCmdA;
termCmdA.resize(1);
if (ui->radioButton_yaesu->isChecked()) termCmdA[0] = ';';
else if (ui->radioButton_icom->isChecked()) termCmdA[0] = 0xfd;
else if (ui->radioButton_CR->isChecked()) termCmdA[0] = 0x0d;
else if (ui->radioButton_LF->isChecked()) termCmdA[0] = 0x0a;
else termCmdA[0] = '\0';
unsigned char *termCmd = (unsigned char*)termCmdA.data();
sendCmdA.append(termCmdA);
unsigned char *sendCmd = (unsigned char*)sendCmdA.data();
int sendCmdLen = strlen((char*)sendCmd);
unsigned char rcvdCmd[200];
int rcvdCmdLen = sizeof(rcvdCmd);
int retLen = rig_send_raw(my_rig, sendCmd, sendCmdLen, rcvdCmd, rcvdCmdLen, termCmd);
if (retLen > 0)
{
QString rcvdCmdS;
QByteArray rcvdCmdA(QByteArray::fromRawData((char *)rcvdCmd, retLen));
if (hex) rcvdCmdS = rcvdCmdA.toHex();
else rcvdCmdS = rcvdCmdA;
ui->lineEdit_receive->setText(rcvdCmdS);
}
//int rig_send_raw(rig, const unsigned char *send, int send_len, unsigned char *reply, int reply_len, unsigned char *term);
//send contains the raw command data
//send_len is the # of bytes to send
//If reply is NULL no answer is expected
//reply should be as long as need for any reply
//term is the command termination char -- could be semicolon, CR, or 0xfd for Icom rigs
}
void DialogCommand::on_pushButton_close_clicked()
{
this->close();
}

51
dialogcommand.h 100644
Wyświetl plik

@ -0,0 +1,51 @@
/**
** This file is part of the CatRadio project.
** Copyright 2022 Gianfranco Sordetti IZ8EWD <iz8ewd@pianetaradio.it>.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with this program. If not, see <http://www.gnu.org/licenses/>.
**/
#ifndef DIALOGCOMMAND_H
#define DIALOGCOMMAND_H
#include "rig.h"
#include <QDialog>
namespace Ui {
class DialogCommand;
}
class DialogCommand : public QDialog
{
Q_OBJECT
public:
explicit DialogCommand(RIG *rig, QWidget *parent = nullptr);
~DialogCommand();
private slots:
void on_pushButton_close_clicked();
void on_pushButton_send_clicked();
private:
Ui::DialogCommand *ui;
RIG *my_rig;
};
#endif // DIALOGCOMMAND_H

96
dialogcommand.ui 100644
Wyświetl plik

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DialogCommand</class>
<widget class="QDialog" name="DialogCommand">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>140</height>
</rect>
</property>
<property name="windowTitle">
<string>Command</string>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="0,0,0,0">
<item row="0" column="0">
<widget class="QLabel" name="label_commandSend">
<property name="text">
<string>Command Send</string>
</property>
<property name="buddy">
<cstring>lineEdit_commandSend</cstring>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_received">
<property name="text">
<string>Received</string>
</property>
<property name="buddy">
<cstring>lineEdit_receive</cstring>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="pushButton_send">
<property name="text">
<string>Send</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QRadioButton" name="radioButton_LF">
<property name="text">
<string>LF</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<widget class="QLineEdit" name="lineEdit_commandSend"/>
</item>
<item row="3" column="3">
<widget class="QPushButton" name="pushButton_close">
<property name="text">
<string>Close</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QRadioButton" name="radioButton_CR">
<property name="text">
<string>CR</string>
</property>
</widget>
</item>
<item row="2" column="1" colspan="3">
<widget class="QLineEdit" name="lineEdit_receive">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QRadioButton" name="radioButton_icom">
<property name="text">
<string>Icom 0xfd</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QRadioButton" name="radioButton_yaesu">
<property name="text">
<string>Yaesu/Kwd ;</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

Wyświetl plik

@ -1,6 +1,6 @@
/**
** This file is part of the CatRadio project.
** Copyright 2022 Gianfranco Sordetti IZ8EWD <iz8ewd@pianetaradio.it>.
** Copyright 2022-2024 Gianfranco Sordetti IZ8EWD <iz8ewd@pianetaradio.it>.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@ -23,6 +23,8 @@
#include <QSettings>
#include <QFile>
#include <QTextStream>
#include <QSerialPortInfo>
#include <QMessageBox>
#include "rigdata.h"
@ -33,7 +35,7 @@ extern rigConnect rigCom;
QString rigListFile = "rig.lst"; //Text file containing the list of rig supported by hamlib
QFile file(rigListFile);
QFile rigFile(rigListFile);
DialogConfig::DialogConfig(QWidget *parent) :
@ -43,24 +45,47 @@ DialogConfig::DialogConfig(QWidget *parent) :
ui->setupUi(this);
//* rigModel comboBox
if (!file.exists()) //Create file rig.lst if not exists
if (!rigFile.exists()) //Create file rig.lst if not exists
{
file.open(QIODevice::ReadWrite);
rig_load_all_backends(); //Load all backends information
rig_list_foreach(printRigList, NULL); //Create the rig list
createRigFile();
}
else file.open(QIODevice::ReadOnly); //Open file rig.lst and populate the combobox
file.seek(0);
ui->comboBox_rigModel->clear();
while(!file.atEnd())
else rigFile.open(QIODevice::ReadOnly); //Open file rig.lst and populate the combobox
rigFile.seek(0);
QString versionFile = rigFile.readLine(); //Update rigFile if old version
if (versionFile.trimmed() != hamlib_version)
{
QString line = file.readLine();
rigFile.remove();
createRigFile();
rigFile.seek(0);
rigFile.readLine();
}
ui->comboBox_rigModel->clear();
ui->comboBox_rigModel->addItem("");
while(!rigFile.atEnd())
{
QString line = rigFile.readLine();
ui->comboBox_rigModel->addItem(line.trimmed());
}
file.close();
rigFile.close();
//* serialSpeed comboBox
//* COM port
ui->comboBox_comPort->clear();
ui->comboBox_comPort->addItem("");
foreach (const QSerialPortInfo &comPort, QSerialPortInfo::availablePorts()) //search available COM port
{
#ifdef Q_OS_WIN
ui->comboBox_comPort->addItem(comPort.portName());
#endif
#ifdef Q_OS_LINUX
ui->comboBox_comPort->addItem("/dev/"+comPort.portName());
#endif
}
//* serialSpeed
ui->comboBox_serialSpeed->clear();
ui->comboBox_serialSpeed->addItem("");
ui->comboBox_serialSpeed->addItem("4800");
ui->comboBox_serialSpeed->addItem("9600");
ui->comboBox_serialSpeed->addItem("19200");
@ -70,11 +95,22 @@ DialogConfig::DialogConfig(QWidget *parent) :
//* Update values in the GUI
ui->comboBox_rigModel->setCurrentIndex(ui->comboBox_rigModel->findText(QString::number(rigCom.rigModel),Qt::MatchStartsWith));
ui->lineEdit_RigPath->setText(rigCom.rigPort);
ui->comboBox_serialSpeed->setCurrentText(QString::number(rigCom.serialSpeed));
if (rigCom.civAddr) ui->lineEdit_civAddr->setText(QString::number(rigCom.civAddr,16));
if (rigCom.netRigctl)
{
ui->checkBox_netRigctl->setChecked(rigCom.netRigctl);
ui->lineEdit_ip->setText(rigCom.rigPort);
}
else
{
ui->comboBox_comPort->setCurrentText(rigCom.rigPort);
ui->comboBox_serialSpeed->setCurrentText(QString::number(rigCom.serialSpeed));
if (rigCom.civAddr) ui->lineEdit_civAddr->setText(QString::number(rigCom.civAddr,16));
setDialogSerialConfig(rigCom.serialDataBits, rigCom.serialParity, rigCom.serialStopBits, rigCom.serialHandshake);
}
ui->spinBox_RefreshRate->setValue(rigCom.rigRefresh);
ui->checkBox_fullPoll->setChecked(rigCom.fullPoll);
ui->checkBox_autoConnect->setChecked(rigCom.autoConnect);
ui->checkBox_autoPowerOn->setChecked(rigCom.autoPowerOn);
}
DialogConfig::~DialogConfig()
@ -82,36 +118,228 @@ DialogConfig::~DialogConfig()
delete ui;
}
int DialogConfig::findRigModel(QString rigModel)
{
QRegularExpression regexp("[0-9]+");
QRegularExpressionMatch rigNumber = regexp.match(rigModel);
return rigNumber.captured(0).toInt();
}
void DialogConfig::setDialogSerialConfig(int dataBits, int parity, int stopBits, int handshake)
{
switch (dataBits)
{
case 7: ui->radioButton_dataBits7->setChecked(true); break;
case 8: ui->radioButton_dataBits8->setChecked(true); break;
}
switch (parity)
{
case 0: ui->radioButton_parityNone->setChecked(true); break;
case 1: ui->radioButton_parityOdd->setChecked(true); break;
case 2: ui->radioButton_parityEven->setChecked(true); break;
}
switch (stopBits)
{
case 1: ui->radioButton_stopBits1->setChecked(true); break;
case 2: ui->radioButton_stopBits2->setChecked(true); break;
}
switch (handshake)
{
case 0: ui->radioButton_handshakeNone->setChecked(true); break;
case 1: ui->radioButton_handshakeXonXoff->setChecked(true); break;
case 2: ui->radioButton_handshakeHardware->setChecked(true); break;
}
}
void DialogConfig::setRigSerialConfigFromDialog()
{
if (ui->radioButton_dataBits7->isChecked()) rigCom.serialDataBits = 7;
else rigCom.serialDataBits = 8;
if (ui->radioButton_parityOdd->isChecked()) rigCom.serialParity = RIG_PARITY_ODD;
else if (ui->radioButton_parityEven->isChecked()) rigCom.serialParity = RIG_PARITY_EVEN;
else rigCom.serialParity = RIG_PARITY_NONE;
if (ui->radioButton_stopBits1->isChecked()) rigCom.serialStopBits = 1;
else rigCom.serialStopBits = 2;
if (ui->radioButton_handshakeXonXoff->isChecked()) rigCom.serialHandshake = RIG_HANDSHAKE_XONXOFF;
else if (ui->radioButton_handshakeHardware->isChecked()) rigCom.serialHandshake = RIG_HANDSHAKE_HARDWARE;
else rigCom.serialHandshake = RIG_HANDSHAKE_NONE;
}
void DialogConfig::on_buttonBox_accepted()
{
bool civAddrConv;
//* Read settings from GUI
QString rigModel = ui->comboBox_rigModel->currentText();
QRegularExpression regexp("[0-9]+");
QRegularExpressionMatch rigNumber = regexp.match(rigModel);
rigCom.rigModel = rigNumber.captured(0).toInt();
if (ui->comboBox_rigModel->currentText() == "") //No backend selected
{
QMessageBox msgBox; //Show error MessageBox
msgBox.setWindowTitle("Warning");
msgBox.setText("Rig model not selected");
msgBox.setIcon(QMessageBox::Warning);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
}
else
{
QString rigModel = ui->comboBox_rigModel->currentText();
//QRegularExpression regexp("[0-9]+");
//QRegularExpressionMatch rigNumber = regexp.match(rigModel);
//rigCom.rigModel = rigNumber.captured(0).toInt();
rigCom.rigModel = findRigModel(rigModel);
if (ui->checkBox_netRigctl->isChecked()) //TCP port
{
rigCom.netRigctl = true;
rigCom.rigPort = ui->lineEdit_ip->text();
if (rigCom.rigPort == "")
{
QMessageBox msgBox; //Show error MessageBox
msgBox.setWindowTitle("Warning");
msgBox.setText(rigModel + "\nIP address not valid");
msgBox.setIcon(QMessageBox::Warning);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
}
}
else //COM port
{
rigCom.netRigctl = false;
rigCom.rigPort = ui->comboBox_comPort->currentText();
//rigCom.serialSpeed = ui->comboBox_serialSpeed->currentText().toInt();
//rigCom.civAddr = ui->lineEdit_civAddr->text().toInt(&civAddrConv,16);
//setRigSerialConfigFromDialog();
if (rigCom.rigPort == "" && rigCom.rigModel != 1 && rigCom.rigModel != 6)
{
QMessageBox msgBox; //Show error MessageBox
msgBox.setWindowTitle("Warning");
msgBox.setText(rigModel + "\nCOM port not valid");
msgBox.setIcon(QMessageBox::Warning);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
}
}
rigCom.serialSpeed = ui->comboBox_serialSpeed->currentText().toInt();
rigCom.civAddr = ui->lineEdit_civAddr->text().toInt(&civAddrConv,16);
setRigSerialConfigFromDialog();
}
rigCom.rigPort = ui->lineEdit_RigPath->text();
rigCom.serialSpeed = ui->comboBox_serialSpeed->currentText().toInt();
rigCom.civAddr = ui->lineEdit_civAddr->text().toInt(&civAddrConv,16);
rigCom.rigRefresh = ui->spinBox_RefreshRate->value();
rigCom.fullPoll = ui->checkBox_fullPoll->isChecked();
rigCom.autoConnect = ui->checkBox_autoConnect->isChecked();
rigCom.autoPowerOn = ui->checkBox_autoPowerOn->isChecked();
//* Save settings in config.ini
QSettings configFile(QString("config.ini"), QSettings::IniFormat);
//* Save settings in catradio.ini
QSettings configFile(QString("catradio.ini"), QSettings::IniFormat);
configFile.setValue("rigModel", rigCom.rigModel);
configFile.setValue("rigPort", ui->lineEdit_RigPath->text());
configFile.setValue("rigPort", rigCom.rigPort);
configFile.setValue("serialSpeed", ui->comboBox_serialSpeed->currentText());
configFile.setValue("civAddress", ui->lineEdit_civAddr->text().toInt(&civAddrConv,16));
configFile.setValue("serialDataBits", rigCom.serialDataBits);
configFile.setValue("serialParity", rigCom.serialParity);
configFile.setValue("serialStopBits", rigCom.serialStopBits);
configFile.setValue("serialHandshake", rigCom.serialHandshake);
configFile.setValue("netRigctl", ui->checkBox_netRigctl->isChecked());
configFile.setValue("rigRefresh", ui->spinBox_RefreshRate->value());
configFile.setValue("fullPolling", ui->checkBox_fullPoll->isChecked());
configFile.setValue("autoConnect", ui->checkBox_autoConnect->isChecked());
configFile.setValue("autoPowerOn", ui->checkBox_autoPowerOn->isChecked());
}
int printRigList(const struct rig_caps *rigCaps, void *data) //Load rig list from hamlib and save into file rig.lst
#ifdef RIGCAPS_NOT_CONST //rig_caps is no longer constant starting from hamlib v.4.6
int printRigList(struct rig_caps *rigCaps, void *data) //Load rig list from hamlib and save into file rig.lst
{
if (data) return 0;
QTextStream stream(&file);
QTextStream stream(&rigFile);
stream << rigCaps->rig_model << " " << rigCaps->mfg_name << " " << rigCaps->model_name << "\n";
return 1;
}
#else
int printRigList(const struct rig_caps *rigCaps, void *data)
{
if (data) return 0;
QTextStream stream(&rigFile);
stream << rigCaps->rig_model << " " << rigCaps->mfg_name << " " << rigCaps->model_name << "\n";
return 1;
}
#endif
bool createRigFile()
{
bool ret = rigFile.open(QIODevice::ReadWrite);
rigFile.write(hamlib_version); //Write current Hamlib version in the file header
rigFile.write("\n");
rig_load_all_backends(); //Load all backends information
rig_list_foreach(printRigList, NULL); //Create and write the rig list
return ret;
}
void DialogConfig::on_checkBox_netRigctl_toggled(bool checked)
{
if (checked) //TCP port
{
//ui->comboBox_comPort->setCurrentText(""); //clear COM port
}
else //COM port
{
//ui->lineEdit_ip->setText(""); //clear IP address
}
}
void DialogConfig::on_comboBox_rigModel_currentIndexChanged(int index)
{
int currentRig = 0;
RIG *rig;
if (index)
{
QString rigModel = ui->comboBox_rigModel->currentText();
currentRig = findRigModel(rigModel);
}
if (currentRig)
{
rig = rig_init(currentRig);
if (rig->caps->port_type == RIG_PORT_SERIAL)
{
//ui->checkBox_netRigctl->setChecked(false);
ui->tabWidget_Config->setCurrentIndex(0);
setDialogSerialConfig(rig->caps->serial_data_bits, rig->caps->serial_parity, rig->caps->serial_stop_bits, rig->caps->serial_handshake);
//qDebug() << rig->caps->serial_data_bits << rig->caps->serial_parity << rig->caps->serial_stop_bits << rig->caps->serial_handshake;
}
else if (rig->caps->port_type == RIG_PORT_NETWORK)
{
ui->checkBox_netRigctl->setChecked(true);
ui->tabWidget_Config->setCurrentIndex(1);
}
else if (rig->caps->port_type == RIG_PORT_NONE)
{
ui->checkBox_netRigctl->setChecked(false);
ui->tabWidget_Config->setCurrentIndex(0);
ui->comboBox_comPort->clear();
}
}
//if (index == 2 || index == 3 || index == 4)
//{
// ui->checkBox_netRigctl->setChecked(true);
// ui->tabWidget_Config->setCurrentIndex(1);
//}
}
void DialogConfig::on_comboBox_comPort_currentIndexChanged(int index)
{
if (index) ui->checkBox_netRigctl->setChecked(false); //uncheck TCP
}

Wyświetl plik

@ -37,10 +37,21 @@ public:
private slots:
void on_buttonBox_accepted();
void on_checkBox_netRigctl_toggled(bool checked);
void on_comboBox_rigModel_currentIndexChanged(int index);
void on_comboBox_comPort_currentIndexChanged(int index);
private:
Ui::DialogConfig *ui;
int findRigModel(QString rigModel); //Find hamlib rig model from the rig selected in the comboBox_rigModel
void setDialogSerialConfig(int dataBits, int parity, int stopBits, int handshake); //Set the serial port configuration on the dialog
void setRigSerialConfigFromDialog(); //Set the rigConf serial config from dialog serial settings
};
int printRigList(const struct rig_caps *rigCaps, void *data);
int printRigList(const struct rig_caps *rigCaps, void *data); //Retrives rig list from Hamlib and write to file
bool createRigFile(); //Create the rig list file
#endif // DIALOGCONFIG_H

Wyświetl plik

@ -6,138 +6,357 @@
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
<width>390</width>
<height>700</height>
</rect>
</property>
<property name="windowTitle">
<string>Config</string>
<string>Radio Config</string>
</property>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_RigModel">
<property name="text">
<string>Model</string>
</property>
</widget>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_3" stretch="0,1">
<item>
<widget class="QLabel" name="label_RigModel">
<property name="text">
<string>Model</string>
</property>
<property name="buddy">
<cstring>comboBox_rigModel</cstring>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox_rigModel"/>
</item>
</layout>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboBox_rigModel"/>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_RigPath">
<property name="text">
<string>Path</string>
<item>
<widget class="QTabWidget" name="tabWidget_Config">
<property name="currentIndex">
<number>0</number>
</property>
<property name="buddy">
<cstring>lineEdit_RigPath</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="lineEdit_RigPath">
<property name="toolTip">
<string>e.g. COM2 or /dev/ttyUSB1</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_serialSpeed">
<property name="text">
<string>Speed</string>
</property>
<property name="buddy">
<cstring>comboBox_serialSpeed</cstring>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboBox_serialSpeed"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_RefreshRate">
<property name="text">
<string>Refresh Rate</string>
</property>
<property name="buddy">
<cstring>spinBox_RefreshRate</cstring>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QSpinBox" name="spinBox_RefreshRate">
<property name="minimum">
<number>50</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="singleStep">
<number>50</number>
</property>
<property name="value">
<number>200</number>
</property>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Options</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<property name="leftMargin">
<number>11</number>
</property>
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout" stretch="0,1,1">
<property name="spacing">
<number>7</number>
</property>
<widget class="QWidget" name="tab_com">
<attribute name="title">
<string>COM</string>
</attribute>
<layout class="QFormLayout" name="formLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_comPort">
<property name="text">
<string>COM Port</string>
</property>
<property name="buddy">
<cstring>comboBox_comPort</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboBox_comPort">
<property name="editable">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_serialSpeed">
<property name="text">
<string>Speed</string>
</property>
<property name="buddy">
<cstring>comboBox_serialSpeed</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="comboBox_serialSpeed"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_civAddr">
<property name="cursor">
<cursorShape>ArrowCursor</cursorShape>
</property>
<property name="text">
<string>Icom CI-V</string>
</property>
<property name="buddy">
<cstring>lineEdit_civAddr</cstring>
</property>
</widget>
</item>
<item row="2" column="1">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLineEdit" name="lineEdit_civAddr">
<property name="toolTip">
<string>hex, Icom only</string>
</property>
<property name="statusTip">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>h</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="3" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_serialDataBits">
<property name="title">
<string>Data Bits</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QLabel" name="label_civAddr">
<property name="cursor">
<cursorShape>ArrowCursor</cursorShape>
</property>
<widget class="QRadioButton" name="radioButton_dataBits7">
<property name="text">
<string>Icom CI-V</string>
<string>7</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineEdit_civAddr">
<property name="toolTip">
<string>hex, Icom only</string>
</property>
<property name="statusTip">
<string/>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<widget class="QRadioButton" name="radioButton_dataBits8">
<property name="text">
<string>h</string>
<string>8</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</widget>
</item>
<item row="5" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_serialStopBits">
<property name="title">
<string>Stop Bits</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QRadioButton" name="radioButton_stopBits1">
<property name="text">
<string>1</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_stopBits2">
<property name="text">
<string>2</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="6" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_serialHandshake">
<property name="title">
<string>Handshake</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="1" column="0">
<widget class="QRadioButton" name="radioButton_handshakeXonXoff">
<property name="text">
<string>XON/XOFF</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QRadioButton" name="radioButton_handshakeHardware">
<property name="text">
<string>Hardware</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QRadioButton" name="radioButton_handshakeNone">
<property name="text">
<string>None</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="QGroupBox" name="groupBox_serialParity">
<property name="title">
<string>Parity</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="2" column="0">
<widget class="QRadioButton" name="radioButton_parityOdd">
<property name="text">
<string>Odd</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QRadioButton" name="radioButton_parityEven">
<property name="text">
<string>Even</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QRadioButton" name="radioButton_parityNone">
<property name="text">
<string>None</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="tab_tcp">
<attribute name="title">
<string>TCP</string>
</attribute>
<layout class="QFormLayout" name="formLayout_2">
<item row="0" column="0" colspan="2">
<widget class="QCheckBox" name="checkBox_netRigctl">
<property name="text">
<string>NET Rigctl</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_ip">
<property name="text">
<string>IP address</string>
</property>
<property name="buddy">
<cstring>lineEdit_ip</cstring>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="lineEdit_ip">
<property name="toolTip">
<string>rigctld ip:port</string>
</property>
<property name="text">
<string>127.0.0.1:4532</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Options</string>
</property>
<layout class="QFormLayout" name="formLayout_3">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QCheckBox" name="checkBox_fullPoll">
<widget class="QLabel" name="label_RefreshRate">
<property name="text">
<string>Full polling</string>
<string>Refresh Rate</string>
</property>
<property name="buddy">
<cstring>spinBox_RefreshRate</cstring>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_RefreshRate">
<property name="minimum">
<number>50</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="singleStep">
<number>50</number>
</property>
<property name="value">
<number>200</number>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="checkBox_fullPoll">
<property name="text">
<string>Full polling</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="checkBox_autoConnect">
<property name="toolTip">
<string>Auto connect on startup</string>
</property>
<property name="text">
<string>Auto connect</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="checkBox_autoPowerOn">
<property name="toolTip">
<string>Auto power-on on startup</string>
</property>
<property name="text">
<string>Auto power ON</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="6" column="0" colspan="2">
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@ -150,9 +369,27 @@
</layout>
</widget>
<tabstops>
<tabstop>lineEdit_RigPath</tabstop>
<tabstop>comboBox_rigModel</tabstop>
<tabstop>tabWidget_Config</tabstop>
<tabstop>comboBox_comPort</tabstop>
<tabstop>comboBox_serialSpeed</tabstop>
<tabstop>lineEdit_civAddr</tabstop>
<tabstop>radioButton_dataBits7</tabstop>
<tabstop>radioButton_dataBits8</tabstop>
<tabstop>radioButton_parityNone</tabstop>
<tabstop>radioButton_parityOdd</tabstop>
<tabstop>radioButton_parityEven</tabstop>
<tabstop>radioButton_stopBits1</tabstop>
<tabstop>radioButton_stopBits2</tabstop>
<tabstop>radioButton_handshakeNone</tabstop>
<tabstop>radioButton_handshakeXonXoff</tabstop>
<tabstop>radioButton_handshakeHardware</tabstop>
<tabstop>spinBox_RefreshRate</tabstop>
<tabstop>checkBox_fullPoll</tabstop>
<tabstop>checkBox_autoConnect</tabstop>
<tabstop>checkBox_autoPowerOn</tabstop>
<tabstop>checkBox_netRigctl</tabstop>
<tabstop>lineEdit_ip</tabstop>
</tabstops>
<resources/>
<connections>
@ -163,8 +400,8 @@
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
<x>270</x>
<y>688</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
@ -179,8 +416,8 @@
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
<x>338</x>
<y>688</y>
</hint>
<hint type="destinationlabel">
<x>286</x>

131
dialogradioinfo.cpp 100644
Wyświetl plik

@ -0,0 +1,131 @@
#include "dialogradioinfo.h"
#include "ui_dialogradioinfo.h"
#include "rig.h"
#include <QString>
DialogRadioInfo::DialogRadioInfo(RIG *rig, QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogRadioInfo)
{
ui->setupUi(this);
my_rig = rig;
QString text;
text = "Model: ";
text.append(QString::number(my_rig->caps->rig_model));
ui->plainTextEdit_RadioInfo->appendPlainText(text);
text = "Model name: ";
text.append(my_rig->caps->model_name);
ui->plainTextEdit_RadioInfo->appendPlainText(text);
text = "Mfg name: ";
text.append(my_rig->caps->mfg_name);
ui->plainTextEdit_RadioInfo->appendPlainText(text);
text = "Backend version: ";
text.append(my_rig->caps->version);
ui->plainTextEdit_RadioInfo->appendPlainText(text);
text = "Backend status: ";
text.append(rig_strstatus(my_rig->caps->status));
ui->plainTextEdit_RadioInfo->appendPlainText(text);
text = "Rig type: ";
switch (my_rig->caps->rig_type)
{
case RIG_TYPE_OTHER:
text.append("Other");
break;
case RIG_FLAG_RECEIVER:
text.append("Receiver");
break;
case RIG_FLAG_TRANSMITTER:
text.append("Transmitter");
break;
case RIG_FLAG_SCANNER:
text.append("Scanner");
break;
case RIG_FLAG_MOBILE:
text.append("Mobile");
break;
case RIG_FLAG_HANDHELD:
text.append("Handheld");
break;
case RIG_FLAG_COMPUTER:
text.append("Computer");
break;
case RIG_FLAG_TRANSCEIVER:
text.append("Transceiver");
break;
case RIG_FLAG_TRUNKING:
text.append("Trunking scanner");
break;
case RIG_FLAG_APRS:
text.append("APRS");
break;
case RIG_FLAG_TNC:
text.append("TNC");
break;
case RIG_FLAG_DXCLUSTER:
text.append("DxCluster");
break;
case RIG_FLAG_TUNER:
text.append("Tuner");
break;
default:
text.append("Unknown");
}
ui->plainTextEdit_RadioInfo->appendPlainText(text);
text = "Port type: ";
switch (my_rig->caps->port_type)
{
case RIG_PORT_SERIAL:
text.append("RS-232");
break;
case RIG_PORT_PARALLEL:
text.append("Parallel");
break;
case RIG_PORT_DEVICE:
text.append("Device driver");
break;
case RIG_PORT_USB:
text.append("USB");
break;
case RIG_PORT_NETWORK:
text.append("Network link");
break;
case RIG_PORT_UDP_NETWORK:
text.append("UDP Network link");
break;
case RIG_PORT_NONE:
text.append("None");
break;
default:
text.append("Unknown");
}
ui->plainTextEdit_RadioInfo->appendPlainText(text);
if (my_rig->caps->port_type == RIG_PORT_SERIAL)
{
text = QString("Serial speed: %1...%2 bauds, %3%4%5 %6")
.arg(my_rig->caps->serial_rate_min)
.arg(my_rig->caps->serial_rate_max)
.arg(my_rig->caps->serial_data_bits)
.arg(my_rig->caps->serial_parity == RIG_PARITY_NONE ? 'N' :
(my_rig->caps->serial_parity == RIG_PARITY_ODD ? 'O' :
(my_rig->caps->serial_parity == RIG_PARITY_EVEN ? 'E' :
(my_rig->caps->serial_parity == RIG_PARITY_MARK ? 'M' : 'S'))))
.arg(my_rig->caps->serial_stop_bits)
.arg(my_rig->caps->serial_handshake == RIG_HANDSHAKE_NONE ? "" :
(my_rig->caps->serial_handshake == RIG_HANDSHAKE_XONXOFF ? "XONXOFF" : "CTS/RTS"));
ui->plainTextEdit_RadioInfo->appendPlainText(text);
}
}
DialogRadioInfo::~DialogRadioInfo()
{
delete ui;
}

26
dialogradioinfo.h 100644
Wyświetl plik

@ -0,0 +1,26 @@
#ifndef DIALOGRADIOINFO_H
#define DIALOGRADIOINFO_H
#include <QDialog>
#include "rig.h"
namespace Ui {
class DialogRadioInfo;
}
class DialogRadioInfo : public QDialog
{
Q_OBJECT
public:
explicit DialogRadioInfo(RIG *rig, QWidget *parent = nullptr);
~DialogRadioInfo();
private:
Ui::DialogRadioInfo *ui;
RIG *my_rig;
};
#endif // DIALOGRADIOINFO_H

28
dialogradioinfo.ui 100644
Wyświetl plik

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DialogRadioInfo</class>
<widget class="QDialog" name="DialogRadioInfo">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Radio Info</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QPlainTextEdit" name="plainTextEdit_RadioInfo">
<property name="readOnly">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

Wyświetl plik

@ -5,6 +5,7 @@
#include <QSettings>
#include <QFile>
#include <QMessageBox>
extern guiConfig guiConf;
@ -17,6 +18,9 @@ DialogSetup::DialogSetup(QWidget *parent) :
ui->setupUi(this);
if (guiConf.vfoDisplayMode) ui->radioButton_vfoDispMode_UD->setChecked(true);
if (guiConf.darkTheme) ui->radioButton_themeDark->setChecked(true);
if (guiConf.peakHold) ui->checkBox_peakHold->setChecked(true);
if (guiConf.debugMode) ui->checkBox_debug->setChecked(true);
}
DialogSetup::~DialogSetup()
@ -24,20 +28,27 @@ DialogSetup::~DialogSetup()
delete ui;
}
void DialogSetup::on_radioButton_vfoDispMode_LR_toggled(bool checked)
{
if (checked) guiConf.vfoDisplayMode=0;
}
void DialogSetup::on_radioButton_vfoDispMode_UD_toggled(bool checked)
{
if (checked) guiConf.vfoDisplayMode=1;
}
void DialogSetup::on_buttonBox_accepted()
{
//* Save settings in config.ini
QSettings configFile(QString("config.ini"), QSettings::IniFormat);
configFile.setValue("vfoDisplayMode", guiConf.vfoDisplayMode);
}
if ((guiConf.darkTheme != ui->radioButton_themeDark->isChecked()))
{
QMessageBox msgBox;
msgBox.setWindowTitle("Theme");
msgBox.setText("Please, restart CatRadio to make effective the theme.");
msgBox.setIcon(QMessageBox::Information);
msgBox.setStandardButtons(QMessageBox::Ok);
msgBox.exec();
}
guiConf.vfoDisplayMode = ui->radioButton_vfoDispMode_UD->isChecked();
guiConf.darkTheme = ui->radioButton_themeDark->isChecked();
guiConf.peakHold = ui->checkBox_peakHold->isChecked();
guiConf.debugMode = ui->checkBox_debug->isChecked();
//* Save settings in catradio.ini
QSettings configFile(QString("catradio.ini"), QSettings::IniFormat);
configFile.setValue("vfoDisplayMode", guiConf.vfoDisplayMode);
configFile.setValue("darkTheme", guiConf.darkTheme);
configFile.setValue("peakHold", guiConf.peakHold);
configFile.setValue("debugMode", guiConf.debugMode);
}

Wyświetl plik

@ -16,12 +16,6 @@ public:
~DialogSetup();
private slots:
void on_radioButton_vfoDispMode_LR_toggled(bool checked);
void on_radioButton_vfoDispMode_UD_toggled(bool checked);
void on_buttonBox_accepted();
private:

Wyświetl plik

@ -14,14 +14,65 @@
<string>Setup</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="2" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<item row="1" column="0">
<widget class="QGroupBox" name="groupBox_theme">
<property name="title">
<string>Theme</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QRadioButton" name="radioButton_themeDefault">
<property name="text">
<string>Default</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="radioButton_themeDark">
<property name="text">
<string>Dark</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Vertical</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="0">
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QCheckBox" name="checkBox_peakHold">
<property name="text">
<string>Meter Peak hold</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="0" column="0">
@ -50,18 +101,22 @@
</layout>
</widget>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<item row="5" column="0">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</spacer>
</widget>
</item>
<item row="4" column="0">
<widget class="QCheckBox" name="checkBox_debug">
<property name="text">
<string>Debug mode (developers only)</string>
</property>
</widget>
</item>
</layout>
</widget>

Wyświetl plik

@ -20,3 +20,4 @@
#include "guidata.h"
guiConfig guiConf;
guiCommand guiCmd;

Wyświetl plik

@ -5,6 +5,17 @@
typedef struct {
int vfoDisplayMode; //0: use Left/Right mouse button, 1: click digit up or down
int vfoDisplayMode; //0: use Left/Right mouse button, 1: click digit Up or Down
bool darkTheme; //flag for Dark theme
bool peakHold; //meters peak hold
bool debugMode;
} guiConfig;
typedef struct {
int bwidthList;
int antList;
int rangeList;
int tabList;
int toneList;
} guiCommand;

57
hamlib/LICENSE.txt 100644
Wyświetl plik

@ -0,0 +1,57 @@
Hamlib - Ham Radio Control Libraries
(C) 2010 Lockless Inc. for winpthreads.h
Copyright (C) 2000,2001 Frank Singleton
Copyright (C) 2000,2001 Stephane Fillod
Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,
2010,2011,2012
The Hamlib Group
See the included README.md file for more information on Hamlib and the Hamlib
Project or visit http://www.hamlib.org for documentation and links to the
source code of Hamlib.
The 'AUTHORS' file lists contributors known as the The Hamlib Group.
The frontend library source code files and associated backend library
source code files are licensed and released under the Lesser GNU Public
License (LGPL):
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301 USA
The included file 'COPYING.LIB' is a copy of the GNU Lesser General
Public License.
Various other supplied program source files and example source files are
licensed and released under the GNU Public License (GPL):
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
The included file 'COPYING' is a copy of the GNU General Public License.

Wyświetl plik

@ -18,6 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#ifndef _AMPLIFIER_H
#define _AMPLIFIER_H 1
@ -146,7 +147,8 @@ enum amp_level_e
AMP_LEVEL_PWR_FWD = (1 << 4), /*!< \c Power reading forward. */
AMP_LEVEL_PWR_REFLECTED = (1 << 5), /*!< \c Power reading reverse. */
AMP_LEVEL_PWR_PEAK = (1 << 6), /*!< \c Power reading peak. */
AMP_LEVEL_FAULT = (1 << 7) /*!< \c Fault code. */
AMP_LEVEL_FAULT = (1 << 7), /*!< \c Fault code. */
AMP_LEVEL_PWR = (1 << 8), /*!< \c Power setting. */
};
//! @endcond
@ -231,8 +233,9 @@ struct amp_caps
int (*set_freq)(AMP *amp, freq_t val); /*!< Pointer to backend implementation of ::amp_set_freq(). */
int (*get_freq)(AMP *amp, freq_t *val); /*!< Pointer to backend implementation of ::amp_get_freq(). */
int (*set_conf)(AMP *amp, token_t token, const char *val); /*!< Pointer to backend implementation of ::amp_set_conf(). */
int (*get_conf)(AMP *amp, token_t token, char *val); /*!< Pointer to backend implementation of ::amp_get_conf(). */
int (*set_conf)(AMP *amp, hamlib_token_t token, const char *val); /*!< Pointer to backend implementation of ::amp_set_conf(). */
int (*get_conf2)(AMP *amp, hamlib_token_t token, char *val, int val_len); /*!< Pointer to backend implementation of ::amp_get_conf(). */
int (*get_conf)(AMP *amp, hamlib_token_t token, char *val); /*!< Pointer to backend implementation of ::amp_get_conf(). */
/*
* General API commands, from most primitive to least.. :()
@ -241,7 +244,9 @@ struct amp_caps
int (*reset)(AMP *amp, amp_reset_t reset); /*!< Pointer to backend implementation of ::amp_reset(). */
int (*get_level)(AMP *amp, setting_t level, value_t *val); /*!< Pointer to backend implementation of ::amp_get_level(). */
int (*get_ext_level)(AMP *amp, token_t level, value_t *val); /*!< Pointer to backend implementation of ::amp_get_ext_level(). */
int (*set_level)(AMP *amp, setting_t level, value_t val); /*!< Pointer to backend implementation of ::amp_get_level(). */
int (*get_ext_level)(AMP *amp, hamlib_token_t level, value_t *val); /*!< Pointer to backend implementation of ::amp_get_ext_level(). */
int (*set_ext_level)(AMP *amp, hamlib_token_t level, value_t val); /*!< Pointer to backend implementation of ::amp_set_ext_level(). */
int (*set_powerstat)(AMP *amp, powerstat_t status); /*!< Pointer to backend implementation of ::amp_set_powerstat(). */
int (*get_powerstat)(AMP *amp, powerstat_t *status); /*!< Pointer to backend implementation of ::amp_get_powerstat(). */
@ -280,16 +285,18 @@ struct amp_state
/*
* non overridable fields, internal use
*/
hamlib_port_t ampport; /*!< Amplifier port (internal use). */
hamlib_port_t_deprecated ampport_deprecated; /*!< Amplifier port (internal use). Deprecated */
int comm_state; /*!< Comm port state, opened/closed. */
rig_ptr_t priv; /*!< Pointer to private amplifier state data. */
rig_ptr_t obj; /*!< Internal use by hamlib++ for event handling. */
setting_t has_get_level; /*!< List of get levels. */
setting_t has_set_level; /*!< List of set levels. */
gran_t level_gran[RIG_SETTING_MAX]; /*!< Level granularity. */
gran_t parm_gran[RIG_SETTING_MAX]; /*!< Parameter granularity. */
hamlib_port_t ampport; /*!< Amplifier port (internal use). */
};
@ -329,11 +336,11 @@ amp_cleanup HAMLIB_PARAMS((AMP *amp));
extern HAMLIB_EXPORT(int)
amp_set_conf HAMLIB_PARAMS((AMP *amp,
token_t token,
hamlib_token_t token,
const char *val));
extern HAMLIB_EXPORT(int)
amp_get_conf HAMLIB_PARAMS((AMP *amp,
token_t token,
hamlib_token_t token,
char *val));
extern HAMLIB_EXPORT(int)
amp_set_powerstat HAMLIB_PARAMS((AMP *amp,
@ -364,6 +371,10 @@ amp_get_info HAMLIB_PARAMS((AMP *amp));
extern HAMLIB_EXPORT(int)
amp_get_level HAMLIB_PARAMS((AMP *amp, setting_t level, value_t *val));
extern HAMLIB_EXPORT(int)
amp_set_level HAMLIB_PARAMS((AMP *amp, setting_t level, value_t val));
extern HAMLIB_EXPORT(int)
amp_register HAMLIB_PARAMS((const struct amp_caps *caps));
@ -397,7 +408,7 @@ extern HAMLIB_EXPORT(const struct confparams *)
amp_confparam_lookup HAMLIB_PARAMS((AMP *amp,
const char *name));
extern HAMLIB_EXPORT(token_t)
extern HAMLIB_EXPORT(hamlib_token_t)
amp_token_lookup HAMLIB_PARAMS((AMP *amp,
const char *name));
@ -408,15 +419,24 @@ extern HAMLIB_EXPORT(setting_t)
amp_has_get_level HAMLIB_PARAMS((AMP *amp,
setting_t level));
extern HAMLIB_EXPORT(setting_t)
amp_has_set_level HAMLIB_PARAMS((AMP *amp,
setting_t level));
extern HAMLIB_EXPORT(const struct confparams *)
amp_ext_lookup HAMLIB_PARAMS((AMP *amp,
const char *name));
extern HAMLIB_EXPORT(int)
amp_get_ext_level HAMLIB_PARAMS((AMP *amp,
token_t token,
hamlib_token_t token,
value_t *val));
extern HAMLIB_EXPORT(int)
amp_set_ext_level HAMLIB_PARAMS((AMP *amp,
hamlib_token_t token,
value_t val));
extern HAMLIB_EXPORT(const char *) amp_strlevel(setting_t);
extern HAMLIB_EXPORT(const struct confparams *)
@ -426,6 +446,8 @@ rig_ext_lookup HAMLIB_PARAMS((RIG *rig,
extern HAMLIB_EXPORT(setting_t) amp_parse_level(const char *s);
extern HAMLIB_EXPORT(const char *) amp_strlevel(setting_t);
extern HAMLIB_EXPORT(void *) amp_data_pointer(AMP *amp, rig_ptrx_t idx);
//! @endcond

Wyświetl plik

@ -107,6 +107,15 @@
#define AMP_MODEL_ELECRAFT_KPA1500 AMP_MAKE_MODEL(AMP_ELECRAFT, 1)
//#define AMP_MODEL_ELECRAFT_KPA500 AMP_MAKE_MODEL(AMP_ELECRAFT, 2)
#define AMP_GEMINI 3
#define AMP_BACKEND_GEMINI "gemini"
#define AMP_MODEL_GEMINI_DX1200 AMP_MAKE_MODEL(AMP_GEMINI, 1)
#define AMP_EXPERT 4
#define AMP_BACKEND_EXPERT "expert"
#define AMP_MODEL_EXPERT_FA AMP_MAKE_MODEL(AMP_EXPERT, 1)
/**
* \brief Convenience type definition for an amplifier model.
*

569
hamlib/config.h 100644
Wyświetl plik

@ -0,0 +1,569 @@
/* include/hamlib/config.h. Generated from config.h.in by configure. */
/* include/hamlib/config.h.in. Generated from configure.ac by autoheader. */
/* Frontend ABI age */
#define ABI_AGE 0
/* Frontend ABI revision */
#define ABI_REVISION 6
/* Frontend ABI version */
#define ABI_VERSION 4
/* Frontend Major version */
#define ABI_VERSION_MAJOR 4
/* Frontend Minor version */
#define ABI_VERSION_MINOR 6
/* Frontend Patch version */
#define ABI_VERSION_PATCH 0
/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
systems. This function is required for `alloca.c' support on those systems.
*/
/* #undef CRAY_STACKSEG_END */
/* Define to 1 if using `alloca.c'. */
/* #undef C_ALLOCA */
/* Define to 1 if you have `alloca', as a function or macro. */
#define HAVE_ALLOCA 1
/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
*/
/* #undef HAVE_ALLOCA_H */
/* Define to 1 if you have the <arpa/inet.h> header file. */
/* #undef HAVE_ARPA_INET_H */
/* Define to 1 if you have the `cfmakeraw' function. */
/* #undef HAVE_CFMAKERAW */
/* define if the compiler supports basic C++11 syntax */
#define HAVE_CXX11 1
/* Define to 1 if you have the declaration of `gai_strerror', and to 0 if you
don't. */
#define HAVE_DECL_GAI_STRERROR 1
/* Define to 1 if you have the <dev/ppbus/ppbconf.hdev/ppbus/ppi.h> header
file. */
/* #undef HAVE_DEV_PPBUS_PPBCONF_HDEV_PPBUS_PPI_H */
/* Define to 1 if you have the <dlfcn.h> header file. */
/* #undef HAVE_DLFCN_H */
/* Define to 1 if you have the <errno.h> header file. */
#define HAVE_ERRNO_H 1
/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
/* Define to 1 if you have the `floor' function. */
#define HAVE_FLOOR 1
/* Define to 1 if you have the <gd.h> header file. */
/* #undef HAVE_GD_H */
/* Define to 1 if you have the `getaddrinfo' function. */
#define HAVE_GETADDRINFO 1
/* Define to 1 if you have the `getopt' function. */
#define HAVE_GETOPT 1
/* Define to 1 if you have the <getopt.h> header file. */
#define HAVE_GETOPT_H 1
/* Define to 1 if you have the `getopt_long' function. */
#define HAVE_GETOPT_LONG 1
/* Define to 1 if you have the `getpagesize' function. */
#define HAVE_GETPAGESIZE 1
/* Define to 1 if you have the `gettimeofday' function. */
#define HAVE_GETTIMEOFDAY 1
/* Define to 1 if you have the `glob' function. */
/* #undef HAVE_GLOB */
/* Define to 1 if you have the <glob.h> header file. */
/* #undef HAVE_GLOB_H */
/* Define to 1 if you have the <history.h> header file. */
/* #undef HAVE_HISTORY_H */
/* Define to 1 if you have the `inet_ntoa' function. */
/* #undef HAVE_INET_NTOA */
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
/* Define to 1 if you have the `ioctl' function. */
/* #undef HAVE_IOCTL */
/* Define to 1 if you have the <lauxlib.h> header file. */
/* #undef HAVE_LAUXLIB_H */
/* Define if you have an INDI compatible library */
/* #undef HAVE_LIBINDI */
/* Define if you have a nova compatible library */
/* #undef HAVE_LIBNOVA */
/* Define if you have a readline compatible library */
/* #undef HAVE_LIBREADLINE */
/* Define if libusb-1.0 is available */
#define HAVE_LIBUSB 1
/* Define to 1 if you have the <libusb-1.0/libusb.h> header file. */
#define HAVE_LIBUSB_1_0_LIBUSB_H 1
/* Define to 1 if you have the <libusb.h> header file. */
/* #undef HAVE_LIBUSB_H */
/* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1
/* Define to 1 if you have the <linux/hidraw.h> header file. */
/* #undef HAVE_LINUX_HIDRAW_H */
/* Define to 1 if you have the <linux/ioctl.h> header file. */
/* #undef HAVE_LINUX_IOCTL_H */
/* Define to 1 if you have the <linux/parport.h> header file. */
/* #undef HAVE_LINUX_PARPORT_H */
/* Define to 1 if you have the <linux/ppdev.h> header file. */
/* #undef HAVE_LINUX_PPDEV_H */
/* Define to 1 if you have the <locale.h> header file. */
#define HAVE_LOCALE_H 1
/* Define to 1 if you have the <luaconf.h> header file. */
/* #undef HAVE_LUACONF_H */
/* Define to 1 if you have the <lualib.h> header file. */
/* #undef HAVE_LUALIB_H */
/* Define to 1 if you have the <lua.h> header file. */
/* #undef HAVE_LUA_H */
/* Define to 1 if you have the <malloc.h> header file. */
#define HAVE_MALLOC_H 1
/* Define to 1 if you have the `memchr' function. */
#define HAVE_MEMCHR 1
/* Define to 1 if you have the `memmove' function. */
#define HAVE_MEMMOVE 1
/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
/* Define to 1 if you have the `memset' function. */
#define HAVE_MEMSET 1
/* Define to 1 if you have the `nanosleep' function. */
#define HAVE_NANOSLEEP 1
/* Define to 1 if you have the <netdb.h> header file. */
/* #undef HAVE_NETDB_H */
/* Define to 1 if you have the <netinet/in.h> header file. */
/* #undef HAVE_NETINET_IN_H */
/* Define if parallel devices are to be built */
#define HAVE_PARALLEL 1
/* Define to 1 if you have the `pow' function. */
#define HAVE_POW 1
/* Define if you have POSIX threads libraries and header files. */
#define HAVE_PTHREAD 1
/* Define to 1 if you have the <pthread.h> header file. */
#define HAVE_PTHREAD_H 1
/* Have PTHREAD_PRIO_INHERIT. */
#define HAVE_PTHREAD_PRIO_INHERIT 1
/* If available, contains the Python version number currently in use. */
/* #undef HAVE_PYTHON */
/* Define to 1 if you have the <readline.h> header file. */
/* #undef HAVE_READLINE_H */
/* Define if your readline library has \`add_history' */
/* #undef HAVE_READLINE_HISTORY */
/* Define to 1 if you have the <readline/history.h> header file. */
/* #undef HAVE_READLINE_HISTORY_H */
/* Define to 1 if you have the <readline/readline.h> header file. */
/* #undef HAVE_READLINE_READLINE_H */
/* Define to 1 if you have the `rint' function. */
#define HAVE_RINT 1
/* Define to 1 if you have the `select' function. */
/* #undef HAVE_SELECT */
/* Define to 1 if you have the `setitimer' function. */
/* #undef HAVE_SETITIMER */
/* Define to 1 if you have the `setlocale' function. */
#define HAVE_SETLOCALE 1
/* Define to 1 if you have the <sgtty.h> header file. */
/* #undef HAVE_SGTTY_H */
/* Define to 1 if you have the `sigaction' function. */
/* #undef HAVE_SIGACTION */
/* Define to 1 if the system has the type `siginfo_t'. */
/* #undef HAVE_SIGINFO_T */
/* Define to 1 if you have the `signal' function. */
#define HAVE_SIGNAL 1
/* Define to 1 if the system has the type `sig_atomic_t'. */
#define HAVE_SIG_ATOMIC_T 1
/* Define to 1 if you have the `sleep' function. */
#define HAVE_SLEEP 1
/* Define to 1 if you have the `snprintf' function. */
#define HAVE_SNPRINTF 1
/* Define to 1 if you have the `socket' function. */
/* #undef HAVE_SOCKET */
/* Define to 1 if you have the `socketpair' function. */
/* #undef HAVE_SOCKETPAIR */
/* Define to 1 if you have the `sqrt' function. */
#define HAVE_SQRT 1
/* Define to 1 if the system has the type `ssize_t'. */
#define HAVE_SSIZE_T 1
/* Define to 1 if you have Windows Sleep */
#define HAVE_SSLEEP 1
/* Define to 1 if you have the <stddef.h> header file. */
#define HAVE_STDDEF_H 1
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the `strchr' function. */
#define HAVE_STRCHR 1
/* Define to 1 if you have the `strdup' function. */
#define HAVE_STRDUP 1
/* Define to 1 if you have the `strerror' function. */
#define HAVE_STRERROR 1
/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the `strncasecmp' function. */
#define HAVE_STRNCASECMP 1
/* Define to 1 if you have the `strrchr' function. */
#define HAVE_STRRCHR 1
/* Define to 1 if you have the `strstr' function. */
#define HAVE_STRSTR 1
/* Define to 1 if you have the `strtol' function. */
#define HAVE_STRTOL 1
/* Define to 1 if the system has the type `struct addrinfo'. */
#define HAVE_STRUCT_ADDRINFO 1
/* Define to 1 if the system has the type `struct timezone'. */
#define HAVE_STRUCT_TIMEZONE 1
/* Define to 1 if you have the <sys/ioccom.h> header file. */
/* #undef HAVE_SYS_IOCCOM_H */
/* Define to 1 if you have the <sys/ioctl.h> header file. */
/* #undef HAVE_SYS_IOCTL_H */
/* Define to 1 if you have the <sys/param.h> header file. */
#define HAVE_SYS_PARAM_H 1
/* Define to 1 if you have the <sys/select.h> header file. */
/* #undef HAVE_SYS_SELECT_H */
/* Define to 1 if you have the <sys/socket.h> header file. */
/* #undef HAVE_SYS_SOCKET_H */
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the <tcl.h> header file. */
/* #undef HAVE_TCL_H */
/* Define to 1 if you have the <termios.h> header file. */
/* #undef HAVE_TERMIOS_H */
/* Define to 1 if you have the <termio.h> header file. */
/* #undef HAVE_TERMIO_H */
/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
/* Define to 1 if you have the `usleep' function. */
#define HAVE_USLEEP 1
/* Define if usrp is available */
/* #undef HAVE_USRP */
/* Define to 1 if you have the <values.h> header file. */
/* #undef HAVE_VALUES_H */
/* Define to 1 if you have the <winbase.h> header file. */
#define HAVE_WINBASE_H 1
/* Define to 1 if you have the <windows.h> header file. */
#define HAVE_WINDOWS_H 1
/* Define to 1 if you have the <winioctl.h> header file. */
#define HAVE_WINIOCTL_H 1
/* Define if winradio backend is built */
#define HAVE_WINRADIO 1
/* Define to 1 if you have the <ws2tcpip.h> header file. */
#define HAVE_WS2TCPIP_H 1
/* Define to 1 if you have the <wspiapi.h> header file. */
#define HAVE_WSPIAPI_H 1
/* Define if libxml2 is available */
/* #undef HAVE_XML2 */
/* Define to the sub-directory where libtool stores uninstalled libraries. */
#define LT_OBJDIR ".libs/"
/* Compilation on POSIX other than Linux */
/* #undef OTHER_POSIX */
/* Name of package */
#define PACKAGE "hamlib"
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "hamlib-developer@lists.sourceforge.net"
/* Define to the full name of this package. */
#define PACKAGE_NAME "Hamlib"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "Hamlib 4.6~git"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "hamlib"
/* Define to the home page for this package. */
#define PACKAGE_URL "http://www.hamlib.org"
/* Define to the version of this package. */
#define PACKAGE_VERSION "4.6~git"
/* Define to necessary symbol if this constant uses a non-standard name on
your system. */
/* #undef PTHREAD_CREATE_JOINABLE */
/* If using the C implementation of alloca, define if you know the
direction of stack growth for your system; otherwise it will be
automatically deduced at runtime.
STACK_DIRECTION > 0 => grows toward higher addresses
STACK_DIRECTION < 0 => grows toward lower addresses
STACK_DIRECTION = 0 => direction of growth unknown */
/* #undef STACK_DIRECTION */
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Enable extensions on AIX 3, Interix. */
#ifndef _ALL_SOURCE
# define _ALL_SOURCE 1
#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
#endif
/* Enable threading extensions on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# define _POSIX_PTHREAD_SEMANTICS 1
#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# define _TANDEM_SOURCE 1
#endif
/* Enable general extensions on Solaris. */
#ifndef __EXTENSIONS__
# define __EXTENSIONS__ 1
#endif
/* Version number of package */
#define VERSION "4.6~git"
/* Define to 1 if on MINIX. */
/* #undef _MINIX */
/* Define to 2 if the system does not provide POSIX.1 features except with
this defined. */
/* #undef _POSIX_1_SOURCE */
/* Define to 1 if you need to in order for `stat' and other things to work. */
/* #undef _POSIX_SOURCE */
/* Define to `__inline__' or `__inline' if that's what the C compiler
calls it, or to nothing if 'inline' is not supported under any name. */
#ifndef __cplusplus
/* #undef inline */
#endif
/* Define to `unsigned int' if <sys/types.h> does not define. */
/* #undef size_t */
/* Define missing prototypes, implemented in replacement lib */
#ifdef __cplusplus
extern "C" {
#endif
#ifndef HAVE_GETOPT
int getopt (int argc, char * const argv[], const char * optstring);
extern char * optarg;
extern int optind, opterr, optopt;
#endif
#ifndef HAVE_GETOPT_LONG
struct option;
int getopt_long (int argc, char * const argv[], const char * optstring,
const struct option * longopts, int * longindex);
#endif
#ifndef HAVE_USLEEP
int usleep(unsigned long usec); /* SUSv2 */
#endif
#ifndef HAVE_GETTIMEOFDAY
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
#ifndef HAVE_STRUCT_TIMEZONE
struct timezone {
int tz_minuteswest;
int tz_dsttime;
};
#endif
int gettimeofday(struct timeval *tv, struct timezone *tz);
#endif
#ifndef timersub
# define timersub(a, b, result) \
do { \
(result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
(result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
if ((result)->tv_usec < 0) { \
--(result)->tv_sec; \
(result)->tv_usec += 1000000; \
} \
} while (0)
#endif
#ifndef HAVE_SSIZE_T
typedef size_t ssize_t;
#endif
#ifdef __cplusplus
}
#endif
/* Define missing prototypes, implemented in replacement lib */
#ifdef __cplusplus
extern "C" {
#endif
#ifndef HAVE_STRUCT_ADDRINFO
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#if HAVE_NETDB_H
#include <netdb.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#elif HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
struct addrinfo {
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
socklen_t ai_addrlen;
struct sockaddr *ai_addr;
};
#endif
#ifndef HAVE_GETADDRINFO
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#if HAVE_NETDB_H
#include <netdb.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#ifdef HAVE_SYS_SOCKET_H
#include <sys/socket.h>
#elif HAVE_WS2TCPIP_H
#include <ws2tcpip.h>
#endif
#ifndef AI_PASSIVE
#define AI_PASSIVE 0x0001
#endif
int getaddrinfo(const char *node, const char *service,
const struct addrinfo *hints, struct addrinfo **res);
void freeaddrinfo(struct addrinfo *res);
#endif
#if !defined(HAVE_DECL_GAI_STRERROR) && !defined(gai_strerror)
const char *gai_strerror(int errcode);
#endif /* !HAVE_DECL_GAI_STRERROR */
#ifdef __cplusplus
}
#endif

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

Plik binarny nie jest wyświetlany.

45
hamlib/multicast.h 100644
Wyświetl plik

@ -0,0 +1,45 @@
//include <stdio.h>
//#include <stdlib.h>
//#include <string.h>
//#include <errno.h>
//#include <unistd.h>
#include <hamlib/rig.h>
//#include <sys/socket.h>
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef _WIN32
#include <winsock2.h>
#include <ws2tcpip.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#ifndef MULTICAST_H
#define MULTICAST_H
struct multicast_vfo
{
char *name;
double freq;
char *mode;
int width;
int widthLower;
int widthUpper;
unsigned char rx; // true if in rx mode
unsigned char tx; // true in in tx mode
};
struct multicast_broadcast
{
char *ID;
struct multicast_vfo **vfo;
};
// returns # of bytes sent
extern HAMLIB_EXPORT (int) multicast_init(RIG *rig, char *addr, int port);
extern HAMLIB_EXPORT (int) multicast_send(RIG *rig, const char *msg, int msglen);
extern HAMLIB_EXPORT (int) multicast_stop(RIG *rig);
#endif //MULTICAST_H

Plik diff jest za duży Load Diff

Wyświetl plik

@ -33,6 +33,8 @@
#define RIG_MAKE_MODEL(a,b) ((a)*MAX_MODELS_PER_BACKEND+(b))
#define RIG_BACKEND_NUM(a) ((a)/MAX_MODELS_PER_BACKEND)
//! @endcond
/*! \file riglist.h
* \brief Hamlib rig(radio) model definitions.
*
@ -49,6 +51,13 @@
* whishes to use. It is done with the rig_init() API call.
*/
/**
* \def RIG_MODEL_NONE
* \brief A macro that returns the model number for an unknown model.
*
* The none backend, as the name suggests, does nothing. It is mainly for
* internal use.
*/
#define RIG_MODEL_NONE 0
/*! \def RIG_MODEL_DUMMY
@ -62,16 +71,21 @@
* It has also been expanded to provide support to "virtual" type of rigs
* such as the network rig control backend and W1HKJ's Flrig application.
*/
//! @cond Doxygen_Suppress
#define RIG_DUMMY 0
#define RIG_BACKEND_DUMMY "dummy"
//! @endcond
#define RIG_MODEL_DUMMY RIG_MAKE_MODEL(RIG_DUMMY, 1)
//! @cond Doxygen_Suppress
#define RIG_MODEL_NETRIGCTL RIG_MAKE_MODEL(RIG_DUMMY, 2)
#define RIG_MODEL_ARMSTRONG RIG_MAKE_MODEL(RIG_DUMMY, 3)
#define RIG_MODEL_FLRIG RIG_MAKE_MODEL(RIG_DUMMY, 4)
#define RIG_MODEL_TRXMANAGER_RIG RIG_MAKE_MODEL(RIG_DUMMY, 5)
#define RIG_MODEL_DUMMY_NOVFO RIG_MAKE_MODEL(RIG_DUMMY, 6)
#define RIG_MODEL_TCI1X RIG_MAKE_MODEL(RIG_DUMMY, 7)
#define RIG_MODEL_ACLOG RIG_MAKE_MODEL(RIG_DUMMY, 8)
#define RIG_MODEL_SDRSHARP RIG_MAKE_MODEL(RIG_DUMMY, 9)
#define RIG_MODEL_QUISK RIG_MAKE_MODEL(RIG_DUMMY, 10)
/*
* Yaesu
@ -123,7 +137,12 @@
#define RIG_MODEL_FT897D RIG_MAKE_MODEL(RIG_YAESU, 43)
#define RIG_MODEL_FTDX101MP RIG_MAKE_MODEL(RIG_YAESU, 44)
#define RIG_MODEL_MCHFQRP RIG_MAKE_MODEL(RIG_YAESU, 45)
#define RIG_MODEL_FT450D RIG_MAKE_MODEL(RIG_YAESU, 46)
#define RIG_MODEL_FT650 RIG_MAKE_MODEL(RIG_YAESU, 47)
#define RIG_MODEL_FT990UNI RIG_MAKE_MODEL(RIG_YAESU, 48)
#define RIG_MODEL_FT710 RIG_MAKE_MODEL(RIG_YAESU, 49)
#define RIG_MODEL_FT9000OLD RIG_MAKE_MODEL(RIG_YAESU, 50)
#define RIG_MODEL_Q900 RIG_MAKE_MODEL(RIG_YAESU, 51)
/*
* Kenwood
@ -179,6 +198,12 @@
#define RIG_MODEL_K4 RIG_MAKE_MODEL(RIG_KENWOOD, 47)
#define RIG_MODEL_POWERSDR RIG_MAKE_MODEL(RIG_KENWOOD, 48)
#define RIG_MODEL_MALACHITE RIG_MAKE_MODEL(RIG_KENWOOD, 49)
#define RIG_MODEL_LAB599_TX500 RIG_MAKE_MODEL(RIG_KENWOOD,50)
#define RIG_MODEL_SDRUNO RIG_MAKE_MODEL(RIG_KENWOOD,51)
#define RIG_MODEL_QRPLABS RIG_MAKE_MODEL(RIG_KENWOOD,52)
#define RIG_MODEL_FX4 RIG_MAKE_MODEL(RIG_KENWOOD,53)
#define RIG_MODEL_THETIS RIG_MAKE_MODEL(RIG_KENWOOD, 54)
#define RIG_MODEL_TRUSDX RIG_MAKE_MODEL(RIG_KENWOOD, 55)
/*
* Icom
@ -262,8 +287,11 @@
#define RIG_MODEL_ID31 RIG_MAKE_MODEL(RIG_ICOM, 83)
#define RIG_MODEL_ID51 RIG_MAKE_MODEL(RIG_ICOM, 84)
#define RIG_MODEL_IC705 RIG_MAKE_MODEL(RIG_ICOM, 85)
/* next one is 86 */
#define RIG_MODEL_ICF8101 RIG_MAKE_MODEL(RIG_ICOM, 86)
#define RIG_MODEL_X6100 RIG_MAKE_MODEL(RIG_ICOM, 87) /* Xiegu X6100 */
#define RIG_MODEL_G90 RIG_MAKE_MODEL(RIG_ICOM, 88) /* Xiegu G90 */
#define RIG_MODEL_X5105 RIG_MAKE_MODEL(RIG_ICOM, 89) /* Xiegu X5105 -- G90 compatible */
#define RIG_MODEL_IC905 RIG_MAKE_MODEL(RIG_ICOM, 90)
/*
* Optoelectronics (CI-V)
@ -273,7 +301,6 @@
#define RIG_MODEL_OS535 RIG_MAKE_MODEL(RIG_ICOM, 52)
#define RIG_MODEL_OS456 RIG_MAKE_MODEL(RIG_ICOM, 53)
/*
* TenTec (CI-V)
*/
@ -282,7 +309,6 @@
#define RIG_MODEL_PARAGON2 RIG_MAKE_MODEL(RIG_ICOM, 59)
#define RIG_MODEL_DELTAII RIG_MAKE_MODEL(RIG_ICOM, 64)
/*
* Icom PCR
*/
@ -293,7 +319,6 @@
#define RIG_MODEL_PCR1500 RIG_MAKE_MODEL(RIG_PCR, 3)
#define RIG_MODEL_PCR2500 RIG_MAKE_MODEL(RIG_PCR, 4)
/*
* AOR
*/
@ -316,7 +341,6 @@
#define RIG_MODEL_AR7030P RIG_MAKE_MODEL(RIG_AOR, 15)
#define RIG_MODEL_SR2200 RIG_MAKE_MODEL(RIG_AOR, 16)
/*
* JRC
*/
@ -330,7 +354,6 @@
#define RIG_MODEL_NRD535 RIG_MAKE_MODEL(RIG_JRC, 6)
#define RIG_MODEL_NRD545 RIG_MAKE_MODEL(RIG_JRC, 7)
/*
* Radio Shack
* Actually, they might be either Icom or Uniden. TBC --SF
@ -344,7 +367,6 @@
#define RIG_MODEL_RS2042 RIG_MAKE_MODEL(RIG_RADIOSHACK, 5) /* w/ OptoElectronics OS435 Board */
#define RIG_MODEL_RS2041 RIG_MAKE_MODEL(RIG_RADIOSHACK, 6) /* PRO-2041 */
/*
* Uniden
*/
@ -363,7 +385,6 @@
#define RIG_MODEL_BCD996T RIG_MAKE_MODEL(RIG_UNIDEN, 11)
#define RIG_MODEL_BC898 RIG_MAKE_MODEL(RIG_UNIDEN, 12)
/*
* Drake
*/
@ -373,7 +394,6 @@
#define RIG_MODEL_DKR8A RIG_MAKE_MODEL(RIG_DRAKE, 2)
#define RIG_MODEL_DKR8B RIG_MAKE_MODEL(RIG_DRAKE, 3)
/*
* Lowe
*/
@ -384,7 +404,6 @@
#define RIG_MODEL_HF250 RIG_MAKE_MODEL(RIG_LOWE, 3)
#define RIG_MODEL_HF235 RIG_MAKE_MODEL(RIG_LOWE, 4)
/*
* Racal
*/
@ -396,7 +415,6 @@
#define RIG_MODEL_RA3710 RIG_MAKE_MODEL(RIG_RACAL, 4)
#define RIG_MODEL_RA3702 RIG_MAKE_MODEL(RIG_RACAL, 5)
/*
* Watkins-Johnson
*/
@ -407,7 +425,6 @@
#define RIG_MODEL_WJ8711 RIG_MAKE_MODEL(RIG_WJ, 3)
#define RIG_MODEL_WJ8888 RIG_MAKE_MODEL(RIG_WJ, 4)
/*
* Rohde & Schwarz--ek
*/
@ -419,7 +436,6 @@
#define RIG_MODEL_EK895 RIG_MAKE_MODEL(RIG_EK, 4)
#define RIG_MODEL_EK070 RIG_MAKE_MODEL(RIG_EK, 5)
/*
* Skanti
*/
@ -430,7 +446,6 @@
#define RIG_MODEL_TRP9000 RIG_MAKE_MODEL(RIG_SKANTI, 3)
#define RIG_MODEL_TRP8255 RIG_MAKE_MODEL(RIG_SKANTI, 4)
/*
* WiNRADiO/LinRADiO
*/
@ -448,7 +463,6 @@
#define RIG_MODEL_G305 RIG_MAKE_MODEL(RIG_WINRADIO, 10)
#define RIG_MODEL_G315 RIG_MAKE_MODEL(RIG_WINRADIO, 11)
/*
* Ten Tec
*/
@ -467,7 +481,6 @@
#define RIG_MODEL_RX331 RIG_MAKE_MODEL(RIG_TENTEC, 12)
#define RIG_MODEL_TT599 RIG_MAKE_MODEL(RIG_TENTEC, 13) /* Eagle */
/*
* Alinco
*/
@ -476,7 +489,6 @@
#define RIG_MODEL_DX77 RIG_MAKE_MODEL(RIG_ALINCO, 1)
#define RIG_MODEL_DXSR8 RIG_MAKE_MODEL(RIG_ALINCO, 2)
/*
* Kachina
*/
@ -484,7 +496,6 @@
#define RIG_BACKEND_KACHINA "kachina"
#define RIG_MODEL_505DSP RIG_MAKE_MODEL(RIG_KACHINA, 1)
/*
* Gnuradio backend
*/
@ -496,7 +507,6 @@
#define RIG_MODEL_GRAUDIOIQ RIG_MAKE_MODEL(RIG_GNURADIO, 4) /* I&Q stereo sound card source */
#define RIG_MODEL_USRP_G RIG_MAKE_MODEL(RIG_GNURADIO, 5) /* Universal Software Radio Peripheral */
/*
* Microtune tuners
*/
@ -506,7 +516,6 @@
#define RIG_MODEL_MICROTUNE_4702 RIG_MAKE_MODEL(RIG_MICROTUNE, 2) /* Alan's */
#define RIG_MODEL_MICROTUNE_4707 RIG_MAKE_MODEL(RIG_MICROTUNE, 3)
/*
* TAPR
*/
@ -514,7 +523,6 @@
#define RIG_BACKEND_TAPR "tapr"
#define RIG_MODEL_DSP10 RIG_MAKE_MODEL(RIG_TAPR, 1)
/*
* Flex-radio
*/
@ -525,7 +533,6 @@
#define RIG_MODEL_DTTSP RIG_MAKE_MODEL(RIG_FLEXRADIO, 3)
#define RIG_MODEL_DTTSP_UDP RIG_MAKE_MODEL(RIG_FLEXRADIO, 4)
/*
* VEB Funkwerk Köpenick RFT
*/
@ -533,7 +540,6 @@
#define RIG_BACKEND_RFT "rft"
#define RIG_MODEL_EKD500 RIG_MAKE_MODEL(RIG_RFT, 1)
/*
* Various kits
*/
@ -559,7 +565,6 @@
#define RIG_MODEL_FUNCUBEDONGLEPLUS RIG_MAKE_MODEL(RIG_KIT, 18) /* FunCUBE Dongle Pro+ */
#define RIG_MODEL_RSHFIQ RIG_MAKE_MODEL(RIG_KIT, 19) /* RS-HFIQ */
/*
* SW/FM/TV tuner cards supported by Video4Linux,*BSD, ..
*/
@ -568,7 +573,6 @@
#define RIG_MODEL_V4L RIG_MAKE_MODEL(RIG_TUNER, 1)
#define RIG_MODEL_V4L2 RIG_MAKE_MODEL(RIG_TUNER, 2)
/*
* Rohde & Schwarz--rs
*/
@ -577,7 +581,7 @@
#define RIG_MODEL_ESMC RIG_MAKE_MODEL(RIG_RS, 1)
#define RIG_MODEL_EB200 RIG_MAKE_MODEL(RIG_RS, 2)
#define RIG_MODEL_XK2100 RIG_MAKE_MODEL(RIG_RS, 3)
#define RIG_MODEL_EK89X RIG_MAKE_MODEL(RIG_RS, 4)
/*
* Phillips/Simoco PRM80
@ -587,7 +591,6 @@
#define RIG_MODEL_PRM8060 RIG_MAKE_MODEL(RIG_PRM80, 1)
#define RIG_MODEL_PRM8070 RIG_MAKE_MODEL(RIG_PRM80, 2)
/*
* ADAT by HB9CBU
*
@ -597,7 +600,6 @@
#define RIG_BACKEND_ADAT "adat"
#define RIG_MODEL_ADT_200A RIG_MAKE_MODEL(RIG_ADAT, 1)
/*
* ICOM Marine
*/
@ -608,7 +610,6 @@
#define RIG_MODEL_IC_M710 RIG_MAKE_MODEL(RIG_ICMARINE, 3)
#define RIG_MODEL_IC_M803 RIG_MAKE_MODEL(RIG_ICMARINE, 4)
/*
* Dorji transceiver modules
*/
@ -624,6 +625,8 @@
#define RIG_BACKEND_BARRETT "barrett"
#define RIG_MODEL_BARRETT_2050 RIG_MAKE_MODEL(RIG_BARRETT, 1)
#define RIG_MODEL_BARRETT_950 RIG_MAKE_MODEL(RIG_BARRETT, 2)
#define RIG_MODEL_BARRETT_4050 RIG_MAKE_MODEL(RIG_BARRETT, 3)
#define RIG_MODEL_BARRETT_4100 RIG_MAKE_MODEL(RIG_BARRETT, 4)
/*
* Elad
@ -631,9 +634,29 @@
#define RIG_ELAD 33
#define RIG_BACKEND_ELAD "elad"
#define RIG_MODEL_ELAD_FDM_DUO RIG_MAKE_MODEL(RIG_ELAD, 1)
//! @endcond
/*
* CODAN
*/
#define RIG_CODAN 34
#define RIG_BACKEND_CODAN "codan"
#define RIG_MODEL_CODAN_ENVOY RIG_MAKE_MODEL(RIG_CODAN, 1)
#define RIG_MODEL_CODAN_NGT RIG_MAKE_MODEL(RIG_CODAN, 2)
/*
* Gomspace
*/
#define RIG_GOMSPACE 35
#define RIG_BACKEND_GOMSPACE "gomspace"
#define RIG_MODEL_GS100 RIG_MAKE_MODEL(RIG_GOMSPACE, 1)
/*
* MDS Microwave Data Systems https://en.wikipedia.org/wiki/Microwave_Data_Systems
*/
#define RIG_MDS 36
#define RIG_BACKEND_MDS "MDS"
#define RIG_MODEL_MDS4710 RIG_MAKE_MODEL(RIG_MDS, 1)
#define RIG_MODEL_MDS9710 RIG_MAKE_MODEL(RIG_MDS, 2)
/*
* TODO:
RIG_MODEL_KWZ30, KNEISNER +DOERING
@ -641,6 +664,15 @@
etc.
*/
/*
* AnyTone rigs
*/
#define RIG_ANYTONE 37
#define RIG_BACKEND_ANYTONE "AnyTone"
#define RIG_MODEL_ATD578UVIII RIG_MAKE_MODEL(RIG_ANYTONE, 1)
//! @endcond
/*! \typedef typedef int rig_model_t
\brief Convenience type definition for rig model.

Wyświetl plik

@ -18,6 +18,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#ifndef _ROTATOR_H
#define _ROTATOR_H 1
@ -413,8 +414,8 @@ struct rot_caps {
int (*rot_open)(ROT *rot); /*!< Pointer to backend implementation of ::rot_open(). */
int (*rot_close)(ROT *rot); /*!< Pointer to backend implementation of ::rot_close(). */
int (*set_conf)(ROT *rot, token_t token, const char *val); /*!< Pointer to backend implementation of ::rot_set_conf(). */
int (*get_conf)(ROT *rot, token_t token, char *val); /*!< Pointer to backend implementation of ::rot_get_conf(). */
int (*set_conf)(ROT *rot, hamlib_token_t token, const char *val); /*!< Pointer to backend implementation of ::rot_set_conf(). */
int (*get_conf)(ROT *rot, hamlib_token_t token, char *val); /*!< Pointer to backend implementation of ::rot_get_conf(). */
/*
* General API commands, from most primitive to least.. :()
@ -441,18 +442,19 @@ struct rot_caps {
int (*set_parm)(ROT *rot, setting_t parm, value_t val); /*!< Pointer to backend implementation of ::rot_set_parm(). */
int (*get_parm)(ROT *rot, setting_t parm, value_t *val); /*!< Pointer to backend implementation of ::rot_get_parm(). */
int (*set_ext_level)(ROT *rot, token_t token, value_t val); /*!< Pointer to backend implementation of ::rot_set_ext_level(). */
int (*get_ext_level)(ROT *rot, token_t token, value_t *val); /*!< Pointer to backend implementation of ::rot_get_ext_level(). */
int (*set_ext_level)(ROT *rot, hamlib_token_t token, value_t val); /*!< Pointer to backend implementation of ::rot_set_ext_level(). */
int (*get_ext_level)(ROT *rot, hamlib_token_t token, value_t *val); /*!< Pointer to backend implementation of ::rot_get_ext_level(). */
int (*set_ext_func)(ROT *rot, token_t token, int status); /*!< Pointer to backend implementation of ::rot_set_ext_func(). */
int (*get_ext_func)(ROT *rot, token_t token, int *status); /*!< Pointer to backend implementation of ::rot_get_ext_func(). */
int (*set_ext_func)(ROT *rot, hamlib_token_t token, int status); /*!< Pointer to backend implementation of ::rot_set_ext_func(). */
int (*get_ext_func)(ROT *rot, hamlib_token_t token, int *status); /*!< Pointer to backend implementation of ::rot_get_ext_func(). */
int (*set_ext_parm)(ROT *rot, token_t token, value_t val); /*!< Pointer to backend implementation of ::rot_set_ext_parm(). */
int (*get_ext_parm)(ROT *rot, token_t token, value_t *val); /*!< Pointer to backend implementation of ::rot_get_ext_parm(). */
int (*set_ext_parm)(ROT *rot, hamlib_token_t token, value_t val); /*!< Pointer to backend implementation of ::rot_set_ext_parm(). */
int (*get_ext_parm)(ROT *rot, hamlib_token_t token, value_t *val); /*!< Pointer to backend implementation of ::rot_get_ext_parm(). */
int (*get_status)(ROT *rot, rot_status_t *status); /*!< Pointer to backend implementation of ::rot_get_status(). */
const char *macro_name; /*!< Rotator model macro name. */
int (*get_conf2)(ROT *rot, hamlib_token_t token, char *val, int val_len); /*!< Pointer to backend implementation of ::rot_get_conf2(). */
};
//! @cond Doxygen_Suppress
#define ROT_MODEL(arg) .rot_model=arg,.macro_name=#arg
@ -496,15 +498,16 @@ struct rot_state {
/*
* non overridable fields, internal use
*/
hamlib_port_t rotport; /*!< Rotator port (internal use). */
hamlib_port_t rotport2; /*!< 2nd Rotator port (internal use). */
hamlib_port_t_deprecated rotport_deprecated; /*!< Rotator port (internal use). Deprecated */
hamlib_port_t_deprecated rotport2_deprecated; /*!< 2nd Rotator port (internal use). Deprecated */
int comm_state; /*!< Comm port state, i.e. opened or closed. */
rig_ptr_t priv; /*!< Pointer to private rotator state data. */
rig_ptr_t obj; /*!< Internal use by hamlib++ for event handling. */
int current_speed; /*!< Current speed 1-100, to be used when no change to speed is requested. */
/* etc... */
hamlib_port_t rotport; /*!< Rotator port (internal use). */
hamlib_port_t rotport2; /*!< 2nd Rotator port (internal use). */
};
@ -542,13 +545,19 @@ rot_cleanup HAMLIB_PARAMS((ROT *rot));
extern HAMLIB_EXPORT(int)
rot_set_conf HAMLIB_PARAMS((ROT *rot,
token_t token,
hamlib_token_t token,
const char *val));
extern HAMLIB_EXPORT(int)
rot_get_conf HAMLIB_PARAMS((ROT *rot,
token_t token,
hamlib_token_t token,
char *val));
extern HAMLIB_EXPORT(int)
rot_get_conf2 HAMLIB_PARAMS((ROT *rot,
hamlib_token_t token,
char *val,
int val_len));
/*
* General API commands, from most primitive to least.. )
* List Set/Get functions pairs
@ -627,29 +636,29 @@ rot_get_parm HAMLIB_PARAMS((ROT *rig,
extern HAMLIB_EXPORT(int)
rot_set_ext_level HAMLIB_PARAMS((ROT *rig,
token_t token,
hamlib_token_t token,
value_t val));
extern HAMLIB_EXPORT(int)
rot_get_ext_level HAMLIB_PARAMS((ROT *rig,
token_t token,
hamlib_token_t token,
value_t *val));
extern HAMLIB_EXPORT(int)
rot_set_ext_func HAMLIB_PARAMS((ROT *rig,
token_t token,
hamlib_token_t token,
int status));
extern HAMLIB_EXPORT(int)
rot_get_ext_func HAMLIB_PARAMS((ROT *rig,
token_t token,
hamlib_token_t token,
int *status));
extern HAMLIB_EXPORT(int)
rot_set_ext_parm HAMLIB_PARAMS((ROT *rig,
token_t token,
hamlib_token_t token,
value_t val));
extern HAMLIB_EXPORT(int)
rot_get_ext_parm HAMLIB_PARAMS((ROT *rig,
token_t token,
hamlib_token_t token,
value_t *val));
extern HAMLIB_EXPORT(const char *)
@ -692,7 +701,7 @@ extern HAMLIB_EXPORT(const struct confparams *)
rot_confparam_lookup HAMLIB_PARAMS((ROT *rot,
const char *name));
extern HAMLIB_EXPORT(token_t)
extern HAMLIB_EXPORT(hamlib_token_t)
rot_token_lookup HAMLIB_PARAMS((ROT *rot,
const char *name));
@ -721,8 +730,8 @@ rot_ext_lookup HAMLIB_PARAMS((ROT *rot,
extern HAMLIB_EXPORT(const struct confparams *)
rot_ext_lookup_tok HAMLIB_PARAMS((ROT *rot,
token_t token));
extern HAMLIB_EXPORT(token_t)
hamlib_token_t token));
extern HAMLIB_EXPORT(hamlib_token_t)
rot_ext_token_lookup HAMLIB_PARAMS((ROT *rot,
const char *name));
@ -743,6 +752,7 @@ distance_long_path HAMLIB_PARAMS((double distance));
extern HAMLIB_EXPORT(double)
azimuth_long_path HAMLIB_PARAMS((double azimuth));
#if 0
extern HAMLIB_EXPORT(int)
longlat2locator HAMLIB_PARAMS((double longitude,
double latitude,
@ -753,6 +763,7 @@ extern HAMLIB_EXPORT(int)
locator2longlat HAMLIB_PARAMS((double *longitude,
double *latitude,
const char *locator));
#endif
extern HAMLIB_EXPORT(double)
dms2dec HAMLIB_PARAMS((int degrees,
@ -787,6 +798,8 @@ extern HAMLIB_EXPORT(const char *) rot_strlevel(setting_t);
extern HAMLIB_EXPORT(const char *) rot_strparm(setting_t);
extern HAMLIB_EXPORT(const char *) rot_strstatus(rot_status_t);
extern HAMLIB_EXPORT(void *) rot_data_pointer(ROT *rot, rig_ptrx_t idx);
//! @endcond
/**

Wyświetl plik

@ -176,6 +176,13 @@
* The RT21 backend can be used with rotators that support the DCU command set
* by Green Heron (currently the RT-21).
*/
/**
* \brief A macro that returns the model number of the YRC-1 backend.
*
* \def ROT_MODEL_YRC1
*
* The YRC1 backend can be used with rotators that support the DCU 2/3 command set
*/
//! @cond Doxygen_Suppress
#define ROT_ROTOREZ 4
#define ROT_BACKEND_ROTOREZ "rotorez"
@ -185,6 +192,8 @@
#define ROT_MODEL_DCU ROT_MAKE_MODEL(ROT_ROTOREZ, 3)
#define ROT_MODEL_ERC ROT_MAKE_MODEL(ROT_ROTOREZ, 4)
#define ROT_MODEL_RT21 ROT_MAKE_MODEL(ROT_ROTOREZ, 5)
#define ROT_MODEL_YRC1 ROT_MAKE_MODEL(ROT_ROTOREZ, 6)
#define ROT_MODEL_RT21 ROT_MAKE_MODEL(ROT_ROTOREZ, 5)
/**
@ -314,8 +323,11 @@
#define ROT_MODEL_GS232A_EL ROT_MAKE_MODEL(ROT_GS232A, 10)
#define ROT_MODEL_GS232B_AZ ROT_MAKE_MODEL(ROT_GS232A, 11)
#define ROT_MODEL_GS232B_EL ROT_MAKE_MODEL(ROT_GS232A, 12)
#define ROT_MODEL_GS23_AZ ROT_MAKE_MODEL(ROT_GS232A, 13)
#define ROT_ARRAYSOLUTIONS 7
#define ROT_BACKEND ARRAYSOLUTIONS "arraysolutions"
#define ROT_MODEL_ARRAYSOLUTIONS_SAL_12_20_30 ROT_MAKE_MODEL(ROT_ARRAYSOLUTIONS, 1)
/**
* \brief A macro that returns the model number of the PCROTOR backend.
*
@ -545,6 +557,7 @@
#define ROT_MODEL_PROSISTEL_D_AZ ROT_MAKE_MODEL(ROT_PROSISTEL, 1)
#define ROT_MODEL_PROSISTEL_D_EL ROT_MAKE_MODEL(ROT_PROSISTEL, 2)
#define ROT_MODEL_PROSISTEL_COMBI_TRACK_AZEL ROT_MAKE_MODEL(ROT_PROSISTEL, 3)
#define ROT_MODEL_PROSISTEL_D_EL_CBOXAZ ROT_MAKE_MODEL(ROT_PROSISTEL, 4)
/**
@ -623,6 +636,70 @@
#define ROT_BACKEND_ANDROIDSENSOR "androidsensor"
#define ROT_MODEL_ANDROIDSENSOR ROT_MAKE_MODEL(ROT_ANDROIDSENSOR, 1)
/**
* \brief A macro that returns the model number of the ROT_MODEL_GRBLTRK_SER backend.
*
* \def ROT_MODEL_GRBLTRK_SER
*
* The GRBLTRK backend can be used with rotators that support the GRBL
* protocol.
*/
/**
* \brief A macro that returns the model number of the ROT_MODEL_GRBLTRK_NET backend.
*
* \def ROT_MODEL_GRBLTRK_NET
*
* The GRBLTRK backend can be used with rotators that support the GRBL
* protocol.
*/
//! @cond Doxygen_Suppress
#define ROT_GRBLTRK 24
#define ROT_BACKEND_GRBLTRK "grbltrk"
//! @endcond
#define ROT_MODEL_GRBLTRK_SER ROT_MAKE_MODEL(ROT_GRBLTRK, 1)
#define ROT_MODEL_GRBLTRK_NET ROT_MAKE_MODEL(ROT_GRBLTRK, 2)
/**
* \brief A macro that returns the model number of the FLIR backend.
*
* \def ROT_MODEL_FLIR
*
* The FLIR backend can be used with FLIR and DirectedPercepition
* rotators using the PTU protocol (e.g. PTU-D48). Currently only
* the serial interface is supported and no ethernet.
*/
//! @cond Doxygen_Suppress
#define ROT_FLIR 25
#define ROT_BACKEND_FLIR "flir"
//! @endcond
#define ROT_MODEL_FLIR ROT_MAKE_MODEL(ROT_FLIR, 1)
/**
* \brief A macro that returns the model number of the APEX backend.
*
* \def ROT_MODEL_APEX_SHARED_LOOP
*
* The APEX backend can be used with APEX * rotators.
*/
//! @cond Doxygen_Suppress
#define ROT_APEX 26
#define ROT_BACKEND_APEX "apex"
//! @endcond
#define ROT_MODEL_APEX_SHARED_LOOP ROT_MAKE_MODEL(ROT_APEX, 1)
/**
* \brief A macro that returns the model number of the SAEBRTRACK backend.
*
* \def ROT_MODEL_SAEBRTRACK
*
* The SAEBRTRACK backend can be used with SAEBRTRACK * rotators.
*/
//! @cond Doxygen_Suppress
#define ROT_SAEBRTRACK 27
#define ROT_BACKEND_SAEBRTRACK "SAEBRTrack"
//! @endcond
#define ROT_MODEL_SAEBRTRACK ROT_MAKE_MODEL(ROT_SAEBRTRACK, 1)
/**
* \brief Convenience type definition for a rotator model.

Plik diff jest za duży Load Diff

Wyświetl plik

@ -1,6 +1,6 @@
/**
** This file is part of the CatRadio project.
** Copyright 2022 Gianfranco Sordetti IZ8EWD <iz8ewd@pianetaradio.it>.
** Copyright 2022-2024 Gianfranco Sordetti IZ8EWD <iz8ewd@pianetaradio.it>.
**
** This program is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
@ -23,10 +23,12 @@
#include <QMainWindow>
#include <QTimer>
#include "rig.h"
#define RELEASE_DATE __DATE__
#define VERSION_MAJ 1
#define VERSION_MIN 1
#define VERSION_MIC 0
#define VERSION_MIN 4
#define VERSION_MIC 1
QT_BEGIN_NAMESPACE
@ -44,8 +46,10 @@ public:
public slots:
void guiUpdate();
void rigUpdate(); //Slot for QTimer
void on_rigDaemonResultReady(); //Slot for rigDaemon resultReady
void on_vfoDisplayValueChanged(int value); //Slot for vfoDisplay valueChanged
void on_vfoDisplayMainValueChanged(int value); //Slot for vfoDisplay Main valueChanged
void on_vfoDisplaySubValueChanged(int value); //Slot for vfoDisplay Sub valueChanged
signals:
@ -156,12 +160,78 @@ private slots:
void on_comboBox_toneFreq_activated(int index);
void on_spinBox_RPToffset_valueChanged(int arg1);
void on_pushButton_left_clicked();
void on_pushButton_right_clicked();
void on_checkBox_clar_toggled(bool checked);
void on_pushButton_clarClear_clicked();
void on_horizontalSlider_clar_valueChanged(int value);
void on_radioButton_clarRIT_toggled(bool checked);
void on_radioButton_clarXIT_toggled(bool checked);
void on_verticalSlider_RFpower_sliderReleased();
void on_verticalSlider_RFgain_sliderReleased();
void on_verticalSlider_AFGain_sliderReleased();
void on_verticalSlider_Squelch_sliderReleased();
void on_horizontalSlider_IFshift_sliderReleased();
void on_horizontalSlider_clar_sliderReleased();
void on_checkBox_NB2_toggled(bool checked);
void on_verticalSlider_micGain_valueChanged(int value);
void on_verticalSlider_micGain_sliderReleased();
void on_verticalSlider_micCompressor_valueChanged(int value);
void on_verticalSlider_micCompressor_sliderReleased();
void on_verticalSlider_micMonitor_valueChanged(int value);
void on_verticalSlider_micMonitor_sliderReleased();
void on_checkBox_micCompressor_toggled(bool checked);
void on_checkBox_micMonitor_toggled(bool checked);
void on_action_Command_triggered();
void on_action_RadioInfo_triggered();
void on_action_AboutDarkTheme_triggered();
void on_pushButton_CW1_clicked();
void on_pushButton_CW2_clicked();
void on_pushButton_CW3_clicked();
void on_pushButton_CW4_clicked();
void on_pushButton_CW5_clicked();
private:
Ui::MainWindow *ui;
QTimer *timer;
RIG *my_rig;
void guiInit();
void setSubMeter();
bool checkHamlibVersion(int major, int minor, int revision);
};
#endif // MAINWINDOW_H

Plik diff jest za duży Load Diff

Wyświetl plik

@ -0,0 +1,36 @@
Authors
=======
Maintainer(s)
-------------
These people were/are maintainers of this project.
- 2013-current `Colin Duquesnoy <https://github.com/ColinDuquesnoy>`__ - colin.duquesnoy@gmail.com - original author.
- 2018-current `Daniel Pizetta <https://github.com/dpizetta>`__ - daniel.pizetta@usp.br - bug fixes, improvements, features.
- 2019-current `Gonzalo Peña-Castellanos <https://github.com/goanpeca>`__ - bug fixes, improvements, features.
- 2019-current `Carlos Cordoba <https://github.com/ccordoba12>`__
Contributor(s)
--------------
These people contribute to bug fixes, improvements and so on. Please,
insert your information after the last one.
- Year - Name - ``<contact>`` - contribution.
- 2018 - `mowoolli <https://github.com/mowoolli>`__ - bug fixes.
- 2018 - Xingyun Wu - ``xingyun.wu@foxmail.com`` - bug fixes.
- 2018 - `KcHNST <https://github.com/KcHNST>`__ - bug fixes.
- 2019 - `goanpeca <https://github.com/goanpeca>`__ - bug fixes, improvements, features.
- 2020 - `tsilia <https://github.com/tsilia>`__ - bug fixes.
- 2021 - `isabela-pf <https://github.com/isabela-pf>`__ - new palette design.
- 2021 - `juanis2112 <https://github.com/juanis2112>`__ - improvements.
- 2021 - `ccordoba12 <https://github.com/ccordoba12>`__ - mainteiner/improvements.
- 2021 - Julian Gilbey ``jdg@debian.org`` - bug fixes.
And all people that reported bugs, thank you all!

Wyświetl plik

@ -0,0 +1,405 @@
License
=======
The MIT License (MIT) - Code
----------------------------
Copyright (c) 2013-2019 Colin Duquesnoy
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Creative Commons Attribution International 4.0 - Images
-------------------------------------------------------
QDarkStyle (c) 2013-2019 Colin Duquesnoy
QDarkStyle (c) 2019-2019 Daniel Cosmo Pizetta
Creative Commons Corporation (“Creative Commons”) is not a law firm and
does not provide legal services or legal advice. Distribution of
Creative Commons public licenses does not create a lawyer-client or
other relationship. Creative Commons makes its licenses and related
information available on an “as-is” basis. Creative Commons gives no
warranties regarding its licenses, any material licensed under their
terms and conditions, or any related information. Creative Commons
disclaims all liability for damages resulting from their use to the
fullest extent possible.
Using Creative Commons Public Licenses
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Creative Commons public licenses provide a standard set of terms and
conditions that creators and other rights holders may use to share
original works of authorship and other material subject to copyright and
certain other rights specified in the public license below. The
following considerations are for informational purposes only, are not
exhaustive, and do not form part of our licenses.
- **Considerations for licensors:** Our public licenses are intended
for use by those authorized to give the public permission to use
material in ways otherwise restricted by copyright and certain other
rights. Our licenses are irrevocable. Licensors should read and
understand the terms and conditions of the license they choose before
applying it. Licensors should also secure all rights necessary before
applying our licenses so that the public can reuse the material as
expected. Licensors should clearly mark any material not subject to
the license. This includes other CC-licensed material, or material
used under an exception or limitation to copyright. `More
considerations for
licensors <http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensors>`__.
- **Considerations for the public:** By using one of our public
licenses, a licensor grants the public permission to use the licensed
material under specified terms and conditions. If the licensors
permission is not necessary for any reason–for example, because of
any applicable exception or limitation to copyright–then that use is
not regulated by the license. Our licenses grant only permissions
under copyright and certain other rights that a licensor has
authority to grant. Use of the licensed material may still be
restricted for other reasons, including because others have copyright
or other rights in the material. A licensor may make special
requests, such as asking that all changes be marked or described.
Although not required by our licenses, you are encouraged to respect
those requests where reasonable. `More considerations for the
public <http://wiki.creativecommons.org/Considerations_for_licensors_and_licensees#Considerations_for_licensees>`__.
Creative Commons Attribution 4.0 International Public License
-------------------------------------------------------------
By exercising the Licensed Rights (defined below), You accept and agree
to be bound by the terms and conditions of this Creative Commons
Attribution 4.0 International Public License ("Public License"). To the
extent this Public License may be interpreted as a contract, You are
granted the Licensed Rights in consideration of Your acceptance of these
terms and conditions, and the Licensor grants You such rights in
consideration of benefits the Licensor receives from making the Licensed
Material available under these terms and conditions.
Section 1 – Definitions
~~~~~~~~~~~~~~~~~~~~~~~
a. **Adapted Material** means material subject to Copyright and Similar
Rights that is derived from or based upon the Licensed Material and
in which the Licensed Material is translated, altered, arranged,
transformed, or otherwise modified in a manner requiring permission
under the Copyright and Similar Rights held by the Licensor. For
purposes of this Public License, where the Licensed Material is a
musical work, performance, or sound recording, Adapted Material is
always produced where the Licensed Material is synched in timed
relation with a moving image.
b. **Adapter's License** means the license You apply to Your Copyright
and Similar Rights in Your contributions to Adapted Material in
accordance with the terms and conditions of this Public License.
c. **Copyright and Similar Rights** means copyright and/or similar
rights closely related to copyright including, without limitation,
performance, broadcast, sound recording, and Sui Generis Database
Rights, without regard to how the rights are labeled or categorized.
For purposes of this Public License, the rights specified in Section
2(b)(1)-(2) are not Copyright and Similar Rights.
d. **Effective Technological Measures** means those measures that, in
the absence of proper authority, may not be circumvented under laws
fulfilling obligations under Article 11 of the WIPO Copyright Treaty
adopted on December 20, 1996, and/or similar international
agreements.
e. **Exceptions and Limitations** means fair use, fair dealing, and/or
any other exception or limitation to Copyright and Similar Rights
that applies to Your use of the Licensed Material.
f. **Licensed Material** means the artistic or literary work, database,
or other material to which the Licensor applied this Public License.
g. **Licensed Rights** means the rights granted to You subject to the
terms and conditions of this Public License, which are limited to all
Copyright and Similar Rights that apply to Your use of the Licensed
Material and that the Licensor has authority to license.
h. **Licensor** means the individual(s) or entity(ies) granting rights
under this Public License.
i. **Share** means to provide material to the public by any means or
process that requires permission under the Licensed Rights, such as
reproduction, public display, public performance, distribution,
dissemination, communication, or importation, and to make material
available to the public including in ways that members of the public
may access the material from a place and at a time individually
chosen by them.
j. **Sui Generis Database Rights** means rights other than copyright
resulting from Directive 96/9/EC of the European Parliament and of
the Council of 11 March 1996 on the legal protection of databases, as
amended and/or succeeded, as well as other essentially equivalent
rights anywhere in the world.
k. **You** means the individual or entity exercising the Licensed Rights
under this Public License. Your has a corresponding meaning.
Section 2 – Scope
~~~~~~~~~~~~~~~~~
a. **License grant.**
1. Subject to the terms and conditions of this Public License, the
Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to exercise the
Licensed Rights in the Licensed Material to:
A. reproduce and Share the Licensed Material, in whole or in part;
and
B. produce, reproduce, and Share Adapted Material.
2. **Exceptions and Limitations.** For the avoidance of doubt, where
Exceptions and Limitations apply to Your use, this Public License
does not apply, and You do not need to comply with its terms and
conditions.
3. **Term.** The term of this Public License is specified in Section
6(a).
4. **Media and formats; technical modifications allowed.** The Licensor
authorizes You to exercise the Licensed Rights in all media and
formats whether now known or hereafter created, and to make technical
modifications necessary to do so. The Licensor waives and/or agrees
not to assert any right or authority to forbid You from making
technical modifications necessary to exercise the Licensed Rights,
including technical modifications necessary to circumvent Effective
Technological Measures. For purposes of this Public License, simply
making modifications authorized by this Section 2(a)(4) never
produces Adapted Material.
5. **Downstream recipients.**
A. **Offer from the Licensor – Licensed Material.** Every recipient
of the Licensed Material automatically receives an offer from the
Licensor to exercise the Licensed Rights under the terms and
conditions of this Public License.
B. **No downstream restrictions.** You may not offer or impose any
additional or different terms or conditions on, or apply any
Effective Technological Measures to, the Licensed Material if doing
so restricts exercise of the Licensed Rights by any recipient of the
Licensed Material.
6. **No endorsement.** Nothing in this Public License constitutes or may
be construed as permission to assert or imply that You are, or that
Your use of the Licensed Material is, connected with, or sponsored,
endorsed, or granted official status by, the Licensor or others
designated to receive attribution as provided in Section
3(a)(1)(A)(i).
b. **Other rights.**
1. Moral rights, such as the right of integrity, are not licensed under
this Public License, nor are publicity, privacy, and/or other similar
personality rights; however, to the extent possible, the Licensor
waives and/or agrees not to assert any such rights held by the
Licensor to the limited extent necessary to allow You to exercise the
Licensed Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this Public
License.
3. To the extent possible, the Licensor waives any right to collect
royalties from You for the exercise of the Licensed Rights, whether
directly or through a collecting society under any voluntary or
waivable statutory or compulsory licensing scheme. In all other cases
the Licensor expressly reserves any right to collect such royalties.
Section 3 – License Conditions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Your exercise of the Licensed Rights is expressly made subject to the
following conditions.
a. **Attribution.**
1. If You Share the Licensed Material (including in modified form), You
must:
A. retain the following if it is supplied by the Licensor with the
Licensed Material:
i. identification of the creator(s) of the Licensed Material and any
others designated to receive attribution, in any reasonable manner
requested by the Licensor (including by pseudonym if designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of warranties;
v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
B. indicate if You modified the Licensed Material and retain an
indication of any previous modifications; and
C. indicate the Licensed Material is licensed under this Public
License, and include the text of, or the URI or hyperlink to, this
Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable
manner based on the medium, means, and context in which You Share the
Licensed Material. For example, it may be reasonable to satisfy the
conditions by providing a URI or hyperlink to a resource that
includes the required information.
3. If requested by the Licensor, You must remove any of the information
required by Section 3(a)(1)(A) to the extent reasonably practicable.
4. If You Share Adapted Material You produce, the Adapter's License You
apply must not prevent recipients of the Adapted Material from
complying with this Public License.
Section 4 – Sui Generis Database Rights
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Where the Licensed Rights include Sui Generis Database Rights that apply
to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to
extract, reuse, reproduce, and Share all or a substantial portion of
the contents of the database;
b. if You include all or a substantial portion of the database contents
in a database in which You have Sui Generis Database Rights, then the
database in which You have Sui Generis Database Rights (but not its
individual contents) is Adapted Material; and
c. You must comply with the conditions in Section 3(a) if You Share all
or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.
Section 5 – Disclaimer of Warranties and Limitation of Liability
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a. Unless otherwise separately undertaken by the Licensor, to the
extent possible, the Licensor offers the Licensed Material as-is and
as-available, and makes no representations or warranties of any kind
concerning the Licensed Material, whether express, implied,
statutory, or other. This includes, without limitation, warranties of
title, merchantability, fitness for a particular purpose,
non-infringement, absence of latent or other defects, accuracy, or
the presence or absence of errors, whether or not known or
discoverable. Where disclaimers of warranties are not allowed in full
or in part, this disclaimer may not apply to You.
b. To the extent possible, in no event will the Licensor be liable to
You on any legal theory (including, without limitation, negligence)
or otherwise for any direct, special, indirect, incidental,
consequential, punitive, exemplary, or other losses, costs, expenses,
or damages arising out of this Public License or use of the Licensed
Material, even if the Licensor has been advised of the possibility of
such losses, costs, expenses, or damages. Where a limitation of
liability is not allowed in full or in part, this limitation may not
apply to You.
c. The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent possible,
most closely approximates an absolute disclaimer and waiver of all
liability.
Section 6 – Term and Termination
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a. This Public License applies for the term of the Copyright and Similar
Rights licensed here. However, if You fail to comply with this Public
License, then Your rights under this Public License terminate
automatically.
b. Where Your right to use the Licensed Material has terminated under
Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided it is
cured within 30 days of Your discovery of the violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any right
the Licensor may have to seek remedies for Your violations of this
Public License.
c. For the avoidance of doubt, the Licensor may also offer the Licensed
Material under separate terms or conditions or stop distributing the
Licensed Material at any time; however, doing so will not terminate
this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 – Other Terms and Conditions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
a. The Licensor shall not be bound by any additional or different terms
or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the
Licensed Material not stated herein are separate from and independent
of the terms and conditions of this Public License.
Section 8 – Interpretation
~~~~~~~~~~~~~~~~~~~~~~~~~~
a. For the avoidance of doubt, this Public License does not, and shall
not be interpreted to, reduce, limit, restrict, or impose conditions
on any use of the Licensed Material that could lawfully be made
without permission under this Public License.
b. To the extent possible, if any provision of this Public License is
deemed unenforceable, it shall be automatically reformed to the
minimum extent necessary to make it enforceable. If the provision
cannot be reformed, it shall be severed from this Public License
without affecting the enforceability of the remaining terms and
conditions.
c. No term or condition of this Public License will be waived and no
failure to comply consented to unless expressly agreed to by the
Licensor.
d. Nothing in this Public License constitutes or may be interpreted as a
limitation upon, or waiver of, any privileges and immunities that
apply to the Licensor or You, including from the legal processes of
any jurisdiction or authority.
Creative Commons is not a party to its public licenses.
Notwithstanding, Creative Commons may elect to apply one of its
public licenses to material it publishes and in those instances will
be considered the “Licensor.” Except for the limited purpose of
indicating that material is shared under a Creative Commons public
license or as otherwise permitted by the Creative Commons policies
published at
`creativecommons.org/policies <http://creativecommons.org/policies>`__,
Creative Commons does not authorize the use of the trademark
“Creative Commons” or any other trademark or logo of Creative
Commons without its prior written consent including, without
limitation, in connection with any unauthorized modifications to any
of its public licenses or any other arrangements, understandings, or
agreements concerning use of licensed material. For the avoidance of
doubt, this paragraph does not form part of the public licenses.
Creative Commons may be contacted at creativecommons.org

Wyświetl plik

@ -0,0 +1,216 @@
<RCC warning="WARNING! File created programmatically. All changes made in this file will be lost!">
<qresource prefix="qss_icons/dark">
<file>rc/arrow_down.png</file>
<file>rc/arrow_down@2x.png</file>
<file>rc/arrow_down_disabled.png</file>
<file>rc/arrow_down_disabled@2x.png</file>
<file>rc/arrow_down_focus.png</file>
<file>rc/arrow_down_focus@2x.png</file>
<file>rc/arrow_down_pressed.png</file>
<file>rc/arrow_down_pressed@2x.png</file>
<file>rc/arrow_left.png</file>
<file>rc/arrow_left@2x.png</file>
<file>rc/arrow_left_disabled.png</file>
<file>rc/arrow_left_disabled@2x.png</file>
<file>rc/arrow_left_focus.png</file>
<file>rc/arrow_left_focus@2x.png</file>
<file>rc/arrow_left_pressed.png</file>
<file>rc/arrow_left_pressed@2x.png</file>
<file>rc/arrow_right.png</file>
<file>rc/arrow_right@2x.png</file>
<file>rc/arrow_right_disabled.png</file>
<file>rc/arrow_right_disabled@2x.png</file>
<file>rc/arrow_right_focus.png</file>
<file>rc/arrow_right_focus@2x.png</file>
<file>rc/arrow_right_pressed.png</file>
<file>rc/arrow_right_pressed@2x.png</file>
<file>rc/arrow_up.png</file>
<file>rc/arrow_up@2x.png</file>
<file>rc/arrow_up_disabled.png</file>
<file>rc/arrow_up_disabled@2x.png</file>
<file>rc/arrow_up_focus.png</file>
<file>rc/arrow_up_focus@2x.png</file>
<file>rc/arrow_up_pressed.png</file>
<file>rc/arrow_up_pressed@2x.png</file>
<file>rc/base_icon.png</file>
<file>rc/base_icon@2x.png</file>
<file>rc/base_icon_disabled.png</file>
<file>rc/base_icon_disabled@2x.png</file>
<file>rc/base_icon_focus.png</file>
<file>rc/base_icon_focus@2x.png</file>
<file>rc/base_icon_pressed.png</file>
<file>rc/base_icon_pressed@2x.png</file>
<file>rc/branch_closed.png</file>
<file>rc/branch_closed@2x.png</file>
<file>rc/branch_closed_disabled.png</file>
<file>rc/branch_closed_disabled@2x.png</file>
<file>rc/branch_closed_focus.png</file>
<file>rc/branch_closed_focus@2x.png</file>
<file>rc/branch_closed_pressed.png</file>
<file>rc/branch_closed_pressed@2x.png</file>
<file>rc/branch_end.png</file>
<file>rc/branch_end@2x.png</file>
<file>rc/branch_end_disabled.png</file>
<file>rc/branch_end_disabled@2x.png</file>
<file>rc/branch_end_focus.png</file>
<file>rc/branch_end_focus@2x.png</file>
<file>rc/branch_end_pressed.png</file>
<file>rc/branch_end_pressed@2x.png</file>
<file>rc/branch_line.png</file>
<file>rc/branch_line@2x.png</file>
<file>rc/branch_line_disabled.png</file>
<file>rc/branch_line_disabled@2x.png</file>
<file>rc/branch_line_focus.png</file>
<file>rc/branch_line_focus@2x.png</file>
<file>rc/branch_line_pressed.png</file>
<file>rc/branch_line_pressed@2x.png</file>
<file>rc/branch_more.png</file>
<file>rc/branch_more@2x.png</file>
<file>rc/branch_more_disabled.png</file>
<file>rc/branch_more_disabled@2x.png</file>
<file>rc/branch_more_focus.png</file>
<file>rc/branch_more_focus@2x.png</file>
<file>rc/branch_more_pressed.png</file>
<file>rc/branch_more_pressed@2x.png</file>
<file>rc/branch_open.png</file>
<file>rc/branch_open@2x.png</file>
<file>rc/branch_open_disabled.png</file>
<file>rc/branch_open_disabled@2x.png</file>
<file>rc/branch_open_focus.png</file>
<file>rc/branch_open_focus@2x.png</file>
<file>rc/branch_open_pressed.png</file>
<file>rc/branch_open_pressed@2x.png</file>
<file>rc/checkbox_checked.png</file>
<file>rc/checkbox_checked@2x.png</file>
<file>rc/checkbox_checked_disabled.png</file>
<file>rc/checkbox_checked_disabled@2x.png</file>
<file>rc/checkbox_checked_focus.png</file>
<file>rc/checkbox_checked_focus@2x.png</file>
<file>rc/checkbox_checked_pressed.png</file>
<file>rc/checkbox_checked_pressed@2x.png</file>
<file>rc/checkbox_indeterminate.png</file>
<file>rc/checkbox_indeterminate@2x.png</file>
<file>rc/checkbox_indeterminate_disabled.png</file>
<file>rc/checkbox_indeterminate_disabled@2x.png</file>
<file>rc/checkbox_indeterminate_focus.png</file>
<file>rc/checkbox_indeterminate_focus@2x.png</file>
<file>rc/checkbox_indeterminate_pressed.png</file>
<file>rc/checkbox_indeterminate_pressed@2x.png</file>
<file>rc/checkbox_unchecked.png</file>
<file>rc/checkbox_unchecked@2x.png</file>
<file>rc/checkbox_unchecked_disabled.png</file>
<file>rc/checkbox_unchecked_disabled@2x.png</file>
<file>rc/checkbox_unchecked_focus.png</file>
<file>rc/checkbox_unchecked_focus@2x.png</file>
<file>rc/checkbox_unchecked_pressed.png</file>
<file>rc/checkbox_unchecked_pressed@2x.png</file>
<file>rc/line_horizontal.png</file>
<file>rc/line_horizontal@2x.png</file>
<file>rc/line_horizontal_disabled.png</file>
<file>rc/line_horizontal_disabled@2x.png</file>
<file>rc/line_horizontal_focus.png</file>
<file>rc/line_horizontal_focus@2x.png</file>
<file>rc/line_horizontal_pressed.png</file>
<file>rc/line_horizontal_pressed@2x.png</file>
<file>rc/line_vertical.png</file>
<file>rc/line_vertical@2x.png</file>
<file>rc/line_vertical_disabled.png</file>
<file>rc/line_vertical_disabled@2x.png</file>
<file>rc/line_vertical_focus.png</file>
<file>rc/line_vertical_focus@2x.png</file>
<file>rc/line_vertical_pressed.png</file>
<file>rc/line_vertical_pressed@2x.png</file>
<file>rc/radio_checked.png</file>
<file>rc/radio_checked@2x.png</file>
<file>rc/radio_checked_disabled.png</file>
<file>rc/radio_checked_disabled@2x.png</file>
<file>rc/radio_checked_focus.png</file>
<file>rc/radio_checked_focus@2x.png</file>
<file>rc/radio_checked_pressed.png</file>
<file>rc/radio_checked_pressed@2x.png</file>
<file>rc/radio_unchecked.png</file>
<file>rc/radio_unchecked@2x.png</file>
<file>rc/radio_unchecked_disabled.png</file>
<file>rc/radio_unchecked_disabled@2x.png</file>
<file>rc/radio_unchecked_focus.png</file>
<file>rc/radio_unchecked_focus@2x.png</file>
<file>rc/radio_unchecked_pressed.png</file>
<file>rc/radio_unchecked_pressed@2x.png</file>
<file>rc/toolbar_move_horizontal.png</file>
<file>rc/toolbar_move_horizontal@2x.png</file>
<file>rc/toolbar_move_horizontal_disabled.png</file>
<file>rc/toolbar_move_horizontal_disabled@2x.png</file>
<file>rc/toolbar_move_horizontal_focus.png</file>
<file>rc/toolbar_move_horizontal_focus@2x.png</file>
<file>rc/toolbar_move_horizontal_pressed.png</file>
<file>rc/toolbar_move_horizontal_pressed@2x.png</file>
<file>rc/toolbar_move_vertical.png</file>
<file>rc/toolbar_move_vertical@2x.png</file>
<file>rc/toolbar_move_vertical_disabled.png</file>
<file>rc/toolbar_move_vertical_disabled@2x.png</file>
<file>rc/toolbar_move_vertical_focus.png</file>
<file>rc/toolbar_move_vertical_focus@2x.png</file>
<file>rc/toolbar_move_vertical_pressed.png</file>
<file>rc/toolbar_move_vertical_pressed@2x.png</file>
<file>rc/toolbar_separator_horizontal.png</file>
<file>rc/toolbar_separator_horizontal@2x.png</file>
<file>rc/toolbar_separator_horizontal_disabled.png</file>
<file>rc/toolbar_separator_horizontal_disabled@2x.png</file>
<file>rc/toolbar_separator_horizontal_focus.png</file>
<file>rc/toolbar_separator_horizontal_focus@2x.png</file>
<file>rc/toolbar_separator_horizontal_pressed.png</file>
<file>rc/toolbar_separator_horizontal_pressed@2x.png</file>
<file>rc/toolbar_separator_vertical.png</file>
<file>rc/toolbar_separator_vertical@2x.png</file>
<file>rc/toolbar_separator_vertical_disabled.png</file>
<file>rc/toolbar_separator_vertical_disabled@2x.png</file>
<file>rc/toolbar_separator_vertical_focus.png</file>
<file>rc/toolbar_separator_vertical_focus@2x.png</file>
<file>rc/toolbar_separator_vertical_pressed.png</file>
<file>rc/toolbar_separator_vertical_pressed@2x.png</file>
<file>rc/transparent.png</file>
<file>rc/transparent@2x.png</file>
<file>rc/transparent_disabled.png</file>
<file>rc/transparent_disabled@2x.png</file>
<file>rc/transparent_focus.png</file>
<file>rc/transparent_focus@2x.png</file>
<file>rc/transparent_pressed.png</file>
<file>rc/transparent_pressed@2x.png</file>
<file>rc/window_close.png</file>
<file>rc/window_close@2x.png</file>
<file>rc/window_close_disabled.png</file>
<file>rc/window_close_disabled@2x.png</file>
<file>rc/window_close_focus.png</file>
<file>rc/window_close_focus@2x.png</file>
<file>rc/window_close_pressed.png</file>
<file>rc/window_close_pressed@2x.png</file>
<file>rc/window_grip.png</file>
<file>rc/window_grip@2x.png</file>
<file>rc/window_grip_disabled.png</file>
<file>rc/window_grip_disabled@2x.png</file>
<file>rc/window_grip_focus.png</file>
<file>rc/window_grip_focus@2x.png</file>
<file>rc/window_grip_pressed.png</file>
<file>rc/window_grip_pressed@2x.png</file>
<file>rc/window_minimize.png</file>
<file>rc/window_minimize@2x.png</file>
<file>rc/window_minimize_disabled.png</file>
<file>rc/window_minimize_disabled@2x.png</file>
<file>rc/window_minimize_focus.png</file>
<file>rc/window_minimize_focus@2x.png</file>
<file>rc/window_minimize_pressed.png</file>
<file>rc/window_minimize_pressed@2x.png</file>
<file>rc/window_undock.png</file>
<file>rc/window_undock@2x.png</file>
<file>rc/window_undock_disabled.png</file>
<file>rc/window_undock_disabled@2x.png</file>
<file>rc/window_undock_focus.png</file>
<file>rc/window_undock_focus@2x.png</file>
<file>rc/window_undock_pressed.png</file>
<file>rc/window_undock_pressed@2x.png</file>
</qresource>
<qresource prefix="qdarkstyle/dark">
<file>darkstyle.qss</file>
</qresource>
</RCC>

Plik diff jest za duży Load Diff

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 522 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.0 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 546 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.0 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 523 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 992 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 567 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.0 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 558 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.1 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 557 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.1 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 551 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.1 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 574 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.1 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 546 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.1 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 545 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.1 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 541 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.1 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 574 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.1 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 525 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1008 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 549 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.0 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 532 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 990 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 554 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.0 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.2 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 3.2 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.2 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 3.2 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.2 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 3.2 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 1.2 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 3.2 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 397 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 824 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 426 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 862 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 395 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 810 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 415 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 867 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 151 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 205 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 152 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 205 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 149 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 203 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 152 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 204 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 133 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 238 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 135 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 240 B

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