diff --git a/devices/limesdr/devicelimesdr.cpp b/devices/limesdr/devicelimesdr.cpp index 659e7fad1..c091dbc7b 100644 --- a/devices/limesdr/devicelimesdr.cpp +++ b/devices/limesdr/devicelimesdr.cpp @@ -180,10 +180,10 @@ bool DeviceLimeSDR::SetRBBPGA_dB(lms_device_t *device, std::size_t chan, float v int rcc_ctl_pga_rbb = (430.0*pow(0.65, (g_pga_rbb/10.0))-110.35)/20.4516 + 16; int c_ctl_pga_rbb = 0; - if (0 <= g_pga_rbb && g_pga_rbb < 8) c_ctl_pga_rbb = 3; - if (8 <= g_pga_rbb && g_pga_rbb < 13) c_ctl_pga_rbb = 2; - if (13 <= g_pga_rbb && g_pga_rbb < 21) c_ctl_pga_rbb = 1; - if (21 <= g_pga_rbb) c_ctl_pga_rbb = 0; + if (g_pga_rbb < 8) { c_ctl_pga_rbb = 3; } + if (8 <= g_pga_rbb && g_pga_rbb < 13) { c_ctl_pga_rbb = 2; } + if (13 <= g_pga_rbb && g_pga_rbb < 21) { c_ctl_pga_rbb = 1; } + if (21 <= g_pga_rbb) { c_ctl_pga_rbb = 0; } if (LMS_WriteParam(device, LMS7param(RCC_CTL_PGA_RBB), rcc_ctl_pga_rbb) < 0) { diff --git a/devices/limesdr/devicelimesdrparam.h b/devices/limesdr/devicelimesdrparam.h index 34dfd8925..1bc6cdd78 100644 --- a/devices/limesdr/devicelimesdrparam.h +++ b/devices/limesdr/devicelimesdrparam.h @@ -53,6 +53,29 @@ struct DeviceLimeSDRParams m_rxFrequency(1e6), m_txFrequency(1e6) { + m_lpfRangeRx.max = 0.0f; + m_lpfRangeRx.min = 0.0f; + m_lpfRangeRx.step = 0.0f; + + m_lpfRangeTx.max = 0.0f; + m_lpfRangeTx.min = 0.0f; + m_lpfRangeTx.step = 0.0f; + + m_loRangeRx.max = 0.0f; + m_loRangeRx.min = 0.0f; + m_loRangeRx.step = 0.0f; + + m_loRangeTx.max = 0.0f; + m_loRangeTx.min = 0.0f; + m_loRangeTx.step = 0.0f; + + m_srRangeRx.max = 0.0f; + m_srRangeRx.min = 0.0f; + m_srRangeRx.step = 0.0f; + + m_srRangeTx.max = 0.0f; + m_srRangeTx.min = 0.0f; + m_srRangeTx.step = 0.0f; } /** diff --git a/plugins/channelrx/demodbfm/bfmdemod.cpp b/plugins/channelrx/demodbfm/bfmdemod.cpp index e5a22fe3f..7ce345792 100644 --- a/plugins/channelrx/demodbfm/bfmdemod.cpp +++ b/plugins/channelrx/demodbfm/bfmdemod.cpp @@ -232,18 +232,12 @@ void BFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto Real deemph_l, deemph_r; // Pre-emphasis is applied on each channel before multiplexing m_deemphasisFilterX.process(ci.real() + sampleStereo, deemph_l); m_deemphasisFilterY.process(ci.real() - sampleStereo, deemph_r); - if (m_settings.m_lsbStereo) - { - m_audioBuffer[m_audioBufferFill].l = (qint16)(deemph_l * (1<<12) * m_settings.m_volume); - m_audioBuffer[m_audioBufferFill].r = (qint16)(deemph_r * (1<<12) * m_settings.m_volume); - if (m_settings.m_copyAudioToUDP) m_udpBufferAudio->write(m_audioBuffer[m_audioBufferFill]); - } - else - { - m_audioBuffer[m_audioBufferFill].l = (qint16)(deemph_l * (1<<12) * m_settings.m_volume); - m_audioBuffer[m_audioBufferFill].r = (qint16)(deemph_r * (1<<12) * m_settings.m_volume); - if (m_settings.m_copyAudioToUDP) m_udpBufferAudio->write(m_audioBuffer[m_audioBufferFill]); - } + m_audioBuffer[m_audioBufferFill].l = (qint16)(deemph_l * (1<<12) * m_settings.m_volume); + m_audioBuffer[m_audioBufferFill].r = (qint16)(deemph_r * (1<<12) * m_settings.m_volume); + + if (m_settings.m_copyAudioToUDP) { + m_udpBufferAudio->write(m_audioBuffer[m_audioBufferFill]); + } } else { @@ -252,7 +246,10 @@ void BFMDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto quint16 sample = (qint16)(deemph * (1<<12) * m_settings.m_volume); m_audioBuffer[m_audioBufferFill].l = sample; m_audioBuffer[m_audioBufferFill].r = sample; - if (m_settings.m_copyAudioToUDP) m_udpBufferAudio->write(m_audioBuffer[m_audioBufferFill]); + + if (m_settings.m_copyAudioToUDP) { + m_udpBufferAudio->write(m_audioBuffer[m_audioBufferFill]); + } } ++m_audioBufferFill; diff --git a/plugins/channeltx/modatv/atvmod.cpp b/plugins/channeltx/modatv/atvmod.cpp index 01ae25a16..56cb8f5b8 100644 --- a/plugins/channeltx/modatv/atvmod.cpp +++ b/plugins/channeltx/modatv/atvmod.cpp @@ -448,7 +448,7 @@ void ATVMod::pullVideo(Real& sample) resizeCamera(); } - if (camera.m_videoFPSCount < camera.m_videoFPSManualEnable ? camera.m_videoFPSManual : camera.m_videoFPS) + if (camera.m_videoFPSCount < (camera.m_videoFPSManualEnable ? camera.m_videoFPSManual : camera.m_videoFPS)) { camera.m_videoPrevFPSCount = (int) camera.m_videoFPSCount; camera.m_videoFPSCount += (camera.m_videoFPSManualEnable ? camera.m_videoFPSqManual : camera.m_videoFPSq); @@ -456,7 +456,7 @@ void ATVMod::pullVideo(Real& sample) else { camera.m_videoPrevFPSCount = 0; - camera.m_videoFPSCount = camera.m_videoFPSManualEnable ? camera.m_videoFPSqManual : camera.m_videoFPSq; + camera.m_videoFPSCount = (camera.m_videoFPSManualEnable ? camera.m_videoFPSqManual : camera.m_videoFPSq); } } } diff --git a/plugins/channeltx/udpsink/udpsinkudphandler.cpp b/plugins/channeltx/udpsink/udpsinkudphandler.cpp index ef84c4c24..b37134d10 100644 --- a/plugins/channeltx/udpsink/udpsinkudphandler.cpp +++ b/plugins/channeltx/udpsink/udpsinkudphandler.cpp @@ -16,6 +16,7 @@ #include #include +#include #include "udpsinkmsg.h" #include "udpsinkudphandler.h" @@ -41,6 +42,7 @@ UDPSinkUDPHandler::UDPSinkUDPHandler() : m_feedbackMessageQueue(0) { m_udpBuf = new udpBlk_t[m_minNbUDPFrames]; + std::fill(m_udpDump, m_udpDump + m_udpBlockSize + 8192, 0); connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleMessages())); } @@ -180,7 +182,8 @@ void UDPSinkUDPHandler::advanceReadPointer(int nbBytes) else { m_rwDelta = m_writeIndex; // raw R/W delta estimate - float d = (m_rwDelta - (m_nbUDPFrames/2))/(float) m_nbUDPFrames; + int nbUDPFrames2 = m_nbUDPFrames/2; + float d = (m_rwDelta - nbUDPFrames2)/(float) m_nbUDPFrames; //qDebug("UDPSinkUDPHandler::advanceReadPointer: w: %02d d: %f", m_writeIndex, d); if ((d < -0.45) || (d > 0.45)) diff --git a/plugins/samplesink/bladerfoutput/bladerfoutput.cpp b/plugins/samplesink/bladerfoutput/bladerfoutput.cpp index 1b3f08147..2bfd38ee1 100644 --- a/plugins/samplesink/bladerfoutput/bladerfoutput.cpp +++ b/plugins/samplesink/bladerfoutput/bladerfoutput.cpp @@ -134,12 +134,7 @@ bool BladerfOutput::start() if (m_running) stop(); - if((m_bladerfThread = new BladerfOutputThread(m_dev, &m_sampleSourceFifo)) == 0) - { - qCritical("BladerfOutput::start: out of memory"); - stop(); - return false; - } + m_bladerfThread = new BladerfOutputThread(m_dev, &m_sampleSourceFifo); // mutexLocker.unlock(); applySettings(m_settings, true); diff --git a/plugins/samplesink/bladerfoutput/bladerfoutputplugin.cpp b/plugins/samplesink/bladerfoutput/bladerfoutputplugin.cpp index 31e626882..a8a484d99 100644 --- a/plugins/samplesink/bladerfoutput/bladerfoutputplugin.cpp +++ b/plugins/samplesink/bladerfoutput/bladerfoutputplugin.cpp @@ -58,23 +58,23 @@ PluginInterface::SamplingDevices BladerfOutputPlugin::enumSampleSinks() int count = bladerf_get_device_list(&devinfo); - for(int i = 0; i < count; i++) - { - QString displayedName(QString("BladeRF[%1] %2").arg(devinfo[i].instance).arg(devinfo[i].serial)); - - result.append(SamplingDevice(displayedName, - m_hardwareID, - m_deviceTypeID, - QString(devinfo[i].serial), - i, - PluginInterface::SamplingDevice::PhysicalDevice, - false, - 1, - 0)); - } - if (devinfo) { + for(int i = 0; i < count; i++) + { + QString displayedName(QString("BladeRF[%1] %2").arg(devinfo[i].instance).arg(devinfo[i].serial)); + + result.append(SamplingDevice(displayedName, + m_hardwareID, + m_deviceTypeID, + QString(devinfo[i].serial), + i, + PluginInterface::SamplingDevice::PhysicalDevice, + false, + 1, + 0)); + } + bladerf_free_device_list(devinfo); // Valgrind memcheck } diff --git a/plugins/samplesink/bladerfoutput/bladerfoutputthread.cpp b/plugins/samplesink/bladerfoutput/bladerfoutputthread.cpp index 94eddc475..daa028e66 100644 --- a/plugins/samplesink/bladerfoutput/bladerfoutputthread.cpp +++ b/plugins/samplesink/bladerfoutput/bladerfoutputthread.cpp @@ -16,6 +16,7 @@ #include #include +#include #include "bladerfoutputthread.h" @@ -28,6 +29,7 @@ BladerfOutputThread::BladerfOutputThread(struct bladerf* dev, SampleSourceFifo* m_log2Interp(0), m_fcPos(0) { + std::fill(m_buf, m_buf + 2*BLADERFOUTPUT_BLOCKSIZE, 0); } BladerfOutputThread::~BladerfOutputThread() diff --git a/plugins/samplesink/filesink/filesinkoutput.cpp b/plugins/samplesink/filesink/filesinkoutput.cpp index 1e1d302b2..b7e47615c 100644 --- a/plugins/samplesink/filesink/filesinkoutput.cpp +++ b/plugins/samplesink/filesink/filesinkoutput.cpp @@ -90,13 +90,7 @@ bool FileSinkOutput::start() openFileStream(); - if((m_fileSinkThread = new FileSinkThread(&m_ofstream, &m_sampleSourceFifo)) == 0) - { - qCritical("out of memory"); - stop(); - return false; - } - + m_fileSinkThread = new FileSinkThread(&m_ofstream, &m_sampleSourceFifo); m_fileSinkThread->setSamplerate(m_settings.m_sampleRate); m_fileSinkThread->setLog2Interpolation(m_settings.m_log2Interp); m_fileSinkThread->connectTimer(m_masterTimer); diff --git a/plugins/samplesink/hackrfoutput/hackrfoutput.cpp b/plugins/samplesink/hackrfoutput/hackrfoutput.cpp index 7e497f8f2..2fb819264 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutput.cpp +++ b/plugins/samplesink/hackrfoutput/hackrfoutput.cpp @@ -116,12 +116,7 @@ bool HackRFOutput::start() if (m_running) stop(); - if((m_hackRFThread = new HackRFOutputThread(m_dev, &m_sampleSourceFifo)) == 0) - { - qCritical("HackRFOutput::start: out of memory"); - stop(); - return false; - } + m_hackRFThread = new HackRFOutputThread(m_dev, &m_sampleSourceFifo); // mutexLocker.unlock(); diff --git a/plugins/samplesink/hackrfoutput/hackrfoutputthread.cpp b/plugins/samplesink/hackrfoutput/hackrfoutputthread.cpp index 12f497976..0223c33b8 100644 --- a/plugins/samplesink/hackrfoutput/hackrfoutputthread.cpp +++ b/plugins/samplesink/hackrfoutput/hackrfoutputthread.cpp @@ -29,6 +29,7 @@ HackRFOutputThread::HackRFOutputThread(hackrf_device* dev, SampleSourceFifo* sam m_sampleFifo(sampleFifo), m_log2Interp(0) { + std::fill(m_buf, m_buf + 2*HACKRF_BLOCKSIZE, 0); } HackRFOutputThread::~HackRFOutputThread() diff --git a/plugins/samplesink/limesdroutput/limesdroutput.cpp b/plugins/samplesink/limesdroutput/limesdroutput.cpp index 7b2aac50a..6650f3618 100644 --- a/plugins/samplesink/limesdroutput/limesdroutput.cpp +++ b/plugins/samplesink/limesdroutput/limesdroutput.cpp @@ -111,9 +111,6 @@ bool LimeSDROutput::openDevice() // check if the requested channel is busy and abort if so (should not happen if device management is working correctly) - char *busyChannels = new char[deviceParams->m_nbTxChannels]; - memset(busyChannels, 0, deviceParams->m_nbTxChannels); - for (unsigned int i = 0; i < m_deviceAPI->getSinkBuddies().size(); i++) { DeviceSinkAPI *buddy = m_deviceAPI->getSinkBuddies()[i]; @@ -122,13 +119,11 @@ bool LimeSDROutput::openDevice() if (buddyShared->m_channel == requestedChannel) { qCritical("LimeSDROutput::openDevice: cannot open busy channel %u", requestedChannel); - delete[] busyChannels; return false; } } m_deviceShared.m_channel = requestedChannel; // acknowledge the requested channel - delete[] busyChannels; } // look for Rx buddies and get reference to common parameters // take the first Rx channel @@ -370,20 +365,12 @@ bool LimeSDROutput::start() return false; } - applySettings(m_settings, true); - // start / stop streaming is done in the thread. - if ((m_limeSDROutputThread = new LimeSDROutputThread(&m_streamId, &m_sampleSourceFifo)) == 0) - { - qCritical("LimeSDROutput::start: cannot create thread"); - stop(); - return false; - } - else - { - qDebug("LimeSDROutput::start: thread created"); - } + m_limeSDROutputThread = new LimeSDROutputThread(&m_streamId, &m_sampleSourceFifo); + qDebug("LimeSDROutput::start: thread created"); + + applySettings(m_settings, true); m_limeSDROutputThread->setLog2Interpolation(m_settings.m_log2SoftInterp); diff --git a/plugins/samplesink/limesdroutput/limesdroutputthread.cpp b/plugins/samplesink/limesdroutput/limesdroutputthread.cpp index 218f35523..3dac3cf8f 100644 --- a/plugins/samplesink/limesdroutput/limesdroutputthread.cpp +++ b/plugins/samplesink/limesdroutput/limesdroutputthread.cpp @@ -15,6 +15,7 @@ /////////////////////////////////////////////////////////////////////////////////// #include +#include #include "limesdroutputthread.h" #include "limesdroutputsettings.h" @@ -27,6 +28,7 @@ LimeSDROutputThread::LimeSDROutputThread(lms_stream_t* stream, SampleSourceFifo* m_log2Interp(0), m_fcPos(LimeSDROutputSettings::FC_POS_CENTER) { + std::fill(m_buf, m_buf + 2*LIMESDROUTPUT_BLOCKSIZE, 0); } LimeSDROutputThread::~LimeSDROutputThread() diff --git a/plugins/samplesink/plutosdroutput/plutosdroutput.cpp b/plugins/samplesink/plutosdroutput/plutosdroutput.cpp index 6d8d90aed..374ab452c 100644 --- a/plugins/samplesink/plutosdroutput/plutosdroutput.cpp +++ b/plugins/samplesink/plutosdroutput/plutosdroutput.cpp @@ -42,6 +42,13 @@ PlutoSDROutput::PlutoSDROutput(DeviceSinkAPI *deviceAPI) : m_plutoTxBuffer(0), m_plutoSDROutputThread(0) { + m_deviceSampleRates.m_addaConnvRate = 0; + m_deviceSampleRates.m_bbRateHz = 0; + m_deviceSampleRates.m_firRate = 0; + m_deviceSampleRates.m_hb1Rate = 0; + m_deviceSampleRates.m_hb2Rate = 0; + m_deviceSampleRates.m_hb3Rate = 0; + suspendBuddies(); openDevice(); resumeBuddies(); @@ -72,20 +79,12 @@ bool PlutoSDROutput::start() if (m_running) stop(); - applySettings(m_settings, true); - // start / stop streaming is done in the thread. - if ((m_plutoSDROutputThread = new PlutoSDROutputThread(PLUTOSDR_BLOCKSIZE_SAMPLES, m_deviceShared.m_deviceParams->getBox(), &m_sampleSourceFifo)) == 0) - { - qCritical("PlutoSDROutput::start: cannot create thread"); - stop(); - return false; - } - else - { - qDebug("PlutoSDROutput::start: thread created"); - } + m_plutoSDROutputThread = new PlutoSDROutputThread(PLUTOSDR_BLOCKSIZE_SAMPLES, m_deviceShared.m_deviceParams->getBox(), &m_sampleSourceFifo); + qDebug("PlutoSDROutput::start: thread created"); + + applySettings(m_settings, true); m_plutoSDROutputThread->setLog2Interpolation(m_settings.m_log2Interp); m_plutoSDROutputThread->startWork(); @@ -257,11 +256,9 @@ bool PlutoSDROutput::openDevice() m_deviceAPI->setBuddySharedPtr(&m_deviceShared); // propagate common parameters to API // acquire the channel - suspendBuddies(); DevicePlutoSDRBox *plutoBox = m_deviceShared.m_deviceParams->getBox(); plutoBox->openTx(); m_plutoTxBuffer = plutoBox->createTxBuffer(PLUTOSDR_BLOCKSIZE_SAMPLES, false); // PlutoSDR buffer size is counted in number of (I,Q) samples - resumeBuddies(); return true; } diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.cpp b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.cpp index 3e844d322..96773dc4c 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.cpp +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkgui.cpp @@ -601,15 +601,11 @@ void SDRdaemonSinkGui::tick() samplesCorr = 127*8; quickStart = true; } - else if (queueLength < 8) + else if (queueLength < 16) { samplesCorr = ((8 - queueLength)*16)/m_nbSinceLastFlowCheck; } - else if (queueLength > 8) - { - samplesCorr = ((8 - queueLength)*16)/m_nbSinceLastFlowCheck; - } - else if (queueLength > 16) + else { samplesCorr = -127*16; quickStart = true; diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp index 23fed01e9..f9469cb3e 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkoutput.cpp @@ -64,12 +64,7 @@ bool SDRdaemonSinkOutput::start() QMutexLocker mutexLocker(&m_mutex); qDebug() << "SDRdaemonSinkOutput::start"; - if((m_sdrDaemonSinkThread = new SDRdaemonSinkThread(&m_sampleSourceFifo)) == 0) - { - qCritical("out of memory"); - stop(); - return false; - } + m_sdrDaemonSinkThread = new SDRdaemonSinkThread(&m_sampleSourceFifo); m_sdrDaemonSinkThread->setRemoteAddress(m_settings.m_address, m_settings.m_dataPort); m_sdrDaemonSinkThread->setCenterFrequency(m_settings.m_centerFrequency); m_sdrDaemonSinkThread->setSamplerate(m_settings.m_sampleRate); diff --git a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkthread.h b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkthread.h index 6a17cdd4e..581a6cb88 100644 --- a/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkthread.h +++ b/plugins/samplesink/sdrdaemonsink/sdrdaemonsinkthread.h @@ -63,7 +63,7 @@ public: private: QMutex m_startWaitMutex; QWaitCondition m_startWaiter; - bool m_running; + volatile bool m_running; int m_samplesChunkSize; SampleSourceFifo* m_sampleFifo; diff --git a/plugins/samplesink/sdrdaemonsink/udpsinkfec.cpp b/plugins/samplesink/sdrdaemonsink/udpsinkfec.cpp index 3637c29fa..ce7747b2e 100644 --- a/plugins/samplesink/sdrdaemonsink/udpsinkfec.cpp +++ b/plugins/samplesink/sdrdaemonsink/udpsinkfec.cpp @@ -115,7 +115,7 @@ void UDPSinkFEC::write(const SampleVector::iterator& begin, uint32_t sampleChunk metaData.m_crc32 = crc32.checksum(); - memset((void *) &m_superBlock, 0, m_udpSize); + memset((void *) &m_superBlock, 0, sizeof(m_superBlock)); m_superBlock.header.frameIndex = m_frameCount; m_superBlock.header.blockIndex = m_txBlockIndex; diff --git a/plugins/samplesink/sdrdaemonsink/udpsinkfec.h b/plugins/samplesink/sdrdaemonsink/udpsinkfec.h index a0a374e24..825a4b12a 100644 --- a/plugins/samplesink/sdrdaemonsink/udpsinkfec.h +++ b/plugins/samplesink/sdrdaemonsink/udpsinkfec.h @@ -244,7 +244,7 @@ private slots: private: void encodeAndTransmit(UDPSinkFEC::SuperBlock *txBlockx, uint16_t frameIndex, uint32_t nbBlocksFEC, uint32_t txDelay); - bool m_running; + volatile bool m_running; CM256 m_cm256; //!< CM256 library object bool m_cm256Valid; //!< true if CM256 library is initialized correctly UDPSocket m_socket; diff --git a/plugins/samplesource/airspy/airspyinput.cpp b/plugins/samplesource/airspy/airspyinput.cpp index ae0c53355..450c46a30 100644 --- a/plugins/samplesource/airspy/airspyinput.cpp +++ b/plugins/samplesource/airspy/airspyinput.cpp @@ -161,15 +161,9 @@ bool AirspyInput::start() return false; } - if (m_running) stop(); - - if((m_airspyThread = new AirspyThread(m_dev, &m_sampleFifo)) == 0) - { - qCritical("AirspyInput::start: out of memory"); - stop(); - return false; - } + if (m_running) { stop(); } + m_airspyThread = new AirspyThread(m_dev, &m_sampleFifo); m_airspyThread->setSamplerate(m_sampleRates[m_settings.m_devSampleRateIndex]); m_airspyThread->setLog2Decimation(m_settings.m_log2Decim); m_airspyThread->setFcPos((int) m_settings.m_fcPos); diff --git a/plugins/samplesource/airspy/airspythread.cpp b/plugins/samplesource/airspy/airspythread.cpp index 3b2424ba5..7d03055d4 100644 --- a/plugins/samplesource/airspy/airspythread.cpp +++ b/plugins/samplesource/airspy/airspythread.cpp @@ -16,6 +16,7 @@ #include #include +#include #include "airspythread.h" @@ -34,6 +35,7 @@ AirspyThread::AirspyThread(struct airspy_device* dev, SampleSinkFifo* sampleFifo m_fcPos(0) { m_this = this; + std::fill(m_buf, m_buf + 2*AIRSPY_BLOCKSIZE, 0); } AirspyThread::~AirspyThread() diff --git a/plugins/samplesource/bladerfinput/bladerfinput.cpp b/plugins/samplesource/bladerfinput/bladerfinput.cpp index 8a655c874..ef4901a13 100644 --- a/plugins/samplesource/bladerfinput/bladerfinput.cpp +++ b/plugins/samplesource/bladerfinput/bladerfinput.cpp @@ -146,12 +146,7 @@ bool BladerfInput::start() if (m_running) stop(); - if((m_bladerfThread = new BladerfInputThread(m_dev, &m_sampleFifo)) == 0) { - qCritical("BladerfInput::start: out of memory"); - stop(); - return false; - } - + m_bladerfThread = new BladerfInputThread(m_dev, &m_sampleFifo); m_bladerfThread->setLog2Decimation(m_settings.m_log2Decim); m_bladerfThread->setFcPos((int) m_settings.m_fcPos); diff --git a/plugins/samplesource/bladerfinput/bladerfinputplugin.cpp b/plugins/samplesource/bladerfinput/bladerfinputplugin.cpp index 288d56cbb..02a2ebd34 100644 --- a/plugins/samplesource/bladerfinput/bladerfinputplugin.cpp +++ b/plugins/samplesource/bladerfinput/bladerfinputplugin.cpp @@ -59,23 +59,23 @@ PluginInterface::SamplingDevices BlderfInputPlugin::enumSampleSources() int count = bladerf_get_device_list(&devinfo); - for(int i = 0; i < count; i++) - { - QString displayedName(QString("BladeRF[%1] %2").arg(devinfo[i].instance).arg(devinfo[i].serial)); + if (devinfo) + { + for(int i = 0; i < count; i++) + { + QString displayedName(QString("BladeRF[%1] %2").arg(devinfo[i].instance).arg(devinfo[i].serial)); - result.append(SamplingDevice(displayedName, - m_hardwareID, - m_deviceTypeID, - QString(devinfo[i].serial), - i, - PluginInterface::SamplingDevice::PhysicalDevice, - true, - 1, - 0)); - } + result.append(SamplingDevice(displayedName, + m_hardwareID, + m_deviceTypeID, + QString(devinfo[i].serial), + i, + PluginInterface::SamplingDevice::PhysicalDevice, + true, + 1, + 0)); + } - if (devinfo) - { bladerf_free_device_list(devinfo); // Valgrind memcheck } diff --git a/plugins/samplesource/bladerfinput/bladerfinputthread.cpp b/plugins/samplesource/bladerfinput/bladerfinputthread.cpp index 7805d91fa..e0dec6855 100644 --- a/plugins/samplesource/bladerfinput/bladerfinputthread.cpp +++ b/plugins/samplesource/bladerfinput/bladerfinputthread.cpp @@ -18,6 +18,7 @@ #include #include +#include #include "dsp/samplesinkfifo.h" @@ -31,6 +32,7 @@ BladerfInputThread::BladerfInputThread(struct bladerf* dev, SampleSinkFifo* samp m_log2Decim(0), m_fcPos(0) { + std::fill(m_buf, m_buf + 2*BLADERF_BLOCKSIZE, 0); } BladerfInputThread::~BladerfInputThread() diff --git a/plugins/samplesource/fcdpro/fcdproinput.cpp b/plugins/samplesource/fcdpro/fcdproinput.cpp index 314581121..e02e5df17 100644 --- a/plugins/samplesource/fcdpro/fcdproinput.cpp +++ b/plugins/samplesource/fcdpro/fcdproinput.cpp @@ -121,12 +121,7 @@ bool FCDProInput::start() return false; } - if ((m_FCDThread = new FCDProThread(&m_sampleFifo)) == NULL) - { - qCritical("out of memory"); - return false; - } - + m_FCDThread = new FCDProThread(&m_sampleFifo); m_FCDThread->startWork(); // mutexLocker.unlock(); diff --git a/plugins/samplesource/fcdproplus/fcdproplusinput.cpp b/plugins/samplesource/fcdproplus/fcdproplusinput.cpp index e350933f0..92be2bab8 100644 --- a/plugins/samplesource/fcdproplus/fcdproplusinput.cpp +++ b/plugins/samplesource/fcdproplus/fcdproplusinput.cpp @@ -115,12 +115,7 @@ bool FCDProPlusInput::start() return false; } - if ((m_FCDThread = new FCDProPlusThread(&m_sampleFifo)) == NULL) - { - qCritical("out of memory"); - return false; - } - + m_FCDThread = new FCDProPlusThread(&m_sampleFifo); m_FCDThread->startWork(); // mutexLocker.unlock(); diff --git a/plugins/samplesource/filesource/filesourceinput.cpp b/plugins/samplesource/filesource/filesourceinput.cpp index 6a6a8f946..b7b859c85 100644 --- a/plugins/samplesource/filesource/filesourceinput.cpp +++ b/plugins/samplesource/filesource/filesourceinput.cpp @@ -145,12 +145,7 @@ bool FileSourceInput::start() //openFileStream(); - if((m_fileSourceThread = new FileSourceThread(&m_ifstream, &m_sampleFifo)) == NULL) { - qCritical("out of memory"); - stop(); - return false; - } - + m_fileSourceThread = new FileSourceThread(&m_ifstream, &m_sampleFifo); m_fileSourceThread->setSampleRateAndSize(m_sampleRate, m_sampleSize); m_fileSourceThread->connectTimer(m_masterTimer); m_fileSourceThread->startWork(); diff --git a/plugins/samplesource/hackrfinput/hackrfinput.cpp b/plugins/samplesource/hackrfinput/hackrfinput.cpp index 29c3a74a1..3c51c7fad 100644 --- a/plugins/samplesource/hackrfinput/hackrfinput.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinput.cpp @@ -132,12 +132,7 @@ bool HackRFInput::start() if (m_running) stop(); - if ((m_hackRFThread = new HackRFInputThread(m_dev, &m_sampleFifo)) == 0) - { - qCritical("HackRFInput::start: out of memory"); - stop(); - return false; - } + m_hackRFThread = new HackRFInputThread(m_dev, &m_sampleFifo); // mutexLocker.unlock(); diff --git a/plugins/samplesource/hackrfinput/hackrfinputthread.cpp b/plugins/samplesource/hackrfinput/hackrfinputthread.cpp index db002490a..c0a9dfc57 100644 --- a/plugins/samplesource/hackrfinput/hackrfinputthread.cpp +++ b/plugins/samplesource/hackrfinput/hackrfinputthread.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include "dsp/samplesinkfifo.h" @@ -32,6 +33,7 @@ HackRFInputThread::HackRFInputThread(hackrf_device* dev, SampleSinkFifo* sampleF m_log2Decim(0), m_fcPos(0) { + std::fill(m_buf, m_buf + 2*HACKRF_BLOCKSIZE, 0); } HackRFInputThread::~HackRFInputThread() diff --git a/plugins/samplesource/limesdrinput/limesdrinput.cpp b/plugins/samplesource/limesdrinput/limesdrinput.cpp index f30b3270a..da15bf064 100644 --- a/plugins/samplesource/limesdrinput/limesdrinput.cpp +++ b/plugins/samplesource/limesdrinput/limesdrinput.cpp @@ -129,9 +129,6 @@ bool LimeSDRInput::openDevice() // check if the requested channel is busy and abort if so (should not happen if device management is working correctly) - char *busyChannels = new char[deviceParams->m_nbRxChannels]; - memset(busyChannels, 0, deviceParams->m_nbRxChannels); - for (unsigned int i = 0; i < m_deviceAPI->getSourceBuddies().size(); i++) { DeviceSourceAPI *buddy = m_deviceAPI->getSourceBuddies()[i]; @@ -140,13 +137,11 @@ bool LimeSDRInput::openDevice() if (buddyShared->m_channel == requestedChannel) { qCritical("LimeSDRInput::openDevice: cannot open busy channel %u", requestedChannel); - delete[] busyChannels; return false; } } m_deviceShared.m_channel = requestedChannel; // acknowledge the requested channel - delete[] busyChannels; } // look for Tx buddies and get reference to common parameters // take the first Rx channel @@ -389,20 +384,12 @@ bool LimeSDRInput::start() return false; } - applySettings(m_settings, true); - // start / stop streaming is done in the thread. - if ((m_limeSDRInputThread = new LimeSDRInputThread(&m_streamId, &m_sampleFifo)) == 0) - { - qCritical("LimeSDRInput::start: cannot create thread"); - stop(); - return false; - } - else - { - qDebug("LimeSDRInput::start: thread created"); - } + m_limeSDRInputThread = new LimeSDRInputThread(&m_streamId, &m_sampleFifo); + qDebug("LimeSDRInput::start: thread created"); + + applySettings(m_settings, true); m_limeSDRInputThread->setLog2Decimation(m_settings.m_log2SoftDecim); diff --git a/plugins/samplesource/limesdrinput/limesdrinputthread.cpp b/plugins/samplesource/limesdrinput/limesdrinputthread.cpp index 5d32b4060..208455b30 100644 --- a/plugins/samplesource/limesdrinput/limesdrinputthread.cpp +++ b/plugins/samplesource/limesdrinput/limesdrinputthread.cpp @@ -15,6 +15,7 @@ /////////////////////////////////////////////////////////////////////////////////// #include +#include #include "limesdrinputsettings.h" #include "limesdrinputthread.h" @@ -27,6 +28,7 @@ LimeSDRInputThread::LimeSDRInputThread(lms_stream_t* stream, SampleSinkFifo* sam m_sampleFifo(sampleFifo), m_log2Decim(0) { + std::fill(m_buf, m_buf + 2*LIMESDR_BLOCKSIZE, 0); } LimeSDRInputThread::~LimeSDRInputThread() diff --git a/plugins/samplesource/perseus/perseusinput.cpp b/plugins/samplesource/perseus/perseusinput.cpp index 893accd0a..50f45c380 100644 --- a/plugins/samplesource/perseus/perseusinput.cpp +++ b/plugins/samplesource/perseus/perseusinput.cpp @@ -68,20 +68,12 @@ bool PerseusInput::start() { if (m_running) stop(); - applySettings(m_settings, true); - // start / stop streaming is done in the thread. - if ((m_perseusThread = new PerseusThread(m_perseusDescriptor, &m_sampleFifo)) == 0) - { - qCritical("PerseusInput::start: cannot create thread"); - stop(); - return false; - } - else - { - qDebug("PerseusInput::start: thread created"); - } + m_perseusThread = new PerseusThread(m_perseusDescriptor, &m_sampleFifo); + qDebug("PerseusInput::start: thread created"); + + applySettings(m_settings, true); m_perseusThread->setLog2Decimation(m_settings.m_log2Decim); m_perseusThread->startWork(); diff --git a/plugins/samplesource/perseus/perseusthread.cpp b/plugins/samplesource/perseus/perseusthread.cpp index a64b84e47..ec0441a78 100644 --- a/plugins/samplesource/perseus/perseusthread.cpp +++ b/plugins/samplesource/perseus/perseusthread.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////////////// -// Copyright (C) 2018 Edouard Griffiths, F4EXB // + // Copyright (C) 2018 Edouard Griffiths, F4EXB // // // // This program is free software; you can redistribute it and/or modify // // it under the terms of the GNU General Public License as published by // @@ -15,6 +15,7 @@ /////////////////////////////////////////////////////////////////////////////////// #include +#include #include "perseusthread.h" PerseusThread *PerseusThread::m_this = 0; @@ -28,6 +29,7 @@ PerseusThread::PerseusThread(perseus_descr* dev, SampleSinkFifo* sampleFifo, QOb m_log2Decim(0) { m_this = this; + std::fill(m_buf, m_buf + 2*PERSEUS_NBSAMPLES, 0); } PerseusThread::~PerseusThread() diff --git a/plugins/samplesource/perseus/perseusthread.h b/plugins/samplesource/perseus/perseusthread.h index 6fe21e93d..46d75c649 100644 --- a/plugins/samplesource/perseus/perseusthread.h +++ b/plugins/samplesource/perseus/perseusthread.h @@ -42,7 +42,7 @@ public: private: QMutex m_startWaitMutex; QWaitCondition m_startWaiter; - bool m_running; + volatile bool m_running; perseus_descr* m_dev; qint32 m_buf[2*PERSEUS_NBSAMPLES]; diff --git a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp index 4025c3c5f..7086a02b0 100644 --- a/plugins/samplesource/plutosdrinput/plutosdrinput.cpp +++ b/plugins/samplesource/plutosdrinput/plutosdrinput.cpp @@ -44,6 +44,13 @@ PlutoSDRInput::PlutoSDRInput(DeviceSourceAPI *deviceAPI) : m_plutoRxBuffer(0), m_plutoSDRInputThread(0) { + m_deviceSampleRates.m_addaConnvRate = 0; + m_deviceSampleRates.m_bbRateHz = 0; + m_deviceSampleRates.m_firRate = 0; + m_deviceSampleRates.m_hb1Rate = 0; + m_deviceSampleRates.m_hb2Rate = 0; + m_deviceSampleRates.m_hb3Rate = 0; + suspendBuddies(); openDevice(); resumeBuddies(); @@ -81,20 +88,12 @@ bool PlutoSDRInput::start() if (m_running) stop(); - applySettings(m_settings, true); - // start / stop streaming is done in the thread. - if ((m_plutoSDRInputThread = new PlutoSDRInputThread(PLUTOSDR_BLOCKSIZE_SAMPLES, m_deviceShared.m_deviceParams->getBox(), &m_sampleFifo)) == 0) - { - qCritical("PlutoSDRInput::start: cannot create thread"); - stop(); - return false; - } - else - { - qDebug("PlutoSDRInput::start: thread created"); - } + m_plutoSDRInputThread = new PlutoSDRInputThread(PLUTOSDR_BLOCKSIZE_SAMPLES, m_deviceShared.m_deviceParams->getBox(), &m_sampleFifo); + qDebug("PlutoSDRInput::start: thread created"); + + applySettings(m_settings, true); m_plutoSDRInputThread->setLog2Decimation(m_settings.m_log2Decim); m_plutoSDRInputThread->startWork(); @@ -287,11 +286,9 @@ bool PlutoSDRInput::openDevice() m_deviceAPI->setBuddySharedPtr(&m_deviceShared); // propagate common parameters to API // acquire the channel - suspendBuddies(); DevicePlutoSDRBox *plutoBox = m_deviceShared.m_deviceParams->getBox(); plutoBox->openRx(); m_plutoRxBuffer = plutoBox->createRxBuffer(PLUTOSDR_BLOCKSIZE_SAMPLES, false); - resumeBuddies(); return true; } diff --git a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp index 5a0b711dc..76156dc11 100644 --- a/plugins/samplesource/rtlsdr/rtlsdrinput.cpp +++ b/plugins/samplesource/rtlsdr/rtlsdrinput.cpp @@ -187,13 +187,7 @@ bool RTLSDRInput::start() if (m_running) stop(); - if ((m_rtlSDRThread = new RTLSDRThread(m_dev, &m_sampleFifo)) == NULL) - { - qCritical("RTLSDRInput::start: out of memory"); - stop(); - return false; - } - + m_rtlSDRThread = new RTLSDRThread(m_dev, &m_sampleFifo); m_rtlSDRThread->setSamplerate(m_settings.m_devSampleRate); m_rtlSDRThread->setLog2Decimation(m_settings.m_log2Decim); m_rtlSDRThread->setFcPos((int) m_settings.m_fcPos); diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcebuffer.cpp b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcebuffer.cpp index 1ab67e08c..594434cf2 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcebuffer.cpp +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourcebuffer.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include "sdrdaemonsourcebuffer.h" @@ -62,6 +63,9 @@ SDRdaemonSourceBuffer::SDRdaemonSourceBuffer(uint32_t throttlems) : } else { m_cm256_OK = true; } + + std::fill(m_decoderSlots, m_decoderSlots + nbDecoderSlots, DecoderSlot()); + std::fill(m_frames, m_frames + nbDecoderSlots, BufferFrame()); } SDRdaemonSourceBuffer::~SDRdaemonSourceBuffer() diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp index a60062a85..5ae6f0778 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.cpp @@ -31,6 +31,7 @@ SDRdaemonSourceUDPHandler::SDRdaemonSourceUDPHandler(SampleSinkFifo *sampleFifo, m_masterTimer(deviceAPI->getMasterTimer()), m_masterTimerConnected(false), m_running(false), + m_rateDivider(1000/SDRDAEMONSOURCE_THROTTLE_MS), m_sdrDaemonBuffer(m_rateDivider), m_dataSocket(0), m_dataAddress(QHostAddress::LocalHost), @@ -54,7 +55,6 @@ SDRdaemonSourceUDPHandler::SDRdaemonSourceUDPHandler(SampleSinkFifo *sampleFifo, m_converterBuffer(0), m_converterBufferNbSamples(0), m_throttleToggle(false), - m_rateDivider(1000/SDRDAEMONSOURCE_THROTTLE_MS), m_autoCorrBuffer(true) { m_udpBuf = new char[SDRdaemonSourceBuffer::m_udpPayloadSize]; diff --git a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.h b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.h index 0f686329a..bbb4c0799 100644 --- a/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.h +++ b/plugins/samplesource/sdrdaemonsource/sdrdaemonsourceudphandler.h @@ -55,6 +55,7 @@ private: const QTimer& m_masterTimer; bool m_masterTimerConnected; bool m_running; + uint32_t m_rateDivider; SDRdaemonSourceBuffer m_sdrDaemonBuffer; QUdpSocket *m_dataSocket; QHostAddress m_dataAddress; @@ -80,7 +81,6 @@ private: int32_t *m_converterBuffer; uint32_t m_converterBufferNbSamples; bool m_throttleToggle; - uint32_t m_rateDivider; bool m_autoCorrBuffer; void connectTimer(); diff --git a/plugins/samplesource/sdrplay/sdrplayinput.cpp b/plugins/samplesource/sdrplay/sdrplayinput.cpp index ce013c784..3dd8db149 100644 --- a/plugins/samplesource/sdrplay/sdrplayinput.cpp +++ b/plugins/samplesource/sdrplay/sdrplayinput.cpp @@ -168,12 +168,7 @@ bool SDRPlayInput::start() return false; } - if((m_sdrPlayThread = new SDRPlayThread(m_dev, &m_sampleFifo)) == 0) - { - qCritical("SDRPlayInput::start: failed to create thread"); - return false; - } - + m_sdrPlayThread = new SDRPlayThread(m_dev, &m_sampleFifo); m_sdrPlayThread->setLog2Decimation(m_settings.m_log2Decim); m_sdrPlayThread->setFcPos((int) m_settings.m_fcPos); diff --git a/plugins/samplesource/testsource/testsourceinput.cpp b/plugins/samplesource/testsource/testsourceinput.cpp index d1aa8d40a..4221c3a02 100644 --- a/plugins/samplesource/testsource/testsourceinput.cpp +++ b/plugins/samplesource/testsource/testsourceinput.cpp @@ -74,13 +74,7 @@ bool TestSourceInput::start() if (m_running) stop(); - if ((m_testSourceThread = new TestSourceThread(&m_sampleFifo)) == 0) - { - qCritical("TestSourceInput::start: out of memory"); - stop(); - return false; - } - + m_testSourceThread = new TestSourceThread(&m_sampleFifo); m_testSourceThread->setSamplerate(m_settings.m_sampleRate); m_testSourceThread->connectTimer(m_masterTimer); m_testSourceThread->startWork(); diff --git a/sdrbase/audio/audiofifo.cpp b/sdrbase/audio/audiofifo.cpp index 92734fb84..78bdf4ea0 100644 --- a/sdrbase/audio/audiofifo.cpp +++ b/sdrbase/audio/audiofifo.cpp @@ -266,7 +266,6 @@ bool AudioFifo::create(uint32_t numSamples) m_fifo = 0; } - m_size = 0; m_fill = 0; m_head = 0; m_tail = 0; diff --git a/sdrbase/dsp/dvserialengine.cpp b/sdrbase/dsp/dvserialengine.cpp index d042a2019..fa075382a 100644 --- a/sdrbase/dsp/dvserialengine.cpp +++ b/sdrbase/dsp/dvserialengine.cpp @@ -150,7 +150,7 @@ void DVSerialEngine::getComList() const char* sysdir = "/sys/class/tty/"; // Scan through /sys/class/tty - it contains all tty-devices in the system - n = scandir(sysdir, &namelist, NULL, NULL); + n = scandir(sysdir, &namelist, NULL, alphasort); if (n < 0) perror("scandir"); else diff --git a/sdrbase/dsp/dvserialworker.cpp b/sdrbase/dsp/dvserialworker.cpp index 8db6935a5..ed59009ee 100644 --- a/sdrbase/dsp/dvserialworker.cpp +++ b/sdrbase/dsp/dvserialworker.cpp @@ -33,6 +33,7 @@ DVSerialWorker::DVSerialWorker() : m_audioBuffer.resize(48000); m_audioBufferFill = 0; m_audioFifo = 0; + memset(m_dvAudioSamples, 0, SerialDV::MBE_AUDIO_BLOCK_SIZE*sizeof(short)); } DVSerialWorker::~DVSerialWorker() diff --git a/sdrbase/dsp/dvserialworker.h b/sdrbase/dsp/dvserialworker.h index da7347037..52af0acdb 100644 --- a/sdrbase/dsp/dvserialworker.h +++ b/sdrbase/dsp/dvserialworker.h @@ -131,7 +131,7 @@ private: void upsample6(short *in, int nbSamplesIn, unsigned char channels); SerialDV::DVController m_dvController; - bool m_running; + volatile bool m_running; int m_currentGainIn; int m_currentGainOut; short m_dvAudioSamples[SerialDV::MBE_AUDIO_BLOCK_SIZE]; diff --git a/sdrbase/dsp/fftfilt.h b/sdrbase/dsp/fftfilt.h index cb8c2b923..6318cf2d5 100644 --- a/sdrbase/dsp/fftfilt.h +++ b/sdrbase/dsp/fftfilt.h @@ -48,8 +48,9 @@ protected: int window; inline float fsinc(float fc, int i, int len) { - return (i == len/2) ? 2.0 * fc: - sin(2 * M_PI * fc * (i - (len/2))) / (M_PI * (i - (len/2))); + int len2 = len/2; + return (i == len2) ? 2.0 * fc: + sin(2 * M_PI * fc * (i - len2)) / (M_PI * (i - len2)); } inline float _blackman(int i, int len) { diff --git a/sdrbase/util/doublebuffer.h b/sdrbase/util/doublebuffer.h index 6e27b81f4..b76db989a 100644 --- a/sdrbase/util/doublebuffer.h +++ b/sdrbase/util/doublebuffer.h @@ -32,6 +32,25 @@ public: ~DoubleBufferSimple() {} + DoubleBufferSimple(const DoubleBufferSimple& other) + { + m_size = other.m_size; + m_data = other.m_data; + m_current = m_data.begin(); + } + + DoubleBufferSimple& operator=(const DoubleBufferSimple& other) + { + if (&other == this) { + return *this; + } + + m_size = other.m_size; + m_data = other.m_data; + m_current = m_data.begin(); + return *this; + } + void resize(int size) { m_size = size; diff --git a/sdrbase/util/movingaverage.h b/sdrbase/util/movingaverage.h index 326921526..4a6276f95 100644 --- a/sdrbase/util/movingaverage.h +++ b/sdrbase/util/movingaverage.h @@ -55,8 +55,8 @@ class MovingAverageUtil } } - double asDouble() const { return m_total / N; } - float asFloat() const { return m_total / N; } + double asDouble() const { return ((double)m_total) / N; } + float asFloat() const { return ((float)m_total) / N; } operator T() const { return m_total / N; } private: diff --git a/sdrgui/dsp/scopevismulti.cpp b/sdrgui/dsp/scopevismulti.cpp index 42303f69a..7318d18cb 100644 --- a/sdrgui/dsp/scopevismulti.cpp +++ b/sdrgui/dsp/scopevismulti.cpp @@ -61,6 +61,9 @@ ScopeVisMulti::ScopeVisMulti(GLScopeMulti* glScope) : { setObjectName("ScopeVisNG"); m_glScope->setTraces(&m_traces.m_tracesData, &m_traces.m_traces[0]); + for (int i = 0; i < (int) nbProjectionTypes; i++) { + m_projectorCache[i] = 0.0; + } } ScopeVisMulti::~ScopeVisMulti() diff --git a/sdrgui/dsp/scopevisng.cpp b/sdrgui/dsp/scopevisng.cpp index b34a7de2a..19195f4d6 100644 --- a/sdrgui/dsp/scopevisng.cpp +++ b/sdrgui/dsp/scopevisng.cpp @@ -64,6 +64,9 @@ ScopeVisNG::ScopeVisNG(GLScopeNG* glScope) : setObjectName("ScopeVisNG"); m_traceDiscreteMemory.resize(m_traceChunkSize); // arbitrary m_glScope->setTraces(&m_traces.m_tracesData, &m_traces.m_traces[0]); + for (int i = 0; i < (int) nbProjectionTypes; i++) { + m_projectorCache[i] = 0.0; + } } ScopeVisNG::~ScopeVisNG() diff --git a/sdrgui/gui/glscope.cpp b/sdrgui/gui/glscope.cpp index 9a7b812e6..29db0558a 100644 --- a/sdrgui/gui/glscope.cpp +++ b/sdrgui/gui/glscope.cpp @@ -86,6 +86,7 @@ GLScope::GLScope(QWidget* parent) : m_x2Scale.setOrientation(Qt::Horizontal); m_powerOverlayFont.setBold(true); m_powerOverlayFont.setPointSize(font().pointSize()+1); + memset(m_sampleRates, 0, (1<m_channelMarker->getLowCutoff(); // negative bandwidth - pw = (dv->m_channelMarker->getBandwidth() / 2); // positive bandwidth + int bw = dv->m_channelMarker->getBandwidth() / 2; + pw = (qreal) bw; // positive bandwidth } else if (sidebands == ChannelMarker::lsb) { pw = dv->m_channelMarker->getLowCutoff(); - nw = (dv->m_channelMarker->getBandwidth() / 2); + int bw = dv->m_channelMarker->getBandwidth() / 2; + nw = (qreal) bw; } else if (sidebands == ChannelMarker::vusb) { nw = -dv->m_channelMarker->getOppositeBandwidth(); // negative bandwidth pw = dv->m_channelMarker->getBandwidth(); // positive bandwidth