Daemon channel source new plugin (2)

This commit is contained in:
f4exb 2018-09-01 00:18:35 +02:00
parent 5151f38977
commit 4f4d417d5a
6 changed files with 145 additions and 7 deletions

View File

@ -14,12 +14,16 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
///////////////////////////////////////////////////////////////////////////////////
#include <QDebug>
#include "device/devicesinkapi.h"
#include "dsp/upchannelizer.h"
#include "dsp/threadedbasebandsamplesource.h"
#include "daemonsrc.h"
MESSAGE_CLASS_DEFINITION(DaemonSrc::MsgSampleRateNotification, Message)
const QString DaemonSrc::m_channelIdURI = "sdrangel.channeltx.daemonsrc";
const QString DaemonSrc::m_channelId ="DaemonSrc";
@ -61,8 +65,24 @@ void DaemonSrc::stop()
{
}
bool DaemonSrc::handleMessage(const Message& cmd __attribute__((unused)))
bool DaemonSrc::handleMessage(const Message& cmd)
{
if (UpChannelizer::MsgChannelizerNotification::match(cmd))
{
UpChannelizer::MsgChannelizerNotification& notif = (UpChannelizer::MsgChannelizerNotification&) cmd;
qDebug() << "DaemonSrc::handleMessage: MsgChannelizerNotification:"
<< " basebandSampleRate: " << notif.getBasebandSampleRate()
<< " outputSampleRate: " << notif.getSampleRate()
<< " inputFrequencyOffset: " << notif.getFrequencyOffset();
if (m_guiMessageQueue)
{
MsgSampleRateNotification *msg = MsgSampleRateNotification::create(notif.getBasebandSampleRate());
m_guiMessageQueue->push(msg);
}
return true;
}
return false;
}

View File

@ -16,6 +16,7 @@
#include "dsp/basebandsamplesource.h"
#include "channel/channelsourceapi.h"
#include "util/message.h"
#include "daemonsrcsettings.h"
@ -27,6 +28,26 @@ class DaemonSrc : public BasebandSampleSource, public ChannelSourceAPI {
Q_OBJECT
public:
class MsgSampleRateNotification : public Message {
MESSAGE_CLASS_DECLARATION
public:
static MsgSampleRateNotification* create(int sampleRate) {
return new MsgSampleRateNotification(sampleRate);
}
int getSampleRate() const { return m_sampleRate; }
private:
MsgSampleRateNotification(int sampleRate) :
Message(),
m_sampleRate(sampleRate)
{ }
int m_sampleRate;
};
DaemonSrc(DeviceSinkAPI *deviceAPI);
~DaemonSrc();

View File

@ -16,7 +16,10 @@
#include "device/devicesinkapi.h"
#include "device/deviceuiset.h"
#include "gui/basicchannelsettingsdialog.h"
#include "mainwindow.h"
#include "daemonsrc.h"
#include "ui_daemonsrcgui.h"
#include "daemonsrcgui.h"
@ -73,8 +76,14 @@ bool DaemonSrcGUI::deserialize(const QByteArray& data)
}
}
bool DaemonSrcGUI::handleMessage(const Message& message __attribute__((unused)))
bool DaemonSrcGUI::handleMessage(const Message& message)
{
if (DaemonSrc::MsgSampleRateNotification::match(message))
{
DaemonSrc::MsgSampleRateNotification& notif = (DaemonSrc::MsgSampleRateNotification&) message;
m_channelMarker.setBandwidth(notif.getSampleRate());
}
return false;
}
@ -87,6 +96,27 @@ DaemonSrcGUI::DaemonSrcGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb
ui->setupUi(this);
setAttribute(Qt::WA_DeleteOnClose, true);
connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
m_daemonSrc = (DaemonSrc*) channelTx;
m_daemonSrc->setMessageQueueToGUI(getInputMessageQueue());
m_channelMarker.blockSignals(true);
m_channelMarker.setColor(m_settings.m_rgbColor);
m_channelMarker.setCenterFrequency(0);
m_channelMarker.setTitle("Daemon source");
m_channelMarker.blockSignals(false);
m_channelMarker.setVisible(true); // activate signal on the last setting only
m_settings.setChannelMarker(&m_channelMarker);
m_deviceUISet->registerTxChannelInstance(DaemonSrc::m_channelIdURI, this);
m_deviceUISet->addChannelMarker(&m_channelMarker);
m_deviceUISet->addRollupWidget(this);
connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages()));
displaySettings();
applySettings(true);
}
DaemonSrcGUI::~DaemonSrcGUI()
@ -106,4 +136,60 @@ void DaemonSrcGUI::applySettings(bool force __attribute((unused)))
void DaemonSrcGUI::displaySettings()
{
m_channelMarker.blockSignals(true);
m_channelMarker.setCenterFrequency(0);
m_channelMarker.setTitle(m_settings.m_title);
m_channelMarker.setBandwidth(5000); // TODO
m_channelMarker.blockSignals(false);
m_channelMarker.setColor(m_settings.m_rgbColor); // activate signal on the last setting only
setTitleColor(m_settings.m_rgbColor);
setWindowTitle(m_channelMarker.getTitle());
blockApplySettings(true);
ui->dataAddress->setText(m_settings.m_dataAddress);
ui->dataPort->setText(tr("%1").arg(m_settings.m_dataPort));
blockApplySettings(false);
}
void DaemonSrcGUI::leaveEvent(QEvent*)
{
m_channelMarker.setHighlighted(false);
}
void DaemonSrcGUI::enterEvent(QEvent*)
{
m_channelMarker.setHighlighted(true);
}
void DaemonSrcGUI::handleSourceMessages()
{
Message* message;
while ((message = getInputMessageQueue()->pop()) != 0)
{
if (handleMessage(*message))
{
delete message;
}
}
}
void DaemonSrcGUI::onWidgetRolled(QWidget* widget __attribute__((unused)), bool rollDown __attribute__((unused)))
{
}
void DaemonSrcGUI::onMenuDialogCalled(const QPoint &p)
{
BasicChannelSettingsDialog dialog(&m_channelMarker, this);
dialog.move(p);
dialog.exec();
m_settings.m_rgbColor = m_channelMarker.getColor().rgb();
m_settings.m_title = m_channelMarker.getTitle();
setWindowTitle(m_settings.m_title);
setTitleColor(m_settings.m_rgbColor);
applySettings();
}

View File

@ -20,12 +20,14 @@
#include "plugin/plugininstancegui.h"
#include "gui/rollupwidget.h"
#include "util/messagequeue.h"
#include "dsp/channelmarker.h"
#include "daemonsrcsettings.h"
class PluginAPI;
class DeviceUISet;
class BasebandSampleSource;
class DaemonSrc;
namespace Ui {
class DaemonSrcGUI;
@ -53,10 +55,13 @@ private:
Ui::DaemonSrcGUI* ui;
PluginAPI* m_pluginAPI;
DeviceUISet* m_deviceUISet;
MessageQueue m_inputMessageQueue;
ChannelMarker m_channelMarker;
DaemonSrcSettings m_settings;
bool m_doApplySettings;
DaemonSrc* m_daemonSrc;
MessageQueue m_inputMessageQueue;
explicit DaemonSrcGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx, QWidget* parent = 0);
virtual ~DaemonSrcGUI();
@ -64,6 +69,13 @@ private:
void applySettings(bool force = false);
void displaySettings();
void leaveEvent(QEvent*);
void enterEvent(QEvent*);
private slots:
void handleSourceMessages();
void onWidgetRolled(QWidget* widget, bool rollDown);
void onMenuDialogCalled(const QPoint& p);
};

View File

@ -29,7 +29,7 @@
</font>
</property>
<property name="windowTitle">
<string>LoRa Demodulator</string>
<string>Daemon source</string>
</property>
<widget class="QWidget" name="settingsContainer" native="true">
<property name="geometry">

View File

@ -31,9 +31,8 @@ void DaemonSrcSettings::resetToDefaults()
{
m_dataAddress = "127.0.0.1";
m_dataPort = 9090;
m_rgbColor = QColor(0, 255, 255).rgb();
m_title = "SDRDaemon sink";
m_rgbColor = QColor(140, 4, 4).rgb();
m_title = "Daemon source";
}
QByteArray DaemonSrcSettings::serialize() const