#pragma once #include #include #include /* ---------------------------------------------------- -- Device identification ---------------------------------------------------- driver=rtl hardware=rtl ---------------------------------------------------- -- Peripheral summary ---------------------------------------------------- Channels: 1 Rx, 0 Tx Timestamps: NO ---------------------------------------------------- -- RX Channel 0 ---------------------------------------------------- Full-duplex: YES Antennas: RX Full gain range: [0, 49.6] dB LNA gain range: [0, 49.6] dB Full freq range: [24, 1766] MHz RF freq range: [24, 1766] MHz CORR freq range: MHz Sample rates: [0.25, 2.56] MHz Filter bandwidths: [] MHz */ class SDRDeviceRange { public: SDRDeviceRange(); SDRDeviceRange(double low, double high); SDRDeviceRange(std::string name, double low, double high); double getLow(); void setLow(double low); double getHigh(); void setHigh(double high); std::string getName(); void setName(std::string name); private: std::string name; double low, high; }; class SDRDeviceChannel { public: SDRDeviceChannel(); ~SDRDeviceChannel(); int getChannel(); void setChannel(int channel); bool isFullDuplex(); void setFullDuplex(bool fullDuplex); bool isTx(); void setTx(bool tx); bool isRx(); void setRx(bool rx); void addGain(SDRDeviceRange range); void addGain(std::string name, SoapySDR::Range range); std::vector &getGains(); SDRDeviceRange &getGain(); SDRDeviceRange &getLNAGain(); SDRDeviceRange &getFreqRange(); SDRDeviceRange &getRFRange(); std::vector &getSampleRates(); long getSampleRateNear(long sampleRate_in); std::vector &getFilterBandwidths(); const bool& hasHardwareDC() const; void setHardwareDC(const bool& hardware); const bool& hasCORR() const; void setCORR(const bool& corr); void setStreamArgsInfo(SoapySDR::ArgInfoList streamArgs); SoapySDR::ArgInfoList getStreamArgsInfo(); std::vector getStreamArgNames(); private: int channel; bool fullDuplex, tx, rx, hardwareDC, hasCorr; SDRDeviceRange rangeGain, rangeLNA, rangeFull, rangeRF; std::vector sampleRates; std::vector filterBandwidths; SoapySDR::ArgInfoList streamArgInfo; std::vector gainInfo; }; class SDRDeviceInfo { public: SDRDeviceInfo(); std::string getDeviceId(); const int getIndex() const; void setIndex(const int index); bool isAvailable() const; void setAvailable(bool available); const std::string& getName() const; void setName(const std::string& name); const std::string& getSerial() const; void setSerial(const std::string& serial); const std::string& getTuner() const; void setTuner(const std::string& tuner); const std::string& getManufacturer() const; void setManufacturer(const std::string& manufacturer); const std::string& getProduct() const; void setProduct(const std::string& product); const std::string& getDriver() const; void setDriver(const std::string& driver); const std::string& getHardware() const; void setHardware(const std::string& hardware); bool hasTimestamps() const; void setTimestamps(bool timestamps); void addChannel(SDRDeviceChannel *chan); std::vector &getChannels(); SDRDeviceChannel * getRxChannel(); SDRDeviceChannel * getTxChannel(); void setDeviceArgs(SoapySDR::Kwargs deviceArgs); SoapySDR::Kwargs getDeviceArgs(); void setStreamArgs(SoapySDR::Kwargs deviceArgs); SoapySDR::Kwargs getStreamArgs(); void setSettingsInfo(SoapySDR::ArgInfoList settingsArgs); SoapySDR::ArgInfoList getSettingsArgInfo(); std::vector getSettingNames(); private: int index; std::string name, serial, product, manufacturer, tuner; std::string driver, hardware; bool timestamps, available; SoapySDR::Kwargs deviceArgs, streamArgs; SoapySDR::ArgInfoList settingInfo; std::vector channels; };