From 9bf030c824a8fe5dd6a5e02dd0b54203c455a613 Mon Sep 17 00:00:00 2001 From: f4exb Date: Tue, 11 Sep 2018 00:24:18 +0200 Subject: [PATCH] SDRDaemonSink: ananonymize protected bloc in UDPSinkFEC also --- .../sdrdaemonsink/sdrdaemonsinkgui.ui | 8 +-- .../sdrdaemonsink/sdrdaemonsinkoutput.cpp | 2 + .../samplesink/sdrdaemonsink/udpsinkfec.cpp | 50 +++++++++++++++---- plugins/samplesink/sdrdaemonsink/udpsinkfec.h | 4 +- .../sdrdaemonsource/sdrdaemonsourcegui.ui | 7 ++- 5 files changed, 53 insertions(+), 18 deletions(-) diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.ui b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.ui index 760a65de5..fb2586dfd 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.ui +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.ui @@ -620,7 +620,7 @@ - API IP address + Remote API IPv4 address 000.000.000.000 @@ -646,7 +646,7 @@ - API IP port + Remote API port 00000 @@ -711,7 +711,7 @@ - Remote data address + Remote data connection IPv4 address 000.000.000.000 @@ -737,7 +737,7 @@ - Remote data port + Remote data connection port 00000 diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp index bc112b475..03f4808cb 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp @@ -92,9 +92,11 @@ bool SDRdaemonSinkOutput::start() m_sdrDaemonSinkThread->connectTimer(m_masterTimer); m_sdrDaemonSinkThread->startWork(); + // restart auto rate correction m_lastRemoteTimestampRateCorrection = 0; m_lastTimestampRateCorrection = 0; m_lastQueueLength = -2; // set first value out of bounds + m_chunkSizeCorrection = 0; double delay = ((127*126*m_settings.m_txDelay) / m_settings.m_sampleRate)/(128 + m_settings.m_nbFECBlocks); m_sdrDaemonSinkThread->setTxDelay((int) (delay*1e6)); diff --git a/plugins/samplesink/sdrdaemonsink/udpsinkfec.cpp b/plugins/samplesink/sdrdaemonsink/udpsinkfec.cpp index c2a25ac2a..6fa7ee1d2 100644 --- a/plugins/samplesink/sdrdaemonsink/udpsinkfec.cpp +++ b/plugins/samplesink/sdrdaemonsink/udpsinkfec.cpp @@ -141,18 +141,34 @@ void UDPSinkFEC::write(const SampleVector::iterator& begin, uint32_t sampleChunk m_txBlockIndex = 1; // next Tx block with data } + int samplesPerBlock = bytesPerBlock / (m_sampleBytes*2); + if (m_sampleIndex + inRemainingSamples < samplesPerBlock) // there is still room in the current super block { - if (SDR_RX_SAMP_SZ == SDR_TX_SAMP_SZ) // can do direct copy if sizes are equal (to 16 bits) + if (sizeof(Sample) == m_sampleBytes*2) // can do direct copy if sample sizes are equal { - memcpy((char *) &m_superBlock.protectedBlock.m_samples[m_sampleIndex], + memcpy((char *) &m_superBlock.protectedBlock.m_buf[m_sampleIndex*m_sampleBytes*2], (const char *) &(*it), inRemainingSamples * sizeof(Sample)); } - else // Samples are limited to 16 bits by the modulators + else if ((sizeof(Sample) == 8) && (m_sampleBytes == 2)) // modulators produce 16 bit samples { - for (int is = 0; is < inRemainingSamples; is++) { - m_superBlock.protectedBlock.m_samples[m_sampleIndex+is] = *(it+is); + for (int is = 0; is < inRemainingSamples; is++) + { + int16_t *rp = (int16_t*) &(m_superBlock.protectedBlock.m_buf[(m_sampleIndex+is)*m_sampleBytes*2]); + int16_t *ip = (int16_t*) &(m_superBlock.protectedBlock.m_buf[(m_sampleIndex+is)*m_sampleBytes*2+2]); + *rp = (it+is)->m_real & 0xFFFF; + *ip = (it+is)->m_imag & 0xFFFF; + } + } + else if ((sizeof(Sample) == 4) && (m_sampleBytes == 4)) // use 16 bit samples for Tx + { + for (int is = 0; is < inRemainingSamples; is++) + { + int32_t *rp = (int32_t*) &(m_superBlock.protectedBlock.m_buf[(m_sampleIndex+is)*m_sampleBytes*2]); + int32_t *ip = (int32_t*) &(m_superBlock.protectedBlock.m_buf[(m_sampleIndex+is)*m_sampleBytes*2+4]); + *rp = (it+is)->m_real; + *ip = (it+is)->m_imag; } } @@ -161,16 +177,30 @@ void UDPSinkFEC::write(const SampleVector::iterator& begin, uint32_t sampleChunk } else // complete super block and initiate the next if not end of frame { - if (SDR_RX_SAMP_SZ == SDR_TX_SAMP_SZ) // can do direct copy if sizes are equal (to 16 bits) + if (sizeof(Sample) == m_sampleBytes*2) // can do direct copy if sample sizes are equal { - memcpy((char *) &m_superBlock.protectedBlock.m_samples[m_sampleIndex], + memcpy((char *) &m_superBlock.protectedBlock.m_buf[m_sampleIndex*m_sampleBytes*2], (const char *) &(*it), (samplesPerBlock - m_sampleIndex) * sizeof(Sample)); } - else // Samples are limited to 16 bits by the modulators + else if ((sizeof(Sample) == 8) && (m_sampleBytes == 2)) // modulators produce 16 bit samples { - for (int is = 0; is < samplesPerBlock - m_sampleIndex; is++) { - m_superBlock.protectedBlock.m_samples[m_sampleIndex+is] = *(it+is); + for (int is = 0; is < samplesPerBlock - m_sampleIndex; is++) + { + int16_t *rp = (int16_t*) &(m_superBlock.protectedBlock.m_buf[(m_sampleIndex+is)*m_sampleBytes*2]); + int16_t *ip = (int16_t*) &(m_superBlock.protectedBlock.m_buf[(m_sampleIndex+is)*m_sampleBytes*2+2]); + *rp = (it+is)->m_real & 0xFFFF; + *ip = (it+is)->m_imag & 0xFFFF; + } + } + else if ((sizeof(Sample) == 4) && (m_sampleBytes == 4)) // use 16 bit samples for Tx + { + for (int is = 0; is < samplesPerBlock - m_sampleIndex; is++) + { + int32_t *rp = (int32_t*) &(m_superBlock.protectedBlock.m_buf[(m_sampleIndex+is)*m_sampleBytes*2]); + int32_t *ip = (int32_t*) &(m_superBlock.protectedBlock.m_buf[(m_sampleIndex+is)*m_sampleBytes*2+4]); + *rp = (it+is)->m_real; + *ip = (it+is)->m_imag; } } diff --git a/plugins/samplesink/sdrdaemonsink/udpsinkfec.h b/plugins/samplesink/sdrdaemonsink/udpsinkfec.h index 6fea548e8..a1cae77f5 100644 --- a/plugins/samplesink/sdrdaemonsink/udpsinkfec.h +++ b/plugins/samplesink/sdrdaemonsink/udpsinkfec.h @@ -75,11 +75,11 @@ public: uint32_t filler2; }; - static const int samplesPerBlock = (m_udpSize - sizeof(Header)) / (2 * SDR_TX_SAMP_SZ); + static const int bytesPerBlock = m_udpSize - sizeof(Header); struct ProtectedBlock { - Sample m_samples[samplesPerBlock]; + uint8_t m_buf[bytesPerBlock]; }; struct SuperBlock diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.ui b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.ui index 837506fe2..118f06235 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.ui +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcegui.ui @@ -584,7 +584,7 @@ - Local data connection IP address + Remote API IPv4 address 000.000.000.000 @@ -619,7 +619,7 @@ - Remote control port + Remote API port 00000 @@ -692,6 +692,9 @@ 16777215 + + Local data connection IPv4 address + 000.000.000.000