#ifndef EMULATE_SPLIT_TRANSCEIVER_HPP__ #define EMULATE_SPLIT_TRANSCEIVER_HPP__ #include #include "Transceiver.hpp" // // Emulate Split Transceiver // // Helper decorator class that encapsulates the emulation of split TX // operation. // // Responsibilities // // Delegates all but setting of other (split) frequency to the // wrapped Transceiver instance. Also routes failure signals from the // wrapped Transceiver instance to this instances failure signal. // // Intercepts status updates from the wrapped Transceiver instance // and re-signals it with the emulated status. // // Generates a status update signal if the other (split) frequency is // changed, this is necessary since the wrapped transceiver instance // never receives other frequency changes. // class EmulateSplitTransceiver final : public Transceiver { Q_OBJECT public: // takes ownership of wrapped Transceiver explicit EmulateSplitTransceiver (logger_type *, std::unique_ptr wrapped, QObject * parent = nullptr); void set (TransceiverState const&, unsigned sequence_number) noexcept override; // forward everything else to wrapped Transceiver void start (unsigned sequence_number) noexcept override {wrapped_->start (sequence_number);} void stop () noexcept override {wrapped_->stop ();} private: void handle_update (TransceiverState const&, unsigned seqeunce_number); std::unique_ptr wrapped_; Frequency rx_frequency_; // requested Rx frequency Frequency tx_frequency_; // requested Tx frequency bool split_; // requested split state }; #endif