bool NFMDemod::handleMessage(Message* cmd) { if(DSPSignalNotification::match(cmd)) { DSPSignalNotification* signal = (DSPSignalNotification*)cmd; qDebug("%d samples/sec, %lld Hz offset", signal->getSampleRate(), signal->getFrequencyOffset()); m_sampleRate = signal->getSampleRate(); m_nco.setFreq(-signal->getFrequencyOffset(), m_sampleRate); m_interpolator.create(16, m_sampleRate, m_rfBandwidth / 2.1); m_sampleDistanceRemain = m_sampleRate / 48000.0; m_squelchState = 0; cmd->completed(); return true; } else if(MsgConfigureNFMDemod::match(cmd)) { MsgConfigureNFMDemod* cfg = (MsgConfigureNFMDemod*)cmd; m_rfBandwidth = cfg->getRFBandwidth(); m_interpolator.create(16, m_sampleRate, m_rfBandwidth / 2.1); m_lowpass.create(21, 48000, cfg->getAFBandwidth()); m_squelchLevel = pow(10.0, cfg->getSquelch() / 10.0); m_volume = cfg->getVolume(); cmd->completed(); return true; } else { if(m_sampleSink != NULL) return m_sampleSink->handleMessage(cmd); else return false; } }
void DSPEngine::generateReport() { unsigned int sampleRate; quint64 tunerFrequency; if(m_sampleSource != NULL) { sampleRate = m_sampleSource->getSampleRate(); tunerFrequency = m_sampleSource->getCenterFrequency(); } else { sampleRate = 100000; tunerFrequency = 100000000; } if((sampleRate != m_sampleRate) || (tunerFrequency != m_tunerFrequency)) { m_sampleRate = sampleRate; m_tunerFrequency = tunerFrequency; for(SampleSinks::const_iterator it = m_sampleSinks.begin(); it != m_sampleSinks.end(); it++) { DSPSignalNotification* signal = DSPSignalNotification::create(m_sampleRate, 0, tunerFrequency); signal->submit(&m_messageQueue, *it); } Message* rep = DSPEngineReport::create(m_sampleRate, m_tunerFrequency); rep->submit(m_reportQueue); } }
void AirspyGui::handleInputMessages() { Message* message; while ((message = m_inputMessageQueue.pop()) != 0) { qDebug("AirspyGui::handleInputMessages: message: %s", message->getIdentifier()); if (DSPSignalNotification::match(*message)) { DSPSignalNotification* notif = (DSPSignalNotification*) message; m_sampleRate = notif->getSampleRate(); m_deviceCenterFrequency = notif->getCenterFrequency(); qDebug("AirspyGui::handleInputMessages: DSPSignalNotification: SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getCenterFrequency()); updateSampleRateAndFrequency(); delete message; } else { if (handleMessage(*message)) { delete message; } } } }
void SDRdaemonSourceGui::handleInputMessages() { Message* message; while ((message = m_inputMessageQueue.pop()) != 0) { //qDebug("SDRdaemonGui::handleInputMessages: message: %s", message->getIdentifier()); if (DSPSignalNotification::match(*message)) { DSPSignalNotification* notif = (DSPSignalNotification*) message; if (notif->getSampleRate() != m_streamSampleRate) { m_streamSampleRate = notif->getSampleRate(); } m_streamCenterFrequency = notif->getCenterFrequency(); qDebug("SDRdaemonGui::handleInputMessages: DSPSignalNotification: SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getCenterFrequency()); updateSampleRateAndFrequency(); DSPSignalNotification *fwd = new DSPSignalNotification(*notif); m_sampleSource->getInputMessageQueue()->push(fwd); delete message; } else { if (handleMessage(*message)) { delete message; } } } }
void DSPDeviceSinkEngine::handleInputMessages() { qDebug() << "DSPDeviceSinkEngine::handleInputMessages"; Message* message; while ((message = m_inputMessageQueue.pop()) != 0) { qDebug("DSPDeviceSinkEngine::handleInputMessages: message: %s", message->getIdentifier()); if (DSPSignalNotification::match(*message)) { DSPSignalNotification *notif = (DSPSignalNotification *) message; // update DSP values m_sampleRate = notif->getSampleRate(); m_centerFrequency = notif->getCenterFrequency(); qDebug() << "DSPDeviceSinkEngine::handleInputMessages: DSPSignalNotification(" << m_sampleRate << "," << m_centerFrequency << ")"; // forward source changes to sources with immediate execution for(BasebandSampleSources::const_iterator it = m_basebandSampleSources.begin(); it != m_basebandSampleSources.end(); it++) { qDebug() << "DSPDeviceSinkEngine::handleInputMessages: forward message to " << (*it)->objectName().toStdString().c_str(); (*it)->handleMessage(*message); } for (ThreadedBasebandSampleSources::const_iterator it = m_threadedBasebandSampleSources.begin(); it != m_threadedBasebandSampleSources.end(); ++it) { qDebug() << "DSPDeviceSinkEngine::handleSourceMessages: forward message to ThreadedSampleSource(" << (*it)->getSampleSourceObjectName().toStdString().c_str() << ")"; (*it)->handleSourceMessage(*message); } // forward changes to listeners on DSP output queue if (m_deviceSampleSink->getMessageQueueToGUI()) { DSPSignalNotification* rep = new DSPSignalNotification(*notif); // make a copy for the output queue m_deviceSampleSink->getMessageQueueToGUI()->push(rep); } delete message; } } }
bool ScopeVis::handleMessage(Message* message) { if(DSPSignalNotification::match(message)) { DSPSignalNotification* signal = (DSPSignalNotification*)message; m_sampleRate = signal->getSampleRate(); message->completed(); return true; } else if(DSPConfigureScopeVis::match(message)) { DSPConfigureScopeVis* conf = (DSPConfigureScopeVis*)message; m_triggerState = Untriggered; m_triggerChannel = (TriggerChannel)conf->getTriggerChannel(); m_triggerLevelHigh = conf->getTriggerLevelHigh() * 32767; m_triggerLevelLow = conf->getTriggerLevelLow() * 32767; message->completed(); return true; } else { return false; } }
void LimeSDROutputGUI::handleInputMessages() { Message* message; while ((message = m_inputMessageQueue.pop()) != 0) { if (DSPSignalNotification::match(*message)) { qDebug("LimeSDROutputGUI::handleInputMessages: message: %s", message->getIdentifier()); DSPSignalNotification* notif = (DSPSignalNotification*) message; m_sampleRate = notif->getSampleRate(); m_deviceCenterFrequency = notif->getCenterFrequency(); qDebug("LimeSDROutputGUI::handleInputMessages: DSPSignalNotification: SampleRate: %d, CenterFrequency: %llu", notif->getSampleRate(), notif->getCenterFrequency()); updateSampleRateAndFrequency(); delete message; } else if (LimeSDROutput::MsgConfigureLimeSDR::match(*message)) { const LimeSDROutput::MsgConfigureLimeSDR& cfg = (LimeSDROutput::MsgConfigureLimeSDR&) *message; m_settings = cfg.getSettings(); displaySettings(); delete message; } else if (LimeSDROutput::MsgStartStop::match(*message)) { LimeSDROutput::MsgStartStop& notif = (LimeSDROutput::MsgStartStop&) *message; blockApplySettings(true); ui->startStop->setChecked(notif.getStartStop()); blockApplySettings(false); delete message; } else { if (handleMessage(*message)) { delete message; } } } }
void SDRdaemonGui::handleDSPMessages() { Message* message; while ((message = m_deviceAPI->getDeviceOutputMessageQueue()->pop()) != 0) { qDebug("SDRdaemonGui::handleDSPMessages: message: %s", message->getIdentifier()); if (DSPSignalNotification::match(*message)) { DSPSignalNotification* notif = (DSPSignalNotification*) message; m_deviceSampleRate = notif->getSampleRate(); m_deviceCenterFrequency = notif->getCenterFrequency(); qDebug("SDRdaemonGui::handleDSPMessages: SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getCenterFrequency()); updateSampleRateAndFrequency(); m_fileSink->handleMessage(*notif); // forward to file sink delete message; } } }
bool WFMDemod::handleMessage(Message* cmd) { if(DSPSignalNotification::match(cmd)) { DSPSignalNotification* signal = (DSPSignalNotification*)cmd; qDebug("%d samples/sec, %lld Hz offset", signal->getSampleRate(), signal->getFrequencyOffset()); m_sampleRate = signal->getSampleRate(); m_interpolator.create(16, m_sampleRate, m_afBandwidth); m_sampleDistanceRemain = m_sampleRate / 48000.0; cmd->completed(); return true; } else if(MsgConfigureWFMDemod::match(cmd)) { MsgConfigureWFMDemod* cfg = (MsgConfigureWFMDemod*)cmd; m_afBandwidth = cfg->getAFBandwidth(); m_interpolator.create(16, m_sampleRate, m_afBandwidth); m_volume = cfg->getVolume(); cmd->completed(); return true; } else { if(m_sampleSink != NULL) return m_sampleSink->handleMessage(cmd); else return false; } }
void SDRdaemonSinkGui::handleInputMessages() { Message* message; while ((message = m_inputMessageQueue.pop()) != 0) { if (DSPSignalNotification::match(*message)) { DSPSignalNotification* notif = (DSPSignalNotification*) message; m_sampleRate = notif->getSampleRate(); qDebug("SDRdaemonSinkGui::handleInputMessages: DSPSignalNotification: SampleRate:%d, CenterFrequency:%llu", notif->getSampleRate(), notif->getCenterFrequency()); updateSampleRate(); delete message; } else { if (handleMessage(*message)) { delete message; } } } }
bool TCPSrc::handleMessage(Message* cmd) { if(DSPSignalNotification::match(cmd)) { DSPSignalNotification* signal = (DSPSignalNotification*)cmd; qDebug("%d samples/sec, %lld Hz offset", signal->getSampleRate(), signal->getFrequencyOffset()); m_inputBandwidth = signal->getTunerBandwidth(); m_inputSampleRate = signal->getSampleRate(); m_inputFreq = signal->getTunerFrequency(); if (m_rig) { m_rig->setTunerSamples(m_inputBandwidth); m_rig->setTunerFreq(m_inputFreq); } m_nco.setFreq(-signal->getFrequencyOffset(), m_inputSampleRate); m_interpolator.create(16, m_inputSampleRate, m_rfBandwidth / 2.0); m_sampleDistanceRemain = m_inputSampleRate / m_outputSampleRate; cmd->completed(); return true; } else if(MsgTCPSrcConfigure::match(cmd)) { MsgTCPSrcConfigure* cfg = (MsgTCPSrcConfigure*)cmd; m_sampleFormat = cfg->getSampleFormat(); m_outputSampleRate = cfg->getOutputSampleRate(); m_rfBandwidth = cfg->getRFBandwidth(); if(cfg->getTCPPort() != m_tcpPort) { m_tcpPort = cfg->getTCPPort(); if(m_tcpServer->isListening()) m_tcpServer->close(); m_tcpServer->listen(QHostAddress::Any, m_tcpPort); } m_boost = cfg->getBoost(); m_interpolator.create(16, m_inputSampleRate, m_rfBandwidth / 2.0); m_sampleDistanceRemain = m_inputSampleRate / m_outputSampleRate; if (m_sampleFormat == FormatSSB) TCPFilter->create_filter(0.3 / 48.0, m_rfBandwidth / 2.0 / m_outputSampleRate); else TCPFilter->create_filter(0.0, m_rfBandwidth / 2.0 / m_outputSampleRate); cmd->completed(); return true; } else if(MsgTCPSrcSpectrum::match(cmd)) { MsgTCPSrcSpectrum* spc = (MsgTCPSrcSpectrum*)cmd; m_spectrumEnabled = spc->getEnabled(); cmd->completed(); return true; } else { if(m_spectrum != NULL) return m_spectrum->handleMessage(cmd); else return false; } }
void DSPEngine::handleMessages() { Message* message; while((message = m_messageQueue.accept()) != NULL) { qDebug("Message: %s", message->getIdentifier()); if(DSPPing::match(message)) { message->completed(m_state); } else if(DSPExit::match(message)) { gotoIdle(); m_state = StNotStarted; exit(); message->completed(m_state); } else if(DSPAcquisitionStart::match(message)) { m_state = gotoIdle(); if(m_state == StIdle) m_state = gotoRunning(); message->completed(m_state); } else if(DSPAcquisitionStop::match(message)) { m_state = gotoIdle(); message->completed(m_state); } else if(DSPGetDeviceDescription::match(message)) { ((DSPGetDeviceDescription*)message)->setDeviceDescription(m_deviceDescription); message->completed(); } else if(DSPGetErrorMessage::match(message)) { ((DSPGetErrorMessage*)message)->setErrorMessage(m_errorMessage); message->completed(); } else if(DSPSetSource::match(message)) { handleSetSource(((DSPSetSource*)message)->getSampleSource()); message->completed(); } else if(DSPAddSink::match(message)) { SampleSink* sink = ((DSPAddSink*)message)->getSampleSink(); if(m_state == StRunning) { DSPSignalNotification* signal = DSPSignalNotification::create(m_sampleRate, 0, m_tunerFrequency); signal->submit(&m_messageQueue, sink); sink->start(); } m_sampleSinks.push_back(sink); message->completed(); } else if(DSPRemoveSink::match(message)) { SampleSink* sink = ((DSPAddSink*)message)->getSampleSink(); if(m_state == StRunning) sink->stop(); m_sampleSinks.remove(sink); message->completed(); } else if(DSPAddAudioSource::match(message)) { m_audioOutput.addFifo(((DSPAddAudioSource*)message)->getAudioFifo()); message->completed(); } else if(DSPRemoveAudioSource::match(message)) { m_audioOutput.removeFifo(((DSPAddAudioSource*)message)->getAudioFifo()); message->completed(); } else if(DSPConfigureCorrection::match(message)) { DSPConfigureCorrection* conf = (DSPConfigureCorrection*)message; m_iqImbalanceCorrection = conf->getIQImbalanceCorrection(); if(m_dcOffsetCorrection != conf->getDCOffsetCorrection()) { m_dcOffsetCorrection = conf->getDCOffsetCorrection(); m_iOffset = 0; m_qOffset = 0; } if(m_iqImbalanceCorrection != conf->getIQImbalanceCorrection()) { m_iqImbalanceCorrection = conf->getIQImbalanceCorrection(); m_iRange = 1 << 16; m_qRange = 1 << 16; m_imbalance = 65536; } message->completed(); } else { if(!distributeMessage(message)) message->completed(); } } }