Furter attempts to get the Tx watchdog and its UDP Status Message right

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6901 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Bill Somerville 2016-07-09 18:35:25 +00:00
parent e7e5e3f340
commit 396dd6d491
2 changed files with 68 additions and 55 deletions

View File

@ -322,6 +322,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
m_monitoring {false}, m_monitoring {false},
m_transmitting {false}, m_transmitting {false},
m_tune {false}, m_tune {false},
m_tx_watchdog {false},
m_tune_attenuation {0}, m_tune_attenuation {0},
m_tune_attenuation_restore {0}, m_tune_attenuation_restore {0},
m_block_pwr_tooltip {false}, m_block_pwr_tooltip {false},
@ -423,6 +424,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
connect (m_messageClient, &MessageClient::error, this, &MainWindow::networkError); connect (m_messageClient, &MessageClient::error, this, &MainWindow::networkError);
connect (m_messageClient, &MessageClient::free_text, [this] (QString const& text, bool send) { connect (m_messageClient, &MessageClient::free_text, [this] (QString const& text, bool send) {
if (m_config.accept_udp_requests ()) { if (m_config.accept_udp_requests ()) {
tx_watchdog (false);
// send + non-empty text means set and send the free text // send + non-empty text means set and send the free text
// message, !send + non-empty text means set the current free // message, !send + non-empty text means set the current free
// text message, send + empty text means send the current free // text message, send + empty text means send the current free
@ -447,6 +449,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
ui->freeTextMsg->setCurrentText (text); ui->freeTextMsg->setCurrentText (text);
} }
} }
QApplication::alert (this);
} }
}); });
@ -872,12 +875,11 @@ void MainWindow::on_the_minute ()
if (m_config.watchdog () && !m_mode.startsWith ("WSPR")) if (m_config.watchdog () && !m_mode.startsWith ("WSPR"))
{ {
if (m_idleMinutes < m_config.watchdog ()) ++m_idleMinutes; if (m_idleMinutes < m_config.watchdog ()) ++m_idleMinutes;
updateProgressBarFormat (true); update_watchdog_label ();
} }
else else
{ {
m_idleMinutes = 0; tx_watchdog (false);
updateProgressBarFormat (false);
} }
} }
@ -1362,7 +1364,7 @@ void MainWindow::on_actionSettings_triggered() //Setup Dialog
ui->label_7->setText("Rx Frequency"); ui->label_7->setText("Rx Frequency");
} }
updateProgressBarFormat (m_config.watchdog () && !m_mode.startsWith ("WSPR")); update_watchdog_label ();
} }
void MainWindow::on_monitorButton_clicked (bool checked) void MainWindow::on_monitorButton_clicked (bool checked)
@ -1437,18 +1439,6 @@ void MainWindow::auto_tx_mode (bool state)
on_autoButton_clicked (state); on_autoButton_clicked (state);
} }
void MainWindow::updateProgressBarFormat (bool wd_in_use)
{
if (wd_in_use)
{
progressBar.setFormat (QString {"%v/%m WD:%1m"}.arg (m_config.watchdog () - m_idleMinutes));
}
else
{
progressBar.setFormat ("%v/%m");
}
}
void MainWindow::keyPressEvent (QKeyEvent * e) void MainWindow::keyPressEvent (QKeyEvent * e)
{ {
int n; int n;
@ -1612,11 +1602,8 @@ bool MainWindow::eventFilter (QObject * object, QEvent * event)
case QEvent::KeyPress: case QEvent::KeyPress:
// fall through // fall through
case QEvent::MouseButtonPress: case QEvent::MouseButtonPress:
if (m_idleMinutes && m_config.watchdog () && !m_mode.startsWith ("WSPR")) { // reset the Tx watchdog
m_idleMinutes = 0; // reset Tx watchdog tx_watchdog (false);
updateProgressBarFormat (true);
statusUpdate ();
}
break; break;
case QEvent::ChildAdded: case QEvent::ChildAdded:
@ -1662,7 +1649,10 @@ void MainWindow::createStatusBar() //createStatusBar
statusBar()->addPermanentWidget(&progressBar, 1); statusBar()->addPermanentWidget(&progressBar, 1);
progressBar.setMinimumSize (QSize {100, 18}); progressBar.setMinimumSize (QSize {100, 18});
updateProgressBarFormat (m_config.watchdog () && !m_mode.startsWith ("WSPR")); progressBar.setFormat ("%v/%m");
statusBar ()->addPermanentWidget (&watchdog_label);
update_watchdog_label ();
} }
void MainWindow::setup_status_bar (bool vhf) void MainWindow::setup_status_bar (bool vhf)
@ -2640,12 +2630,7 @@ void MainWindow::guiUpdate()
if (m_config.watchdog() && !m_mode.startsWith ("WSPR") if (m_config.watchdog() && !m_mode.startsWith ("WSPR")
&& m_idleMinutes >= m_config.watchdog ()) { && m_idleMinutes >= m_config.watchdog ()) {
m_bTxTime=false; tx_watchdog (true); // disable transmit
if (m_tune) stop_tuning ();
if (m_auto) auto_tx_mode (false);
tx_status_label.setStyleSheet ("QLabel{background-color: #ff0000}");
tx_status_label.setText ("Runaway Tx watchdog");
QApplication::alert (this);
} }
float fTR=float((nsec%m_TRperiod))/m_TRperiod; float fTR=float((nsec%m_TRperiod))/m_TRperiod;
@ -2866,12 +2851,10 @@ void MainWindow::guiUpdate()
if (g_iptt == 1 && m_iptt0 == 0) if (g_iptt == 1 && m_iptt0 == 0)
{ {
auto const& current_message = QString::fromLatin1 (msgsent); auto const& current_message = QString::fromLatin1 (msgsent);
if(m_config.watchdog () && !m_mode.startsWith ("WSPR")) { if(m_config.watchdog () && !m_mode.startsWith ("WSPR")
if (current_message != m_msgSent0) { && current_message != m_msgSent0) {
m_idleMinutes=0; // in case we are auto sequencing tx_watchdog (false); // in case we are auto sequencing
m_msgSent0 = current_message; m_msgSent0 = current_message;
}
updateProgressBarFormat (true);
} }
if(!m_tune) { if(!m_tune) {
@ -2955,12 +2938,12 @@ void MainWindow::guiUpdate()
} }
} }
} else if(m_monitoring) { } else if(m_monitoring) {
if (m_idleMinutes < m_config.watchdog ()) { if (!m_tx_watchdog) {
tx_status_label.setStyleSheet("QLabel{background-color: #00ff00}"); tx_status_label.setStyleSheet("QLabel{background-color: #00ff00}");
tx_status_label.setText ("Receiving"); tx_status_label.setText ("Receiving");
} }
transmitDisplay(false); transmitDisplay(false);
} else if (!m_diskData && m_idleMinutes < m_config.watchdog ()) { } else if (!m_diskData && !m_tx_watchdog) {
tx_status_label.setStyleSheet(""); tx_status_label.setStyleSheet("");
tx_status_label.setText(""); tx_status_label.setText("");
} }
@ -3025,7 +3008,7 @@ void MainWindow::stopTx()
m_btxok = false; m_btxok = false;
m_transmitting = false; m_transmitting = false;
g_iptt=0; g_iptt=0;
if (m_idleMinutes < m_config.watchdog ()) { if (!m_tx_watchdog) {
tx_status_label.setStyleSheet(""); tx_status_label.setStyleSheet("");
tx_status_label.setText(""); tx_status_label.setText("");
} }
@ -5265,10 +5248,7 @@ void MainWindow::replyToCQ (QTime time, qint32 snr, float delta_time, quint32 de
// find the linefeed at the end of the line // find the linefeed at the end of the line
position = ui->decodedTextBrowser->toPlainText().indexOf("\n",position); position = ui->decodedTextBrowser->toPlainText().indexOf("\n",position);
processMessage (messages, position, false); processMessage (messages, position, false);
if (m_idleMinutes && m_config.watchdog () && !m_mode.startsWith ("WSPR")) { tx_watchdog (false);
m_idleMinutes = 0; // reset Tx watchdog
updateProgressBarFormat (true);
}
QApplication::alert (this); QApplication::alert (this);
} }
else else
@ -5719,19 +5699,14 @@ void MainWindow::CQRxFreq()
void MainWindow::statusUpdate () const void MainWindow::statusUpdate () const
{ {
if (ui) if (!ui) return;
{ m_messageClient->status_update (m_freqNominal, m_mode, m_hisCall,
bool watchdog_timeout {m_config.watchdog () QString::number (ui->rptSpinBox->value ()),
&& m_idleMinutes >= m_config.watchdog () m_modeTx, ui->autoButton->isChecked (),
&& !m_mode.startsWith("WSPR")}; m_transmitting, m_decoderBusy,
m_messageClient->status_update (m_freqNominal, m_mode, m_hisCall, ui->RxFreqSpinBox->value (), ui->TxFreqSpinBox->value (),
QString::number (ui->rptSpinBox->value ()), m_config.my_callsign (), m_config.my_grid (),
m_modeTx, ui->autoButton->isChecked (), m_hisGrid, m_tx_watchdog);
m_transmitting, m_decoderBusy,
ui->RxFreqSpinBox->value (), ui->TxFreqSpinBox->value (),
m_config.my_callsign (), m_config.my_grid (),
m_hisGrid, watchdog_timeout);
}
} }
void MainWindow::childEvent (QChildEvent * e) void MainWindow::childEvent (QChildEvent * e)
@ -5776,3 +5751,38 @@ void MainWindow::remove_child_from_event_filter (QObject * target)
target->removeEventFilter (this); target->removeEventFilter (this);
} }
} }
void MainWindow::tx_watchdog (bool triggered)
{
auto prior = m_tx_watchdog;
m_tx_watchdog = triggered;
if (triggered)
{
m_bTxTime=false;
if (m_tune) stop_tuning ();
if (m_auto) auto_tx_mode (false);
tx_status_label.setStyleSheet ("QLabel{background-color: #ff0000}");
tx_status_label.setText ("Runaway Tx watchdog");
QApplication::alert (this);
}
else
{
m_idleMinutes = 0;
update_watchdog_label ();
}
if (prior != triggered) statusUpdate ();
}
void MainWindow::update_watchdog_label ()
{
if (m_config.watchdog () && !m_mode.startsWith ("WSPR"))
{
watchdog_label.setText (QString {"WD:%1m"}.arg (m_config.watchdog () - m_idleMinutes));
watchdog_label.setVisible (true);
}
else
{
watchdog_label.setText (QString {});
watchdog_label.setVisible (false);
}
}

View File

@ -434,6 +434,7 @@ private:
QLabel auto_tx_label; QLabel auto_tx_label;
QLabel band_hopping_label; QLabel band_hopping_label;
QProgressBar progressBar; QProgressBar progressBar;
QLabel watchdog_label;
QFuture<void> m_wav_future; QFuture<void> m_wav_future;
QFutureWatcher<void> m_wav_future_watcher; QFutureWatcher<void> m_wav_future_watcher;
@ -495,6 +496,7 @@ private:
bool m_monitoring; bool m_monitoring;
bool m_transmitting; bool m_transmitting;
bool m_tune; bool m_tune;
bool m_tx_watchdog; // true when watchdog triggered
int m_tune_attenuation; int m_tune_attenuation;
int m_tune_attenuation_restore; int m_tune_attenuation_restore;
bool m_block_pwr_tooltip; bool m_block_pwr_tooltip;
@ -555,11 +557,12 @@ private:
void subProcessFailed (QProcess *, int exit_code, QProcess::ExitStatus); void subProcessFailed (QProcess *, int exit_code, QProcess::ExitStatus);
void subProcessError (QProcess *, QProcess::ProcessError); void subProcessError (QProcess *, QProcess::ProcessError);
void statusUpdate () const; void statusUpdate () const;
void updateProgressBarFormat (bool wd_in_use); void update_watchdog_label ();
void on_the_minute (); void on_the_minute ();
void add_child_to_event_filter (QObject *); void add_child_to_event_filter (QObject *);
void remove_child_from_event_filter (QObject *); void remove_child_from_event_filter (QObject *);
void setup_status_bar (bool vhf); void setup_status_bar (bool vhf);
void tx_watchdog (bool triggered);
}; };
extern int killbyname(const char* progName); extern int killbyname(const char* progName);