1 #ifndef OMNI_RIG_TRANSCEIVER_HPP__
2 #define OMNI_RIG_TRANSCEIVER_HPP__
3 
4 #include <memory>
5 
6 #include <QScopedPointer>
7 #include <QString>
8 #include <QTimer>
9 
10 #include "TransceiverFactory.hpp"
11 #include "TransceiverBase.hpp"
12 
13 #include "OmniRig.h"
14 
15 //
16 // OmniRig Transceiver Interface
17 //
18 // Implemented as a Transceiver decorator  because we may want the PTT
19 // services of another Transceiver  type such as the HamlibTransceiver
20 // which can  be enabled by wrapping  a HamlibTransceiver instantiated
21 // as a "Hamlib Dummy" transceiver in the Transceiver factory method.
22 //
23 class OmniRigTransceiver final
24   : public TransceiverBase
25 {
26   Q_OBJECT;
27 
28 public:
29   static void register_transceivers (logger_type *, TransceiverFactory::Transceivers *, unsigned id1, unsigned id2);
30 
31   enum RigNumber {One = 1, Two};
32 
33   // takes ownership of wrapped Transceiver
34   explicit OmniRigTransceiver (logger_type *, std::unique_ptr<TransceiverBase> wrapped,
35                                RigNumber, TransceiverFactory::PTTMethod ptt_type,
36                                QString const& ptt_port, QObject * parent = nullptr);
37   ~OmniRigTransceiver ();
38 
39   int do_start () override;
40   void do_stop () override;
41   void do_frequency (Frequency, MODE, bool no_ignore) override;
42   void do_tx_frequency (Frequency, MODE, bool no_ignore) override;
43   void do_mode (MODE) override;
44   void do_ptt (bool on) override;
45 
46 private:
47   Q_SLOT void handle_COM_exception (int,  QString, QString, QString);
48   Q_SLOT void handle_visible_change ();
49   Q_SLOT void handle_rig_type_change (int rig_number);
50   Q_SLOT void handle_status_change (int rig_number);
51   Q_SLOT void handle_params_change (int rig_number, int params);
52   Q_SLOT void handle_custom_reply (int, QVariant const& command, QVariant const& reply);
53 
54   MODE map_mode (OmniRig::RigParamX param);
55   OmniRig::RigParamX map_mode (MODE mode);
56 
57   std::unique_ptr<TransceiverBase> wrapped_; // may be null
58   bool use_for_ptt_;
59   TransceiverFactory::PTTMethod ptt_type_;
60   QScopedPointer<OmniRig::OmniRigX> omni_rig_;
61   RigNumber rig_number_;
62   QScopedPointer<OmniRig::RigX> rig_;
63   QScopedPointer<OmniRig::PortBits> port_;
64   QString rig_type_;
65   int readable_params_;
66   int writable_params_;
67   QScopedPointer<QTimer> offline_timer_;
68   bool send_update_signal_;
69   bool reversed_;   // some rigs can reverse VFOs
70 };
71 
72 #endif
73