mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "EmulateSplitTransceiver.hpp"
 | |
| 
 | |
| #include "moc_EmulateSplitTransceiver.cpp"
 | |
| 
 | |
| EmulateSplitTransceiver::EmulateSplitTransceiver (std::unique_ptr<Transceiver> wrapped, QObject * parent)
 | |
|   : Transceiver {parent}
 | |
|   , wrapped_ {std::move (wrapped)}
 | |
|   , rx_frequency_ {0}
 | |
|   , tx_frequency_ {0}
 | |
|   , split_ {false}
 | |
| {
 | |
|   // Connect update signal of wrapped Transceiver object instance to ours.
 | |
|   connect (wrapped_.get (), &Transceiver::update, this, &EmulateSplitTransceiver::handle_update);
 | |
| 
 | |
|   // Connect other signals of wrapped Transceiver object to our
 | |
|   // parent matching signals.
 | |
|   connect (wrapped_.get (), &Transceiver::resolution, this, &Transceiver::resolution);
 | |
|   connect (wrapped_.get (), &Transceiver::finished, this, &Transceiver::finished);
 | |
|   connect (wrapped_.get (), &Transceiver::failure, this, &Transceiver::failure);
 | |
| }
 | |
| 
 | |
| void EmulateSplitTransceiver::set (TransceiverState const& s, unsigned sequence_number) noexcept
 | |
| {
 | |
| #if WSJT_TRACE_CAT
 | |
|   qDebug () << "EmulateSplitTransceiver::set: state:" << s << "#:" << sequence_number;
 | |
| #endif
 | |
|   // save for use in updates
 | |
|   rx_frequency_ = s.frequency ();
 | |
|   tx_frequency_ = s.tx_frequency ();
 | |
|   split_ = s.split ();
 | |
| 
 | |
|   TransceiverState emulated_state {s};
 | |
|   if (s.ptt () && split_) emulated_state.frequency (s.tx_frequency ());
 | |
|   emulated_state.split (false);
 | |
|   emulated_state.tx_frequency (0);
 | |
|   wrapped_->set (emulated_state, sequence_number);
 | |
| }
 | |
| 
 | |
| void EmulateSplitTransceiver::handle_update (TransceiverState const& state,
 | |
|                                              unsigned sequence_number)
 | |
| {
 | |
| #if WSJT_TRACE_CAT
 | |
|   qDebug () << "EmulateSplitTransceiver::handle_update: from wrapped:" << state;
 | |
| #endif
 | |
| 
 | |
|   if (state.split ())
 | |
|     {
 | |
|       Q_EMIT failure (tr ("Emulated split mode requires rig to be in simplex mode"));
 | |
|     }
 | |
|   else
 | |
|     {
 | |
|       TransceiverState new_state {state};
 | |
|       // Follow the rig if in RX mode.
 | |
|       if (state.ptt ()) new_state.frequency (rx_frequency_);
 | |
| 
 | |
|       // These are always what was requested in prior set state operation
 | |
|       new_state.tx_frequency (tx_frequency_);
 | |
|       new_state.split (split_);
 | |
| 
 | |
| #if WSJT_TRACE_CAT
 | |
|       qDebug () << "EmulateSplitTransceiver::handle_update: signalling:" << state;
 | |
| #endif
 | |
| 
 | |
|       // signal emulated state
 | |
|       Q_EMIT update (new_state, sequence_number);
 | |
|     }
 | |
| }
 |