mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 21:40:52 -05: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);
 | 
						|
    }
 | 
						|
}
 |