mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-09-07 23:57:52 -04:00
Remote plugins: added new meta data for #1074
This commit is contained in:
parent
d482471a59
commit
247ae2679d
@ -96,6 +96,8 @@ void RemoteSink::start()
|
|||||||
{
|
{
|
||||||
qDebug("RemoteSink::start: m_basebandSampleRate: %d", m_basebandSampleRate);
|
qDebug("RemoteSink::start: m_basebandSampleRate: %d", m_basebandSampleRate);
|
||||||
m_basebandSink->reset();
|
m_basebandSink->reset();
|
||||||
|
m_basebandSink->setDeviceIndex(m_deviceAPI->getDeviceSetIndex());
|
||||||
|
m_basebandSink->setChannelIndex(getIndexInDeviceSet());
|
||||||
m_basebandSink->startWork();
|
m_basebandSink->startWork();
|
||||||
m_thread.start();
|
m_thread.start();
|
||||||
|
|
||||||
|
@ -70,6 +70,8 @@ public:
|
|||||||
MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } //!< Get the queue for asynchronous inbound communication
|
MessageQueue *getInputMessageQueue() { return &m_inputMessageQueue; } //!< Get the queue for asynchronous inbound communication
|
||||||
int getChannelSampleRate() const;
|
int getChannelSampleRate() const;
|
||||||
void setBasebandSampleRate(int sampleRate);
|
void setBasebandSampleRate(int sampleRate);
|
||||||
|
void setDeviceIndex(uint32_t deviceIndex) { m_sink.setDeviceIndex(deviceIndex); }
|
||||||
|
void setChannelIndex(uint32_t channelIndex) { m_sink.setChannelIndex(channelIndex); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_running;
|
bool m_running;
|
||||||
|
@ -68,6 +68,12 @@ void RemoteSinkSender::started()
|
|||||||
void RemoteSinkSender::stopWork()
|
void RemoteSinkSender::stopWork()
|
||||||
{
|
{
|
||||||
qDebug("RemoteSinkSender::stopWork");
|
qDebug("RemoteSinkSender::stopWork");
|
||||||
|
QObject::disconnect(
|
||||||
|
&m_fifo,
|
||||||
|
&RemoteSinkFifo::dataBlockServed,
|
||||||
|
this,
|
||||||
|
&RemoteSinkSender::handleData
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoteSinkSender::finished()
|
void RemoteSinkSender::finished()
|
||||||
|
@ -38,6 +38,8 @@ void RemoteSinkSettings::resetToDefaults()
|
|||||||
{
|
{
|
||||||
m_nbFECBlocks = 0;
|
m_nbFECBlocks = 0;
|
||||||
m_nbTxBytes = 2;
|
m_nbTxBytes = 2;
|
||||||
|
m_deviceCenterFrequency = 0;
|
||||||
|
m_deviceSampleRate = 48000;
|
||||||
m_dataAddress = "127.0.0.1";
|
m_dataAddress = "127.0.0.1";
|
||||||
m_dataPort = 9090;
|
m_dataPort = 9090;
|
||||||
m_rgbColor = QColor(140, 4, 4).rgb();
|
m_rgbColor = QColor(140, 4, 4).rgb();
|
||||||
@ -71,6 +73,8 @@ QByteArray RemoteSinkSettings::serialize() const
|
|||||||
s.writeU32(13, m_filterChainHash);
|
s.writeU32(13, m_filterChainHash);
|
||||||
s.writeS32(14, m_streamIndex);
|
s.writeS32(14, m_streamIndex);
|
||||||
s.writeBlob(15, m_rollupState);
|
s.writeBlob(15, m_rollupState);
|
||||||
|
s.writeU64(16, m_deviceCenterFrequency);
|
||||||
|
s.writeU32(17, m_deviceSampleRate);
|
||||||
|
|
||||||
return s.final();
|
return s.final();
|
||||||
}
|
}
|
||||||
@ -129,6 +133,8 @@ bool RemoteSinkSettings::deserialize(const QByteArray& data)
|
|||||||
d.readU32(13, &m_filterChainHash, 0);
|
d.readU32(13, &m_filterChainHash, 0);
|
||||||
d.readS32(14, &m_streamIndex, 0);
|
d.readS32(14, &m_streamIndex, 0);
|
||||||
d.readBlob(15, &m_rollupState);
|
d.readBlob(15, &m_rollupState);
|
||||||
|
d.readU64(16, &m_deviceCenterFrequency, 0);
|
||||||
|
d.readU32(17, &m_deviceSampleRate, 48000);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,8 @@ struct RemoteSinkSettings
|
|||||||
{
|
{
|
||||||
uint16_t m_nbFECBlocks;
|
uint16_t m_nbFECBlocks;
|
||||||
uint32_t m_nbTxBytes;
|
uint32_t m_nbTxBytes;
|
||||||
|
quint64 m_deviceCenterFrequency;
|
||||||
|
uint32_t m_deviceSampleRate;
|
||||||
QString m_dataAddress;
|
QString m_dataAddress;
|
||||||
uint16_t m_dataPort;
|
uint16_t m_dataPort;
|
||||||
quint32 m_rgbColor;
|
quint32 m_rgbColor;
|
||||||
|
@ -131,6 +131,10 @@ void RemoteSinkSink::feed(const SampleVector::const_iterator& begin, const Sampl
|
|||||||
metaData.m_sampleBits = getNbSampleBits();
|
metaData.m_sampleBits = getNbSampleBits();
|
||||||
metaData.m_nbOriginalBlocks = RemoteNbOrginalBlocks;
|
metaData.m_nbOriginalBlocks = RemoteNbOrginalBlocks;
|
||||||
metaData.m_nbFECBlocks = m_nbBlocksFEC;
|
metaData.m_nbFECBlocks = m_nbBlocksFEC;
|
||||||
|
metaData.m_deviceCenterFrequency = m_deviceCenterFrequency;
|
||||||
|
metaData.m_basebandSampleRate = m_basebandSampleRate;
|
||||||
|
metaData.m_deviceIndex = m_deviceIndex % 256;
|
||||||
|
metaData.m_channelIndex = m_channelIndex % 256;
|
||||||
metaData.m_tv_sec = nowus / 1000000UL; // tv.tv_sec;
|
metaData.m_tv_sec = nowus / 1000000UL; // tv.tv_sec;
|
||||||
metaData.m_tv_usec = nowus % 1000000UL; // tv.tv_usec;
|
metaData.m_tv_usec = nowus % 1000000UL; // tv.tv_usec;
|
||||||
|
|
||||||
@ -160,6 +164,10 @@ void RemoteSinkSink::feed(const SampleVector::const_iterator& begin, const Sampl
|
|||||||
<< ":" << (int) metaData.m_sampleBits
|
<< ":" << (int) metaData.m_sampleBits
|
||||||
<< "|" << (int) metaData.m_nbOriginalBlocks
|
<< "|" << (int) metaData.m_nbOriginalBlocks
|
||||||
<< ":" << (int) metaData.m_nbFECBlocks
|
<< ":" << (int) metaData.m_nbFECBlocks
|
||||||
|
<< "|" << metaData.m_deviceCenterFrequency
|
||||||
|
<< ":" << metaData.m_basebandSampleRate
|
||||||
|
<< "|" << metaData.m_deviceIndex
|
||||||
|
<< ":" << metaData.m_channelIndex
|
||||||
<< "|" << metaData.m_tv_sec
|
<< "|" << metaData.m_tv_sec
|
||||||
<< ":" << metaData.m_tv_usec;
|
<< ":" << metaData.m_tv_usec;
|
||||||
|
|
||||||
|
@ -46,6 +46,8 @@ public:
|
|||||||
void applySettings(const RemoteSinkSettings& settings, bool force = false);
|
void applySettings(const RemoteSinkSettings& settings, bool force = false);
|
||||||
void applyBasebandSampleRate(uint32_t sampleRate);
|
void applyBasebandSampleRate(uint32_t sampleRate);
|
||||||
void setDeviceCenterFrequency(uint64_t frequency) { m_deviceCenterFrequency = frequency; }
|
void setDeviceCenterFrequency(uint64_t frequency) { m_deviceCenterFrequency = frequency; }
|
||||||
|
void setDeviceIndex(uint32_t deviceIndex) { m_deviceIndex = deviceIndex; }
|
||||||
|
void setChannelIndex(uint32_t channelIndex) { m_channelIndex = channelIndex; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RemoteSinkSettings m_settings;
|
RemoteSinkSettings m_settings;
|
||||||
@ -63,6 +65,8 @@ private:
|
|||||||
uint64_t m_deviceCenterFrequency;
|
uint64_t m_deviceCenterFrequency;
|
||||||
int64_t m_frequencyOffset;
|
int64_t m_frequencyOffset;
|
||||||
uint32_t m_basebandSampleRate;
|
uint32_t m_basebandSampleRate;
|
||||||
|
uint32_t m_deviceIndex;
|
||||||
|
uint32_t m_channelIndex;
|
||||||
int m_nbBlocksFEC;
|
int m_nbBlocksFEC;
|
||||||
uint32_t m_nbTxBytes;
|
uint32_t m_nbTxBytes;
|
||||||
QString m_dataAddress;
|
QString m_dataAddress;
|
||||||
|
@ -218,6 +218,10 @@ void RemoteSourceSource::printMeta(const QString& header, RemoteMetaDataFEC *met
|
|||||||
<< ":" << (int) metaData->m_sampleBits
|
<< ":" << (int) metaData->m_sampleBits
|
||||||
<< ":" << (int) metaData->m_nbOriginalBlocks
|
<< ":" << (int) metaData->m_nbOriginalBlocks
|
||||||
<< ":" << (int) metaData->m_nbFECBlocks
|
<< ":" << (int) metaData->m_nbFECBlocks
|
||||||
|
<< "|" << metaData->m_deviceCenterFrequency
|
||||||
|
<< ":" << metaData->m_basebandSampleRate
|
||||||
|
<< "|" << metaData->m_deviceIndex
|
||||||
|
<< ":" << metaData->m_channelIndex
|
||||||
<< "|" << metaData->m_tv_sec
|
<< "|" << metaData->m_tv_sec
|
||||||
<< ":" << metaData->m_tv_usec
|
<< ":" << metaData->m_tv_usec
|
||||||
<< "|";
|
<< "|";
|
||||||
|
@ -90,6 +90,7 @@ bool RemoteOutput::start()
|
|||||||
|
|
||||||
m_remoteOutputWorker = new RemoteOutputWorker(&m_sampleSourceFifo);
|
m_remoteOutputWorker = new RemoteOutputWorker(&m_sampleSourceFifo);
|
||||||
m_remoteOutputWorker->moveToThread(&m_remoteOutputWorkerThread);
|
m_remoteOutputWorker->moveToThread(&m_remoteOutputWorkerThread);
|
||||||
|
m_remoteOutputWorker->setDeviceIndex(m_deviceAPI->getDeviceSetIndex());
|
||||||
m_remoteOutputWorker->setDataAddress(m_settings.m_dataAddress, m_settings.m_dataPort);
|
m_remoteOutputWorker->setDataAddress(m_settings.m_dataAddress, m_settings.m_dataPort);
|
||||||
m_remoteOutputWorker->setSamplerate(m_sampleRate);
|
m_remoteOutputWorker->setSamplerate(m_sampleRate);
|
||||||
m_remoteOutputWorker->setNbBlocksFEC(m_settings.m_nbFECBlocks);
|
m_remoteOutputWorker->setNbBlocksFEC(m_settings.m_nbFECBlocks);
|
||||||
|
@ -41,8 +41,6 @@
|
|||||||
|
|
||||||
#include "channel/remotedatablock.h"
|
#include "channel/remotedatablock.h"
|
||||||
|
|
||||||
#include "udpsinkfec.h"
|
|
||||||
|
|
||||||
RemoteOutputSinkGui::RemoteOutputSinkGui(DeviceUISet *deviceUISet, QWidget* parent) :
|
RemoteOutputSinkGui::RemoteOutputSinkGui(DeviceUISet *deviceUISet, QWidget* parent) :
|
||||||
DeviceGUI(parent),
|
DeviceGUI(parent),
|
||||||
ui(new Ui::RemoteOutputGui),
|
ui(new Ui::RemoteOutputGui),
|
||||||
|
@ -47,6 +47,7 @@ public:
|
|||||||
void startWork();
|
void startWork();
|
||||||
void stopWork();
|
void stopWork();
|
||||||
|
|
||||||
|
void setDeviceIndex(uint32_t deviceIndex) { m_udpSinkFEC.setDeviceIndex(deviceIndex); }
|
||||||
void setSamplerate(int samplerate);
|
void setSamplerate(int samplerate);
|
||||||
void setNbBlocksFEC(uint32_t nbBlocksFEC) { m_udpSinkFEC.setNbBlocksFEC(nbBlocksFEC); };
|
void setNbBlocksFEC(uint32_t nbBlocksFEC) { m_udpSinkFEC.setNbBlocksFEC(nbBlocksFEC); };
|
||||||
void setNbTxBytes(uint32_t nbTxBytes) { m_udpSinkFEC.setNbTxBytes(nbTxBytes); };
|
void setNbTxBytes(uint32_t nbTxBytes) { m_udpSinkFEC.setNbTxBytes(nbTxBytes); };
|
||||||
|
@ -120,6 +120,10 @@ void UDPSinkFEC::write(const SampleVector::iterator& begin, uint32_t sampleChunk
|
|||||||
metaData.m_sampleBits = getNbSampleBits();
|
metaData.m_sampleBits = getNbSampleBits();
|
||||||
metaData.m_nbOriginalBlocks = RemoteNbOrginalBlocks;
|
metaData.m_nbOriginalBlocks = RemoteNbOrginalBlocks;
|
||||||
metaData.m_nbFECBlocks = m_nbBlocksFEC;
|
metaData.m_nbFECBlocks = m_nbBlocksFEC;
|
||||||
|
metaData.m_deviceCenterFrequency = 0; // frequency not set by device
|
||||||
|
metaData.m_basebandSampleRate = m_sampleRate; // same as sample rate
|
||||||
|
metaData.m_deviceIndex = m_deviceIndex; // index of device set in the instance
|
||||||
|
metaData.m_channelIndex = 0; // irrelavant
|
||||||
metaData.m_tv_sec = nowus / 1000000UL; // tv.tv_sec;
|
metaData.m_tv_sec = nowus / 1000000UL; // tv.tv_sec;
|
||||||
metaData.m_tv_usec = nowus % 1000000UL; // tv.tv_usec;
|
metaData.m_tv_usec = nowus % 1000000UL; // tv.tv_usec;
|
||||||
|
|
||||||
@ -149,6 +153,10 @@ void UDPSinkFEC::write(const SampleVector::iterator& begin, uint32_t sampleChunk
|
|||||||
<< ":" << (int) metaData.m_sampleBits
|
<< ":" << (int) metaData.m_sampleBits
|
||||||
<< "|" << (int) metaData.m_nbOriginalBlocks
|
<< "|" << (int) metaData.m_nbOriginalBlocks
|
||||||
<< ":" << (int) metaData.m_nbFECBlocks
|
<< ":" << (int) metaData.m_nbFECBlocks
|
||||||
|
<< "|" << metaData.m_deviceCenterFrequency
|
||||||
|
<< ":" << metaData.m_basebandSampleRate
|
||||||
|
<< "|" << metaData.m_deviceIndex
|
||||||
|
<< ":" << metaData.m_channelIndex
|
||||||
<< "|" << metaData.m_tv_sec
|
<< "|" << metaData.m_tv_sec
|
||||||
<< ":" << metaData.m_tv_usec;
|
<< ":" << metaData.m_tv_usec;
|
||||||
|
|
||||||
|
@ -64,6 +64,7 @@ public:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setDeviceIndex(uint32_t deviceIndex) { m_deviceIndex = deviceIndex; }
|
||||||
/** Set sample rate given in S/s */
|
/** Set sample rate given in S/s */
|
||||||
void setSampleRate(uint32_t sampleRate);
|
void setSampleRate(uint32_t sampleRate);
|
||||||
|
|
||||||
@ -94,6 +95,7 @@ private:
|
|||||||
int m_txBlockIndex; //!< Current index in blocks to transmit in the Tx row
|
int m_txBlockIndex; //!< Current index in blocks to transmit in the Tx row
|
||||||
uint16_t m_frameCount; //!< transmission frame count
|
uint16_t m_frameCount; //!< transmission frame count
|
||||||
int m_sampleIndex; //!< Current sample index in protected block data
|
int m_sampleIndex; //!< Current sample index in protected block data
|
||||||
|
uint32_t m_deviceIndex; //!< Index of current device set
|
||||||
|
|
||||||
RemoteOutputSender *m_remoteOutputSender;
|
RemoteOutputSender *m_remoteOutputSender;
|
||||||
QThread *m_senderThread;
|
QThread *m_senderThread;
|
||||||
|
@ -415,6 +415,10 @@ void RemoteInputBuffer::printMeta(const QString& header, RemoteMetaDataFEC *meta
|
|||||||
<< ":" << (int) metaData->m_sampleBits
|
<< ":" << (int) metaData->m_sampleBits
|
||||||
<< ":" << (int) metaData->m_nbOriginalBlocks
|
<< ":" << (int) metaData->m_nbOriginalBlocks
|
||||||
<< ":" << (int) metaData->m_nbFECBlocks
|
<< ":" << (int) metaData->m_nbFECBlocks
|
||||||
|
<< "|" << metaData->m_deviceCenterFrequency
|
||||||
|
<< ":" << metaData->m_basebandSampleRate
|
||||||
|
<< "|" << metaData->m_deviceIndex
|
||||||
|
<< ":" << metaData->m_channelIndex
|
||||||
<< "|" << metaData->m_tv_sec
|
<< "|" << metaData->m_tv_sec
|
||||||
<< ":" << metaData->m_tv_usec
|
<< ":" << metaData->m_tv_usec
|
||||||
<< "|";
|
<< "|";
|
||||||
|
@ -38,16 +38,20 @@
|
|||||||
#pragma pack(push, 1)
|
#pragma pack(push, 1)
|
||||||
struct RemoteMetaDataFEC
|
struct RemoteMetaDataFEC
|
||||||
{
|
{
|
||||||
uint64_t m_centerFrequency; //!< 8 center frequency in kHz
|
uint64_t m_centerFrequency; //!< 8 center frequency in kHz
|
||||||
uint32_t m_sampleRate; //!< 12 sample rate in Hz
|
uint32_t m_sampleRate; //!< 12 sample rate in Hz
|
||||||
uint8_t m_sampleBytes; //!< 13 4 LSB: number of bytes per sample (2 or 4)
|
uint8_t m_sampleBytes; //!< 13 4 LSB: number of bytes per sample (2 or 4)
|
||||||
uint8_t m_sampleBits; //!< 14 number of effective bits per sample (deprecated)
|
uint8_t m_sampleBits; //!< 14 number of effective bits per sample (deprecated)
|
||||||
uint8_t m_nbOriginalBlocks; //!< 15 number of blocks with original (protected) data
|
uint8_t m_nbOriginalBlocks; //!< 15 number of blocks with original (protected) data
|
||||||
uint8_t m_nbFECBlocks; //!< 16 number of blocks carrying FEC
|
uint8_t m_nbFECBlocks; //!< 16 number of blocks carrying FEC
|
||||||
|
uint64_t m_deviceCenterFrequency; //!< 24 device center frequency in Hz
|
||||||
|
uint32_t m_basebandSampleRate; //!< 28 basebabd sample rate in Hz
|
||||||
|
uint8_t m_deviceIndex; //!< 29 index of device set in instance
|
||||||
|
uint8_t m_channelIndex; //!< 30 index of channel in device set
|
||||||
|
|
||||||
uint32_t m_tv_sec; //!< 20 seconds of timestamp at start time of super-frame processing
|
uint32_t m_tv_sec; //!< 34 seconds of timestamp at start time of super-frame processing
|
||||||
uint32_t m_tv_usec; //!< 24 microseconds of timestamp at start time of super-frame processing
|
uint32_t m_tv_usec; //!< 38 microseconds of timestamp at start time of super-frame processing
|
||||||
uint32_t m_crc32; //!< 28 CRC32 of the above
|
uint32_t m_crc32; //!< 42 CRC32 of the above
|
||||||
|
|
||||||
bool operator==(const RemoteMetaDataFEC& rhs)
|
bool operator==(const RemoteMetaDataFEC& rhs)
|
||||||
{
|
{
|
||||||
@ -68,6 +72,10 @@ struct RemoteMetaDataFEC
|
|||||||
m_sampleBits = 0;
|
m_sampleBits = 0;
|
||||||
m_nbOriginalBlocks = 0;
|
m_nbOriginalBlocks = 0;
|
||||||
m_nbFECBlocks = 0;
|
m_nbFECBlocks = 0;
|
||||||
|
m_deviceCenterFrequency = 0;
|
||||||
|
m_basebandSampleRate = 1;
|
||||||
|
m_deviceIndex = 0;
|
||||||
|
m_channelIndex = 0;
|
||||||
m_tv_sec = 0;
|
m_tv_sec = 0;
|
||||||
m_tv_usec = 0;
|
m_tv_usec = 0;
|
||||||
m_crc32 = 0;
|
m_crc32 = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user