kopia lustrzana https://github.com/f4exb/sdrangel
SDRdaemon: UDP channel sink (1)
rodzic
4697b13e60
commit
dff02e944d
|
@ -24,6 +24,7 @@
|
||||||
#include "dsp/threadedbasebandsamplesink.h"
|
#include "dsp/threadedbasebandsamplesink.h"
|
||||||
#include "dsp/downchannelizer.h"
|
#include "dsp/downchannelizer.h"
|
||||||
#include "device/devicesourceapi.h"
|
#include "device/devicesourceapi.h"
|
||||||
|
#include "channel/sdrdaemonchannelsinkthread.h"
|
||||||
#include "sdrdaemonchannelsink.h"
|
#include "sdrdaemonchannelsink.h"
|
||||||
|
|
||||||
const QString SDRDaemonChannelSink::m_channelIdURI = "sdrangel.channel.sdrdaemonsink";
|
const QString SDRDaemonChannelSink::m_channelIdURI = "sdrangel.channel.sdrdaemonsink";
|
||||||
|
@ -32,7 +33,11 @@ const QString SDRDaemonChannelSink::m_channelId = "SDRDaemonChannelSink";
|
||||||
SDRDaemonChannelSink::SDRDaemonChannelSink(DeviceSourceAPI *deviceAPI) :
|
SDRDaemonChannelSink::SDRDaemonChannelSink(DeviceSourceAPI *deviceAPI) :
|
||||||
ChannelSinkAPI(m_channelIdURI),
|
ChannelSinkAPI(m_channelIdURI),
|
||||||
m_deviceAPI(deviceAPI),
|
m_deviceAPI(deviceAPI),
|
||||||
m_running(false)
|
m_running(false),
|
||||||
|
m_sinkThread(0),
|
||||||
|
m_txBlockIndex(0),
|
||||||
|
m_frameCount(0),
|
||||||
|
m_sampleIndex(0)
|
||||||
{
|
{
|
||||||
setObjectName(m_channelId);
|
setObjectName(m_channelId);
|
||||||
|
|
||||||
|
@ -40,6 +45,8 @@ SDRDaemonChannelSink::SDRDaemonChannelSink(DeviceSourceAPI *deviceAPI) :
|
||||||
m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
|
m_threadedChannelizer = new ThreadedBasebandSampleSink(m_channelizer, this);
|
||||||
m_deviceAPI->addThreadedSink(m_threadedChannelizer);
|
m_deviceAPI->addThreadedSink(m_threadedChannelizer);
|
||||||
m_deviceAPI->addChannelAPI(this);
|
m_deviceAPI->addChannelAPI(this);
|
||||||
|
|
||||||
|
m_cm256p = m_cm256.isInitialized() ? &m_cm256 : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDRDaemonChannelSink::~SDRDaemonChannelSink()
|
SDRDaemonChannelSink::~SDRDaemonChannelSink()
|
||||||
|
@ -58,6 +65,8 @@ void SDRDaemonChannelSink::feed(const SampleVector::const_iterator& begin, const
|
||||||
void SDRDaemonChannelSink::start()
|
void SDRDaemonChannelSink::start()
|
||||||
{
|
{
|
||||||
qDebug("SDRDaemonChannelSink::start");
|
qDebug("SDRDaemonChannelSink::start");
|
||||||
|
if (m_running) { stop(); }
|
||||||
|
m_sinkThread = new SDRDaemonChannelSinkThread(&m_dataQueue, m_cm256p);
|
||||||
m_running = true;
|
m_running = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,12 +23,16 @@
|
||||||
#ifndef SDRDAEMON_CHANNEL_SDRDAEMONCHANNELSINK_H_
|
#ifndef SDRDAEMON_CHANNEL_SDRDAEMONCHANNELSINK_H_
|
||||||
#define SDRDAEMON_CHANNEL_SDRDAEMONCHANNELSINK_H_
|
#define SDRDAEMON_CHANNEL_SDRDAEMONCHANNELSINK_H_
|
||||||
|
|
||||||
|
#include "cm256.h"
|
||||||
|
|
||||||
#include "dsp/basebandsamplesink.h"
|
#include "dsp/basebandsamplesink.h"
|
||||||
#include "channel/channelsinkapi.h"
|
#include "channel/channelsinkapi.h"
|
||||||
|
#include "channel/sdrdaemondataqueue.h"
|
||||||
|
|
||||||
class DeviceSourceAPI;
|
class DeviceSourceAPI;
|
||||||
class ThreadedBasebandSampleSink;
|
class ThreadedBasebandSampleSink;
|
||||||
class DownChannelizer;
|
class DownChannelizer;
|
||||||
|
class SDRDaemonChannelSinkThread;
|
||||||
|
|
||||||
class SDRDaemonChannelSink : public BasebandSampleSink, public ChannelSinkAPI {
|
class SDRDaemonChannelSink : public BasebandSampleSink, public ChannelSinkAPI {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -56,8 +60,16 @@ private:
|
||||||
DeviceSourceAPI *m_deviceAPI;
|
DeviceSourceAPI *m_deviceAPI;
|
||||||
ThreadedBasebandSampleSink* m_threadedChannelizer;
|
ThreadedBasebandSampleSink* m_threadedChannelizer;
|
||||||
DownChannelizer* m_channelizer;
|
DownChannelizer* m_channelizer;
|
||||||
|
|
||||||
bool m_running;
|
bool m_running;
|
||||||
|
|
||||||
|
SDRDaemonDataQueue m_dataQueue;
|
||||||
|
SDRDaemonChannelSinkThread *m_sinkThread;
|
||||||
|
CM256 m_cm256;
|
||||||
|
CM256 *m_cm256p;
|
||||||
|
|
||||||
|
int m_txBlockIndex; //!< Current index in blocks to transmit in the Tx row
|
||||||
|
uint16_t m_frameCount; //!< transmission frame count
|
||||||
|
int m_sampleIndex; //!< Current sample index in protected block data
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* SDRDAEMON_CHANNEL_SDRDAEMONCHANNELSINK_H_ */
|
#endif /* SDRDAEMON_CHANNEL_SDRDAEMONCHANNELSINK_H_ */
|
||||||
|
|
|
@ -36,18 +36,13 @@ struct SDRDaemonMetaDataFEC
|
||||||
{
|
{
|
||||||
uint32_t m_centerFrequency; //!< 4 center frequency in kHz
|
uint32_t m_centerFrequency; //!< 4 center frequency in kHz
|
||||||
uint32_t m_sampleRate; //!< 8 sample rate in Hz
|
uint32_t m_sampleRate; //!< 8 sample rate in Hz
|
||||||
uint8_t m_bigEndian; //!< 9 1 if encoded as big endian, 0 for little endian
|
uint8_t m_sampleBytes; //!< 9 number of bytes per sample (2 or 3)
|
||||||
uint8_t m_reserved1; //!< 10 reserved
|
uint8_t m_sampleBits; //!< 10 number of effective bits per sample (8 t0 24)
|
||||||
uint8_t m_reserved2; //!< 11 reserved
|
uint8_t m_nbOriginalBlocks; //!< 11 number of blocks with original (protected) data
|
||||||
uint8_t m_reserved3; //!< 12 reserved
|
uint8_t m_nbFECBlocks; //!< 12 number of blocks carrying FEC
|
||||||
uint8_t m_sampleBytes; //!< 13 number of bytes per sample (2 or 3)
|
uint32_t m_tv_sec; //!< 16 seconds of timestamp at start time of super-frame processing
|
||||||
uint8_t m_sampleBits; //!< 14 number of effective bits per sample (8 t0 24)
|
uint32_t m_tv_usec; //!< 20 microseconds of timestamp at start time of super-frame processing
|
||||||
uint8_t m_nbOriginalBlocks; //!< 15 number of blocks with original (protected) data
|
uint32_t m_crc32; //!< 24 CRC32 of the above
|
||||||
uint8_t m_nbFECBlocks; //!< 16 number of blocks carrying FEC
|
|
||||||
uint32_t m_tv_sec; //!< 20 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_crc32; //!< 28 CRC32 of the above
|
|
||||||
// 32 bytes
|
|
||||||
|
|
||||||
bool operator==(const SDRDaemonMetaDataFEC& rhs)
|
bool operator==(const SDRDaemonMetaDataFEC& rhs)
|
||||||
{
|
{
|
||||||
|
|
Ładowanie…
Reference in New Issue