mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-09-27 15:26:33 -04:00
Rename DaemonSrc to DaemonSource
This commit is contained in:
parent
9cfaf47a00
commit
3a32cf156c
@ -33,15 +33,15 @@
|
|||||||
#include "daemonsrcthread.h"
|
#include "daemonsrcthread.h"
|
||||||
#include "daemonsrc.h"
|
#include "daemonsrc.h"
|
||||||
|
|
||||||
MESSAGE_CLASS_DEFINITION(DaemonSrc::MsgSampleRateNotification, Message)
|
MESSAGE_CLASS_DEFINITION(DaemonSource::MsgSampleRateNotification, Message)
|
||||||
MESSAGE_CLASS_DEFINITION(DaemonSrc::MsgConfigureDaemonSrc, Message)
|
MESSAGE_CLASS_DEFINITION(DaemonSource::MsgConfigureDaemonSource, Message)
|
||||||
MESSAGE_CLASS_DEFINITION(DaemonSrc::MsgQueryStreamData, Message)
|
MESSAGE_CLASS_DEFINITION(DaemonSource::MsgQueryStreamData, Message)
|
||||||
MESSAGE_CLASS_DEFINITION(DaemonSrc::MsgReportStreamData, Message)
|
MESSAGE_CLASS_DEFINITION(DaemonSource::MsgReportStreamData, Message)
|
||||||
|
|
||||||
const QString DaemonSrc::m_channelIdURI = "sdrangel.channeltx.daemonsrc";
|
const QString DaemonSource::m_channelIdURI = "sdrangel.channeltx.daemonsrc";
|
||||||
const QString DaemonSrc::m_channelId ="DaemonSrc";
|
const QString DaemonSource::m_channelId ="DaemonSource";
|
||||||
|
|
||||||
DaemonSrc::DaemonSrc(DeviceSinkAPI *deviceAPI) :
|
DaemonSource::DaemonSource(DeviceSinkAPI *deviceAPI) :
|
||||||
ChannelSourceAPI(m_channelIdURI),
|
ChannelSourceAPI(m_channelIdURI),
|
||||||
m_deviceAPI(deviceAPI),
|
m_deviceAPI(deviceAPI),
|
||||||
m_sourceThread(0),
|
m_sourceThread(0),
|
||||||
@ -62,7 +62,7 @@ DaemonSrc::DaemonSrc(DeviceSinkAPI *deviceAPI) :
|
|||||||
m_deviceAPI->addChannelAPI(this);
|
m_deviceAPI->addChannelAPI(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
DaemonSrc::~DaemonSrc()
|
DaemonSource::~DaemonSource()
|
||||||
{
|
{
|
||||||
m_deviceAPI->removeChannelAPI(this);
|
m_deviceAPI->removeChannelAPI(this);
|
||||||
m_deviceAPI->removeThreadedSource(m_threadedChannelizer);
|
m_deviceAPI->removeThreadedSource(m_threadedChannelizer);
|
||||||
@ -70,32 +70,32 @@ DaemonSrc::~DaemonSrc()
|
|||||||
delete m_channelizer;
|
delete m_channelizer;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrc::pull(Sample& sample)
|
void DaemonSource::pull(Sample& sample)
|
||||||
{
|
{
|
||||||
m_dataReadQueue.readSample(sample);
|
m_dataReadQueue.readSample(sample);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrc::pullAudio(int nbSamples __attribute__((unused)))
|
void DaemonSource::pullAudio(int nbSamples __attribute__((unused)))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrc::start()
|
void DaemonSource::start()
|
||||||
{
|
{
|
||||||
qDebug("DaemonSrc::start");
|
qDebug("DaemonSource::start");
|
||||||
|
|
||||||
if (m_running) {
|
if (m_running) {
|
||||||
stop();
|
stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
m_sourceThread = new DaemonSrcThread(&m_dataQueue);
|
m_sourceThread = new DaemonSourceThread(&m_dataQueue);
|
||||||
m_sourceThread->startStop(true);
|
m_sourceThread->startStop(true);
|
||||||
m_sourceThread->dataBind(m_settings.m_dataAddress, m_settings.m_dataPort);
|
m_sourceThread->dataBind(m_settings.m_dataAddress, m_settings.m_dataPort);
|
||||||
m_running = true;
|
m_running = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrc::stop()
|
void DaemonSource::stop()
|
||||||
{
|
{
|
||||||
qDebug("DaemonSrc::stop");
|
qDebug("DaemonSource::stop");
|
||||||
|
|
||||||
if (m_sourceThread != 0)
|
if (m_sourceThread != 0)
|
||||||
{
|
{
|
||||||
@ -107,22 +107,22 @@ void DaemonSrc::stop()
|
|||||||
m_running = false;
|
m_running = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrc::setDataLink(const QString& dataAddress, uint16_t dataPort)
|
void DaemonSource::setDataLink(const QString& dataAddress, uint16_t dataPort)
|
||||||
{
|
{
|
||||||
DaemonSrcSettings settings = m_settings;
|
DaemonSourceSettings settings = m_settings;
|
||||||
settings.m_dataAddress = dataAddress;
|
settings.m_dataAddress = dataAddress;
|
||||||
settings.m_dataPort = dataPort;
|
settings.m_dataPort = dataPort;
|
||||||
|
|
||||||
MsgConfigureDaemonSrc *msg = MsgConfigureDaemonSrc::create(settings, false);
|
MsgConfigureDaemonSource *msg = MsgConfigureDaemonSource::create(settings, false);
|
||||||
m_inputMessageQueue.push(msg);
|
m_inputMessageQueue.push(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DaemonSrc::handleMessage(const Message& cmd)
|
bool DaemonSource::handleMessage(const Message& cmd)
|
||||||
{
|
{
|
||||||
if (UpChannelizer::MsgChannelizerNotification::match(cmd))
|
if (UpChannelizer::MsgChannelizerNotification::match(cmd))
|
||||||
{
|
{
|
||||||
UpChannelizer::MsgChannelizerNotification& notif = (UpChannelizer::MsgChannelizerNotification&) cmd;
|
UpChannelizer::MsgChannelizerNotification& notif = (UpChannelizer::MsgChannelizerNotification&) cmd;
|
||||||
qDebug() << "DaemonSrc::handleMessage: MsgChannelizerNotification:"
|
qDebug() << "DaemonSource::handleMessage: MsgChannelizerNotification:"
|
||||||
<< " basebandSampleRate: " << notif.getBasebandSampleRate()
|
<< " basebandSampleRate: " << notif.getBasebandSampleRate()
|
||||||
<< " outputSampleRate: " << notif.getSampleRate()
|
<< " outputSampleRate: " << notif.getSampleRate()
|
||||||
<< " inputFrequencyOffset: " << notif.getFrequencyOffset();
|
<< " inputFrequencyOffset: " << notif.getFrequencyOffset();
|
||||||
@ -135,10 +135,10 @@ bool DaemonSrc::handleMessage(const Message& cmd)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (MsgConfigureDaemonSrc::match(cmd))
|
else if (MsgConfigureDaemonSource::match(cmd))
|
||||||
{
|
{
|
||||||
MsgConfigureDaemonSrc& cfg = (MsgConfigureDaemonSrc&) cmd;
|
MsgConfigureDaemonSource& cfg = (MsgConfigureDaemonSource&) cmd;
|
||||||
qDebug() << "MsgConfigureDaemonSrc::handleMessage: MsgConfigureDaemonSrc";
|
qDebug() << "MsgConfigureDaemonSource::handleMessage: MsgConfigureDaemonSource";
|
||||||
applySettings(cfg.getSettings(), cfg.getForce());
|
applySettings(cfg.getSettings(), cfg.getForce());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -170,31 +170,31 @@ bool DaemonSrc::handleMessage(const Message& cmd)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray DaemonSrc::serialize() const
|
QByteArray DaemonSource::serialize() const
|
||||||
{
|
{
|
||||||
return m_settings.serialize();
|
return m_settings.serialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DaemonSrc::deserialize(const QByteArray& data __attribute__((unused)))
|
bool DaemonSource::deserialize(const QByteArray& data __attribute__((unused)))
|
||||||
{
|
{
|
||||||
if (m_settings.deserialize(data))
|
if (m_settings.deserialize(data))
|
||||||
{
|
{
|
||||||
MsgConfigureDaemonSrc *msg = MsgConfigureDaemonSrc::create(m_settings, true);
|
MsgConfigureDaemonSource *msg = MsgConfigureDaemonSource::create(m_settings, true);
|
||||||
m_inputMessageQueue.push(msg);
|
m_inputMessageQueue.push(msg);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_settings.resetToDefaults();
|
m_settings.resetToDefaults();
|
||||||
MsgConfigureDaemonSrc *msg = MsgConfigureDaemonSrc::create(m_settings, true);
|
MsgConfigureDaemonSource *msg = MsgConfigureDaemonSource::create(m_settings, true);
|
||||||
m_inputMessageQueue.push(msg);
|
m_inputMessageQueue.push(msg);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrc::applySettings(const DaemonSrcSettings& settings, bool force)
|
void DaemonSource::applySettings(const DaemonSourceSettings& settings, bool force)
|
||||||
{
|
{
|
||||||
qDebug() << "DaemonSrc::applySettings:"
|
qDebug() << "DaemonSource::applySettings:"
|
||||||
<< " m_dataAddress: " << settings.m_dataAddress
|
<< " m_dataAddress: " << settings.m_dataAddress
|
||||||
<< " m_dataPort: " << settings.m_dataPort
|
<< " m_dataPort: " << settings.m_dataPort
|
||||||
<< " force: " << force;
|
<< " force: " << force;
|
||||||
@ -216,11 +216,11 @@ void DaemonSrc::applySettings(const DaemonSrcSettings& settings, bool force)
|
|||||||
m_settings = settings;
|
m_settings = settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrc::handleDataBlock(SDRDaemonDataBlock* dataBlock __attribute__((unused)))
|
void DaemonSource::handleDataBlock(SDRDaemonDataBlock* dataBlock __attribute__((unused)))
|
||||||
{
|
{
|
||||||
if (dataBlock->m_rxControlBlock.m_blockCount < SDRDaemonNbOrginalBlocks)
|
if (dataBlock->m_rxControlBlock.m_blockCount < SDRDaemonNbOrginalBlocks)
|
||||||
{
|
{
|
||||||
qWarning("DaemonSrc::handleDataBlock: incomplete data block: not processing");
|
qWarning("DaemonSource::handleDataBlock: incomplete data block: not processing");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -242,12 +242,12 @@ void DaemonSrc::handleDataBlock(SDRDaemonDataBlock* dataBlock __attribute__((unu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//qDebug("DaemonSrc::handleDataBlock: frame: %u blocks: %d", dataBlock.m_rxControlBlock.m_frameIndex, blockCount);
|
//qDebug("DaemonSource::handleDataBlock: frame: %u blocks: %d", dataBlock.m_rxControlBlock.m_frameIndex, blockCount);
|
||||||
|
|
||||||
// Need to use the CM256 recovery
|
// Need to use the CM256 recovery
|
||||||
if (m_cm256p &&(dataBlock->m_rxControlBlock.m_originalCount < SDRDaemonNbOrginalBlocks))
|
if (m_cm256p &&(dataBlock->m_rxControlBlock.m_originalCount < SDRDaemonNbOrginalBlocks))
|
||||||
{
|
{
|
||||||
qDebug("DaemonSrc::handleDataBlock: %d recovery blocks", dataBlock->m_rxControlBlock.m_recoveryCount);
|
qDebug("DaemonSource::handleDataBlock: %d recovery blocks", dataBlock->m_rxControlBlock.m_recoveryCount);
|
||||||
CM256::cm256_encoder_params paramsCM256;
|
CM256::cm256_encoder_params paramsCM256;
|
||||||
paramsCM256.BlockBytes = sizeof(SDRDaemonProtectedBlock); // never changes
|
paramsCM256.BlockBytes = sizeof(SDRDaemonProtectedBlock); // never changes
|
||||||
paramsCM256.OriginalCount = SDRDaemonNbOrginalBlocks; // never changes
|
paramsCM256.OriginalCount = SDRDaemonNbOrginalBlocks; // never changes
|
||||||
@ -267,7 +267,7 @@ void DaemonSrc::handleDataBlock(SDRDaemonDataBlock* dataBlock __attribute__((unu
|
|||||||
|
|
||||||
if (m_cm256.cm256_decode(paramsCM256, m_cm256DescriptorBlocks)) // CM256 decode
|
if (m_cm256.cm256_decode(paramsCM256, m_cm256DescriptorBlocks)) // CM256 decode
|
||||||
{
|
{
|
||||||
qWarning() << "DaemonSrc::handleDataBlock: decode CM256 error:"
|
qWarning() << "DaemonSource::handleDataBlock: decode CM256 error:"
|
||||||
<< " m_originalCount: " << dataBlock->m_rxControlBlock.m_originalCount
|
<< " m_originalCount: " << dataBlock->m_rxControlBlock.m_originalCount
|
||||||
<< " m_recoveryCount: " << dataBlock->m_rxControlBlock.m_recoveryCount;
|
<< " m_recoveryCount: " << dataBlock->m_rxControlBlock.m_recoveryCount;
|
||||||
}
|
}
|
||||||
@ -298,7 +298,7 @@ void DaemonSrc::handleDataBlock(SDRDaemonDataBlock* dataBlock __attribute__((unu
|
|||||||
{
|
{
|
||||||
if (!(m_currentMeta == *metaData))
|
if (!(m_currentMeta == *metaData))
|
||||||
{
|
{
|
||||||
printMeta("DaemonSrc::handleDataBlock", metaData);
|
printMeta("DaemonSource::handleDataBlock", metaData);
|
||||||
|
|
||||||
if (m_currentMeta.m_sampleRate != metaData->m_sampleRate)
|
if (m_currentMeta.m_sampleRate != metaData->m_sampleRate)
|
||||||
{
|
{
|
||||||
@ -311,7 +311,7 @@ void DaemonSrc::handleDataBlock(SDRDaemonDataBlock* dataBlock __attribute__((unu
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qWarning() << "DaemonSrc::handleDataBlock: recovered meta: invalid CRC32";
|
qWarning() << "DaemonSource::handleDataBlock: recovered meta: invalid CRC32";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -319,7 +319,7 @@ void DaemonSrc::handleDataBlock(SDRDaemonDataBlock* dataBlock __attribute__((unu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrc::handleData()
|
void DaemonSource::handleData()
|
||||||
{
|
{
|
||||||
SDRDaemonDataBlock* dataBlock;
|
SDRDaemonDataBlock* dataBlock;
|
||||||
|
|
||||||
@ -328,7 +328,7 @@ void DaemonSrc::handleData()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrc::printMeta(const QString& header, SDRDaemonMetaDataFEC *metaData)
|
void DaemonSource::printMeta(const QString& header, SDRDaemonMetaDataFEC *metaData)
|
||||||
{
|
{
|
||||||
qDebug().noquote() << header << ": "
|
qDebug().noquote() << header << ": "
|
||||||
<< "|" << metaData->m_centerFrequency
|
<< "|" << metaData->m_centerFrequency
|
||||||
@ -342,16 +342,16 @@ void DaemonSrc::printMeta(const QString& header, SDRDaemonMetaDataFEC *metaData)
|
|||||||
<< "|";
|
<< "|";
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t DaemonSrc::calculateDataReadQueueSize(int sampleRate)
|
uint32_t DaemonSource::calculateDataReadQueueSize(int sampleRate)
|
||||||
{
|
{
|
||||||
// scale for 20 blocks at 48 kS/s. Take next even number.
|
// scale for 20 blocks at 48 kS/s. Take next even number.
|
||||||
uint32_t maxSize = sampleRate / 2400;
|
uint32_t maxSize = sampleRate / 2400;
|
||||||
maxSize = (maxSize % 2 == 0) ? maxSize : maxSize + 1;
|
maxSize = (maxSize % 2 == 0) ? maxSize : maxSize + 1;
|
||||||
qDebug("DaemonSrc::calculateDataReadQueueSize: set max queue size to %u blocks", maxSize);
|
qDebug("DaemonSource::calculateDataReadQueueSize: set max queue size to %u blocks", maxSize);
|
||||||
return maxSize;
|
return maxSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
int DaemonSrc::webapiSettingsGet(
|
int DaemonSource::webapiSettingsGet(
|
||||||
SWGSDRangel::SWGChannelSettings& response,
|
SWGSDRangel::SWGChannelSettings& response,
|
||||||
QString& errorMessage __attribute__((unused)))
|
QString& errorMessage __attribute__((unused)))
|
||||||
{
|
{
|
||||||
@ -361,13 +361,13 @@ int DaemonSrc::webapiSettingsGet(
|
|||||||
return 200;
|
return 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
int DaemonSrc::webapiSettingsPutPatch(
|
int DaemonSource::webapiSettingsPutPatch(
|
||||||
bool force,
|
bool force,
|
||||||
const QStringList& channelSettingsKeys,
|
const QStringList& channelSettingsKeys,
|
||||||
SWGSDRangel::SWGChannelSettings& response,
|
SWGSDRangel::SWGChannelSettings& response,
|
||||||
QString& errorMessage __attribute__((unused)))
|
QString& errorMessage __attribute__((unused)))
|
||||||
{
|
{
|
||||||
DaemonSrcSettings settings = m_settings;
|
DaemonSourceSettings settings = m_settings;
|
||||||
|
|
||||||
if (channelSettingsKeys.contains("dataAddress")) {
|
if (channelSettingsKeys.contains("dataAddress")) {
|
||||||
settings.m_dataAddress = *response.getDaemonSourceSettings()->getDataAddress();
|
settings.m_dataAddress = *response.getDaemonSourceSettings()->getDataAddress();
|
||||||
@ -389,13 +389,13 @@ int DaemonSrc::webapiSettingsPutPatch(
|
|||||||
settings.m_title = *response.getDaemonSourceSettings()->getTitle();
|
settings.m_title = *response.getDaemonSourceSettings()->getTitle();
|
||||||
}
|
}
|
||||||
|
|
||||||
MsgConfigureDaemonSrc *msg = MsgConfigureDaemonSrc::create(settings, force);
|
MsgConfigureDaemonSource *msg = MsgConfigureDaemonSource::create(settings, force);
|
||||||
m_inputMessageQueue.push(msg);
|
m_inputMessageQueue.push(msg);
|
||||||
|
|
||||||
qDebug("DaemonSrc::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue);
|
qDebug("DaemonSource::webapiSettingsPutPatch: forward to GUI: %p", m_guiMessageQueue);
|
||||||
if (m_guiMessageQueue) // forward to GUI if any
|
if (m_guiMessageQueue) // forward to GUI if any
|
||||||
{
|
{
|
||||||
MsgConfigureDaemonSrc *msgToGUI = MsgConfigureDaemonSrc::create(settings, force);
|
MsgConfigureDaemonSource *msgToGUI = MsgConfigureDaemonSource::create(settings, force);
|
||||||
m_guiMessageQueue->push(msgToGUI);
|
m_guiMessageQueue->push(msgToGUI);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -404,7 +404,7 @@ int DaemonSrc::webapiSettingsPutPatch(
|
|||||||
return 200;
|
return 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
int DaemonSrc::webapiReportGet(
|
int DaemonSource::webapiReportGet(
|
||||||
SWGSDRangel::SWGChannelReport& response,
|
SWGSDRangel::SWGChannelReport& response,
|
||||||
QString& errorMessage __attribute__((unused)))
|
QString& errorMessage __attribute__((unused)))
|
||||||
{
|
{
|
||||||
@ -414,7 +414,7 @@ int DaemonSrc::webapiReportGet(
|
|||||||
return 200;
|
return 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrc::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const DaemonSrcSettings& settings)
|
void DaemonSource::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const DaemonSourceSettings& settings)
|
||||||
{
|
{
|
||||||
if (response.getDaemonSourceSettings()->getDataAddress()) {
|
if (response.getDaemonSourceSettings()->getDataAddress()) {
|
||||||
*response.getDaemonSourceSettings()->getDataAddress() = settings.m_dataAddress;
|
*response.getDaemonSourceSettings()->getDataAddress() = settings.m_dataAddress;
|
||||||
@ -432,7 +432,7 @@ void DaemonSrc::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& res
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrc::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response)
|
void DaemonSource::webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response)
|
||||||
{
|
{
|
||||||
struct timeval tv;
|
struct timeval tv;
|
||||||
gettimeofday(&tv, 0);
|
gettimeofday(&tv, 0);
|
||||||
|
@ -33,30 +33,30 @@
|
|||||||
class ThreadedBasebandSampleSource;
|
class ThreadedBasebandSampleSource;
|
||||||
class UpChannelizer;
|
class UpChannelizer;
|
||||||
class DeviceSinkAPI;
|
class DeviceSinkAPI;
|
||||||
class DaemonSrcThread;
|
class DaemonSourceThread;
|
||||||
class SDRDaemonDataBlock;
|
class SDRDaemonDataBlock;
|
||||||
|
|
||||||
class DaemonSrc : public BasebandSampleSource, public ChannelSourceAPI {
|
class DaemonSource : public BasebandSampleSource, public ChannelSourceAPI {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
class MsgConfigureDaemonSrc : public Message {
|
class MsgConfigureDaemonSource : public Message {
|
||||||
MESSAGE_CLASS_DECLARATION
|
MESSAGE_CLASS_DECLARATION
|
||||||
|
|
||||||
public:
|
public:
|
||||||
const DaemonSrcSettings& getSettings() const { return m_settings; }
|
const DaemonSourceSettings& getSettings() const { return m_settings; }
|
||||||
bool getForce() const { return m_force; }
|
bool getForce() const { return m_force; }
|
||||||
|
|
||||||
static MsgConfigureDaemonSrc* create(const DaemonSrcSettings& settings, bool force)
|
static MsgConfigureDaemonSource* create(const DaemonSourceSettings& settings, bool force)
|
||||||
{
|
{
|
||||||
return new MsgConfigureDaemonSrc(settings, force);
|
return new MsgConfigureDaemonSource(settings, force);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
DaemonSrcSettings m_settings;
|
DaemonSourceSettings m_settings;
|
||||||
bool m_force;
|
bool m_force;
|
||||||
|
|
||||||
MsgConfigureDaemonSrc(const DaemonSrcSettings& settings, bool force) :
|
MsgConfigureDaemonSource(const DaemonSourceSettings& settings, bool force) :
|
||||||
Message(),
|
Message(),
|
||||||
m_settings(settings),
|
m_settings(settings),
|
||||||
m_force(force)
|
m_force(force)
|
||||||
@ -176,8 +176,8 @@ public:
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
DaemonSrc(DeviceSinkAPI *deviceAPI);
|
DaemonSource(DeviceSinkAPI *deviceAPI);
|
||||||
~DaemonSrc();
|
~DaemonSource();
|
||||||
|
|
||||||
virtual void destroy() { delete this; }
|
virtual void destroy() { delete this; }
|
||||||
|
|
||||||
@ -218,12 +218,12 @@ private:
|
|||||||
ThreadedBasebandSampleSource* m_threadedChannelizer;
|
ThreadedBasebandSampleSource* m_threadedChannelizer;
|
||||||
UpChannelizer* m_channelizer;
|
UpChannelizer* m_channelizer;
|
||||||
SDRDaemonDataQueue m_dataQueue;
|
SDRDaemonDataQueue m_dataQueue;
|
||||||
DaemonSrcThread *m_sourceThread;
|
DaemonSourceThread *m_sourceThread;
|
||||||
CM256 m_cm256;
|
CM256 m_cm256;
|
||||||
CM256 *m_cm256p;
|
CM256 *m_cm256p;
|
||||||
bool m_running;
|
bool m_running;
|
||||||
|
|
||||||
DaemonSrcSettings m_settings;
|
DaemonSourceSettings m_settings;
|
||||||
|
|
||||||
CM256::cm256_block m_cm256DescriptorBlocks[2*SDRDaemonNbOrginalBlocks]; //!< CM256 decoder descriptors (block addresses and block indexes)
|
CM256::cm256_block m_cm256DescriptorBlocks[2*SDRDaemonNbOrginalBlocks]; //!< CM256 decoder descriptors (block addresses and block indexes)
|
||||||
SDRDaemonMetaDataFEC m_currentMeta;
|
SDRDaemonMetaDataFEC m_currentMeta;
|
||||||
@ -233,11 +233,11 @@ private:
|
|||||||
uint32_t m_nbCorrectableErrors; //!< count of correctable errors in number of blocks
|
uint32_t m_nbCorrectableErrors; //!< count of correctable errors in number of blocks
|
||||||
uint32_t m_nbUncorrectableErrors; //!< count of uncorrectable errors in number of blocks
|
uint32_t m_nbUncorrectableErrors; //!< count of uncorrectable errors in number of blocks
|
||||||
|
|
||||||
void applySettings(const DaemonSrcSettings& settings, bool force = false);
|
void applySettings(const DaemonSourceSettings& settings, bool force = false);
|
||||||
void handleDataBlock(SDRDaemonDataBlock *dataBlock);
|
void handleDataBlock(SDRDaemonDataBlock *dataBlock);
|
||||||
void printMeta(const QString& header, SDRDaemonMetaDataFEC *metaData);
|
void printMeta(const QString& header, SDRDaemonMetaDataFEC *metaData);
|
||||||
uint32_t calculateDataReadQueueSize(int sampleRate);
|
uint32_t calculateDataReadQueueSize(int sampleRate);
|
||||||
void webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const DaemonSrcSettings& settings);
|
void webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const DaemonSourceSettings& settings);
|
||||||
void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response);
|
void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
@ -23,48 +23,48 @@
|
|||||||
#include "ui_daemonsrcgui.h"
|
#include "ui_daemonsrcgui.h"
|
||||||
#include "daemonsrcgui.h"
|
#include "daemonsrcgui.h"
|
||||||
|
|
||||||
DaemonSrcGUI* DaemonSrcGUI::create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx)
|
DaemonSourceGUI* DaemonSourceGUI::create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx)
|
||||||
{
|
{
|
||||||
DaemonSrcGUI* gui = new DaemonSrcGUI(pluginAPI, deviceUISet, channelTx);
|
DaemonSourceGUI* gui = new DaemonSourceGUI(pluginAPI, deviceUISet, channelTx);
|
||||||
return gui;
|
return gui;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::destroy()
|
void DaemonSourceGUI::destroy()
|
||||||
{
|
{
|
||||||
delete this;
|
delete this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::setName(const QString& name)
|
void DaemonSourceGUI::setName(const QString& name)
|
||||||
{
|
{
|
||||||
setObjectName(name);
|
setObjectName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DaemonSrcGUI::getName() const
|
QString DaemonSourceGUI::getName() const
|
||||||
{
|
{
|
||||||
return objectName();
|
return objectName();
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 DaemonSrcGUI::getCenterFrequency() const {
|
qint64 DaemonSourceGUI::getCenterFrequency() const {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::setCenterFrequency(qint64 centerFrequency __attribute__((unused)))
|
void DaemonSourceGUI::setCenterFrequency(qint64 centerFrequency __attribute__((unused)))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::resetToDefaults()
|
void DaemonSourceGUI::resetToDefaults()
|
||||||
{
|
{
|
||||||
m_settings.resetToDefaults();
|
m_settings.resetToDefaults();
|
||||||
displaySettings();
|
displaySettings();
|
||||||
applySettings(true);
|
applySettings(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray DaemonSrcGUI::serialize() const
|
QByteArray DaemonSourceGUI::serialize() const
|
||||||
{
|
{
|
||||||
return m_settings.serialize();
|
return m_settings.serialize();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DaemonSrcGUI::deserialize(const QByteArray& data)
|
bool DaemonSourceGUI::deserialize(const QByteArray& data)
|
||||||
{
|
{
|
||||||
if(m_settings.deserialize(data)) {
|
if(m_settings.deserialize(data)) {
|
||||||
displaySettings();
|
displaySettings();
|
||||||
@ -76,26 +76,26 @@ bool DaemonSrcGUI::deserialize(const QByteArray& data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DaemonSrcGUI::handleMessage(const Message& message)
|
bool DaemonSourceGUI::handleMessage(const Message& message)
|
||||||
{
|
{
|
||||||
if (DaemonSrc::MsgSampleRateNotification::match(message))
|
if (DaemonSource::MsgSampleRateNotification::match(message))
|
||||||
{
|
{
|
||||||
DaemonSrc::MsgSampleRateNotification& notif = (DaemonSrc::MsgSampleRateNotification&) message;
|
DaemonSource::MsgSampleRateNotification& notif = (DaemonSource::MsgSampleRateNotification&) message;
|
||||||
m_channelMarker.setBandwidth(notif.getSampleRate());
|
m_channelMarker.setBandwidth(notif.getSampleRate());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (DaemonSrc::MsgConfigureDaemonSrc::match(message))
|
else if (DaemonSource::MsgConfigureDaemonSource::match(message))
|
||||||
{
|
{
|
||||||
const DaemonSrc::MsgConfigureDaemonSrc& cfg = (DaemonSrc::MsgConfigureDaemonSrc&) message;
|
const DaemonSource::MsgConfigureDaemonSource& cfg = (DaemonSource::MsgConfigureDaemonSource&) message;
|
||||||
m_settings = cfg.getSettings();
|
m_settings = cfg.getSettings();
|
||||||
blockApplySettings(true);
|
blockApplySettings(true);
|
||||||
displaySettings();
|
displaySettings();
|
||||||
blockApplySettings(false);
|
blockApplySettings(false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (DaemonSrc::MsgReportStreamData::match(message))
|
else if (DaemonSource::MsgReportStreamData::match(message))
|
||||||
{
|
{
|
||||||
const DaemonSrc::MsgReportStreamData& report = (DaemonSrc::MsgReportStreamData&) message;
|
const DaemonSource::MsgReportStreamData& report = (DaemonSource::MsgReportStreamData&) message;
|
||||||
ui->sampleRate->setText(QString("%1").arg(report.get_sampleRate()));
|
ui->sampleRate->setText(QString("%1").arg(report.get_sampleRate()));
|
||||||
QString nominalNbBlocksText = QString("%1/%2")
|
QString nominalNbBlocksText = QString("%1/%2")
|
||||||
.arg(report.get_nbOriginalBlocks() + report.get_nbFECBlocks())
|
.arg(report.get_nbOriginalBlocks() + report.get_nbFECBlocks())
|
||||||
@ -152,9 +152,9 @@ bool DaemonSrcGUI::handleMessage(const Message& message)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DaemonSrcGUI::DaemonSrcGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx __attribute__((unused)), QWidget* parent) :
|
DaemonSourceGUI::DaemonSourceGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx __attribute__((unused)), QWidget* parent) :
|
||||||
RollupWidget(parent),
|
RollupWidget(parent),
|
||||||
ui(new Ui::DaemonSrcGUI),
|
ui(new Ui::DaemonSourceGUI),
|
||||||
m_pluginAPI(pluginAPI),
|
m_pluginAPI(pluginAPI),
|
||||||
m_deviceUISet(deviceUISet),
|
m_deviceUISet(deviceUISet),
|
||||||
m_countUnrecoverable(0),
|
m_countUnrecoverable(0),
|
||||||
@ -171,7 +171,7 @@ DaemonSrcGUI::DaemonSrcGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb
|
|||||||
connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
|
connect(this, SIGNAL(widgetRolled(QWidget*,bool)), this, SLOT(onWidgetRolled(QWidget*,bool)));
|
||||||
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
|
connect(this, SIGNAL(customContextMenuRequested(const QPoint &)), this, SLOT(onMenuDialogCalled(const QPoint &)));
|
||||||
|
|
||||||
m_daemonSrc = (DaemonSrc*) channelTx;
|
m_daemonSrc = (DaemonSource*) channelTx;
|
||||||
m_daemonSrc->setMessageQueueToGUI(getInputMessageQueue());
|
m_daemonSrc->setMessageQueueToGUI(getInputMessageQueue());
|
||||||
|
|
||||||
connect(&(m_deviceUISet->m_deviceSinkAPI->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick()));
|
connect(&(m_deviceUISet->m_deviceSinkAPI->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick()));
|
||||||
@ -185,7 +185,7 @@ DaemonSrcGUI::DaemonSrcGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb
|
|||||||
|
|
||||||
m_settings.setChannelMarker(&m_channelMarker);
|
m_settings.setChannelMarker(&m_channelMarker);
|
||||||
|
|
||||||
m_deviceUISet->registerTxChannelInstance(DaemonSrc::m_channelIdURI, this);
|
m_deviceUISet->registerTxChannelInstance(DaemonSource::m_channelIdURI, this);
|
||||||
m_deviceUISet->addChannelMarker(&m_channelMarker);
|
m_deviceUISet->addChannelMarker(&m_channelMarker);
|
||||||
m_deviceUISet->addRollupWidget(this);
|
m_deviceUISet->addRollupWidget(this);
|
||||||
|
|
||||||
@ -198,30 +198,30 @@ DaemonSrcGUI::DaemonSrcGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb
|
|||||||
applySettings(true);
|
applySettings(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
DaemonSrcGUI::~DaemonSrcGUI()
|
DaemonSourceGUI::~DaemonSourceGUI()
|
||||||
{
|
{
|
||||||
m_deviceUISet->removeTxChannelInstance(this);
|
m_deviceUISet->removeTxChannelInstance(this);
|
||||||
delete m_daemonSrc;
|
delete m_daemonSrc;
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::blockApplySettings(bool block)
|
void DaemonSourceGUI::blockApplySettings(bool block)
|
||||||
{
|
{
|
||||||
m_doApplySettings = !block;
|
m_doApplySettings = !block;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::applySettings(bool force)
|
void DaemonSourceGUI::applySettings(bool force)
|
||||||
{
|
{
|
||||||
if (m_doApplySettings)
|
if (m_doApplySettings)
|
||||||
{
|
{
|
||||||
setTitleColor(m_channelMarker.getColor());
|
setTitleColor(m_channelMarker.getColor());
|
||||||
|
|
||||||
DaemonSrc::MsgConfigureDaemonSrc* message = DaemonSrc::MsgConfigureDaemonSrc::create(m_settings, force);
|
DaemonSource::MsgConfigureDaemonSource* message = DaemonSource::MsgConfigureDaemonSource::create(m_settings, force);
|
||||||
m_daemonSrc->getInputMessageQueue()->push(message);
|
m_daemonSrc->getInputMessageQueue()->push(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::displaySettings()
|
void DaemonSourceGUI::displaySettings()
|
||||||
{
|
{
|
||||||
m_channelMarker.blockSignals(true);
|
m_channelMarker.blockSignals(true);
|
||||||
m_channelMarker.setCenterFrequency(0);
|
m_channelMarker.setCenterFrequency(0);
|
||||||
@ -239,17 +239,17 @@ void DaemonSrcGUI::displaySettings()
|
|||||||
blockApplySettings(false);
|
blockApplySettings(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::leaveEvent(QEvent*)
|
void DaemonSourceGUI::leaveEvent(QEvent*)
|
||||||
{
|
{
|
||||||
m_channelMarker.setHighlighted(false);
|
m_channelMarker.setHighlighted(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::enterEvent(QEvent*)
|
void DaemonSourceGUI::enterEvent(QEvent*)
|
||||||
{
|
{
|
||||||
m_channelMarker.setHighlighted(true);
|
m_channelMarker.setHighlighted(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::handleSourceMessages()
|
void DaemonSourceGUI::handleSourceMessages()
|
||||||
{
|
{
|
||||||
Message* message;
|
Message* message;
|
||||||
|
|
||||||
@ -262,11 +262,11 @@ void DaemonSrcGUI::handleSourceMessages()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::onWidgetRolled(QWidget* widget __attribute__((unused)), bool rollDown __attribute__((unused)))
|
void DaemonSourceGUI::onWidgetRolled(QWidget* widget __attribute__((unused)), bool rollDown __attribute__((unused)))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::onMenuDialogCalled(const QPoint &p)
|
void DaemonSourceGUI::onMenuDialogCalled(const QPoint &p)
|
||||||
{
|
{
|
||||||
BasicChannelSettingsDialog dialog(&m_channelMarker, this);
|
BasicChannelSettingsDialog dialog(&m_channelMarker, this);
|
||||||
dialog.move(p);
|
dialog.move(p);
|
||||||
@ -281,13 +281,13 @@ void DaemonSrcGUI::onMenuDialogCalled(const QPoint &p)
|
|||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::on_dataAddress_returnPressed()
|
void DaemonSourceGUI::on_dataAddress_returnPressed()
|
||||||
{
|
{
|
||||||
m_settings.m_dataAddress = ui->dataAddress->text();
|
m_settings.m_dataAddress = ui->dataAddress->text();
|
||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::on_dataPort_returnPressed()
|
void DaemonSourceGUI::on_dataPort_returnPressed()
|
||||||
{
|
{
|
||||||
bool dataOk;
|
bool dataOk;
|
||||||
int dataPort = ui->dataPort->text().toInt(&dataOk);
|
int dataPort = ui->dataPort->text().toInt(&dataOk);
|
||||||
@ -304,7 +304,7 @@ void DaemonSrcGUI::on_dataPort_returnPressed()
|
|||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::on_dataApplyButton_clicked(bool checked __attribute__((unused)))
|
void DaemonSourceGUI::on_dataApplyButton_clicked(bool checked __attribute__((unused)))
|
||||||
{
|
{
|
||||||
m_settings.m_dataAddress = ui->dataAddress->text();
|
m_settings.m_dataAddress = ui->dataAddress->text();
|
||||||
|
|
||||||
@ -319,7 +319,7 @@ void DaemonSrcGUI::on_dataApplyButton_clicked(bool checked __attribute__((unused
|
|||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::on_eventCountsReset_clicked(bool checked __attribute__((unused)))
|
void DaemonSourceGUI::on_eventCountsReset_clicked(bool checked __attribute__((unused)))
|
||||||
{
|
{
|
||||||
m_countUnrecoverable = 0;
|
m_countUnrecoverable = 0;
|
||||||
m_countRecovered = 0;
|
m_countRecovered = 0;
|
||||||
@ -328,7 +328,7 @@ void DaemonSrcGUI::on_eventCountsReset_clicked(bool checked __attribute__((unuse
|
|||||||
displayEventTimer();
|
displayEventTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::displayEventCounts()
|
void DaemonSourceGUI::displayEventCounts()
|
||||||
{
|
{
|
||||||
QString nstr = QString("%1").arg(m_countUnrecoverable, 3, 10, QChar('0'));
|
QString nstr = QString("%1").arg(m_countUnrecoverable, 3, 10, QChar('0'));
|
||||||
ui->eventUnrecText->setText(nstr);
|
ui->eventUnrecText->setText(nstr);
|
||||||
@ -336,7 +336,7 @@ void DaemonSrcGUI::displayEventCounts()
|
|||||||
ui->eventRecText->setText(nstr);
|
ui->eventRecText->setText(nstr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::displayEventStatus(int recoverableCount, int unrecoverableCount)
|
void DaemonSourceGUI::displayEventStatus(int recoverableCount, int unrecoverableCount)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (unrecoverableCount == 0)
|
if (unrecoverableCount == 0)
|
||||||
@ -353,7 +353,7 @@ void DaemonSrcGUI::displayEventStatus(int recoverableCount, int unrecoverableCou
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::displayEventTimer()
|
void DaemonSourceGUI::displayEventTimer()
|
||||||
{
|
{
|
||||||
int elapsedTimeMillis = m_time.elapsed();
|
int elapsedTimeMillis = m_time.elapsed();
|
||||||
QTime recordLength(0, 0, 0, 0);
|
QTime recordLength(0, 0, 0, 0);
|
||||||
@ -362,11 +362,11 @@ void DaemonSrcGUI::displayEventTimer()
|
|||||||
ui->eventCountsTimeText->setText(s_time);
|
ui->eventCountsTimeText->setText(s_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::tick()
|
void DaemonSourceGUI::tick()
|
||||||
{
|
{
|
||||||
if (++m_tickCount == 20) // once per second
|
if (++m_tickCount == 20) // once per second
|
||||||
{
|
{
|
||||||
DaemonSrc::MsgQueryStreamData *msg = DaemonSrc::MsgQueryStreamData::create();
|
DaemonSource::MsgQueryStreamData *msg = DaemonSource::MsgQueryStreamData::create();
|
||||||
m_daemonSrc->getInputMessageQueue()->push(msg);
|
m_daemonSrc->getInputMessageQueue()->push(msg);
|
||||||
|
|
||||||
displayEventTimer();
|
displayEventTimer();
|
||||||
@ -375,6 +375,6 @@ void DaemonSrcGUI::tick()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcGUI::channelMarkerChangedByCursor()
|
void DaemonSourceGUI::channelMarkerChangedByCursor()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -29,17 +29,17 @@
|
|||||||
class PluginAPI;
|
class PluginAPI;
|
||||||
class DeviceUISet;
|
class DeviceUISet;
|
||||||
class BasebandSampleSource;
|
class BasebandSampleSource;
|
||||||
class DaemonSrc;
|
class DaemonSource;
|
||||||
|
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class DaemonSrcGUI;
|
class DaemonSourceGUI;
|
||||||
}
|
}
|
||||||
|
|
||||||
class DaemonSrcGUI : public RollupWidget, public PluginInstanceGUI {
|
class DaemonSourceGUI : public RollupWidget, public PluginInstanceGUI {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static DaemonSrcGUI* create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx);
|
static DaemonSourceGUI* create(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx);
|
||||||
virtual void destroy();
|
virtual void destroy();
|
||||||
|
|
||||||
void setName(const QString& name);
|
void setName(const QString& name);
|
||||||
@ -57,14 +57,14 @@ public slots:
|
|||||||
void channelMarkerChangedByCursor();
|
void channelMarkerChangedByCursor();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::DaemonSrcGUI* ui;
|
Ui::DaemonSourceGUI* ui;
|
||||||
PluginAPI* m_pluginAPI;
|
PluginAPI* m_pluginAPI;
|
||||||
DeviceUISet* m_deviceUISet;
|
DeviceUISet* m_deviceUISet;
|
||||||
ChannelMarker m_channelMarker;
|
ChannelMarker m_channelMarker;
|
||||||
DaemonSrcSettings m_settings;
|
DaemonSourceSettings m_settings;
|
||||||
bool m_doApplySettings;
|
bool m_doApplySettings;
|
||||||
|
|
||||||
DaemonSrc* m_daemonSrc;
|
DaemonSource* m_daemonSrc;
|
||||||
MessageQueue m_inputMessageQueue;
|
MessageQueue m_inputMessageQueue;
|
||||||
|
|
||||||
uint32_t m_countUnrecoverable;
|
uint32_t m_countUnrecoverable;
|
||||||
@ -77,8 +77,8 @@ private:
|
|||||||
QTime m_time;
|
QTime m_time;
|
||||||
uint32_t m_tickCount;
|
uint32_t m_tickCount;
|
||||||
|
|
||||||
explicit DaemonSrcGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx, QWidget* parent = 0);
|
explicit DaemonSourceGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandSampleSource *channelTx, QWidget* parent = 0);
|
||||||
virtual ~DaemonSrcGUI();
|
virtual ~DaemonSourceGUI();
|
||||||
|
|
||||||
void blockApplySettings(bool block);
|
void blockApplySettings(bool block);
|
||||||
void applySettings(bool force = false);
|
void applySettings(bool force = false);
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ui version="4.0">
|
<ui version="4.0">
|
||||||
<class>DaemonSrcGUI</class>
|
<class>DaemonSourceGUI</class>
|
||||||
<widget class="RollupWidget" name="DaemonSrcGUI">
|
<widget class="RollupWidget" name="DaemonSourceGUI">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#include "daemonsrc.h"
|
#include "daemonsrc.h"
|
||||||
#include "daemonsrcplugin.h"
|
#include "daemonsrcplugin.h"
|
||||||
|
|
||||||
const PluginDescriptor DaemonSrcPlugin::m_pluginDescriptor = {
|
const PluginDescriptor DaemonSourcePlugin::m_pluginDescriptor = {
|
||||||
QString("Daemon channel source"),
|
QString("Daemon channel source"),
|
||||||
QString("4.1.0"),
|
QString("4.1.0"),
|
||||||
QString("(c) Edouard Griffiths, F4EXB"),
|
QString("(c) Edouard Griffiths, F4EXB"),
|
||||||
@ -32,47 +32,47 @@ const PluginDescriptor DaemonSrcPlugin::m_pluginDescriptor = {
|
|||||||
QString("https://github.com/f4exb/sdrangel")
|
QString("https://github.com/f4exb/sdrangel")
|
||||||
};
|
};
|
||||||
|
|
||||||
DaemonSrcPlugin::DaemonSrcPlugin(QObject* parent) :
|
DaemonSourcePlugin::DaemonSourcePlugin(QObject* parent) :
|
||||||
QObject(parent),
|
QObject(parent),
|
||||||
m_pluginAPI(0)
|
m_pluginAPI(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
const PluginDescriptor& DaemonSrcPlugin::getPluginDescriptor() const
|
const PluginDescriptor& DaemonSourcePlugin::getPluginDescriptor() const
|
||||||
{
|
{
|
||||||
return m_pluginDescriptor;
|
return m_pluginDescriptor;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcPlugin::initPlugin(PluginAPI* pluginAPI)
|
void DaemonSourcePlugin::initPlugin(PluginAPI* pluginAPI)
|
||||||
{
|
{
|
||||||
m_pluginAPI = pluginAPI;
|
m_pluginAPI = pluginAPI;
|
||||||
|
|
||||||
// register source
|
// register source
|
||||||
m_pluginAPI->registerTxChannel(DaemonSrc::m_channelIdURI, DaemonSrc::m_channelId, this);
|
m_pluginAPI->registerTxChannel(DaemonSource::m_channelIdURI, DaemonSource::m_channelId, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SERVER_MODE
|
#ifdef SERVER_MODE
|
||||||
PluginInstanceGUI* DaemonSrcPlugin::createTxChannelGUI(
|
PluginInstanceGUI* DaemonSourcePlugin::createTxChannelGUI(
|
||||||
DeviceUISet *deviceUISet __attribute__((unused)),
|
DeviceUISet *deviceUISet __attribute__((unused)),
|
||||||
BasebandSampleSource *txChannel __attribute__((unused)))
|
BasebandSampleSource *txChannel __attribute__((unused)))
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
PluginInstanceGUI* DaemonSrcPlugin::createTxChannelGUI(DeviceUISet *deviceUISet, BasebandSampleSource *txChannel)
|
PluginInstanceGUI* DaemonSourcePlugin::createTxChannelGUI(DeviceUISet *deviceUISet, BasebandSampleSource *txChannel)
|
||||||
{
|
{
|
||||||
return DaemonSrcGUI::create(m_pluginAPI, deviceUISet, txChannel);
|
return DaemonSourceGUI::create(m_pluginAPI, deviceUISet, txChannel);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
BasebandSampleSource* DaemonSrcPlugin::createTxChannelBS(DeviceSinkAPI *deviceAPI)
|
BasebandSampleSource* DaemonSourcePlugin::createTxChannelBS(DeviceSinkAPI *deviceAPI)
|
||||||
{
|
{
|
||||||
return new DaemonSrc(deviceAPI);
|
return new DaemonSource(deviceAPI);
|
||||||
}
|
}
|
||||||
|
|
||||||
ChannelSourceAPI* DaemonSrcPlugin::createTxChannelCS(DeviceSinkAPI *deviceAPI)
|
ChannelSourceAPI* DaemonSourcePlugin::createTxChannelCS(DeviceSinkAPI *deviceAPI)
|
||||||
{
|
{
|
||||||
return new DaemonSrc(deviceAPI);
|
return new DaemonSource(deviceAPI);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,13 +23,13 @@
|
|||||||
class DeviceUISet;
|
class DeviceUISet;
|
||||||
class BasebandSampleSource;
|
class BasebandSampleSource;
|
||||||
|
|
||||||
class DaemonSrcPlugin : public QObject, PluginInterface {
|
class DaemonSourcePlugin : public QObject, PluginInterface {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
Q_INTERFACES(PluginInterface)
|
Q_INTERFACES(PluginInterface)
|
||||||
Q_PLUGIN_METADATA(IID "sdrangel.channeltx.daemonsrc")
|
Q_PLUGIN_METADATA(IID "sdrangel.channeltx.daemonsrc")
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit DaemonSrcPlugin(QObject* parent = 0);
|
explicit DaemonSourcePlugin(QObject* parent = 0);
|
||||||
|
|
||||||
const PluginDescriptor& getPluginDescriptor() const;
|
const PluginDescriptor& getPluginDescriptor() const;
|
||||||
void initPlugin(PluginAPI* pluginAPI);
|
void initPlugin(PluginAPI* pluginAPI);
|
||||||
|
@ -22,12 +22,12 @@
|
|||||||
#include "settings/serializable.h"
|
#include "settings/serializable.h"
|
||||||
#include "daemonsrcsettings.h"
|
#include "daemonsrcsettings.h"
|
||||||
|
|
||||||
DaemonSrcSettings::DaemonSrcSettings()
|
DaemonSourceSettings::DaemonSourceSettings()
|
||||||
{
|
{
|
||||||
resetToDefaults();
|
resetToDefaults();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcSettings::resetToDefaults()
|
void DaemonSourceSettings::resetToDefaults()
|
||||||
{
|
{
|
||||||
m_dataAddress = "127.0.0.1";
|
m_dataAddress = "127.0.0.1";
|
||||||
m_dataPort = 9090;
|
m_dataPort = 9090;
|
||||||
@ -35,7 +35,7 @@ void DaemonSrcSettings::resetToDefaults()
|
|||||||
m_title = "Daemon source";
|
m_title = "Daemon source";
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray DaemonSrcSettings::serialize() const
|
QByteArray DaemonSourceSettings::serialize() const
|
||||||
{
|
{
|
||||||
SimpleSerializer s(1);
|
SimpleSerializer s(1);
|
||||||
s.writeString(1, m_dataAddress);
|
s.writeString(1, m_dataAddress);
|
||||||
@ -46,7 +46,7 @@ QByteArray DaemonSrcSettings::serialize() const
|
|||||||
return s.final();
|
return s.final();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DaemonSrcSettings::deserialize(const QByteArray& data)
|
bool DaemonSourceSettings::deserialize(const QByteArray& data)
|
||||||
{
|
{
|
||||||
SimpleDeserializer d(data);
|
SimpleDeserializer d(data);
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
class Serializable;
|
class Serializable;
|
||||||
|
|
||||||
struct DaemonSrcSettings
|
struct DaemonSourceSettings
|
||||||
{
|
{
|
||||||
QString m_dataAddress; //!< Listening (local) data address
|
QString m_dataAddress; //!< Listening (local) data address
|
||||||
uint16_t m_dataPort; //!< Listening data port
|
uint16_t m_dataPort; //!< Listening data port
|
||||||
@ -31,7 +31,7 @@ struct DaemonSrcSettings
|
|||||||
|
|
||||||
Serializable *m_channelMarker;
|
Serializable *m_channelMarker;
|
||||||
|
|
||||||
DaemonSrcSettings();
|
DaemonSourceSettings();
|
||||||
void resetToDefaults();
|
void resetToDefaults();
|
||||||
void setChannelMarker(Serializable *channelMarker) { m_channelMarker = channelMarker; }
|
void setChannelMarker(Serializable *channelMarker) { m_channelMarker = channelMarker; }
|
||||||
QByteArray serialize() const;
|
QByteArray serialize() const;
|
||||||
|
@ -24,10 +24,10 @@
|
|||||||
|
|
||||||
#include "daemonsrcthread.h"
|
#include "daemonsrcthread.h"
|
||||||
|
|
||||||
MESSAGE_CLASS_DEFINITION(DaemonSrcThread::MsgStartStop, Message)
|
MESSAGE_CLASS_DEFINITION(DaemonSourceThread::MsgStartStop, Message)
|
||||||
MESSAGE_CLASS_DEFINITION(DaemonSrcThread::MsgDataBind, Message)
|
MESSAGE_CLASS_DEFINITION(DaemonSourceThread::MsgDataBind, Message)
|
||||||
|
|
||||||
DaemonSrcThread::DaemonSrcThread(SDRDaemonDataQueue *dataQueue, QObject* parent) :
|
DaemonSourceThread::DaemonSourceThread(SDRDaemonDataQueue *dataQueue, QObject* parent) :
|
||||||
QThread(parent),
|
QThread(parent),
|
||||||
m_running(false),
|
m_running(false),
|
||||||
m_dataQueue(dataQueue),
|
m_dataQueue(dataQueue),
|
||||||
@ -38,26 +38,26 @@ DaemonSrcThread::DaemonSrcThread(SDRDaemonDataQueue *dataQueue, QObject* parent)
|
|||||||
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection);
|
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
DaemonSrcThread::~DaemonSrcThread()
|
DaemonSourceThread::~DaemonSourceThread()
|
||||||
{
|
{
|
||||||
qDebug("DaemonSrcThread::~DaemonSrcThread");
|
qDebug("DaemonSourceThread::~DaemonSourceThread");
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcThread::startStop(bool start)
|
void DaemonSourceThread::startStop(bool start)
|
||||||
{
|
{
|
||||||
MsgStartStop *msg = MsgStartStop::create(start);
|
MsgStartStop *msg = MsgStartStop::create(start);
|
||||||
m_inputMessageQueue.push(msg);
|
m_inputMessageQueue.push(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcThread::dataBind(const QString& address, uint16_t port)
|
void DaemonSourceThread::dataBind(const QString& address, uint16_t port)
|
||||||
{
|
{
|
||||||
MsgDataBind *msg = MsgDataBind::create(address, port);
|
MsgDataBind *msg = MsgDataBind::create(address, port);
|
||||||
m_inputMessageQueue.push(msg);
|
m_inputMessageQueue.push(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcThread::startWork()
|
void DaemonSourceThread::startWork()
|
||||||
{
|
{
|
||||||
qDebug("DaemonSrcThread::startWork");
|
qDebug("DaemonSourceThread::startWork");
|
||||||
m_startWaitMutex.lock();
|
m_startWaitMutex.lock();
|
||||||
m_socket = new QUdpSocket(this);
|
m_socket = new QUdpSocket(this);
|
||||||
start();
|
start();
|
||||||
@ -66,18 +66,18 @@ void DaemonSrcThread::startWork()
|
|||||||
m_startWaitMutex.unlock();
|
m_startWaitMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcThread::stopWork()
|
void DaemonSourceThread::stopWork()
|
||||||
{
|
{
|
||||||
qDebug("DaemonSrcThread::stopWork");
|
qDebug("DaemonSourceThread::stopWork");
|
||||||
delete m_socket;
|
delete m_socket;
|
||||||
m_socket = 0;
|
m_socket = 0;
|
||||||
m_running = false;
|
m_running = false;
|
||||||
wait();
|
wait();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcThread::run()
|
void DaemonSourceThread::run()
|
||||||
{
|
{
|
||||||
qDebug("DaemonSrcThread::run: begin");
|
qDebug("DaemonSourceThread::run: begin");
|
||||||
m_running = true;
|
m_running = true;
|
||||||
m_startWaiter.wakeAll();
|
m_startWaiter.wakeAll();
|
||||||
|
|
||||||
@ -87,11 +87,11 @@ void DaemonSrcThread::run()
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_running = false;
|
m_running = false;
|
||||||
qDebug("DaemonSrcThread::run: end");
|
qDebug("DaemonSourceThread::run: end");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void DaemonSrcThread::handleInputMessages()
|
void DaemonSourceThread::handleInputMessages()
|
||||||
{
|
{
|
||||||
Message* message;
|
Message* message;
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ void DaemonSrcThread::handleInputMessages()
|
|||||||
if (MsgStartStop::match(*message))
|
if (MsgStartStop::match(*message))
|
||||||
{
|
{
|
||||||
MsgStartStop* notif = (MsgStartStop*) message;
|
MsgStartStop* notif = (MsgStartStop*) message;
|
||||||
qDebug("DaemonSrcThread::handleInputMessages: MsgStartStop: %s", notif->getStartStop() ? "start" : "stop");
|
qDebug("DaemonSourceThread::handleInputMessages: MsgStartStop: %s", notif->getStartStop() ? "start" : "stop");
|
||||||
|
|
||||||
if (notif->getStartStop()) {
|
if (notif->getStartStop()) {
|
||||||
startWork();
|
startWork();
|
||||||
@ -113,7 +113,7 @@ void DaemonSrcThread::handleInputMessages()
|
|||||||
else if (MsgDataBind::match(*message))
|
else if (MsgDataBind::match(*message))
|
||||||
{
|
{
|
||||||
MsgDataBind* notif = (MsgDataBind*) message;
|
MsgDataBind* notif = (MsgDataBind*) message;
|
||||||
qDebug("DaemonSrcThread::handleInputMessages: MsgDataBind: %s:%d", qPrintable(notif->getAddress().toString()), notif->getPort());
|
qDebug("DaemonSourceThread::handleInputMessages: MsgDataBind: %s:%d", qPrintable(notif->getAddress().toString()), notif->getPort());
|
||||||
|
|
||||||
if (m_socket)
|
if (m_socket)
|
||||||
{
|
{
|
||||||
@ -125,7 +125,7 @@ void DaemonSrcThread::handleInputMessages()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DaemonSrcThread::readPendingDatagrams()
|
void DaemonSourceThread::readPendingDatagrams()
|
||||||
{
|
{
|
||||||
SDRDaemonSuperBlock superBlock;
|
SDRDaemonSuperBlock superBlock;
|
||||||
qint64 size;
|
qint64 size;
|
||||||
@ -158,7 +158,7 @@ void DaemonSrcThread::readPendingDatagrams()
|
|||||||
|
|
||||||
if (superBlock.m_header.m_frameIndex != frameIndex)
|
if (superBlock.m_header.m_frameIndex != frameIndex)
|
||||||
{
|
{
|
||||||
//qDebug("DaemonSrcThread::readPendingDatagrams: push frame %u", frameIndex);
|
//qDebug("DaemonSourceThread::readPendingDatagrams: push frame %u", frameIndex);
|
||||||
m_dataQueue->push(m_dataBlocks[dataBlockIndex]);
|
m_dataQueue->push(m_dataBlocks[dataBlockIndex]);
|
||||||
m_dataBlocks[dataBlockIndex] = new SDRDaemonDataBlock();
|
m_dataBlocks[dataBlockIndex] = new SDRDaemonDataBlock();
|
||||||
m_dataBlocks[dataBlockIndex]->m_rxControlBlock.m_frameIndex = superBlock.m_header.m_frameIndex;
|
m_dataBlocks[dataBlockIndex]->m_rxControlBlock.m_frameIndex = superBlock.m_header.m_frameIndex;
|
||||||
@ -181,7 +181,7 @@ void DaemonSrcThread::readPendingDatagrams()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qWarning("DaemonSrcThread::readPendingDatagrams: wrong super block size not processing");
|
qWarning("DaemonSourceThread::readPendingDatagrams: wrong super block size not processing");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ class SDRDaemonDataQueue;
|
|||||||
class SDRDaemonDataBlock;
|
class SDRDaemonDataBlock;
|
||||||
class QUdpSocket;
|
class QUdpSocket;
|
||||||
|
|
||||||
class DaemonSrcThread : public QThread {
|
class DaemonSourceThread : public QThread {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
class MsgStartStop : public Message {
|
class MsgStartStop : public Message {
|
||||||
@ -74,8 +74,8 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
DaemonSrcThread(SDRDaemonDataQueue *dataQueue, QObject* parent = 0);
|
DaemonSourceThread(SDRDaemonDataQueue *dataQueue, QObject* parent = 0);
|
||||||
~DaemonSrcThread();
|
~DaemonSourceThread();
|
||||||
|
|
||||||
void startStop(bool start);
|
void startStop(bool start);
|
||||||
void dataBind(const QString& address, uint16_t port);
|
void dataBind(const QString& address, uint16_t port);
|
||||||
|
@ -2159,7 +2159,7 @@ bool WebAPIRequestMapper::validateChannelSettings(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (*channelType == "DaemonSrc")
|
else if (*channelType == "DaemonSource")
|
||||||
{
|
{
|
||||||
if (channelSettings.getTx() != 0)
|
if (channelSettings.getTx() != 0)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user