85 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
|  | #ifndef WSPR_BAND_HOPPING_HPP__
 | ||
|  | #define WSPR_BAND_HOPPING_HPP__
 | ||
|  | 
 | ||
|  | #include <QObject>
 | ||
|  | 
 | ||
|  | #include "pimpl_h.hpp"
 | ||
|  | 
 | ||
|  | class QSettings; | ||
|  | class Configuration; | ||
|  | class QWidget; | ||
|  | 
 | ||
|  | //
 | ||
|  | // WSPR Band Hopping Control
 | ||
|  | //
 | ||
|  | //  WSPR specifies  a globally  coordinated band hopping  schedule and
 | ||
|  | //  this class implements that.
 | ||
|  | //
 | ||
|  | // Responsibilities
 | ||
|  | //
 | ||
|  | //  Provides a  maintenance dialog allowing  the user to  define which
 | ||
|  | //  bands are allowed from the band hopping schedule as defined here:
 | ||
|  | //
 | ||
|  | //    http://physics.princeton.edu/pulsar/K1JT/doc/wspr/wspr-main.html
 | ||
|  | //
 | ||
|  | //  Along with selecting bands a flag  indicating that a short tune up
 | ||
|  | //  signal is  required for specified  bands before they are  used for
 | ||
|  | //  receive.
 | ||
|  | //
 | ||
|  | //  Provides a Qt property that holds  the Tx percentage which is used
 | ||
|  | //  to generate a semi-randomized schedule of period to transmit. This
 | ||
|  | //  schedule is random but adjusted to limit the number of consecutive
 | ||
|  | //  transmission periods, it also adjusts  the schedule to ensure that
 | ||
|  | //  the overall number of transmission periods in any two hour hopping
 | ||
|  | //  schedule reflects the percentage provided.
 | ||
|  | //
 | ||
|  | // Collaborations
 | ||
|  | //
 | ||
|  | //  Settings including  the selected bands  with periods, the  tune up
 | ||
|  | //  flags  and the  gray line  duration are  maintained in  persistent
 | ||
|  | //  storage using the provided QSettings object instance.
 | ||
|  | //
 | ||
|  | //  A passed  in Configuration  object instance is  used to  query the
 | ||
|  | //  FrequencyList_v2 model  to determine working frequencies  for each
 | ||
|  | //  band. The  row index  of this  model is  returned by  this classes
 | ||
|  | //  hopping scheduling method so it may be conveniently used to select
 | ||
|  | //  a new working frequency by a client.
 | ||
|  | //
 | ||
|  | class WSPRBandHopping | ||
|  |   : public QObject | ||
|  | { | ||
|  |   Q_OBJECT; | ||
|  |   Q_PROPERTY (int tx_percent READ tx_percent WRITE set_tx_percent); | ||
|  | 
 | ||
|  | public: | ||
|  |   WSPRBandHopping (QSettings *, Configuration const *, QWidget * parent = nullptr); | ||
|  |   ~WSPRBandHopping (); | ||
|  | 
 | ||
|  |   // display the band hopping maintenance dialog
 | ||
|  |   Q_SLOT void show_dialog (bool); | ||
|  | 
 | ||
|  |   // Property tx_percent implementation
 | ||
|  |   int tx_percent () const; | ||
|  |   Q_SLOT void set_tx_percent (int); | ||
|  | 
 | ||
|  |   // structure that defines the results of the next_hop() method
 | ||
|  |   struct Hop | ||
|  |   { | ||
|  |     QString period_name_; | ||
|  |     int frequencies_index_;     // may be -1 indicating no change
 | ||
|  |     bool tune_required_; | ||
|  |     bool tx_next_; | ||
|  |   }; | ||
|  |   // return the next band parameters
 | ||
|  |   Hop next_hop (bool tx_enabled); | ||
|  |   // determine if the next period should be a transmit period
 | ||
|  |   bool next_is_tx (bool simple_schedule = false); | ||
|  | 
 | ||
|  | private: | ||
|  |   // implementation hidden from public interface
 | ||
|  |   class impl; | ||
|  |   pimpl<impl> m_; | ||
|  | }; | ||
|  | 
 | ||
|  | #endif
 |