diff --git a/plugins/channeltx/CMakeLists.txt b/plugins/channeltx/CMakeLists.txt
index b7186967c..75e3cb345 100644
--- a/plugins/channeltx/CMakeLists.txt
+++ b/plugins/channeltx/CMakeLists.txt
@@ -7,13 +7,11 @@ add_subdirectory(modwfm)
add_subdirectory(udpsink)
find_package(CM256cc)
-
if(CM256CC_FOUND)
- add_subdirectory(sdrdaemonchannelsource)
+ add_subdirectory(daemonsrc)
endif(CM256CC_FOUND)
find_package(OpenCV)
-
if (OpenCV_FOUND)
add_subdirectory(modatv)
endif()
diff --git a/plugins/channeltx/daemonsrc/CMakeLists.txt b/plugins/channeltx/daemonsrc/CMakeLists.txt
new file mode 100644
index 000000000..6cb7e1acd
--- /dev/null
+++ b/plugins/channeltx/daemonsrc/CMakeLists.txt
@@ -0,0 +1,57 @@
+project(daemonsrc)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+
+set(daemonsrc_SOURCES
+ daemonsrc.cpp
+# daemonsrcthread.cpp
+ daemonsrcgui.cpp
+ daemonsrcplugin.cpp
+ daemonsrcsettings.cpp
+)
+
+set(daemonsrc_HEADERS
+ daemonsrc.h
+# daemonsrcthread.h
+ daemonsrcgui.h
+ daemonsrcplugin.h
+ daemonsrcsettings.h
+)
+
+set(daemonsrc_FORMS
+ daemonsrcgui.ui
+)
+
+include_directories(
+ .
+ ${CMAKE_CURRENT_BINARY_DIR}
+# ${CMAKE_SOURCE_DIR}/sdrdaemon
+ ${CM256CC_INCLUDE_DIR}
+ ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client
+)
+
+#include(${QT_USE_FILE})
+add_definitions(${QT_DEFINITIONS})
+add_definitions(-DQT_PLUGIN)
+add_definitions(-DQT_SHARED)
+
+qt5_wrap_ui(daemonsrc_FORMS_HEADERS ${daemonsrc_FORMS})
+
+add_library(daemonsrc SHARED
+ ${daemonsrc_SOURCES}
+ ${daemonsrc_HEADERS_MOC}
+ ${daemonsrc_FORMS_HEADERS}
+)
+
+target_link_libraries(daemonsrc
+ ${QT_LIBRARIES}
+ ${CM256CC_LIBRARIES}
+ sdrbase
+# sdrdaemon
+ sdrgui
+ swagger
+)
+
+target_link_libraries(daemonsrc Qt5::Core Qt5::Widgets Qt5::Network)
+
+install(TARGETS daemonsrc DESTINATION lib/plugins/channeltx)
diff --git a/plugins/channeltx/daemonsrc/daemonsrc.cpp b/plugins/channeltx/daemonsrc/daemonsrc.cpp
new file mode 100644
index 000000000..8f2f23b26
--- /dev/null
+++ b/plugins/channeltx/daemonsrc/daemonsrc.cpp
@@ -0,0 +1,85 @@
+///////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2018 Edouard Griffiths, F4EXB //
+// //
+// This program is free software; you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation as version 3 of the License, or //
+// //
+// This program is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License V3 for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with this program. If not, see . //
+///////////////////////////////////////////////////////////////////////////////////
+
+#include "device/devicesinkapi.h"
+#include "dsp/upchannelizer.h"
+#include "dsp/threadedbasebandsamplesource.h"
+
+#include "daemonsrc.h"
+
+const QString DaemonSrc::m_channelIdURI = "sdrangel.channeltx.daemonsrc";
+const QString DaemonSrc::m_channelId ="DaemonSrc";
+
+DaemonSrc::DaemonSrc(DeviceSinkAPI *deviceAPI) :
+ ChannelSourceAPI(m_channelIdURI),
+ m_deviceAPI(deviceAPI)
+{
+ setObjectName(m_channelId);
+
+ m_channelizer = new UpChannelizer(this);
+ m_threadedChannelizer = new ThreadedBasebandSampleSource(m_channelizer, this);
+ m_deviceAPI->addThreadedSource(m_threadedChannelizer);
+ m_deviceAPI->addChannelAPI(this);
+}
+
+DaemonSrc::~DaemonSrc()
+{
+ m_deviceAPI->removeChannelAPI(this);
+ m_deviceAPI->removeThreadedSource(m_threadedChannelizer);
+ delete m_threadedChannelizer;
+ delete m_channelizer;
+}
+
+void DaemonSrc::pull(Sample& sample)
+{
+ sample.m_real = 0.0f;
+ sample.m_imag = 0.0f;
+}
+
+void DaemonSrc::pullAudio(int nbSamples __attribute__((unused)))
+{
+}
+
+void DaemonSrc::start()
+{
+}
+
+void DaemonSrc::stop()
+{
+}
+
+bool DaemonSrc::handleMessage(const Message& cmd __attribute__((unused)))
+{
+ return false;
+}
+
+QByteArray DaemonSrc::serialize() const
+{
+ return m_settings.serialize();
+}
+
+bool DaemonSrc::deserialize(const QByteArray& data __attribute__((unused)))
+{
+ if (m_settings.deserialize(data))
+ {
+ return true;
+ }
+ else
+ {
+ m_settings.resetToDefaults();
+ return false;
+ }
+}
diff --git a/plugins/channeltx/daemonsrc/daemonsrc.h b/plugins/channeltx/daemonsrc/daemonsrc.h
new file mode 100644
index 000000000..bf4e24813
--- /dev/null
+++ b/plugins/channeltx/daemonsrc/daemonsrc.h
@@ -0,0 +1,57 @@
+///////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2018 Edouard Griffiths, F4EXB //
+// //
+// This program is free software; you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation as version 3 of the License, or //
+// //
+// This program is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License V3 for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with this program. If not, see . //
+///////////////////////////////////////////////////////////////////////////////////
+
+#include "dsp/basebandsamplesource.h"
+#include "channel/channelsourceapi.h"
+
+#include "daemonsrcsettings.h"
+
+class DeviceSinkAPI;
+class ThreadedBasebandSampleSource;
+class UpChannelizer;
+
+class DaemonSrc : public BasebandSampleSource, public ChannelSourceAPI {
+ Q_OBJECT
+
+public:
+ DaemonSrc(DeviceSinkAPI *deviceAPI);
+ ~DaemonSrc();
+
+ virtual void destroy() { delete this; }
+
+ virtual void pull(Sample& sample);
+ virtual void pullAudio(int nbSamples);
+ virtual void start();
+ virtual void stop();
+ virtual bool handleMessage(const Message& cmd);
+
+ virtual void getIdentifier(QString& id) { id = objectName(); }
+ virtual void getTitle(QString& title) { title = m_settings.m_title; }
+ virtual qint64 getCenterFrequency() const { return 0; }
+
+ virtual QByteArray serialize() const;
+ virtual bool deserialize(const QByteArray& data);
+
+ static const QString m_channelIdURI;
+ static const QString m_channelId;
+
+private:
+ DeviceSinkAPI* m_deviceAPI;
+ ThreadedBasebandSampleSource* m_threadedChannelizer;
+ UpChannelizer* m_channelizer;
+
+ DaemonSrcSettings m_settings;
+};
diff --git a/plugins/channeltx/daemonsrc/daemonsrcgui.cpp b/plugins/channeltx/daemonsrc/daemonsrcgui.cpp
new file mode 100644
index 000000000..d67542d45
--- /dev/null
+++ b/plugins/channeltx/daemonsrc/daemonsrcgui.cpp
@@ -0,0 +1,109 @@
+///////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2018 Edouard Griffiths, F4EXB //
+// //
+// This program is free software; you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation as version 3 of the License, or //
+// //
+// This program is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License V3 for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with this program. If not, see . //
+///////////////////////////////////////////////////////////////////////////////////
+
+#include "device/devicesinkapi.h"
+#include "device/deviceuiset.h"
+
+#include "ui_daemonsrcgui.h"
+#include "daemonsrcgui.h"
+
+DaemonSrcGUI* DaemonSrcGUI::create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx)
+{
+ DaemonSrcGUI* gui = new DaemonSrcGUI(pluginAPI, deviceUISet, channelTx);
+ return gui;
+}
+
+void DaemonSrcGUI::destroy()
+{
+ delete this;
+}
+
+void DaemonSrcGUI::setName(const QString& name)
+{
+ setObjectName(name);
+}
+
+QString DaemonSrcGUI::getName() const
+{
+ return objectName();
+}
+
+qint64 DaemonSrcGUI::getCenterFrequency() const {
+ return 0;
+}
+
+void DaemonSrcGUI::setCenterFrequency(qint64 centerFrequency __attribute__((unused)))
+{
+}
+
+void DaemonSrcGUI::resetToDefaults()
+{
+ m_settings.resetToDefaults();
+ displaySettings();
+ applySettings(true);
+}
+
+QByteArray DaemonSrcGUI::serialize() const
+{
+ return m_settings.serialize();
+}
+
+bool DaemonSrcGUI::deserialize(const QByteArray& data)
+{
+ if(m_settings.deserialize(data)) {
+ displaySettings();
+ applySettings(true);
+ return true;
+ } else {
+ resetToDefaults();
+ return false;
+ }
+}
+
+bool DaemonSrcGUI::handleMessage(const Message& message __attribute__((unused)))
+{
+ return false;
+}
+
+DaemonSrcGUI::DaemonSrcGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx __attribute__((unused)), QWidget* parent) :
+ RollupWidget(parent),
+ ui(new Ui::DaemonSrcGUI),
+ m_pluginAPI(pluginAPI),
+ m_deviceUISet(deviceUISet)
+{
+ ui->setupUi(this);
+ setAttribute(Qt::WA_DeleteOnClose, true);
+ connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
+}
+
+DaemonSrcGUI::~DaemonSrcGUI()
+{
+ m_deviceUISet->removeTxChannelInstance(this);
+ delete ui;
+}
+
+void DaemonSrcGUI::blockApplySettings(bool block)
+{
+ m_doApplySettings = !block;
+}
+
+void DaemonSrcGUI::applySettings(bool force __attribute((unused)))
+{
+}
+
+void DaemonSrcGUI::displaySettings()
+{
+}
diff --git a/plugins/channeltx/daemonsrc/daemonsrcgui.h b/plugins/channeltx/daemonsrc/daemonsrcgui.h
new file mode 100644
index 000000000..1f5afe88b
--- /dev/null
+++ b/plugins/channeltx/daemonsrc/daemonsrcgui.h
@@ -0,0 +1,70 @@
+///////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2018 Edouard Griffiths, F4EXB //
+// //
+// This program is free software; you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation as version 3 of the License, or //
+// //
+// This program is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License V3 for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with this program. If not, see . //
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef PLUGINS_CHANNELTX_DAEMONSRC_DAEMONSRCGUI_H_
+#define PLUGINS_CHANNELTX_DAEMONSRC_DAEMONSRCGUI_H_
+
+#include "plugin/plugininstancegui.h"
+#include "gui/rollupwidget.h"
+#include "util/messagequeue.h"
+
+#include "daemonsrcsettings.h"
+
+class PluginAPI;
+class DeviceUISet;
+class BasebandSampleSource;
+
+namespace Ui {
+ class DaemonSrcGUI;
+}
+
+class DaemonSrcGUI : public RollupWidget, public PluginInstanceGUI {
+ Q_OBJECT
+
+public:
+ static DaemonSrcGUI* create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx);
+ virtual void destroy();
+
+ void setName(const QString& name);
+ QString getName() const;
+ virtual qint64 getCenterFrequency() const;
+ virtual void setCenterFrequency(qint64 centerFrequency);
+
+ void resetToDefaults();
+ QByteArray serialize() const;
+ bool deserialize(const QByteArray& data);
+ virtual MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; }
+ virtual bool handleMessage(const Message& message);
+
+private:
+ Ui::DaemonSrcGUI* ui;
+ PluginAPI* m_pluginAPI;
+ DeviceUISet* m_deviceUISet;
+ MessageQueue m_inputMessageQueue;
+ DaemonSrcSettings m_settings;
+ bool m_doApplySettings;
+
+ explicit DaemonSrcGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx, QWidget* parent = 0);
+ virtual ~DaemonSrcGUI();
+
+ void blockApplySettings(bool block);
+ void applySettings(bool force = false);
+ void displaySettings();
+
+};
+
+
+#endif /* PLUGINS_CHANNELTX_DAEMONSRC_DAEMONSRCGUI_H_ */
diff --git a/plugins/channeltx/daemonsrc/daemonsrcgui.ui b/plugins/channeltx/daemonsrc/daemonsrcgui.ui
new file mode 100644
index 000000000..822b9bfe3
--- /dev/null
+++ b/plugins/channeltx/daemonsrc/daemonsrcgui.ui
@@ -0,0 +1,179 @@
+
+
+ DaemonSrcGUI
+
+
+
+ 0
+ 0
+ 320
+ 90
+
+
+
+
+ 0
+ 0
+
+
+
+
+ 320
+ 90
+
+
+
+
+ Liberation Sans
+ 9
+
+
+
+ LoRa Demodulator
+
+
+
+
+ 10
+ 10
+ 301
+ 61
+
+
+
+ Settings
+
+
+
+ 3
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+
+ 2
+
+ -
+
+
-
+
+
+
+ 30
+ 0
+
+
+
+ Data
+
+
+
+ -
+
+
+
+ 120
+ 0
+
+
+
+ Local data listener address
+
+
+ 000.000.000.000
+
+
+ 0...
+
+
+
+ -
+
+
+ :
+
+
+
+ -
+
+
+
+ 50
+ 16777215
+
+
+
+ Local data listener port
+
+
+ 00000
+
+
+ 0
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+
+ 30
+ 16777215
+
+
+
+ Set local data listener address and port
+
+
+ Set
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+
+
+
+
+
+ RollupWidget
+ QWidget
+
+ 1
+
+
+
+
+
diff --git a/plugins/channeltx/daemonsrc/daemonsrcplugin.cpp b/plugins/channeltx/daemonsrc/daemonsrcplugin.cpp
new file mode 100644
index 000000000..83d2f9ab8
--- /dev/null
+++ b/plugins/channeltx/daemonsrc/daemonsrcplugin.cpp
@@ -0,0 +1,79 @@
+///////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2018 Edouard Griffiths, F4EXB //
+// //
+// This program is free software; you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation as version 3 of the License, or //
+// //
+// This program is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License V3 for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with this program. If not, see . //
+///////////////////////////////////////////////////////////////////////////////////
+
+#include
+#include "plugin/pluginapi.h"
+
+#ifndef SERVER_MODE
+#include "daemonsrcgui.h"
+#endif
+#include "daemonsrc.h"
+#include "daemonsrcplugin.h"
+
+const PluginDescriptor DaemonSrcPlugin::m_pluginDescriptor = {
+ QString("Daemon channel source"),
+ QString("4.1.0"),
+ QString("(c) Edouard Griffiths, F4EXB"),
+ QString("https://github.com/f4exb/sdrangel"),
+ true,
+ QString("https://github.com/f4exb/sdrangel")
+};
+
+DaemonSrcPlugin::DaemonSrcPlugin(QObject* parent) :
+ QObject(parent),
+ m_pluginAPI(0)
+{
+}
+
+const PluginDescriptor& DaemonSrcPlugin::getPluginDescriptor() const
+{
+ return m_pluginDescriptor;
+}
+
+void DaemonSrcPlugin::initPlugin(PluginAPI* pluginAPI)
+{
+ m_pluginAPI = pluginAPI;
+
+ // register source
+ m_pluginAPI->registerTxChannel(DaemonSrc::m_channelIdURI, DaemonSrc::m_channelId, this);
+}
+
+#ifdef SERVER_MODE
+PluginInstanceGUI* DaemonSrcPlugin::createTxChannelGUI(
+ DeviceUISet *deviceUISet __attribute__((unused)),
+ BasebandSampleSource *txChannel __attribute__((unused)))
+{
+ return 0;
+}
+#else
+PluginInstanceGUI* DaemonSrcPlugin::createTxChannelGUI(DeviceUISet *deviceUISet, BasebandSampleSource *txChannel)
+{
+ return DaemonSrcGUI::create(m_pluginAPI, deviceUISet, txChannel);
+}
+#endif
+
+BasebandSampleSource* DaemonSrcPlugin::createTxChannelBS(DeviceSinkAPI *deviceAPI)
+{
+ return new DaemonSrc(deviceAPI);
+}
+
+ChannelSourceAPI* DaemonSrcPlugin::createTxChannelCS(DeviceSinkAPI *deviceAPI)
+{
+ return new DaemonSrc(deviceAPI);
+}
+
+
+
diff --git a/plugins/channeltx/daemonsrc/daemonsrcplugin.h b/plugins/channeltx/daemonsrc/daemonsrcplugin.h
new file mode 100644
index 000000000..9e353e38e
--- /dev/null
+++ b/plugins/channeltx/daemonsrc/daemonsrcplugin.h
@@ -0,0 +1,47 @@
+///////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2018 Edouard Griffiths, F4EXB //
+// //
+// This program is free software; you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation as version 3 of the License, or //
+// //
+// This program is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License V3 for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with this program. If not, see . //
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef PLUGINS_CHANNELTX_DAEMONSRC_DAEMONSRCPLUGIN_H_
+#define PLUGINS_CHANNELTX_DAEMONSRC_DAEMONSRCPLUGIN_H_
+
+#include
+#include "plugin/plugininterface.h"
+
+class DeviceUISet;
+class BasebandSampleSource;
+
+class DaemonSrcPlugin : public QObject, PluginInterface {
+ Q_OBJECT
+ Q_INTERFACES(PluginInterface)
+ Q_PLUGIN_METADATA(IID "sdrangel.channeltx.daemonsrc")
+
+public:
+ explicit DaemonSrcPlugin(QObject* parent = 0);
+
+ const PluginDescriptor& getPluginDescriptor() const;
+ void initPlugin(PluginAPI* pluginAPI);
+
+ virtual PluginInstanceGUI* createTxChannelGUI(DeviceUISet *deviceUISet, BasebandSampleSource *txChannel);
+ virtual BasebandSampleSource* createTxChannelBS(DeviceSinkAPI *deviceAPI);
+ virtual ChannelSourceAPI* createTxChannelCS(DeviceSinkAPI *deviceAPI);
+
+private:
+ static const PluginDescriptor m_pluginDescriptor;
+
+ PluginAPI* m_pluginAPI;
+};
+
+#endif /* PLUGINS_CHANNELTX_DAEMONSRC_DAEMONSRCPLUGIN_H_ */
diff --git a/plugins/channeltx/daemonsrc/daemonsrcsettings.cpp b/plugins/channeltx/daemonsrc/daemonsrcsettings.cpp
new file mode 100644
index 000000000..f96414ff9
--- /dev/null
+++ b/plugins/channeltx/daemonsrc/daemonsrcsettings.cpp
@@ -0,0 +1,84 @@
+///////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2018 Edouard Griffiths, F4EXB //
+// //
+// This program is free software; you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation as version 3 of the License, or //
+// //
+// This program is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License V3 for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with this program. If not, see . //
+///////////////////////////////////////////////////////////////////////////////////
+
+#include "daemonsrcsettings.h"
+
+#include
+
+#include "util/simpleserializer.h"
+#include "settings/serializable.h"
+#include "daemonsrcsettings.h"
+
+DaemonSrcSettings::DaemonSrcSettings()
+{
+ resetToDefaults();
+}
+
+void DaemonSrcSettings::resetToDefaults()
+{
+ m_dataAddress = "127.0.0.1";
+ m_dataPort = 9090;
+ m_rgbColor = QColor(0, 255, 255).rgb();
+ m_title = "SDRDaemon sink";
+
+}
+
+QByteArray DaemonSrcSettings::serialize() const
+{
+ SimpleSerializer s(1);
+ s.writeString(1, m_dataAddress);
+ s.writeU32(2, m_dataPort);
+ s.writeU32(3, m_rgbColor);
+ s.writeString(4, m_title);
+
+ return s.final();
+}
+
+bool DaemonSrcSettings::deserialize(const QByteArray& data)
+{
+ SimpleDeserializer d(data);
+
+ if(!d.isValid())
+ {
+ resetToDefaults();
+ return false;
+ }
+
+ if(d.getVersion() == 1)
+ {
+ uint32_t tmp;
+ QString strtmp;
+
+ d.readString(1, &m_dataAddress, "127.0.0.1");
+ d.readU32(2, &tmp, 0);
+
+ if ((tmp > 1023) && (tmp < 65535)) {
+ m_dataPort = tmp;
+ } else {
+ m_dataPort = 9090;
+ }
+
+ d.readU32(3, &m_rgbColor, QColor(0, 255, 255).rgb());
+ d.readString(4, &m_title, "AM Modulator");
+
+ return true;
+ }
+ else
+ {
+ resetToDefaults();
+ return false;
+ }
+}
diff --git a/plugins/channeltx/daemonsrc/daemonsrcsettings.h b/plugins/channeltx/daemonsrc/daemonsrcsettings.h
new file mode 100644
index 000000000..a1fd83594
--- /dev/null
+++ b/plugins/channeltx/daemonsrc/daemonsrcsettings.h
@@ -0,0 +1,41 @@
+///////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2018 Edouard Griffiths, F4EXB //
+// //
+// This program is free software; you can redistribute it and/or modify //
+// it under the terms of the GNU General Public License as published by //
+// the Free Software Foundation as version 3 of the License, or //
+// //
+// This program is distributed in the hope that it will be useful, //
+// but WITHOUT ANY WARRANTY; without even the implied warranty of //
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
+// GNU General Public License V3 for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with this program. If not, see . //
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef PLUGINS_CHANNELTX_DAEMONSRC_DAEMONSRCSETTINGS_H_
+#define PLUGINS_CHANNELTX_DAEMONSRC_DAEMONSRCSETTINGS_H_
+
+#include
+#include
+
+class Serializable;
+
+struct DaemonSrcSettings
+{
+ QString m_dataAddress; //!< Listening (local) data address
+ uint16_t m_dataPort; //!< Listening data port
+ quint32 m_rgbColor;
+ QString m_title;
+
+ Serializable *m_channelMarker;
+
+ DaemonSrcSettings();
+ void resetToDefaults();
+ void setChannelMarker(Serializable *channelMarker) { m_channelMarker = channelMarker; }
+ QByteArray serialize() const;
+ bool deserialize(const QByteArray& data);
+};
+
+#endif /* PLUGINS_CHANNELTX_DAEMONSRC_DAEMONSRCSETTINGS_H_ */