mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-11-03 13:11:20 -05:00 
			
		
		
		
	SDRdaemonFEC: renamed all SDRdaemonFECxxx classes to SDRdaemonSourcexxx classes
This commit is contained in:
		
							parent
							
								
									3d5efd7dba
								
							
						
					
					
						commit
						718d87ecf5
					
				@ -25,7 +25,7 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SDRDAEMONFEC_UDPSIZE 512               // UDP payload size
 | 
			
		||||
#define SDRDAEMONFEC_NBORIGINALBLOCKS 128      // number of sample blocks per frame excluding FEC blocks
 | 
			
		||||
#define SDRDAEMONSOURCE_NBORIGINALBLOCKS 128      // number of sample blocks per frame excluding FEC blocks
 | 
			
		||||
#define SDRDAEMONFEC_NBDECODERSLOTS 16         // power of two sub multiple of uint16_t size. A too large one is superfluous.
 | 
			
		||||
 | 
			
		||||
class SDRdaemonFECBuffer
 | 
			
		||||
@ -69,7 +69,7 @@ public:
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const int samplesPerBlock = (SDRDAEMONFEC_UDPSIZE - sizeof(Header)) / sizeof(Sample);
 | 
			
		||||
    static const int framesSize = SDRDAEMONFEC_NBDECODERSLOTS * (SDRDAEMONFEC_NBORIGINALBLOCKS - 1) * (SDRDAEMONFEC_UDPSIZE - sizeof(Header));
 | 
			
		||||
    static const int framesSize = SDRDAEMONFEC_NBDECODERSLOTS * (SDRDAEMONSOURCE_NBORIGINALBLOCKS - 1) * (SDRDAEMONFEC_UDPSIZE - sizeof(Header));
 | 
			
		||||
 | 
			
		||||
    struct ProtectedBlock
 | 
			
		||||
    {
 | 
			
		||||
@ -156,7 +156,7 @@ public:
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static const int m_udpPayloadSize = SDRDAEMONFEC_UDPSIZE;
 | 
			
		||||
    static const int m_nbOriginalBlocks = SDRDAEMONFEC_NBORIGINALBLOCKS;
 | 
			
		||||
    static const int m_nbOriginalBlocks = SDRDAEMONSOURCE_NBORIGINALBLOCKS;
 | 
			
		||||
	static const int m_sampleSize;
 | 
			
		||||
	static const int m_iqSampleSize;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -25,10 +25,10 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const int SDRdaemonFECBuffer::m_sampleSize = 2;
 | 
			
		||||
const int SDRdaemonFECBuffer::m_iqSampleSize = 2 * m_sampleSize;
 | 
			
		||||
const int SDRdaemonSourceBuffer::m_sampleSize = 2;
 | 
			
		||||
const int SDRdaemonSourceBuffer::m_iqSampleSize = 2 * m_sampleSize;
 | 
			
		||||
 | 
			
		||||
SDRdaemonFECBuffer::SDRdaemonFECBuffer(uint32_t throttlems) :
 | 
			
		||||
SDRdaemonSourceBuffer::SDRdaemonSourceBuffer(uint32_t throttlems) :
 | 
			
		||||
        m_decoderIndexHead(nbDecoderSlots/2),
 | 
			
		||||
        m_frameHead(0),
 | 
			
		||||
        m_curNbBlocks(0),
 | 
			
		||||
@ -65,14 +65,14 @@ SDRdaemonFECBuffer::SDRdaemonFECBuffer(uint32_t throttlems) :
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SDRdaemonFECBuffer::~SDRdaemonFECBuffer()
 | 
			
		||||
SDRdaemonSourceBuffer::~SDRdaemonSourceBuffer()
 | 
			
		||||
{
 | 
			
		||||
	if (m_readBuffer) {
 | 
			
		||||
		delete[] m_readBuffer;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECBuffer::initDecodeAllSlots()
 | 
			
		||||
void SDRdaemonSourceBuffer::initDecodeAllSlots()
 | 
			
		||||
{
 | 
			
		||||
    for (int i = 0; i < nbDecoderSlots; i++)
 | 
			
		||||
    {
 | 
			
		||||
@ -86,7 +86,7 @@ void SDRdaemonFECBuffer::initDecodeAllSlots()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECBuffer::initDecodeSlot(int slotIndex)
 | 
			
		||||
void SDRdaemonSourceBuffer::initDecodeSlot(int slotIndex)
 | 
			
		||||
{
 | 
			
		||||
    // collect stats before voiding the slot
 | 
			
		||||
 | 
			
		||||
@ -122,7 +122,7 @@ void SDRdaemonFECBuffer::initDecodeSlot(int slotIndex)
 | 
			
		||||
    memset((void *) m_decoderSlots[slotIndex].m_recoveryBlocks, 0, m_nbOriginalBlocks * sizeof(ProtectedBlock));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECBuffer::initReadIndex()
 | 
			
		||||
void SDRdaemonSourceBuffer::initReadIndex()
 | 
			
		||||
{
 | 
			
		||||
    m_readIndex = ((m_decoderIndexHead + (nbDecoderSlots/2)) % nbDecoderSlots) * sizeof(BufferFrame);
 | 
			
		||||
    m_wrDeltaEstimate = m_framesNbBytes / 2;
 | 
			
		||||
@ -130,7 +130,7 @@ void SDRdaemonFECBuffer::initReadIndex()
 | 
			
		||||
    m_nbWrites = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECBuffer::rwCorrectionEstimate(int slotIndex)
 | 
			
		||||
void SDRdaemonSourceBuffer::rwCorrectionEstimate(int slotIndex)
 | 
			
		||||
{
 | 
			
		||||
	if (m_nbReads >= 40) // check every ~1s as tick is ~50ms
 | 
			
		||||
	{
 | 
			
		||||
@ -163,7 +163,7 @@ void SDRdaemonFECBuffer::rwCorrectionEstimate(int slotIndex)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECBuffer::checkSlotData(int slotIndex)
 | 
			
		||||
void SDRdaemonSourceBuffer::checkSlotData(int slotIndex)
 | 
			
		||||
{
 | 
			
		||||
    int pseudoWriteIndex = slotIndex * sizeof(BufferFrame);
 | 
			
		||||
    m_wrDeltaEstimate = pseudoWriteIndex - m_readIndex;
 | 
			
		||||
@ -188,7 +188,7 @@ void SDRdaemonFECBuffer::checkSlotData(int slotIndex)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECBuffer::writeData(char *array)
 | 
			
		||||
void SDRdaemonSourceBuffer::writeData(char *array)
 | 
			
		||||
{
 | 
			
		||||
    SuperBlock *superBlock = (SuperBlock *) array;
 | 
			
		||||
    int frameIndex = superBlock->header.frameIndex;
 | 
			
		||||
@ -321,7 +321,7 @@ void SDRdaemonFECBuffer::writeData(char *array)
 | 
			
		||||
    } // decode
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECBuffer::writeData0(char *array __attribute__((unused)), uint32_t length __attribute__((unused)))
 | 
			
		||||
void SDRdaemonSourceBuffer::writeData0(char *array __attribute__((unused)), uint32_t length __attribute__((unused)))
 | 
			
		||||
{
 | 
			
		||||
// Kept as comments for the out of sync blocks algorithms
 | 
			
		||||
//    assert(length == m_udpPayloadSize);
 | 
			
		||||
@ -394,7 +394,7 @@ void SDRdaemonFECBuffer::writeData0(char *array __attribute__((unused)), uint32_
 | 
			
		||||
//
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uint8_t *SDRdaemonFECBuffer::readData(int32_t length)
 | 
			
		||||
uint8_t *SDRdaemonSourceBuffer::readData(int32_t length)
 | 
			
		||||
{
 | 
			
		||||
    uint8_t *buffer = (uint8_t *) m_frames;
 | 
			
		||||
    uint32_t readIndex = m_readIndex;
 | 
			
		||||
@ -436,7 +436,7 @@ uint8_t *SDRdaemonFECBuffer::readData(int32_t length)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECBuffer::printMeta(const QString& header, MetaDataFEC *metaData)
 | 
			
		||||
void SDRdaemonSourceBuffer::printMeta(const QString& header, MetaDataFEC *metaData)
 | 
			
		||||
{
 | 
			
		||||
	qDebug() << header << ": "
 | 
			
		||||
            << "|" << metaData->m_centerFrequency
 | 
			
		||||
 | 
			
		||||
@ -24,11 +24,11 @@
 | 
			
		||||
#include "util/movingaverage.h"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#define SDRDAEMONFEC_UDPSIZE 512               // UDP payload size
 | 
			
		||||
#define SDRDAEMONFEC_NBORIGINALBLOCKS 128      // number of sample blocks per frame excluding FEC blocks
 | 
			
		||||
#define SDRDAEMONFEC_NBDECODERSLOTS 16         // power of two sub multiple of uint16_t size. A too large one is superfluous.
 | 
			
		||||
#define SDRDAEMONSOURCE_UDPSIZE 512               // UDP payload size
 | 
			
		||||
#define SDRDAEMONSOURCE_NBORIGINALBLOCKS 128      // number of sample blocks per frame excluding FEC blocks
 | 
			
		||||
#define SDRDAEMONSOURCE_NBDECODERSLOTS 16         // power of two sub multiple of uint16_t size. A too large one is superfluous.
 | 
			
		||||
 | 
			
		||||
class SDRdaemonFECBuffer
 | 
			
		||||
class SDRdaemonSourceBuffer
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
#pragma pack(push, 1)
 | 
			
		||||
@ -68,8 +68,8 @@ public:
 | 
			
		||||
        uint8_t  filler;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    static const int samplesPerBlock = (SDRDAEMONFEC_UDPSIZE - sizeof(Header)) / sizeof(Sample);
 | 
			
		||||
    static const int framesSize = SDRDAEMONFEC_NBDECODERSLOTS * (SDRDAEMONFEC_NBORIGINALBLOCKS - 1) * (SDRDAEMONFEC_UDPSIZE - sizeof(Header));
 | 
			
		||||
    static const int samplesPerBlock = (SDRDAEMONSOURCE_UDPSIZE - sizeof(Header)) / sizeof(Sample);
 | 
			
		||||
    static const int framesSize = SDRDAEMONSOURCE_NBDECODERSLOTS * (SDRDAEMONSOURCE_NBORIGINALBLOCKS - 1) * (SDRDAEMONSOURCE_UDPSIZE - sizeof(Header));
 | 
			
		||||
 | 
			
		||||
    struct ProtectedBlock
 | 
			
		||||
    {
 | 
			
		||||
@ -83,8 +83,8 @@ public:
 | 
			
		||||
    };
 | 
			
		||||
#pragma pack(pop)
 | 
			
		||||
 | 
			
		||||
	SDRdaemonFECBuffer(uint32_t throttlems);
 | 
			
		||||
	~SDRdaemonFECBuffer();
 | 
			
		||||
	SDRdaemonSourceBuffer(uint32_t throttlems);
 | 
			
		||||
	~SDRdaemonSourceBuffer();
 | 
			
		||||
 | 
			
		||||
	// R/W operations
 | 
			
		||||
	void writeData(char *array); //!< Write data into buffer.
 | 
			
		||||
@ -156,13 +156,13 @@ public:
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static const int m_udpPayloadSize = SDRDAEMONFEC_UDPSIZE;
 | 
			
		||||
    static const int m_nbOriginalBlocks = SDRDAEMONFEC_NBORIGINALBLOCKS;
 | 
			
		||||
    static const int m_udpPayloadSize = SDRDAEMONSOURCE_UDPSIZE;
 | 
			
		||||
    static const int m_nbOriginalBlocks = SDRDAEMONSOURCE_NBORIGINALBLOCKS;
 | 
			
		||||
	static const int m_sampleSize;
 | 
			
		||||
	static const int m_iqSampleSize;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    static const int nbDecoderSlots = SDRDAEMONFEC_NBDECODERSLOTS;
 | 
			
		||||
    static const int nbDecoderSlots = SDRDAEMONSOURCE_NBDECODERSLOTS;
 | 
			
		||||
 | 
			
		||||
#pragma pack(push, 1)
 | 
			
		||||
    struct BufferFrame
 | 
			
		||||
 | 
			
		||||
@ -41,7 +41,7 @@
 | 
			
		||||
#include <dsp/filerecord.h>
 | 
			
		||||
#include "sdrdaemonsourcegui.h"
 | 
			
		||||
 | 
			
		||||
SDRdaemonFECGui::SDRdaemonFECGui(DeviceSourceAPI *deviceAPI, QWidget* parent) :
 | 
			
		||||
SDRdaemonSourceGui::SDRdaemonSourceGui(DeviceSourceAPI *deviceAPI, QWidget* parent) :
 | 
			
		||||
	QWidget(parent),
 | 
			
		||||
	ui(new Ui::SDRdaemonSourceGui),
 | 
			
		||||
	m_deviceAPI(deviceAPI),
 | 
			
		||||
@ -98,7 +98,7 @@ SDRdaemonFECGui::SDRdaemonFECGui(DeviceSourceAPI *deviceAPI, QWidget* parent) :
 | 
			
		||||
	connect(&(deviceAPI->getMainWindow()->getMasterTimer()), SIGNAL(timeout()), this, SLOT(tick()));
 | 
			
		||||
    connect(&m_updateTimer, SIGNAL(timeout()), this, SLOT(updateHardware()));
 | 
			
		||||
 | 
			
		||||
	m_sampleSource = new SDRdaemonFECInput(deviceAPI->getMainWindow()->getMasterTimer(), m_deviceAPI);
 | 
			
		||||
	m_sampleSource = new SDRdaemonSourceInput(deviceAPI->getMainWindow()->getMasterTimer(), m_deviceAPI);
 | 
			
		||||
	connect(m_sampleSource->getOutputMessageQueueToGUI(), SIGNAL(messageEnqueued()), this, SLOT(handleSourceMessages()));
 | 
			
		||||
	m_deviceAPI->setSource(m_sampleSource);
 | 
			
		||||
 | 
			
		||||
@ -120,7 +120,7 @@ SDRdaemonFECGui::SDRdaemonFECGui(DeviceSourceAPI *deviceAPI, QWidget* parent) :
 | 
			
		||||
    sendSettings();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SDRdaemonFECGui::~SDRdaemonFECGui()
 | 
			
		||||
SDRdaemonSourceGui::~SDRdaemonSourceGui()
 | 
			
		||||
{
 | 
			
		||||
    m_deviceAPI->removeSink(m_fileSink);
 | 
			
		||||
    delete m_fileSink;
 | 
			
		||||
@ -128,27 +128,27 @@ SDRdaemonFECGui::~SDRdaemonFECGui()
 | 
			
		||||
	delete ui;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::blockApplySettings(bool block)
 | 
			
		||||
void SDRdaemonSourceGui::blockApplySettings(bool block)
 | 
			
		||||
{
 | 
			
		||||
    m_doApplySettings = !block;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::destroy()
 | 
			
		||||
void SDRdaemonSourceGui::destroy()
 | 
			
		||||
{
 | 
			
		||||
	delete this;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::setName(const QString& name)
 | 
			
		||||
void SDRdaemonSourceGui::setName(const QString& name)
 | 
			
		||||
{
 | 
			
		||||
	setObjectName(name);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString SDRdaemonFECGui::getName() const
 | 
			
		||||
QString SDRdaemonSourceGui::getName() const
 | 
			
		||||
{
 | 
			
		||||
	return objectName();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::resetToDefaults()
 | 
			
		||||
void SDRdaemonSourceGui::resetToDefaults()
 | 
			
		||||
{
 | 
			
		||||
    blockApplySettings(true);
 | 
			
		||||
    m_settings.resetToDefaults();
 | 
			
		||||
@ -157,12 +157,12 @@ void SDRdaemonFECGui::resetToDefaults()
 | 
			
		||||
    sendSettings();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QByteArray SDRdaemonFECGui::serialize() const
 | 
			
		||||
QByteArray SDRdaemonSourceGui::serialize() const
 | 
			
		||||
{
 | 
			
		||||
    return m_settings.serialize();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool SDRdaemonFECGui::deserialize(const QByteArray& data)
 | 
			
		||||
bool SDRdaemonSourceGui::deserialize(const QByteArray& data)
 | 
			
		||||
{
 | 
			
		||||
    blockApplySettings(true);
 | 
			
		||||
 | 
			
		||||
@ -185,12 +185,12 @@ bool SDRdaemonFECGui::deserialize(const QByteArray& data)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
qint64 SDRdaemonFECGui::getCenterFrequency() const
 | 
			
		||||
qint64 SDRdaemonSourceGui::getCenterFrequency() const
 | 
			
		||||
{
 | 
			
		||||
    return m_settings.m_centerFrequency;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::setCenterFrequency(qint64 centerFrequency)
 | 
			
		||||
void SDRdaemonSourceGui::setCenterFrequency(qint64 centerFrequency)
 | 
			
		||||
{
 | 
			
		||||
    m_settings.m_centerFrequency = centerFrequency;
 | 
			
		||||
    displaySettings();
 | 
			
		||||
@ -198,17 +198,17 @@ void SDRdaemonFECGui::setCenterFrequency(qint64 centerFrequency)
 | 
			
		||||
    sendSettings();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool SDRdaemonFECGui::handleMessage(const Message& message)
 | 
			
		||||
bool SDRdaemonSourceGui::handleMessage(const Message& message)
 | 
			
		||||
{
 | 
			
		||||
	if (SDRdaemonFECInput::MsgReportSDRdaemonAcquisition::match(message))
 | 
			
		||||
	if (SDRdaemonSourceInput::MsgReportSDRdaemonAcquisition::match(message))
 | 
			
		||||
	{
 | 
			
		||||
		m_acquisition = ((SDRdaemonFECInput::MsgReportSDRdaemonAcquisition&)message).getAcquisition();
 | 
			
		||||
		m_acquisition = ((SDRdaemonSourceInput::MsgReportSDRdaemonAcquisition&)message).getAcquisition();
 | 
			
		||||
		updateWithAcquisition();
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
	else if (SDRdaemonFECInput::MsgReportSDRdaemonFECStreamData::match(message))
 | 
			
		||||
	else if (SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamData::match(message))
 | 
			
		||||
	{
 | 
			
		||||
        int sampleRate = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamData&)message).getSampleRate();
 | 
			
		||||
        int sampleRate = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamData&)message).getSampleRate();
 | 
			
		||||
 | 
			
		||||
        if (m_sampleRate != sampleRate)
 | 
			
		||||
        {
 | 
			
		||||
@ -217,30 +217,30 @@ bool SDRdaemonFECGui::handleMessage(const Message& message)
 | 
			
		||||
            sendControl();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        m_centerFrequency = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamData&)message).getCenterFrequency();
 | 
			
		||||
        m_startingTimeStamp.tv_sec = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamData&)message).get_tv_sec();
 | 
			
		||||
        m_startingTimeStamp.tv_usec = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamData&)message).get_tv_usec();
 | 
			
		||||
        m_centerFrequency = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamData&)message).getCenterFrequency();
 | 
			
		||||
        m_startingTimeStamp.tv_sec = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamData&)message).get_tv_sec();
 | 
			
		||||
        m_startingTimeStamp.tv_usec = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamData&)message).get_tv_usec();
 | 
			
		||||
 | 
			
		||||
        updateWithStreamData();
 | 
			
		||||
        return true;
 | 
			
		||||
	}
 | 
			
		||||
	else if (SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming::match(message))
 | 
			
		||||
	else if (SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming::match(message))
 | 
			
		||||
	{
 | 
			
		||||
		m_startingTimeStamp.tv_sec = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).get_tv_sec();
 | 
			
		||||
		m_startingTimeStamp.tv_usec = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).get_tv_usec();
 | 
			
		||||
		m_framesDecodingStatus = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getFramesDecodingStatus();
 | 
			
		||||
		m_allBlocksReceived = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).allBlocksReceived();
 | 
			
		||||
		m_bufferLengthInSecs = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getBufferLengthInSecs();
 | 
			
		||||
        m_bufferGauge = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getBufferGauge();
 | 
			
		||||
        m_minNbBlocks = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getMinNbBlocks();
 | 
			
		||||
        m_minNbOriginalBlocks = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getMinNbOriginalBlocks();
 | 
			
		||||
        m_maxNbRecovery = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getMaxNbRecovery();
 | 
			
		||||
        m_avgNbBlocks = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getAvgNbBlocks();
 | 
			
		||||
        m_avgNbOriginalBlocks = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getAvgNbOriginalBlocks();
 | 
			
		||||
        m_avgNbRecovery = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getAvgNbRecovery();
 | 
			
		||||
        m_nbOriginalBlocks = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getNbOriginalBlocksPerFrame();
 | 
			
		||||
		m_startingTimeStamp.tv_sec = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).get_tv_sec();
 | 
			
		||||
		m_startingTimeStamp.tv_usec = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).get_tv_usec();
 | 
			
		||||
		m_framesDecodingStatus = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getFramesDecodingStatus();
 | 
			
		||||
		m_allBlocksReceived = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).allBlocksReceived();
 | 
			
		||||
		m_bufferLengthInSecs = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getBufferLengthInSecs();
 | 
			
		||||
        m_bufferGauge = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getBufferGauge();
 | 
			
		||||
        m_minNbBlocks = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getMinNbBlocks();
 | 
			
		||||
        m_minNbOriginalBlocks = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getMinNbOriginalBlocks();
 | 
			
		||||
        m_maxNbRecovery = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getMaxNbRecovery();
 | 
			
		||||
        m_avgNbBlocks = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getAvgNbBlocks();
 | 
			
		||||
        m_avgNbOriginalBlocks = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getAvgNbOriginalBlocks();
 | 
			
		||||
        m_avgNbRecovery = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getAvgNbRecovery();
 | 
			
		||||
        m_nbOriginalBlocks = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getNbOriginalBlocksPerFrame();
 | 
			
		||||
 | 
			
		||||
        int nbFECBlocks = ((SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming&)message).getNbFECBlocksPerFrame();
 | 
			
		||||
        int nbFECBlocks = ((SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming&)message).getNbFECBlocksPerFrame();
 | 
			
		||||
 | 
			
		||||
        if (m_nbFECBlocks != nbFECBlocks)
 | 
			
		||||
        {
 | 
			
		||||
@ -258,7 +258,7 @@ bool SDRdaemonFECGui::handleMessage(const Message& message)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::handleDSPMessages()
 | 
			
		||||
void SDRdaemonSourceGui::handleDSPMessages()
 | 
			
		||||
{
 | 
			
		||||
    Message* message;
 | 
			
		||||
 | 
			
		||||
@ -280,7 +280,7 @@ void SDRdaemonFECGui::handleDSPMessages()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::handleSourceMessages()
 | 
			
		||||
void SDRdaemonSourceGui::handleSourceMessages()
 | 
			
		||||
{
 | 
			
		||||
	Message* message;
 | 
			
		||||
 | 
			
		||||
@ -295,20 +295,20 @@ void SDRdaemonFECGui::handleSourceMessages()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::updateSampleRateAndFrequency()
 | 
			
		||||
void SDRdaemonSourceGui::updateSampleRateAndFrequency()
 | 
			
		||||
{
 | 
			
		||||
    m_deviceAPI->getSpectrum()->setSampleRate(m_deviceSampleRate);
 | 
			
		||||
    m_deviceAPI->getSpectrum()->setCenterFrequency(m_deviceCenterFrequency);
 | 
			
		||||
    ui->deviceRateText->setText(tr("%1k").arg((float)m_deviceSampleRate / 1000));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::updateTxDelay()
 | 
			
		||||
void SDRdaemonSourceGui::updateTxDelay()
 | 
			
		||||
{
 | 
			
		||||
    m_txDelay = ((127*127*m_settings.m_txDelay) / m_sampleRate)/(128 + m_nbFECBlocks);
 | 
			
		||||
    ui->txDelayText->setToolTip(tr("%1 us").arg(QString::number(m_txDelay*1e6, 'f', 0)));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::displaySettings()
 | 
			
		||||
void SDRdaemonSourceGui::displaySettings()
 | 
			
		||||
{
 | 
			
		||||
    ui->centerFrequency->setValue(m_settings.m_centerFrequency / 1000);
 | 
			
		||||
    ui->deviceRateText->setText(tr("%1k").arg(m_sampleRate / 1000.0));
 | 
			
		||||
@ -336,10 +336,10 @@ void SDRdaemonFECGui::displaySettings()
 | 
			
		||||
	ui->iqImbalance->setChecked(m_settings.m_iqCorrection);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::sendControl(bool force)
 | 
			
		||||
void SDRdaemonSourceGui::sendControl(bool force)
 | 
			
		||||
{
 | 
			
		||||
    QString remoteAddress;
 | 
			
		||||
    ((SDRdaemonFECInput *) m_sampleSource)->getRemoteAddress(remoteAddress);
 | 
			
		||||
    ((SDRdaemonSourceInput *) m_sampleSource)->getRemoteAddress(remoteAddress);
 | 
			
		||||
 | 
			
		||||
    if ((remoteAddress != m_remoteAddress) ||
 | 
			
		||||
        (m_settings.m_controlPort != m_controlSettings.m_controlPort) || force)
 | 
			
		||||
@ -454,13 +454,13 @@ void SDRdaemonFECGui::sendControl(bool force)
 | 
			
		||||
    m_controlSettings.m_specificParameters = m_settings.m_specificParameters;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::sendSettings()
 | 
			
		||||
void SDRdaemonSourceGui::sendSettings()
 | 
			
		||||
{
 | 
			
		||||
    if(!m_updateTimer.isActive())
 | 
			
		||||
        m_updateTimer.start(100);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_applyButton_clicked(bool checked __attribute__((unused)))
 | 
			
		||||
void SDRdaemonSourceGui::on_applyButton_clicked(bool checked __attribute__((unused)))
 | 
			
		||||
{
 | 
			
		||||
    m_settings.m_address = ui->address->text();
 | 
			
		||||
 | 
			
		||||
@ -483,20 +483,20 @@ void SDRdaemonFECGui::on_applyButton_clicked(bool checked __attribute__((unused)
 | 
			
		||||
    configureUDPLink();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_sendButton_clicked(bool checked __attribute__((unused)))
 | 
			
		||||
void SDRdaemonSourceGui::on_sendButton_clicked(bool checked __attribute__((unused)))
 | 
			
		||||
{
 | 
			
		||||
    updateTxDelay();
 | 
			
		||||
    sendControl(true);
 | 
			
		||||
	ui->specificParms->setCursorPosition(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_address_returnPressed()
 | 
			
		||||
void SDRdaemonSourceGui::on_address_returnPressed()
 | 
			
		||||
{
 | 
			
		||||
    m_settings.m_address = ui->address->text();
 | 
			
		||||
    configureUDPLink();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_dataPort_returnPressed()
 | 
			
		||||
void SDRdaemonSourceGui::on_dataPort_returnPressed()
 | 
			
		||||
{
 | 
			
		||||
    bool dataOk;
 | 
			
		||||
    int udpDataPort = ui->dataPort->text().toInt(&dataOk);
 | 
			
		||||
@ -513,7 +513,7 @@ void SDRdaemonFECGui::on_dataPort_returnPressed()
 | 
			
		||||
    configureUDPLink();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_controlPort_returnPressed()
 | 
			
		||||
void SDRdaemonSourceGui::on_controlPort_returnPressed()
 | 
			
		||||
{
 | 
			
		||||
    bool ctlOk;
 | 
			
		||||
    int udpCtlPort = ui->controlPort->text().toInt(&ctlOk);
 | 
			
		||||
@ -530,7 +530,7 @@ void SDRdaemonFECGui::on_controlPort_returnPressed()
 | 
			
		||||
    sendControl();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_dcOffset_toggled(bool checked)
 | 
			
		||||
void SDRdaemonSourceGui::on_dcOffset_toggled(bool checked)
 | 
			
		||||
{
 | 
			
		||||
	if (m_dcBlock != checked)
 | 
			
		||||
	{
 | 
			
		||||
@ -539,7 +539,7 @@ void SDRdaemonFECGui::on_dcOffset_toggled(bool checked)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_iqImbalance_toggled(bool checked)
 | 
			
		||||
void SDRdaemonSourceGui::on_iqImbalance_toggled(bool checked)
 | 
			
		||||
{
 | 
			
		||||
	if (m_iqCorrection != checked)
 | 
			
		||||
	{
 | 
			
		||||
@ -548,19 +548,19 @@ void SDRdaemonFECGui::on_iqImbalance_toggled(bool checked)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_freq_changed(quint64 value)
 | 
			
		||||
void SDRdaemonSourceGui::on_freq_changed(quint64 value)
 | 
			
		||||
{
 | 
			
		||||
    m_settings.m_centerFrequency = value * 1000;
 | 
			
		||||
    sendControl();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_sampleRate_changed(quint64 value)
 | 
			
		||||
void SDRdaemonSourceGui::on_sampleRate_changed(quint64 value)
 | 
			
		||||
{
 | 
			
		||||
    m_settings.m_sampleRate = value;
 | 
			
		||||
    sendControl();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_specificParms_returnPressed()
 | 
			
		||||
void SDRdaemonSourceGui::on_specificParms_returnPressed()
 | 
			
		||||
{
 | 
			
		||||
    if ((ui->specificParms->text()).size() > 0) {
 | 
			
		||||
        m_settings.m_specificParameters = ui->specificParms->text();
 | 
			
		||||
@ -568,19 +568,19 @@ void SDRdaemonFECGui::on_specificParms_returnPressed()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_decim_currentIndexChanged(int index __attribute__((unused)))
 | 
			
		||||
void SDRdaemonSourceGui::on_decim_currentIndexChanged(int index __attribute__((unused)))
 | 
			
		||||
{
 | 
			
		||||
    m_settings.m_log2Decim = ui->decim->currentIndex();
 | 
			
		||||
    sendControl();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_fcPos_currentIndexChanged(int index __attribute__((unused)))
 | 
			
		||||
void SDRdaemonSourceGui::on_fcPos_currentIndexChanged(int index __attribute__((unused)))
 | 
			
		||||
{
 | 
			
		||||
    m_settings.m_fcPos = ui->fcPos->currentIndex();
 | 
			
		||||
    sendControl();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_txDelay_valueChanged(int value)
 | 
			
		||||
void SDRdaemonSourceGui::on_txDelay_valueChanged(int value)
 | 
			
		||||
{
 | 
			
		||||
    m_settings.m_txDelay = value / 100.0;
 | 
			
		||||
    ui->txDelayText->setText(tr("%1").arg(value));
 | 
			
		||||
@ -588,7 +588,7 @@ void SDRdaemonFECGui::on_txDelay_valueChanged(int value)
 | 
			
		||||
    sendControl();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_nbFECBlocks_valueChanged(int value)
 | 
			
		||||
void SDRdaemonSourceGui::on_nbFECBlocks_valueChanged(int value)
 | 
			
		||||
{
 | 
			
		||||
    m_settings.m_nbFECBlocks = value;
 | 
			
		||||
    QString nstr = QString("%1").arg(m_settings.m_nbFECBlocks, 2, 10, QChar('0'));
 | 
			
		||||
@ -596,7 +596,7 @@ void SDRdaemonFECGui::on_nbFECBlocks_valueChanged(int value)
 | 
			
		||||
    sendControl();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_startStop_toggled(bool checked)
 | 
			
		||||
void SDRdaemonSourceGui::on_startStop_toggled(bool checked)
 | 
			
		||||
{
 | 
			
		||||
    if (checked)
 | 
			
		||||
    {
 | 
			
		||||
@ -613,7 +613,7 @@ void SDRdaemonFECGui::on_startStop_toggled(bool checked)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_record_toggled(bool checked)
 | 
			
		||||
void SDRdaemonSourceGui::on_record_toggled(bool checked)
 | 
			
		||||
{
 | 
			
		||||
    if (checked)
 | 
			
		||||
    {
 | 
			
		||||
@ -627,7 +627,7 @@ void SDRdaemonFECGui::on_record_toggled(bool checked)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::on_eventCountsReset_clicked(bool checked __attribute__((unused)))
 | 
			
		||||
void SDRdaemonSourceGui::on_eventCountsReset_clicked(bool checked __attribute__((unused)))
 | 
			
		||||
{
 | 
			
		||||
    m_countUnrecoverable = 0;
 | 
			
		||||
    m_countRecovered = 0;
 | 
			
		||||
@ -636,7 +636,7 @@ void SDRdaemonFECGui::on_eventCountsReset_clicked(bool checked __attribute__((un
 | 
			
		||||
    displayEventTimer();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::displayEventCounts()
 | 
			
		||||
void SDRdaemonSourceGui::displayEventCounts()
 | 
			
		||||
{
 | 
			
		||||
    QString nstr = QString("%1").arg(m_countUnrecoverable, 3, 10, QChar('0'));
 | 
			
		||||
    ui->eventUnrecText->setText(nstr);
 | 
			
		||||
@ -644,7 +644,7 @@ void SDRdaemonFECGui::displayEventCounts()
 | 
			
		||||
    ui->eventRecText->setText(nstr);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::displayEventTimer()
 | 
			
		||||
void SDRdaemonSourceGui::displayEventTimer()
 | 
			
		||||
{
 | 
			
		||||
    int elapsedTimeMillis = m_eventsTime.elapsed();
 | 
			
		||||
    QTime recordLength(0, 0, 0, 0);
 | 
			
		||||
@ -653,32 +653,32 @@ void SDRdaemonFECGui::displayEventTimer()
 | 
			
		||||
    ui->eventCountsTimeText->setText(s_time);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::configureUDPLink()
 | 
			
		||||
void SDRdaemonSourceGui::configureUDPLink()
 | 
			
		||||
{
 | 
			
		||||
	qDebug() << "SDRdaemonGui::configureUDPLink: " << m_settings.m_address.toStdString().c_str()
 | 
			
		||||
			<< " : " << m_settings.m_dataPort;
 | 
			
		||||
 | 
			
		||||
	SDRdaemonFECInput::MsgConfigureSDRdaemonUDPLink* message = SDRdaemonFECInput::MsgConfigureSDRdaemonUDPLink::create(m_settings.m_address, m_settings.m_dataPort);
 | 
			
		||||
	SDRdaemonSourceInput::MsgConfigureSDRdaemonUDPLink* message = SDRdaemonSourceInput::MsgConfigureSDRdaemonUDPLink::create(m_settings.m_address, m_settings.m_dataPort);
 | 
			
		||||
	m_sampleSource->getInputMessageQueue()->push(message);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::configureAutoCorrections()
 | 
			
		||||
void SDRdaemonSourceGui::configureAutoCorrections()
 | 
			
		||||
{
 | 
			
		||||
	SDRdaemonFECInput::MsgConfigureSDRdaemonAutoCorr* message = SDRdaemonFECInput::MsgConfigureSDRdaemonAutoCorr::create(m_dcBlock, m_iqCorrection);
 | 
			
		||||
	SDRdaemonSourceInput::MsgConfigureSDRdaemonAutoCorr* message = SDRdaemonSourceInput::MsgConfigureSDRdaemonAutoCorr::create(m_dcBlock, m_iqCorrection);
 | 
			
		||||
	m_sampleSource->getInputMessageQueue()->push(message);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::updateWithAcquisition()
 | 
			
		||||
void SDRdaemonSourceGui::updateWithAcquisition()
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::updateWithStreamData()
 | 
			
		||||
void SDRdaemonSourceGui::updateWithStreamData()
 | 
			
		||||
{
 | 
			
		||||
	ui->centerFrequency->setValue(m_centerFrequency / 1000);
 | 
			
		||||
	updateWithStreamTime();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::updateWithStreamTime()
 | 
			
		||||
void SDRdaemonSourceGui::updateWithStreamTime()
 | 
			
		||||
{
 | 
			
		||||
	bool updateEventCounts = false;
 | 
			
		||||
    quint64 startingTimeStampMsec = ((quint64) m_startingTimeStamp.tv_sec * 1000LL) + ((quint64) m_startingTimeStamp.tv_usec / 1000LL);
 | 
			
		||||
@ -730,16 +730,16 @@ void SDRdaemonFECGui::updateWithStreamTime()
 | 
			
		||||
    displayEventTimer();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::updateHardware()
 | 
			
		||||
void SDRdaemonSourceGui::updateHardware()
 | 
			
		||||
{
 | 
			
		||||
    qDebug() << "SDRdaemonSinkGui::updateHardware";
 | 
			
		||||
    SDRdaemonFECInput::MsgConfigureSDRdaemonFEC* message = SDRdaemonFECInput::MsgConfigureSDRdaemonFEC::create(m_settings, m_forceSettings);
 | 
			
		||||
    SDRdaemonSourceInput::MsgConfigureSDRdaemonSource* message = SDRdaemonSourceInput::MsgConfigureSDRdaemonSource::create(m_settings, m_forceSettings);
 | 
			
		||||
    m_sampleSource->getInputMessageQueue()->push(message);
 | 
			
		||||
    m_forceSettings = false;
 | 
			
		||||
    m_updateTimer.stop();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::updateStatus()
 | 
			
		||||
void SDRdaemonSourceGui::updateStatus()
 | 
			
		||||
{
 | 
			
		||||
    int state = m_deviceAPI->state();
 | 
			
		||||
 | 
			
		||||
@ -768,10 +768,10 @@ void SDRdaemonFECGui::updateStatus()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECGui::tick()
 | 
			
		||||
void SDRdaemonSourceGui::tick()
 | 
			
		||||
{
 | 
			
		||||
	if ((++m_tickCount & 0xf) == 0) {
 | 
			
		||||
		SDRdaemonFECInput::MsgConfigureSDRdaemonStreamTiming* message = SDRdaemonFECInput::MsgConfigureSDRdaemonStreamTiming::create();
 | 
			
		||||
		SDRdaemonSourceInput::MsgConfigureSDRdaemonStreamTiming* message = SDRdaemonSourceInput::MsgConfigureSDRdaemonStreamTiming::create();
 | 
			
		||||
		m_sampleSource->getInputMessageQueue()->push(message);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -30,12 +30,12 @@ namespace Ui {
 | 
			
		||||
	class SDRdaemonSourceGui;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class SDRdaemonFECGui : public QWidget, public PluginGUI {
 | 
			
		||||
class SDRdaemonSourceGui : public QWidget, public PluginGUI {
 | 
			
		||||
	Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	explicit SDRdaemonFECGui(DeviceSourceAPI *deviceAPI, QWidget* parent = NULL);
 | 
			
		||||
	virtual ~SDRdaemonFECGui();
 | 
			
		||||
	explicit SDRdaemonSourceGui(DeviceSourceAPI *deviceAPI, QWidget* parent = NULL);
 | 
			
		||||
	virtual ~SDRdaemonSourceGui();
 | 
			
		||||
	void destroy();
 | 
			
		||||
 | 
			
		||||
	void setName(const QString& name);
 | 
			
		||||
@ -52,8 +52,8 @@ private:
 | 
			
		||||
	Ui::SDRdaemonSourceGui* ui;
 | 
			
		||||
 | 
			
		||||
	DeviceSourceAPI* m_deviceAPI;
 | 
			
		||||
    SDRdaemonFECSettings m_settings;        //!< current settings
 | 
			
		||||
    SDRdaemonFECSettings m_controlSettings; //!< settings last sent to device via control port
 | 
			
		||||
    SDRdaemonSourceSettings m_settings;        //!< current settings
 | 
			
		||||
    SDRdaemonSourceSettings m_controlSettings; //!< settings last sent to device via control port
 | 
			
		||||
	QTimer m_updateTimer;
 | 
			
		||||
	QTimer m_statusTimer;
 | 
			
		||||
	DeviceSampleSource* m_sampleSource;
 | 
			
		||||
 | 
			
		||||
@ -28,16 +28,16 @@
 | 
			
		||||
#include "sdrdaemonsourceinput.h"
 | 
			
		||||
#include "sdrdaemonsourceudphandler.h"
 | 
			
		||||
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonFECInput::MsgConfigureSDRdaemonFEC, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonFECInput::MsgConfigureSDRdaemonUDPLink, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonFECInput::MsgConfigureSDRdaemonAutoCorr, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonFECInput::MsgConfigureSDRdaemonWork, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonFECInput::MsgConfigureSDRdaemonStreamTiming, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonFECInput::MsgReportSDRdaemonAcquisition, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonFECInput::MsgReportSDRdaemonFECStreamData, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonSourceInput::MsgConfigureSDRdaemonSource, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonSourceInput::MsgConfigureSDRdaemonUDPLink, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonSourceInput::MsgConfigureSDRdaemonAutoCorr, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonSourceInput::MsgConfigureSDRdaemonWork, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonSourceInput::MsgConfigureSDRdaemonStreamTiming, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonSourceInput::MsgReportSDRdaemonAcquisition, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamData, Message)
 | 
			
		||||
MESSAGE_CLASS_DEFINITION(SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming, Message)
 | 
			
		||||
 | 
			
		||||
SDRdaemonFECInput::SDRdaemonFECInput(const QTimer& masterTimer, DeviceSourceAPI *deviceAPI) :
 | 
			
		||||
SDRdaemonSourceInput::SDRdaemonSourceInput(const QTimer& masterTimer, DeviceSourceAPI *deviceAPI) :
 | 
			
		||||
    m_deviceAPI(deviceAPI),
 | 
			
		||||
	m_address("127.0.0.1"),
 | 
			
		||||
	m_port(9090),
 | 
			
		||||
@ -51,17 +51,17 @@ SDRdaemonFECInput::SDRdaemonFECInput(const QTimer& masterTimer, DeviceSourceAPI
 | 
			
		||||
    m_autoCorrBuffer(false)
 | 
			
		||||
{
 | 
			
		||||
	m_sampleFifo.setSize(96000 * 4);
 | 
			
		||||
	m_SDRdaemonUDPHandler = new SDRdaemonFECUDPHandler(&m_sampleFifo, getOutputMessageQueueToGUI(), m_deviceAPI);
 | 
			
		||||
	m_SDRdaemonUDPHandler = new SDRdaemonSourceUDPHandler(&m_sampleFifo, getOutputMessageQueueToGUI(), m_deviceAPI);
 | 
			
		||||
	m_SDRdaemonUDPHandler->connectTimer(&m_masterTimer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SDRdaemonFECInput::~SDRdaemonFECInput()
 | 
			
		||||
SDRdaemonSourceInput::~SDRdaemonSourceInput()
 | 
			
		||||
{
 | 
			
		||||
	stop();
 | 
			
		||||
	delete m_SDRdaemonUDPHandler;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool SDRdaemonFECInput::start()
 | 
			
		||||
bool SDRdaemonSourceInput::start()
 | 
			
		||||
{
 | 
			
		||||
	qDebug() << "SDRdaemonInput::start";
 | 
			
		||||
	MsgConfigureSDRdaemonWork *command = MsgConfigureSDRdaemonWork::create(true);
 | 
			
		||||
@ -69,34 +69,34 @@ bool SDRdaemonFECInput::start()
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECInput::stop()
 | 
			
		||||
void SDRdaemonSourceInput::stop()
 | 
			
		||||
{
 | 
			
		||||
	qDebug() << "SDRdaemonInput::stop";
 | 
			
		||||
	MsgConfigureSDRdaemonWork *command = MsgConfigureSDRdaemonWork::create(false);
 | 
			
		||||
	getInputMessageQueue()->push(command);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const QString& SDRdaemonFECInput::getDeviceDescription() const
 | 
			
		||||
const QString& SDRdaemonSourceInput::getDeviceDescription() const
 | 
			
		||||
{
 | 
			
		||||
	return m_deviceDescription;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int SDRdaemonFECInput::getSampleRate() const
 | 
			
		||||
int SDRdaemonSourceInput::getSampleRate() const
 | 
			
		||||
{
 | 
			
		||||
	return m_sampleRate;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
quint64 SDRdaemonFECInput::getCenterFrequency() const
 | 
			
		||||
quint64 SDRdaemonSourceInput::getCenterFrequency() const
 | 
			
		||||
{
 | 
			
		||||
	return m_centerFrequency;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
std::time_t SDRdaemonFECInput::getStartingTimeStamp() const
 | 
			
		||||
std::time_t SDRdaemonSourceInput::getStartingTimeStamp() const
 | 
			
		||||
{
 | 
			
		||||
	return m_startingTimeStamp;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECInput::getRemoteAddress(QString &s)
 | 
			
		||||
void SDRdaemonSourceInput::getRemoteAddress(QString &s)
 | 
			
		||||
{
 | 
			
		||||
	if (m_SDRdaemonUDPHandler) {
 | 
			
		||||
		m_SDRdaemonUDPHandler->getRemoteAddress(s);
 | 
			
		||||
@ -104,9 +104,9 @@ void SDRdaemonFECInput::getRemoteAddress(QString &s)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool SDRdaemonFECInput::handleMessage(const Message& message)
 | 
			
		||||
bool SDRdaemonSourceInput::handleMessage(const Message& message)
 | 
			
		||||
{
 | 
			
		||||
    if (MsgConfigureSDRdaemonFEC::match(message))
 | 
			
		||||
    if (MsgConfigureSDRdaemonSource::match(message))
 | 
			
		||||
    {
 | 
			
		||||
        qDebug() << "SDRdaemonFECInput::handleMessage:" << message.getIdentifier();
 | 
			
		||||
        //MsgConfigureSDRdaemonFEC& conf = (MsgConfigureSDRdaemonFEC&) message;
 | 
			
		||||
 | 
			
		||||
@ -27,27 +27,27 @@
 | 
			
		||||
#include "sdrdaemonsourcesettings.h"
 | 
			
		||||
 | 
			
		||||
class DeviceSourceAPI;
 | 
			
		||||
class SDRdaemonFECUDPHandler;
 | 
			
		||||
class SDRdaemonSourceUDPHandler;
 | 
			
		||||
 | 
			
		||||
class SDRdaemonFECInput : public DeviceSampleSource {
 | 
			
		||||
class SDRdaemonSourceInput : public DeviceSampleSource {
 | 
			
		||||
public:
 | 
			
		||||
    class MsgConfigureSDRdaemonFEC : public Message {
 | 
			
		||||
    class MsgConfigureSDRdaemonSource : public Message {
 | 
			
		||||
        MESSAGE_CLASS_DECLARATION
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
        const SDRdaemonFECSettings& getSettings() const { return m_settings; }
 | 
			
		||||
        const SDRdaemonSourceSettings& getSettings() const { return m_settings; }
 | 
			
		||||
        bool getForce() const { return m_force; }
 | 
			
		||||
 | 
			
		||||
        static MsgConfigureSDRdaemonFEC* create(const SDRdaemonFECSettings& settings, bool force = false)
 | 
			
		||||
        static MsgConfigureSDRdaemonSource* create(const SDRdaemonSourceSettings& settings, bool force = false)
 | 
			
		||||
        {
 | 
			
		||||
            return new MsgConfigureSDRdaemonFEC(settings, force);
 | 
			
		||||
            return new MsgConfigureSDRdaemonSource(settings, force);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        SDRdaemonFECSettings m_settings;
 | 
			
		||||
        SDRdaemonSourceSettings m_settings;
 | 
			
		||||
        bool m_force;
 | 
			
		||||
 | 
			
		||||
        MsgConfigureSDRdaemonFEC(const SDRdaemonFECSettings& settings, bool force) :
 | 
			
		||||
        MsgConfigureSDRdaemonSource(const SDRdaemonSourceSettings& settings, bool force) :
 | 
			
		||||
            Message(),
 | 
			
		||||
            m_settings(settings),
 | 
			
		||||
            m_force(force)
 | 
			
		||||
@ -156,7 +156,7 @@ public:
 | 
			
		||||
		{ }
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	class MsgReportSDRdaemonFECStreamData : public Message {
 | 
			
		||||
	class MsgReportSDRdaemonSourceStreamData : public Message {
 | 
			
		||||
		MESSAGE_CLASS_DECLARATION
 | 
			
		||||
 | 
			
		||||
	public:
 | 
			
		||||
@ -165,9 +165,9 @@ public:
 | 
			
		||||
		uint32_t get_tv_sec() const { return m_tv_sec; }
 | 
			
		||||
		uint32_t get_tv_usec() const { return m_tv_usec; }
 | 
			
		||||
 | 
			
		||||
		static MsgReportSDRdaemonFECStreamData* create(int sampleRate, quint64 centerFrequency, uint32_t tv_sec, uint32_t tv_usec)
 | 
			
		||||
		static MsgReportSDRdaemonSourceStreamData* create(int sampleRate, quint64 centerFrequency, uint32_t tv_sec, uint32_t tv_usec)
 | 
			
		||||
		{
 | 
			
		||||
			return new MsgReportSDRdaemonFECStreamData(sampleRate, centerFrequency, tv_sec, tv_usec);
 | 
			
		||||
			return new MsgReportSDRdaemonSourceStreamData(sampleRate, centerFrequency, tv_sec, tv_usec);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	protected:
 | 
			
		||||
@ -176,7 +176,7 @@ public:
 | 
			
		||||
		uint32_t m_tv_sec;
 | 
			
		||||
		uint32_t m_tv_usec;
 | 
			
		||||
 | 
			
		||||
		MsgReportSDRdaemonFECStreamData(int sampleRate, quint64 centerFrequency, uint32_t tv_sec, uint32_t tv_usec) :
 | 
			
		||||
		MsgReportSDRdaemonSourceStreamData(int sampleRate, quint64 centerFrequency, uint32_t tv_sec, uint32_t tv_usec) :
 | 
			
		||||
			Message(),
 | 
			
		||||
			m_sampleRate(sampleRate),
 | 
			
		||||
			m_centerFrequency(centerFrequency),
 | 
			
		||||
@ -185,7 +185,7 @@ public:
 | 
			
		||||
		{ }
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	class MsgReportSDRdaemonFECStreamTiming : public Message {
 | 
			
		||||
	class MsgReportSDRdaemonSourceStreamTiming : public Message {
 | 
			
		||||
		MESSAGE_CLASS_DECLARATION
 | 
			
		||||
 | 
			
		||||
	public:
 | 
			
		||||
@ -204,7 +204,7 @@ public:
 | 
			
		||||
        int getNbOriginalBlocksPerFrame() const { return m_nbOriginalBlocksPerFrame; }
 | 
			
		||||
        int getNbFECBlocksPerFrame() const { return m_nbFECBlocksPerFrame; }
 | 
			
		||||
 | 
			
		||||
		static MsgReportSDRdaemonFECStreamTiming* create(uint32_t tv_sec,
 | 
			
		||||
		static MsgReportSDRdaemonSourceStreamTiming* create(uint32_t tv_sec,
 | 
			
		||||
				uint32_t tv_usec,
 | 
			
		||||
				float bufferLenSec,
 | 
			
		||||
                int32_t bufferGauge,
 | 
			
		||||
@ -219,7 +219,7 @@ public:
 | 
			
		||||
                int nbOriginalBlocksPerFrame,
 | 
			
		||||
                int nbFECBlocksPerFrame)
 | 
			
		||||
		{
 | 
			
		||||
			return new MsgReportSDRdaemonFECStreamTiming(tv_sec,
 | 
			
		||||
			return new MsgReportSDRdaemonSourceStreamTiming(tv_sec,
 | 
			
		||||
					tv_usec,
 | 
			
		||||
					bufferLenSec,
 | 
			
		||||
                    bufferGauge,
 | 
			
		||||
@ -251,7 +251,7 @@ public:
 | 
			
		||||
        int      m_nbOriginalBlocksPerFrame;
 | 
			
		||||
        int      m_nbFECBlocksPerFrame;
 | 
			
		||||
 | 
			
		||||
		MsgReportSDRdaemonFECStreamTiming(uint32_t tv_sec,
 | 
			
		||||
		MsgReportSDRdaemonSourceStreamTiming(uint32_t tv_sec,
 | 
			
		||||
				uint32_t tv_usec,
 | 
			
		||||
				float bufferLenSec,
 | 
			
		||||
                int32_t bufferGauge,
 | 
			
		||||
@ -283,8 +283,8 @@ public:
 | 
			
		||||
		{ }
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	SDRdaemonFECInput(const QTimer& masterTimer, DeviceSourceAPI *deviceAPI);
 | 
			
		||||
	virtual ~SDRdaemonFECInput();
 | 
			
		||||
	SDRdaemonSourceInput(const QTimer& masterTimer, DeviceSourceAPI *deviceAPI);
 | 
			
		||||
	virtual ~SDRdaemonSourceInput();
 | 
			
		||||
 | 
			
		||||
	virtual bool start();
 | 
			
		||||
	virtual void stop();
 | 
			
		||||
@ -302,7 +302,7 @@ private:
 | 
			
		||||
	QMutex m_mutex;
 | 
			
		||||
	QString m_address;
 | 
			
		||||
	quint16 m_port;
 | 
			
		||||
	SDRdaemonFECUDPHandler* m_SDRdaemonUDPHandler;
 | 
			
		||||
	SDRdaemonSourceUDPHandler* m_SDRdaemonUDPHandler;
 | 
			
		||||
	QString m_deviceDescription;
 | 
			
		||||
	int m_sampleRate;
 | 
			
		||||
	quint64 m_centerFrequency;
 | 
			
		||||
 | 
			
		||||
@ -24,8 +24,8 @@
 | 
			
		||||
#include "sdrdaemonsourcegui.h"
 | 
			
		||||
#include "sdrdaemonsourceplugin.h"
 | 
			
		||||
 | 
			
		||||
const PluginDescriptor SDRdaemonFECPlugin::m_pluginDescriptor = {
 | 
			
		||||
	QString("SDRdaemon with FEC input"),
 | 
			
		||||
const PluginDescriptor SDRdaemonSourcePlugin::m_pluginDescriptor = {
 | 
			
		||||
	QString("SDRdaemon source input"),
 | 
			
		||||
	QString("3.5.0"),
 | 
			
		||||
	QString("(c) Edouard Griffiths, F4EXB"),
 | 
			
		||||
	QString("https://github.com/f4exb/sdrangel"),
 | 
			
		||||
@ -33,32 +33,32 @@ const PluginDescriptor SDRdaemonFECPlugin::m_pluginDescriptor = {
 | 
			
		||||
	QString("https://github.com/f4exb/sdrangel")
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const QString SDRdaemonFECPlugin::m_hardwareID = "SDRdaemonFEC";
 | 
			
		||||
const QString SDRdaemonFECPlugin::m_deviceTypeID = SDRDAEMONFEC_DEVICE_TYPE_ID;
 | 
			
		||||
const QString SDRdaemonSourcePlugin::m_hardwareID = "SDRdaemonSource";
 | 
			
		||||
const QString SDRdaemonSourcePlugin::m_deviceTypeID = SDRDAEMONSOURCE_DEVICE_TYPE_ID;
 | 
			
		||||
 | 
			
		||||
SDRdaemonFECPlugin::SDRdaemonFECPlugin(QObject* parent) :
 | 
			
		||||
SDRdaemonSourcePlugin::SDRdaemonSourcePlugin(QObject* parent) :
 | 
			
		||||
	QObject(parent)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const PluginDescriptor& SDRdaemonFECPlugin::getPluginDescriptor() const
 | 
			
		||||
const PluginDescriptor& SDRdaemonSourcePlugin::getPluginDescriptor() const
 | 
			
		||||
{
 | 
			
		||||
	return m_pluginDescriptor;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECPlugin::initPlugin(PluginAPI* pluginAPI)
 | 
			
		||||
void SDRdaemonSourcePlugin::initPlugin(PluginAPI* pluginAPI)
 | 
			
		||||
{
 | 
			
		||||
	pluginAPI->registerSampleSource(m_deviceTypeID, this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PluginInterface::SamplingDevices SDRdaemonFECPlugin::enumSampleSources()
 | 
			
		||||
PluginInterface::SamplingDevices SDRdaemonSourcePlugin::enumSampleSources()
 | 
			
		||||
{
 | 
			
		||||
	SamplingDevices result;
 | 
			
		||||
	int count = 1;
 | 
			
		||||
 | 
			
		||||
	for(int i = 0; i < count; i++)
 | 
			
		||||
	{
 | 
			
		||||
		QString displayedName(QString("SDRdaemonFEC[%1]").arg(i));
 | 
			
		||||
		QString displayedName(QString("SDRdaemonSource[%1]").arg(i));
 | 
			
		||||
 | 
			
		||||
		result.append(SamplingDevice(displayedName,
 | 
			
		||||
		        m_hardwareID,
 | 
			
		||||
@ -70,11 +70,11 @@ PluginInterface::SamplingDevices SDRdaemonFECPlugin::enumSampleSources()
 | 
			
		||||
	return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
PluginGUI* SDRdaemonFECPlugin::createSampleSourcePluginGUI(const QString& sourceId, QWidget **widget, DeviceSourceAPI *deviceAPI)
 | 
			
		||||
PluginGUI* SDRdaemonSourcePlugin::createSampleSourcePluginGUI(const QString& sourceId, QWidget **widget, DeviceSourceAPI *deviceAPI)
 | 
			
		||||
{
 | 
			
		||||
	if(sourceId == m_deviceTypeID)
 | 
			
		||||
	{
 | 
			
		||||
		SDRdaemonFECGui* gui = new SDRdaemonFECGui(deviceAPI);
 | 
			
		||||
		SDRdaemonSourceGui* gui = new SDRdaemonSourceGui(deviceAPI);
 | 
			
		||||
		*widget = gui;
 | 
			
		||||
		return gui;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -20,17 +20,17 @@
 | 
			
		||||
#include <QObject>
 | 
			
		||||
#include "plugin/plugininterface.h"
 | 
			
		||||
 | 
			
		||||
#define SDRDAEMONFEC_DEVICE_TYPE_ID "sdrangel.samplesource.sdrdaemonfec"
 | 
			
		||||
#define SDRDAEMONSOURCE_DEVICE_TYPE_ID "sdrangel.samplesource.sdrdaemonsource"
 | 
			
		||||
 | 
			
		||||
class PluginAPI;
 | 
			
		||||
 | 
			
		||||
class SDRdaemonFECPlugin : public QObject, public PluginInterface {
 | 
			
		||||
class SDRdaemonSourcePlugin : public QObject, public PluginInterface {
 | 
			
		||||
	Q_OBJECT
 | 
			
		||||
	Q_INTERFACES(PluginInterface)
 | 
			
		||||
	Q_PLUGIN_METADATA(IID SDRDAEMONFEC_DEVICE_TYPE_ID)
 | 
			
		||||
	Q_PLUGIN_METADATA(IID SDRDAEMONSOURCE_DEVICE_TYPE_ID)
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	explicit SDRdaemonFECPlugin(QObject* parent = NULL);
 | 
			
		||||
	explicit SDRdaemonSourcePlugin(QObject* parent = NULL);
 | 
			
		||||
 | 
			
		||||
	const PluginDescriptor& getPluginDescriptor() const;
 | 
			
		||||
	void initPlugin(PluginAPI* pluginAPI);
 | 
			
		||||
 | 
			
		||||
@ -17,12 +17,12 @@
 | 
			
		||||
#include "util/simpleserializer.h"
 | 
			
		||||
#include "sdrdaemonsourcesettings.h"
 | 
			
		||||
 | 
			
		||||
SDRdaemonFECSettings::SDRdaemonFECSettings()
 | 
			
		||||
SDRdaemonSourceSettings::SDRdaemonSourceSettings()
 | 
			
		||||
{
 | 
			
		||||
    resetToDefaults();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECSettings::resetToDefaults()
 | 
			
		||||
void SDRdaemonSourceSettings::resetToDefaults()
 | 
			
		||||
{
 | 
			
		||||
    m_centerFrequency = 435000*1000;
 | 
			
		||||
    m_sampleRate = 256000;
 | 
			
		||||
@ -38,7 +38,7 @@ void SDRdaemonFECSettings::resetToDefaults()
 | 
			
		||||
    m_fcPos = 2; // center
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QByteArray SDRdaemonFECSettings::serialize() const
 | 
			
		||||
QByteArray SDRdaemonSourceSettings::serialize() const
 | 
			
		||||
{
 | 
			
		||||
    SimpleSerializer s(1);
 | 
			
		||||
 | 
			
		||||
@ -57,7 +57,7 @@ QByteArray SDRdaemonFECSettings::serialize() const
 | 
			
		||||
    return s.final();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool SDRdaemonFECSettings::deserialize(const QByteArray& data)
 | 
			
		||||
bool SDRdaemonSourceSettings::deserialize(const QByteArray& data)
 | 
			
		||||
{
 | 
			
		||||
    SimpleDeserializer d(data);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,7 @@
 | 
			
		||||
#include <QByteArray>
 | 
			
		||||
#include <QString>
 | 
			
		||||
 | 
			
		||||
struct SDRdaemonFECSettings {
 | 
			
		||||
struct SDRdaemonSourceSettings {
 | 
			
		||||
    quint64 m_centerFrequency;
 | 
			
		||||
    quint64 m_sampleRate;
 | 
			
		||||
    quint32 m_log2Decim;
 | 
			
		||||
@ -34,7 +34,7 @@ struct SDRdaemonFECSettings {
 | 
			
		||||
    bool    m_iqCorrection;
 | 
			
		||||
    quint32 m_fcPos;
 | 
			
		||||
 | 
			
		||||
    SDRdaemonFECSettings();
 | 
			
		||||
    SDRdaemonSourceSettings();
 | 
			
		||||
    void resetToDefaults();
 | 
			
		||||
    QByteArray serialize() const;
 | 
			
		||||
    bool deserialize(const QByteArray& data);
 | 
			
		||||
 | 
			
		||||
@ -26,7 +26,7 @@
 | 
			
		||||
#include "sdrdaemonsourceinput.h"
 | 
			
		||||
#include "sdrdaemonsourceudphandler.h"
 | 
			
		||||
 | 
			
		||||
SDRdaemonFECUDPHandler::SDRdaemonFECUDPHandler(SampleSinkFifo *sampleFifo, MessageQueue *outputMessageQueueToGUI, DeviceSourceAPI *devieAPI) :
 | 
			
		||||
SDRdaemonSourceUDPHandler::SDRdaemonSourceUDPHandler(SampleSinkFifo *sampleFifo, MessageQueue *outputMessageQueueToGUI, DeviceSourceAPI *devieAPI) :
 | 
			
		||||
    m_deviceAPI(devieAPI),
 | 
			
		||||
	m_sdrDaemonBuffer(m_rateDivider),
 | 
			
		||||
	m_dataSocket(0),
 | 
			
		||||
@ -45,17 +45,17 @@ SDRdaemonFECUDPHandler::SDRdaemonFECUDPHandler(SampleSinkFifo *sampleFifo, Messa
 | 
			
		||||
	m_tickCount(0),
 | 
			
		||||
	m_samplesCount(0),
 | 
			
		||||
	m_timer(0),
 | 
			
		||||
    m_throttlems(SDRDAEMONFEC_THROTTLE_MS),
 | 
			
		||||
    m_throttlems(SDRDAEMONSOURCE_THROTTLE_MS),
 | 
			
		||||
    m_readLengthSamples(0),
 | 
			
		||||
    m_readLength(0),
 | 
			
		||||
    m_throttleToggle(false),
 | 
			
		||||
    m_rateDivider(1000/SDRDAEMONFEC_THROTTLE_MS),
 | 
			
		||||
    m_rateDivider(1000/SDRDAEMONSOURCE_THROTTLE_MS),
 | 
			
		||||
	m_autoCorrBuffer(true)
 | 
			
		||||
{
 | 
			
		||||
    m_udpBuf = new char[SDRdaemonFECBuffer::m_udpPayloadSize];
 | 
			
		||||
    m_udpBuf = new char[SDRdaemonSourceBuffer::m_udpPayloadSize];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
SDRdaemonFECUDPHandler::~SDRdaemonFECUDPHandler()
 | 
			
		||||
SDRdaemonSourceUDPHandler::~SDRdaemonSourceUDPHandler()
 | 
			
		||||
{
 | 
			
		||||
	stop();
 | 
			
		||||
	delete[] m_udpBuf;
 | 
			
		||||
@ -66,7 +66,7 @@ SDRdaemonFECUDPHandler::~SDRdaemonFECUDPHandler()
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECUDPHandler::start()
 | 
			
		||||
void SDRdaemonSourceUDPHandler::start()
 | 
			
		||||
{
 | 
			
		||||
	qDebug("SDRdaemonFECUDPHandler::start");
 | 
			
		||||
 | 
			
		||||
@ -98,7 +98,7 @@ void SDRdaemonFECUDPHandler::start()
 | 
			
		||||
    m_elapsedTimer.start();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECUDPHandler::stop()
 | 
			
		||||
void SDRdaemonSourceUDPHandler::stop()
 | 
			
		||||
{
 | 
			
		||||
	qDebug("SDRdaemonFECUDPHandler::stop");
 | 
			
		||||
 | 
			
		||||
@ -115,7 +115,7 @@ void SDRdaemonFECUDPHandler::stop()
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECUDPHandler::configureUDPLink(const QString& address, quint16 port)
 | 
			
		||||
void SDRdaemonSourceUDPHandler::configureUDPLink(const QString& address, quint16 port)
 | 
			
		||||
{
 | 
			
		||||
	qDebug("SDRdaemonFECUDPHandler::configureUDPLink: %s:%d", address.toStdString().c_str(), port);
 | 
			
		||||
	bool addressOK = m_dataAddress.setAddress(address);
 | 
			
		||||
@ -131,7 +131,7 @@ void SDRdaemonFECUDPHandler::configureUDPLink(const QString& address, quint16 po
 | 
			
		||||
	start();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECUDPHandler::dataReadyRead()
 | 
			
		||||
void SDRdaemonSourceUDPHandler::dataReadyRead()
 | 
			
		||||
{
 | 
			
		||||
    m_udpReadBytes = 0;
 | 
			
		||||
 | 
			
		||||
@ -140,17 +140,17 @@ void SDRdaemonFECUDPHandler::dataReadyRead()
 | 
			
		||||
		qint64 pendingDataSize = m_dataSocket->pendingDatagramSize();
 | 
			
		||||
		m_udpReadBytes += m_dataSocket->readDatagram(&m_udpBuf[m_udpReadBytes], pendingDataSize, &m_remoteAddress, 0);
 | 
			
		||||
 | 
			
		||||
		if (m_udpReadBytes == SDRdaemonFECBuffer::m_udpPayloadSize) {
 | 
			
		||||
		if (m_udpReadBytes == SDRdaemonSourceBuffer::m_udpPayloadSize) {
 | 
			
		||||
		    processData();
 | 
			
		||||
		    m_udpReadBytes = 0;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECUDPHandler::processData()
 | 
			
		||||
void SDRdaemonSourceUDPHandler::processData()
 | 
			
		||||
{
 | 
			
		||||
    m_sdrDaemonBuffer.writeData(m_udpBuf);
 | 
			
		||||
    const SDRdaemonFECBuffer::MetaDataFEC& metaData =  m_sdrDaemonBuffer.getCurrentMeta();
 | 
			
		||||
    const SDRdaemonSourceBuffer::MetaDataFEC& metaData =  m_sdrDaemonBuffer.getCurrentMeta();
 | 
			
		||||
 | 
			
		||||
    bool change = false;
 | 
			
		||||
//    m_tv_sec = metaData.m_tv_sec;
 | 
			
		||||
@ -174,7 +174,7 @@ void SDRdaemonFECUDPHandler::processData()
 | 
			
		||||
    {
 | 
			
		||||
        DSPSignalNotification *notif = new DSPSignalNotification(m_samplerate, m_centerFrequency * 1000); // Frequency in Hz for the DSP engine
 | 
			
		||||
        m_deviceAPI->getDeviceInputMessageQueue()->push(notif);
 | 
			
		||||
        SDRdaemonFECInput::MsgReportSDRdaemonFECStreamData *report = SDRdaemonFECInput::MsgReportSDRdaemonFECStreamData::create(
 | 
			
		||||
        SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamData *report = SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamData::create(
 | 
			
		||||
            m_samplerate,
 | 
			
		||||
            m_centerFrequency * 1000, // Frequency in Hz for the GUI
 | 
			
		||||
            m_tv_sec,
 | 
			
		||||
@ -183,7 +183,7 @@ void SDRdaemonFECUDPHandler::processData()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECUDPHandler::connectTimer(const QTimer* timer)
 | 
			
		||||
void SDRdaemonSourceUDPHandler::connectTimer(const QTimer* timer)
 | 
			
		||||
{
 | 
			
		||||
	qDebug() << "SDRdaemonFECUDPHandler::connectTimer";
 | 
			
		||||
#ifdef USE_INTERNAL_TIMER
 | 
			
		||||
@ -199,7 +199,7 @@ void SDRdaemonFECUDPHandler::connectTimer(const QTimer* timer)
 | 
			
		||||
    m_rateDivider = 1000 / m_throttlems;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void SDRdaemonFECUDPHandler::tick()
 | 
			
		||||
void SDRdaemonSourceUDPHandler::tick()
 | 
			
		||||
{
 | 
			
		||||
    // auto throttling
 | 
			
		||||
    int throttlems = m_elapsedTimer.restart();
 | 
			
		||||
@ -215,7 +215,7 @@ void SDRdaemonFECUDPHandler::tick()
 | 
			
		||||
        m_readLengthSamples += m_sdrDaemonBuffer.getRWBalanceCorrection();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    m_readLength = m_readLengthSamples * SDRdaemonFECBuffer::m_iqSampleSize;
 | 
			
		||||
    m_readLength = m_readLengthSamples * SDRdaemonSourceBuffer::m_iqSampleSize;
 | 
			
		||||
 | 
			
		||||
    // read samples directly feeding the SampleFifo (no callback)
 | 
			
		||||
    m_sampleFifo->write(reinterpret_cast<quint8*>(m_sdrDaemonBuffer.readData(m_readLength)), m_readLength);
 | 
			
		||||
@ -243,7 +243,7 @@ void SDRdaemonFECUDPHandler::tick()
 | 
			
		||||
			framesDecodingStatus = 2;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming *report = SDRdaemonFECInput::MsgReportSDRdaemonFECStreamTiming::create(
 | 
			
		||||
		SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming *report = SDRdaemonSourceInput::MsgReportSDRdaemonSourceStreamTiming::create(
 | 
			
		||||
			m_tv_sec,
 | 
			
		||||
			m_tv_usec,
 | 
			
		||||
			m_sdrDaemonBuffer.getBufferLengthInSecs(),
 | 
			
		||||
 | 
			
		||||
@ -25,31 +25,31 @@
 | 
			
		||||
 | 
			
		||||
#include "sdrdaemonsourcebuffer.h"
 | 
			
		||||
 | 
			
		||||
#define SDRDAEMONFEC_THROTTLE_MS 50
 | 
			
		||||
#define SDRDAEMONSOURCE_THROTTLE_MS 50
 | 
			
		||||
 | 
			
		||||
class SampleSinkFifo;
 | 
			
		||||
class MessageQueue;
 | 
			
		||||
class QTimer;
 | 
			
		||||
class DeviceSourceAPI;
 | 
			
		||||
 | 
			
		||||
class SDRdaemonFECUDPHandler : public QObject
 | 
			
		||||
class SDRdaemonSourceUDPHandler : public QObject
 | 
			
		||||
{
 | 
			
		||||
	Q_OBJECT
 | 
			
		||||
public:
 | 
			
		||||
	SDRdaemonFECUDPHandler(SampleSinkFifo* sampleFifo, MessageQueue *outputMessageQueueToGUI, DeviceSourceAPI *deviceAPI);
 | 
			
		||||
	~SDRdaemonFECUDPHandler();
 | 
			
		||||
	SDRdaemonSourceUDPHandler(SampleSinkFifo* sampleFifo, MessageQueue *outputMessageQueueToGUI, DeviceSourceAPI *deviceAPI);
 | 
			
		||||
	~SDRdaemonSourceUDPHandler();
 | 
			
		||||
	void connectTimer(const QTimer* timer);
 | 
			
		||||
	void start();
 | 
			
		||||
	void stop();
 | 
			
		||||
	void configureUDPLink(const QString& address, quint16 port);
 | 
			
		||||
	void getRemoteAddress(QString& s) const { s = m_remoteAddress.toString(); }
 | 
			
		||||
    int getNbOriginalBlocks() const { return SDRdaemonFECBuffer::m_nbOriginalBlocks; }
 | 
			
		||||
    int getNbOriginalBlocks() const { return SDRdaemonSourceBuffer::m_nbOriginalBlocks; }
 | 
			
		||||
public slots:
 | 
			
		||||
	void dataReadyRead();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
	DeviceSourceAPI *m_deviceAPI;
 | 
			
		||||
	SDRdaemonFECBuffer m_sdrDaemonBuffer;
 | 
			
		||||
	SDRdaemonSourceBuffer m_sdrDaemonBuffer;
 | 
			
		||||
	QUdpSocket *m_dataSocket;
 | 
			
		||||
	QHostAddress m_dataAddress;
 | 
			
		||||
	QHostAddress m_remoteAddress;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user