/////////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2012 maintech GmbH, Otto-Hahn-Str. 15, 97204 Hoechberg, Germany // // written by Christian Daniel // // Copyright (C) 2013 by Dimitri Stolnikov // // // // 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 // // the Free Software Foundation as version 3 of the License, or // // // // This program is distributed in the hope that it will be useful, // // but WITHOUT ANY WARRANTY; without even the implied warranty of // // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // // GNU General Public License V3 for more details. // // // // You should have received a copy of the GNU General Public License // // along with this program. If not, see . // /////////////////////////////////////////////////////////////////////////////////// #ifndef INCLUDE_GNURADIOINPUT_H #define INCLUDE_GNURADIOINPUT_H #include "dsp/samplesource/samplesource.h" #include #include class GnuradioThread; class GNURadioInput : public SampleSource { public: struct Settings { QString m_args; double m_freqMin; double m_freqMax; double m_freqCorr; QList< QPair< QString, double > > m_namedGains; double m_sampRate; QString m_antenna; QString m_dcoff; QString m_iqbal; double m_bandwidth; Settings(); void resetToDefaults(); QByteArray serialize() const; bool deserialize(const QByteArray& data); }; class MsgConfigureGNURadio : public Message { MESSAGE_CLASS_DECLARATION public: const GeneralSettings& getGeneralSettings() const { return m_generalSettings; } const Settings& getSettings() const { return m_settings; } static MsgConfigureGNURadio* create(const GeneralSettings& generalSettings, const Settings& settings) { return new MsgConfigureGNURadio(generalSettings, settings); } protected: GeneralSettings m_generalSettings; Settings m_settings; MsgConfigureGNURadio(const GeneralSettings& generalSettings, const Settings& settings) : Message(), m_generalSettings(generalSettings), m_settings(settings) { } }; class MsgReportGNURadio : public Message { MESSAGE_CLASS_DECLARATION public: const std::vector< std::pair< QString, std::vector > >& getNamedGains() const { return m_namedGains; } const double getFreqMin() const { return m_freqMin; } const double getFreqMax() const { return m_freqMax; } const double getFreqCorr() const { return m_freqCorr; } const std::vector& getSampRates() const { return m_sampRates; } const std::vector& getAntennas() const { return m_antennas; } const std::vector& getDCOffs() const { return m_dcoffs; } const std::vector& getIQBals() const { return m_iqbals; } const std::vector& getBandwidths() const { return m_bandwidths; } static MsgReportGNURadio* create(const double freqMin, const double freqMax, const double freqCorr, const std::vector< std::pair< QString, std::vector > >& namedGains, const std::vector& sampRates, const std::vector& antennas, const std::vector& dcoffs, const std::vector& iqbals, const std::vector& bandwidths) { return new MsgReportGNURadio(freqMin, freqMax, freqCorr, namedGains, sampRates, antennas, dcoffs, iqbals, bandwidths); } protected: double m_freqMin; double m_freqMax; double m_freqCorr; std::vector< std::pair< QString, std::vector > > m_namedGains; std::vector m_sampRates; std::vector m_antennas; std::vector m_dcoffs; std::vector m_iqbals; std::vector m_bandwidths; MsgReportGNURadio(const double freqMin, const double freqMax, const double freqCorr, const std::vector< std::pair< QString, std::vector > >& namedGains, const std::vector& sampRates, const std::vector& antennas, const std::vector& dcoffs, const std::vector& iqbals, const std::vector& bandwidths) : Message(), m_freqMin(freqMin), m_freqMax(freqMax), m_freqCorr(freqCorr), m_namedGains(namedGains), m_sampRates(sampRates), m_antennas(antennas), m_dcoffs(dcoffs), m_iqbals(iqbals), m_bandwidths(bandwidths) { } }; GNURadioInput(MessageQueue* msgQueueToGUI); ~GNURadioInput(); bool startInput(int device); void stopInput(); const QString& getDeviceDescription() const; int getSampleRate() const; quint64 getCenterFrequency() const; bool handleMessage(Message* message); private: QMutex m_mutex; Settings m_settings; GnuradioThread* m_GnuradioThread; QString m_deviceDescription; std::vector< QString > m_dcoffs; std::vector< QString > m_iqbals; bool applySettings(const GeneralSettings& generalSettings, const Settings& settings, bool force); }; #endif // INCLUDE_GNURADIOINPUT_H