Compare commits

...

44 Commits

Author SHA1 Message Date
Daniele Forsi a708ffed79 Fix memleaks found with AddressSanitizer/LeakSanitizer
Found with:
ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel

Fixes:
Direct leak of 8 byte(s) in 1 object(s) allocated from:
    #0 0x7fabe9cf46b8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7faba9afa508 in WebServer::addSubstitution(QString, QString, QString) sdrangel/plugins/feature/skymap/webserver.cpp:83
    #2 0x7faba9b11591 in SkyMapGUI::SkyMapGUI(PluginAPI*, FeatureUISet*, Feature*, QWidget*) sdrangel/plugins/feature/skymap/skymapgui.cpp:224
    #3 0x7faba9b0f0a0 in SkyMapGUI::create(PluginAPI*, FeatureUISet*, Feature*) sdrangel/plugins/feature/skymap/skymapgui.cpp:44
    #4 0x7faba9af70e9 in SkyMapPlugin::createFeatureGUI(FeatureUISet*, Feature*) const sdrangel/plugins/feature/skymap/skymapplugin.cpp:72
    #5 0x7fabe920938b in MainWindow::featureAddClicked(Workspace*, int) sdrangel/sdrgui/mainwindow.cpp:2888
    #6 0x7fabe9224621 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1>, QtPrivate::List<Workspace*, int>, void, void (MainWindow::*)(Workspace*, int)>::call(void (MainWindow::*)(Workspace*, int), MainWindow*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
    #7 0x7fabe921feed in void QtPrivate::FunctionPointer<void (MainWindow::*)(Workspace*, int)>::call<QtPrivate::List<Workspace*, int>, void>(void (MainWindow::*)(Workspace*, int), MainWindow*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185
    #8 0x7fabe921d376 in QtPrivate::QSlotObject<void (MainWindow::*)(Workspace*, int), QtPrivate::List<Workspace*, int>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418
    #9 0x7fabe43062b1  (/lib/x86_64-linux-gnu/libQt5Core.so.5+0x3062b1) (BuildId: ed2abb344a128279a866aa6c4a79f3fa5c87c59e)
    #10 0x7fabe91d5ca4 in Workspace::addFeature(Workspace*, int) build-sdrangel-Desktop_qt5-Debug/sdrgui/sdrgui_autogen/DMHXEJ42XS/moc_workspace.cpp:393
    #11 0x7fabe950c6a2 in Workspace::addFeatureEmitted(int) sdrangel/sdrgui/gui/workspace.cpp:413
    #12 0x7fabe95245bb in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<int>, void, void (Workspace::*)(int)>::call(void (Workspace::*)(int), Workspace*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
    #13 0x7fabe951fb83 in void QtPrivate::FunctionPointer<void (Workspace::*)(int)>::call<QtPrivate::List<int>, void>(void (Workspace::*)(int), Workspace*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185
    #14 0x7fabe951cc86 in QtPrivate::QSlotObject<void (Workspace::*)(int), QtPrivate::List<int>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418
    #15 0x7fabe43062b1  (/lib/x86_64-linux-gnu/libQt5Core.so.5+0x3062b1) (BuildId: ed2abb344a128279a866aa6c4a79f3fa5c87c59e)
    #16 0x7fabe91c3c77 in FeatureAddDialog::addFeature(int) build-sdrangel-Desktop_qt5-Debug/sdrgui/sdrgui_autogen/DMHXEJ42XS/moc_featureadddialog.cpp:141
    #17 0x7fabe92d0d79 in FeatureAddDialog::apply(QAbstractButton*) sdrangel/sdrgui/gui/featureadddialog.cpp:53
    #18 0x7fabe91c380e in FeatureAddDialog::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) build-sdrangel-Desktop_qt5-Debug/sdrgui/sdrgui_autogen/DMHXEJ42XS/moc_featureadddialog.cpp:82
    #19 0x7fabe4305fcc  (/lib/x86_64-linux-gnu/libQt5Core.so.5+0x305fcc) (BuildId: ed2abb344a128279a866aa6c4a79f3fa5c87c59e)
    #20 0x7fabe51029b2 in QDialogButtonBox::clicked(QAbstractButton*) (/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x3029b2) (BuildId: dfefd27f084c0dd066215fc79825fceae604f481)

and more
2024-05-04 18:02:32 +02:00
Daniele Forsi 23e4ae121b Fix memleaks found with AddressSanitizer/LeakSanitizer
Found with:
ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel

Fixes:
Direct leak of 16 byte(s) in 1 object(s) allocated from:
    #0 0x7f3c3e0f46b8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f3bfdef913c in WebServer::WebServer(unsigned short&, QObject*) sdrangel/plugins/feature/skymap/webserver.cpp:34
    #2 0x7f3bfdf10b56 in SkyMapGUI::SkyMapGUI(PluginAPI*, FeatureUISet*, Feature*, QWidget*) sdrangel/plugins/feature/skymap/skymapgui.cpp:220
    #3 0x7f3bfdf0eb20 in SkyMapGUI::create(PluginAPI*, FeatureUISet*, Feature*) sdrangel/plugins/feature/skymap/skymapgui.cpp:44
    #4 0x7f3bfdef75e9 in SkyMapPlugin::createFeatureGUI(FeatureUISet*, Feature*) const sdrangel/plugins/feature/skymap/skymapplugin.cpp:72
    #5 0x7f3c3d60938b in MainWindow::featureAddClicked(Workspace*, int) sdrangel/sdrgui/mainwindow.cpp:2888
    #6 0x7f3c3d624621 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1>, QtPrivate::List<Workspace*, int>, void, void (MainWindow::*)(Workspace*, int)>::call(void (MainWindow::*)(Workspace*, int), MainWindow*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
    #7 0x7f3c3d61feed in void QtPrivate::FunctionPointer<void (MainWindow::*)(Workspace*, int)>::call<QtPrivate::List<Workspace*, int>, void>(void (MainWindow::*)(Workspace*, int), MainWindow*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185
    #8 0x7f3c3d61d376 in QtPrivate::QSlotObject<void (MainWindow::*)(Workspace*, int), QtPrivate::List<Workspace*, int>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418
    #9 0x7f3c387062b1  (/lib/x86_64-linux-gnu/libQt5Core.so.5+0x3062b1) (BuildId: ed2abb344a128279a866aa6c4a79f3fa5c87c59e)
    #10 0x7f3c3d5d5ca4 in Workspace::addFeature(Workspace*, int) build-sdrangel-Desktop_qt5-Debug/sdrgui/sdrgui_autogen/DMHXEJ42XS/moc_workspace.cpp:393
    #11 0x7f3c3d90c6a2 in Workspace::addFeatureEmitted(int) sdrangel/sdrgui/gui/workspace.cpp:413
    #12 0x7f3c3d9245bb in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<int>, void, void (Workspace::*)(int)>::call(void (Workspace::*)(int), Workspace*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
    #13 0x7f3c3d91fb83 in void QtPrivate::FunctionPointer<void (Workspace::*)(int)>::call<QtPrivate::List<int>, void>(void (Workspace::*)(int), Workspace*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185
    #14 0x7f3c3d91cc86 in QtPrivate::QSlotObject<void (Workspace::*)(int), QtPrivate::List<int>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418
    #15 0x7f3c387062b1  (/lib/x86_64-linux-gnu/libQt5Core.so.5+0x3062b1) (BuildId: ed2abb344a128279a866aa6c4a79f3fa5c87c59e)
    #16 0x7f3c3d5c3c77 in FeatureAddDialog::addFeature(int) build-sdrangel-Desktop_qt5-Debug/sdrgui/sdrgui_autogen/DMHXEJ42XS/moc_featureadddialog.cpp:141
    #17 0x7f3c3d6d0d79 in FeatureAddDialog::apply(QAbstractButton*) sdrangel/sdrgui/gui/featureadddialog.cpp:53
    #18 0x7f3c3d5c380e in FeatureAddDialog::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) build-sdrangel-Desktop_qt5-Debug/sdrgui/sdrgui_autogen/DMHXEJ42XS/moc_featureadddialog.cpp:82
    #19 0x7f3c38705fcc  (/lib/x86_64-linux-gnu/libQt5Core.so.5+0x305fcc) (BuildId: ed2abb344a128279a866aa6c4a79f3fa5c87c59e)
    #20 0x7f3c395029b2 in QDialogButtonBox::clicked(QAbstractButton*) (/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x3029b2) (BuildId: dfefd27f084c0dd066215fc79825fceae604f481)

and more
2024-05-04 18:01:40 +02:00
Daniele Forsi 107422a1f4 Do not create objects if there is no message queue to send to
Prevents memory leaks.
2024-05-04 17:47:57 +02:00
Daniele Forsi f8b4dc5d7c Do not create a Message if there is no worker to send to
Prevents memory leaks.
2024-05-04 17:47:57 +02:00
Daniele Forsi d0570aa137 Fix memleaks found with AddressSanitizer/LeakSanitizer
Found with:
ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel

Fixes:
Direct leak of 448 byte(s) in 2 object(s) allocated from:
    #0 0x7f78cd8f46b8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f788e0e9d9c in GS232ControllerWorker::MsgConfigureGS232ControllerWorker::create(GS232ControllerSettings const&, QList<QString> const&, bool) sdrangel/plugins/feature/gs232controller/gs232controllerworker.h:51
    #2 0x7f788e0eeedf in GS232Controller::applySettings(GS232ControllerSettings const&, QList<QString> const&, bool) sdrangel/plugins/feature/gs232controller/gs232controller.cpp:291
    #3 0x7f788e0ec595 in GS232Controller::handleMessage(Message const&) sdrangel/plugins/feature/gs232controller/gs232controller.cpp:156
    #4 0x7f78cabe899f in Feature::handleInputMessages() sdrangel/sdrbase/feature/feature.cpp:46
    #5 0x7f78ca9f9b5c in Feature::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) build-sdrangel-Desktop_qt5-Debug/sdrbase/sdrbase_autogen/3DM3QXXG3A/moc_feature.cpp:89
    #6 0x7f78c7f05fcc  (/lib/x86_64-linux-gnu/libQt5Core.so.5+0x305fcc) (BuildId: ed2abb344a128279a866aa6c4a79f3fa5c87c59e)
    #7 0x7f78caa0584a in MessageQueue::messageEnqueued() build-sdrangel-Desktop_qt5-Debug/sdrbase/sdrbase_autogen/KH43KSYMFX/moc_messagequeue.cpp:131
    #8 0x7f78cad19c77 in MessageQueue::push(Message*, bool) sdrangel/sdrbase/util/messagequeue.cpp:55
    #9 0x7f788e142936 in GS232ControllerGUI::applySettings(QStringList const&, bool) sdrangel/plugins/feature/gs232controller/gs232controllergui.cpp:969
    #10 0x7f788e142727 in GS232ControllerGUI::applySetting(QString const&) sdrangel/plugins/feature/gs232controller/gs232controllergui.cpp:960
    #11 0x7f788e133c26 in GS232ControllerGUI::onWidgetRolled(QWidget*, bool) sdrangel/plugins/feature/gs232controller/gs232controllergui.cpp:206
    #12 0x7f788e0e25d9 in GS232ControllerGUI::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) build-sdrangel-Desktop_qt5-Debug/plugins/feature/gs232controller/featuregs232controller_autogen/EWIEGA46WW/moc_gs232controllergui.cpp:234
    #13 0x7f78c7f05fcc  (/lib/x86_64-linux-gnu/libQt5Core.so.5+0x305fcc) (BuildId: ed2abb344a128279a866aa6c4a79f3fa5c87c59e)
    #14 0x7f78ccdcd9a1 in RollupContents::widgetRolled(QWidget*, bool) build-sdrangel-Desktop_qt5-Debug/sdrgui/sdrgui_autogen/DMHXEJ42XS/moc_rollupcontents.cpp:146
    #15 0x7f78cd06a080 in RollupContents::eventFilter(QObject*, QEvent*) sdrangel/sdrgui/gui/rollupcontents.cpp:403
    #16 0x7f78c7ecc4b2 in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) (/lib/x86_64-linux-gnu/libQt5Core.so.5+0x2cc4b2) (BuildId: ed2abb344a128279a866aa6c4a79f3fa5c87c59e)

and more
2024-05-04 17:23:29 +02:00
Daniele Forsi 417905882d Fix memleaks found with AddressSanitizer/LeakSanitizer
Found with:
ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel

Fixes:
Direct leak of 32 byte(s) in 1 object(s) allocated from:
    #0 0x7f2360af46b8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f2321a07706 in AFC::MsgDeviceSetListsReport::create() sdrangel/plugins/feature/afc/afc.h:151
    #2 0x7f2321a0ac1f in AFC::updateDeviceSetLists() sdrangel/plugins/feature/afc/afc.cpp:290
    #3 0x7f2321a09648 in AFC::handleMessage(Message const&) sdrangel/plugins/feature/afc/afc.cpp:214
    #4 0x7f235dfba569 in Feature::handleInputMessages() sdrangel/sdrbase/feature/feature.cpp:46
    #5 0x7f235ddea09e in Feature::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) build-sdrangel-Desktop_qt5-Debug/sdrbase/sdrbase_autogen/3DM3QXXG3A/moc_feature.cpp:89
    #6 0x7f235b305fcc  (/lib/x86_64-linux-gnu/libQt5Core.so.5+0x305fcc) (BuildId: ed2abb344a128279a866aa6c4a79f3fa5c87c59e)
    #7 0x7f235ddf5d8c in MessageQueue::messageEnqueued() build-sdrangel-Desktop_qt5-Debug/sdrbase/sdrbase_autogen/KH43KSYMFX/moc_messagequeue.cpp:131
    #8 0x7f235e0e1487 in MessageQueue::push(Message*, bool) sdrangel/sdrbase/util/messagequeue.cpp:55
    #9 0x7f2321a32fad in AFCGUI::requestDeviceSetLists() sdrangel/plugins/feature/afc/afcgui.cpp:213
    #10 0x7f2321a32124 in AFCGUI::AFCGUI(PluginAPI*, FeatureUISet*, Feature*, QWidget*) sdrangel/plugins/feature/afc/afcgui.cpp:170
    #11 0x7f2321a308cc in AFCGUI::create(PluginAPI*, FeatureUISet*, Feature*) sdrangel/plugins/feature/afc/afcgui.cpp:32
    #12 0x7f2321a1c229 in AFCPlugin::createFeatureGUI(FeatureUISet*, Feature*) const sdrangel/plugins/feature/afc/afcplugin.cpp:70
    #13 0x7f235fffc534 in MainWindow::featureAddClicked(Workspace*, int) sdrangel/sdrgui/mainwindow.cpp:2890
    #14 0x7f23600172c1 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0, 1>, QtPrivate::List<Workspace*, int>, void, void (MainWindow::*)(Workspace*, int)>::call(void (MainWindow::*)(Workspace*, int), MainWindow*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
    #15 0x7f2360012b8d in void QtPrivate::FunctionPointer<void (MainWindow::*)(Workspace*, int)>::call<QtPrivate::List<Workspace*, int>, void>(void (MainWindow::*)(Workspace*, int), MainWindow*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185
    #16 0x7f2360010016 in QtPrivate::QSlotObject<void (MainWindow::*)(Workspace*, int), QtPrivate::List<Workspace*, int>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418
    #17 0x7f235b3062b1  (/lib/x86_64-linux-gnu/libQt5Core.so.5+0x3062b1) (BuildId: ed2abb344a128279a866aa6c4a79f3fa5c87c59e)
    #18 0x7f235ffcc7fc in Workspace::addFeature(Workspace*, int) build-sdrangel-Desktop_qt5-Debug/sdrgui/sdrgui_autogen/DMHXEJ42XS/moc_workspace.cpp:393
    #19 0x7f23602f56f8 in Workspace::addFeatureEmitted(int) sdrangel/sdrgui/gui/workspace.cpp:413
    #20 0x7f236030d611 in QtPrivate::FunctorCall<QtPrivate::IndexesList<0>, QtPrivate::List<int>, void, void (Workspace::*)(int)>::call(void (Workspace::*)(int), Workspace*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:152
    #21 0x7f2360308bd9 in void QtPrivate::FunctionPointer<void (Workspace::*)(int)>::call<QtPrivate::List<int>, void>(void (Workspace::*)(int), Workspace*, void**) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:185
    #22 0x7f2360305cdc in QtPrivate::QSlotObject<void (Workspace::*)(int), QtPrivate::List<int>, void>::impl(int, QtPrivate::QSlotObjectBase*, QObject*, void**, bool*) /usr/include/x86_64-linux-gnu/qt5/QtCore/qobjectdefs_impl.h:418
    #23 0x7f235b3062b1  (/lib/x86_64-linux-gnu/libQt5Core.so.5+0x3062b1) (BuildId: ed2abb344a128279a866aa6c4a79f3fa5c87c59e)
    #24 0x7f235ffba7cf in FeatureAddDialog::addFeature(int) build-sdrangel-Desktop_qt5-Debug/sdrgui/sdrgui_autogen/DMHXEJ42XS/moc_featureadddialog.cpp:141
    #25 0x7f23600c2d19 in FeatureAddDialog::apply(QAbstractButton*) sdrangel/sdrgui/gui/featureadddialog.cpp:53
    #26 0x7f235ffba366 in FeatureAddDialog::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) build-sdrangel-Desktop_qt5-Debug/sdrgui/sdrgui_autogen/DMHXEJ42XS/moc_featureadddialog.cpp:82
    #27 0x7f235b305fcc  (/lib/x86_64-linux-gnu/libQt5Core.so.5+0x305fcc) (BuildId: ed2abb344a128279a866aa6c4a79f3fa5c87c59e)
    #28 0x7f235c1029b2 in QDialogButtonBox::clicked(QAbstractButton*) (/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x3029b2) (BuildId: dfefd27f084c0dd066215fc79825fceae604f481)
2024-05-04 14:05:56 +02:00
Daniele Forsi 1875b8e0d0 Use qDeleteAll() for brevity 2024-05-03 23:59:08 +02:00
Daniele Forsi ad34c369c4 Fix memleaks found with AddressSanitizer/LeakSanitizer
Found with:
ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel

Fixes:
Direct leak of 8 byte(s) in 1 object(s) allocated from:
    #0 0x7efeb72f46b8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7efe83515718 in WebServer::addSubstitution(QString, QString, QString) sdrangel/plugins/feature/map/webserver.cpp:84
    #2 0x7efe83559c9e in MapGUI::applyMap3DSettings(bool) sdrangel/plugins/feature/map/mapgui.cpp:1789
    #3 0x7efe8355e483 in MapGUI::displaySettings() sdrangel/plugins/feature/map/mapgui.cpp:1964
    #4 0x7efe834be0f6 in MapGUI::MapGUI(PluginAPI*, FeatureUISet*, Feature*, QWidget*) sdrangel/plugins/feature/map/mapgui.cpp:376
    #5 0x7efe835372f4 in MapGUI::create(PluginAPI*, FeatureUISet*, Feature*) sdrangel/plugins/feature/map/mapgui.cpp:66
    #6 0x7efe834b5471 in MapPlugin::createFeatureGUI(FeatureUISet*, Feature*) const sdrangel/plugins/feature/map/mapplugin.cpp:72
    #7 0x7efeb6b416c2 in FeatureUISet::loadFeatureSetSettings(FeatureSetPreset const*, PluginAPI*, WebAPIAdapterInterface*, QList<Workspace*>*, Workspace*) sdrangel/sdrgui/feature/featureuiset.cpp:185
    #8 0x7efeb67e9b41 in MainWindow::loadConfiguration(Configuration const*, bool) sdrangel/sdrgui/mainwindow.cpp:1503
    #9 0x7efeb6730e3e in MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) sdrangel/sdrgui/mainwindow.cpp:257
    #10 0x557281218bad in runQtApplication sdrangel/app/main.cpp:196
    #11 0x5572812194a3 in main sdrangel/app/main.cpp:248
    #12 0x7efeb10456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
2024-05-01 15:40:01 +02:00
Daniele Forsi 0cbef32bb8 Fix memleaks found with AddressSanitizer/LeakSanitizer
Fixes:
Direct leak of 16 byte(s) in 1 object(s) allocated from:
    #0 0x7efeb72f46b8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7efe834b65a2 in WebServer::WebServer(unsigned short&, QObject*) sdrangel/plugins/feature/map/webserver.cpp:34
    #2 0x7efe834bc342 in MapGUI::MapGUI(PluginAPI*, FeatureUISet*, Feature*, QWidget*) sdrangel/plugins/feature/map/mapgui.cpp:265
    #3 0x7efe835372f4 in MapGUI::create(PluginAPI*, FeatureUISet*, Feature*) sdrangel/plugins/feature/map/mapgui.cpp:66
    #4 0x7efe834b5471 in MapPlugin::createFeatureGUI(FeatureUISet*, Feature*) const sdrangel/plugins/feature/map/mapplugin.cpp:72
    #5 0x7efeb6b416c2 in FeatureUISet::loadFeatureSetSettings(FeatureSetPreset const*, PluginAPI*, WebAPIAdapterInterface*, QList<Workspace*>*, Workspace*) sdrangel/sdrgui/feature/featureuiset.cpp:185
    #6 0x7efeb67e9b41 in MainWindow::loadConfiguration(Configuration const*, bool) sdrangel/sdrgui/mainwindow.cpp:1503
    #7 0x7efeb6730e3e in MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) sdrangel/sdrgui/mainwindow.cpp:257
    #8 0x557281218bad in runQtApplication sdrangel/app/main.cpp:196
    #9 0x5572812194a3 in main sdrangel/app/main.cpp:248
    #10 0x7efeb10456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58

and others
2024-05-01 15:23:50 +02:00
Daniele Forsi 63403954b9 Fix memleaks in Map Models 2024-05-01 11:08:51 +02:00
Daniele Forsi 2e3fda31da Fix memleaks with m_waypoints 2024-05-01 10:42:23 +02:00
Daniele Forsi 9b5232853a Fix memleaks with m_airspaces 2024-05-01 10:42:23 +02:00
Daniele Forsi decdf50b48 Fix memleaks found with AddressSanitizer/LeakSanitizer
Found with:
ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel

Fixes:
Direct leak of 245448 byte(s) in 3409 object(s) allocated from:
    #0 0x7f28936f46b8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f2890d3ccf6 in NavAid::readXML(QString const&) sdrangel/sdrbase/util/openaip.cpp:230
    #2 0x7f2890d3f882 in OpenAIP::readNavAids(QString const&) sdrangel/sdrbase/util/openaip.cpp:672
    #3 0x7f2890d3f6d0 in OpenAIP::readNavAids() sdrangel/sdrbase/util/openaip.cpp:664
    #4 0x7f2890d3fc06 in OpenAIP::getNavAids() sdrangel/sdrbase/util/openaip.cpp:695
    #5 0x7f285f9468c7 in MapGUI::addNavAids() sdrangel/plugins/feature/map/mapgui.cpp:1064
    #6 0x7f285f8bde60 in MapGUI::MapGUI(PluginAPI*, FeatureUISet*, Feature*, QWidget*) sdrangel/plugins/feature/map/mapgui.cpp:367
    #7 0x7f285f936a9c in MapGUI::create(PluginAPI*, FeatureUISet*, Feature*) sdrangel/plugins/feature/map/mapgui.cpp:66
    #8 0x7f285f8b57d5 in MapPlugin::createFeatureGUI(FeatureUISet*, Feature*) const sdrangel/plugins/feature/map/mapplugin.cpp:72
    #9 0x7f2892f416c2 in FeatureUISet::loadFeatureSetSettings(FeatureSetPreset const*, PluginAPI*, WebAPIAdapterInterface*, QList<Workspace*>*, Workspace*) sdrangel/sdrgui/feature/featureuiset.cpp:185
    #10 0x7f2892be9b41 in MainWindow::loadConfiguration(Configuration const*, bool) sdrangel/sdrgui/mainwindow.cpp:1503
    #11 0x7f2892b30e3e in MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) sdrangel/sdrgui/mainwindow.cpp:257
    #12 0x55d986075bad in runQtApplication sdrangel/app/main.cpp:196
    #13 0x55d9860764a3 in main sdrangel/app/main.cpp:248
    #14 0x7f288d6456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
2024-05-01 10:42:23 +02:00
Daniele Forsi 9f880c513c Fix memleaks found with AddressSanitizer/LeakSanitizer
Found with:
ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel

Fixes:
Direct leak of 3660664 byte(s) in 65369 object(s) allocated from:
    #0 0x7f86566f46b8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f8653d590b3 in OurAirportsDB::readAirportsDB(QString const&) sdrangel/sdrbase/util/ourairportsdb.cpp:300
    #2 0x7f8653d57bb7 in OurAirportsDB::readDB() sdrangel/sdrbase/util/ourairportsdb.cpp:132
    #3 0x7f8653d577e3 in OurAirportsDB::getAirportsById() sdrangel/sdrbase/util/ourairportsdb.cpp:112
    #4 0x7f860b14abf3 in MapGUI::addAirports() sdrangel/plugins/feature/map/mapgui.cpp:1194
    #5 0x7f860b0bde6e in MapGUI::MapGUI(PluginAPI*, FeatureUISet*, Feature*, QWidget*) sdrangel/plugins/feature/map/mapgui.cpp:368
    #6 0x7f860b136a72 in MapGUI::create(PluginAPI*, FeatureUISet*, Feature*) sdrangel/plugins/feature/map/mapgui.cpp:65
    #7 0x7f860b0b57c5 in MapPlugin::createFeatureGUI(FeatureUISet*, Feature*) const sdrangel/plugins/feature/map/mapplugin.cpp:72
    #8 0x7f8655f416c2 in FeatureUISet::loadFeatureSetSettings(FeatureSetPreset const*, PluginAPI*, WebAPIAdapterInterface*, QList<Workspace*>*, Workspace*) sdrangel/sdrgui/feature/featureuiset.cpp:185
    #9 0x7f8655be9b41 in MainWindow::loadConfiguration(Configuration const*, bool) sdrangel/sdrgui/mainwindow.cpp:1503
    #10 0x7f8655b30e3e in MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) sdrangel/sdrgui/mainwindow.cpp:257
    #11 0x56083336ebad in runQtApplication sdrangel/app/main.cpp:196
    #12 0x56083336f4a3 in main sdrangel/app/main.cpp:248
    #13 0x7f86504456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
2024-05-01 00:23:26 +02:00
Daniele Forsi 16d08baed6 Fix memleaks found with AddressSanitizer/LeakSanitizer
Found with:
ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel

Fixes:
Direct leak of 51920 byte(s) in 649 object(s) allocated from:
    #0 0x7f6cda0f46b8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f6c8eb32aad in Beacon::readIARUCSV(QString const&) sdrangel/plugins/feature/map/beacon.h:213
    #2 0x7f6c8eabdda9 in MapGUI::MapGUI(PluginAPI*, FeatureUISet*, Feature*, QWidget*) sdrangel/plugins/feature/map/mapgui.cpp:356
    #3 0x7f6c8eb369ba in MapGUI::create(PluginAPI*, FeatureUISet*, Feature*) sdrangel/plugins/feature/map/mapgui.cpp:65
    #4 0x7f6c8eab57c5 in MapPlugin::createFeatureGUI(FeatureUISet*, Feature*) const sdrangel/plugins/feature/map/mapplugin.cpp:72
    #5 0x7f6cd99416c2 in FeatureUISet::loadFeatureSetSettings(FeatureSetPreset const*, PluginAPI*, WebAPIAdapterInterface*, QList<Workspace*>*, Workspace*) sdrangel/sdrgui/feature/featureuiset.cpp:185
    #6 0x7f6cd95e9b41 in MainWindow::loadConfiguration(Configuration const*, bool) sdrangel/sdrgui/mainwindow.cpp:1503
    #7 0x7f6cd9530e3e in MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) sdrangel/sdrgui/mainwindow.cpp:257
    #8 0x555cbdeacbad in runQtApplication sdrangel/app/main.cpp:196
    #9 0x555cbdead4a3 in main sdrangel/app/main.cpp:248
    #10 0x7f6cd3e456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
2024-05-01 00:23:26 +02:00
Daniele Forsi 944869d75a Fix memleaks found with AddressSanitizer/LeakSanitizer
Found with:
ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel

Fixes:
Direct leak of 8 byte(s) in 1 object(s) allocated from:
    #0 0x7f31894f46b8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f313df31eb0 in Beacon::readIARUCSV(QString const&) sdrangel/plugins/feature/map/beacon.h:111
    #2 0x7f313debdda9 in MapGUI::MapGUI(PluginAPI*, FeatureUISet*, Feature*, QWidget*) sdrangel/plugins/feature/map/mapgui.cpp:356
    #3 0x7f313df3696c in MapGUI::create(PluginAPI*, FeatureUISet*, Feature*) sdrangel/plugins/feature/map/mapgui.cpp:65
    #4 0x7f313deb57c5 in MapPlugin::createFeatureGUI(FeatureUISet*, Feature*) const sdrangel/plugins/feature/map/mapplugin.cpp:72
    #5 0x7f3188d416c2 in FeatureUISet::loadFeatureSetSettings(FeatureSetPreset const*, PluginAPI*, WebAPIAdapterInterface*, QList<Workspace*>*, Workspace*) sdrangel/sdrgui/feature/featureuiset.cpp:185
    #6 0x7f31889e9b41 in MainWindow::loadConfiguration(Configuration const*, bool) sdrangel/sdrgui/mainwindow.cpp:1503
    #7 0x7f3188930e3e in MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) sdrangel/sdrgui/mainwindow.cpp:257
    #8 0x55ca63059bad in runQtApplication sdrangel/app/main.cpp:196
    #9 0x55ca6305a4a3 in main sdrangel/app/main.cpp:248
    #10 0x7f31832456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
2024-04-30 23:50:58 +02:00
Daniele Forsi ccb0a85d99 Fix memleaks found with AddressSanitizer/LeakSanitizer
Found with:
ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel

Fixes:
Direct leak of 176096 byte(s) in 5503 object(s) allocated from:
    #0 0x7f3a464f46c8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f3a44009219 in Airline::Init::Init() sdrbase/util/airlines.cpp:5559
    #2 0x7f3a43dc797d in _sub_I_65535_0.0 (build/lib/libsdrbase.so+0x3c797d) (BuildId: fb568b705538a6e506ee23027626f4366b25aa50)
    #3 0x7f3a46c6ce3d in call_init elf/dl-init.c:74
    #4 0x7f3a46c6ce3d in call_init elf/dl-init.c:26
2024-04-30 23:23:41 +02:00
Daniele Forsi 4aeb9b2bf2 Fix memleaks found with AddressSanitizer/LeakSanitizer
Found with:
ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel

Fixes:
Indirect leak of 16 byte(s) in 1 object(s) allocated from:
    #0 0x7faba78f46c8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7faba73281e1 in GLShaderSpectrogram::initializeGL(int, int) sdrgui/gui/glshaderspectrogram.cpp:118
    #2 0x7faba7369b54 in GLSpectrumView::initializeGL() sdrgui/gui/glspectrumview.cpp:937
    #3 0x7faba33c4f45 in QOpenGLWidget::resizeEvent(QResizeEvent*) (/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x1c4f45) (BuildId: 983eca66d9695a1892aa796da4160d8d6f9b9ac4)
2024-04-30 23:23:38 +02:00
Daniele Forsi 24af012f6c Fix memleaks found with AddressSanitizer/LeakSanitizer
Found with:
ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel

Fixes:
Direct leak of 56 byte(s) in 1 object(s) allocated from:
    #0 0x7f9d7d0f46c8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f9d7af247aa in MainCore::appendDeviceSet(int) sdrbase/maincore.cpp:219
    #2 0x7f9d7c95c8a5 in MainWindow::sampleSourceAdd(Workspace*, Workspace*, int) sdrgui/mainwindow.cpp:359
    #3 0x7f9d7c97ce3c in MainWindow::loadConfiguration(Configuration const*, bool) sdrgui/mainwindow.cpp:1439
    #4 0x7f9d7c95a610 in MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) sdrgui/mainwindow.cpp:261
    #5 0x562f7c492175 in runQtApplication app/main.cpp:196
    #6 0x562f7c48fab7 in main app/main.cpp:248
    #7 0x7f9d776456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58

and 34 others that I'm not copying here.
2024-04-30 16:28:44 +02:00
Daniele Forsi b996667bb5 Fix memleak found with AddressSanitizer/LeakSanitizer
Found with:
ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel

Fixes:
Direct leak of 16 byte(s) in 1 object(s) allocated from:
    #0 0x7ff2588f46c8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7ff256723dd0 in MainCore::appendFeatureSet() sdrbase/maincore.cpp:190
    #2 0x7ff25817fb89 in MainWindow::addFeatureSet() sdrgui/mainwindow.cpp:1191
    #3 0x7ff25815a4d0 in MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) sdrgui/mainwindow.cpp:250
    #4 0x559632289175 in runQtApplication app/main.cpp:196
    #5 0x559632286ab7 in main app/main.cpp:248
    #6 0x7ff252e456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
2024-04-30 16:28:44 +02:00
Daniele Forsi e8bc79348a Fix memleaks found with AddressSanitizer/LeakSanitizer
Fixes:
Direct leak of 32 byte(s) in 1 object(s) allocated from:
    #0 0x7eff8bcf46c8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7eff897b484d in DeviceUserArgs::serialize() const sdrbase/device/deviceuserargs.cpp:43
    #2 0x7eff897f4904 in MainSettings::save() const sdrbase/settings/mainsettings.cpp:237
    #3 0x7eff8b578654 in MainWindow::closeEvent(QCloseEvent*) sdrgui/mainwindow.cpp:1749
    #4 0x7eff877a5dc7 in QWidget::event(QEvent*) (/lib/x86_64-linux-gnu/libQt5Widgets.so.5+0x1a5dc7) (BuildId: 983eca66d9695a1892aa796da4160d8d6f9b9ac4)

Direct leak of 32 byte(s) in 1 object(s) allocated from:
    #0 0x7eff8bcf46c8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7eff897b484d in DeviceUserArgs::serialize() const sdrbase/device/deviceuserargs.cpp:43
    #2 0x7eff897f4904 in MainSettings::save() const sdrbase/settings/mainsettings.cpp:237
    #3 0x7eff8b552c9a in MainWindow::~MainWindow() sdrgui/mainwindow.cpp:326
    #4 0x564e8b36e1e5 in runQtApplication app/main.cpp:212
    #5 0x564e8b36bab7 in main app/main.cpp:248
    #6 0x7eff862456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
2024-04-30 16:28:44 +02:00
Daniele Forsi 798f0b1035 Fix memleaks found with AddressSanitizer/LeakSanitizer
Found with:
ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel

Fixes:
Direct leak of 72 byte(s) in 1 object(s) allocated from:
    #0 0x7f7b94ef46c8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f7b929ff74c in MainSettings::load() sdrbase/settings/mainsettings.cpp:153
    #2 0x7f7b947614f6 in MainWindow::loadSettings() sdrgui/mainwindow.cpp:1230
    #3 0x7f7b94759e11 in MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) sdrgui/mainwindow.cpp:211
    #4 0x55b694e0a175 in runQtApplication app/main.cpp:196
    #5 0x55b694e07ab7 in main app/main.cpp:248
    #6 0x7f7b8f4456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58

Indirect leak of 136 byte(s) in 1 object(s) allocated from:
    #0 0x7f7b94ef46c8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f7b929e734d in QList<Preset>::node_construct(QList<Preset>::Node*, Preset const&) /usr/include/x86_64-linux-gnu/qt5/QtCore/qlist.h:465
    #2 0x7f7b929e734d in QList<Preset>::append(Preset const&) /usr/include/x86_64-linux-gnu/qt5/QtCore/qlist.h:625
    #3 0x7f7b929e734d in QList<Preset>::push_back(Preset const&) /usr/include/x86_64-linux-gnu/qt5/QtCore/qlist.h:377
    #4 0x7f7b929e734d in Configuration::deserialize(QByteArray const&) sdrbase/settings/configuration.cpp:112
    #5 0x7f7b929ff934 in MainSettings::load() sdrbase/settings/mainsettings.cpp:155
    #6 0x7f7b947614f6 in MainWindow::loadSettings() sdrgui/mainwindow.cpp:1230
    #7 0x7f7b94759e11 in MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) sdrgui/mainwindow.cpp:211
    #8 0x55b694e0a175 in runQtApplication app/main.cpp:196
    #9 0x55b694e07ab7 in main app/main.cpp:248
    #10 0x7f7b8f4456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58

Indirect leak of 32 byte(s) in 1 object(s) allocated from:
    #0 0x7f7b94ef46c8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95
    #1 0x7f7b929e9706 in QList<Preset::DeviceConfig>::node_construct(QList<Preset::DeviceConfig>::Node*, Preset::DeviceConfig const&) /usr/include/x86_64-linux-gnu/qt5/QtCore/qlist.h:465
    #2 0x7f7b929e9706 in QList<Preset::DeviceConfig>::append(Preset::DeviceConfig const&) /usr/include/x86_64-linux-gnu/qt5/QtCore/qlist.h:625
    #3 0x7f7b929f627c in Preset::deserialize(QByteArray const&) sdrbase/settings/preset.cpp:193
    #4 0x7f7b929e74ca in Configuration::deserialize(QByteArray const&) sdrbase/settings/configuration.cpp:113
    #5 0x7f7b929ff934 in MainSettings::load() sdrbase/settings/mainsettings.cpp:155
    #6 0x7f7b947614f6 in MainWindow::loadSettings() sdrgui/mainwindow.cpp:1230
    #7 0x7f7b94759e11 in MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) sdrgui/mainwindow.cpp:211
    #8 0x55b694e0a175 in runQtApplication app/main.cpp:196
    #9 0x55b694e07ab7 in main app/main.cpp:248
    #10 0x7f7b8f4456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
2024-04-30 16:28:44 +02:00
Daniele Forsi c41fdeecd8 Add cmake option to optionally compile with LeakSanitizer
Alse change the description of the existing option SANITIZE_ADDRESS to avoid ambiguity.
2024-04-30 16:28:44 +02:00
Edouard Griffiths a31e83d43c
Merge pull request #2096 from srcejon/freq_scanner
Two bug fixes
2024-04-30 15:28:52 +02:00
srcejon 39760146d4 ValueDial: Fix array being accessed out of range. 2024-04-30 09:33:54 +01:00
srcejon 4f2b03646f AIS: Fix string decoding in safetey messages. #2094 2024-04-30 09:32:22 +01:00
f4exb 217c900609 AudioCATSISO: fixed transverter processing 2024-04-28 01:15:36 +02:00
f4exb 956d1e6c07 AudioCATSISO: fixed CAT worker handling 2024-04-27 22:12:03 +02:00
Edouard Griffiths c33c8464cd
Merge pull request #2093 from dforsi/fix/typos
Fix title of UDP Sample Sink window in the documentation
2024-04-27 19:17:55 +02:00
Daniele Forsi 147368d518 Fix title of window (s/Source/Sink/)
Fixes issue #2092
2024-04-27 18:48:02 +02:00
Edouard Griffiths 52a440e400
Merge pull request #2091 from dforsi/fix/typos
Fix/typos
2024-04-27 11:08:10 +02:00
Edouard Griffiths 498ff9e94d
Merge pull request #2089 from rudis/master
Minor documenation fixes
2024-04-27 11:06:47 +02:00
Daniele Forsi b30158c0cc Fix reference to image 2024-04-26 22:39:34 +02:00
Daniele Forsi 15433bb324 Fix spellling errors found with LibreOffice Writer 2024-04-26 21:18:32 +02:00
Daniele Forsi d135dd9028 Fix spellling errors found with aspell 2024-04-26 21:18:32 +02:00
Edouard Griffiths 34871bfa0f
Merge pull request #2088 from rudis/sdrplay
sdrplayv3: use SDRPLAY_MAX_DEVICES in enumOriginDevices()
2024-04-26 19:10:56 +02:00
Edouard Griffiths 2a9c679c02
Merge pull request #2087 from agatti/vulkan-fix
Fix building with recent Vulkan SDKs.
2024-04-26 17:16:38 +02:00
Simon Ruderich 39575c10fa channelrx/channelpower/readme.md: fix minor typo 2024-04-26 08:37:56 +02:00
Simon Ruderich 6086fb328e plugins: remove UTF-8 BOMB from readme.md
BOMB is normally not used for UTF-8/ASCII files.
2024-04-26 08:37:24 +02:00
Simon Ruderich 3307000a72 plugins: fix non-matching <hx> tags in readme.md 2024-04-26 08:37:24 +02:00
Simon Ruderich f5b43fec2d sdrplayv3: use SDRPLAY_MAX_DEVICES in enumOriginDevices()
This makes it consistent with openDevice() which already uses
this constant provided by the API.
2024-04-26 08:34:50 +02:00
Simon Ruderich 97b1a6a70d sdrgui/gui/spectrum.md: add missing FFT window values 2024-04-26 08:14:13 +02:00
Simon Ruderich fc13be4d69 samplesink/fileoutput/readme.md: use ASCII dashes in sox command line
Otherwise sox fails with this non-helpful message:

    sox FAIL formats: bad input format for file `myfile.raw': sampling rate was not specified
2024-04-26 08:14:13 +02:00
Alessandro Gatti fa5dc41503 vkFFT: Fix building with recent Vulkan SDKs.
Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
2024-04-26 00:35:16 +02:00
85 changed files with 333 additions and 167 deletions

View File

@ -25,7 +25,8 @@ set(sdrangel_VERSION_SUFFIX "")
# SDRAngel cmake options
option(DEBUG_OUTPUT "Print debug messages" OFF)
option(SANITIZE_ADDRESS "Activate memory address sanitization" OFF)
option(SANITIZE_ADDRESS "Activate detection of uninitialized memory (AddressSanitizer)" OFF)
option(SANITIZE_MEMORY "Activate detection of leaked memory (LeakSanitizer)" OFF)
option(RX_SAMPLE_24BIT "Internal 24 bit Rx DSP" ON)
option(BUILD_SERVER "Build Server" ON)
option(BUILD_GUI "Build GUI" ON)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

View File

@ -10,4 +10,4 @@ Files copied over from the original 'doc' folder:
- copyright.txt
- lgpl-3.0.txt
- releasenotes.txts
- releasenotes.txt

View File

@ -21,11 +21,11 @@ Use this combo box to select channel output:
- **A**: output A channel only
- **B**: output B channel only
<h3>2: Interpolation factor</h2>
<h3>2: Interpolation factor</h3>
The channel sample rate is interpolated by a power of two to feed the channels at baseband sample rate.
<h3>3: Channel sample rate</h2>
<h3>3: Channel sample rate</h3>
This is the channel sample rate in kilo or mega samples per second indicated by the `k` or `M` letter.

View File

@ -1,4 +1,4 @@
<h1>Channel Power Plugin</h1>
<h1>Channel Power Plugin</h1>
<h2>Introduction</h2>
@ -30,7 +30,7 @@ Bandwidth in Hz of the channel for which power is to be measured.
<h3>4: Tavg - Average Time</h3>
Time period overwhich the channel power is averaged. Values range from 10us to 10s in powers of 10. The available values depend upon the sample rate.
Time period over which the channel power is averaged. Values range from 10us to 10s in powers of 10. The available values depend upon the sample rate.
<h3>5: THp - Pulse Threshold</h3>

View File

@ -104,7 +104,7 @@ Checking this button draws flight paths for all aircraft.
<h3>ATC Mode</h3>
When in ATC mode, the map will display callsign, alitude, ground speed and type for all aircraft. When unchecked, only callsign (or ICAO, until callsign is received) will be displayed.
When in ATC mode, the map will display callsign, altitude, ground speed and type for all aircraft. When unchecked, only callsign (or ICAO, until callsign is received) will be displayed.
<h3>15: Download flight information for selected flight</h3>

View File

@ -1,4 +1,4 @@
<h1>AM demodulator plugin</h1>
<h1>AM demodulator plugin</h1>
<h2>Introduction</h2>
@ -30,13 +30,13 @@ Specifies channel center frequency according to frequency entry mode:
Use the wheels to adjust the value. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2.
<h3>2: PLL and synchronous AM</h2>
<h3>2: PLL and synchronous AM</h3>
Use this toggle button to turn on or off the PLL locking and synchronous AM detection. When on the input signal is mixed with the NCO of the PLL that locks to the carrier of the AM transmission. Then the signal is processed as a DSB or SSB (see control 3) modulated signal. The main advantage compared to envelope detection is a better resilience to carrier selective fading. This does not prevents all selective fading distortion but addresses the most annoying.
When the PLL is locked the icon lights up in green. The frequency shift from carrier appears in the tooltip. Locking indicator is pretty sharp with about +/- 100 Hz range.
<h3>3: DSB/SSB selection</h2>
<h3>3: DSB/SSB selection</h3>
Use the left mouse button to toggle DSB/SSB operation. Sometimes one of the two sidebands is affected by interference. Selecting SSB may help by using only the sideband without interference. Right click to open a dialog to select which sideband is used (LSB or USB).

View File

@ -28,7 +28,7 @@ Each part is detailed next
<h3>1: Frequency shift from center frequency of reception</h3>
Use the wheels to adjust the frequency shift in Hz from the center frequency of reception. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows.Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2.
Use the wheels to adjust the frequency shift in Hz from the center frequency of reception. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2.
<h3>2: Channel sample rate</h3>

View File

@ -112,7 +112,7 @@ The LoRa standard specifies 0 (no DE) or 2 (DE active). The ChirpChat DE range i
The LoRa standard also specifies that the LowDataRateOptimizatio flag (thus DE=2 vs DE=0 here) should be set when the symbol time defined as BW / 2^SF exceeds 16 ms (See section 4.1.1.6 of the SX127x datasheet). In practice this happens for SF=11 and SF=12 and large enough bandwidths (you can do the maths).
Here this value is the log2 of the number of FFT bins used for one symbol. Extending the number of FFT bins per symbol decreases the probability to detect the wrong symbol as an adjacent bin. It can also overcome frequency or samlping time drift on long messages particularly for small bandwidths.
Here this value is the log2 of the number of FFT bins used for one symbol. Extending the number of FFT bins per symbol decreases the probability to detect the wrong symbol as an adjacent bin. It can also overcome frequency or sampling time drift on long messages particularly for small bandwidths.
In practice it is difficult to make correct decodes if only one FFT bin is used to code one symbol (DE=0) therefore it is recommended to use a DE factor of 2 or more. With medium SNR DE=1 can still achieve good results.

View File

@ -71,7 +71,7 @@ When checked, writes all received messages to a .csv file, specified by (13).
<h3>13: .csv Log Filename</h3>
Click to specify the name of the .csv file which received messasges are logged to.
Click to specify the name of the .csv file which received messages are logged to.
<h3>14: Read Data from .csv File</h3>

View File

@ -43,7 +43,7 @@ The top and bottom bars of the channel window are described [here](../../../sdrg
<h4>A.1: Frequency shift from center frequency of reception</h4>
Use the wheels to adjust the frequency shift in Hz from the center frequency of reception. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows.Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2.
Use the wheels to adjust the frequency shift in Hz from the center frequency of reception. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2.
<h4>A.2: Channel bandwidth before discriminator</h4>
@ -291,30 +291,30 @@ This is the control channel used in trunked systems and is usually sent continuo
![DSD NXDN RTDCH status](../../../doc/img/DSDdemod_plugin_nxdn_rcch_status.png)
<h6>A11.5.1.1: RF channel indicator</h5>
<h6>A11.5.1.1: RF channel indicator</h6>
This is `RC` for RCCH
<h6>A11.5.2.2: Half/full rate</h5>
<h6>A11.5.2.2: Half/full rate</h6>
Indicator of transmission rate:
- `H`: half rate (2400 or 4800 S/s). Uses EHR vocoder (AMBE 3600/2450)
- `F`: full rate (4800 S/s only). Uses EFR vocoder (AMBE 7200/4400)
<h6>A11.5.1.3: RAN number</h5>
<h6>A11.5.1.3: RAN number</h6>
This is the RAN number (0 to 63) associated to the transmission. RAN stands for "Radio Access Number" and for trunked systems this is the site identifier (Site Id) modulo 64.
<h6>A11.5.1.4: Last message type code</h5>
<h6>A11.5.1.4: Last message type code</h6>
This is the type code of the last message (6 bits) displayed in hexadecimal. The complete list is found in the NXDN documentation `NXDN TS 1-A Version 1.3` section 6.
<h6>A11.5.1.5: Location Id</h5>
<h6>A11.5.1.5: Location Id</h6>
This is the 3 byte location Id associated to the site displayed in hexadecimal
<h6>A11.5.1.6: Services available flags</h5>
<h6>A11.5.1.6: Services available flags</h6>
This is a 16 bit collection of flags to indicate which services are available displayed in hexadecimal. The breakdown is listed in the NXDN documentation `NXDN TS 1-A Version 1.3` section 6.5.33. From MSB to LSB:
@ -341,33 +341,33 @@ This is the transmission channel either in a trunked system (RTCH) or convention
![DSD NXDN RTDCH status](../../../doc/img/DSDdemod_plugin_nxdn_rtdch_status.png)
<h6>A11.5.2.1: RF channel indicator</h5>
<h6>A11.5.2.1: RF channel indicator</h6>
It can be either `RT` for RTCH or `RD` for a RDCH channel
<h6>A11.5.2.2: Half/full rate</h5>
<h6>A11.5.2.2: Half/full rate</h6>
Indicator of transmission rate:
- `H`: half rate (2400 or 4800 S/s). Uses EHR vocoder (AMBE 3600/2450)
- `F`: full rate (4800 S/s only). Uses EFR vocoder (AMBE 7200/4400)
<h6>A11.5.2.3: RAN number</h5>
<h6>A11.5.2.3: RAN number</h6>
This is the RAN number (0 to 63) associated to the transmission. RAN stands for "Radio Access Number" and has a different usage in conventional or trunked systems:
- Conventional (RDCH): this is used as a selective squelch. Code `0` means always unmute.
- Trunked (RTCH): this is the site identifier (Site Id) modulo 64.
<h6>A11.5.2.4: Last message type code</h5>
<h6>A11.5.2.4: Last message type code</h6>
This is the type code of the last message (6 bits) displayed in hexadecimal. The complete list is found in the NXDN documentation `NXDN TS 1-A Version 1.3` section 6.
<h6>A11.5.2.5: Source Id</h5>
<h6>A11.5.2.5: Source Id</h6>
This is the source of transmission identification code on two bytes (0 to 65353) displayed in decimal.
<h6>A11.5.2.6: Destination Id</h5>
<h6>A11.5.2.6: Destination Id</h6>
This is the destination of transmission identification code on two bytes (0 to 65353) displayed in decimal. It is prefixed by a group call indicator:
@ -550,11 +550,11 @@ This button tunes the length of the trace displayed on B.1. Units are millisecon
<h4>B.15: Trace stroke</h4>
This button tunes the stroke of the points displayer on B.1. The trace has limited persistence based on alpha blending. This is the 8 bit unsigned integer value of the trace alpha blending. Default value is 100.
This button tunes the stroke of the points displayed on B.1. The trace has limited persistence based on alpha blending. This is the 8 bit unsigned integer value of the trace alpha blending. Default value is 100.
<h4>B.16: Trace decay</h4>
This button tunes the persistence decay of the points displayer on B.1. The trace has limited persistence based on alpha blending. This controls the alpha value of the black screen printed at the end of each trace and thus the trace points decay time. The value is 255 minus he displayed value using 8 bit unsigned integers.
This button tunes the persistence decay of the points displayed on B.1. The trace has limited persistence based on alpha blending. This controls the alpha value of the black screen printed at the end of each trace and thus the trace points decay time. The value is 255 minus he displayed value using 8 bit unsigned integers.
- A value of 0 yields no persistence
- A value of 255 yields infinite persistence
@ -574,7 +574,7 @@ This is the one side deviation in kHz (&#177;) leading to maximum (100%) deviati
This is the gain applied to the output of the discriminator before the decoder. Normally this would be set at unit gain 1.0 while the FM deviation is adjusted. However this can be used to extend the range of FM adjustment.
<h4>B.19: Activate AMBE hardware feature</h3>
<h4>B.19: Activate AMBE hardware feature</h4>
Connects to an [AMBE Feature](../../feature/ambe/readme.md) to process AMBE frames in hardware

View File

@ -205,7 +205,7 @@ Displays the received messages in a table which columns are the following:
- **Country**: DXCC country name derived from the caller callsign
- **Info**: FT8 decoder information if any. If OSD is active (see C.1.3) and OSD was activated it reports the OSD decoder status as `OSD-N-MM` where N is the OSD depth reached and MM is the number of correct LDPC bits.
<h3>C.1: More FT8 decoder settings</h2>
<h3>C.1: More FT8 decoder settings</h3>
This button will open a dialog for more settings

View File

@ -26,7 +26,7 @@ There are 3 main sections
<h3>A.1: Frequency shift from center frequency of reception</h3>
Use the wheels to adjust the frequency shift in Hz from the center frequency of reception. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows.Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2.
Use the wheels to adjust the frequency shift in Hz from the center frequency of reception. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2.
<h3>A.2: Channel bandwidth before discriminator</h3>
@ -191,7 +191,7 @@ Shows status information on the decoder:
- **Samp**: sampling point offsets from 0 to 9 as there are 10 samples per symbols at 48 kS/s and 4800 Baud. Numbers are arranged in this order: symbol, sync and clock. The clock offset wins. These numbers should not differ by more than 1 (0 to 9 wrapping considered).
- **Vit**: Viterbi cost. Should be positive and as low as possible. -1 if unavailable.
<h3>C1.8: FM signal scope controls
<h3>C1.8: FM signal scope controls</h3>
![M17 Demodulator scope controls GUI](../../../doc/img/M17Demod_scope_controls.png)

View File

@ -1,4 +1,4 @@
<h1>Radiosonde Demodulator Plugin</h1>
<h1>Radiosonde Demodulator Plugin</h1>
<h2>Introduction</h2>

View File

@ -219,7 +219,7 @@ The signal power is calculated as the moving average over the AGC time constant
Active only in AGC mode with squelch enabled.
To avoid unwanted squelch opening on short transient bursts only signals with power above threshold during this period in milliseconds will open the squelch.It can be varied from 0 to 20 ms in 1 ms steps then from 30 to 500 ms in 10 ms steps.
To avoid unwanted squelch opening on short transient bursts only signals with power above threshold during this period in milliseconds will open the squelch. It can be varied from 0 to 20 ms in 1 ms steps then from 30 to 500 ms in 10 ms steps.
When the power threshold is close to the noise floor a few milliseconds help in preventing noise power wiggle to open the squelch.

View File

@ -46,7 +46,7 @@ This is the total recording time for the session.
<h3>6: Record size</h3>
This is the total number of bytes recorded for the session.The number is possibly suffixed by a multiplier character:
This is the total number of bytes recorded for the session. The number is possibly suffixed by a multiplier character:
- **k**: _kilo_ for kilobytes
- **M**: _mega_ for megabytes
- **G**: _giga_ for gigabytes

View File

@ -20,7 +20,7 @@ Both manual and automatic controls are active at the same time and the user can
To change the frequency manually use the wheels to adjust the frequency shift in Hz from the center frequency of reception. Left click on a digit sets the cursor position at this digit. Right click on a digit sets all digits on the right to zero. This effectively floors value at the digit position. Wheels are moved with the mousewheel while pointing at the wheel or by selecting the wheel with the left mouse click and using the keyboard arrows. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2.
<h3>2: Instantaneous tracker error</h2>
<h3>2: Instantaneous tracker error</h3>
This is the instantaneous frequency error in Hz. It is activated as soon as the FLL or PLL tracker is selected (7.3) regardless of the tracking activation (7.1)

View File

@ -794,7 +794,7 @@ The columns in the table include:
- UTC - UTC date and time at the end of the measurement.
- Az (Rot) - Azimuth of rotator controller in degrees at the end of measurement.
- El (Rot) - Elevation of rotator controller in degrees at the end of measurement.
- Az Off (Rot) - Azimimuth offset of rotator controller in degrees at the end of measurement.
- Az Off (Rot) - Azimuth offset of rotator controller in degrees at the end of measurement.
- El Off (Rot) - Elevation offset of rotator controller in degrees at the end of measurement.
Right clicking on the table shows a popup menu that supports:

View File

@ -1,4 +1,4 @@
<h1>Radio Clock Plugin</h1>
<h1>Radio Clock Plugin</h1>
<h2>Introduction</h2>

View File

@ -42,11 +42,11 @@ The slider moves the channel center frequency roughly from the lower to the high
- **1**: centered
- **2**: higher half-band
<h3>6: Distant address</h2>
<h3>6: Distant address</h3>
IP address of the distant network interface from where the I/Q samples are sent via UDP
<h3>7: Data distant port</h2>
<h3>7: Data distant port</h3>
Distant port to which the I/Q samples are sent via UDP

View File

@ -80,7 +80,7 @@ Note that spectrum polling is done every 200 ms. If the signal of interest is sh
This is the squelch level as discussed above. To try to find the correct value you can use the spectrum display (15).
<h3>11: Pre recording period<h3>
<h3>11: Pre recording period</h3>
This is the number of seconds of data that will be prepended before the start of recording point. Thus you can make sure that the signal of interest will be fully recorded. Works in both spectrum squelch triggered and manual mode.

View File

@ -98,7 +98,7 @@ When any item of these items is changed the button is lit in green until it is p
<h3>11: Audio volume</h3>
Volume of the audio feedback (when se with button 12.2).
Volume of the audio feedback (when set with button 12.2).
<h3>12: Gain</h3>
@ -116,7 +116,7 @@ The background of the "Sq" text is lit in green when the squelch is open
Use the slider to set the squelch power threshold based on channel input power (2). At the right of the slider the value in dB is displayed
<h4>13.2: Squelch gate</h4>
<h4>13.3: Squelch gate</h4>
Sets the delay after which a signal constantly above the squelch threshold effectively opens the squelch. The same delay is used for squelch release except for SSB where the gate is fixed at 50 ms and this controls the release time only.

View File

@ -42,10 +42,10 @@ The slider moves the channel center frequency roughly from the lower to the high
- **1**: centered
- **2**: higher half-band
<h3>6: Local Output source index</h2>
<h3>6: Local Output source index</h3>
This selects the index of the Local Output device sink from which to pull the I/Q samples. The list can be refreshed with the next button (7)
<h3>7: Refresh local output devices list</h2>
<h3>7: Refresh local output devices list</h3>
Use this button to refresh the list of Local Output device sinks indexes.

View File

@ -62,7 +62,7 @@ Use this button to toggle mute for this channel. The radio waves on the icon are
![ATV Modulator plugin GUI signal](../../../doc/img/ATVMod_pluginA.png)
<h3>A.1: Modulation type</h2>
<h3>A.1: Modulation type</h3>
The video signal can modulate the carrier in the following modes:
@ -117,7 +117,7 @@ This controls the number of full frames per second. Choice is between 30, 25, 20
&#9758; Perception of continuous motion is said to be acceptable down to 16 FPS. Down to 8 FPS fluidity is still acceptable. The 5 to 1 FPS modes can be used when you want to transmit images with only few movements or where motion is not important such as fixed webcams. Low FPS will allow for more lines and therefore definition in the same bandwidth.
<h3>A.9: TV Standard</h2>
<h3>A.9: TV Standard</h3>
This controls the frame synchronization scheme and number of black lines:

View File

@ -19,7 +19,7 @@ Modulation characteristics from LoRa have been augmented with more bandwidths an
The top and bottom bars of the channel window are described [here](../../../sdrgui/channel/readme.md)
![ChitpChat Modulator plugin GUI](../../../doc/img/ChirpChatMod_plugin.png)
![ChirpChat Modulator plugin GUI](../../../doc/img/ChirpChatMod_plugin.png)
<h3>1: Frequency shift from center frequency of reception</h3>

View File

@ -129,7 +129,7 @@ Send packet frames immediately
Send packet frames in an infinite loop with a delay between transmissions set by (C.4)
<h3>C.4: Delay between packets<h3>
<h3>C.4: Delay between packets</h3>
Delay between packet frames in seconds when in loop mode (C.3)

View File

@ -14,11 +14,11 @@ The top and bottom bars of the channel window are described [here](../../../sdrg
![Remote source channel plugin GUI](../../../doc/img/RemoteSource.png)
<h3>1: Data local address</h2>
<h3>1: Data local address</h3>
IP address of the local network interface from where the I/Q samples are fetched via UDP
<h3>2: Data local port</h2>
<h3>2: Data local port</h3>
Local port from where the I/Q samples are fetched via UDP

View File

@ -103,6 +103,7 @@ bool AFCGUI::handleMessage(const Message& message)
{
const AFC::MsgDeviceSetListsReport& report = (AFC::MsgDeviceSetListsReport&) message;
updateDeviceSetLists(report);
return true;
}
return false;

View File

@ -1,4 +1,4 @@
<h1>Antenna Tools Feature Plugin</h1>
<h1>Antenna Tools Feature Plugin</h1>
<h2>Introduction</h2>

View File

@ -288,11 +288,10 @@ void GS232Controller::applySettings(const GS232ControllerSettings& settings, con
m_selectedPipe = m_availableChannelOrFeatureHandler.registerPipes(settings.m_source, {"target"});
}
GS232ControllerWorker::MsgConfigureGS232ControllerWorker *msg = GS232ControllerWorker::MsgConfigureGS232ControllerWorker::create(
settings, settingsKeys, force
);
if (m_worker) {
GS232ControllerWorker::MsgConfigureGS232ControllerWorker *msg = GS232ControllerWorker::MsgConfigureGS232ControllerWorker::create(
settings, settingsKeys, force
);
m_worker->getInputMessageQueue()->push(msg);
}

View File

@ -152,13 +152,13 @@ Pressing the Config... button will display the Input Configuration Dialog:
The Configure buttons allow setting which axis is assigned to target or offset control. To assign an axis, press the corresponding Configure button, then move the controller axis.
<h4>2: Deadzones</h3>
<h4>2: Deadzones</h4>
Deadzones can be set individually for each for the 4 axes. A deadzone specifies the amount a controller axis can be moved without a response.
This can be used to prevent very small movements around the center position on a stick from adjusting the target, or eliminate target adjustments
when a stick is centered, but is reporting a non-zero position on the axis.
<h4>3: Sensitivity</h3>
<h4>3: Sensitivity</h4>
Specifies the sensitivity of the input in Low and High Sensitivity mode (23). The higher the value, the faster coordinates will change for a given control stick movement.

View File

@ -36,7 +36,7 @@ Use this button to retrieve the LimeRFE device current configuration and populat
Use this button to apply configuration changes. You must press this button to make any of your changes active. Whenever a change requires the LimeRFE configuration to be changed to become effective this button becomes green to suggest it should be activated.
<h3>6. Status window</h3
<h3>6. Status window</h3>
<h2>A. Rx channel control</h2>

View File

@ -28,6 +28,7 @@
#include <QScreen>
#include <QSvgWidget>
#include <QTableWidgetItem>
#include <QtAlgorithms>
#ifdef QT_WEBENGINE_FOUND
#include <QtWebEngineWidgets/QWebEngineView>
@ -411,6 +412,16 @@ MapGUI::~MapGUI()
delete m_webServer;
}
delete m_giro;
qDeleteAll(*m_beacons);
delete m_beacons;
qDeleteAll(*m_navAids);
qDeleteAll(*m_airspaces);
qDeleteAll(*m_airportInfo);
qDeleteAll(*m_waypoints);
m_objectMapModel.removeAll();
m_imageMapModel.removeAll();
m_polygonMapModel.removeAll();
m_polylineMapModel.removeAll();
delete ui;
}

View File

@ -1,4 +1,4 @@
<h1>Map Feature Plugin</h1>
<h1>Map Feature Plugin</h1>
<h2>Introduction</h2>
@ -314,7 +314,7 @@ Sea Marks are from OpenSeaMap: https://www.openseamap.org/
Railways are from OpenRailwayMap: https://www.openrailwaymap.org/
Weather radar and satellite data is from RainViewer: https://www.rainviewer
Weather radar and satellite data is from RainViewer: https://www.rainviewer.com
Icons made by Google from Flaticon: https://www.flaticon.com
World icons created by turkkub from Flaticon: https://www.flaticon.com

View File

@ -15,6 +15,7 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
///////////////////////////////////////////////////////////////////////////////////
#include <QtAlgorithms>
#include <QResource>
#include <QFile>
#include <QRegularExpression>
@ -41,6 +42,12 @@ WebServer::WebServer(quint16 &port, QObject* parent) :
m_mimeTypes.insert(".geojson", new MimeType("application/geo+json"));
}
WebServer::~WebServer()
{
qDeleteAll(m_substitutions);
qDeleteAll(m_mimeTypes);
}
void WebServer::incomingConnection(qintptr socket)
{
QTcpSocket* s = new QTcpSocket(this);

View File

@ -64,6 +64,7 @@ private:
public:
WebServer(quint16 &port, QObject* parent = 0);
~WebServer();
void incomingConnection(qintptr socket) override;
void addPathSubstitution(const QString &from, const QString &to);
void addSubstitution(QString path, QString from, QString to);

View File

@ -189,10 +189,10 @@ void PERTester::applySettings(const PERTesterSettings& settings, const QList<QSt
{
qDebug() << "PERTester::applySettings:" << settings.getDebugString(settingsKeys, force) << " force: " << force;
PERTesterWorker::MsgConfigurePERTesterWorker *msg = PERTesterWorker::MsgConfigurePERTesterWorker::create(
settings, settingsKeys, force
);
if (m_worker) {
PERTesterWorker::MsgConfigurePERTesterWorker *msg = PERTesterWorker::MsgConfigurePERTesterWorker::create(
settings, settingsKeys, force
);
m_worker->getInputMessageQueue()->push(msg);
}

View File

@ -2,7 +2,7 @@
<h2>Introduction</h2>
The Packet Error Rate (PER) Tester feature can be used to measure the packet error rate over digital, packet based protocols such as AX.25 (Packet mod/demod), LoRa (ChipChat mod/demod), AIS and 802.15.4.
The Packet Error Rate (PER) Tester feature can be used to measure the packet error rate over digital, packet based protocols such as AX.25 (Packet mod/demod), LoRa (ChirpChat mod/demod), AIS and 802.15.4.
The PER Tester feature allows you to define the contents of the packets to transmit, which can include a per-packet 32-bit identifier, as well as a user-defined or random payload, how many packets are sent and the interval between them.

View File

@ -1,4 +1,4 @@
<h1>Radiosonde Feature Plugin</h1>
<h1>Radiosonde Feature Plugin</h1>
<h2>Introduction</h2>

View File

@ -208,11 +208,10 @@ void SatelliteTracker::applySettings(const SatelliteTrackerSettings& settings, c
tlesChanged = true;
}
SatelliteTrackerWorker::MsgConfigureSatelliteTrackerWorker *msg = SatelliteTrackerWorker::MsgConfigureSatelliteTrackerWorker::create(
settings, settingsKeys, force
);
if (m_worker) {
SatelliteTrackerWorker::MsgConfigureSatelliteTrackerWorker *msg = SatelliteTrackerWorker::MsgConfigureSatelliteTrackerWorker::create(
settings, settingsKeys, force
);
m_worker->getInputMessageQueue()->push(msg);
}

View File

@ -146,7 +146,7 @@ Click to open the Settings Dialog. The settings dialog allows a user to:
<h3>18: Display SDO/SOHO Imagery</h3>
When checked, displays imagary from NASA's SDO (Solar Dynamic Observatory) and ESA/NASA's SOHO (Solar and Heliospheric Observatory) satellites.
When checked, displays imagery from NASA's SDO (Solar Dynamic Observatory) and ESA/NASA's SOHO (Solar and Heliospheric Observatory) satellites.
SDOs images the Sun in a variety of UV and EUV wavelengths. SOHO shows images of the solar corona. The images are near real-time, updated every 15 minutes.
@ -171,7 +171,7 @@ Selects which image / wavelength to view.
| 211 Å | Active corona |
| 304 Å | Chromosphere, transition region |
| 335 Å | Active corona |
| 1600 Å | Transition region, upper photoshere |
| 1600 Å | Transition region, upper photosphere |
| 1700 Å | Temperature minimum, photosphere |
[Ref](https://sdo.gsfc.nasa.gov/data/channels.php)

View File

@ -1,4 +1,4 @@
<h1>Sky Map Feature Plugin</h1>
<h1>Sky Map Feature Plugin</h1>
<h2>Introduction</h2>
@ -106,7 +106,7 @@ When checked, the centre of view will track the coordinates received from the se
Select a Star Tracker, Rotator Controller, Satellite Tracker or Map plugin to read viewing coordinates from.
* When a Star Tracker is selected, target RA/Dec, observation position, antenna beamwith and date/time will be read from the selected plugin.
* When a Star Tracker is selected, target RA/Dec, observation position, antenna beamwidth and date/time will be read from the selected plugin.
* For other plugin types, Alt/El will be read and other parameters are taken from the the Display Settings dialog (12).
<h3>12: Display settings</h3>
@ -129,7 +129,7 @@ The popup window can be moved by left clicking and dragging it.
ESASky and Aladin are able to overlay catalog data:
* In ESASky, zoom in to the area of interest, then press the "Explore catalog data for this region" button. A window will appear showing available catalogs. Left click and boxes will be overlaid on the map for each catalog entry. The data is also displayed in tabular form. You can left click on a box to view its data in the table.
* In Aladin, zoom in to the areae of interest, then press the "Manage layers" button. In the popup window, select one or more of the available catalogs, or press Add catalogue to add a new one. Boxes will be overlaid on the map for each catalog entry. Left click on a box to display the data for it in tabular form.
* In Aladin, zoom in to the area of interest, then press the "Manage layers" button. In the popup window, select one or more of the available catalogs, or press Add catalogue to add a new one. Boxes will be overlaid on the map for each catalog entry. Left click on a box to display the data for it in tabular form.
<h2>Attribution</h2>

View File

@ -41,6 +41,12 @@ WebServer::WebServer(quint16 &port, QObject* parent) :
m_mimeTypes.insert(".geojson", new MimeType("application/geo+json"));
}
WebServer::~WebServer()
{
qDeleteAll(m_substitutions);
qDeleteAll(m_mimeTypes);
}
void WebServer::incomingConnection(qintptr socket)
{
QTcpSocket* s = new QTcpSocket(this);

View File

@ -64,6 +64,7 @@ private:
public:
WebServer(quint16 &port, QObject* parent = 0);
~WebServer();
void incomingConnection(qintptr socket) override;
void addPathSubstitution(const QString &from, const QString &to);
void addSubstitution(QString path, QString from, QString to);

View File

@ -163,25 +163,25 @@ bool StarTracker::handleMessage(const Message& cmd)
}
else if (MsgSetSolarFlux::match(cmd))
{
MsgSetSolarFlux& msg = (MsgSetSolarFlux&) cmd;
m_solarFlux = msg.getFlux();
if (m_worker) {
MsgSetSolarFlux& msg = (MsgSetSolarFlux&) cmd;
m_solarFlux = msg.getFlux();
m_worker->getInputMessageQueue()->push(new MsgSetSolarFlux(msg));
}
return true;
}
else if (MainCore::MsgStarTrackerDisplaySettings::match(cmd))
{
MainCore::MsgStarTrackerDisplaySettings& settings = (MainCore::MsgStarTrackerDisplaySettings&) cmd;
if (m_guiMessageQueue) {
MainCore::MsgStarTrackerDisplaySettings& settings = (MainCore::MsgStarTrackerDisplaySettings&) cmd;
m_guiMessageQueue->push(new MainCore::MsgStarTrackerDisplaySettings(settings));
}
return true;
}
else if (MainCore::MsgStarTrackerDisplayLoSSettings::match(cmd))
{
MainCore::MsgStarTrackerDisplayLoSSettings& settings = (MainCore::MsgStarTrackerDisplayLoSSettings&) cmd;
if (m_guiMessageQueue) {
MainCore::MsgStarTrackerDisplayLoSSettings& settings = (MainCore::MsgStarTrackerDisplayLoSSettings&) cmd;
m_guiMessageQueue->push(new MainCore::MsgStarTrackerDisplayLoSSettings(settings));
}
return true;
@ -246,10 +246,10 @@ void StarTracker::applySettings(const StarTrackerSettings& settings, const QList
}
}
StarTrackerWorker::MsgConfigureStarTrackerWorker *msg = StarTrackerWorker::MsgConfigureStarTrackerWorker::create(
settings, settingsKeys, force
);
if (m_worker) {
StarTrackerWorker::MsgConfigureStarTrackerWorker *msg = StarTrackerWorker::MsgConfigureStarTrackerWorker::create(
settings, settingsKeys, force
);
m_worker->getInputMessageQueue()->push(msg);
}

View File

@ -144,14 +144,11 @@ bool AudioCATSISO::startRx()
m_inputWorker->startWork();
m_inputWorkerThread->start();
qDebug("AudioCATSISO::startRx: started");
m_rxRunning = true;
qDebug() << "AudioCATSISO::startRx: start CAT";
m_catWorkerThread = new QThread();
m_catWorker = new AudioCATSISOCATWorker();
m_inputWorker->moveToThread(m_catWorkerThread);
m_catWorker->moveToThread(m_catWorkerThread);
QObject::connect(m_catWorkerThread, &QThread::started, m_catWorker, &AudioCATSISOCATWorker::startWork);
QObject::connect(m_catWorkerThread, &QThread::finished, m_catWorker, &QObject::deleteLater);
@ -159,13 +156,23 @@ bool AudioCATSISO::startRx()
m_catWorker->setMessageQueueToGUI(getMessageQueueToGUI());
m_catWorker->setMessageQueueToSISO(getInputMessageQueue());
m_catWorker->startWork();
m_catWorkerThread->start();
qDebug("AudioCATSISO::startRx: started");
m_rxRunning = true;
AudioCATSISOCATWorker::MsgSetRxSampleRate *msgSetRxSampleRate = AudioCATSISOCATWorker::MsgSetRxSampleRate::create(m_rxSampleRate);
m_catWorker->getInputMessageQueue()->push(msgSetRxSampleRate);
AudioCATSISOCATWorker::MsgConfigureAudioCATSISOCATWorker *msgToCAT = AudioCATSISOCATWorker::MsgConfigureAudioCATSISOCATWorker::create(
m_settings, QList<QString>(), true
);
m_catWorker->getInputMessageQueue()->push(msgToCAT);
AudioCATSISOCATWorker::MsgPollTimerConnect *startTimerMsg = AudioCATSISOCATWorker::MsgPollTimerConnect::create();
m_catWorker->getInputMessageQueue()->push(startTimerMsg);
qDebug() << "AudioCATSISO::startRx: CAT started";
m_catRunning = true;
@ -466,6 +473,8 @@ void AudioCATSISO::applySettings(const AudioCATSISOSettings& settings, const QLi
{
audioDeviceManager->removeAudioSource(&m_inputFifo);
audioDeviceManager->addAudioSource(&m_inputFifo, getInputMessageQueue(), m_rxAudioDeviceIndex);
AudioCATSISOCATWorker::MsgSetRxSampleRate *msgSetRxSampleRate = AudioCATSISOCATWorker::MsgSetRxSampleRate::create(m_rxSampleRate);
m_catWorker->getInputMessageQueue()->push(msgSetRxSampleRate);
}
}
@ -557,6 +566,10 @@ void AudioCATSISO::applySettings(const AudioCATSISOSettings& settings, const QLi
forwardTxChange = true;
}
if (settingsKeys.contains("catPollingMs") || force) {
forwardToCAT = true;
}
if (settings.m_useReverseAPI)
{
bool fullUpdate = (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) ||

View File

@ -16,7 +16,9 @@
///////////////////////////////////////////////////////////////////////////////////
#include <QDebug>
#include <QTimer>
#include "dsp/devicesamplesource.h"
#include "audiocatsisocatworker.h"
// Compatibility with all versions of Hamlib
@ -25,6 +27,8 @@
#endif
MESSAGE_CLASS_DEFINITION(AudioCATSISOCATWorker::MsgConfigureAudioCATSISOCATWorker, Message)
MESSAGE_CLASS_DEFINITION(AudioCATSISOCATWorker::MsgPollTimerConnect, Message)
MESSAGE_CLASS_DEFINITION(AudioCATSISOCATWorker::MsgSetRxSampleRate, Message)
MESSAGE_CLASS_DEFINITION(AudioCATSISOCATWorker::MsgReportFrequency, Message)
AudioCATSISOCATWorker::AudioCATSISOCATWorker(QObject* parent) :
@ -33,6 +37,7 @@ AudioCATSISOCATWorker::AudioCATSISOCATWorker(QObject* parent) :
m_inputMessageQueueToSISO(nullptr),
m_running(false),
m_connected(false),
m_pollTimer(nullptr),
m_ptt(false),
m_frequency(0)
{
@ -42,6 +47,10 @@ AudioCATSISOCATWorker::AudioCATSISOCATWorker(QObject* parent) :
AudioCATSISOCATWorker::~AudioCATSISOCATWorker()
{
stopWork();
if (m_pollTimer) {
delete m_pollTimer;
}
}
void AudioCATSISOCATWorker::startWork()
@ -70,23 +79,46 @@ void AudioCATSISOCATWorker::applySettings(const AudioCATSISOSettings& settings,
<< " force:" << force
<< settings.getDebugString(settingsKeys, force);
if (settingsKeys.contains("rxCenterFrequency") || force)
qint64 rxXlatedDeviceCenterFrequency = settings.m_rxCenterFrequency;
rxXlatedDeviceCenterFrequency -= settings.m_transverterMode ? settings.m_transverterDeltaFrequency : 0;
rxXlatedDeviceCenterFrequency = rxXlatedDeviceCenterFrequency < 0 ? 0 : rxXlatedDeviceCenterFrequency;
qint64 txXlatedDeviceCenterFrequency = settings.m_txCenterFrequency;
txXlatedDeviceCenterFrequency -= settings.m_transverterMode ? settings.m_transverterDeltaFrequency : 0;
txXlatedDeviceCenterFrequency = txXlatedDeviceCenterFrequency < 0 ? 0 : txXlatedDeviceCenterFrequency;
if (settingsKeys.contains("rxCenterFrequency") ||
settingsKeys.contains("transverterMode") ||
settingsKeys.contains("transverterDeltaFrequency") || force)
{
if (!m_ptt) {
catSetFrequency(settings.m_rxCenterFrequency);
if (!m_ptt)
{
qint64 deviceCenterFrequency = DeviceSampleSource::calculateDeviceCenterFrequency(
rxXlatedDeviceCenterFrequency,
0,
settings.m_log2Decim,
(DeviceSampleSource::fcPos_t) settings.m_fcPosRx,
m_rxSampleRate,
DeviceSampleSource::FrequencyShiftScheme::FSHIFT_STD,
false);
catSetFrequency(deviceCenterFrequency);
}
}
if (settingsKeys.contains("txCenterFrequency") || force)
if (settingsKeys.contains("txCenterFrequency") ||
settingsKeys.contains("transverterMode") ||
settingsKeys.contains("transverterDeltaFrequency") || force)
{
if (m_ptt) {
catSetFrequency(settings.m_txCenterFrequency);
catSetFrequency(txXlatedDeviceCenterFrequency);
}
}
if (settingsKeys.contains("catPollingMs") || force)
{
m_pollTimer.setInterval(settings.m_catPollingMs);
if (m_pollTimer) {
m_pollTimer->setInterval(settings.m_catPollingMs);
}
}
if (force) {
@ -125,6 +157,39 @@ bool AudioCATSISOCATWorker::handleMessage(const Message& message)
return true;
}
else if (MsgPollTimerConnect::match(message))
{
qDebug("AudioCATSISOCATWorker::handleMessage: MsgPollTimerConnect");
m_pollTimer = new QTimer();
connect(m_pollTimer, SIGNAL(timeout()), this, SLOT(pollingTick()));
m_pollTimer->start(m_settings.m_catPollingMs);
return true;
}
else if (MsgSetRxSampleRate::match(message))
{
MsgSetRxSampleRate& cmd = (MsgSetRxSampleRate&) message;
m_rxSampleRate = cmd.getSampleRate();
qDebug("AudioCATSISOCATWorker::handleMessage: MsgSetRxSampleRate: %d", m_rxSampleRate);
if (m_settings.m_transverterMode && !m_ptt)
{
qint64 rxXlatedDeviceCenterFrequency = m_settings.m_rxCenterFrequency;
rxXlatedDeviceCenterFrequency -= m_settings.m_transverterMode ? m_settings.m_transverterDeltaFrequency : 0;
rxXlatedDeviceCenterFrequency = rxXlatedDeviceCenterFrequency < 0 ? 0 : rxXlatedDeviceCenterFrequency;
qint64 deviceCenterFrequency = DeviceSampleSource::calculateDeviceCenterFrequency(
rxXlatedDeviceCenterFrequency,
0,
m_settings.m_log2Decim,
(DeviceSampleSource::fcPos_t) m_settings.m_fcPosRx,
m_rxSampleRate,
DeviceSampleSource::FrequencyShiftScheme::FSHIFT_STD,
false);
catSetFrequency(deviceCenterFrequency);
}
return true;
}
return false;
}
@ -177,8 +242,6 @@ void AudioCATSISOCATWorker::catConnect()
if (retcode == RIG_OK)
{
m_connected = true;
connect(&m_pollTimer, SIGNAL(timeout()), this, SLOT(pollingTick()));
m_pollTimer.start(m_settings.m_catPollingMs);
msg = AudioCATSISOSettings::MsgCATReportStatus::create(AudioCATSISOSettings::MsgCATReportStatus::StatusConnected);
}
else
@ -196,8 +259,12 @@ void AudioCATSISOCATWorker::catConnect()
void AudioCATSISOCATWorker::catDisconnect()
{
disconnect(&m_pollTimer, SIGNAL(timeout()), this, SLOT(pollingTick()));
m_pollTimer.stop();
if (m_pollTimer)
{
disconnect(m_pollTimer, SIGNAL(timeout()), this, SLOT(pollingTick()));
m_pollTimer->stop();
}
m_connected = false;
rig_close(m_rig); /* close port */
rig_cleanup(m_rig); /* if you care about memory */
@ -276,6 +343,10 @@ void AudioCATSISOCATWorker::pollingTick()
freq_t freq; // double
int retcode = rig_get_freq(m_rig, RIG_VFO_CURR, &freq);
if (m_settings.m_transverterMode) {
freq += m_settings.m_transverterDeltaFrequency;
}
if (retcode == RIG_OK)
{
// qDebug("AudioCATSISOCATWorker::pollingTick: %f %lu", freq, m_frequency);

View File

@ -21,12 +21,13 @@
#include <hamlib/rig.h>
#include <QObject>
#include <QTimer>
#include "util/message.h"
#include "util/messagequeue.h"
#include "audiocatsisosettings.h"
class QTimer;
class AudioCATSISOCATWorker : public QObject {
Q_OBJECT
@ -56,6 +57,39 @@ public:
{ }
};
class MsgPollTimerConnect : public Message {
MESSAGE_CLASS_DECLARATION
public:
static MsgPollTimerConnect* create() {
return new MsgPollTimerConnect();
}
protected:
MsgPollTimerConnect() :
Message()
{ }
};
class MsgSetRxSampleRate : public Message {
MESSAGE_CLASS_DECLARATION
public:
int getSampleRate() const { return m_sampleRate; }
static MsgSetRxSampleRate* create(int sampleRate) {
return new MsgSetRxSampleRate(sampleRate);
}
protected:
int m_sampleRate;
MsgSetRxSampleRate(int sampleRate) :
Message(),
m_sampleRate(sampleRate)
{ }
};
class MsgReportFrequency : public Message {
MESSAGE_CLASS_DECLARATION
@ -99,9 +133,10 @@ private:
bool m_connected;
AudioCATSISOSettings m_settings;
RIG *m_rig;
QTimer m_pollTimer;
QTimer *m_pollTimer;
bool m_ptt;
uint64_t m_frequency;
int m_rxSampleRate;
private slots:
void handleInputMessages();

View File

@ -424,6 +424,9 @@ void AudioCATSISOGUI::displaySettings()
{
blockApplySettings(true);
ui->transverter->setDeltaFrequency(m_settings.m_transverterDeltaFrequency);
ui->transverter->setDeltaFrequencyActive(m_settings.m_transverterMode);
ui->transverter->setIQOrder(m_settings.m_iqOrder);
ui->rxDeviceLabel->setText(m_settings.m_rxDeviceName);
ui->txDeviceLabel->setText(m_settings.m_txDeviceName);
ui->dcBlock->setChecked(m_settings.m_dcBlock);

View File

@ -73,6 +73,8 @@ void AudioCATSISOSettings::resetToDefaults()
m_pttSpectrumLink = true;
m_rxCenterFrequency = 14200000;
m_txCenterFrequency = 14200000;
m_transverterMode = false;
m_transverterDeltaFrequency = 0;
m_rxDeviceName = "";
m_rxVolume = 1.0f;
m_log2Decim = 0;
@ -106,6 +108,8 @@ AudioCATSISOSettings::AudioCATSISOSettings(const AudioCATSISOSettings& other)
m_pttSpectrumLink = other.m_pttSpectrumLink;
m_rxCenterFrequency = other.m_rxCenterFrequency;
m_txCenterFrequency = other.m_txCenterFrequency;
m_transverterMode = other.m_transverterMode;
m_transverterDeltaFrequency = other.m_transverterDeltaFrequency;
m_rxDeviceName = other.m_rxDeviceName;
m_rxVolume = other.m_rxVolume;
m_log2Decim = other.m_log2Decim;
@ -144,6 +148,8 @@ QByteArray AudioCATSISOSettings::serialize() const
s.writeBool(6, m_dcBlock);
s.writeBool(7, m_iqCorrection);
s.writeS32(8, (int) m_fcPosRx);
s.writeBool(9, m_transverterMode);
s.writeS64(10, m_transverterDeltaFrequency);
s.writeString(21, m_txDeviceName);
s.writeU64(22, m_txCenterFrequency);
@ -195,6 +201,8 @@ bool AudioCATSISOSettings::deserialize(const QByteArray& data)
d.readBool(7, &m_iqCorrection, false);
d.readS32(8, &intval, 2);
m_fcPosRx = (fcPos_t) intval;
d.readBool(9, &m_transverterMode, false);
d.readS64(10, &m_transverterDeltaFrequency, 0);
d.readString(21, &m_txDeviceName, "");
d.readU64(22, &m_txCenterFrequency, 14200000);
@ -239,6 +247,13 @@ bool AudioCATSISOSettings::deserialize(const QByteArray& data)
void AudioCATSISOSettings::applySettings(const QStringList& settingsKeys, const AudioCATSISOSettings& settings)
{
if (settingsKeys.contains("transverterMode")) {
m_transverterMode = settings.m_transverterMode;
}
if (settingsKeys.contains("transverterDeltaFrequency")) {
m_transverterDeltaFrequency = settings.m_transverterDeltaFrequency;
}
if (settingsKeys.contains("rxDeviceName")) {
m_rxDeviceName = settings.m_rxDeviceName;
}
@ -332,6 +347,13 @@ QString AudioCATSISOSettings::getDebugString(const QStringList& settingsKeys, bo
{
std::ostringstream ostr;
if (settingsKeys.contains("transverterMode") || force) {
ostr << " m_transverterMode: " << m_transverterMode;
}
if (settingsKeys.contains("transverterDeltaFrequency") || force) {
ostr << " m_transverterDeltaFrequency: " << m_transverterDeltaFrequency;
}
if (settingsKeys.contains("rxDeviceName") || force) {
ostr << " m_rxDeviceName: " << m_rxDeviceName.toStdString();
}

View File

@ -124,43 +124,43 @@ Opens a dialog to set serial connection and CAT details:
![Audio CAT settings GUI](../../../doc/img/AudioCATSISO_CATsettings.png)
<h4>23.1. Serial link baud rate</h3>
<h4>23.1. Serial link baud rate</h4>
Choice between 1200, 2400, 4800, 9600, 19200, 38400, 57600 and 115200 bauds.
<h4>23.2. Handshake method</h3>
<h4>23.2. Handshake method</h4>
Choice between none, XON/XOFF and hardware.
<h4>23.3. Data bits</h3>
<h4>23.3. Data bits</h4>
Choice between 7 or 8 bits.
<h4>23.4. Stop bits</h3>
<h4>23.4. Stop bits</h4>
Choice between 1 or 2 bits.
<h4>23.5. PTT method</h3>
<h4>23.5. PTT method</h4>
Choice between CAT, DTR or RTS signals.
<h4>23.6. Polling interval</h3>
<h4>23.6. Polling interval</h4>
Set polling interval in milliseconds. Polls current VFO frequency via CAT regularly at this interval.
<h4>23.7. DTR signal type</h3>
<h4>23.7. DTR signal type</h4>
When selecting PTT control via DTR signal (23.5) selects if a low or high signal triggers PTT.
<h4>23.8. RTS signal type</h3>
<h4>23.8. RTS signal type</h4>
When selecting PTT control via RTS signal (23.5) selects if a low or high signal triggers PTT.
<h4>23.9. Accept dialog</h3>
<h4>23.9. Accept dialog</h4>
Click **OK** to validate changes and close dialog.
<h4>23.10. Dismiss dialog</h3>
<h4>23.10. Dismiss dialog</h4>
Click **Cancel** to dismiss dialog changes and close dialog.

View File

@ -100,7 +100,7 @@ This button opens a dialog to set the transverter mode frequency translation opt
![PlutoSDR MIMO plugin 12 GUI](../../../doc/img/PlutoSDRMIMO_plugin_12.png)
<h4>12.1: DC<h4>
<h4>12.1: DC</h4>
Software DSP auto correction: auto remove DC component

View File

@ -80,7 +80,7 @@ This is the sample size in number of bits. It corresponds to the actual sample s
This controls the generator sample rate in samples per second.
<h3>4: Modulation</h4>
<h3>4: Modulation</h3>
- **No**: No modulation
- **AM**: Amplitude modulation (AM)

View File

@ -8,7 +8,7 @@ The format is S16LE or S32LE I/Q samples. Thus there are 4 or 8 bytes per sample
You can also zap the 32 bytes header with this Linux command: `tail -c +33 myfile.sdriq > myfile.raw`
To convert in another format you may use the sox utility. For example to convert to 32 bit (float) complex samples do: `sox -r 48k b 16 e signed-integer -c 2 myfile.raw -e float -c 2 myfilec.raw`
To convert in another format you may use the sox utility. For example to convert to 32 bit (float) complex samples do: `sox -r 48k -b 16 -e signed-integer -c 2 myfile.raw -e float -c 2 myfilec.raw`
Note that you have to specify the sampling rate and use .raw for the file extensions.

View File

@ -128,7 +128,7 @@ Can be varied from 5 to 300 MHz
Use the thumbwheels to adjust frequency as done with the LO (1.1). Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2. The boundaries are dynamically calculated from the LO center frequency, sample rate and hardware decimation factor.
<h4>7A.2: Enable/disable external clock input</h7A>
<h4>7A.2: Enable/disable external clock input</h4>
Use this checkbox to enable or disable the external clock input
@ -183,7 +183,7 @@ The TSP in the LMS7002M chip has a FIR filter chain per channel. Use this button
Use the wheels to adjust the bandwidth of the hardware TSP FIR filter. Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2.
<h3>14: Gain</h2>
<h3>14: Gain</h3>
Use this slider to adjust the global gain of the Tx chain. LimeSuite software automatically set optimal values of the amplifiers to achieve this global gain. This gain can be set between 0 and 70 dB in 1 dB steps. The value in dB appears at the right of the slider.

View File

@ -101,7 +101,7 @@ Use this toggle button to switch the sample rate input next (8) between host to
The I/Q stream from the baseband can be upsampled by a power of two by software inside the plugin before being sent to the USRP device. Possible values are increasing powers of two: 1 (no interpolation), 2, 4, 8, 16, 32.
<h3>10: Gain</h2>
<h3>10: Gain</h3>
Use this slider to adjust the global gain of the Tx chain. The allowable values of gain while depend upon the USRP device. The value in dB appears at the right of the slider.

View File

@ -98,7 +98,7 @@ Can be varied from 5 to 300 MHz
Use the thumbwheels to adjust frequency as done with the LO (1.1). Pressing shift simultaneously moves digit by 5 and pressing control moves it by 2. The boundaries are dynamically calculated from the LO center frequency, sample rate and hardware decimation factor.
<h4>8.2: Enable/disable external clock input</h7A>
<h4>8.2: Enable/disable external clock input</h4>
Use this checkbox to enable or disable the external clock input
@ -145,7 +145,7 @@ This is the Tx hardware filter bandwidth in kHz in the LMS7002M device for the g
<h3>13: LMS002M power saving mode</h3>
<h3>14: Gain</h2>
<h3>14: Gain</h3>
Use this slider to adjust the PAD gain of the Tx chain. With the current version of libxtrx this does not seem to be effective.

View File

@ -1,4 +1,4 @@
<h1>Android SDR Driver Input Olugin</h1>
<h1>Android SDR Driver Input Plugin</h1>
<h2>Introduction</h2>

View File

@ -101,7 +101,7 @@ With SR as the sample rate before decimation Fc is calculated as:
This is the Rx filter bandwidth in kHz in the LMS6002D device. Possible values are: 1500, 1750, 2500, 2750, 3000, 3840, 5000, 5500, 6000, 7000, 8750, 10000, 12000, 14000, 20000, 28000 kHz.
<h3>8: LNA gain</h2>
<h3>8: LNA gain</h3>
This is the LNA gain in dB. LNA is inside the LMS6002D chip and is placed before the RF mixer. Possible values are:

View File

@ -93,7 +93,7 @@ With SR as the sample rate before decimation Fc is calculated as:
The I/Q stream from the BladeRF ADC is downsampled by a power of two before being sent to the passband. Possible values are increasing powers of two: 1 (no decimation), 2, 4, 8, 16, 32, 64.
<h3>9: Gain mode</h2>
<h3>9: Gain mode</h3>
This selects the gain processing in use. Values are fetched automatically from the device. Normal values are

View File

@ -80,6 +80,6 @@ Use this slider to adjust the gain of the IF amplifier.
This controls the tuner filter (band) used:
<h3>11: IF filter</h2>
<h3>11: IF filter</h3>
Selects the IF filter bandwidth

View File

@ -149,11 +149,11 @@ Use the wheels to adjust the bandwidth of the hardware TSP FIR filter. Pressing
This button opens a dialog to set the transverter mode frequency translation options. The details about this dialog can be found [here](../../../sdrgui/gui/transverterdialog.md)
<h3>8: Gain settings</h2>
<h3>8: Gain settings</h3>
![LimeSDR input plugin gain GUI](../../../doc/img/LimeSDRInput_plugin_9.png)
<h4>8.1: Gain mode</h2>
<h4>8.1: Gain mode</h4>
Use this combo to select either the automatic gain (Aut) or the manual (Man) gain setting. Automatic gain sets the global gain using a predefined table for LNA, TIA and PGA gain blocks. This global gain is set with button 9.2. When manual gain is engaged the LNA, TIA and PGA gains can be set independently with the 9.3, 9.4 and 9.5 buttons respectively.

View File

@ -59,7 +59,7 @@ This resets the LO ppm correction (zero the value).
This is the device to host sample rate in kilo samples per second (kS/s). The sample rate can be as low as 48 kS/s so there is no need for software decimation. Note that at 48 kS/s some slight rate mismatch can appear with the audio that has the same nominal rate. This may cause some occasional audio samples drops however hardly noticeable.
<h3>5: Wideband mode</h5>
<h3>5: Wideband mode</h3>
Switch on this button to disable the preselection filters. The corresponding LED on the Perseus front panel will be lit accordingly.

View File

@ -104,7 +104,7 @@ This controls the offset tuning. Some RF frontends like the obsolete E4000 imple
This controls the tuner filter bandwidth and can be varied from 350 kHz to 8 MHz. In practice depending on the value this appears to be larger and the filter center is slightly offset above the center frequency. This can still be very useful to eliminate or attenuate large signals outside the device to host I/Q stream passband.
<h3>13: RF gain</h2>
<h3>13: RF gain</h3>
The slider sets RF gain in dB. The values are defined in the RTLSDR device and generally are: 0.0, 0.9, 1.4, 2.7, 3.7, 7.7, 8.7, 12.5, 14.4, 15.7, 16.6, 19.7, 20.7, 22.9, 25.4, 28.0, 29.7, 32.8, 33.8, 36.4, 37.2, 38.6, 40.2, 42.1, 43.4, 43.9, 44.5, 48.0, 49.6

View File

@ -96,7 +96,7 @@ void SDRPlayV3Plugin::enumOriginDevices(QStringList& listedHwIds, OriginDevices&
sdrplay_api_LockDeviceApi();
sdrplay_api_ErrT err;
sdrplay_api_DeviceT devs[6];
sdrplay_api_DeviceT devs[SDRPLAY_MAX_DEVICES];
unsigned int count;
if ((err = sdrplay_api_GetDevices(devs, &count, sizeof(devs) / sizeof(sdrplay_api_DeviceT))) == sdrplay_api_Success)
{

View File

@ -73,7 +73,7 @@ This is the sample size in number of bits. It corresponds to the actual sample s
This controls the generator sample rate in samples per second.
<h3>4: Modulation</h4>
<h3>4: Modulation</h3>
- **No**: No modulation
- **AM**: Amplitude modulation (AM)

View File

@ -101,19 +101,19 @@ Use this toggle button to switch the sample rate input next (8) between host to
The I/Q stream from the USRP device can be decimated by a power of two by software inside the plugin before being sent to the baseband. Possible values are increasing powers of two: 1 (no decimation), 2, 4, 8, 16, 32.
<h3>10: Gain Mode</h2>
<h3>10: Gain Mode</h3>
Choose between automatic or manual gain control.
<h3>11: Gain</h2>
<h3>11: Gain</h3>
Use this slider to adjust the global gain of the Rx chain. The allowable values of gain depend upon the USRP device. The value in dB appears at the right of the slider.
<h3>12: DC offset correction</h2>
<h3>12: DC offset correction</h3>
Check this button to enable DC offset correction.
<h3>13: IQ imbalance correction</h2>
<h3>13: IQ imbalance correction</h3>
Check this button to enable IQ imbalance correction.

View File

@ -163,11 +163,11 @@ This is the Rx hardware filter bandwidth in kHz in the LMS7002M device for the g
<h2>7: LMS002M power saving mode</h2>
<h3>8: Gain settings</h2>
<h3>8: Gain settings</h3>
![LimeSDR input plugin gain GUI](../../../doc/img/LimeSDRInput_plugin_9.png)
<h4>8.1: Gain mode</h2>
<h4>8.1: Gain mode</h4>
Use this combo to select either the automatic gain (Aut) or the manual (Man) gain setting. Automatic gain sets the global gain using a predefined table for LNA, TIA and PGA gain blocks. This global gain is set with button 9.2. When manual gain is engaged the LNA, TIA and PGA gains can be set independently with the 9.3, 9.4 and 9.5 buttons respectively.

View File

@ -606,8 +606,6 @@ if(Vulkan_FOUND AND (${VKFFT_BACKEND} EQUAL 0))
find_library(VULKAN_SPIRV_TOOLS_LIB SPIRV-Tools HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
find_library(VULKAN_SPIRV_TOOLS_OPT_LIB SPIRV-Tools-opt HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
find_library(VULKAN_SPIRV_TOOLS_SHARED_LIB SPIRV-Tools-shared HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
find_library(VULKAN_HLSL_LIB HLSL HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
find_library(VULKAN_OGLCOMPILER_LIB OGLCompiler HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
find_library(VULKAN_OSDEPENDENT_LIB OSDependent HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
find_library(VULKAN_GLSLANG_LIB glslang HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
find_library(VULKAN_GLSLANG_RES_LIB glslang-default-resource-limits HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
@ -624,8 +622,6 @@ if(Vulkan_FOUND AND (${VKFFT_BACKEND} EQUAL 0))
find_library(VULKAN_SPIRV_TOOLSD_LIB SPIRV-Tools${VULKAN_DEBUG_POSTFIX} HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
find_library(VULKAN_SPIRV_TOOLS_OPTD_LIB SPIRV-Tools-opt${VULKAN_DEBUG_POSTFIX} HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
find_library(VULKAN_SPIRV_TOOLS_SHAREDD_LIB SPIRV-Tools-shared${VULKAN_DEBUG_POSTFIX} HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
find_library(VULKAN_HLSLD_LIB HLSL${VULKAN_DEBUG_POSTFIX} HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
find_library(VULKAN_OGLCOMPILERD_LIB OGLCompiler${VULKAN_DEBUG_POSTFIX} HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
find_library(VULKAN_OSDEPENDENTD_LIB OSDependent${VULKAN_DEBUG_POSTFIX} HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
find_library(VULKAN_GLSLANGD_LIB glslang${VULKAN_DEBUG_POSTFIX} HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
find_library(VULKAN_GLSLANG_RESD_LIB glslang-default-resource-limits${VULKAN_DEBUG_POSTFIX} HINTS "$ENV{VULKAN_SDK}/lib" REQUIRED)
@ -638,8 +634,6 @@ if(Vulkan_FOUND AND (${VKFFT_BACKEND} EQUAL 0))
optimized ${VULKAN_SPIRV_TOOLS_LIB}
optimized ${VULKAN_SPIRV_TOOLS_OPT_LIB}
optimized ${VULKAN_SPIRV_TOOLS_SHARED_LIB}
optimized ${VULKAN_HLSL_LIB}
optimized ${VULKAN_OGLCOMPILER_LIB}
optimized ${VULKAN_OSDEPENDENT_LIB}
optimized ${VULKAN_GLSLANG_LIB}
optimized ${VULKAN_GLSLANG_RES_LIB}
@ -651,8 +645,6 @@ if(Vulkan_FOUND AND (${VKFFT_BACKEND} EQUAL 0))
debug ${VULKAN_SPIRV_TOOLSD_LIB}
debug ${VULKAN_SPIRV_TOOLS_OPTD_LIB}
debug ${VULKAN_SPIRV_TOOLS_SHAREDD_LIB}
debug ${VULKAN_HLSLD_LIB}
debug ${VULKAN_OGLCOMPILERD_LIB}
debug ${VULKAN_OSDEPENDENTD_LIB}
debug ${VULKAN_GLSLANGD_LIB}
debug ${VULKAN_GLSLANG_RESD_LIB}

View File

@ -40,8 +40,8 @@ QByteArray DeviceUserArgs::serialize() const
{
SimpleSerializer s(1);
QByteArray data;
QDataStream *stream = new QDataStream(&data, QIODevice::WriteOnly);
*stream << m_argsByDevice;
QDataStream stream(&data, QIODevice::WriteOnly);
stream << m_argsByDevice;
s.writeBlob(1, data);
return s.final();
}

View File

@ -16,6 +16,7 @@
///////////////////////////////////////////////////////////////////////////////////
#include <QDebug>
#include <QElapsedTimer>
#include "dsp/vkfftengine.h"

View File

@ -20,6 +20,7 @@
#include "glslang_c_interface.h"
#include "dsp/vulkanvkfftengine.h"
#include "util/profiler.h"
class GLSInitialiser {
public:

View File

@ -209,6 +209,7 @@ void MainCore::removeLastFeatureSet()
FeatureSet *featureSet = m_featureSets.back();
m_featureSetsMap.remove(featureSet);
m_featureSets.pop_back();
delete featureSet;
}
}
@ -227,6 +228,7 @@ void MainCore::removeLastDeviceSet()
DeviceSet *deviceSet = m_deviceSets.back();
m_deviceSetsMap.remove(deviceSet);
m_deviceSets.pop_back();
delete deviceSet;
}
}

View File

@ -21,6 +21,7 @@
#include <algorithm>
#include "qalgorithms.h"
#include "settings/mainsettings.h"
#include "commands/command.h"
#include "audio/audiodevicemanager.h"
@ -34,24 +35,11 @@ MainSettings::MainSettings() :
MainSettings::~MainSettings()
{
for (int i = 0; i < m_presets.count(); ++i)
{
delete m_presets[i];
}
for (int i = 0; i < m_commands.count(); ++i)
{
delete m_commands[i];
}
for (int i = 0; i < m_featureSetPresets.count(); ++i)
{
delete m_featureSetPresets[i];
}
for (int i = 0; i < m_pluginPresets.count(); ++i)
{
delete m_pluginPresets[i];
}
qDeleteAll(m_presets);
qDeleteAll(m_commands);
qDeleteAll(m_featureSetPresets);
qDeleteAll(m_pluginPresets);
qDeleteAll(m_configurations);
}
QString MainSettings::getFileLocation() const

View File

@ -5560,3 +5560,8 @@ Airline::Init::Init()
s += 4;
}
}
Airline::Init::~Init()
{
qDeleteAll(m_icaoHash);
}

View File

@ -55,6 +55,7 @@ private:
friend struct Init;
struct Init {
Init();
~Init();
static const char *m_airlines[];
};
static Init m_init;

View File

@ -502,7 +502,7 @@ AISSafetyMessage::AISSafetyMessage(QByteArray ba) :
m_sequenceNumber = ba[4] & 0x3;
m_destinationId = ((ba[5] & 0xff) << 22) | ((ba[6] & 0xff) << 14) | ((ba[7] & 0xff) << 6) | ((ba[8] >> 2) & 0x3f);
m_retransmitFlag = (ba[8] >> 1) & 0x1;
m_safetyRelatedText = AISMessage::getString(ba, 9, 0, (ba.size() - 9) * 8 / 6);
m_safetyRelatedText = AISMessage::getString(ba, 9, 8, (ba.size() - 9) * 8 / 6);
}
QString AISSafetyMessage::toString()
@ -518,7 +518,7 @@ AISSafetyAck::AISSafetyAck(QByteArray ba) :
AISSafetyBroadcast::AISSafetyBroadcast(QByteArray ba) :
AISMessage(ba)
{
m_safetyRelatedText = AISMessage::getString(ba, 5, 0, (ba.size() - 6) * 8 / 6);
m_safetyRelatedText = AISMessage::getString(ba, 5, 8, (ba.size() - 5) * 8 / 6);
}
QString AISSafetyBroadcast::toString()

View File

@ -30,7 +30,7 @@ All device types have common settings. Clicking on the button opens a dialog to
<h4>A.2.1: Toggle reverse API feature</h4>
Use this checkbox to toggle on/off the reverse API feature. With reverse API engaged the changes in the device settings are forwarded to an API endpoint given by address (A.2.2), port (A.2.3) and device index A.2.4) in the same format as the SDRangel REST API device settings endpoint. With the values of the screenshot the API URL is: `http://127.0.0.1:8888/sdrangel/deviceset/0/device/settings` The JSON payload follows the same format as the SDRangel REST API device settings. For example with HachRF Rx this would be something like:
Use this checkbox to toggle on/off the reverse API feature. With reverse API engaged the changes in the device settings are forwarded to an API endpoint given by address (A.2.2), port (A.2.3) and device index A.2.4) in the same format as the SDRangel REST API device settings endpoint. With the values of the screenshot the API URL is: `http://127.0.0.1:8888/sdrangel/deviceset/0/device/settings` The JSON payload follows the same format as the SDRangel REST API device settings. For example with HackRF Rx this would be something like:
```
{

View File

@ -30,7 +30,7 @@ Resets the title to the feature type name.
<h4>2.3: Toggle reverse API feature</h4>
Use this checkbox to toggle on/off the reverse API feature. With reverse API engaged the changes in the feature settings are forwarded to an API endpoint given by address (8.2.4), port (8.2.5), feature set index (8.2.6) and feature index (8.2.7) in the same format as the SDRangel REST API feature settings endpoint. With the values of the screenshot the API URL is: `http://127.0.0.1:8888/sdrangel/featureeset/0/feature/0/settings` The JSON payload follows the same format as the SDRangel REST API feature settings. Using the same example this would be:
Use this checkbox to toggle on/off the reverse API feature. With reverse API engaged the changes in the feature settings are forwarded to an API endpoint given by address (8.2.4), port (8.2.5), feature set index (8.2.6) and feature index (8.2.7) in the same format as the SDRangel REST API feature settings endpoint. With the values of the screenshot the API URL is: `http://127.0.0.1:8888/sdrangel/featureset/0/feature/0/settings` The JSON payload follows the same format as the SDRangel REST API feature settings. Using the same example this would be:
```
{

View File

@ -514,6 +514,8 @@ void GLShaderSpectrogram::drawSurface(SpectrumSettings::SpectrogramStyle style,
void GLShaderSpectrogram::cleanup()
{
delete m_vao;
m_vao = nullptr;
delete m_programShaded;
m_programShaded = nullptr;
delete m_programSimple;

View File

@ -230,12 +230,16 @@ Use this combo box to select which window is applied to the FFT:
<h4>B.4.2. FFT size</h4>
Select the size of the FFT window among these values:
- 64
- 128
- 256
- 512
- 1k = 1024 (default)
- 2k = 2048
- 4k = 4096
- 8k = 8192
- 16k = 16384
- 32k = 32768
<h4>B.4.3: FFT Overlap</h4>

View File

@ -40,7 +40,7 @@ Spectrum display with the highlight artifact on:
The adjacent channel power measurement measures the power in a channel of user-defined bandwidth and compares it to the power in the left and right adjacent channels. Channel shift and adjacent channels width and separation are also adjustable with the dialog.
![Spectrum Measurements dialog - adjacentchannel power](../../doc/img/Spectrum_Measurement_dialog_AdjChannelPower.png)
![Spectrum Measurements dialog - adjacent channel power](../../doc/img/Spectrum_Measurement_dialog_AdjChannelPower.png)
- **Center frequency offset**: channels offset from the center in Hz
- **Channel bandwidth**: bandwidth of the center channel in Hz

View File

@ -601,7 +601,7 @@ void ValueDial::keyPressEvent(QKeyEvent *value)
emit changed(m_valueNew);
m_cursor++;
if (m_text[m_cursor] == m_groupSeparator) {
if ((m_cursor >= 0) && (m_cursor < m_text.size()) && (m_text[m_cursor] == m_groupSeparator)) {
m_cursor++;
}

View File

@ -17,7 +17,7 @@ The main motivations are:
- AM demodulator
- BFM (Broadcast FM) demodulator
- Remote sink
- DSD (Digital Vouice) demodulator
- DSD (Digital Voice) demodulator
- NFM (Narrowband FM) demodulator
- SSB demodulator
- WFM (Wideband FM) demodulator