| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | #ifndef HAMLIB_TRANSCEIVER_HPP_
 | 
					
						
							|  |  |  | #define HAMLIB_TRANSCEIVER_HPP_
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <tuple>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <QString>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <hamlib/rig.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "TransceiverFactory.hpp"
 | 
					
						
							|  |  |  | #include "PollingTransceiver.hpp"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern "C" | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2020-04-26 16:38:32 -04:00
										 |  |  | #ifdef JS8_USE_HAMLIB_THREE
 | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   typedef struct rig RIG; | 
					
						
							| 
									
										
										
										
											2020-04-15 15:39:06 -04:00
										 |  |  | #else
 | 
					
						
							|  |  |  |   typedef struct s_rig RIG; | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  |   struct rig_caps; | 
					
						
							| 
									
										
										
										
											2020-04-26 16:38:32 -04:00
										 |  |  | #ifdef JS8_USE_HAMLIB_THREE
 | 
					
						
							| 
									
										
										
										
											2019-12-23 12:09:59 -05:00
										 |  |  |   typedef int vfo_t; | 
					
						
							|  |  |  | #else
 | 
					
						
							| 
									
										
										
										
											2019-12-14 22:29:08 -05:00
										 |  |  |   typedef unsigned int vfo_t; | 
					
						
							| 
									
										
										
										
											2019-12-23 12:09:59 -05:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2018-02-08 21:28:33 -05:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // 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 *); | 
					
						
							|  |  |  |   static void unregister_transceivers (); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   explicit HamlibTransceiver (int model_number, TransceiverFactory::ParameterPack const&, | 
					
						
							|  |  |  |                               QObject * parent = nullptr); | 
					
						
							|  |  |  |   explicit HamlibTransceiver (TransceiverFactory::PTTMethod ptt_type, QString const& ptt_port, | 
					
						
							|  |  |  |                               QObject * parent = nullptr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  private: | 
					
						
							|  |  |  |   int do_start () override; | 
					
						
							|  |  |  |   void do_stop () override; | 
					
						
							|  |  |  |   void do_frequency (Frequency, MODE, bool no_ignore) override; | 
					
						
							|  |  |  |   void do_tx_frequency (Frequency, MODE, bool no_ignore) override; | 
					
						
							|  |  |  |   void do_mode (MODE) 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<vfo_t, vfo_t> get_vfos (bool for_split) const; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   struct RIGDeleter {static void cleanup (RIG *);}; | 
					
						
							|  |  |  |   QScopedPointer<RIG, RIGDeleter> rig_; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   bool back_ptt_port_; | 
					
						
							|  |  |  |   bool one_VFO_; | 
					
						
							|  |  |  |   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 freq_query_works_; | 
					
						
							|  |  |  |   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
 | 
					
						
							|  |  |  |   bool set_vfo_works_;          // More rigctl promises which it can't deliver
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |