85 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | #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 |