#ifndef HAMLIB_TRANSCEIVER_HPP_ #define HAMLIB_TRANSCEIVER_HPP_ #include #include #include #include "TransceiverFactory.hpp" #include "PollingTransceiver.hpp" extern "C" { typedef struct rig RIG; struct rig_caps; typedef int vfo_t; } // hamlib transceiver and PTT mostly delegated directly to hamlib Rig class class HamlibTransceiver final : public PollingTransceiver { Q_OBJECT; // for translation context public: static void register_transceivers (TransceiverFactory::Transceivers *); explicit HamlibTransceiver (int model_number, TransceiverFactory::ParameterPack const&); explicit HamlibTransceiver (TransceiverFactory::PTTMethod ptt_type, QString const& ptt_port); ~HamlibTransceiver (); private: void do_start () override; void do_stop () override; void do_frequency (Frequency, MODE) override; void do_tx_frequency (Frequency, bool rationalise_mode) override; void do_mode (MODE, bool rationalise) override; void do_ptt (bool) override; void poll () override; void error_check (int ret_code, QString const& doing) const; void set_conf (char const * item, char const * value); QByteArray get_conf (char const * item); Transceiver::MODE map_mode (rmode_t) const; rmode_t map_mode (Transceiver::MODE mode) const; std::tuple get_vfos () const; struct RIGDeleter {static void cleanup (RIG *);}; QScopedPointer rig_; bool back_ptt_port_; bool is_dummy_; // these are saved on destruction so we can start new instances // where the last one left off static freq_t dummy_frequency_; static rmode_t dummy_mode_; bool mutable reversed_; bool mode_query_works_; bool split_query_works_; bool tickle_hamlib_; // Hamlib requires a // rig_set_split_vfo() call to // establish the Tx VFO bool get_vfo_works_; // Net rigctl promises what it can't deliver }; #endif