mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-12-24 11:40:31 -05:00
Add temporary simpler Tx scheduler for WSPR-LF
Until the advanced band hopping scheduler is upgraded to work with T/R periods other than 2 minutes this scheduler uses a strictly random scheduler, except that Tx percentages less than 40 defer Tx periods that would otherwise be consecutive. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7687 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
b71b5c225d
commit
ed80f240e9
@ -1,5 +1,7 @@
|
||||
#include "WSPRBandHopping.hpp"
|
||||
|
||||
#include <random>
|
||||
|
||||
#include <QPointer>
|
||||
#include <QSettings>
|
||||
#include <QBitArray>
|
||||
@ -210,6 +212,10 @@ public:
|
||||
, configuration_ {configuration}
|
||||
, tx_percent_ {0}
|
||||
, parent_widget_ {parent_widget}
|
||||
, last_was_tx_ {false}
|
||||
, carry_ {false}
|
||||
, gen_ {rd_ ()}
|
||||
, dist_ {1, 100}
|
||||
{
|
||||
auto num_bands = configuration_->bands ()->rowCount ();
|
||||
for (auto& flags : bands_)
|
||||
@ -218,6 +224,8 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
bool simple_scheduler ();
|
||||
|
||||
QSettings * settings_;
|
||||
Configuration const * configuration_;
|
||||
int tx_percent_;
|
||||
@ -232,8 +240,31 @@ public:
|
||||
|
||||
int gray_line_duration_;
|
||||
QPointer<Dialog> dialog_;
|
||||
bool last_was_tx_;
|
||||
bool carry_;
|
||||
std::random_device rd_;
|
||||
std::mt19937 gen_;
|
||||
std::uniform_int_distribution<int> dist_;
|
||||
};
|
||||
|
||||
bool WSPRBandHopping::impl::simple_scheduler ()
|
||||
{
|
||||
auto tx = carry_ || tx_percent_ > dist_ (gen_);
|
||||
if (carry_)
|
||||
{
|
||||
carry_ = false;
|
||||
}
|
||||
else if (tx_percent_ < 40 && last_was_tx_ && tx)
|
||||
{
|
||||
// if percentage is less than 40 then avoid consecutive tx but
|
||||
// always catch up on the next round
|
||||
tx = false;
|
||||
carry_ = true;
|
||||
}
|
||||
last_was_tx_ = tx;
|
||||
return tx;
|
||||
}
|
||||
|
||||
WSPRBandHopping::WSPRBandHopping (QSettings * settings, Configuration const * configuration, QWidget * parent_widget)
|
||||
: m_ {settings, configuration, parent_widget}
|
||||
{
|
||||
@ -436,8 +467,12 @@ auto WSPRBandHopping::next_hop (bool tx_enabled) -> Hop
|
||||
};
|
||||
}
|
||||
|
||||
bool WSPRBandHopping::next_is_tx ()
|
||||
bool WSPRBandHopping::next_is_tx (bool simple_schedule)
|
||||
{
|
||||
if (simple_schedule)
|
||||
{
|
||||
return m_->simple_scheduler ();
|
||||
}
|
||||
if (100 == m_->tx_percent_)
|
||||
{
|
||||
return true;
|
||||
|
@ -73,7 +73,7 @@ public:
|
||||
// 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 next_is_tx (bool simple_schedule = false);
|
||||
|
||||
private:
|
||||
// implementation hidden from public interface
|
||||
|
@ -6078,7 +6078,7 @@ void MainWindow::WSPR_scheduling ()
|
||||
band_hopping_label.setText (hop_data.period_name_);
|
||||
}
|
||||
else {
|
||||
m_WSPR_tx_next = m_WSPR_band_hopping.next_is_tx ();
|
||||
m_WSPR_tx_next = m_WSPR_band_hopping.next_is_tx ("WSPR-LF" == m_mode);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user