diff --git a/Configuration.cpp b/Configuration.cpp
index c42768b82..c08abe5ee 100644
--- a/Configuration.cpp
+++ b/Configuration.cpp
@@ -598,6 +598,7 @@ private:
Q_SLOT void on_cbSuperFox_clicked (bool);
Q_SLOT void on_cbContestName_clicked (bool);
Q_SLOT void on_cbOTP_clicked (bool);
+ Q_SLOT void on_cbHideOTP_clicked (bool);
void error_during_hamlib_download (QString const& reason);
void after_hamlib_downloaded();
@@ -716,6 +717,7 @@ private:
QString OTPUrl_;
QString OTPSeed_;
bool OTPEnabled_;
+ bool HideOTP_;
qint32 OTPinterval_;
qint32 id_interval_;
@@ -1134,6 +1136,11 @@ bool Configuration::OTPEnabled() const
return m_->OTPSeed_.size() == 16 && m_->OTPEnabled_;
}
+bool Configuration::HideOTP () const
+{
+ return m_->HideOTP_;
+}
+
namespace
{
#if defined (Q_OS_MAC)
@@ -1671,15 +1678,18 @@ void Configuration::impl::read_settings ()
ui_->Contest_Name->setText(Contest_Name_);
hamlib_backed_up_ = settings_->value ("HamlibBackedUp",QString {}).toString ();
- OTPinterval_ = settings_->value ("OTPinterval", 3).toUInt ();
+ OTPinterval_ = settings_->value ("OTPinterval", 1).toUInt ();
OTPUrl_ = settings_->value ("OTPUrl", FoxVerifier::default_url()).toString ();
OTPSeed_ = settings_->value ("OTPSeed", QString {}).toString ();
OTPEnabled_ = settings_->value ("OTPEnabled", false).toBool ();
+ HideOTP_ = settings_->value ("HideOTP", true).toBool ();
ui_->sbOTPinterval->setValue(OTPinterval_);
ui_->OTPUrl->setText(OTPUrl_);
ui_->OTPSeed->setText(OTPSeed_);
ui_->cbOTP->setChecked(OTPEnabled_);
+ ui_->cbHideOTP->setChecked(HideOTP_);
+
if (next_font_.fromString (settings_->value ("Font", QGuiApplication::font ().toString ()).toString ())
&& next_font_ != font_)
@@ -2011,6 +2021,7 @@ void Configuration::impl::write_settings ()
settings_->setValue ("OTPUrl", OTPUrl_);
settings_->setValue ("OTPSeed", OTPSeed_);
settings_->setValue ("OTPEnabled", OTPEnabled_);
+ settings_->setValue ("HideOTP", HideOTP_);
settings_->sync ();
}
@@ -2432,6 +2443,7 @@ void Configuration::impl::accept ()
OTPSeed_=ui_->OTPSeed->text();
OTPUrl_=ui_->OTPUrl->text();
OTPEnabled_=ui_->cbOTP->isChecked();
+ HideOTP_=ui_->cbHideOTP->isChecked();
auto new_server = ui_->udp_server_line_edit->text ().trimmed ();
auto new_interfaces = get_selected_network_interfaces (ui_->udp_interfaces_combo_box);
@@ -3286,6 +3298,11 @@ void Configuration::impl::on_cbOTP_clicked(bool)
check_visibility();
}
+void Configuration::impl::on_cbHideOTP_clicked(bool)
+{
+ check_visibility();
+}
+
void Configuration::impl::check_visibility ()
{
if (ui_->rbFox->isChecked() and ui_->cbSuperFox->isChecked() and ui_->gbSpecialOpActivity->isChecked()) {
@@ -3319,8 +3336,11 @@ void Configuration::impl::check_visibility ()
}
if ((ui_->rbFox->isChecked() or ui_->rbHound->isChecked()) and ui_->gbSpecialOpActivity->isChecked()) {
ui_->cbSuperFox->setEnabled (true);
+ ui_->cbOTP->setEnabled (true);
} else {
ui_->cbSuperFox->setEnabled (false);
+ ui_->cbOTP->setEnabled (false);
+ ui_->cbHideOTP->setEnabled(false);
}
if (!ui_->rbFox->isChecked() and !ui_->rbHound->isChecked() and !ui_->rbQ65pileup->isChecked()
and ui_->gbSpecialOpActivity->isChecked()) {
@@ -3328,37 +3348,34 @@ void Configuration::impl::check_visibility ()
} else {
ui_->cbContestName->setEnabled (false);
}
- if (!ui_->cbOTP->isChecked() or !ui_->gbSpecialOpActivity->isChecked())
- {
+ if (!ui_->cbOTP->isChecked() or !ui_->gbSpecialOpActivity->isChecked()) {
ui_->OTPSeed->setEnabled(false);
ui_->OTPUrl->setEnabled(false);
ui_->sbOTPinterval->setEnabled(false);
ui_->lblOTPSeed->setEnabled(false);
ui_->lblOTPUrl->setEnabled(false);
ui_->lblOTPEvery->setEnabled(false);
- } else
- {
- if (ui_->rbHound->isChecked())
- {
+ ui_->cbHideOTP->setEnabled(false);
+ } else {
+ if (ui_->rbHound->isChecked()) {
if (ui_->OTPUrl->text().isEmpty())
{
ui_->OTPUrl->setText(FoxVerifier::default_url());
}
ui_->OTPUrl->setEnabled(true);
ui_->lblOTPUrl->setEnabled(true);
- } else
- {
+ ui_->cbHideOTP->setEnabled(true);
+ } else {
ui_->OTPUrl->setEnabled(false);
ui_->lblOTPUrl->setEnabled(false);
}
- if (ui_->rbFox->isChecked())
- {
+ if (ui_->rbFox->isChecked()) {
ui_->sbOTPinterval->setEnabled(true);
ui_->OTPSeed->setEnabled(true);
ui_->lblOTPSeed->setEnabled(true);
ui_->lblOTPEvery->setEnabled(true);
- } else
- {
+ ui_->cbHideOTP->setEnabled(false);
+ } else {
ui_->OTPSeed->setEnabled(false);
ui_->lblOTPSeed->setEnabled(false);
ui_->lblOTPEvery->setEnabled(false);
diff --git a/Configuration.hpp b/Configuration.hpp
index b8b6fe504..c8ac367cd 100644
--- a/Configuration.hpp
+++ b/Configuration.hpp
@@ -198,6 +198,7 @@ public:
QString OTPSeed() const;
QString OTPUrl() const;
bool OTPEnabled() const;
+ bool HideOTP() const;
unsigned int OTPinterval() const;
// 0 1 2 3 4 5 6 7 8 9
enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, WW_DIGI, FOX, HOUND, ARRL_DIGI, Q65_PILEUP};
diff --git a/Configuration.ui b/Configuration.ui
index dfb598288..7d92f6f9e 100644
--- a/Configuration.ui
+++ b/Configuration.ui
@@ -6,8 +6,8 @@
0
0
- 764
- 720
+ 750
+ 600
@@ -2907,8 +2907,210 @@ Right click for insert and delete options.
false
-
- -
+
+
-
+
+
-
+
+
+ <html><head/><body><p>FT Roundup and similar contests. Exchange is US state, Canadian province, or "DX".</p></body></html>
+
+
+ R T T Y Roundup
+
+
+ FT Roundup
+
+
+ special_op_activity_button_group
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
-
+
+
+ RTTY Roundup exchange
+
+
+ FT RU Exch:
+
+
+ RTTY_Exchange
+
+
+
+ -
+
+
+
+ 70
+ 0
+
+
+
+ <html><head/><body><p>FT Roundup and similar contests. Exchange is US state, Canadian province, or "DX".</p></body></html>
+
+
+ NJ
+
+
+ Qt::AlignCenter
+
+
+
+
+
+
+
+ -
+
+
+ <html><head/><body><p>FT8 DXpedition mode: Hound operator calling the DX.</p></body></html>
+
+
+ Hound
+
+
+ Hound
+
+
+ true
+
+
+ special_op_activity_button_group
+
+
+
+ -
+
+
+ <html><head/><body><p>ARRL International Digital Contest</p></body></html>
+
+
+ ARRL Digi Contest
+
+
+ special_op_activity_button_group
+
+
+
+ -
+
+
+
+ 0
+ 18
+
+
+
+ <html><head/><body><p>World-Wide Digi-mode contest</p><p><br/></p></body></html>
+
+
+ WW Digital Contest
+
+
+ WW Digi Contest
+
+
+ special_op_activity_button_group
+
+
+
+ -
+
+
-
+
+
+ <html><head/><body><p>Call CQ with an individual contest name instead of TEST, RU, or WW. </p></body></html>
+
+
+ CQ with individual contest name
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
-
+
+
+ Contest name:
+
+
+
+ -
+
+
+
+ 70
+ 16777215
+
+
+
+
+
+
+ 4
+
+
+ 0
+
+
+ Qt::AlignCenter
+
+
+
+
+
+
+
+ -
+
+
+
+ 0
+ 18
+
+
+
+ <html><head/><body><p>Exchange 4-character locator instead of signal report. Provides q3-level sensitivities for the DX operator. Especially useful for 6m EME DXpeditions.</p></body></html>
+
+
+ Q65 Pileup
+
+
+ special_op_activity_button_group
+
+
+
+ -
-
@@ -2977,149 +3179,6 @@ Right click for insert and delete options.
- -
-
-
- <html><head/><body><p>URL used to verify OTP codes.</p></body></html>
-
-
-
-
-
-
- -
-
-
- <html><head/><body><p>Click to enable OTP method of Fox verification. Requires internet.</p></body></html>
-
-
-
-
-
- OTP
-
-
-
- -
-
-
- <html><head/><body><p>FT8 DXpedition mode: Fox (DXpedition) operator.</p></body></html>
-
-
- Fox
-
-
- Fox
-
-
- false
-
-
- special_op_activity_button_group
-
-
-
- -
-
-
-
-
-
- OTP every
-
-
-
- -
-
-
- <html><head/><body><p>How many cycles between sends of the OTP.</p></body></html>
-
-
-
-
-
- 1
-
-
- 20
-
-
- 3
-
-
-
- -
-
-
- OTP Key
-
-
-
- -
-
-
- <html><head/><body><p>Fox's key to generate OTP Codes.</p></body></html>
-
-
-
-
-
-
-
-
- -
-
-
-
- 0
- 18
-
-
-
- <html><head/><body><p>Exchange 4-character locator instead of signal report. Provides q3-level sensitivities for the DX operator. Especially useful for 6m EME DXpeditions.</p></body></html>
-
-
- Q65 Pileup
-
-
- special_op_activity_button_group
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
-
- 0
- 18
-
-
-
- <html><head/><body><p>World-Wide Digi-mode contest</p><p><br/></p></body></html>
-
-
- WW Digital Contest
-
-
- WW Digi Contest
-
-
- special_op_activity_button_group
-
-
-
-
@@ -3142,128 +3201,7 @@ Right click for insert and delete options.
- -
-
-
-
-
-
- <html><head/><body><p>Call CQ with an individual contest name instead of TEST, RU, or WW. </p></body></html>
-
-
- CQ with individual contest name
-
-
-
- -
-
-
- Qt::Horizontal
-
-
-
- 40
- 20
-
-
-
-
- -
-
-
-
-
-
- Contest name:
-
-
-
- -
-
-
-
- 70
- 16777215
-
-
-
-
-
-
- 4
-
-
- 0
-
-
- Qt::AlignCenter
-
-
-
-
-
-
-
- -
-
-
-
- 0
- 0
-
-
-
- <html><head/><body><p>European VHF+ contests requiring a signal report, serial number, and 6-character locator.</p></body></html>
-
-
- EU VHF Contest
-
-
- EU VHF Contest
-
-
- special_op_activity_button_group
-
-
-
- -
-
-
- OTP URL
-
-
-
- -
-
-
- <html><head/><body><p>FT8 DXpedition mode: Hound operator calling the DX.</p></body></html>
-
-
- Hound
-
-
- Hound
-
-
- true
-
-
- special_op_activity_button_group
-
-
-
- -
-
-
- <html><head/><body><p>ARRL International Digital Contest</p></body></html>
-
-
- ARRL Digi Contest
-
-
- special_op_activity_button_group
-
-
-
- -
+
-
-
@@ -3305,7 +3243,7 @@ Right click for insert and delete options.
- 160
+ 70
0
@@ -3319,81 +3257,187 @@ Right click for insert and delete options.
<html><head/><body><p>SuperFox operator must enter a valid key to enable transmission.</p></body></html>
- 20
+ 9
- Qt::AlignLeading
+ Qt::AlignCenter
- -
-
+
-
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+
+ 0
+ 0
+
+
+
+ <html><head/><body><p>European VHF+ contests requiring a signal report, serial number, and 6-character locator.</p></body></html>
+
+
+ EU VHF Contest
+
+
+ EU VHF Contest
+
+
+ special_op_activity_button_group
+
+
+
+ -
+
+
+ <html><head/><body><p>FT8 DXpedition mode: Fox (DXpedition) operator.</p></body></html>
+
+
+ Fox
+
+
+ Fox
+
+
+ false
+
+
+ special_op_activity_button_group
+
+
+
+ -
+
-
-
+
- <html><head/><body><p>FT Roundup and similar contests. Exchange is US state, Canadian province, or "DX".</p></body></html>
-
-
- R T T Y Roundup
+ <html><head/><body><p>Click to enable OTP method of Fox verification. Requires internet.</p></body></html>
- FT Roundup
+ OTP
-
- special_op_activity_button_group
-
-
-
-
- Qt::Horizontal
-
+
- 40
+ 20
20
-
-
-
-
-
-
- RTTY Roundup exchange
-
-
- FT RU Exch:
-
-
- RTTY_Exchange
-
-
-
- -
-
-
-
- 70
- 0
-
-
-
- <html><head/><body><p>FT Roundup and similar contests. Exchange is US state, Canadian province, or "DX".</p></body></html>
-
-
- NJ
-
-
- Qt::AlignCenter
-
-
-
-
+
+
+ OTP URL
+
+
+
+ -
+
+
+ <html><head/><body><p>URL used to verify OTP codes.</p></body></html>
+
+
+
+ -
+
+
+
+ 20
+ 20
+
+
+
+
+ -
+
+
+ Interval
+
+
+
+ -
+
+
+ <html><head/><body><p>Interval at which the OTP messages are sent. Select 1 to sign every message.</p></body></html>
+
+
+ 20
+
+
+ 1
+
+
+
+ -
+
+
+
+ 20
+ 20
+
+
+
+
+ -
+
+
+ <html><head/><body><p>Hide OTP messages in the Band Activity window.</p></body></html>
+
+
+ Hide OTP messages
+
+
+ true
+
+
+
+ -
+
+
+
+ 20
+ 20
+
+
+
+
+ -
+
+
+ OTP Key:
+
+
+
+ -
+
+
+
+ 70
+ 0
+
+
+
+ <html><head/><body><p>Fox's key to generate OTP Codes.</p></body></html>
+
+
@@ -3635,13 +3679,13 @@ Right click for insert and delete options.
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/Network/FoxVerifier.cpp b/Network/FoxVerifier.cpp
index d4bc5c82f..92663e851 100644
--- a/Network/FoxVerifier.cpp
+++ b/Network/FoxVerifier.cpp
@@ -106,11 +106,11 @@ QString FoxVerifier::formatDecodeMessage(QDateTime ts, QString callsign, unsigne
QTime rx_time = ts.time();
QString hz=QString("%1").arg(hz_, 4, 10 ); // insert Hz
if (verify_message.endsWith(" VERIFIED")) {
- return QString("%1 0 0.0 %2 ~ %3 Verified").arg(rx_time.toString("hhmmss")).arg(hz).arg(callsign);
+ return QString("%1 0 0.0 %2 ~ %3 verified").arg(rx_time.toString("hhmmss")).arg(hz).arg(callsign);
} else
if (verify_message.endsWith(" INVALID"))
{
- return QString("%1 0 0.0 %2 ~ %3 Invalid").arg(rx_time.toString("hhmmss")).arg(hz).arg(callsign);
+ return QString("%1 0 0.0 %2 ~ %3 invalid").arg(rx_time.toString("hhmmss")).arg(hz).arg(callsign);
}
else
return QString{};
diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp
index c00c3a256..7c7ed0b4d 100644
--- a/widgets/mainwindow.cpp
+++ b/widgets/mainwindow.cpp
@@ -224,6 +224,7 @@ bool no_a7_decodes = false;
bool keep_frequency = false;
int m_Nslots0 {1};
int m_TxFreqFox {300};
+bool filtered = false;
QSharedMemory mem_qmap("mem_qmap"); //Memory segment to be shared (optionally) with QMAP
struct {
@@ -1174,7 +1175,7 @@ void MainWindow::on_the_minute ()
tx_watchdog (false);
}
update_foxLogWindow_rate(); // update the rate on the window
- if ((!verified && ui->labDXped->isVisible()) or ui->labDXped->text()!="Super Hound")
+ if ((!verified && ui->labDXped->isVisible()) or !ui->labDXped->text().contains("Hound"))
ui->labDXped->setStyleSheet("QLabel {background-color: red; color: white;}");
verified = false;
}
@@ -1947,6 +1948,7 @@ void MainWindow::fastSink(qint64 frames)
{
int k (frames);
bool decodeNow=false;
+ filtered = false;
if(k < m_k0) { //New sequence ?
memcpy(fast_green2,fast_green,4*703); //Copy fast_green[] to fast_green2[]
memcpy(fast_s2,fast_s,4*703*64); //Copy fast_s[] into fast_s2[]
@@ -2225,7 +2227,10 @@ void MainWindow::on_autoButton_clicked (bool checked)
m_bAutoReply = false; // ready for next
m_bCallingCQ = true; // allows tail-enders to be picked up
}
- if (!checked) m_bCallingCQ = false;
+ if (!checked) {
+ m_bCallingCQ = false;
+ filtered = false;
+ }
statusUpdate ();
m_bEchoTxOK=false;
if(m_mode=="Echo" and m_auto) {
@@ -2494,15 +2499,22 @@ void MainWindow::keyPressEvent (QKeyEvent * e)
QMainWindow::keyPressEvent (e);
}
-void MainWindow::handleVerifyMsg(int status, QDateTime ts, QString callsign, QString code, unsigned int hz, QString const &response) { (void)status;
+void MainWindow::handleVerifyMsg(int status, QDateTime ts, QString callsign, QString code, unsigned int hz, QString const &response)
+{
+ (void)status;
(void)code;
if (response.length() > 0) {
QString msg = FoxVerifier::formatDecodeMessage(ts, callsign, hz, response);
if (msg.length() > 0) {
+ // Hound label
+ if ((ui->labDXped->text().contains("Hound") && msg.contains(" verified"))) {
+ verified = true;
+ ui->labDXped->setStyleSheet("QLabel {background-color: #00ff00; color: black;}");
+ }
ui->decodedTextBrowser->displayDecodedText(DecodedText{msg}, m_config.my_callsign(), m_mode, m_config.DXCC(),
m_logBook, m_currentBand, m_config.ppfx());
write_all("Ck",msg);
- }
+ }
}
LOG_INFO(QString("FoxVerifier response for [%1]: - [%2]").arg(callsign).arg(response).toStdString());
}
@@ -2856,6 +2868,7 @@ void MainWindow::on_stopButton_clicked() //stopButton
m_bRefSpec=false;
}
stopWRTimer.stop(); // stop a running Tx3 timer
+ filtered = false;
}
void MainWindow::on_actionRelease_Notes_triggered ()
@@ -4144,6 +4157,7 @@ void MainWindow::activeWorked(QString call, QString band)
void MainWindow::readFromStdout() //readFromStdout
{
bool bDisplayPoints = false;
+ filtered = false;
QString all_decodes;
if(m_ActiveStationsWidget!=NULL) {
bDisplayPoints=(m_mode=="FT4" or m_mode=="FT8") and
@@ -4327,12 +4341,14 @@ void MainWindow::readFromStdout() //readFromStdout
callsign = otp_parts[0];
otp = otp_parts[1];
hz = lineparts[3].toInt();
+ if (m_config.HideOTP()) filtered = true;
} else
{
// split $VERIFY$ K8R 920749 into K8R and 920749
callsign = lineparts[6];
otp = lineparts[7];
hz = 750; // SF is 750
+ if (m_config.HideOTP()) filtered = true;
}
QDateTime verifyDateTime;
if (m_diskData) {
@@ -4353,19 +4369,21 @@ void MainWindow::readFromStdout() //readFromStdout
}
#endif
{
- if (ui->labDXped->text() == "Super Hound" && decodedtext0.mid(3, 18).contains(" verified")) {
+ if (ui->labDXped->text().contains("Hound") && decodedtext0.mid(3,18).contains(" verified")) {
verified = true;
write_all("Vf",decodedtext0.string());
ui->labDXped->setStyleSheet("QLabel {background-color: #00ff00; color: black;}");
} else {
- if (decodedtext0.mid(4, 2).contains("00") or decodedtext0.mid(4, 2).contains("30")) verified = false;
+ if (m_specOp==SpecOp::HOUND && m_config.superFox() && (decodedtext0.mid(4,2).contains("00") or decodedtext0.mid(4,2).contains("30"))) verified = false;
}
- if ((!verified && ui->labDXped->isVisible()) or ui->labDXped->text() != "Super Hound")
+ if ((!verified && ui->labDXped->isVisible()) or !ui->labDXped->text().contains("Hound"))
ui->labDXped->setStyleSheet("QLabel {background-color: red; color: white;}");
- ui->decodedTextBrowser->displayDecodedText(decodedtext1, m_config.my_callsign(), m_mode, m_config.DXCC(),
- m_logBook, m_currentBandPeriod, m_config.ppfx(),
- ui->cbCQonly->isVisible() && ui->cbCQonly->isChecked(),
- haveFSpread, fSpread, bDisplayPoints, m_points);
+ if (!filtered) {
+ ui->decodedTextBrowser->displayDecodedText(decodedtext1, m_config.my_callsign(), m_mode, m_config.DXCC(),
+ m_logBook, m_currentBandPeriod, m_config.ppfx(),
+ ui->cbCQonly->isVisible() && ui->cbCQonly->isChecked(),
+ haveFSpread, fSpread, bDisplayPoints, m_points);
+ }
if ((m_mode == "FT4" or m_mode == "FT8") and bDisplayPoints and decodedtext1.isStandardMessage()) {
QString deCall, deGrid;
decodedtext.deCallAndGrid(/*out*/deCall, deGrid);
@@ -7084,6 +7102,7 @@ void MainWindow::on_logQSOButton_clicked() //Log QSO button
ui->TxFreqSpinBox->value(), m_noSuffix, m_xSent, m_xRcvd);
m_inQSOwith="";
stopWRTimer.stop(); // stop a running Tx3 timer
+ filtered = false;
}
void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call, QString const& grid
@@ -8464,6 +8483,7 @@ void MainWindow::on_stopTxButton_clicked() //Stop Tx
m_bAutoReply = false; // ready for next
m_maxPoints=-1;
stopWRTimer.stop(); // stop a running Tx3 timer
+ filtered = false;
}
void MainWindow::rigOpen ()