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; } }