1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-09-05 22:57:47 -04:00

SDRDaemon output: removed dependency on sys/time.h and unistd.h

This commit is contained in:
f4exb 2018-11-13 14:21:36 +01:00
parent be6e9a0bb4
commit 83069dec63
6 changed files with 23 additions and 17 deletions

View File

@ -14,7 +14,6 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. // // along with this program. If not, see <http://www.gnu.org/licenses/>. //
/////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////
#include <sys/time.h>
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
#include <QDebug> #include <QDebug>
@ -420,9 +419,9 @@ void SDRdaemonSinkOutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSetti
void SDRdaemonSinkOutput::webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response) void SDRdaemonSinkOutput::webapiFormatDeviceReport(SWGSDRangel::SWGDeviceReport& response)
{ {
struct timeval tv; uint64_t ts_usecs;
response.getSdrDaemonSinkReport()->setBufferRwBalance(m_sampleSourceFifo.getRWBalance()); response.getSdrDaemonSinkReport()->setBufferRwBalance(m_sampleSourceFifo.getRWBalance());
response.getSdrDaemonSinkReport()->setSampleCount(m_sdrDaemonSinkThread ? (int) m_sdrDaemonSinkThread->getSamplesCount(tv) : 0); response.getSdrDaemonSinkReport()->setSampleCount(m_sdrDaemonSinkThread ? (int) m_sdrDaemonSinkThread->getSamplesCount(ts_usecs) : 0);
} }
void SDRdaemonSinkOutput::tick() void SDRdaemonSinkOutput::tick()
@ -504,8 +503,8 @@ void SDRdaemonSinkOutput::analyzeApiReply(const QJsonObject& jsonObject)
} }
uint32_t sampleCountDelta, sampleCount; uint32_t sampleCountDelta, sampleCount;
struct timeval tv; uint64_t timestampUs;
sampleCount = m_sdrDaemonSinkThread->getSamplesCount(tv); sampleCount = m_sdrDaemonSinkThread->getSamplesCount(timestampUs);
if (sampleCount < m_lastSampleCount) { if (sampleCount < m_lastSampleCount) {
sampleCountDelta = (0xFFFFFFFFU - m_lastSampleCount) + sampleCount + 1; sampleCountDelta = (0xFFFFFFFFU - m_lastSampleCount) + sampleCount + 1;
@ -513,8 +512,6 @@ void SDRdaemonSinkOutput::analyzeApiReply(const QJsonObject& jsonObject)
sampleCountDelta = sampleCount - m_lastSampleCount; sampleCountDelta = sampleCount - m_lastSampleCount;
} }
uint64_t timestampUs = tv.tv_sec*1000000ULL + tv.tv_usec;
// on initial state wait for queue stabilization // on initial state wait for queue stabilization
if ((m_lastRemoteTimestampRateCorrection == 0) && (queueLength >= m_lastQueueLength-1) && (queueLength <= m_lastQueueLength+1)) if ((m_lastRemoteTimestampRateCorrection == 0) && (queueLength >= m_lastQueueLength-1) && (queueLength <= m_lastQueueLength+1))
{ {

View File

@ -14,7 +14,6 @@
// along with this program. If not, see <http://www.gnu.org/licenses/>. // // along with this program. If not, see <http://www.gnu.org/licenses/>. //
/////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////
#include <sys/time.h>
#include <stdio.h> #include <stdio.h>
#include <errno.h> #include <errno.h>
#include <assert.h> #include <assert.h>
@ -22,6 +21,7 @@
#include <QDebug> #include <QDebug>
#include "dsp/samplesourcefifo.h" #include "dsp/samplesourcefifo.h"
#include "util/timeutil.h"
#include "sdrdaemonsinkthread.h" #include "sdrdaemonsinkthread.h"
SDRdaemonSinkThread::SDRdaemonSinkThread(SampleSourceFifo* sampleFifo, QObject* parent) : SDRdaemonSinkThread::SDRdaemonSinkThread(SampleSourceFifo* sampleFifo, QObject* parent) :
@ -140,8 +140,8 @@ void SDRdaemonSinkThread::tick()
} }
} }
uint32_t SDRdaemonSinkThread::getSamplesCount(struct timeval& tv) const uint32_t SDRdaemonSinkThread::getSamplesCount(uint64_t& ts_usecs) const
{ {
gettimeofday(&tv, 0); ts_usecs = TimeUtil::nowus();
return m_samplesCount; return m_samplesCount;
} }

View File

@ -55,7 +55,7 @@ public:
bool isRunning() const { return m_running; } bool isRunning() const { return m_running; }
uint32_t getSamplesCount(struct timeval& tv) const; uint32_t getSamplesCount(uint64_t& ts_usecs) const;
void setSamplesCount(int samplesCount) { m_samplesCount = samplesCount; } void setSamplesCount(int samplesCount) { m_samplesCount = samplesCount; }
void setChunkCorrection(int chunkCorrection) { m_chunkCorrection = chunkCorrection; } void setChunkCorrection(int chunkCorrection) { m_chunkCorrection = chunkCorrection; }

View File

@ -16,11 +16,10 @@
#include <QDebug> #include <QDebug>
#include <sys/time.h>
#include <unistd.h>
#include <boost/crc.hpp> #include <boost/crc.hpp>
#include <boost/cstdint.hpp> #include <boost/cstdint.hpp>
#include "util/timeutil.h"
#include "udpsinkfec.h" #include "udpsinkfec.h"
#include "udpsinkfecworker.h" #include "udpsinkfecworker.h"
@ -118,10 +117,9 @@ void UDPSinkFEC::write(const SampleVector::iterator& begin, uint32_t sampleChunk
if (m_txBlockIndex == 0) // Tx block index 0 is a block with only meta data if (m_txBlockIndex == 0) // Tx block index 0 is a block with only meta data
{ {
struct timeval tv;
SDRDaemonMetaDataFEC metaData; SDRDaemonMetaDataFEC metaData;
gettimeofday(&tv, 0); uint64_t ts_usecs = TimeUtil::nowus();
metaData.m_centerFrequency = 0; // frequency not set by stream metaData.m_centerFrequency = 0; // frequency not set by stream
metaData.m_sampleRate = m_sampleRate; metaData.m_sampleRate = m_sampleRate;
@ -129,8 +127,8 @@ void UDPSinkFEC::write(const SampleVector::iterator& begin, uint32_t sampleChunk
metaData.m_sampleBits = SDR_RX_SAMP_SZ; metaData.m_sampleBits = SDR_RX_SAMP_SZ;
metaData.m_nbOriginalBlocks = m_nbOriginalBlocks; metaData.m_nbOriginalBlocks = m_nbOriginalBlocks;
metaData.m_nbFECBlocks = m_nbBlocksFEC; metaData.m_nbFECBlocks = m_nbBlocksFEC;
metaData.m_tv_sec = tv.tv_sec; metaData.m_tv_sec = ts_usecs / 1000000UL;
metaData.m_tv_usec = tv.tv_usec; metaData.m_tv_usec = ts_usecs % 1000000UL;
boost::crc_32_type crc32; boost::crc_32_type crc32;
crc32.process_bytes(&metaData, 20); crc32.process_bytes(&metaData, 20);

View File

@ -25,3 +25,13 @@ uint64_t TimeUtil::nowms()
return value.count(); return value.count();
} }
uint64_t TimeUtil::nowus()
{
auto now = std::chrono::system_clock::now();
auto now_ms = std::chrono::time_point_cast<std::chrono::microseconds>(now);
auto epoch = now_ms.time_since_epoch();
auto value = std::chrono::duration_cast<std::chrono::microseconds>(epoch);
return value.count();
}

View File

@ -23,4 +23,5 @@ class SDRBASE_API TimeUtil
{ {
public: public:
static uint64_t nowms(); //!< returns the current epoch in milliseconds static uint64_t nowms(); //!< returns the current epoch in milliseconds
static uint64_t nowus(); //!< returns the current epoch in microseconds
}; };