Compare commits
5 Commits
72138fad19
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| ec4af751cd | |||
| 6ca18411cf | |||
| dde80e5696 | |||
| 14d983c840 | |||
| d00a699141 |
+1691
-1694
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,3 @@
|
||||
[General]
|
||||
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\0\0\0\0\0\0\0\0\a\x7f\0\0\x4\x19\0\0\0\x1\0\0\x1\x8f\0\0\x3 \0\0\x3\xe6\0\0\0\0\x2\0\0\0\a\x80\0\0\0\0\0\0\0\x17\0\0\a\x7f\0\0\x4\x18)
|
||||
windowState=@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\x1\0\0\0\xf5\0\0\x3@\xfc\x2\0\0\0\x5\xfb\0\0\0\x12\0R\0\x61\0\x64\0i\0o\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0-\0\xff\xff\xff\xfb\0\0\0\x14\0S\0\x65\0r\0v\0\x65\0r\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0-\0\xff\xff\xff\xfb\0\0\0\x12\0H\0P\0S\0\x44\0R\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0-\0\xff\xff\xff\xfb\0\0\0\x12\0\x43\0h\0i\0r\0p\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0-\0\xff\xff\xff\xfb\0\0\0\x16\0\x44\0i\0s\0p\0l\0\x61\0y\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0-\0\xff\xff\xff\0\0\a\x80\0\0\x3@\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\x9a\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x18\0\x44\0i\0s\0p\0l\0\x61\0y\0P\0\x61\0n\0\x65\0l\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x16\0M\0\x61\0i\0n\0\x42\0u\0t\0t\0o\0n\0s\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)
|
||||
geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x3\0\0\0\0\x5\x36\0\0\0\x37\0\0\t\xb2\0\0\x2\xaa\0\0\x5\x36\0\0\0S\0\0\t\xb2\0\0\x2\xaa\0\0\0\0\0\0\0\0\n\0\0\0\x5\x36\0\0\0S\0\0\t\xb2\0\0\x2\xaa)
|
||||
windowState="@ByteArray(\0\0\0\xff\0\0\0\0\xfd\0\0\0\x1\0\0\0\x1\0\0\0\xf5\0\0\x3,\xfc\x2\0\0\0\x5\xfb\0\0\0\x12\0R\0\x61\0\x64\0i\0o\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\xfb\0\0\0\x14\0S\0\x65\0r\0v\0\x65\0r\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\xfb\0\0\0\x12\0H\0P\0S\0\x44\0R\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\xfb\0\0\0\x12\0\x43\0h\0i\0r\0p\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\xfb\0\0\0\x16\0\x44\0i\0s\0p\0l\0\x61\0y\0\x43\0t\0r\0l\0\0\0\0\0\xff\xff\xff\xff\0\0\0/\0\xff\xff\xff\0\0\x4}\0\0\x1\x94\0\0\0\x4\0\0\0\x4\0\0\0\b\0\0\0\b\xfc\0\0\0\n\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x18\0\x44\0i\0s\0p\0l\0\x61\0y\0P\0\x61\0n\0\x65\0l\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0\0\0\0\x2\0\0\0\x1\0\0\0\x16\0M\0\x61\0i\0n\0\x42\0u\0t\0t\0o\0n\0s\x1\0\0\0\0\xff\xff\xff\xff\0\0\0\0\0\0\0\0)"
|
||||
|
||||
+4120
File diff suppressed because it is too large
Load Diff
@@ -26,6 +26,8 @@ HEADERS += \
|
||||
./src/DataEngine/cusdr_dataIO.h \
|
||||
./src/DataEngine/cusdr_discoverer_P1.h \
|
||||
./src/DataEngine/cusdr_discoverer_P2.h \
|
||||
./src/DataEngine/cusdr_protocol2_profile.h \
|
||||
./src/DataEngine/cusdr_protocol2_io.h \
|
||||
./src/DataEngine/cusdr_receiver.h \
|
||||
./src/DataEngine/soundout.h \
|
||||
./src/DataEngine/fractresampler.h \
|
||||
@@ -102,6 +104,8 @@ HEADERS += \
|
||||
./src/DataEngine/cusdr_dataIO.h \
|
||||
./src/DataEngine/cusdr_discoverer_P1.h \
|
||||
./src/DataEngine/cusdr_discoverer_P2.h \
|
||||
./src/DataEngine/cusdr_protocol2_profile.h \
|
||||
./src/DataEngine/cusdr_protocol2_io.h \
|
||||
./src/DataEngine/cusdr_receiver.h \
|
||||
./src/DataEngine/soundout.h \
|
||||
./src/DataEngine/fractresampler.h \
|
||||
@@ -176,6 +180,8 @@ SOURCES += \
|
||||
./src/DataEngine/cusdr_dataIO.cpp \
|
||||
./src/DataEngine/cusdr_discoverer_P1.cpp \
|
||||
./src/DataEngine/cusdr_discoverer_P2.cpp \
|
||||
./src/DataEngine/cusdr_protocol2_profile.cpp \
|
||||
./src/DataEngine/cusdr_protocol2_io.cpp \
|
||||
./src/DataEngine/cusdr_receiver.cpp \
|
||||
./src/DataEngine/soundout.cpp \
|
||||
./src/DataEngine/fractresampler.cpp \
|
||||
@@ -245,6 +251,8 @@ SOURCES += \
|
||||
./src/DataEngine/cusdr_dataIO.cpp \
|
||||
./src/DataEngine/cusdr_discoverer_P1.cpp \
|
||||
./src/DataEngine/cusdr_discoverer_P2.cpp \
|
||||
./src/DataEngine/cusdr_protocol2_profile.cpp \
|
||||
./src/DataEngine/cusdr_protocol2_io.cpp \
|
||||
./src/DataEngine/cusdr_receiver.cpp \
|
||||
./src/DataEngine/soundout.cpp \
|
||||
./src/DataEngine/fractresampler.cpp \
|
||||
|
||||
+104
-62
@@ -1,10 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 13.0.0, 2024-04-12T15:14:32. -->
|
||||
<!-- Written by QtCreator 19.0.0, 2026-04-14T22:57:19. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
<value type="QByteArray">{9df2227e-2f94-4455-9fee-2b0603509b19}</value>
|
||||
<value type="QByteArray">{96b01fe1-0bbd-4672-be89-b23907511d36}</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||
@@ -13,8 +13,8 @@
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<value type="bool" key="EditorConfiguration.AutoDetect">true</value>
|
||||
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||
<value type="QString" key="language">Cpp</value>
|
||||
@@ -33,6 +33,7 @@
|
||||
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
||||
<value type="int" key="EditorConfiguration.LineEndingBehavior">0</value>
|
||||
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
||||
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||
@@ -49,7 +50,7 @@
|
||||
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
|
||||
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||
<value type="bool" key="EditorConfiguration.addFinalNewLine">false</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
|
||||
@@ -69,7 +70,9 @@
|
||||
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
|
||||
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
|
||||
</valuemap>
|
||||
<value type="bool" key="AutoTest.ApplyFilter">false</value>
|
||||
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
|
||||
<valuelist type="QVariantList" key="AutoTest.PathFilters"/>
|
||||
<value type="int" key="AutoTest.RunAfterBuild">0</value>
|
||||
<value type="bool" key="AutoTest.UseGlobal">true</value>
|
||||
<valuemap type="QVariantMap" key="ClangTools">
|
||||
@@ -83,22 +86,24 @@
|
||||
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
|
||||
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
|
||||
</valuemap>
|
||||
<value type="int" key="RcSync">0</value>
|
||||
</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 5.15.2 MinGW 64-bit</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.15.2 MinGW 64-bit</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5152.win64_mingw81_kit</value>
|
||||
<value type="bool" key="HasPerBcDcs">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.15.18 (Системная)</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Qt 5.15.18 (Системная)</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{f03c686f-a66c-435e-a263-3d02bc565002}</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</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\karpe\Documents\source\cudaSDR\Source\build\Debug</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/karpe/Documents/source/cudaSDR/Source/build/Debug</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">./build/%{Asciify:%{Kit:FileSystemName}-%{BuildConfig:Name}}</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">build/Qt_5_15_18-u041eu0442u043bu0430u0434u043au0430</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>
|
||||
@@ -133,11 +138,51 @@
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</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.DeployConfiguration.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</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="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>
|
||||
<value type="int" key="Analyzer.Valgrind.Callgrind.CostFormat">0</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.SuppressionFiles"/>
|
||||
<valuelist type="QVariantList" key="CustomOutputParsers"/>
|
||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes">
|
||||
<value type="QString">QT_QPA_PLATFORM=xcb</value>
|
||||
<value type="QString">QT_OPENGL=desktop</value>
|
||||
</valuelist>
|
||||
<value type="bool" key="PE.EnvironmentAspect.PrintOnRun">false</value>
|
||||
<value type="QString" key="PerfRecordArgsId">-e cpu-cycles --call-graph dwarf,4096 -F 250</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:</value>
|
||||
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/vladimir/Документы/source/cudaSDR/Source/cudaSDR.pro</value>
|
||||
<value type="bool" key="ProjectExplorer.RunConfiguration.Customized">true</value>
|
||||
<value type="QString" key="ProjectExplorer.RunConfiguration.UniqueId"></value>
|
||||
<value type="bool" key="RunConfiguration.Arguments.multi">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||
<value type="QString" key="RunConfiguration.WorkingDirectory.default">%{RunConfig:Executable:Path}</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</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\karpe\Documents\source\cudaSDR\Source\build\Release</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/karpe/Documents/source/cudaSDR/Source/build/Release</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/vladimir/Документы/source/cudaSDR/Source</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>
|
||||
@@ -170,54 +215,47 @@
|
||||
<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">Выпуск</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Выпуск (imported)</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\karpe\Documents\source\cudaSDR\Source\build\Profile</value>
|
||||
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/karpe/Documents/source/cudaSDR/Source/build/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"/>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||
</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="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Сборка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
<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>
|
||||
<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="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</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>
|
||||
<value type="int" key="Analyzer.Valgrind.Callgrind.CostFormat">0</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.SuppressionFiles"/>
|
||||
<valuelist type="QVariantList" key="CustomOutputParsers"/>
|
||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||
<value type="bool" key="PE.EnvironmentAspect.PrintOnRun">false</value>
|
||||
<value type="QString" key="PerfRecordArgsId">-e cpu-cycles --call-graph dwarf,4096 -F 250</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
|
||||
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
|
||||
<value type="bool" key="ProjectExplorer.RunConfiguration.Customized">false</value>
|
||||
<value type="QString" key="ProjectExplorer.RunConfiguration.UniqueId"></value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||
<value type="QString" key="RunConfiguration.WorkingDirectory.default">%{RunConfig:Executable:Path}</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"/>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Профилирование</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</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="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||
@@ -236,17 +274,25 @@
|
||||
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||
<value type="int" key="Analyzer.Valgrind.Callgrind.CostFormat">0</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||
<valuelist type="QVariantList" key="Analyzer.Valgrind.SuppressionFiles"/>
|
||||
<valuelist type="QVariantList" key="CustomOutputParsers"/>
|
||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes">
|
||||
<value type="QString">QT_QPA_PLATFORM=xcb</value>
|
||||
<value type="QString">QT_OPENGL=desktop</value>
|
||||
</valuelist>
|
||||
<value type="bool" key="PE.EnvironmentAspect.PrintOnRun">false</value>
|
||||
<value type="QString" key="PerfRecordArgsId">-e cpu-cycles --call-graph "dwarf,4096" -F 250</value>
|
||||
<value type="QString" key="PerfRecordArgsId">-e cpu-cycles --call-graph dwarf,4096 -F 250</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
|
||||
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
|
||||
<value type="bool" key="ProjectExplorer.RunConfiguration.Customized">false</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:</value>
|
||||
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/vladimir/Документы/source/cudaSDR/Source/cudaSDR.pro</value>
|
||||
<value type="bool" key="ProjectExplorer.RunConfiguration.Customized">true</value>
|
||||
<value type="QString" key="ProjectExplorer.RunConfiguration.UniqueId"></value>
|
||||
<value type="bool" key="RunConfiguration.Arguments.multi">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||
<value type="QString" key="RunConfiguration.WorkingDirectory.default">%{RunConfig:Executable:Path}</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||
</valuemap>
|
||||
@@ -255,10 +301,6 @@
|
||||
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||
<value type="qlonglong">1</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||
<value type="int">22</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>Version</variable>
|
||||
<value type="int">22</value>
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,210 @@
|
||||
(fftw-3.3.10 fftwf_wisdom #x9e7d4dee #xdb14fed1 #x34bf76a4 #xeb6e8fdf
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #xbf678012 #x4fa660ee #x140158e5 #x1efac71e)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #xf697fa78 #xcdc737ef #x327441a3 #x16e103c1)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x3658c180 #xa18ad87a #xde50b473 #xd294bf8b)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x2bebc80b #x81f324b9 #x6a4bf0ed #x6c8bf103)
|
||||
(fftwf_codelet_t2fv_32_avx 0 #x10048 #x10048 #x0 #xc6ca45ce #xf08c5f4a #x61a53ade #xe5e374c8)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #xcce0f4d3 #x2029d0da #x971e5a53 #xb776e572)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #xb91ee16b #xec933664 #x2ab2cf33 #x5845d482)
|
||||
(fftwf_codelet_t2bv_32_avx 0 #x10048 #x10048 #x0 #xbf44c489 #xbdb2e056 #x92c9846b #x5d1c048a)
|
||||
(fftwf_codelet_t2bv_32_avx 0 #x10048 #x10048 #x0 #x5a8b39ad #xb8b02555 #x3c64aabc #x1fed0f6b)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x45aeaaf2 #x0e8ff55c #xd4baf4a3 #x6d2c60b7)
|
||||
(fftwf_codelet_t1bv_8_avx 0 #x11048 #x11048 #x0 #x0385af82 #x1584993e #x21ff98f5 #x0ea706fe)
|
||||
(fftwf_codelet_t2fv_32_avx 0 #x10bdd #x10bdd #x0 #xa5af12be #x8ea95383 #xcd10c847 #xe6812dfa)
|
||||
(fftwf_codelet_n2fv_32_avx 0 #x10048 #x10048 #x0 #x8ceded02 #xd8889599 #x348ed914 #xe7b8d70e)
|
||||
(fftwf_codelet_q1bv_8_avx 0 #x11048 #x11048 #x0 #x47fd87cc #xeccc4347 #x3482e454 #x84da7ab4)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x9b4e2f2a #x10bbce26 #xa520eab7 #xb2dded33)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #xe828af0f #xfcd40bef #xfc1b366d #x44464cf7)
|
||||
(fftwf_codelet_n2bv_8_avx 0 #x10048 #x10048 #x0 #x5f9804ff #x109d8d59 #x6cadef76 #xd31f8e66)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x5354d447 #x7457f35d #xc35203b7 #x9b9471e3)
|
||||
(fftwf_codelet_t2bv_4_avx 0 #x10048 #x10048 #x0 #xdecbd8fc #x48c91b31 #x1e3d2434 #xc732f759)
|
||||
(fftwf_codelet_n2fv_8_avx 0 #x10048 #x10048 #x0 #xa65d78bf #x28c8422e #x8fef6075 #xac0aeb71)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x2b40f46e #x5defbfca #xf00e73e3 #x9585f568)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x4317a71b #x5ad4d7ef #x331dd449 #xfb736571)
|
||||
(fftwf_rdft_rank0_register 2 #x11048 #x11048 #x0 #xde0c3a2f #x9e03c598 #x68f8ef02 #x1037c819)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x56b25f30 #x6db26bd5 #x551d412e #x73a7c4af)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x2f808e1f #x8554593a #x96c3b24b #x2c8a937b)
|
||||
(fftwf_codelet_t2bv_32_avx 0 #x10048 #x10048 #x0 #xd86f0fcc #x804581bb #x5ccfdfba #x14108c49)
|
||||
(fftwf_codelet_t1bv_16_avx 0 #x10048 #x10048 #x0 #xa5836669 #xfc0fba54 #x73049780 #x14684861)
|
||||
(fftwf_codelet_n2fv_8_avx 0 #x10048 #x10048 #x0 #x6af30f58 #x888f2b57 #xe7e2a33a #x9ba6b982)
|
||||
(fftwf_codelet_t2fv_32_avx 0 #x10048 #x10048 #x0 #xb458c93a #xd17d1b81 #x66376b4c #x0b71675e)
|
||||
(fftwf_codelet_n2bv_8_avx 0 #x10048 #x10048 #x0 #xdd0f7056 #xbbdc28aa #x74ac7866 #xeb6d5dee)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #xfcecc303 #xb8fccff9 #x63dc1862 #xe87bc3b1)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #xd2823a4d #x9db17531 #x4b791c62 #x3564ec50)
|
||||
(fftwf_codelet_n2fv_8_avx 0 #x10048 #x10048 #x0 #xe776615d #x3d1226d0 #xd3d61195 #x5ad72fc0)
|
||||
(fftwf_rdft_rank0_register 0 #x11048 #x11048 #x0 #x99857d35 #x61f5b804 #xc413dfc8 #x38c4da42)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x154aec9c #xdfc4ed8f #x45044876 #xbfedbe74)
|
||||
(fftwf_codelet_t2bv_4_avx 0 #x10048 #x10048 #x0 #xf06b0ac4 #x8ab72ac2 #x63b670d4 #xf83e4dff)
|
||||
(fftwf_rdft_rank0_register 2 #x11048 #x11048 #x0 #x2a30211a #x4db096be #x485978e9 #x7d4e207a)
|
||||
(fftwf_dft_nop_register 0 #x11bdd #x11bdd #x0 #x5a84361f #x38e7fcfc #x8f97e1b4 #xed5642e5)
|
||||
(fftwf_codelet_t2bv_32_avx 0 #x10048 #x10048 #x0 #x354634c1 #x7de84de6 #x906765eb #x880d4b2c)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x9702d296 #x3a181a15 #xf4ff0639 #x332c90ff)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x49bfd5a6 #xd449989c #x5d2c00b9 #x86924ecd)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #xa5d94cfc #xba335c5d #x2fd70793 #x2b5ec220)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x4c2bcbd2 #x2db07525 #x1292b760 #xcd4030bb)
|
||||
(fftwf_codelet_n2fv_8_avx 0 #x10048 #x10048 #x0 #x8a70f95a #x3d617279 #xf1aae6ee #x2335e6b2)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x5046b0b1 #xdb14d36b #x32567afe #x23c1a5b6)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x11048 #x11048 #x0 #xc9f41270 #x772b994d #x412e4553 #xd7b527c7)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x914f085b #x7945eab1 #xb24b3509 #x41ff886a)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x11048 #x11048 #x0 #xb52700b3 #xfa47dba9 #x7c85764f #x616be215)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x915169d5 #x99f86bc5 #x380ae3af #xe441f817)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x8cd648e7 #x3892dc39 #xae8bc0b3 #x6a3e1987)
|
||||
(fftwf_rdft_rank0_register 0 #x11048 #x11048 #x0 #xbed8e8b9 #x7dfa9d90 #xa67f3e46 #xa4ee79b3)
|
||||
(fftwf_codelet_t1bv_8_avx 0 #x11048 #x11048 #x0 #xf33cb1b3 #x1a725963 #x6069e4a7 #x306c15fc)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x706fca5f #x53aada8b #x94965c5c #x634d2fd8)
|
||||
(fftwf_codelet_t2fv_16_avx 0 #x10048 #x10048 #x0 #x8f86ac3f #x7cc3d8db #xc7865ecc #xea8b825e)
|
||||
(fftwf_dft_r2hc_register 0 #x11bdd #x11bdd #x0 #x81ed111e #x16edad1a #xc0ef7522 #xcf76d1d0)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x138aee33 #xc8352e47 #xc44ebf71 #x85806079)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #xb6aa2a4f #x2d6fdb68 #x3d3c3f4b #x398161e5)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x4192e7bc #xa0d41e42 #xccc82904 #xbdc747ca)
|
||||
(fftwf_codelet_t3fv_8_avx 0 #x10048 #x10048 #x0 #xdcc70e99 #xe6d709f9 #x5ee791c7 #x7d422b59)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x72ce5a30 #x5482f06b #x506065ad #x47a12ff8)
|
||||
(fftwf_codelet_t2fv_8_avx 0 #x11048 #x11048 #x0 #x61c7cbd7 #x14d54b7c #x382ba1e5 #xd54416a7)
|
||||
(fftwf_codelet_t2bv_16_avx 0 #x11048 #x11048 #x0 #xf03cffb1 #xd63eb7df #x82dbdfd2 #xaf9e4be5)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x89de285e #xea5d14d2 #xc4b52c05 #xe397bf60)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x44365654 #xb5c08cb1 #x3edd6904 #x8b307e7f)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x49a36887 #x31e6c9cb #x813198ae #xe57dfa28)
|
||||
(fftwf_dft_nop_register 0 #x11bdd #x11bdd #x0 #xa5d94cfc #xba335c5d #x2fd70793 #x2b5ec220)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #xe839922e #xe13ab3d6 #x6ab15866 #x59780863)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #xd8acdfa7 #x52c4b41b #x96545c23 #x8ae3d854)
|
||||
(fftwf_codelet_t3bv_8_avx 0 #x11048 #x11048 #x0 #xc07a24d0 #xa87559b1 #xacb5135e #xcfe20ae3)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #xf05d1612 #xeb661327 #x56b40d9b #x41e80030)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x45f87008 #xf862e179 #x6c9d2b6a #x06422f84)
|
||||
(fftwf_rdft_rank0_register 0 #x11048 #x11048 #x0 #xaa54d60b #xf700acf5 #xfd0693c3 #x87ea59df)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x35c81193 #xb264b0ed #x9f9b1cf8 #x94f736e0)
|
||||
(fftwf_dft_buffered_register 1 #x11048 #x11048 #x0 #xc772c300 #xbd1e274a #x1c96cd74 #xb9977ad0)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x1b81b570 #x56e611b8 #xeda459e8 #x1ecb9c14)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x41a1ffd9 #x36f1bdd5 #x82e75fcf #xebe0c760)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x86fd8aaa #xf35f1ad4 #xfa2560ba #x2cb60bf6)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #xbc1ea005 #xdc206b7d #xd0e1fae4 #x70bb63bb)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #xfaf646f3 #x00cad654 #x147ab569 #x9ff7f578)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x24dbb8f2 #xc60569cd #x695c7483 #xa67a277e)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x1e5fa302 #x4dca4b4b #x68854fe7 #x57f745da)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x775161af #x0c9690a4 #xf9c33690 #x68144260)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #xb22b2c91 #x15f7b244 #xe2dcb88a #x445a2d77)
|
||||
(fftwf_rdft_rank0_register 0 #x11048 #x11048 #x0 #x5cffe061 #xaa815e98 #x2565cca3 #x9e2684da)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #xf11c9e6d #xfda297ee #xc23a19f6 #x028f1f16)
|
||||
(fftwf_codelet_t3bv_8_avx 0 #x11048 #x11048 #x0 #x01dee095 #xc22cc722 #xa96cce78 #x222a6cb0)
|
||||
(fftwf_rdft_rank0_register 0 #x11048 #x11048 #x0 #x9d3aaef3 #x396b4e63 #x59e4d810 #xb358ae2b)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x748742f1 #x02518d2d #x940a38c6 #xf6e725eb)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #xeecefd51 #x2166f671 #xa1611d2a #xd04e6a23)
|
||||
(fftwf_dft_buffered_register 0 #x11bdd #x11bdd #x0 #x9702d296 #x3a181a15 #xf4ff0639 #x332c90ff)
|
||||
(fftwf_codelet_t2fv_32_avx 0 #x10048 #x10048 #x0 #x82902f64 #xa1f80e73 #xed6633a9 #x5e9c2f4e)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x5f8954c7 #xa30ca998 #x8b48983c #x6b3f25b9)
|
||||
(fftwf_codelet_t2bv_8_avx 0 #x10048 #x10048 #x0 #xeca2c7ac #xab07871d #xcf2fdd5c #xa724670f)
|
||||
(fftwf_codelet_q1fv_8_avx 0 #x11048 #x11048 #x0 #xce0c9d82 #x7a1906af #xe4335ac3 #x1515c435)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #xabf93701 #x7ee2faf1 #x565156fc #x94d95e58)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x4d3da3c2 #x3cdd488c #x7d81d888 #x3f84c720)
|
||||
(fftwf_rdft_rank0_register 1 #x11048 #x11048 #x0 #xdef08a3b #x60e2af8b #x46214943 #xe74edad1)
|
||||
(fftwf_codelet_t2bv_32_avx 0 #x10048 #x10048 #x0 #x889f271b #xfc322bc3 #x77dab9f2 #x358ba725)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x0a0f2638 #x32aaaa57 #x72d985b6 #x2c793ff3)
|
||||
(fftwf_codelet_t2bv_32_avx 0 #x10048 #x10048 #x0 #xde21d884 #x3b28cd44 #x6d0c70bc #x14b5084d)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #xec2058f9 #x976bdb23 #xbd09b37f #xe2a78192)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x55cdf1e6 #x3809f899 #x20b600d5 #x69240040)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x3c540134 #x544e036b #x4a3d0646 #xab86f544)
|
||||
(fftwf_codelet_t2bv_32_avx 0 #x10048 #x10048 #x0 #xb070d958 #x23f0478f #x95da449c #x52df1d59)
|
||||
(fftwf_codelet_t2bv_8_avx 0 #x10048 #x10048 #x0 #xbe023c48 #x57c3e8ad #xd3dc2039 #x20838a60)
|
||||
(fftwf_codelet_n2bv_8_avx 0 #x10048 #x10048 #x0 #xa73d4f18 #xab7d4dad #xb33a00f6 #x2c4d1cef)
|
||||
(fftwf_codelet_n2fv_32_avx 0 #x10048 #x10048 #x0 #x1bfd5ad9 #xc4c1f496 #x706c43ea #xb35a0b93)
|
||||
(fftwf_codelet_t2fv_8_avx 0 #x10048 #x10048 #x0 #x6d50257f #xff715e98 #xbc9e8a5e #x779ffe3b)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x5d45625a #x80f25011 #x6574fb8b #xd9827f8e)
|
||||
(fftwf_codelet_t1bv_16_avx 0 #x11048 #x11048 #x0 #x25ff2dc4 #xb27bd269 #x676fa1b6 #x675a4834)
|
||||
(fftwf_codelet_t1fv_8_avx 0 #x11048 #x11048 #x0 #x3a0fb14f #x423b9fed #x3067af82 #x03b43db6)
|
||||
(fftwf_rdft_rank0_register 1 #x11bdd #x11bdd #x0 #xd100ff43 #xf8c8f80d #x8d26f4f6 #x41949b46)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x611ef40b #x0ec3adf7 #x0488e4d1 #x6de9ae70)
|
||||
(fftwf_codelet_n2bv_32_avx 0 #x10048 #x10048 #x0 #xdacbc8bd #xebc59b08 #xc0d6617b #x26bed825)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #xc0196371 #x452bee68 #x22e21ce7 #xb987384f)
|
||||
(fftwf_rdft_rank0_register 1 #x11048 #x11048 #x0 #xc8e60148 #x3b8f1795 #xb1557754 #x5aedc31a)
|
||||
(fftwf_codelet_n2bv_8_avx 0 #x10048 #x10048 #x0 #x692196f4 #xb1736e52 #xeed7664b #x53a9e61f)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x919470bc #x91f7d5d3 #x507d55fa #x495b9b3b)
|
||||
(fftwf_codelet_t2fv_8_avx 0 #x10048 #x10048 #x0 #x4e30e5f6 #x6fbac7e4 #xd4268408 #x93bede4b)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x7b6cd83e #x3719d381 #x70993124 #x32080f66)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #xab1286d6 #xa7eb8443 #x7885e372 #x8b88a2f9)
|
||||
(fftwf_codelet_n2fv_32_avx 0 #x10048 #x10048 #x0 #x407181dc #x8a77cb1e #xa88df8c5 #xa32373b5)
|
||||
(fftwf_codelet_t2fv_32_avx 0 #x10048 #x10048 #x0 #x001fc58e #x27dce5dd #xdfd1b503 #x0ddd3c3e)
|
||||
(fftwf_codelet_q1fv_8_avx 0 #x11048 #x11048 #x0 #x0b8ccb37 #xb48da03a #x6d66f038 #xdc85f149)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x746cca09 #xc6673e64 #x38b3a0a1 #x721bbc1f)
|
||||
(fftwf_codelet_n2fv_64_avx 0 #x10bdd #x10bdd #x0 #xb8f48902 #x3e3cffd5 #x0902e318 #xff82254a)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x06798cc0 #xb71d5fb9 #x6860288d #x7643523d)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x5d1da51c #x54e5e7ba #x79cf103d #x2115e54f)
|
||||
(fftwf_codelet_t2bv_32_avx 0 #x11bdd #x11bdd #x0 #xcce0f4d3 #x2029d0da #x971e5a53 #xb776e572)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x277cdc72 #x9b797651 #xcceac7f6 #xa57543d5)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x6262b95b #x5a89ceec #x9747b885 #x227f0de9)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x9e007033 #x2492644c #x2214c74b #x113de887)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x67015235 #x7e0a02d1 #x178e099f #x3aa17f88)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x7cfe1332 #x997f9633 #x96cebfbd #x69a7b8b8)
|
||||
(fftwf_rdft_rank0_register 2 #x11048 #x11048 #x0 #xe5f48c7f #x73ea076e #x620ac891 #x59a03466)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x11048 #x11048 #x0 #xf9cfd8b3 #xffdd35ff #xaca34269 #x4e329530)
|
||||
(fftwf_codelet_n2fv_8_avx 0 #x10048 #x10048 #x0 #x9351f675 #x7bf62f77 #x59793867 #x00d8cec1)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #xdcf1b381 #x1fea8184 #x6b6e983d #x7fdde9d2)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #xa8efe35c #x59342146 #x22620e48 #xa4c92d5f)
|
||||
(fftwf_codelet_t2fv_4_avx 0 #x11048 #x11048 #x0 #x8bae44bb #x78f7d4b4 #x9b80a1a8 #xee506046)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #xff883af2 #x38b6868f #x1a362913 #xababfc19)
|
||||
(fftwf_codelet_n2bv_32_avx 0 #x10048 #x10048 #x0 #x6c9b0585 #xd17bef5f #x20df0752 #xda67f938)
|
||||
(fftwf_codelet_t2bv_8_avx 0 #x11048 #x11048 #x0 #x4445ab84 #xcc57dca8 #xeaeac71c #xca4de992)
|
||||
(fftwf_codelet_n2fv_64_avx 0 #x10048 #x10048 #x0 #xb8f48902 #x3e3cffd5 #x0902e318 #xff82254a)
|
||||
(fftwf_codelet_t2bv_32_avx 0 #x10048 #x10048 #x0 #x3ecdd32d #x5ff3dacd #x21fe976e #xd20e902b)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #xe363e8b2 #x4313f054 #x96d9aa98 #x7e5a132a)
|
||||
(fftwf_codelet_n2bv_8_avx 0 #x10048 #x10048 #x0 #x5e6023d1 #x796510e5 #xc15cfcad #xb6487173)
|
||||
(fftwf_codelet_q1bv_8_avx 0 #x11048 #x11048 #x0 #xcb059760 #x72070345 #x293632f7 #xb3fb4a70)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x7aaf951d #xf13ca796 #x98d28ec2 #x9426a453)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x81ed111e #x16edad1a #xc0ef7522 #xcf76d1d0)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x90d3a80b #x5e7fa8d7 #xc88351dc #xa38756c6)
|
||||
(fftwf_dft_buffered_register 1 #x11bdd #x11bdd #x0 #xa2f7e746 #xc19d8119 #xcf28ff1a #xfc92a9a1)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x6620455b #x489ef1e0 #x1c4922dd #x121066bd)
|
||||
(fftwf_codelet_t2fv_8_avx 0 #x10048 #x10048 #x0 #x8a755267 #x6378e3be #x20af89ad #xb4a633e9)
|
||||
(fftwf_codelet_t2fv_16_avx 0 #x10048 #x10048 #x0 #xfeec02f8 #xbbf06357 #xb26e7a2b #xf7b9dcb8)
|
||||
(fftwf_rdft_rank0_register 1 #x11048 #x11048 #x0 #xb2e78a54 #x791b0737 #x7128305f #x7aeca171)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x8ec615de #x83b6abee #x95ee41ea #x9f119646)
|
||||
(fftwf_codelet_n2fv_8_avx 0 #x10048 #x10048 #x0 #x1ed1cfd9 #x0a08a1d5 #xb2f3dfde #xea963620)
|
||||
(fftwf_rdft_rank0_register 3 #x11048 #x11048 #x0 #xbdb6124a #x9f5eef16 #x9ac509c1 #x558de67c)
|
||||
(fftwf_codelet_t3fv_8_avx 0 #x11048 #x11048 #x0 #xa1d259de #xce6fddbf #xb72b5fff #x14c025b4)
|
||||
(fftwf_codelet_n2bv_8_avx 0 #x10048 #x10048 #x0 #x017d7382 #xbd6f3d64 #x1cc0b76d #x12cff5e6)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x11048 #x11048 #x0 #x2620513b #x20d12ad4 #x3bd43dc6 #x4eb0a878)
|
||||
(fftwf_codelet_t2fv_32_avx 0 #x10048 #x10048 #x0 #x2c50659a #x343a7df7 #xd727540d #xacfea1f9)
|
||||
(fftwf_rdft_rank0_register 0 #x11048 #x11048 #x0 #xc52eab0b #x65a67d77 #xdbeeda13 #x3a99ec37)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #xb2ccdb75 #x4b421683 #xf0a42600 #xc748a19a)
|
||||
(fftwf_rdft_rank0_register 0 #x11048 #x11048 #x0 #x676222b4 #x3bf90562 #x3ecf6426 #x676e17b6)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x408c8bfd #x559e4b35 #xe3a69b3a #x8780967b)
|
||||
(fftwf_codelet_n2fv_8_avx 0 #x10048 #x10048 #x0 #xc47077d2 #x0b946f59 #x97b34c14 #x57ad551b)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x60aaaba7 #x92f4ebed #xf89abae8 #xe9598c47)
|
||||
(fftwf_dft_buffered_register 1 #x11048 #x11048 #x0 #x6b9a127c #x8569b7e4 #xeee02f6e #x5f46a49d)
|
||||
(fftwf_codelet_t2fv_32_avx 0 #x10048 #x10048 #x0 #xd675f99f #xe71be492 #x508feb6a #x493761f2)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #xfd469170 #xfe2eb038 #x41160fd0 #x0e870d1b)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #xf1c9c6cf #x0fa1a00a #x6524cc29 #x61f14b34)
|
||||
(fftwf_codelet_t1fv_8_avx 0 #x10048 #x10048 #x0 #xf1915d84 #x56c4bdfa #x16f8d847 #xdbd3c190)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x0673d81a #x1fbdf76c #x9d672161 #xb4038088)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x1f9954b3 #x2067df8c #xfc16d2a0 #x150d9670)
|
||||
(fftwf_codelet_t2fv_4_avx 0 #x10048 #x10048 #x0 #x7eec2f32 #x14404785 #x41e3b96d #xd33c4812)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #xe542e2ba #xdcaf0610 #xdfdd35e4 #xe947cb44)
|
||||
(fftwf_codelet_t1fv_8_avx 0 #x11048 #x11048 #x0 #x44202467 #x8ac28d39 #xa9cf7059 #x76b5bfe5)
|
||||
(fftwf_codelet_t1bv_8_avx 0 #x11048 #x11048 #x0 #x3330c0b3 #x6e46afbc #xededb5c9 #x20a9decf)
|
||||
(fftwf_codelet_n2bv_64_avx 0 #x10bdd #x10bdd #x0 #x093ef7e2 #x52543b08 #x2dff6879 #x0aae1ecc)
|
||||
(fftwf_codelet_t2fv_32_avx 0 #x10048 #x10048 #x0 #x1e46b364 #xd96e9eeb #x7eac6d13 #x3fa2cbae)
|
||||
(fftwf_rdft_rank0_register 1 #x11048 #x11048 #x0 #x5eeb1347 #x41745ef0 #x7bb3914d #x074224fc)
|
||||
(fftwf_codelet_t2fv_32_avx 0 #x10048 #x10048 #x0 #xa5af12be #x8ea95383 #xcd10c847 #xe6812dfa)
|
||||
(fftwf_rdft_rank0_register 0 #x11bdd #x11bdd #x0 #xaa54d60b #xf700acf5 #xfd0693c3 #x87ea59df)
|
||||
(fftwf_dft_r2hc_register 0 #x11bdd #x11bdd #x0 #xd7e9c742 #x2aa7271c #xc5703d32 #x2307ef1f)
|
||||
(fftwf_codelet_n2bv_32_avx 0 #x10048 #x10048 #x0 #x9eb2edbf #x922114ae #xb3ba36b9 #x31dd942c)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #xf2186dce #x3336d4d4 #xb6c3e379 #xa0c769bf)
|
||||
(fftwf_codelet_t2fv_8_avx 0 #x10048 #x10048 #x0 #x697b20b6 #x6432f0af #xb6a1bcf0 #x310827eb)
|
||||
(fftwf_codelet_t1fv_4_avx 0 #x10048 #x10048 #x0 #x5d434298 #x88e29877 #xadad8a78 #x52119eab)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x15e9b2b0 #x58491c83 #x479ea6c6 #x96cd0863)
|
||||
(fftwf_codelet_t2bv_4_avx 0 #x10048 #x10048 #x0 #xb3964c50 #x578456fb #x62e28e4e #x195542ce)
|
||||
(fftwf_codelet_t2bv_8_avx 0 #x10048 #x10048 #x0 #x89098911 #x7a6d2e32 #x5b2d7c65 #xb570e255)
|
||||
(fftwf_codelet_t2fv_32_avx 0 #x10048 #x10048 #x0 #x943925ca #xa91c721c #x7ce26e64 #x6c0dac21)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x662ba901 #x5a6ae6e9 #xf9e1a94a #x9c9d4368)
|
||||
(fftwf_codelet_n2fv_8_avx 0 #x10048 #x10048 #x0 #x0c88c289 #x34d63ee3 #xeca9a860 #xae01ca50)
|
||||
(fftwf_codelet_n2bv_64_avx 0 #x10048 #x10048 #x0 #x6c447a57 #x88d0c094 #x74220cbd #xa4af46b7)
|
||||
(fftwf_codelet_t2fv_16_avx 0 #x10048 #x10048 #x0 #x80536cc3 #x5458ebc9 #x6181e146 #x355578d6)
|
||||
(fftwf_rdft_rank0_register 1 #x11048 #x11048 #x0 #xe64bf633 #xa67fdf57 #xf4d05e35 #x27d840d4)
|
||||
(fftwf_codelet_n2bv_8_avx 0 #x10048 #x10048 #x0 #x2f2a8091 #xded841be #xee8d1000 #x418fcb19)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x71c8ab5a #xff5e8f31 #xc29c3d46 #xecfd8c8e)
|
||||
(fftwf_dft_buffered_register 0 #x11048 #x11048 #x0 #x94055af3 #x47c04613 #x7c55788b #x735b3c18)
|
||||
(fftwf_dft_vrank_geq1_register 0 #x10048 #x10048 #x0 #x3fb520e9 #xab95099a #x88162c34 #x7c94252c)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #xec88e263 #x144cb404 #x0619adb6 #x2c028a21)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #x9a96afcb #x72bc20b1 #xe9f58b0a #x8b7d2402)
|
||||
(fftwf_dft_nop_register 0 #x11048 #x11048 #x0 #x7ccc118f #xed40aff8 #x3e3a2bc2 #x415f0622)
|
||||
(fftwf_dft_r2hc_register 0 #x11048 #x11048 #x0 #xb4a3a02c #x91f630fe #x5f920fcb #x7c48f674)
|
||||
(fftwf_rdft_rank0_register 3 #x11048 #x11048 #x0 #x023e96d1 #x7146ba5b #x6e09d5e5 #x172339c7)
|
||||
)
|
||||
@@ -39,6 +39,7 @@
|
||||
// use WIDEBAND_PROCESSOR_DEBUG
|
||||
|
||||
#include "cusdr_dataEngine.h"
|
||||
#include "cusdr_protocol2_profile.h"
|
||||
|
||||
|
||||
/*!
|
||||
@@ -62,6 +63,45 @@ static int firstTimeRxInit;
|
||||
static quint8 adc_rx1_4, adc_rx5_8, adc_rx9_16;
|
||||
static quint8 new_adc_rx1_4, new_adc_rx5_8, new_adc_rx9_16;
|
||||
|
||||
namespace {
|
||||
|
||||
bool invokeDataIOInitFrame(DataIO *dataIO, int rx) {
|
||||
|
||||
if (!dataIO)
|
||||
return false;
|
||||
|
||||
return QMetaObject::invokeMethod(
|
||||
dataIO,
|
||||
"sendInitFramesToNetworkDevice",
|
||||
Qt::BlockingQueuedConnection,
|
||||
Q_ARG(int, rx));
|
||||
}
|
||||
|
||||
bool invokeDataIOStartStop(DataIO *dataIO, char value) {
|
||||
|
||||
if (!dataIO)
|
||||
return false;
|
||||
|
||||
return QMetaObject::invokeMethod(
|
||||
dataIO,
|
||||
"networkDeviceStartStop",
|
||||
Qt::BlockingQueuedConnection,
|
||||
Q_ARG(char, value));
|
||||
}
|
||||
|
||||
bool invokeDataIOStop(DataIO *dataIO) {
|
||||
|
||||
if (!dataIO)
|
||||
return false;
|
||||
|
||||
return QMetaObject::invokeMethod(
|
||||
dataIO,
|
||||
"stop",
|
||||
Qt::BlockingQueuedConnection);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
DataEngine::DataEngine(QObject *parent)
|
||||
: QObject(parent)
|
||||
, set(Settings::instance())
|
||||
@@ -88,6 +128,7 @@ DataEngine::DataEngine(QObject *parent)
|
||||
, m_hpsdrDevices(0)
|
||||
, m_configure(10)
|
||||
, m_timeout(5000)
|
||||
, m_discoveryProtocol(1)
|
||||
, m_remainingTime(0)
|
||||
, m_RxFrequencyChange(0)
|
||||
, m_forwardPower(0)
|
||||
@@ -297,6 +338,12 @@ void DataEngine::setupConnections() {
|
||||
this,
|
||||
SLOT(searchHpsdrNetworkDevices()));
|
||||
|
||||
CHECKED_CONNECT(
|
||||
set,
|
||||
SIGNAL(widebandDataChanged(QObject *, bool)),
|
||||
this,
|
||||
SLOT(setWidebandData(QObject *, bool)));
|
||||
|
||||
/*CHECKED_CONNECT(
|
||||
set,
|
||||
SIGNAL(spectrumAveragingChanged(QObject*, int, bool)),
|
||||
@@ -401,7 +448,7 @@ bool DataEngine::startDataEngineWithoutConnection() {
|
||||
if (!m_dataProcessor) createDataProcessor();
|
||||
|
||||
// data receiver thread
|
||||
if (!startDataIO(QThread::NormalPriority)) {
|
||||
if (!startDataIO(QThread::HighestPriority)) {
|
||||
|
||||
setSystemState(QSDR::DataReceiverThreadError, m_hwInterface, m_serverMode, QSDR::DataEngineDown);
|
||||
return false;
|
||||
@@ -459,33 +506,32 @@ bool DataEngine::startDataEngineWithoutConnection() {
|
||||
|
||||
bool DataEngine::findHPSDRDevices() {
|
||||
|
||||
if (!m_discoverer) createDiscoverer();
|
||||
for (int protocolVersion = 1; protocolVersion <= 2; ++protocolVersion) {
|
||||
|
||||
// HPSDR network IO thread
|
||||
if (!startDiscoverer(QThread::NormalPriority)) {
|
||||
m_discoveryProtocol = protocolVersion;
|
||||
|
||||
if (!m_discoverer)
|
||||
createDiscoverer();
|
||||
|
||||
if (!startDiscoverer(QThread::NormalPriority)) {
|
||||
|
||||
io.networkIOMutex.lock();
|
||||
DATA_ENGINE_DEBUG << "HPSDR device discovery thread could not be started.";
|
||||
io.networkIOMutex.unlock();
|
||||
return false;
|
||||
}
|
||||
|
||||
io.networkIOMutex.lock();
|
||||
DATA_ENGINE_DEBUG << "HPSDR device discovery thread could not be started.";
|
||||
io.networkIOMutex.unlock();
|
||||
return false;
|
||||
}
|
||||
|
||||
io.networkIOMutex.lock();
|
||||
DATA_ENGINE_DEBUG << "HPSDR network device detection...please wait.";
|
||||
set->setSystemMessage("HPSDR network device detection...please wait", 0);
|
||||
io.devicefound.wait(&io.networkIOMutex);
|
||||
|
||||
m_hpsdrDevices = set->getHpsdrNetworkDevices();
|
||||
if (m_hpsdrDevices == 0) {
|
||||
DATA_ENGINE_DEBUG << "HPSDR network device detection...please wait.";
|
||||
set->setSystemMessage("HPSDR network device detection...please wait", 0);
|
||||
io.devicefound.wait(&io.networkIOMutex);
|
||||
|
||||
m_hpsdrDevices = set->getHpsdrNetworkDevices();
|
||||
io.networkIOMutex.unlock();
|
||||
stopDiscoverer();
|
||||
DATA_ENGINE_DEBUG << "no device found. HPSDR hardware powered? Network connection established?";
|
||||
set->setSystemMessage("no device found. HPSDR hardware powered? Network connection established?", 10000);
|
||||
|
||||
setSystemState(QSDR::HwIOError, m_hwInterface, m_serverMode, QSDR::DataEngineDown);
|
||||
}
|
||||
else {
|
||||
if (m_hpsdrDevices == 0)
|
||||
continue;
|
||||
|
||||
emit clearSystemMessageEvent();
|
||||
if (m_hpsdrDevices > 1)
|
||||
@@ -493,31 +539,64 @@ bool DataEngine::findHPSDRDevices() {
|
||||
|
||||
QList<TNetworkDevicecard> metisList = set->getMetisCardsList();
|
||||
DATA_ENGINE_DEBUG << "found " << metisList.count() << " network device(s)";
|
||||
|
||||
for (int i = 0; i < metisList.count(); i++) {
|
||||
|
||||
for (int i = 0; i < metisList.count(); i++) {
|
||||
DATA_ENGINE_DEBUG << "Device "
|
||||
<< i << " @ "
|
||||
<< qPrintable(metisList.at(i).ip_address.toString())
|
||||
//<< " [" << qPrintable((char *) &metisList.at(i).mac_address) << "]";
|
||||
<< " [" << metisList.at(i).mac_address << "]";
|
||||
<< " [" << metisList.at(i).mac_address << "]"
|
||||
<< " P" << metisList.at(i).protocolVersion;
|
||||
}
|
||||
|
||||
io.hpsdrDeviceIPAddress = set->getCurrentMetisCard().ip_address;
|
||||
io.hpsdrDeviceName = set->getCurrentMetisCard().boardName;
|
||||
DATA_ENGINE_DEBUG << "using HPSDR network device at " << qPrintable(io.hpsdrDeviceIPAddress.toString());
|
||||
|
||||
//Sleep(100);
|
||||
SleeperThread::msleep(100);
|
||||
|
||||
// stop the discovery thread
|
||||
io.networkIOMutex.unlock();
|
||||
stopDiscoverer();
|
||||
if (set->getCurrentMetisCard().protocolVersion >= 2) {
|
||||
const TNetworkDevicecard currentDevice = set->getCurrentMetisCard();
|
||||
set->setHPSDRHardware(1);
|
||||
set->setMercuryPresence(false);
|
||||
set->setPenelopePresence(false);
|
||||
set->setPennyLanePresence(false);
|
||||
set->setExcaliburPresence(false);
|
||||
set->setAlexPresence(currentDevice.hasAlex0 || currentDevice.hasAlex1);
|
||||
if (!currentDevice.widebandData && set->getWidebandData())
|
||||
set->setWidebandData(this, false);
|
||||
if (currentDevice.ddcCount > 0 && set->getNumberOfReceivers() > currentDevice.ddcCount)
|
||||
set->setReceivers(this, currentDevice.ddcCount);
|
||||
if (currentDevice.maxDdcSampleRateKsps > 0 || currentDevice.minDdcSampleRateKsps > 0) {
|
||||
const int supportedRates[] = {48000, 96000, 192000, 384000, 768000, 1536000};
|
||||
const int minRate = currentDevice.minDdcSampleRateKsps > 0 ? currentDevice.minDdcSampleRateKsps * 1000 : 48000;
|
||||
const int maxRate = currentDevice.maxDdcSampleRateKsps > 0 ? currentDevice.maxDdcSampleRateKsps * 1000 : 1536000;
|
||||
int fallbackRate = 0;
|
||||
for (unsigned int i = 0; i < sizeof(supportedRates) / sizeof(supportedRates[0]); ++i) {
|
||||
if (supportedRates[i] >= minRate && supportedRates[i] <= maxRate) {
|
||||
if (fallbackRate == 0)
|
||||
fallbackRate = supportedRates[i];
|
||||
if (supportedRates[i] <= set->getSampleRate())
|
||||
fallbackRate = supportedRates[i];
|
||||
}
|
||||
}
|
||||
if (fallbackRate == 0)
|
||||
fallbackRate = 48000;
|
||||
if (set->getSampleRate() < minRate || set->getSampleRate() > maxRate)
|
||||
set->setSampleRate(this, fallbackRate);
|
||||
}
|
||||
io.hermesFW = set->getCurrentMetisCard().firmwareVersion;
|
||||
set->setHermesVersion(io.hermesFW);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (getFirmwareVersions()) return true;
|
||||
if (getFirmwareVersions())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
DATA_ENGINE_DEBUG << "no device found. HPSDR hardware powered? Network connection established?";
|
||||
set->setSystemMessage("no device found. HPSDR hardware powered? Network connection established?", 10000);
|
||||
setSystemState(QSDR::HwIOError, m_hwInterface, m_serverMode, QSDR::DataEngineDown);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -571,7 +650,7 @@ bool DataEngine::getFirmwareVersions() {
|
||||
}
|
||||
|
||||
// data IO thread
|
||||
if (!startDataIO(QThread::NormalPriority)) {// ::NormalPriority)) {
|
||||
if (!startDataIO(QThread::HighestPriority)) {// ::NormalPriority)) {
|
||||
|
||||
DATA_ENGINE_DEBUG << "data IO thread could not be started.";
|
||||
return false;
|
||||
@@ -580,12 +659,15 @@ bool DataEngine::getFirmwareVersions() {
|
||||
//setSampleRate(this, set->getSampleRate());
|
||||
SleeperThread::msleep(100);
|
||||
|
||||
// pre-conditioning
|
||||
for (int i = 0; i < io.receivers; i++)
|
||||
m_dataIO->sendInitFramesToNetworkDevice(i);
|
||||
|
||||
if (m_serverMode == QSDR::SDRMode)
|
||||
m_dataIO->networkDeviceStartStop(0x01); // 0x01 for starting Metis without wide band data
|
||||
// pre-conditioning
|
||||
const bool protocol2Active = (set->getCurrentMetisCard().protocolVersion >= 2);
|
||||
if (!protocol2Active) {
|
||||
for (int i = 0; i < io.receivers; i++)
|
||||
invokeDataIOInitFrame(m_dataIO, i);
|
||||
}
|
||||
|
||||
if (m_serverMode == QSDR::SDRMode)
|
||||
invokeDataIOStartStop(m_dataIO, 0x01); // 0x01 for starting Metis without wide band data
|
||||
|
||||
m_networkDeviceRunning = true;
|
||||
setSystemState(QSDR::NoError, m_hwInterface, m_serverMode, QSDR::DataEngineUp);
|
||||
@@ -968,7 +1050,7 @@ bool DataEngine::start() {
|
||||
}
|
||||
|
||||
// data IO thread
|
||||
if (!startDataIO(QThread::NormalPriority)) {// ::NormalPriority::HighPriority)) {
|
||||
if (!startDataIO(QThread::HighestPriority)) {// ::NormalPriority::HighPriority)) {
|
||||
|
||||
DATA_ENGINE_DEBUG << "data IO thread could not be started.";
|
||||
return false;
|
||||
@@ -987,13 +1069,16 @@ bool DataEngine::start() {
|
||||
SleeperThread::msleep(100);
|
||||
|
||||
// pre-conditioning
|
||||
for (int i = 0; i < io.receivers; i++)
|
||||
m_dataIO->sendInitFramesToNetworkDevice(i);
|
||||
const bool protocol2Active = (set->getCurrentMetisCard().protocolVersion >= 2);
|
||||
if (!protocol2Active) {
|
||||
for (int i = 0; i < io.receivers; i++)
|
||||
invokeDataIOInitFrame(m_dataIO, i);
|
||||
}
|
||||
|
||||
if (m_serverMode == QSDR::SDRMode && set->getWidebandData())
|
||||
m_dataIO->networkDeviceStartStop(0x03); // 0x03 for starting the device with wide band data
|
||||
invokeDataIOStartStop(m_dataIO, 0x03); // 0x03 for starting the device with wide band data
|
||||
else
|
||||
m_dataIO->networkDeviceStartStop(0x01); // 0x01 for starting the device without wide band data
|
||||
invokeDataIOStartStop(m_dataIO, 0x01); // 0x01 for starting the device without wide band data
|
||||
|
||||
m_networkDeviceRunning = true;
|
||||
|
||||
@@ -1017,10 +1102,10 @@ void DataEngine::stop() {
|
||||
// turn time stamping off
|
||||
setTimeStamp(this, false);
|
||||
|
||||
// stop the device
|
||||
m_dataIO->networkDeviceStartStop(0);
|
||||
m_networkDeviceRunning = false;
|
||||
DATA_ENGINE_DEBUG << "HPSDR device stopped";
|
||||
// stop the device
|
||||
invokeDataIOStartStop(m_dataIO, 0);
|
||||
m_networkDeviceRunning = false;
|
||||
DATA_ENGINE_DEBUG << "HPSDR device stopped";
|
||||
|
||||
// stop the threads
|
||||
//SleeperThread::msleep(100);
|
||||
@@ -1434,7 +1519,10 @@ void DataEngine::disconnectDSPSlots() {
|
||||
|
||||
void DataEngine::createDiscoverer() {
|
||||
|
||||
m_discoverer = new DiscovererP1(&io);
|
||||
if (m_discoveryProtocol >= 2)
|
||||
m_discoverer = new DiscovererP2(&io);
|
||||
else
|
||||
m_discoverer = new DiscovererP1(&io);
|
||||
|
||||
m_discoveryThread = new QThreadEx();
|
||||
m_discoverer->moveToThread(m_discoveryThread);
|
||||
@@ -1570,7 +1658,7 @@ void DataEngine::stopDataIO() {
|
||||
|
||||
if (m_dataIOThread->isRunning()) {
|
||||
|
||||
m_dataIO->stop();
|
||||
invokeDataIOStop(m_dataIO);
|
||||
m_dataIOThread->quit();
|
||||
|
||||
while (!m_dataIOThread->isFinished()) {
|
||||
@@ -2114,23 +2202,29 @@ float DataEngine::getFilterSizeCalibrationOffset() {
|
||||
|
||||
void DataEngine::searchHpsdrNetworkDevices() {
|
||||
|
||||
if (!m_discoverer) createDiscoverer();
|
||||
for (int protocolVersion = 1; protocolVersion <= 2; ++protocolVersion) {
|
||||
|
||||
// HPSDR network IO thread
|
||||
if (!startDiscoverer(QThread::NormalPriority)) {
|
||||
m_discoveryProtocol = protocolVersion;
|
||||
|
||||
DATA_ENGINE_DEBUG << "HPSDR network discovery thread could not be started.";
|
||||
return;
|
||||
if (!m_discoverer)
|
||||
createDiscoverer();
|
||||
|
||||
if (!startDiscoverer(QThread::NormalPriority)) {
|
||||
|
||||
DATA_ENGINE_DEBUG << "HPSDR network discovery thread could not be started.";
|
||||
return;
|
||||
}
|
||||
|
||||
io.networkIOMutex.lock();
|
||||
io.devicefound.wait(&io.networkIOMutex);
|
||||
const int devicesFound = set->getHpsdrNetworkDevices();
|
||||
io.networkIOMutex.unlock();
|
||||
|
||||
stopDiscoverer();
|
||||
|
||||
if (devicesFound > 0)
|
||||
return;
|
||||
}
|
||||
|
||||
io.networkIOMutex.lock();
|
||||
io.devicefound.wait(&io.networkIOMutex);
|
||||
|
||||
//m_discoverer->findHPSDRDevices();
|
||||
|
||||
// stop the discovery thread
|
||||
io.networkIOMutex.unlock();
|
||||
stopDiscoverer();
|
||||
}
|
||||
|
||||
void DataEngine::setHPSDRDeviceNumber(int value) {
|
||||
@@ -2197,6 +2291,18 @@ void DataEngine::setSampleRate(QObject *sender, int value) {
|
||||
io.outputMultiplier = 8;
|
||||
break;
|
||||
|
||||
case 768000:
|
||||
io.samplerate = value;
|
||||
io.speed = 3;
|
||||
io.outputMultiplier = 16;
|
||||
break;
|
||||
|
||||
case 1536000:
|
||||
io.samplerate = value;
|
||||
io.speed = 3;
|
||||
io.outputMultiplier = 32;
|
||||
break;
|
||||
|
||||
default:
|
||||
DATA_ENGINE_DEBUG << "invalid sample rate !\n";
|
||||
stop();
|
||||
@@ -2505,6 +2611,19 @@ void DataEngine::setFrequency(QObject* sender, int mode, int rx, long frequency)
|
||||
io.tx_freq_change = rx;
|
||||
}
|
||||
|
||||
void DataEngine::setWidebandData(QObject *sender, bool value) {
|
||||
Q_UNUSED(sender)
|
||||
|
||||
if (m_dataEngineState != QSDR::DataEngineUp || !m_dataIO)
|
||||
return;
|
||||
|
||||
const TNetworkDevicecard device = set->getCurrentMetisCard();
|
||||
if (device.protocolVersion >= 2)
|
||||
return;
|
||||
|
||||
invokeDataIOStartStop(m_dataIO, value ? 0x03 : 0x01);
|
||||
}
|
||||
|
||||
void DataEngine::loadWavFile(const QString &fileName) {
|
||||
|
||||
if (m_audioEngine->loadFile(fileName))
|
||||
@@ -3587,6 +3706,9 @@ void DataProcessor::encodeCCBytes() {
|
||||
|
||||
void DataProcessor::writeData() {
|
||||
|
||||
if (set->getCurrentMetisCard().protocolVersion >= 2)
|
||||
return;
|
||||
|
||||
if (m_setNetworkDeviceHeader) {
|
||||
|
||||
//RRK updated for 4byte int and network order
|
||||
@@ -3783,8 +3905,8 @@ void WideBandDataProcessor::processWideBandInputBuffer(const QByteArray &buffer)
|
||||
|
||||
for (int i = 0; i < length; i += 2) {
|
||||
|
||||
s = (int)((qint8 ) buffer.at(i+1)) << 8;
|
||||
s += (int)((quint8) buffer.at(i));
|
||||
s = (int)((qint8 ) buffer.at(i)) << 8;
|
||||
s += (int)((quint8) buffer.at(i+1));
|
||||
sample = (float)(s * norm);
|
||||
|
||||
cpxWBIn[i/2].re = sample * io->wbWindow.at(i/2);
|
||||
|
||||
@@ -47,9 +47,10 @@
|
||||
#include "cusdr_dataIO.h"
|
||||
#include "cusdr_receiver.h"
|
||||
#include "cusdr_chirpProcessor.h"
|
||||
#include "cusdr_audioReceiver.h"
|
||||
#include "cusdr_discoverer_P1.h"
|
||||
#include "Util/qcircularbuffer.h"
|
||||
#include "cusdr_audioReceiver.h"
|
||||
#include "cusdr_discoverer_P1.h"
|
||||
#include "cusdr_discoverer_P2.h"
|
||||
#include "Util/qcircularbuffer.h"
|
||||
#include "QtDSP/qtdsp_fft.h"
|
||||
#include "QtDSP/qtdsp_filter.h"
|
||||
#include "QtDSP/qtdsp_dualModeAverager.h"
|
||||
@@ -140,11 +141,12 @@ public slots:
|
||||
void set122_88MhzSource(QObject *sender, int source);
|
||||
void setMicSource(QObject *sender, int source);
|
||||
void setMercuryClass(QObject *sender, int value);
|
||||
void setMercuryTiming(QObject* sender, int value);
|
||||
void setHamBand(QObject *sender, int rx, bool byBtn, HamBand band);
|
||||
void setFrequency(QObject* sender, int mode, int rx, long frequency);
|
||||
|
||||
void loadWavFile(const QString &fileName);
|
||||
void setMercuryTiming(QObject* sender, int value);
|
||||
void setHamBand(QObject *sender, int rx, bool byBtn, HamBand band);
|
||||
void setFrequency(QObject* sender, int mode, int rx, long frequency);
|
||||
void setWidebandData(QObject *sender, bool value);
|
||||
|
||||
void loadWavFile(const QString &fileName);
|
||||
void suspend();
|
||||
void startPlayback();
|
||||
void showSettingsDialog();
|
||||
@@ -198,7 +200,7 @@ private:
|
||||
AudioEngine* m_audioEngine;
|
||||
AudioOutProcessor* m_audioOutProcessor;
|
||||
ChirpProcessor* m_chirpProcessor;
|
||||
DiscovererP1* m_discoverer;
|
||||
QObject* m_discoverer;
|
||||
|
||||
QThreadEx* m_discoveryThread;
|
||||
QThreadEx* m_dataIOThread;
|
||||
@@ -256,9 +258,10 @@ private:
|
||||
int m_fwCount;
|
||||
int m_configure;
|
||||
int m_timeout;
|
||||
int m_txFrame;
|
||||
int m_bytes;
|
||||
int m_remainingTime;
|
||||
int m_txFrame;
|
||||
int m_bytes;
|
||||
int m_discoveryProtocol;
|
||||
int m_remainingTime;
|
||||
int m_found;
|
||||
int m_RxFrequencyChange;
|
||||
int m_counter;
|
||||
|
||||
@@ -24,9 +24,8 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#define LOG_DATAIO
|
||||
|
||||
#include "cusdr_dataIO.h"
|
||||
#include "cusdr_protocol2_io.h"
|
||||
#include "soundout.h"
|
||||
|
||||
#if defined(Q_OS_WIN32)
|
||||
@@ -41,6 +40,7 @@ DataIO::DataIO(THPSDRParameter *ioData)
|
||||
, set(Settings::instance())
|
||||
, io(ioData)
|
||||
, m_dataIOSocketOn(false)
|
||||
, m_protocol2(0)
|
||||
, m_setNetworkDeviceHeader(true)
|
||||
, m_sequence(0)
|
||||
, m_oldSequence(-1)
|
||||
@@ -56,6 +56,7 @@ DataIO::DataIO(THPSDRParameter *ioData)
|
||||
, m_stopped(false)
|
||||
{
|
||||
m_dataIOSocket = 0;
|
||||
m_protocol2 = new Protocol2DataPath(set, io, this);
|
||||
|
||||
m_metisGetDataSignature.resize(3);
|
||||
m_metisGetDataSignature[0] = (char)0xEF;
|
||||
@@ -106,11 +107,17 @@ DataIO::DataIO(THPSDRParameter *ioData)
|
||||
|
||||
DataIO::~DataIO() {
|
||||
|
||||
if (m_dataIOSocketOn) {
|
||||
if (m_dataIOSocketOn && m_dataIOSocket) {
|
||||
m_dataIOSocket->close();
|
||||
delete m_dataIOSocket;
|
||||
m_dataIOSocket = 0;
|
||||
}
|
||||
|
||||
if (m_pSoundCardOut) {
|
||||
m_pSoundCardOut->Stop();
|
||||
delete m_pSoundCardOut;
|
||||
m_pSoundCardOut = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void DataIO::stop() {
|
||||
@@ -119,15 +126,20 @@ void DataIO::stop() {
|
||||
m_stopped = true;
|
||||
io->networkIOMutex.unlock();
|
||||
|
||||
if(m_pSoundCardOut) {
|
||||
if (m_protocol2 && m_protocol2->isActive())
|
||||
m_protocol2->stop();
|
||||
|
||||
if (m_pSoundCardOut)
|
||||
SleeperThread::msleep(100);
|
||||
m_pSoundCardOut->Stop();
|
||||
delete m_pSoundCardOut;
|
||||
}
|
||||
}
|
||||
|
||||
void DataIO::initDataReceiverSocket() {
|
||||
|
||||
if (m_protocol2 && m_protocol2->isActive()) {
|
||||
m_dataIOSocketOn = m_protocol2->initSockets();
|
||||
return;
|
||||
}
|
||||
|
||||
m_dataIOSocket = new QUdpSocket();
|
||||
|
||||
int newBufferSize;
|
||||
@@ -141,7 +153,21 @@ void DataIO::initDataReceiverSocket() {
|
||||
}
|
||||
else {
|
||||
|
||||
if (io->samplerate == 384000) {
|
||||
if (io->samplerate == 1536000) {
|
||||
|
||||
newBufferSize = 512*1024;//512 * 1032;
|
||||
io->networkIOMutex.lock();
|
||||
DATAIO_DEBUG << "socket buffer size set to 512 kB.";
|
||||
io->networkIOMutex.unlock();
|
||||
}
|
||||
else if (io->samplerate == 768000) {
|
||||
|
||||
newBufferSize = 256*1024;//256 * 1032;
|
||||
io->networkIOMutex.lock();
|
||||
DATAIO_DEBUG << "socket buffer size set to 256 kB.";
|
||||
io->networkIOMutex.unlock();
|
||||
}
|
||||
else if (io->samplerate == 384000) {
|
||||
|
||||
newBufferSize = 128*1024;//128 * 1032;
|
||||
io->networkIOMutex.lock();
|
||||
@@ -171,9 +197,27 @@ void DataIO::initDataReceiverSocket() {
|
||||
}
|
||||
}
|
||||
|
||||
if (m_dataIOSocket->bind(QHostAddress(set->getHPSDRDeviceLocalAddr()),
|
||||
set->getMetisPort(),
|
||||
QUdpSocket::DontShareAddress))
|
||||
const QHostAddress localAddress(set->getHPSDRDeviceLocalAddr());
|
||||
const quint16 requestedPort = set->getMetisPort();
|
||||
bool socketBound = m_dataIOSocket->bind(localAddress,
|
||||
requestedPort,
|
||||
QUdpSocket::DontShareAddress);
|
||||
|
||||
if (!socketBound && requestedPort != 0) {
|
||||
io->networkIOMutex.lock();
|
||||
DATAIO_DEBUG << "data receiver socket binding failed on port " << requestedPort
|
||||
<< ", trying an ephemeral local port.";
|
||||
io->networkIOMutex.unlock();
|
||||
|
||||
m_dataIOSocket->close();
|
||||
socketBound = m_dataIOSocket->bind(localAddress,
|
||||
0,
|
||||
QUdpSocket::DontShareAddress);
|
||||
if (socketBound)
|
||||
set->setMetisPort(this, m_dataIOSocket->localPort());
|
||||
}
|
||||
|
||||
if (socketBound)
|
||||
//QUdpSocket::ReuseAddressHint | QUdpSocket::ShareAddress))
|
||||
{
|
||||
|
||||
@@ -230,6 +274,9 @@ void DataIO::initDataReceiverSocket() {
|
||||
|
||||
void DataIO::readDeviceData() {
|
||||
|
||||
if (m_protocol2 && m_protocol2->isActive())
|
||||
return;
|
||||
|
||||
while (m_dataIOSocket->hasPendingDatagrams()) {
|
||||
|
||||
QMutexLocker locker(&io->networkIOMutex);
|
||||
@@ -357,6 +404,11 @@ void DataIO::readData() {
|
||||
|
||||
void DataIO::sendInitFramesToNetworkDevice(int rx) {
|
||||
|
||||
if (m_protocol2 && m_protocol2->isActive()) {
|
||||
m_protocol2->sendInitFramesToNetworkDevice(rx);
|
||||
return;
|
||||
}
|
||||
|
||||
QByteArray initDatagram;
|
||||
initDatagram.resize(1032);
|
||||
|
||||
@@ -446,6 +498,11 @@ void DataIO::sendInitFramesToNetworkDevice(int rx) {
|
||||
|
||||
void DataIO::networkDeviceStartStop(char value) {
|
||||
|
||||
if (m_protocol2 && m_protocol2->isActive()) {
|
||||
m_protocol2->networkDeviceStartStop(value);
|
||||
return;
|
||||
}
|
||||
|
||||
TNetworkDevicecard metis = set->getCurrentMetisCard();
|
||||
//QUdpSocket socket;
|
||||
|
||||
@@ -517,6 +574,9 @@ void DataIO::sendAudio(u_char *buf) {
|
||||
|
||||
void DataIO::writeData() {
|
||||
|
||||
if (m_protocol2 && m_protocol2->isActive())
|
||||
return;
|
||||
|
||||
if (m_setNetworkDeviceHeader) {
|
||||
|
||||
m_outDatagram.resize(0);
|
||||
@@ -561,6 +621,9 @@ void DataIO::setManualSocketBufferSize(QObject *sender, bool value) {
|
||||
|
||||
Q_UNUSED (sender)
|
||||
|
||||
if (m_protocol2 && m_protocol2->isActive())
|
||||
return;
|
||||
|
||||
m_manualBufferSize = value;
|
||||
DATAIO_DEBUG << "m_manualBufferSize to change = " << m_manualBufferSize;
|
||||
int socketBufferSize = 1032 * set->getSocketBufferSize();
|
||||
@@ -601,6 +664,9 @@ void DataIO::setSocketBufferSize(QObject *sender, int value) {
|
||||
|
||||
Q_UNUSED (sender)
|
||||
|
||||
if (m_protocol2 && m_protocol2->isActive())
|
||||
return;
|
||||
|
||||
int socketBufferSize = value * 1024;
|
||||
DATAIO_DEBUG << "m_socketBufferSize = " << value;
|
||||
|
||||
@@ -621,6 +687,9 @@ void DataIO::setSampleRate(QObject *sender, int value) {
|
||||
|
||||
Q_UNUSED(sender)
|
||||
|
||||
if (m_protocol2 && m_protocol2->isActive())
|
||||
return;
|
||||
|
||||
int bufferSize;
|
||||
io->networkIOMutex.lock();
|
||||
switch (value) {
|
||||
@@ -645,6 +714,16 @@ void DataIO::setSampleRate(QObject *sender, int value) {
|
||||
DATAIO_DEBUG << "socket buffer size set to 128 kB.";
|
||||
break;
|
||||
|
||||
case 768000:
|
||||
bufferSize = 256*1024;//256 * 1032
|
||||
DATAIO_DEBUG << "socket buffer size set to 256 kB.";
|
||||
break;
|
||||
|
||||
case 1536000:
|
||||
bufferSize = 512*1024;//512 * 1032
|
||||
DATAIO_DEBUG << "socket buffer size set to 512 kB.";
|
||||
break;
|
||||
|
||||
default:
|
||||
DATAIO_DEBUG << "invalid sample rate !\n";
|
||||
break;
|
||||
|
||||
@@ -36,8 +36,8 @@
|
||||
//#include <QWaitCondition>
|
||||
//#include <QThread>
|
||||
|
||||
#include "cusdr_settings.h"
|
||||
#include "soundout.h"
|
||||
#include "cusdr_settings.h"
|
||||
#include "soundout.h"
|
||||
|
||||
#ifdef LOG_DATAIO
|
||||
# define DATAIO_DEBUG qDebug().nospace() << "DataIO::\t"
|
||||
@@ -46,7 +46,7 @@
|
||||
#endif
|
||||
|
||||
|
||||
class DataIO : public QObject {
|
||||
class DataIO : public QObject {
|
||||
|
||||
Q_OBJECT
|
||||
|
||||
@@ -71,10 +71,11 @@ private slots:
|
||||
void setSocketBufferSize(QObject *sender, int value);
|
||||
void readDeviceData();
|
||||
|
||||
private:
|
||||
Settings* set;
|
||||
QUdpSocket* m_dataIOSocket;
|
||||
//QMutex m_mutex;
|
||||
private:
|
||||
Settings* set;
|
||||
QUdpSocket* m_dataIOSocket;
|
||||
class Protocol2DataPath* m_protocol2;
|
||||
//QMutex m_mutex;
|
||||
QByteArray m_commandDatagram;
|
||||
QByteArray m_datagram;
|
||||
QByteArray m_wbDatagram;
|
||||
|
||||
@@ -226,6 +226,28 @@ int DiscovererP1::findHPSDRDevices() {
|
||||
|
||||
mcP1.boardID = no;
|
||||
mcP1.boardName = str;
|
||||
mcP1.protocolVersion = 1;
|
||||
mcP1.firmwareVersion = m_deviceDatagram.at(9) & 0xFF;
|
||||
mcP1.adcCount = 0;
|
||||
mcP1.ddcCount = 0;
|
||||
mcP1.dspClockHz = 0;
|
||||
mcP1.individualDdcSampleRates = false;
|
||||
mcP1.minDdcSampleRateKsps = 48;
|
||||
mcP1.maxDdcSampleRateKsps = 384;
|
||||
mcP1.widebandData = false;
|
||||
mcP1.widebandSamplesPerPacket = 0;
|
||||
mcP1.widebandBitsPerSample = 0;
|
||||
mcP1.ducCount = 1;
|
||||
mcP1.ducSampleRateKsps = 48;
|
||||
mcP1.ducBitsPerSample = 24;
|
||||
mcP1.ducSamplesPerPacket = 0;
|
||||
mcP1.iqFormatFlags = 0;
|
||||
mcP1.phaseWords = false;
|
||||
mcP1.ducPhaseWords = false;
|
||||
mcP1.ddcAttenuator = false;
|
||||
mcP1.ducRxAttenuator = false;
|
||||
mcP1.hasAlex0 = false;
|
||||
mcP1.hasAlex1 = false;
|
||||
io->networkIOMutex.lock();
|
||||
DISCOVERER_DEBUG << "Device board ID: " << no;
|
||||
DISCOVERER_DEBUG << "Device is: " << qPrintable(str);
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#define LOG_DISCOVERER
|
||||
|
||||
#include "cusdr_discoverer_P2.h"
|
||||
#include "cusdr_protocol2_profile.h"
|
||||
#include "Util/cusdr_buttons.h"
|
||||
|
||||
|
||||
@@ -185,10 +186,14 @@ int DiscovererP2::findHPSDRDevices() {
|
||||
m_deviceDatagram.resize(socket.pendingDatagramSize());
|
||||
socket.readDatagram(m_deviceDatagram.data(), m_deviceDatagram.size(), &mcP2.ip_address, &port);
|
||||
|
||||
if (m_deviceDatagram[0] == (char)0 && m_deviceDatagram[1] == (char)0 && m_deviceDatagram[2] == (char)0 && m_deviceDatagram[3] == (char)0) {
|
||||
if (m_deviceDatagram.size() >= 14 &&
|
||||
m_deviceDatagram[0] == (char)0 &&
|
||||
m_deviceDatagram[1] == (char)0 &&
|
||||
m_deviceDatagram[2] == (char)0 &&
|
||||
m_deviceDatagram[3] == (char)0) {
|
||||
status = m_deviceDatagram[4] & 0xFF;
|
||||
|
||||
if (status == 2 || status == 3) {
|
||||
if (status == 2 || status == 3 || status == 0xFE || status == 0xFF) {
|
||||
|
||||
sprintf(mcP2.mac_address, "%02X:%02X:%02X:%02X:%02X:%02X",
|
||||
m_deviceDatagram[5] & 0xFF, m_deviceDatagram[6] & 0xFF, m_deviceDatagram[7] & 0xFF,
|
||||
@@ -196,41 +201,87 @@ int DiscovererP2::findHPSDRDevices() {
|
||||
|
||||
io->networkIOMutex.lock();
|
||||
DISCOVERER_DEBUG << "Device on protocol 2 found at " << qPrintable(mcP2.ip_address.toString()) << ":" << port << "; Mac addr: [" << mcP2.mac_address << "]";
|
||||
DISCOVERER_DEBUG << "Device protocol 2 code version: " << qPrintable(QString::number(m_deviceDatagram[13], 10));
|
||||
DISCOVERER_DEBUG << "Device protocol 2 code version: " << qPrintable(QString::number(m_deviceDatagram[13] & 0xFF, 10));
|
||||
io->networkIOMutex.unlock();
|
||||
|
||||
device = m_deviceDatagram[11] & 0xFF;
|
||||
QString str;
|
||||
if (device == 0)
|
||||
str = "ATLAS";
|
||||
else if (device == 1)
|
||||
str = "HERMES_ANAN-10_100)";
|
||||
else if (device == 2)
|
||||
str = "HERMES_ANAN_10E_100B)";
|
||||
else if (device == 3)
|
||||
str = "ANGELA_ANAN_100D)";
|
||||
else if (device == 4)
|
||||
str = "ORION_ANAN_200D)";
|
||||
else if (device == 5)
|
||||
str = "ORION_Mk_II_ANAN-7_8000DLE)";
|
||||
else if (device == 6) {
|
||||
str = "Hermes-Lite";
|
||||
}
|
||||
const Protocol2BoardProfile profile = protocol2BoardProfile(device);
|
||||
QString str = profile.boardName;
|
||||
|
||||
mcP2.boardID = device;
|
||||
mcP2.boardName = str;
|
||||
mcP2.protocolVersion = m_deviceDatagram[12] & 0xFF;
|
||||
mcP2.firmwareVersion = m_deviceDatagram[13] & 0xFF;
|
||||
mcP2.adcCount = profile.adcCount;
|
||||
mcP2.ddcCount = profile.defaultDdcCount;
|
||||
mcP2.dspClockHz = profile.dspClockHz;
|
||||
mcP2.individualDdcSampleRates = profile.individualDdcSampleRates;
|
||||
mcP2.minDdcSampleRateKsps = profile.minDdcSampleRateKsps;
|
||||
mcP2.maxDdcSampleRateKsps = profile.maxDdcSampleRateKsps;
|
||||
mcP2.widebandData = profile.widebandData;
|
||||
mcP2.widebandSamplesPerPacket = profile.widebandSamplesPerPacket;
|
||||
mcP2.widebandBitsPerSample = profile.widebandBitsPerSample;
|
||||
mcP2.ducCount = profile.ducCount;
|
||||
mcP2.ducSampleRateKsps = profile.ducSampleRateKsps;
|
||||
mcP2.ducBitsPerSample = profile.ducBitsPerSample;
|
||||
mcP2.ducSamplesPerPacket = profile.ducSamplesPerPacket;
|
||||
mcP2.iqFormatFlags = 0;
|
||||
mcP2.phaseWords = profile.phaseWords;
|
||||
mcP2.ducPhaseWords = profile.ducPhaseWords;
|
||||
mcP2.ddcAttenuator = profile.ddcAttenuator;
|
||||
mcP2.ducRxAttenuator = profile.ducRxAttenuator;
|
||||
mcP2.hasAlex0 = profile.hasAlex0;
|
||||
mcP2.hasAlex1 = profile.hasAlex1;
|
||||
|
||||
if (m_deviceDatagram.size() >= 25) {
|
||||
mcP2.ddcCount = m_deviceDatagram[20] & 0xFF;
|
||||
mcP2.phaseWords = (m_deviceDatagram[21] & 0xFF) != 0;
|
||||
mcP2.iqFormatFlags = m_deviceDatagram[22] & 0xFF;
|
||||
}
|
||||
|
||||
if (m_deviceDatagram.size() >= 97 && (m_deviceDatagram[4] & 0xFF) >= 0xFE) {
|
||||
mcP2.ddcCount = m_deviceDatagram[39] & 0xFF;
|
||||
mcP2.phaseWords = (m_deviceDatagram[40] & 0x01) != 0;
|
||||
mcP2.ddcAttenuator = (m_deviceDatagram[41] & 0x01) != 0;
|
||||
mcP2.widebandData = (m_deviceDatagram[42] & 0x01) != 0;
|
||||
mcP2.widebandSamplesPerPacket =
|
||||
((m_deviceDatagram[43] & 0xFF) << 8) | (m_deviceDatagram[44] & 0xFF);
|
||||
mcP2.widebandBitsPerSample = m_deviceDatagram[46] & 0xFF;
|
||||
mcP2.individualDdcSampleRates = (m_deviceDatagram[51] & 0x01) != 0;
|
||||
mcP2.minDdcSampleRateKsps =
|
||||
((m_deviceDatagram[52] & 0xFF) << 8) | (m_deviceDatagram[53] & 0xFF);
|
||||
mcP2.maxDdcSampleRateKsps =
|
||||
((m_deviceDatagram[54] & 0xFF) << 8) | (m_deviceDatagram[55] & 0xFF);
|
||||
mcP2.ducCount = m_deviceDatagram[70] & 0xFF;
|
||||
mcP2.ducPhaseWords = (m_deviceDatagram[78] & 0x01) != 0;
|
||||
mcP2.ducSampleRateKsps = m_deviceDatagram[79] & 0xFF;
|
||||
mcP2.ducBitsPerSample = m_deviceDatagram[80] & 0xFF;
|
||||
mcP2.ducSamplesPerPacket =
|
||||
((m_deviceDatagram[81] & 0xFF) << 8) | (m_deviceDatagram[82] & 0xFF);
|
||||
mcP2.ducRxAttenuator = (m_deviceDatagram[92] & 0x01) != 0;
|
||||
}
|
||||
|
||||
io->networkIOMutex.lock();
|
||||
DISCOVERER_DEBUG << "Protocol 2 device board ID: " << device;
|
||||
DISCOVERER_DEBUG << "Protocol 2 device is: " << qPrintable(str);
|
||||
DISCOVERER_DEBUG << "Protocol 2 capabilities: "
|
||||
<< mcP2.adcCount << " ADC, "
|
||||
<< mcP2.ddcCount << " DDC, DDC rate "
|
||||
<< mcP2.minDdcSampleRateKsps << "-"
|
||||
<< mcP2.maxDdcSampleRateKsps
|
||||
<< " ksps, phaseWords="
|
||||
<< mcP2.phaseWords
|
||||
<< ", DUC " << mcP2.ducSampleRateKsps
|
||||
<< " ksps/" << mcP2.ducBitsPerSample
|
||||
<< " bit, wideband="
|
||||
<< mcP2.widebandData
|
||||
<< ", iqFlags=0x"
|
||||
<< QString::number(mcP2.iqFormatFlags, 16);
|
||||
io->networkIOMutex.unlock();
|
||||
|
||||
m_deviceCards.append(mcP2);
|
||||
|
||||
str += " (";
|
||||
str += mcP2.ip_address.toString();
|
||||
str += ")";
|
||||
|
||||
set->addNetworkIOComboBoxEntry(str);
|
||||
set->addNetworkIOComboBoxEntry(protocol2DeviceSummary(mcP2));
|
||||
devicesFound++;
|
||||
}
|
||||
else {
|
||||
@@ -274,20 +325,11 @@ void DiscovererP2::clear() {
|
||||
|
||||
void DiscovererP2::shutdownHPSDRDevice() {
|
||||
|
||||
long sequence = 0;
|
||||
QByteArray arr;
|
||||
arr.resize(1444);
|
||||
|
||||
arr[0] = sequence >> 24;
|
||||
arr[1] = sequence >> 16;
|
||||
arr[2] = sequence >> 8;
|
||||
arr[3] = sequence;
|
||||
arr[4] = 0;
|
||||
QByteArray arr(1444, 0x00);
|
||||
|
||||
QUdpSocket socket;
|
||||
QHostAddress addr = mcP2.ip_address;
|
||||
|
||||
if (socket.writeDatagram(arr, addr, HIGH_PRIORITY_FROM_HOST_PORT) < 0) {
|
||||
DISCOVERER_DEBUG << "protocol 2 forced shutdown socket write failed.";
|
||||
}
|
||||
if (socket.writeDatagram(arr, addr, HIGH_PRIORITY_FROM_HOST_PORT) < 0)
|
||||
DISCOVERER_DEBUG << "protocol 2 forced shutdown socket write failed.";
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,137 @@
|
||||
/**
|
||||
* @file cusdr_protocol2_io.h
|
||||
* @brief openHPSDR Protocol 2 transport helper
|
||||
*/
|
||||
|
||||
#ifndef _CUSDR_PROTOCOL2_IO_H
|
||||
#define _CUSDR_PROTOCOL2_IO_H
|
||||
|
||||
#include "cusdr_settings.h"
|
||||
|
||||
#include <QHash>
|
||||
#include <QList>
|
||||
#include <QMutex>
|
||||
#include <QSet>
|
||||
#include <QThread>
|
||||
#include <QTimer>
|
||||
#include <QUdpSocket>
|
||||
|
||||
struct Protocol2IQSample {
|
||||
qint32 i;
|
||||
qint32 q;
|
||||
};
|
||||
|
||||
class Protocol2ReceiveThread;
|
||||
|
||||
class Protocol2DataPath : public QObject {
|
||||
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
Protocol2DataPath(Settings *settings, THPSDRParameter *ioData, QObject *parent = 0);
|
||||
~Protocol2DataPath();
|
||||
|
||||
bool isActive() const;
|
||||
bool initSockets();
|
||||
void stop();
|
||||
void sendInitFramesToNetworkDevice(int rx);
|
||||
void networkDeviceStartStop(char value);
|
||||
|
||||
private slots:
|
||||
void readCommandData();
|
||||
void readStatusData();
|
||||
void readDdcData();
|
||||
void readWidebandData();
|
||||
void sendHeartbeat();
|
||||
void handleNumberOfRxChanged(QObject *sender, int value);
|
||||
void handleSampleRateChanged(QObject *sender, int value);
|
||||
void handleDitherChanged(QObject *sender, int value);
|
||||
void handleRandomChanged(QObject *sender, int value);
|
||||
void handleCtrFrequencyChanged(QObject *sender, int mode, int rx, long frequency);
|
||||
void handleVfoFrequencyChanged(QObject *sender, int mode, int rx, long frequency);
|
||||
void handleCurrentReceiverChanged(QObject *sender, int rx);
|
||||
void handleHamBandChanged(QObject *sender, int rx, bool byButton, HamBand band);
|
||||
void handleAlexConfigurationChanged(quint16 config);
|
||||
void handleAlexStateChanged(HamBand band, const QList<int> &states);
|
||||
void handleAlexPresenceChanged(bool value);
|
||||
void handleWidebandDataChanged(QObject *sender, bool value);
|
||||
|
||||
private:
|
||||
friend class Protocol2ReceiveThread;
|
||||
|
||||
QList<int> activeDdcIndexes() const;
|
||||
void closeSockets();
|
||||
void processReceivedDatagram(const QByteArray &datagram, quint16 senderPort);
|
||||
void processIgnoredDatagram(const char *data, int length, quint16 senderPort);
|
||||
bool sendNativeDatagram(const QByteArray &datagram, const QHostAddress &address, quint16 port);
|
||||
void sendGeneralPacket();
|
||||
void sendDdcSpecificPacket();
|
||||
void sendDucSpecificPacket();
|
||||
void sendHighPriorityPacket(bool run);
|
||||
void softRestartDdcStream();
|
||||
void refreshDdcConfiguration(bool rebuildSockets);
|
||||
void refreshHighPriorityState();
|
||||
void refreshWidebandConfiguration();
|
||||
void updateLegacyControlBytes(const QByteArray &statusDatagram);
|
||||
void handleDdcDatagram(int rx, const QByteArray &datagram);
|
||||
void handleWidebandDatagram(const QByteArray &datagram);
|
||||
void tryProduceLegacyFrames();
|
||||
int samplesPerLegacyHalfFrame() const;
|
||||
quint32 encodeFrequency(long frequency) const;
|
||||
qint32 read24BitSample(const char *data) const;
|
||||
|
||||
private:
|
||||
Settings* set;
|
||||
THPSDRParameter* io;
|
||||
QUdpSocket* m_commandSocket;
|
||||
Protocol2ReceiveThread* m_receiveThread;
|
||||
int m_commandSocketFd;
|
||||
quint16 m_commandPort;
|
||||
int m_commandReceiveBufferSize;
|
||||
QUdpSocket* m_statusSocket;
|
||||
QUdpSocket* m_widebandSocket;
|
||||
QList<QUdpSocket*> m_ddcSockets;
|
||||
QList<QByteArray> m_ddcSampleBuffers;
|
||||
QList<QByteArray> m_legacySampleBuffers;
|
||||
QTimer* m_heartbeatTimer;
|
||||
QByteArray m_partialLegacyFrame;
|
||||
QByteArray m_statusDatagram;
|
||||
QByteArray m_legacyControlBytes;
|
||||
QByteArray m_widebandDatagram;
|
||||
bool m_running;
|
||||
bool m_collectWideband;
|
||||
quint32 m_widebandSequence;
|
||||
quint32 m_widebandSequencePrevious;
|
||||
int m_widebandPacketCount;
|
||||
quint32 m_generalSequence;
|
||||
quint32 m_ddcSequence;
|
||||
quint32 m_ducSequence;
|
||||
quint32 m_highPrioritySequence;
|
||||
int m_heartbeatTick;
|
||||
quint64 m_ddcDatagramsReceived;
|
||||
quint64 m_ddcSamplesReceived;
|
||||
quint32 m_lastDdcSequence;
|
||||
quint64 m_ddcSequenceGaps;
|
||||
quint64 m_ddcRecoveryAttempts;
|
||||
quint64 m_legacyFramesEnqueued;
|
||||
quint64 m_legacyFramesQueued;
|
||||
quint64 m_legacyFramesDropped;
|
||||
quint64 m_statusPacketsReceived;
|
||||
quint64 m_highPriorityPacketsSent;
|
||||
quint64 m_micPacketsIgnored;
|
||||
quint64 m_widebandPacketsIgnored;
|
||||
quint64 m_widebandPacketsLogged;
|
||||
bool m_dropWidebandReceivePackets;
|
||||
QHash<quint16, quint64> m_commandPortCounters;
|
||||
QSet<quint16> m_loggedFirstSourcePorts;
|
||||
QMutex m_receiveMutex;
|
||||
bool m_logConfigPackets;
|
||||
uchar m_lastStatusByte4;
|
||||
uchar m_lastStatusByte5;
|
||||
bool m_loggedFirstDdcDatagram;
|
||||
quint64 m_prevDdcDatagramsReceived; // to detect stream stop
|
||||
int m_lastDdcGrowthTick;
|
||||
int m_lastDdcRecoveryTick;
|
||||
};
|
||||
|
||||
#endif // _CUSDR_PROTOCOL2_IO_H
|
||||
@@ -0,0 +1,169 @@
|
||||
/**
|
||||
* @file cusdr_protocol2_profile.cpp
|
||||
* @brief openHPSDR Protocol 2 board capability helpers
|
||||
*/
|
||||
|
||||
#include "cusdr_protocol2_profile.h"
|
||||
|
||||
namespace {
|
||||
|
||||
static Protocol2BoardProfile makeDefaultProfile(int boardId) {
|
||||
|
||||
Protocol2BoardProfile profile;
|
||||
profile.boardId = boardId;
|
||||
profile.boardName = "Protocol2 SDR";
|
||||
profile.adcCount = 1;
|
||||
profile.defaultDdcCount = 2;
|
||||
profile.dspClockHz = 122880000;
|
||||
profile.individualDdcSampleRates = true;
|
||||
profile.minDdcSampleRateKsps = 48;
|
||||
profile.maxDdcSampleRateKsps = 1536;
|
||||
profile.widebandData = true;
|
||||
profile.widebandSamplesPerPacket = 512;
|
||||
profile.widebandBitsPerSample = 16;
|
||||
profile.ducCount = 1;
|
||||
profile.ducSampleRateKsps = 192;
|
||||
profile.ducBitsPerSample = 24;
|
||||
profile.ducSamplesPerPacket = 240;
|
||||
profile.phaseWords = true;
|
||||
profile.ducPhaseWords = true;
|
||||
profile.ddcAttenuator = true;
|
||||
profile.ducRxAttenuator = true;
|
||||
profile.hasAlex0 = true;
|
||||
profile.hasAlex1 = false;
|
||||
return profile;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Protocol2BoardProfile protocol2BoardProfile(int boardId) {
|
||||
|
||||
Protocol2BoardProfile profile = makeDefaultProfile(boardId);
|
||||
|
||||
switch (boardId) {
|
||||
|
||||
case 0:
|
||||
profile.boardName = "ATLAS";
|
||||
profile.adcCount = 4;
|
||||
profile.defaultDdcCount = 4;
|
||||
profile.dspClockHz = 122880000;
|
||||
profile.phaseWords = false;
|
||||
profile.ducPhaseWords = false;
|
||||
profile.hasAlex0 = true;
|
||||
profile.hasAlex1 = false;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
profile.boardName = "Hermes / ANAN-10/100";
|
||||
profile.adcCount = 1;
|
||||
profile.defaultDdcCount = 2;
|
||||
profile.dspClockHz = 122880000;
|
||||
profile.phaseWords = true;
|
||||
profile.hasAlex0 = true;
|
||||
profile.hasAlex1 = false;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
profile.boardName = "Hermes / ANAN-10E/100B";
|
||||
profile.adcCount = 1;
|
||||
profile.defaultDdcCount = 2;
|
||||
profile.dspClockHz = 122880000;
|
||||
profile.phaseWords = true;
|
||||
profile.hasAlex0 = false;
|
||||
profile.hasAlex1 = false;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
profile.boardName = "Angelia / ANAN-100D";
|
||||
profile.adcCount = 2;
|
||||
profile.defaultDdcCount = 7;
|
||||
profile.dspClockHz = 122880000;
|
||||
profile.phaseWords = true;
|
||||
profile.ducSamplesPerPacket = 238;
|
||||
profile.hasAlex0 = true;
|
||||
profile.hasAlex1 = false;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
profile.boardName = "Orion / ANAN-200D";
|
||||
profile.adcCount = 2;
|
||||
profile.defaultDdcCount = 4;
|
||||
profile.dspClockHz = 122880000;
|
||||
profile.phaseWords = true;
|
||||
profile.ducSamplesPerPacket = 240;
|
||||
profile.hasAlex0 = true;
|
||||
profile.hasAlex1 = false;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
profile.boardName = "Orion MkII / ANAN-7/8000DLE";
|
||||
profile.adcCount = 2;
|
||||
profile.defaultDdcCount = 4;
|
||||
profile.dspClockHz = 122880000;
|
||||
profile.phaseWords = true;
|
||||
profile.hasAlex0 = true;
|
||||
profile.hasAlex1 = true;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
profile.boardName = "Hermes Lite";
|
||||
profile.adcCount = 1;
|
||||
profile.defaultDdcCount = 2;
|
||||
profile.dspClockHz = 76800000;
|
||||
profile.phaseWords = true;
|
||||
profile.hasAlex0 = false;
|
||||
profile.hasAlex1 = false;
|
||||
break;
|
||||
|
||||
case 100:
|
||||
profile.boardName = "Hermes Lite 2 / C25";
|
||||
profile.adcCount = 1;
|
||||
profile.defaultDdcCount = 2;
|
||||
profile.dspClockHz = 76800000;
|
||||
profile.phaseWords = true;
|
||||
profile.hasAlex0 = false;
|
||||
profile.hasAlex1 = false;
|
||||
break;
|
||||
|
||||
case 10:
|
||||
profile.boardName = "Saturn / ANAN-G2";
|
||||
profile.adcCount = 2;
|
||||
profile.defaultDdcCount = 4;
|
||||
profile.dspClockHz = 122880000;
|
||||
profile.phaseWords = true;
|
||||
profile.hasAlex0 = true;
|
||||
profile.hasAlex1 = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return profile;
|
||||
}
|
||||
|
||||
QString protocol2DeviceSummary(const TNetworkDevicecard &device) {
|
||||
|
||||
QString summary = device.boardName;
|
||||
|
||||
if (device.protocolVersion > 0)
|
||||
summary += QString(" P%1").arg(device.protocolVersion);
|
||||
|
||||
if (device.firmwareVersion > 0)
|
||||
summary += QString(" FW %1.%2").arg(device.firmwareVersion / 10).arg(device.firmwareVersion % 10);
|
||||
|
||||
if (device.adcCount > 0 || device.ddcCount > 0)
|
||||
summary += QString(" %1ADC/%2DDC").arg(device.adcCount).arg(device.ddcCount);
|
||||
|
||||
if (device.maxDdcSampleRateKsps > 0)
|
||||
summary += QString(" %1ksps").arg(device.maxDdcSampleRateKsps);
|
||||
|
||||
if (device.phaseWords)
|
||||
summary += " phase";
|
||||
|
||||
if (device.hasAlex0 || device.hasAlex1)
|
||||
summary += device.hasAlex1 ? " Alex0/1" : " Alex";
|
||||
|
||||
summary += QString(" (%1)").arg(device.ip_address.toString());
|
||||
return summary;
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
* @file cusdr_protocol2_profile.h
|
||||
* @brief openHPSDR Protocol 2 board capability helpers
|
||||
*/
|
||||
|
||||
#ifndef _CUSDR_PROTOCOL2_PROFILE_H
|
||||
#define _CUSDR_PROTOCOL2_PROFILE_H
|
||||
|
||||
#include "cusdr_settings.h"
|
||||
|
||||
struct Protocol2BoardProfile {
|
||||
|
||||
int boardId;
|
||||
const char* boardName;
|
||||
int adcCount;
|
||||
int defaultDdcCount;
|
||||
int dspClockHz;
|
||||
bool individualDdcSampleRates;
|
||||
int minDdcSampleRateKsps;
|
||||
int maxDdcSampleRateKsps;
|
||||
bool widebandData;
|
||||
int widebandSamplesPerPacket;
|
||||
int widebandBitsPerSample;
|
||||
int ducCount;
|
||||
int ducSampleRateKsps;
|
||||
int ducBitsPerSample;
|
||||
int ducSamplesPerPacket;
|
||||
bool phaseWords;
|
||||
bool ducPhaseWords;
|
||||
bool ddcAttenuator;
|
||||
bool ducRxAttenuator;
|
||||
bool hasAlex0;
|
||||
bool hasAlex1;
|
||||
};
|
||||
|
||||
Protocol2BoardProfile protocol2BoardProfile(int boardId);
|
||||
QString protocol2DeviceSummary(const TNetworkDevicecard &device);
|
||||
|
||||
#endif // _CUSDR_PROTOCOL2_PROFILE_H
|
||||
@@ -369,14 +369,22 @@ void Receiver::setSampleRate(QObject *sender, int value) {
|
||||
m_samplerate = value;
|
||||
break;
|
||||
|
||||
case 384000:
|
||||
m_samplerate = value;
|
||||
break;
|
||||
|
||||
default:
|
||||
RECEIVER_DEBUG << "invalid sample rate (possible values are: 48, 96, 192, or 384 kHz)!\n";
|
||||
break;
|
||||
}
|
||||
case 384000:
|
||||
m_samplerate = value;
|
||||
break;
|
||||
|
||||
case 768000:
|
||||
m_samplerate = value;
|
||||
break;
|
||||
|
||||
case 1536000:
|
||||
m_samplerate = value;
|
||||
break;
|
||||
|
||||
default:
|
||||
RECEIVER_DEBUG << "invalid sample rate (possible values are: 48, 96, 192, 384, 768, or 1536 kHz)!\n";
|
||||
break;
|
||||
}
|
||||
|
||||
if (qtdsp)
|
||||
qtdsp->setSampleRate(this, m_samplerate);
|
||||
|
||||
@@ -116,8 +116,9 @@ OGLDisplayPanel::OGLDisplayPanel(QWidget *parent)
|
||||
m_oglTextFreq2 = new OGLText(m_fonts.freqFont2);
|
||||
m_oglTextImpact = new OGLText(m_fonts.impactFont);
|
||||
|
||||
setupConnections();
|
||||
setupTextstrings();
|
||||
setupConnections();
|
||||
setupTextstrings();
|
||||
setCurrentNetworkDevice(set->getCurrentMetisCard());
|
||||
|
||||
set10mhzSource(this, set->get10MHzSource());
|
||||
set122_88mhzSource(this, set->get122_8MHzSource());
|
||||
@@ -275,11 +276,17 @@ void OGLDisplayPanel::setupConnections() {
|
||||
this,
|
||||
SLOT(setPennylaneVersion(int)));
|
||||
|
||||
CHECKED_CONNECT(
|
||||
set,
|
||||
SIGNAL(hermesVersionChanged(int)),
|
||||
this,
|
||||
SLOT(setHermesVersion(int)));
|
||||
CHECKED_CONNECT(
|
||||
set,
|
||||
SIGNAL(hermesVersionChanged(int)),
|
||||
this,
|
||||
SLOT(setHermesVersion(int)));
|
||||
|
||||
CHECKED_CONNECT(
|
||||
set,
|
||||
SIGNAL(hpsdrNetworkDeviceChanged(TNetworkDevicecard)),
|
||||
this,
|
||||
SLOT(setCurrentNetworkDevice(TNetworkDevicecard)));
|
||||
|
||||
CHECKED_CONNECT(
|
||||
set,
|
||||
@@ -2725,7 +2732,7 @@ void OGLDisplayPanel::setHermesVersion(int value) {
|
||||
m_hermesVersion.append(str.setNum(value%10));
|
||||
}
|
||||
|
||||
void OGLDisplayPanel::setMetisVersion(int value) {
|
||||
void OGLDisplayPanel::setMetisVersion(int value) {
|
||||
|
||||
QString str;
|
||||
switch (m_hwInterface) {
|
||||
@@ -2742,10 +2749,24 @@ void OGLDisplayPanel::setMetisVersion(int value) {
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void OGLDisplayPanel::setExcaliburVersion(QObject *sender, int value) {
|
||||
|
||||
}
|
||||
|
||||
void OGLDisplayPanel::setCurrentNetworkDevice(TNetworkDevicecard card) {
|
||||
|
||||
if (card.protocolVersion >= 2 && !card.boardName.isEmpty()) {
|
||||
m_hermesString = card.boardName + " ";
|
||||
m_hermesStringWidth = m_oglTextSmall->fontMetrics().width(m_hermesString);
|
||||
}
|
||||
else {
|
||||
m_hermesString = QString("Hermes ");
|
||||
m_hermesStringWidth = m_oglTextSmall->fontMetrics().width(m_hermesString);
|
||||
}
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
void OGLDisplayPanel::setExcaliburVersion(QObject *sender, int value) {
|
||||
|
||||
Q_UNUSED (sender)
|
||||
|
||||
|
||||
@@ -318,14 +318,15 @@ private slots:
|
||||
void setPenelopePresence(bool value);
|
||||
void setPennylanePresence(bool value);
|
||||
void setAlexPresence(bool value);
|
||||
void setExcaliburPresence(bool value);
|
||||
void setHermesVersion(int value);
|
||||
void setMercuryVersion(int value);
|
||||
void setPenelopeVersion(int value);
|
||||
void setPennylaneVersion(int value);
|
||||
void setMetisVersion(int value);
|
||||
void setExcaliburVersion(QObject *sender, int value);
|
||||
void setAlexVersion(QObject *sender, int value);
|
||||
void setExcaliburPresence(bool value);
|
||||
void setHermesVersion(int value);
|
||||
void setMercuryVersion(int value);
|
||||
void setPenelopeVersion(int value);
|
||||
void setPennylaneVersion(int value);
|
||||
void setMetisVersion(int value);
|
||||
void setCurrentNetworkDevice(TNetworkDevicecard card);
|
||||
void setExcaliburVersion(QObject *sender, int value);
|
||||
void setAlexVersion(QObject *sender, int value);
|
||||
|
||||
void setMouseWheelFreqStep(QObject *sender, int rx, qreal value);
|
||||
|
||||
|
||||
@@ -2679,13 +2679,24 @@ void QGLDistancePanel::setPanGridStatus(bool value) {
|
||||
update();
|
||||
}
|
||||
|
||||
void QGLDistancePanel::sampleRateChanged(QObject *sender, int value) {
|
||||
|
||||
Q_UNUSED(sender)
|
||||
|
||||
m_sampleRate = value;
|
||||
update();
|
||||
}
|
||||
void QGLDistancePanel::sampleRateChanged(QObject *sender, int value) {
|
||||
|
||||
Q_UNUSED(sender)
|
||||
|
||||
if (m_sampleRate == value)
|
||||
return;
|
||||
|
||||
m_sampleRate = value;
|
||||
m_freqScalePanadapterUpdate = true;
|
||||
m_freqScalePanadapterRenew = true;
|
||||
m_panGridUpdate = true;
|
||||
m_panGridRenew = true;
|
||||
m_spectrumUpdate = true;
|
||||
m_spectrumVertexColorUpdate = true;
|
||||
m_spectrumColorsChanged = true;
|
||||
m_panadapterBins.clear();
|
||||
update();
|
||||
}
|
||||
|
||||
void QGLDistancePanel::setPanadapterColors() {
|
||||
|
||||
|
||||
@@ -4311,20 +4311,39 @@ void QGLReceiverPanel::setHairCrossStatus(bool value, int rx) {
|
||||
update();
|
||||
}
|
||||
|
||||
void QGLReceiverPanel::sampleRateChanged(QObject *sender, int value) {
|
||||
|
||||
Q_UNUSED(sender)
|
||||
|
||||
m_sampleRate = value;
|
||||
m_deltaF = (qreal)(1.0*m_deltaFrequency/m_sampleRate);
|
||||
|
||||
m_freqScalePanadapterUpdate = true;
|
||||
m_panGridUpdate = true;
|
||||
m_peakHoldBufferResize = true;
|
||||
m_filterChanged = true;
|
||||
|
||||
update();
|
||||
}
|
||||
void QGLReceiverPanel::sampleRateChanged(QObject *sender, int value) {
|
||||
|
||||
Q_UNUSED(sender)
|
||||
|
||||
if (m_sampleRate == value)
|
||||
return;
|
||||
|
||||
m_sampleRate = value;
|
||||
if (m_vfoFrequency > m_centerFrequency + m_sampleRate/2)
|
||||
m_vfoFrequency = m_centerFrequency + m_sampleRate/2;
|
||||
else if (m_vfoFrequency < m_centerFrequency - m_sampleRate/2)
|
||||
m_vfoFrequency = m_centerFrequency - m_sampleRate/2;
|
||||
|
||||
m_deltaFrequency = m_centerFrequency - m_vfoFrequency;
|
||||
m_deltaF = (qreal)(1.0*m_deltaFrequency/m_sampleRate);
|
||||
|
||||
m_freqScalePanadapterUpdate = true;
|
||||
m_freqScalePanadapterRenew = true;
|
||||
m_panGridUpdate = true;
|
||||
m_panGridRenew = true;
|
||||
m_waterfallUpdate = true;
|
||||
m_waterfallDisplayUpdate = true;
|
||||
m_secScaleWaterfallUpdate = true;
|
||||
m_peakHoldBufferResize = true;
|
||||
m_filterChanged = true;
|
||||
m_spectrumVertexColorUpdate = true;
|
||||
m_spectrumColorsChanged = true;
|
||||
m_panadapterBins.clear();
|
||||
m_panPeakHoldBins.clear();
|
||||
m_waterfallPixel.clear();
|
||||
|
||||
update();
|
||||
}
|
||||
|
||||
void QGLReceiverPanel::setMercuryAttenuator(QObject* sender, HamBand band, int value) {
|
||||
|
||||
|
||||
@@ -2023,13 +2023,24 @@ void QGLWidebandPanel::setPanGridStatus(bool value, int rx) {
|
||||
update();
|
||||
}
|
||||
|
||||
void QGLWidebandPanel::sampleRateChanged(QObject *sender, int value) {
|
||||
|
||||
Q_UNUSED(sender)
|
||||
|
||||
m_sampleRate = value;
|
||||
update();
|
||||
}
|
||||
void QGLWidebandPanel::sampleRateChanged(QObject *sender, int value) {
|
||||
|
||||
Q_UNUSED(sender)
|
||||
|
||||
if (m_sampleRate == value)
|
||||
return;
|
||||
|
||||
m_sampleRate = value;
|
||||
m_freqScaleUpdate = true;
|
||||
m_freqScaleRenew = true;
|
||||
m_panGridUpdate = true;
|
||||
m_panGridRenew = true;
|
||||
m_spectrumUpdate = true;
|
||||
m_spectrumVertexColorUpdate = true;
|
||||
m_spectrumColorsChanged = true;
|
||||
m_widebandPanSpectrumBins.clear();
|
||||
update();
|
||||
}
|
||||
|
||||
void QGLWidebandPanel::freqScaleUpdate(bool value) {
|
||||
|
||||
|
||||
@@ -320,14 +320,22 @@ void QDSPEngine::setSampleRate(QObject *sender, int value) {
|
||||
m_samplerate = value;
|
||||
break;
|
||||
|
||||
case 384000:
|
||||
m_samplerate = value;
|
||||
break;
|
||||
|
||||
default:
|
||||
DSP_ENGINE_DEBUG << "invalid sample rate (possible values are: 48, 96, 192, or 384 kHz)!\n";
|
||||
break;
|
||||
}
|
||||
case 384000:
|
||||
m_samplerate = value;
|
||||
break;
|
||||
|
||||
case 768000:
|
||||
m_samplerate = value;
|
||||
break;
|
||||
|
||||
case 1536000:
|
||||
m_samplerate = value;
|
||||
break;
|
||||
|
||||
default:
|
||||
DSP_ENGINE_DEBUG << "invalid sample rate (possible values are: 48, 96, 192, 384, 768, or 1536 kHz)!\n";
|
||||
break;
|
||||
}
|
||||
|
||||
//DSP_ENGINE_DEBUG << "set sample rate to " << m_samplerate;
|
||||
//setNCOFrequency(m_rx, m_rxData.vfoFrequency - m_rxData.ctrFrequency);
|
||||
|
||||
@@ -116,9 +116,9 @@ HPSDRWidget::~HPSDRWidget() {
|
||||
|
||||
void HPSDRWidget::setupConnections() {
|
||||
|
||||
CHECKED_CONNECT(
|
||||
set,
|
||||
SIGNAL(systemStateChanged(
|
||||
CHECKED_CONNECT(
|
||||
set,
|
||||
SIGNAL(systemStateChanged(
|
||||
QObject *,
|
||||
QSDR::_Error,
|
||||
QSDR::_HWInterfaceMode,
|
||||
@@ -128,10 +128,22 @@ void HPSDRWidget::setupConnections() {
|
||||
SLOT(systemStateChanged(
|
||||
QObject *,
|
||||
QSDR::_Error,
|
||||
QSDR::_HWInterfaceMode,
|
||||
QSDR::_ServerMode,
|
||||
QSDR::_DataEngineState)));
|
||||
}
|
||||
QSDR::_HWInterfaceMode,
|
||||
QSDR::_ServerMode,
|
||||
QSDR::_DataEngineState)));
|
||||
|
||||
CHECKED_CONNECT(
|
||||
set,
|
||||
SIGNAL(sampleRateChanged(QObject *, int)),
|
||||
this,
|
||||
SLOT(sampleRateValueChanged(QObject *, int)));
|
||||
|
||||
CHECKED_CONNECT(
|
||||
set,
|
||||
SIGNAL(hpsdrNetworkDeviceChanged(TNetworkDevicecard)),
|
||||
this,
|
||||
SLOT(setCurrentNetworkDevice(TNetworkDevicecard)));
|
||||
}
|
||||
|
||||
QGroupBox* HPSDRWidget::hpsdrHardwareBtnGroup() {
|
||||
|
||||
@@ -455,51 +467,94 @@ QGroupBox *HPSDRWidget::sampleRateExclusiveGroup() {
|
||||
samplerate384Btn = new AeroButton("384 kHz", this);
|
||||
samplerate384Btn->setRoundness(0);
|
||||
samplerate384Btn->setFixedSize (50, btn_height);
|
||||
samplerate384Btn->setStyleSheet(set->getMiniButtonStyle());
|
||||
//samplerate384Btn->setEnabled(false);
|
||||
samplerateBtnList.append(samplerate384Btn);
|
||||
CHECKED_CONNECT(samplerate384Btn, SIGNAL(released()), this, SLOT(sampleRateChanged()));
|
||||
|
||||
switch(set->getSampleRate()) {
|
||||
|
||||
case 48000:
|
||||
samplerate48Btn->setBtnState(AeroButton::ON);
|
||||
samplerate96Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate192Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate384Btn->setBtnState(AeroButton::OFF);
|
||||
break;
|
||||
|
||||
case 96000:
|
||||
samplerate48Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate96Btn->setBtnState(AeroButton::ON);
|
||||
samplerate192Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate384Btn->setBtnState(AeroButton::OFF);
|
||||
break;
|
||||
|
||||
case 192000:
|
||||
samplerate48Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate96Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate192Btn->setBtnState(AeroButton::ON);
|
||||
samplerate384Btn->setBtnState(AeroButton::OFF);
|
||||
break;
|
||||
|
||||
case 384000:
|
||||
samplerate48Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate96Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate192Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate384Btn->setBtnState(AeroButton::ON);
|
||||
break;
|
||||
}
|
||||
samplerate384Btn->setStyleSheet(set->getMiniButtonStyle());
|
||||
//samplerate384Btn->setEnabled(false);
|
||||
samplerateBtnList.append(samplerate384Btn);
|
||||
CHECKED_CONNECT(samplerate384Btn, SIGNAL(released()), this, SLOT(sampleRateChanged()));
|
||||
|
||||
samplerate768Btn = new AeroButton("768 kHz", this);
|
||||
samplerate768Btn->setRoundness(0);
|
||||
samplerate768Btn->setFixedSize (56, btn_height);
|
||||
samplerate768Btn->setStyleSheet(set->getMiniButtonStyle());
|
||||
samplerateBtnList.append(samplerate768Btn);
|
||||
CHECKED_CONNECT(samplerate768Btn, SIGNAL(released()), this, SLOT(sampleRateChanged()));
|
||||
|
||||
samplerate1536Btn = new AeroButton("1536 kHz", this);
|
||||
samplerate1536Btn->setRoundness(0);
|
||||
samplerate1536Btn->setFixedSize (64, btn_height);
|
||||
samplerate1536Btn->setStyleSheet(set->getMiniButtonStyle());
|
||||
samplerateBtnList.append(samplerate1536Btn);
|
||||
CHECKED_CONNECT(samplerate1536Btn, SIGNAL(released()), this, SLOT(sampleRateChanged()));
|
||||
|
||||
switch(set->getSampleRate()) {
|
||||
|
||||
case 48000:
|
||||
samplerate48Btn->setBtnState(AeroButton::ON);
|
||||
samplerate96Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate192Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate384Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate768Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate1536Btn->setBtnState(AeroButton::OFF);
|
||||
break;
|
||||
|
||||
case 96000:
|
||||
samplerate48Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate96Btn->setBtnState(AeroButton::ON);
|
||||
samplerate192Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate384Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate768Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate1536Btn->setBtnState(AeroButton::OFF);
|
||||
break;
|
||||
|
||||
case 192000:
|
||||
samplerate48Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate96Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate192Btn->setBtnState(AeroButton::ON);
|
||||
samplerate384Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate768Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate1536Btn->setBtnState(AeroButton::OFF);
|
||||
break;
|
||||
|
||||
case 384000:
|
||||
samplerate48Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate96Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate192Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate384Btn->setBtnState(AeroButton::ON);
|
||||
samplerate768Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate1536Btn->setBtnState(AeroButton::OFF);
|
||||
break;
|
||||
|
||||
case 768000:
|
||||
samplerate48Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate96Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate192Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate384Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate768Btn->setBtnState(AeroButton::ON);
|
||||
samplerate1536Btn->setBtnState(AeroButton::OFF);
|
||||
break;
|
||||
|
||||
case 1536000:
|
||||
samplerate48Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate96Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate192Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate384Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate768Btn->setBtnState(AeroButton::OFF);
|
||||
samplerate1536Btn->setBtnState(AeroButton::ON);
|
||||
break;
|
||||
}
|
||||
|
||||
QHBoxLayout *hbox = new QHBoxLayout();
|
||||
hbox->setSpacing(4);
|
||||
hbox->addStretch();
|
||||
hbox->addWidget(samplerate48Btn);
|
||||
hbox->addWidget(samplerate96Btn);
|
||||
hbox->addWidget(samplerate192Btn);
|
||||
hbox->addWidget(samplerate384Btn);
|
||||
|
||||
QVBoxLayout *vbox = new QVBoxLayout();
|
||||
hbox->addWidget(samplerate96Btn);
|
||||
hbox->addWidget(samplerate192Btn);
|
||||
hbox->addWidget(samplerate384Btn);
|
||||
hbox->addWidget(samplerate768Btn);
|
||||
hbox->addWidget(samplerate1536Btn);
|
||||
updateSampleRateButtons();
|
||||
|
||||
QVBoxLayout *vbox = new QVBoxLayout();
|
||||
vbox->setSpacing(4);
|
||||
vbox->addSpacing(6);
|
||||
vbox->addLayout(hbox);
|
||||
@@ -940,21 +995,18 @@ void HPSDRWidget::source122_88MhzChanged() {
|
||||
}
|
||||
}
|
||||
|
||||
void HPSDRWidget::sampleRateChanged() {
|
||||
|
||||
AeroButton *button = qobject_cast<AeroButton *>(sender());
|
||||
int btnHit = samplerateBtnList.indexOf(button);
|
||||
|
||||
foreach(AeroButton *btn, samplerateBtnList) {
|
||||
|
||||
btn->setBtnState(AeroButton::OFF);
|
||||
btn->update();
|
||||
}
|
||||
|
||||
button->setBtnState(AeroButton::ON);
|
||||
button->update();
|
||||
|
||||
switch (btnHit) {
|
||||
void HPSDRWidget::sampleRateChanged() {
|
||||
|
||||
AeroButton *button = qobject_cast<AeroButton *>(sender());
|
||||
int btnHit = samplerateBtnList.indexOf(button);
|
||||
|
||||
const QList<int> rates = QList<int>() << 48000 << 96000 << 192000 << 384000 << 768000 << 1536000;
|
||||
if (btnHit < 0 || btnHit >= rates.size() || !sampleRateSupported(rates.at(btnHit))) {
|
||||
updateSampleRateButtons();
|
||||
return;
|
||||
}
|
||||
|
||||
switch (btnHit) {
|
||||
|
||||
case 0:
|
||||
set->setSampleRate(this, 48000);
|
||||
@@ -971,12 +1023,108 @@ void HPSDRWidget::sampleRateChanged() {
|
||||
HPSDR_WIDGET_DEBUG << "set sample rate to 192 kHz.";
|
||||
break;
|
||||
|
||||
case 3:
|
||||
set->setSampleRate(this, 384000);
|
||||
HPSDR_WIDGET_DEBUG << "set sample rate to 384 kHz.";
|
||||
break;
|
||||
}
|
||||
}
|
||||
case 3:
|
||||
set->setSampleRate(this, 384000);
|
||||
HPSDR_WIDGET_DEBUG << "set sample rate to 384 kHz.";
|
||||
break;
|
||||
|
||||
case 4:
|
||||
set->setSampleRate(this, 768000);
|
||||
HPSDR_WIDGET_DEBUG << "set sample rate to 768 kHz.";
|
||||
break;
|
||||
|
||||
case 5:
|
||||
set->setSampleRate(this, 1536000);
|
||||
HPSDR_WIDGET_DEBUG << "set sample rate to 1536 kHz.";
|
||||
break;
|
||||
}
|
||||
|
||||
updateSampleRateButtons();
|
||||
}
|
||||
|
||||
void HPSDRWidget::sampleRateValueChanged(QObject *sender, int value) {
|
||||
|
||||
Q_UNUSED(sender)
|
||||
Q_UNUSED(value)
|
||||
|
||||
updateSampleRateButtons();
|
||||
}
|
||||
|
||||
void HPSDRWidget::setCurrentNetworkDevice(TNetworkDevicecard card) {
|
||||
|
||||
Q_UNUSED(card)
|
||||
|
||||
updateSampleRateButtons();
|
||||
}
|
||||
|
||||
bool HPSDRWidget::protocol2SampleRatesEnabled() const {
|
||||
|
||||
const TNetworkDevicecard device = set->getCurrentMetisCard();
|
||||
return device.protocolVersion >= 2 && device.individualDdcSampleRates;
|
||||
}
|
||||
|
||||
bool HPSDRWidget::sampleRateSupported(int rate) const {
|
||||
|
||||
const TNetworkDevicecard device = set->getCurrentMetisCard();
|
||||
if (device.protocolVersion < 2)
|
||||
return rate <= 384000;
|
||||
|
||||
if (!device.individualDdcSampleRates)
|
||||
return rate == 48000;
|
||||
|
||||
const int minRate = qMax(48000, device.minDdcSampleRateKsps > 0 ? device.minDdcSampleRateKsps * 1000 : 48000);
|
||||
const int maxRate = device.maxDdcSampleRateKsps > 0 ? device.maxDdcSampleRateKsps * 1000 : 1536000;
|
||||
return rate >= minRate && rate <= maxRate;
|
||||
}
|
||||
|
||||
void HPSDRWidget::updateSampleRateButtons() {
|
||||
|
||||
if (samplerateBtnList.isEmpty())
|
||||
return;
|
||||
|
||||
const QList<int> rates = QList<int>() << 48000 << 96000 << 192000 << 384000 << 768000 << 1536000;
|
||||
for (int i = 0; i < samplerateBtnList.size() && i < rates.size(); ++i)
|
||||
samplerateBtnList.at(i)->setEnabled(sampleRateSupported(rates.at(i)));
|
||||
|
||||
if (!sampleRateSupported(set->getSampleRate())) {
|
||||
int fallbackRate = 0;
|
||||
for (int i = 0; i < rates.size(); ++i) {
|
||||
if (sampleRateSupported(rates.at(i))) {
|
||||
if (fallbackRate == 0)
|
||||
fallbackRate = rates.at(i);
|
||||
if (rates.at(i) <= set->getSampleRate())
|
||||
fallbackRate = rates.at(i);
|
||||
}
|
||||
}
|
||||
if (fallbackRate == 0)
|
||||
fallbackRate = 48000;
|
||||
set->setSampleRate(this, fallbackRate);
|
||||
return;
|
||||
}
|
||||
|
||||
const int currentRate = set->getSampleRate();
|
||||
for (int i = 0; i < samplerateBtnList.size(); ++i) {
|
||||
AeroButton *btn = samplerateBtnList.at(i);
|
||||
btn->setBtnState(AeroButton::OFF);
|
||||
btn->update();
|
||||
}
|
||||
|
||||
int selected = 0;
|
||||
switch (currentRate) {
|
||||
case 48000: selected = 0; break;
|
||||
case 96000: selected = 1; break;
|
||||
case 192000: selected = 2; break;
|
||||
case 384000: selected = 3; break;
|
||||
case 768000: selected = 4; break;
|
||||
case 1536000: selected = 5; break;
|
||||
default: selected = 0; break;
|
||||
}
|
||||
|
||||
if (selected >= 0 && selected < samplerateBtnList.size()) {
|
||||
samplerateBtnList.at(selected)->setBtnState(AeroButton::ON);
|
||||
samplerateBtnList.at(selected)->update();
|
||||
}
|
||||
}
|
||||
|
||||
void HPSDRWidget::setNumberOfReceivers(int receivers) {
|
||||
|
||||
@@ -1017,7 +1165,8 @@ void HPSDRWidget::enableButtons() {
|
||||
penelopeBtn->setEnabled(true);
|
||||
mercuryBtn->setEnabled(true);
|
||||
penelope2Btn->setEnabled(true);
|
||||
mercury2Btn->setEnabled(true);
|
||||
|
||||
m_receiverComboBox->setEnabled(true);
|
||||
}
|
||||
mercury2Btn->setEnabled(true);
|
||||
|
||||
m_receiverComboBox->setEnabled(true);
|
||||
updateSampleRateButtons();
|
||||
}
|
||||
|
||||
@@ -94,9 +94,11 @@ private:
|
||||
AeroButton *penelope2Btn;
|
||||
AeroButton *mercury2Btn;
|
||||
AeroButton *samplerate48Btn;
|
||||
AeroButton *samplerate96Btn;
|
||||
AeroButton *samplerate192Btn;
|
||||
AeroButton *samplerate384Btn;
|
||||
AeroButton *samplerate96Btn;
|
||||
AeroButton *samplerate192Btn;
|
||||
AeroButton *samplerate384Btn;
|
||||
AeroButton *samplerate768Btn;
|
||||
AeroButton *samplerate1536Btn;
|
||||
|
||||
QList<AeroButton *> hardwareBtnList;
|
||||
QList<AeroButton *> source10MhzBtnList;
|
||||
@@ -117,9 +119,12 @@ private:
|
||||
int m_hpsdrHardware;
|
||||
int m_socketBufferSize;
|
||||
|
||||
void setupConnections();
|
||||
void createSource10MhzExclusiveGroup();
|
||||
void createSource122_88MhzExclusiveGroup();
|
||||
void setupConnections();
|
||||
void createSource10MhzExclusiveGroup();
|
||||
void createSource122_88MhzExclusiveGroup();
|
||||
void updateSampleRateButtons();
|
||||
bool protocol2SampleRatesEnabled() const;
|
||||
bool sampleRateSupported(int rate) const;
|
||||
|
||||
private slots:
|
||||
void systemStateChanged(
|
||||
@@ -132,10 +137,12 @@ private slots:
|
||||
void setHPSDRHardware();
|
||||
void source10MhzChanged();
|
||||
void setNumberOfReceivers(int value);
|
||||
void disableButtons();
|
||||
void enableButtons();
|
||||
void firmwareCheckChanged();
|
||||
void sampleRateChanged();
|
||||
void disableButtons();
|
||||
void enableButtons();
|
||||
void firmwareCheckChanged();
|
||||
void sampleRateChanged();
|
||||
void sampleRateValueChanged(QObject *sender, int value);
|
||||
void setCurrentNetworkDevice(TNetworkDevicecard card);
|
||||
|
||||
signals:
|
||||
void messageEvent(QString message);
|
||||
|
||||
@@ -368,15 +368,11 @@ void MainWindow::setup() {
|
||||
// set the main window title
|
||||
updateTitle();
|
||||
|
||||
// show the wideband data panel as specified in the settings.ini
|
||||
if (set->getWidebandData()) {
|
||||
|
||||
wideBandBtn->setEnabled(true);
|
||||
|
||||
if (set->getWidebandStatus()) {
|
||||
wideBandBtnClickedEvent();
|
||||
}
|
||||
}
|
||||
// show the wideband data panel as specified in the settings.ini
|
||||
wideBandBtn->setEnabled(m_serverMode != QSDR::ChirpWSPR);
|
||||
if (set->getWidebandStatus()) {
|
||||
wideBandBtnClickedEvent();
|
||||
}
|
||||
|
||||
// get the network interfaces
|
||||
getNetworkInterfaces();
|
||||
@@ -1555,29 +1551,34 @@ void MainWindow::startButtonClickedEvent() {
|
||||
/*!
|
||||
\brief implements the Show/Hide functionality of the wide band data widget.
|
||||
*/
|
||||
void MainWindow::wideBandBtnClickedEvent() {
|
||||
|
||||
if (wideBandBtn->btnState() == AeroButton::OFF) {
|
||||
|
||||
wideBandBtn->setBtnState(AeroButton::ON);
|
||||
set->setWidebandStatus(this, true);
|
||||
widebandDock->show();
|
||||
//showMessage("[server]: wide band data on.");
|
||||
}
|
||||
else if (wideBandBtn->btnState() == AeroButton::ON) {
|
||||
|
||||
wideBandBtn->setBtnState(AeroButton::OFF);
|
||||
set->setWidebandStatus(this, false);
|
||||
widebandDock->hide();
|
||||
//showMessage("[server]: wide band data off.");
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::widebandVisibilityChanged(bool value) {
|
||||
|
||||
if (value)
|
||||
wideBandBtn->setBtnState(AeroButton::ON);
|
||||
else
|
||||
void MainWindow::wideBandBtnClickedEvent() {
|
||||
|
||||
if (wideBandBtn->btnState() == AeroButton::OFF) {
|
||||
|
||||
wideBandBtn->setBtnState(AeroButton::ON);
|
||||
set->setWidebandData(this, true);
|
||||
set->setWidebandStatus(this, true);
|
||||
widebandDock->show();
|
||||
//showMessage("[server]: wide band data on.");
|
||||
}
|
||||
else if (wideBandBtn->btnState() == AeroButton::ON) {
|
||||
|
||||
wideBandBtn->setBtnState(AeroButton::OFF);
|
||||
set->setWidebandData(this, false);
|
||||
set->setWidebandStatus(this, false);
|
||||
widebandDock->hide();
|
||||
//showMessage("[server]: wide band data off.");
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::widebandVisibilityChanged(bool value) {
|
||||
|
||||
set->setWidebandData(this, value);
|
||||
set->setWidebandStatus(this, value);
|
||||
|
||||
if (value)
|
||||
wideBandBtn->setBtnState(AeroButton::ON);
|
||||
else
|
||||
wideBandBtn->setBtnState(AeroButton::OFF);
|
||||
|
||||
wideBandBtn->update();
|
||||
|
||||
@@ -33,9 +33,10 @@
|
||||
//#include <QMenu>
|
||||
//#include <QFileDialog>
|
||||
//#include <QDebug>
|
||||
#include <QBoxLayout>
|
||||
|
||||
#include "cusdr_networkWidget.h"
|
||||
#include <QBoxLayout>
|
||||
|
||||
#include "cusdr_networkWidget.h"
|
||||
#include "DataEngine/cusdr_protocol2_profile.h"
|
||||
|
||||
|
||||
#define btn_height 15
|
||||
@@ -499,13 +500,16 @@ void NetworkWidget::setNetworkDeviceList(QList<TNetworkDevicecard> list) {
|
||||
return;
|
||||
}
|
||||
|
||||
networkDeviceIPAdresses->clear();
|
||||
foreach (TNetworkDevicecard device, list) {
|
||||
|
||||
networkDeviceIPAdresses->addItem(device.ip_address.toString());
|
||||
networkDeviceIPAdresses->update();
|
||||
}
|
||||
}
|
||||
networkDeviceIPAdresses->clear();
|
||||
foreach (TNetworkDevicecard device, list) {
|
||||
|
||||
if (device.protocolVersion >= 2)
|
||||
networkDeviceIPAdresses->addItem(protocol2DeviceSummary(device));
|
||||
else
|
||||
networkDeviceIPAdresses->addItem(QString("%1 (%2)").arg(device.boardName).arg(device.ip_address.toString()));
|
||||
networkDeviceIPAdresses->update();
|
||||
}
|
||||
}
|
||||
|
||||
void NetworkWidget::setCurrentNetworkDevice(TNetworkDevicecard card) {
|
||||
|
||||
|
||||
@@ -65,6 +65,33 @@ Settings::Settings(QObject *parent)
|
||||
qRegisterMetaType<QList<TNetworkDevicecard> >();
|
||||
qRegisterMetaType<qVectorFloat>("qVectorFloat");
|
||||
|
||||
m_currentHPSDRDevice.ip_address = QHostAddress();
|
||||
m_currentHPSDRDevice.mac_address[0] = '\0';
|
||||
m_currentHPSDRDevice.boardID = -1;
|
||||
m_currentHPSDRDevice.boardName = "";
|
||||
m_currentHPSDRDevice.protocolVersion = 0;
|
||||
m_currentHPSDRDevice.firmwareVersion = 0;
|
||||
m_currentHPSDRDevice.adcCount = 0;
|
||||
m_currentHPSDRDevice.ddcCount = 0;
|
||||
m_currentHPSDRDevice.dspClockHz = 0;
|
||||
m_currentHPSDRDevice.individualDdcSampleRates = false;
|
||||
m_currentHPSDRDevice.minDdcSampleRateKsps = 48;
|
||||
m_currentHPSDRDevice.maxDdcSampleRateKsps = 384;
|
||||
m_currentHPSDRDevice.widebandData = false;
|
||||
m_currentHPSDRDevice.widebandSamplesPerPacket = 0;
|
||||
m_currentHPSDRDevice.widebandBitsPerSample = 0;
|
||||
m_currentHPSDRDevice.ducCount = 0;
|
||||
m_currentHPSDRDevice.ducSampleRateKsps = 0;
|
||||
m_currentHPSDRDevice.ducBitsPerSample = 0;
|
||||
m_currentHPSDRDevice.ducSamplesPerPacket = 0;
|
||||
m_currentHPSDRDevice.iqFormatFlags = 0;
|
||||
m_currentHPSDRDevice.phaseWords = false;
|
||||
m_currentHPSDRDevice.ducPhaseWords = false;
|
||||
m_currentHPSDRDevice.ddcAttenuator = false;
|
||||
m_currentHPSDRDevice.ducRxAttenuator = false;
|
||||
m_currentHPSDRDevice.hasAlex0 = false;
|
||||
m_currentHPSDRDevice.hasAlex1 = false;
|
||||
|
||||
startTime = QDateTime::currentDateTime();
|
||||
|
||||
qDebug() << "************************************************************************";
|
||||
@@ -289,7 +316,8 @@ int Settings::loadSettings() {
|
||||
//checkHPSDRDevices();
|
||||
|
||||
value = settings->value("server/sample_rate", 48000).toInt();
|
||||
if ((value != 48000) & (value != 96000) & (value != 192000) & (value != 384000)) value = 48000;
|
||||
if ((value != 48000) && (value != 96000) && (value != 192000) &&
|
||||
(value != 384000) && (value != 768000) && (value != 1536000)) value = 48000;
|
||||
setSampleRate(this, value);
|
||||
|
||||
str = settings->value("server/dither", "off").toString();
|
||||
@@ -642,7 +670,7 @@ int Settings::loadSettings() {
|
||||
//******************************************************************
|
||||
// wideband settings
|
||||
|
||||
str = settings->value("wideband/widebandData", "on").toString();
|
||||
str = settings->value("wideband/widebandData", "off").toString();
|
||||
if (str.toLower() == "on")
|
||||
m_widebandOptions.wideBandData = true;
|
||||
else if (str.toLower() == "off")
|
||||
@@ -658,7 +686,10 @@ int Settings::loadSettings() {
|
||||
else
|
||||
m_widebandOptions.wideBandDisplayStatus = false;
|
||||
|
||||
if (!m_widebandOptions.wideBandData) m_widebandOptions.wideBandDisplayStatus = false;
|
||||
if (!m_widebandOptions.wideBandData)
|
||||
m_widebandOptions.wideBandDisplayStatus = false;
|
||||
if (!m_widebandOptions.wideBandDisplayStatus)
|
||||
m_widebandOptions.wideBandData = false;
|
||||
|
||||
str = settings->value("wideband/averaging", "on").toString();
|
||||
if (str.toLower() == "on")
|
||||
@@ -3352,16 +3383,30 @@ void Settings::setSampleRate(QObject *sender, int value) {
|
||||
m_outputSampleIncrement = 8;
|
||||
m_chirpDownSampleRate = 32;
|
||||
break;
|
||||
|
||||
case 768000:
|
||||
m_sampleRate = value;
|
||||
m_mercurySpeed = 3;
|
||||
m_outputSampleIncrement = 16;
|
||||
m_chirpDownSampleRate = 64;
|
||||
break;
|
||||
|
||||
case 1536000:
|
||||
m_sampleRate = value;
|
||||
m_mercurySpeed = 3;
|
||||
m_outputSampleIncrement = 32;
|
||||
m_chirpDownSampleRate = 128;
|
||||
break;
|
||||
|
||||
default:
|
||||
SETTINGS_DEBUG << "Invalid sample rate (must be 48, 96,192, or 384 kHz)!\n";
|
||||
SETTINGS_DEBUG << "Invalid sample rate (must be 48, 96, 192, 384, 768, or 1536 kHz)!\n";
|
||||
break;
|
||||
}
|
||||
|
||||
for (int i = 0; i < MAX_RECEIVERS; i++)
|
||||
m_receiverDataList[i].sampleRate = m_sampleRate;
|
||||
|
||||
emit sampleRateChanged(sender, value);
|
||||
emit sampleRateChanged(sender, m_sampleRate);
|
||||
}
|
||||
|
||||
void Settings::setMercuryAttenuator(QObject *sender, int value) {
|
||||
|
||||
@@ -483,6 +483,28 @@ typedef struct _networkDeviceCard {
|
||||
char mac_address[18];
|
||||
int boardID;
|
||||
QString boardName;
|
||||
int protocolVersion;
|
||||
int firmwareVersion;
|
||||
int adcCount;
|
||||
int ddcCount;
|
||||
int dspClockHz;
|
||||
bool individualDdcSampleRates;
|
||||
int minDdcSampleRateKsps;
|
||||
int maxDdcSampleRateKsps;
|
||||
bool widebandData;
|
||||
int widebandSamplesPerPacket;
|
||||
int widebandBitsPerSample;
|
||||
int ducCount;
|
||||
int ducSampleRateKsps;
|
||||
int ducBitsPerSample;
|
||||
int ducSamplesPerPacket;
|
||||
int iqFormatFlags;
|
||||
bool phaseWords;
|
||||
bool ducPhaseWords;
|
||||
bool ddcAttenuator;
|
||||
bool ducRxAttenuator;
|
||||
bool hasAlex0;
|
||||
bool hasAlex1;
|
||||
|
||||
} TNetworkDevicecard;
|
||||
|
||||
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
пн апр. 13 21:24:14 2026: ************************************************************************
|
||||
пн апр. 13 21:24:14 2026: Settings:: start at: пн апр. 13 21:24:14 2026
|
||||
пн апр. 13 21:24:14 2026: cudaSDR BETA
|
||||
пн апр. 13 21:24:15 2026: Settings:: Alex config: 4098
|
||||
пн апр. 13 21:24:15 2026: Settings:: reading done.
|
||||
пн апр. 13 21:24:15 2026: Init:: OpenGL found.
|
||||
пн апр. 13 21:24:15 2026: Init:: Framebuffer Objects found.
|
||||
пн апр. 13 21:24:15 2026: Init:: main window setup ...
|
||||
пн апр. 13 21:24:16 2026: MainWindow:: main window init done
|
||||
пн апр. 13 21:24:16 2026: MainWindow:: server ip from ini-file: "192.168.122.1"
|
||||
пн апр. 13 21:24:16 2026: MainWindow:: HPSDR device local ip from ini-file: "192.168.122.1"
|
||||
пн апр. 13 21:24:16 2026: MainWindow:: network interface "bridge0" :
|
||||
пн апр. 13 21:24:16 2026: MainWindow:: -> broadcast address: 172.16.2.255
|
||||
пн апр. 13 21:24:16 2026: MainWindow:: -> ip address: 172.16.2.99
|
||||
пн апр. 13 21:24:16 2026: MainWindow:: network interface "virbr0" :
|
||||
пн апр. 13 21:24:16 2026: MainWindow:: -> broadcast address: 192.168.122.255
|
||||
пн апр. 13 21:24:16 2026: MainWindow:: -> ip address: 192.168.122.1
|
||||
пн апр. 13 21:24:16 2026: MainWindow:: found 2 valid ip addresses.
|
||||
пн апр. 13 21:24:16 2026: MainWindow:: HPSDR network device interface set to: "virbr0"("192.168.122.1")
|
||||
пн апр. 13 21:24:16 2026: MainWindow:: HPSDR network device interface set to: "virbr0"("192.168.122.1")
|
||||
пн апр. 13 21:24:16 2026: MainWindow:: using ip address 192.168.122.1 for the server.
|
||||
пн апр. 13 21:24:16 2026: MainWindow:: using ip address 192.168.122.1 for connecting to a HPSDR device.
|
||||
пн апр. 13 21:24:16 2026: Init:: main window setup done.
|
||||
пн апр. 13 21:24:16 2026: Init:: current path: /home/vladimir/Документы/source/cudaSDR
|
||||
пн апр. 13 21:24:16 2026: Init:: fftw_wisdom does not exist - planning FFT...
|
||||
пн апр. 13 21:24:22 2026: planning FFT size 64 ...
|
||||
пн апр. 13 21:24:23 2026: planning FFT size 128 ...
|
||||
пн апр. 13 21:24:23 2026: planning FFT size 256 ...
|
||||
пн апр. 13 21:24:24 2026: planning FFT size 512 ...
|
||||
ср апр. 29 16:23:06 2026: ************************************************************************
|
||||
ср апр. 29 16:23:06 2026: Settings:: start at: ср апр. 29 16:23:06 2026
|
||||
ср апр. 29 16:23:06 2026: cudaSDR BETA
|
||||
ср апр. 29 16:23:07 2026: Settings:: Alex config: 4098
|
||||
ср апр. 29 16:23:07 2026: Settings:: reading done.
|
||||
ср апр. 29 16:23:07 2026: Init:: OpenGL found.
|
||||
ср апр. 29 16:23:07 2026: Init:: Framebuffer Objects found.
|
||||
ср апр. 29 16:23:07 2026: Init:: main window setup ...
|
||||
ср апр. 29 16:23:08 2026: MainWindow:: main window init done
|
||||
ср апр. 29 16:23:08 2026: MainWindow:: server ip from ini-file: "192.168.122.1"
|
||||
ср апр. 29 16:23:08 2026: MainWindow:: HPSDR device local ip from ini-file: "172.16.2.99"
|
||||
ср апр. 29 16:23:08 2026: MainWindow:: network interface "bridge0" :
|
||||
ср апр. 29 16:23:08 2026: MainWindow:: -> broadcast address: 172.16.2.255
|
||||
ср апр. 29 16:23:08 2026: MainWindow:: -> ip address: 172.16.2.99
|
||||
ср апр. 29 16:23:08 2026: MainWindow:: network interface "virbr0" :
|
||||
ср апр. 29 16:23:08 2026: MainWindow:: -> broadcast address: 192.168.122.255
|
||||
ср апр. 29 16:23:08 2026: MainWindow:: -> ip address: 192.168.122.1
|
||||
ср апр. 29 16:23:08 2026: MainWindow:: found 2 valid ip addresses.
|
||||
ср апр. 29 16:23:08 2026: MainWindow:: HPSDR network device interface set to: "bridge0"("172.16.2.99")
|
||||
ср апр. 29 16:23:08 2026: MainWindow:: HPSDR network device interface set to: "bridge0"("172.16.2.99")
|
||||
ср апр. 29 16:23:08 2026: MainWindow:: using ip address 192.168.122.1 for the server.
|
||||
ср апр. 29 16:23:08 2026: MainWindow:: using ip address 172.16.2.99 for connecting to a HPSDR device.
|
||||
ср апр. 29 16:23:08 2026: Init:: main window setup done.
|
||||
ср апр. 29 16:23:08 2026: Init:: current path: /home/vladimir/Документы/source/cudaSDR
|
||||
ср апр. 29 16:23:08 2026: Init:: fftw_wisdom does not exist - planning FFT...
|
||||
Reference in New Issue
Block a user