Compare commits

...

5 Commits

Author SHA1 Message Date
vladimir ec4af751cd support protocol2 2026-07-26 14:57:44 +03:00
vladimir 6ca18411cf protocol 2 fix 2026-04-14 22:06:31 +03:00
vladimir dde80e5696 fix 2026-04-13 22:06:52 +03:00
vladimir 14d983c840 protocol 2 alex 2026-04-13 20:09:45 +03:00
vladimir d00a699141 protocol 2 2026-04-13 19:25:55 +03:00
33 changed files with 9020 additions and 5515 deletions
View File
+1691 -1694
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -1,3 +1,3 @@
[General] [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) 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\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) 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
View File
File diff suppressed because it is too large Load Diff
+8
View File
@@ -26,6 +26,8 @@ HEADERS += \
./src/DataEngine/cusdr_dataIO.h \ ./src/DataEngine/cusdr_dataIO.h \
./src/DataEngine/cusdr_discoverer_P1.h \ ./src/DataEngine/cusdr_discoverer_P1.h \
./src/DataEngine/cusdr_discoverer_P2.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/cusdr_receiver.h \
./src/DataEngine/soundout.h \ ./src/DataEngine/soundout.h \
./src/DataEngine/fractresampler.h \ ./src/DataEngine/fractresampler.h \
@@ -102,6 +104,8 @@ HEADERS += \
./src/DataEngine/cusdr_dataIO.h \ ./src/DataEngine/cusdr_dataIO.h \
./src/DataEngine/cusdr_discoverer_P1.h \ ./src/DataEngine/cusdr_discoverer_P1.h \
./src/DataEngine/cusdr_discoverer_P2.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/cusdr_receiver.h \
./src/DataEngine/soundout.h \ ./src/DataEngine/soundout.h \
./src/DataEngine/fractresampler.h \ ./src/DataEngine/fractresampler.h \
@@ -176,6 +180,8 @@ SOURCES += \
./src/DataEngine/cusdr_dataIO.cpp \ ./src/DataEngine/cusdr_dataIO.cpp \
./src/DataEngine/cusdr_discoverer_P1.cpp \ ./src/DataEngine/cusdr_discoverer_P1.cpp \
./src/DataEngine/cusdr_discoverer_P2.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/cusdr_receiver.cpp \
./src/DataEngine/soundout.cpp \ ./src/DataEngine/soundout.cpp \
./src/DataEngine/fractresampler.cpp \ ./src/DataEngine/fractresampler.cpp \
@@ -245,6 +251,8 @@ SOURCES += \
./src/DataEngine/cusdr_dataIO.cpp \ ./src/DataEngine/cusdr_dataIO.cpp \
./src/DataEngine/cusdr_discoverer_P1.cpp \ ./src/DataEngine/cusdr_discoverer_P1.cpp \
./src/DataEngine/cusdr_discoverer_P2.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/cusdr_receiver.cpp \
./src/DataEngine/soundout.cpp \ ./src/DataEngine/soundout.cpp \
./src/DataEngine/fractresampler.cpp \ ./src/DataEngine/fractresampler.cpp \
+104 -62
View File
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!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> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>
<value type="QByteArray">{9df2227e-2f94-4455-9fee-2b0603509b19}</value> <value type="QByteArray">{96b01fe1-0bbd-4672-be89-b23907511d36}</value>
</data> </data>
<data> <data>
<variable>ProjectExplorer.Project.ActiveTarget</variable> <variable>ProjectExplorer.Project.ActiveTarget</variable>
@@ -13,8 +13,8 @@
<data> <data>
<variable>ProjectExplorer.Project.EditorSettings</variable> <variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap"> <valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoDetect">true</value>
<value type="bool" key="EditorConfiguration.AutoIndent">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> <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0"> <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value> <value type="QString" key="language">Cpp</value>
@@ -33,6 +33,7 @@
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value> <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value> <value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</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="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value> <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">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.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value> <value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</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.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value> <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</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.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value> <value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap> </valuemap>
<value type="bool" key="AutoTest.ApplyFilter">false</value>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/> <valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<valuelist type="QVariantList" key="AutoTest.PathFilters"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value> <value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value> <value type="bool" key="AutoTest.UseGlobal">true</value>
<valuemap type="QVariantMap" key="ClangTools"> <valuemap type="QVariantMap" key="ClangTools">
@@ -83,22 +86,24 @@
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/> <valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value> <value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap> </valuemap>
<value type="int" key="RcSync">0</value>
</valuemap> </valuemap>
</data> </data>
<data> <data>
<variable>ProjectExplorer.Project.Target.0</variable> <variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap"> <valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value> <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="bool" key="HasPerBcDcs">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.15.2 MinGW 64-bit</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Qt 5.15.18 (Системная)</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5152.win64_mingw81_kit</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.ActiveBuildConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> <value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> <value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0"> <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="int" key="EnableQmlDebugging">0</value> <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">./build/%{Asciify:%{Kit:FileSystemName}-%{BuildConfig:Name}}</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.shadowDir">build/Qt_5_15_18-u041eu0442u043bu0430u0434u043au0430</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@@ -133,11 +138,51 @@
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Отладка</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</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> <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
</valuemap> </valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1"> <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">/home/vladimir/Документы/source/cudaSDR/Source</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/karpe/Documents/source/cudaSDR/Source/build/Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@@ -170,54 +215,47 @@
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/> <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value> <value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/> <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="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
<value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value> <value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="QtQuickCompiler">0</value> <value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
</valuemap> <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="EnableQmlDebugging">0</value> <value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:\Users\karpe\Documents\source\cudaSDR\Source\build\Profile</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Развёртывание</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">C:/Users/karpe/Documents/source/cudaSDR/Source/build/Profile</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Развёртывание</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
<value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
<valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
</valuemap> </valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1"> <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> <valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> <value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
</valuemap> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
<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>
</valuemap> </valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1"> <value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0"> <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value> <value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value> <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value> <value type="int" key="Analyzer.Valgrind.Callgrind.CostFormat">0</value>
</valuemap> <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value> <valuelist type="QVariantList" key="Analyzer.Valgrind.SuppressionFiles"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Очистка</value> <valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Очистка</value> <value type="int" key="PE.EnvironmentAspect.Base">2</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</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> </valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value> <value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</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="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</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> </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.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0"> <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value> <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="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="int" key="Analyzer.Valgrind.Callgrind.CostFormat">0</value> <value type="int" key="Analyzer.Valgrind.Callgrind.CostFormat">0</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value> <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.SuppressionFiles"/>
<valuelist type="QVariantList" key="CustomOutputParsers"/> <valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value> <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="bool" key="PE.EnvironmentAspect.PrintOnRun">false</value>
<value type="QString" key="PerfRecordArgsId">-e cpu-cycles --call-graph &quot;dwarf,4096&quot; -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.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value> <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/vladimir/Документы/source/cudaSDR/Source/cudaSDR.pro</value>
<value type="bool" key="ProjectExplorer.RunConfiguration.Customized">false</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.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value> <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">%{RunConfig:Executable:Path}</value>
</valuemap> </valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value> <value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap> </valuemap>
@@ -255,10 +301,6 @@
<variable>ProjectExplorer.Project.TargetCount</variable> <variable>ProjectExplorer.Project.TargetCount</variable>
<value type="qlonglong">1</value> <value type="qlonglong">1</value>
</data> </data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data> <data>
<variable>Version</variable> <variable>Version</variable>
<value type="int">22</value> <value type="int">22</value>
Binary file not shown.
+210
View File
@@ -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)
)
+184 -62
View File
@@ -39,6 +39,7 @@
// use WIDEBAND_PROCESSOR_DEBUG // use WIDEBAND_PROCESSOR_DEBUG
#include "cusdr_dataEngine.h" #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 adc_rx1_4, adc_rx5_8, adc_rx9_16;
static quint8 new_adc_rx1_4, new_adc_rx5_8, new_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) DataEngine::DataEngine(QObject *parent)
: QObject(parent) : QObject(parent)
, set(Settings::instance()) , set(Settings::instance())
@@ -88,6 +128,7 @@ DataEngine::DataEngine(QObject *parent)
, m_hpsdrDevices(0) , m_hpsdrDevices(0)
, m_configure(10) , m_configure(10)
, m_timeout(5000) , m_timeout(5000)
, m_discoveryProtocol(1)
, m_remainingTime(0) , m_remainingTime(0)
, m_RxFrequencyChange(0) , m_RxFrequencyChange(0)
, m_forwardPower(0) , m_forwardPower(0)
@@ -297,6 +338,12 @@ void DataEngine::setupConnections() {
this, this,
SLOT(searchHpsdrNetworkDevices())); SLOT(searchHpsdrNetworkDevices()));
CHECKED_CONNECT(
set,
SIGNAL(widebandDataChanged(QObject *, bool)),
this,
SLOT(setWidebandData(QObject *, bool)));
/*CHECKED_CONNECT( /*CHECKED_CONNECT(
set, set,
SIGNAL(spectrumAveragingChanged(QObject*, int, bool)), SIGNAL(spectrumAveragingChanged(QObject*, int, bool)),
@@ -401,7 +448,7 @@ bool DataEngine::startDataEngineWithoutConnection() {
if (!m_dataProcessor) createDataProcessor(); if (!m_dataProcessor) createDataProcessor();
// data receiver thread // data receiver thread
if (!startDataIO(QThread::NormalPriority)) { if (!startDataIO(QThread::HighestPriority)) {
setSystemState(QSDR::DataReceiverThreadError, m_hwInterface, m_serverMode, QSDR::DataEngineDown); setSystemState(QSDR::DataReceiverThreadError, m_hwInterface, m_serverMode, QSDR::DataEngineDown);
return false; return false;
@@ -459,33 +506,32 @@ bool DataEngine::startDataEngineWithoutConnection() {
bool DataEngine::findHPSDRDevices() { bool DataEngine::findHPSDRDevices() {
if (!m_discoverer) createDiscoverer(); for (int protocolVersion = 1; protocolVersion <= 2; ++protocolVersion) {
// HPSDR network IO thread m_discoveryProtocol = protocolVersion;
if (!startDiscoverer(QThread::NormalPriority)) {
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(); io.networkIOMutex.lock();
DATA_ENGINE_DEBUG << "HPSDR device discovery thread could not be started."; DATA_ENGINE_DEBUG << "HPSDR network device detection...please wait.";
io.networkIOMutex.unlock(); set->setSystemMessage("HPSDR network device detection...please wait", 0);
return false; io.devicefound.wait(&io.networkIOMutex);
}
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) {
m_hpsdrDevices = set->getHpsdrNetworkDevices();
io.networkIOMutex.unlock(); io.networkIOMutex.unlock();
stopDiscoverer(); 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); if (m_hpsdrDevices == 0)
} continue;
else {
emit clearSystemMessageEvent(); emit clearSystemMessageEvent();
if (m_hpsdrDevices > 1) if (m_hpsdrDevices > 1)
@@ -495,29 +541,62 @@ bool DataEngine::findHPSDRDevices() {
DATA_ENGINE_DEBUG << "found " << metisList.count() << " network device(s)"; 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 " DATA_ENGINE_DEBUG << "Device "
<< i << " @ " << i << " @ "
<< qPrintable(metisList.at(i).ip_address.toString()) << 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.hpsdrDeviceIPAddress = set->getCurrentMetisCard().ip_address;
io.hpsdrDeviceName = set->getCurrentMetisCard().boardName; io.hpsdrDeviceName = set->getCurrentMetisCard().boardName;
DATA_ENGINE_DEBUG << "using HPSDR network device at " << qPrintable(io.hpsdrDeviceIPAddress.toString()); DATA_ENGINE_DEBUG << "using HPSDR network device at " << qPrintable(io.hpsdrDeviceIPAddress.toString());
//Sleep(100);
SleeperThread::msleep(100); SleeperThread::msleep(100);
// stop the discovery thread if (set->getCurrentMetisCard().protocolVersion >= 2) {
io.networkIOMutex.unlock(); const TNetworkDevicecard currentDevice = set->getCurrentMetisCard();
stopDiscoverer(); 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; 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; return false;
} }
@@ -571,7 +650,7 @@ bool DataEngine::getFirmwareVersions() {
} }
// data IO thread // data IO thread
if (!startDataIO(QThread::NormalPriority)) {// ::NormalPriority)) { if (!startDataIO(QThread::HighestPriority)) {// ::NormalPriority)) {
DATA_ENGINE_DEBUG << "data IO thread could not be started."; DATA_ENGINE_DEBUG << "data IO thread could not be started.";
return false; return false;
@@ -580,12 +659,15 @@ bool DataEngine::getFirmwareVersions() {
//setSampleRate(this, set->getSampleRate()); //setSampleRate(this, set->getSampleRate());
SleeperThread::msleep(100); SleeperThread::msleep(100);
// pre-conditioning // pre-conditioning
for (int i = 0; i < io.receivers; i++) const bool protocol2Active = (set->getCurrentMetisCard().protocolVersion >= 2);
m_dataIO->sendInitFramesToNetworkDevice(i); if (!protocol2Active) {
for (int i = 0; i < io.receivers; i++)
invokeDataIOInitFrame(m_dataIO, i);
}
if (m_serverMode == QSDR::SDRMode) if (m_serverMode == QSDR::SDRMode)
m_dataIO->networkDeviceStartStop(0x01); // 0x01 for starting Metis without wide band data invokeDataIOStartStop(m_dataIO, 0x01); // 0x01 for starting Metis without wide band data
m_networkDeviceRunning = true; m_networkDeviceRunning = true;
setSystemState(QSDR::NoError, m_hwInterface, m_serverMode, QSDR::DataEngineUp); setSystemState(QSDR::NoError, m_hwInterface, m_serverMode, QSDR::DataEngineUp);
@@ -968,7 +1050,7 @@ bool DataEngine::start() {
} }
// data IO thread // 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."; DATA_ENGINE_DEBUG << "data IO thread could not be started.";
return false; return false;
@@ -987,13 +1069,16 @@ bool DataEngine::start() {
SleeperThread::msleep(100); SleeperThread::msleep(100);
// pre-conditioning // pre-conditioning
for (int i = 0; i < io.receivers; i++) const bool protocol2Active = (set->getCurrentMetisCard().protocolVersion >= 2);
m_dataIO->sendInitFramesToNetworkDevice(i); if (!protocol2Active) {
for (int i = 0; i < io.receivers; i++)
invokeDataIOInitFrame(m_dataIO, i);
}
if (m_serverMode == QSDR::SDRMode && set->getWidebandData()) 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 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; m_networkDeviceRunning = true;
@@ -1017,10 +1102,10 @@ void DataEngine::stop() {
// turn time stamping off // turn time stamping off
setTimeStamp(this, false); setTimeStamp(this, false);
// stop the device // stop the device
m_dataIO->networkDeviceStartStop(0); invokeDataIOStartStop(m_dataIO, 0);
m_networkDeviceRunning = false; m_networkDeviceRunning = false;
DATA_ENGINE_DEBUG << "HPSDR device stopped"; DATA_ENGINE_DEBUG << "HPSDR device stopped";
// stop the threads // stop the threads
//SleeperThread::msleep(100); //SleeperThread::msleep(100);
@@ -1434,7 +1519,10 @@ void DataEngine::disconnectDSPSlots() {
void DataEngine::createDiscoverer() { 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_discoveryThread = new QThreadEx();
m_discoverer->moveToThread(m_discoveryThread); m_discoverer->moveToThread(m_discoveryThread);
@@ -1570,7 +1658,7 @@ void DataEngine::stopDataIO() {
if (m_dataIOThread->isRunning()) { if (m_dataIOThread->isRunning()) {
m_dataIO->stop(); invokeDataIOStop(m_dataIO);
m_dataIOThread->quit(); m_dataIOThread->quit();
while (!m_dataIOThread->isFinished()) { while (!m_dataIOThread->isFinished()) {
@@ -2114,23 +2202,29 @@ float DataEngine::getFilterSizeCalibrationOffset() {
void DataEngine::searchHpsdrNetworkDevices() { void DataEngine::searchHpsdrNetworkDevices() {
if (!m_discoverer) createDiscoverer(); for (int protocolVersion = 1; protocolVersion <= 2; ++protocolVersion) {
// HPSDR network IO thread m_discoveryProtocol = protocolVersion;
if (!startDiscoverer(QThread::NormalPriority)) {
DATA_ENGINE_DEBUG << "HPSDR network discovery thread could not be started."; if (!m_discoverer)
return; 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) { void DataEngine::setHPSDRDeviceNumber(int value) {
@@ -2197,6 +2291,18 @@ void DataEngine::setSampleRate(QObject *sender, int value) {
io.outputMultiplier = 8; io.outputMultiplier = 8;
break; 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: default:
DATA_ENGINE_DEBUG << "invalid sample rate !\n"; DATA_ENGINE_DEBUG << "invalid sample rate !\n";
stop(); stop();
@@ -2505,6 +2611,19 @@ void DataEngine::setFrequency(QObject* sender, int mode, int rx, long frequency)
io.tx_freq_change = rx; 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) { void DataEngine::loadWavFile(const QString &fileName) {
if (m_audioEngine->loadFile(fileName)) if (m_audioEngine->loadFile(fileName))
@@ -3587,6 +3706,9 @@ void DataProcessor::encodeCCBytes() {
void DataProcessor::writeData() { void DataProcessor::writeData() {
if (set->getCurrentMetisCard().protocolVersion >= 2)
return;
if (m_setNetworkDeviceHeader) { if (m_setNetworkDeviceHeader) {
//RRK updated for 4byte int and network order //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) { for (int i = 0; i < length; i += 2) {
s = (int)((qint8 ) buffer.at(i+1)) << 8; s = (int)((qint8 ) buffer.at(i)) << 8;
s += (int)((quint8) buffer.at(i)); s += (int)((quint8) buffer.at(i+1));
sample = (float)(s * norm); sample = (float)(s * norm);
cpxWBIn[i/2].re = sample * io->wbWindow.at(i/2); cpxWBIn[i/2].re = sample * io->wbWindow.at(i/2);
+4 -1
View File
@@ -49,6 +49,7 @@
#include "cusdr_chirpProcessor.h" #include "cusdr_chirpProcessor.h"
#include "cusdr_audioReceiver.h" #include "cusdr_audioReceiver.h"
#include "cusdr_discoverer_P1.h" #include "cusdr_discoverer_P1.h"
#include "cusdr_discoverer_P2.h"
#include "Util/qcircularbuffer.h" #include "Util/qcircularbuffer.h"
#include "QtDSP/qtdsp_fft.h" #include "QtDSP/qtdsp_fft.h"
#include "QtDSP/qtdsp_filter.h" #include "QtDSP/qtdsp_filter.h"
@@ -143,6 +144,7 @@ public slots:
void setMercuryTiming(QObject* sender, int value); void setMercuryTiming(QObject* sender, int value);
void setHamBand(QObject *sender, int rx, bool byBtn, HamBand band); void setHamBand(QObject *sender, int rx, bool byBtn, HamBand band);
void setFrequency(QObject* sender, int mode, int rx, long frequency); void setFrequency(QObject* sender, int mode, int rx, long frequency);
void setWidebandData(QObject *sender, bool value);
void loadWavFile(const QString &fileName); void loadWavFile(const QString &fileName);
void suspend(); void suspend();
@@ -198,7 +200,7 @@ private:
AudioEngine* m_audioEngine; AudioEngine* m_audioEngine;
AudioOutProcessor* m_audioOutProcessor; AudioOutProcessor* m_audioOutProcessor;
ChirpProcessor* m_chirpProcessor; ChirpProcessor* m_chirpProcessor;
DiscovererP1* m_discoverer; QObject* m_discoverer;
QThreadEx* m_discoveryThread; QThreadEx* m_discoveryThread;
QThreadEx* m_dataIOThread; QThreadEx* m_dataIOThread;
@@ -258,6 +260,7 @@ private:
int m_timeout; int m_timeout;
int m_txFrame; int m_txFrame;
int m_bytes; int m_bytes;
int m_discoveryProtocol;
int m_remainingTime; int m_remainingTime;
int m_found; int m_found;
int m_RxFrequencyChange; int m_RxFrequencyChange;
+90 -11
View File
@@ -24,9 +24,8 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/ */
#define LOG_DATAIO
#include "cusdr_dataIO.h" #include "cusdr_dataIO.h"
#include "cusdr_protocol2_io.h"
#include "soundout.h" #include "soundout.h"
#if defined(Q_OS_WIN32) #if defined(Q_OS_WIN32)
@@ -41,6 +40,7 @@ DataIO::DataIO(THPSDRParameter *ioData)
, set(Settings::instance()) , set(Settings::instance())
, io(ioData) , io(ioData)
, m_dataIOSocketOn(false) , m_dataIOSocketOn(false)
, m_protocol2(0)
, m_setNetworkDeviceHeader(true) , m_setNetworkDeviceHeader(true)
, m_sequence(0) , m_sequence(0)
, m_oldSequence(-1) , m_oldSequence(-1)
@@ -56,6 +56,7 @@ DataIO::DataIO(THPSDRParameter *ioData)
, m_stopped(false) , m_stopped(false)
{ {
m_dataIOSocket = 0; m_dataIOSocket = 0;
m_protocol2 = new Protocol2DataPath(set, io, this);
m_metisGetDataSignature.resize(3); m_metisGetDataSignature.resize(3);
m_metisGetDataSignature[0] = (char)0xEF; m_metisGetDataSignature[0] = (char)0xEF;
@@ -106,11 +107,17 @@ DataIO::DataIO(THPSDRParameter *ioData)
DataIO::~DataIO() { DataIO::~DataIO() {
if (m_dataIOSocketOn) { if (m_dataIOSocketOn && m_dataIOSocket) {
m_dataIOSocket->close(); m_dataIOSocket->close();
delete m_dataIOSocket; delete m_dataIOSocket;
m_dataIOSocket = 0; m_dataIOSocket = 0;
} }
if (m_pSoundCardOut) {
m_pSoundCardOut->Stop();
delete m_pSoundCardOut;
m_pSoundCardOut = 0;
}
} }
void DataIO::stop() { void DataIO::stop() {
@@ -119,15 +126,20 @@ void DataIO::stop() {
m_stopped = true; m_stopped = true;
io->networkIOMutex.unlock(); io->networkIOMutex.unlock();
if(m_pSoundCardOut) { if (m_protocol2 && m_protocol2->isActive())
m_protocol2->stop();
if (m_pSoundCardOut)
SleeperThread::msleep(100); SleeperThread::msleep(100);
m_pSoundCardOut->Stop();
delete m_pSoundCardOut;
}
} }
void DataIO::initDataReceiverSocket() { void DataIO::initDataReceiverSocket() {
if (m_protocol2 && m_protocol2->isActive()) {
m_dataIOSocketOn = m_protocol2->initSockets();
return;
}
m_dataIOSocket = new QUdpSocket(); m_dataIOSocket = new QUdpSocket();
int newBufferSize; int newBufferSize;
@@ -141,7 +153,21 @@ void DataIO::initDataReceiverSocket() {
} }
else { 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; newBufferSize = 128*1024;//128 * 1032;
io->networkIOMutex.lock(); io->networkIOMutex.lock();
@@ -171,9 +197,27 @@ void DataIO::initDataReceiverSocket() {
} }
} }
if (m_dataIOSocket->bind(QHostAddress(set->getHPSDRDeviceLocalAddr()), const QHostAddress localAddress(set->getHPSDRDeviceLocalAddr());
set->getMetisPort(), const quint16 requestedPort = set->getMetisPort();
QUdpSocket::DontShareAddress)) 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)) //QUdpSocket::ReuseAddressHint | QUdpSocket::ShareAddress))
{ {
@@ -230,6 +274,9 @@ void DataIO::initDataReceiverSocket() {
void DataIO::readDeviceData() { void DataIO::readDeviceData() {
if (m_protocol2 && m_protocol2->isActive())
return;
while (m_dataIOSocket->hasPendingDatagrams()) { while (m_dataIOSocket->hasPendingDatagrams()) {
QMutexLocker locker(&io->networkIOMutex); QMutexLocker locker(&io->networkIOMutex);
@@ -357,6 +404,11 @@ void DataIO::readData() {
void DataIO::sendInitFramesToNetworkDevice(int rx) { void DataIO::sendInitFramesToNetworkDevice(int rx) {
if (m_protocol2 && m_protocol2->isActive()) {
m_protocol2->sendInitFramesToNetworkDevice(rx);
return;
}
QByteArray initDatagram; QByteArray initDatagram;
initDatagram.resize(1032); initDatagram.resize(1032);
@@ -446,6 +498,11 @@ void DataIO::sendInitFramesToNetworkDevice(int rx) {
void DataIO::networkDeviceStartStop(char value) { void DataIO::networkDeviceStartStop(char value) {
if (m_protocol2 && m_protocol2->isActive()) {
m_protocol2->networkDeviceStartStop(value);
return;
}
TNetworkDevicecard metis = set->getCurrentMetisCard(); TNetworkDevicecard metis = set->getCurrentMetisCard();
//QUdpSocket socket; //QUdpSocket socket;
@@ -517,6 +574,9 @@ void DataIO::sendAudio(u_char *buf) {
void DataIO::writeData() { void DataIO::writeData() {
if (m_protocol2 && m_protocol2->isActive())
return;
if (m_setNetworkDeviceHeader) { if (m_setNetworkDeviceHeader) {
m_outDatagram.resize(0); m_outDatagram.resize(0);
@@ -561,6 +621,9 @@ void DataIO::setManualSocketBufferSize(QObject *sender, bool value) {
Q_UNUSED (sender) Q_UNUSED (sender)
if (m_protocol2 && m_protocol2->isActive())
return;
m_manualBufferSize = value; m_manualBufferSize = value;
DATAIO_DEBUG << "m_manualBufferSize to change = " << m_manualBufferSize; DATAIO_DEBUG << "m_manualBufferSize to change = " << m_manualBufferSize;
int socketBufferSize = 1032 * set->getSocketBufferSize(); int socketBufferSize = 1032 * set->getSocketBufferSize();
@@ -601,6 +664,9 @@ void DataIO::setSocketBufferSize(QObject *sender, int value) {
Q_UNUSED (sender) Q_UNUSED (sender)
if (m_protocol2 && m_protocol2->isActive())
return;
int socketBufferSize = value * 1024; int socketBufferSize = value * 1024;
DATAIO_DEBUG << "m_socketBufferSize = " << value; DATAIO_DEBUG << "m_socketBufferSize = " << value;
@@ -621,6 +687,9 @@ void DataIO::setSampleRate(QObject *sender, int value) {
Q_UNUSED(sender) Q_UNUSED(sender)
if (m_protocol2 && m_protocol2->isActive())
return;
int bufferSize; int bufferSize;
io->networkIOMutex.lock(); io->networkIOMutex.lock();
switch (value) { switch (value) {
@@ -645,6 +714,16 @@ void DataIO::setSampleRate(QObject *sender, int value) {
DATAIO_DEBUG << "socket buffer size set to 128 kB."; DATAIO_DEBUG << "socket buffer size set to 128 kB.";
break; 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: default:
DATAIO_DEBUG << "invalid sample rate !\n"; DATAIO_DEBUG << "invalid sample rate !\n";
break; break;
+1
View File
@@ -74,6 +74,7 @@ private slots:
private: private:
Settings* set; Settings* set;
QUdpSocket* m_dataIOSocket; QUdpSocket* m_dataIOSocket;
class Protocol2DataPath* m_protocol2;
//QMutex m_mutex; //QMutex m_mutex;
QByteArray m_commandDatagram; QByteArray m_commandDatagram;
QByteArray m_datagram; QByteArray m_datagram;
@@ -226,6 +226,28 @@ int DiscovererP1::findHPSDRDevices() {
mcP1.boardID = no; mcP1.boardID = no;
mcP1.boardName = str; 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(); io->networkIOMutex.lock();
DISCOVERER_DEBUG << "Device board ID: " << no; DISCOVERER_DEBUG << "Device board ID: " << no;
DISCOVERER_DEBUG << "Device is: " << qPrintable(str); DISCOVERER_DEBUG << "Device is: " << qPrintable(str);
+78 -36
View File
@@ -28,6 +28,7 @@
#define LOG_DISCOVERER #define LOG_DISCOVERER
#include "cusdr_discoverer_P2.h" #include "cusdr_discoverer_P2.h"
#include "cusdr_protocol2_profile.h"
#include "Util/cusdr_buttons.h" #include "Util/cusdr_buttons.h"
@@ -185,10 +186,14 @@ int DiscovererP2::findHPSDRDevices() {
m_deviceDatagram.resize(socket.pendingDatagramSize()); m_deviceDatagram.resize(socket.pendingDatagramSize());
socket.readDatagram(m_deviceDatagram.data(), m_deviceDatagram.size(), &mcP2.ip_address, &port); 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; 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", sprintf(mcP2.mac_address, "%02X:%02X:%02X:%02X:%02X:%02X",
m_deviceDatagram[5] & 0xFF, m_deviceDatagram[6] & 0xFF, m_deviceDatagram[7] & 0xFF, m_deviceDatagram[5] & 0xFF, m_deviceDatagram[6] & 0xFF, m_deviceDatagram[7] & 0xFF,
@@ -196,41 +201,87 @@ int DiscovererP2::findHPSDRDevices() {
io->networkIOMutex.lock(); 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 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(); io->networkIOMutex.unlock();
device = m_deviceDatagram[11] & 0xFF; device = m_deviceDatagram[11] & 0xFF;
QString str; const Protocol2BoardProfile profile = protocol2BoardProfile(device);
if (device == 0) QString str = profile.boardName;
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";
}
mcP2.boardID = device; mcP2.boardID = device;
mcP2.boardName = str; 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(); io->networkIOMutex.lock();
DISCOVERER_DEBUG << "Protocol 2 device board ID: " << device; DISCOVERER_DEBUG << "Protocol 2 device board ID: " << device;
DISCOVERER_DEBUG << "Protocol 2 device is: " << qPrintable(str); 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(); io->networkIOMutex.unlock();
m_deviceCards.append(mcP2); m_deviceCards.append(mcP2);
str += " ("; set->addNetworkIOComboBoxEntry(protocol2DeviceSummary(mcP2));
str += mcP2.ip_address.toString();
str += ")";
set->addNetworkIOComboBoxEntry(str);
devicesFound++; devicesFound++;
} }
else { else {
@@ -274,20 +325,11 @@ void DiscovererP2::clear() {
void DiscovererP2::shutdownHPSDRDevice() { void DiscovererP2::shutdownHPSDRDevice() {
long sequence = 0; QByteArray arr(1444, 0x00);
QByteArray arr;
arr.resize(1444);
arr[0] = sequence >> 24;
arr[1] = sequence >> 16;
arr[2] = sequence >> 8;
arr[3] = sequence;
arr[4] = 0;
QUdpSocket socket; QUdpSocket socket;
QHostAddress addr = mcP2.ip_address; QHostAddress addr = mcP2.ip_address;
if (socket.writeDatagram(arr, addr, HIGH_PRIORITY_FROM_HOST_PORT) < 0) { if (socket.writeDatagram(arr, addr, HIGH_PRIORITY_FROM_HOST_PORT) < 0)
DISCOVERER_DEBUG << "protocol 2 forced shutdown socket write failed."; DISCOVERER_DEBUG << "protocol 2 forced shutdown socket write failed.";
}
} }
File diff suppressed because it is too large Load Diff
+137
View File
@@ -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
+9 -1
View File
@@ -373,8 +373,16 @@ void Receiver::setSampleRate(QObject *sender, int value) {
m_samplerate = value; m_samplerate = value;
break; break;
case 768000:
m_samplerate = value;
break;
case 1536000:
m_samplerate = value;
break;
default: default:
RECEIVER_DEBUG << "invalid sample rate (possible values are: 48, 96, 192, or 384 kHz)!\n"; RECEIVER_DEBUG << "invalid sample rate (possible values are: 48, 96, 192, 384, 768, or 1536 kHz)!\n";
break; break;
} }
+21
View File
@@ -118,6 +118,7 @@ OGLDisplayPanel::OGLDisplayPanel(QWidget *parent)
setupConnections(); setupConnections();
setupTextstrings(); setupTextstrings();
setCurrentNetworkDevice(set->getCurrentMetisCard());
set10mhzSource(this, set->get10MHzSource()); set10mhzSource(this, set->get10MHzSource());
set122_88mhzSource(this, set->get122_8MHzSource()); set122_88mhzSource(this, set->get122_8MHzSource());
@@ -281,6 +282,12 @@ void OGLDisplayPanel::setupConnections() {
this, this,
SLOT(setHermesVersion(int))); SLOT(setHermesVersion(int)));
CHECKED_CONNECT(
set,
SIGNAL(hpsdrNetworkDeviceChanged(TNetworkDevicecard)),
this,
SLOT(setCurrentNetworkDevice(TNetworkDevicecard)));
CHECKED_CONNECT( CHECKED_CONNECT(
set, set,
SIGNAL(alexPresenceChanged(bool)), SIGNAL(alexPresenceChanged(bool)),
@@ -2745,6 +2752,20 @@ void OGLDisplayPanel::setMetisVersion(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) { void OGLDisplayPanel::setExcaliburVersion(QObject *sender, int value) {
Q_UNUSED (sender) Q_UNUSED (sender)
+1
View File
@@ -324,6 +324,7 @@ private slots:
void setPenelopeVersion(int value); void setPenelopeVersion(int value);
void setPennylaneVersion(int value); void setPennylaneVersion(int value);
void setMetisVersion(int value); void setMetisVersion(int value);
void setCurrentNetworkDevice(TNetworkDevicecard card);
void setExcaliburVersion(QObject *sender, int value); void setExcaliburVersion(QObject *sender, int value);
void setAlexVersion(QObject *sender, int value); void setAlexVersion(QObject *sender, int value);
+11
View File
@@ -2683,7 +2683,18 @@ void QGLDistancePanel::sampleRateChanged(QObject *sender, int value) {
Q_UNUSED(sender) Q_UNUSED(sender)
if (m_sampleRate == value)
return;
m_sampleRate = value; 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(); update();
} }
+19
View File
@@ -4315,13 +4315,32 @@ void QGLReceiverPanel::sampleRateChanged(QObject *sender, int value) {
Q_UNUSED(sender) Q_UNUSED(sender)
if (m_sampleRate == value)
return;
m_sampleRate = value; 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_deltaF = (qreal)(1.0*m_deltaFrequency/m_sampleRate);
m_freqScalePanadapterUpdate = true; m_freqScalePanadapterUpdate = true;
m_freqScalePanadapterRenew = true;
m_panGridUpdate = true; m_panGridUpdate = true;
m_panGridRenew = true;
m_waterfallUpdate = true;
m_waterfallDisplayUpdate = true;
m_secScaleWaterfallUpdate = true;
m_peakHoldBufferResize = true; m_peakHoldBufferResize = true;
m_filterChanged = true; m_filterChanged = true;
m_spectrumVertexColorUpdate = true;
m_spectrumColorsChanged = true;
m_panadapterBins.clear();
m_panPeakHoldBins.clear();
m_waterfallPixel.clear();
update(); update();
} }
+11
View File
@@ -2027,7 +2027,18 @@ void QGLWidebandPanel::sampleRateChanged(QObject *sender, int value) {
Q_UNUSED(sender) Q_UNUSED(sender)
if (m_sampleRate == value)
return;
m_sampleRate = value; 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(); update();
} }
+9 -1
View File
@@ -324,8 +324,16 @@ void QDSPEngine::setSampleRate(QObject *sender, int value) {
m_samplerate = value; m_samplerate = value;
break; break;
case 768000:
m_samplerate = value;
break;
case 1536000:
m_samplerate = value;
break;
default: default:
DSP_ENGINE_DEBUG << "invalid sample rate (possible values are: 48, 96, 192, or 384 kHz)!\n"; DSP_ENGINE_DEBUG << "invalid sample rate (possible values are: 48, 96, 192, 384, 768, or 1536 kHz)!\n";
break; break;
} }
+156 -7
View File
@@ -131,6 +131,18 @@ void HPSDRWidget::setupConnections() {
QSDR::_HWInterfaceMode, QSDR::_HWInterfaceMode,
QSDR::_ServerMode, QSDR::_ServerMode,
QSDR::_DataEngineState))); 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() { QGroupBox* HPSDRWidget::hpsdrHardwareBtnGroup() {
@@ -460,6 +472,20 @@ QGroupBox *HPSDRWidget::sampleRateExclusiveGroup() {
samplerateBtnList.append(samplerate384Btn); samplerateBtnList.append(samplerate384Btn);
CHECKED_CONNECT(samplerate384Btn, SIGNAL(released()), this, SLOT(sampleRateChanged())); 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()) { switch(set->getSampleRate()) {
case 48000: case 48000:
@@ -467,6 +493,8 @@ QGroupBox *HPSDRWidget::sampleRateExclusiveGroup() {
samplerate96Btn->setBtnState(AeroButton::OFF); samplerate96Btn->setBtnState(AeroButton::OFF);
samplerate192Btn->setBtnState(AeroButton::OFF); samplerate192Btn->setBtnState(AeroButton::OFF);
samplerate384Btn->setBtnState(AeroButton::OFF); samplerate384Btn->setBtnState(AeroButton::OFF);
samplerate768Btn->setBtnState(AeroButton::OFF);
samplerate1536Btn->setBtnState(AeroButton::OFF);
break; break;
case 96000: case 96000:
@@ -474,6 +502,8 @@ QGroupBox *HPSDRWidget::sampleRateExclusiveGroup() {
samplerate96Btn->setBtnState(AeroButton::ON); samplerate96Btn->setBtnState(AeroButton::ON);
samplerate192Btn->setBtnState(AeroButton::OFF); samplerate192Btn->setBtnState(AeroButton::OFF);
samplerate384Btn->setBtnState(AeroButton::OFF); samplerate384Btn->setBtnState(AeroButton::OFF);
samplerate768Btn->setBtnState(AeroButton::OFF);
samplerate1536Btn->setBtnState(AeroButton::OFF);
break; break;
case 192000: case 192000:
@@ -481,6 +511,8 @@ QGroupBox *HPSDRWidget::sampleRateExclusiveGroup() {
samplerate96Btn->setBtnState(AeroButton::OFF); samplerate96Btn->setBtnState(AeroButton::OFF);
samplerate192Btn->setBtnState(AeroButton::ON); samplerate192Btn->setBtnState(AeroButton::ON);
samplerate384Btn->setBtnState(AeroButton::OFF); samplerate384Btn->setBtnState(AeroButton::OFF);
samplerate768Btn->setBtnState(AeroButton::OFF);
samplerate1536Btn->setBtnState(AeroButton::OFF);
break; break;
case 384000: case 384000:
@@ -488,6 +520,26 @@ QGroupBox *HPSDRWidget::sampleRateExclusiveGroup() {
samplerate96Btn->setBtnState(AeroButton::OFF); samplerate96Btn->setBtnState(AeroButton::OFF);
samplerate192Btn->setBtnState(AeroButton::OFF); samplerate192Btn->setBtnState(AeroButton::OFF);
samplerate384Btn->setBtnState(AeroButton::ON); 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; break;
} }
@@ -498,6 +550,9 @@ QGroupBox *HPSDRWidget::sampleRateExclusiveGroup() {
hbox->addWidget(samplerate96Btn); hbox->addWidget(samplerate96Btn);
hbox->addWidget(samplerate192Btn); hbox->addWidget(samplerate192Btn);
hbox->addWidget(samplerate384Btn); hbox->addWidget(samplerate384Btn);
hbox->addWidget(samplerate768Btn);
hbox->addWidget(samplerate1536Btn);
updateSampleRateButtons();
QVBoxLayout *vbox = new QVBoxLayout(); QVBoxLayout *vbox = new QVBoxLayout();
vbox->setSpacing(4); vbox->setSpacing(4);
@@ -945,15 +1000,12 @@ void HPSDRWidget::sampleRateChanged() {
AeroButton *button = qobject_cast<AeroButton *>(sender()); AeroButton *button = qobject_cast<AeroButton *>(sender());
int btnHit = samplerateBtnList.indexOf(button); int btnHit = samplerateBtnList.indexOf(button);
foreach(AeroButton *btn, samplerateBtnList) { const QList<int> rates = QList<int>() << 48000 << 96000 << 192000 << 384000 << 768000 << 1536000;
if (btnHit < 0 || btnHit >= rates.size() || !sampleRateSupported(rates.at(btnHit))) {
btn->setBtnState(AeroButton::OFF); updateSampleRateButtons();
btn->update(); return;
} }
button->setBtnState(AeroButton::ON);
button->update();
switch (btnHit) { switch (btnHit) {
case 0: case 0:
@@ -975,6 +1027,102 @@ void HPSDRWidget::sampleRateChanged() {
set->setSampleRate(this, 384000); set->setSampleRate(this, 384000);
HPSDR_WIDGET_DEBUG << "set sample rate to 384 kHz."; HPSDR_WIDGET_DEBUG << "set sample rate to 384 kHz.";
break; 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();
} }
} }
@@ -1020,4 +1168,5 @@ void HPSDRWidget::enableButtons() {
mercury2Btn->setEnabled(true); mercury2Btn->setEnabled(true);
m_receiverComboBox->setEnabled(true); m_receiverComboBox->setEnabled(true);
updateSampleRateButtons();
} }
+7
View File
@@ -97,6 +97,8 @@ private:
AeroButton *samplerate96Btn; AeroButton *samplerate96Btn;
AeroButton *samplerate192Btn; AeroButton *samplerate192Btn;
AeroButton *samplerate384Btn; AeroButton *samplerate384Btn;
AeroButton *samplerate768Btn;
AeroButton *samplerate1536Btn;
QList<AeroButton *> hardwareBtnList; QList<AeroButton *> hardwareBtnList;
QList<AeroButton *> source10MhzBtnList; QList<AeroButton *> source10MhzBtnList;
@@ -120,6 +122,9 @@ private:
void setupConnections(); void setupConnections();
void createSource10MhzExclusiveGroup(); void createSource10MhzExclusiveGroup();
void createSource122_88MhzExclusiveGroup(); void createSource122_88MhzExclusiveGroup();
void updateSampleRateButtons();
bool protocol2SampleRatesEnabled() const;
bool sampleRateSupported(int rate) const;
private slots: private slots:
void systemStateChanged( void systemStateChanged(
@@ -136,6 +141,8 @@ private slots:
void enableButtons(); void enableButtons();
void firmwareCheckChanged(); void firmwareCheckChanged();
void sampleRateChanged(); void sampleRateChanged();
void sampleRateValueChanged(QObject *sender, int value);
void setCurrentNetworkDevice(TNetworkDevicecard card);
signals: signals:
void messageEvent(QString message); void messageEvent(QString message);
+8 -7
View File
@@ -369,13 +369,9 @@ void MainWindow::setup() {
updateTitle(); updateTitle();
// show the wideband data panel as specified in the settings.ini // show the wideband data panel as specified in the settings.ini
if (set->getWidebandData()) { wideBandBtn->setEnabled(m_serverMode != QSDR::ChirpWSPR);
if (set->getWidebandStatus()) {
wideBandBtn->setEnabled(true); wideBandBtnClickedEvent();
if (set->getWidebandStatus()) {
wideBandBtnClickedEvent();
}
} }
// get the network interfaces // get the network interfaces
@@ -1560,6 +1556,7 @@ void MainWindow::wideBandBtnClickedEvent() {
if (wideBandBtn->btnState() == AeroButton::OFF) { if (wideBandBtn->btnState() == AeroButton::OFF) {
wideBandBtn->setBtnState(AeroButton::ON); wideBandBtn->setBtnState(AeroButton::ON);
set->setWidebandData(this, true);
set->setWidebandStatus(this, true); set->setWidebandStatus(this, true);
widebandDock->show(); widebandDock->show();
//showMessage("[server]: wide band data on."); //showMessage("[server]: wide band data on.");
@@ -1567,6 +1564,7 @@ void MainWindow::wideBandBtnClickedEvent() {
else if (wideBandBtn->btnState() == AeroButton::ON) { else if (wideBandBtn->btnState() == AeroButton::ON) {
wideBandBtn->setBtnState(AeroButton::OFF); wideBandBtn->setBtnState(AeroButton::OFF);
set->setWidebandData(this, false);
set->setWidebandStatus(this, false); set->setWidebandStatus(this, false);
widebandDock->hide(); widebandDock->hide();
//showMessage("[server]: wide band data off."); //showMessage("[server]: wide band data off.");
@@ -1575,6 +1573,9 @@ void MainWindow::wideBandBtnClickedEvent() {
void MainWindow::widebandVisibilityChanged(bool value) { void MainWindow::widebandVisibilityChanged(bool value) {
set->setWidebandData(this, value);
set->setWidebandStatus(this, value);
if (value) if (value)
wideBandBtn->setBtnState(AeroButton::ON); wideBandBtn->setBtnState(AeroButton::ON);
else else
+5 -1
View File
@@ -36,6 +36,7 @@
#include <QBoxLayout> #include <QBoxLayout>
#include "cusdr_networkWidget.h" #include "cusdr_networkWidget.h"
#include "DataEngine/cusdr_protocol2_profile.h"
#define btn_height 15 #define btn_height 15
@@ -502,7 +503,10 @@ void NetworkWidget::setNetworkDeviceList(QList<TNetworkDevicecard> list) {
networkDeviceIPAdresses->clear(); networkDeviceIPAdresses->clear();
foreach (TNetworkDevicecard device, list) { foreach (TNetworkDevicecard device, list) {
networkDeviceIPAdresses->addItem(device.ip_address.toString()); if (device.protocolVersion >= 2)
networkDeviceIPAdresses->addItem(protocol2DeviceSummary(device));
else
networkDeviceIPAdresses->addItem(QString("%1 (%2)").arg(device.boardName).arg(device.ip_address.toString()));
networkDeviceIPAdresses->update(); networkDeviceIPAdresses->update();
} }
} }
+50 -5
View File
@@ -65,6 +65,33 @@ Settings::Settings(QObject *parent)
qRegisterMetaType<QList<TNetworkDevicecard> >(); qRegisterMetaType<QList<TNetworkDevicecard> >();
qRegisterMetaType<qVectorFloat>("qVectorFloat"); 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(); startTime = QDateTime::currentDateTime();
qDebug() << "************************************************************************"; qDebug() << "************************************************************************";
@@ -289,7 +316,8 @@ int Settings::loadSettings() {
//checkHPSDRDevices(); //checkHPSDRDevices();
value = settings->value("server/sample_rate", 48000).toInt(); 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); setSampleRate(this, value);
str = settings->value("server/dither", "off").toString(); str = settings->value("server/dither", "off").toString();
@@ -642,7 +670,7 @@ int Settings::loadSettings() {
//****************************************************************** //******************************************************************
// wideband settings // wideband settings
str = settings->value("wideband/widebandData", "on").toString(); str = settings->value("wideband/widebandData", "off").toString();
if (str.toLower() == "on") if (str.toLower() == "on")
m_widebandOptions.wideBandData = true; m_widebandOptions.wideBandData = true;
else if (str.toLower() == "off") else if (str.toLower() == "off")
@@ -658,7 +686,10 @@ int Settings::loadSettings() {
else else
m_widebandOptions.wideBandDisplayStatus = false; 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(); str = settings->value("wideband/averaging", "on").toString();
if (str.toLower() == "on") if (str.toLower() == "on")
@@ -3353,15 +3384,29 @@ void Settings::setSampleRate(QObject *sender, int value) {
m_chirpDownSampleRate = 32; m_chirpDownSampleRate = 32;
break; 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: 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; break;
} }
for (int i = 0; i < MAX_RECEIVERS; i++) for (int i = 0; i < MAX_RECEIVERS; i++)
m_receiverDataList[i].sampleRate = m_sampleRate; m_receiverDataList[i].sampleRate = m_sampleRate;
emit sampleRateChanged(sender, value); emit sampleRateChanged(sender, m_sampleRate);
} }
void Settings::setMercuryAttenuator(QObject *sender, int value) { void Settings::setMercuryAttenuator(QObject *sender, int value) {
+22
View File
@@ -483,6 +483,28 @@ typedef struct _networkDeviceCard {
char mac_address[18]; char mac_address[18];
int boardID; int boardID;
QString boardName; 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; } TNetworkDevicecard;
+54
View File
@@ -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...