mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-30 20:40:20 -04:00 
			
		
		
		
	DaemonSink (6)
This commit is contained in:
		
							parent
							
								
									354409a21a
								
							
						
					
					
						commit
						2be1281885
					
				| @ -54,7 +54,7 @@ DaemonSink::DaemonSink(DeviceSourceAPI *deviceAPI) : | |||||||
|         m_sampleRate(48000), |         m_sampleRate(48000), | ||||||
|         m_sampleBytes(SDR_RX_SAMP_SZ == 24 ? 4 : 2), |         m_sampleBytes(SDR_RX_SAMP_SZ == 24 ? 4 : 2), | ||||||
|         m_nbBlocksFEC(0), |         m_nbBlocksFEC(0), | ||||||
|         m_txDelay(50), |         m_txDelay(35), | ||||||
|         m_dataAddress("127.0.0.1"), |         m_dataAddress("127.0.0.1"), | ||||||
|         m_dataPort(9090) |         m_dataPort(9090) | ||||||
| { | { | ||||||
| @ -64,8 +64,6 @@ DaemonSink::DaemonSink(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; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| DaemonSink::~DaemonSink() | DaemonSink::~DaemonSink() | ||||||
| @ -212,7 +210,7 @@ void DaemonSink::start() | |||||||
|         stop(); |         stop(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     m_sinkThread = new DaemonSinkThread(&m_dataQueue, m_cm256p); |     m_sinkThread = new DaemonSinkThread(&m_dataQueue); | ||||||
|     m_sinkThread->startStop(true); |     m_sinkThread->startStop(true); | ||||||
|     m_running = true; |     m_running = true; | ||||||
| } | } | ||||||
| @ -366,7 +364,7 @@ int DaemonSink::webapiSettingsPutPatch( | |||||||
|         int txDelay = response.getDaemonSinkSettings()->getTxDelay(); |         int txDelay = response.getDaemonSinkSettings()->getTxDelay(); | ||||||
| 
 | 
 | ||||||
|         if (txDelay < 0) { |         if (txDelay < 0) { | ||||||
|             settings.m_txDelay = 50; |             settings.m_txDelay = 35; | ||||||
|         } else { |         } else { | ||||||
|             settings.m_txDelay = txDelay; |             settings.m_txDelay = txDelay; | ||||||
|         } |         } | ||||||
|  | |||||||
| @ -26,8 +26,6 @@ | |||||||
| #include <QObject> | #include <QObject> | ||||||
| #include <QMutex> | #include <QMutex> | ||||||
| 
 | 
 | ||||||
| #include "cm256.h" |  | ||||||
| 
 |  | ||||||
| #include "dsp/basebandsamplesink.h" | #include "dsp/basebandsamplesink.h" | ||||||
| #include "channel/channelsinkapi.h" | #include "channel/channelsinkapi.h" | ||||||
| #include "channel/sdrdaemondataqueue.h" | #include "channel/sdrdaemondataqueue.h" | ||||||
| @ -134,8 +132,6 @@ private: | |||||||
|     DaemonSinkSettings m_settings; |     DaemonSinkSettings m_settings; | ||||||
|     SDRDaemonDataQueue m_dataQueue; |     SDRDaemonDataQueue m_dataQueue; | ||||||
|     DaemonSinkThread *m_sinkThread; |     DaemonSinkThread *m_sinkThread; | ||||||
|     CM256 m_cm256; |  | ||||||
|     CM256 *m_cm256p; |  | ||||||
| 
 | 
 | ||||||
|     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
 | ||||||
|  | |||||||
| @ -179,6 +179,7 @@ void DaemonSinkGUI::displaySettings() | |||||||
|     QString s1 = QString::number(m_settings.m_nbFECBlocks, 'f', 0); |     QString s1 = QString::number(m_settings.m_nbFECBlocks, 'f', 0); | ||||||
|     ui->nominalNbBlocksText->setText(tr("%1/%2").arg(s).arg(s1)); |     ui->nominalNbBlocksText->setText(tr("%1/%2").arg(s).arg(s1)); | ||||||
|     ui->txDelayText->setText(tr("%1%").arg(m_settings.m_txDelay)); |     ui->txDelayText->setText(tr("%1%").arg(m_settings.m_txDelay)); | ||||||
|  |     ui->txDelay->setValue(m_settings.m_txDelay); | ||||||
|     updateTxDelayTime(); |     updateTxDelayTime(); | ||||||
|     blockApplySettings(false); |     blockApplySettings(false); | ||||||
| } | } | ||||||
|  | |||||||
| @ -232,16 +232,16 @@ | |||||||
|          <string>Delay between consecutive UDP packets in percentage of nominal UDP packet process time</string> |          <string>Delay between consecutive UDP packets in percentage of nominal UDP packet process time</string> | ||||||
|         </property> |         </property> | ||||||
|         <property name="minimum"> |         <property name="minimum"> | ||||||
|          <number>10</number> |          <number>0</number> | ||||||
|         </property> |         </property> | ||||||
|         <property name="maximum"> |         <property name="maximum"> | ||||||
|          <number>90</number> |          <number>70</number> | ||||||
|         </property> |         </property> | ||||||
|         <property name="pageStep"> |         <property name="pageStep"> | ||||||
|          <number>1</number> |          <number>1</number> | ||||||
|         </property> |         </property> | ||||||
|         <property name="value"> |         <property name="value"> | ||||||
|          <number>50</number> |          <number>35</number> | ||||||
|         </property> |         </property> | ||||||
|        </widget> |        </widget> | ||||||
|       </item> |       </item> | ||||||
|  | |||||||
| @ -34,7 +34,7 @@ DaemonSinkSettings::DaemonSinkSettings() | |||||||
| void DaemonSinkSettings::resetToDefaults() | void DaemonSinkSettings::resetToDefaults() | ||||||
| { | { | ||||||
|     m_nbFECBlocks = 0; |     m_nbFECBlocks = 0; | ||||||
|     m_txDelay = 50; |     m_txDelay = 35; | ||||||
|     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(); | ||||||
| @ -77,7 +77,7 @@ bool DaemonSinkSettings::deserialize(const QByteArray& data) | |||||||
|             m_nbFECBlocks = 0; |             m_nbFECBlocks = 0; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         d.readU32(2, &m_txDelay, 50); |         d.readU32(2, &m_txDelay, 35); | ||||||
|         d.readString(3, &m_dataAddress, "127.0.0.1"); |         d.readString(3, &m_dataAddress, "127.0.0.1"); | ||||||
|         d.readU32(4, &tmp, 0); |         d.readU32(4, &tmp, 0); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -30,14 +30,15 @@ | |||||||
| 
 | 
 | ||||||
| MESSAGE_CLASS_DEFINITION(DaemonSinkThread::MsgStartStop, Message) | MESSAGE_CLASS_DEFINITION(DaemonSinkThread::MsgStartStop, Message) | ||||||
| 
 | 
 | ||||||
| DaemonSinkThread::DaemonSinkThread(SDRDaemonDataQueue *dataQueue, CM256 *cm256, QObject* parent) : | DaemonSinkThread::DaemonSinkThread(SDRDaemonDataQueue *dataQueue, QObject* parent) : | ||||||
|     QThread(parent), |     QThread(parent), | ||||||
|     m_running(false), |     m_running(false), | ||||||
|     m_dataQueue(dataQueue), |     m_dataQueue(dataQueue), | ||||||
|     m_cm256(cm256), |  | ||||||
|     m_address(QHostAddress::LocalHost), |     m_address(QHostAddress::LocalHost), | ||||||
|     m_socket(0) |     m_socket(0) | ||||||
| { | { | ||||||
|  | 
 | ||||||
|  |     m_cm256p = m_cm256.isInitialized() ? &m_cm256 : 0; | ||||||
|     connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); |     connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()), Qt::QueuedConnection); | ||||||
|     connect(m_dataQueue, SIGNAL(dataBlockEnqueued()), this, SLOT(handleData()), Qt::QueuedConnection); |     connect(m_dataQueue, SIGNAL(dataBlockEnqueued()), this, SLOT(handleData()), Qt::QueuedConnection); | ||||||
| } | } | ||||||
| @ -102,7 +103,7 @@ bool DaemonSinkThread::handleDataBlock(SDRDaemonDataBlock& dataBlock) | |||||||
|     uint16_t dataPort = dataBlock.m_txControlBlock.m_dataPort; |     uint16_t dataPort = dataBlock.m_txControlBlock.m_dataPort; | ||||||
|     SDRDaemonSuperBlock *txBlockx = dataBlock.m_superBlocks; |     SDRDaemonSuperBlock *txBlockx = dataBlock.m_superBlocks; | ||||||
| 
 | 
 | ||||||
|     if ((nbBlocksFEC == 0) || !m_cm256) // Do not FEC encode
 |     if ((nbBlocksFEC == 0) || !m_cm256p) // Do not FEC encode
 | ||||||
|     { |     { | ||||||
|         if (m_socket) |         if (m_socket) | ||||||
|         { |         { | ||||||
| @ -134,7 +135,7 @@ bool DaemonSinkThread::handleDataBlock(SDRDaemonDataBlock& dataBlock) | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         // Encode FEC blocks
 |         // Encode FEC blocks
 | ||||||
|         if (m_cm256->cm256_encode(cm256Params, descriptorBlocks, fecBlocks)) |         if (m_cm256p->cm256_encode(cm256Params, descriptorBlocks, fecBlocks)) | ||||||
|         { |         { | ||||||
|             qWarning("SDRDaemonChannelSinkThread::handleDataBlock: CM256 encode failed. No transmission."); |             qWarning("SDRDaemonChannelSinkThread::handleDataBlock: CM256 encode failed. No transmission."); | ||||||
|             // TODO: send without FEC changing meta data to set indication of no FEC
 |             // TODO: send without FEC changing meta data to set indication of no FEC
 | ||||||
|  | |||||||
| @ -25,6 +25,8 @@ | |||||||
| #include <QWaitCondition> | #include <QWaitCondition> | ||||||
| #include <QHostAddress> | #include <QHostAddress> | ||||||
| 
 | 
 | ||||||
|  | #include "cm256.h" | ||||||
|  | 
 | ||||||
| #include "util/message.h" | #include "util/message.h" | ||||||
| #include "util/messagequeue.h" | #include "util/messagequeue.h" | ||||||
| 
 | 
 | ||||||
| @ -56,7 +58,7 @@ public: | |||||||
|         { } |         { } | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     DaemonSinkThread(SDRDaemonDataQueue *dataQueue, CM256 *cm256, QObject* parent = 0); |     DaemonSinkThread(SDRDaemonDataQueue *dataQueue, QObject* parent = 0); | ||||||
|     ~DaemonSinkThread(); |     ~DaemonSinkThread(); | ||||||
| 
 | 
 | ||||||
|     void startStop(bool start); |     void startStop(bool start); | ||||||
| @ -67,7 +69,8 @@ private: | |||||||
| 	bool m_running; | 	bool m_running; | ||||||
| 
 | 
 | ||||||
|     SDRDaemonDataQueue *m_dataQueue; |     SDRDaemonDataQueue *m_dataQueue; | ||||||
|     CM256 *m_cm256;                       //!< CM256 library object
 |     CM256 m_cm256; | ||||||
|  |     CM256 *m_cm256p; | ||||||
| 
 | 
 | ||||||
|     QHostAddress m_address; |     QHostAddress m_address; | ||||||
|     QUdpSocket *m_socket; |     QUdpSocket *m_socket; | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user