diff --git a/Configuration.cpp b/Configuration.cpp
index 7fac6f4..88a6735 100644
--- a/Configuration.cpp
+++ b/Configuration.cpp
@@ -644,6 +644,7 @@ private:
bool ppfx_;
bool clear_callsign_;
bool miles_;
+ bool avoid_allcall_;
bool quick_call_;
bool disable_TX_on_73_;
int heartbeat_;
@@ -775,6 +776,7 @@ bool Configuration::DXCC () const {return m_->DXCC_;}
bool Configuration::ppfx() const {return m_->ppfx_;}
bool Configuration::clear_callsign () const {return m_->clear_callsign_;}
bool Configuration::miles () const {return m_->miles_;}
+bool Configuration::avoid_allcall () const {return m_->avoid_allcall_;}
bool Configuration::quick_call () const {return m_->quick_call_;}
bool Configuration::disable_TX_on_73 () const {return m_->disable_TX_on_73_;}
int Configuration::heartbeat () const {return m_->heartbeat_;}
@@ -1385,6 +1387,7 @@ void Configuration::impl::initialize_models ()
ui_->prompt_to_log_check_box->setChecked (prompt_to_log_);
ui_->clear_callsign_check_box->setChecked (clear_callsign_);
ui_->miles_check_box->setChecked (miles_);
+ ui_->avoid_allcall_checkbox->setChecked(avoid_allcall_);
ui_->quick_call_check_box->setChecked (quick_call_);
ui_->disable_TX_on_73_check_box->setChecked (disable_TX_on_73_);
ui_->heartbeat_spin_box->setValue (heartbeat_);
@@ -1695,6 +1698,7 @@ void Configuration::impl::read_settings ()
ppfx_ = settings_->value ("PrincipalPrefix", false).toBool ();
clear_callsign_ = settings_->value ("ClearCallGrid", false).toBool ();
miles_ = settings_->value ("Miles", false).toBool ();
+ avoid_allcall_ = settings_->value ("AvoidAllcall", false).toBool ();
quick_call_ = settings_->value ("QuickCall", false).toBool ();
disable_TX_on_73_ = settings_->value ("73TxDisable", false).toBool ();
heartbeat_ = settings_->value ("TxBeacon", 30).toInt ();
@@ -1830,6 +1834,7 @@ void Configuration::impl::write_settings ()
settings_->setValue ("PrincipalPrefix", ppfx_);
settings_->setValue ("ClearCallGrid", clear_callsign_);
settings_->setValue ("Miles", miles_);
+ settings_->setValue ("AvoidAllcall", avoid_allcall_);
settings_->setValue ("QuickCall", quick_call_);
settings_->setValue ("73TxDisable", disable_TX_on_73_);
settings_->setValue ("TxBeacon", heartbeat_);
@@ -2319,6 +2324,7 @@ void Configuration::impl::accept ()
prompt_to_log_ = ui_->prompt_to_log_check_box->isChecked ();
clear_callsign_ = ui_->clear_callsign_check_box->isChecked ();
miles_ = ui_->miles_check_box->isChecked ();
+ avoid_allcall_ = ui_->avoid_allcall_checkbox->isChecked();
quick_call_ = ui_->quick_call_check_box->isChecked ();
disable_TX_on_73_ = ui_->disable_TX_on_73_check_box->isChecked ();
heartbeat_ = ui_->heartbeat_spin_box->value ();
diff --git a/Configuration.hpp b/Configuration.hpp
index ce0b1cf..f7a3660 100644
--- a/Configuration.hpp
+++ b/Configuration.hpp
@@ -135,6 +135,7 @@ public:
bool ppfx() const;
bool clear_callsign () const;
bool miles () const;
+ bool avoid_allcall () const;
bool quick_call () const;
bool disable_TX_on_73 () const;
int heartbeat () const;
diff --git a/Configuration.ui b/Configuration.ui
index e183610..d33c2f6 100644
--- a/Configuration.ui
+++ b/Configuration.ui
@@ -98,30 +98,6 @@
- -
-
-
- Station callsign.
-
-
-
- -
-
-
- IARU Region
-
-
-
- -
-
-
- IARU Region:
-
-
- region_combo_box
-
-
-
-
@@ -132,6 +108,19 @@
+ -
+
+
+ <html><head/><body><p>Enter a comma separated list of callsign groups (e.g., @GROUP/1, @ARES, @RACES, etc). <br/><br/>Each group behaves similarly to @ALLCALL. Messages that are directed to the group are printed at all participating stations.</p></body></html>
+
+
+
+
+
+ @GROUP1, ...
+
+
+
-
@@ -143,22 +132,49 @@
-
-
+
Callsign Groups (comma separated):
- -
-
+
-
+
- <html><head/><body><p>Enter a comma separated list of callsign groups (e.g., @GROUP/1, @ARES, @RACES, etc). <br/><br/>Each group behaves similarly to @ALLCALL. Messages that are directed to the group are printed at all participating stations.</p></body></html>
+ Station callsign.
+
+
+
+ -
+
+
+ Do not participate in the @ALLCALL group
+
+
+ false
+
+
+
+ -
+
+
+ false
+
+
+ IARU Region
+
+
+
+ -
+
+
+ false
-
+ IARU Region:
-
- @ALLCALL, ...
+
+ region_combo_box
@@ -279,8 +295,8 @@
0
0
- 724
- 489
+ 654
+ 482
@@ -389,11 +405,11 @@
-
-
-
- Allow heartbeat transmissions outside of heartbeat sub-channel (500Hz - 1000Hz)
-
-
+
+
+ Allow heartbeat transmissions outside of heartbeat sub-channel (500Hz - 1000Hz)
+
+
-
@@ -876,7 +892,7 @@ text message.
0
0
- 718
+ 264
435
@@ -1715,8 +1731,8 @@ radio interface behave as expected.
0
0
- 760
- 502
+ 266
+ 329
@@ -2028,8 +2044,8 @@ both here.
0
0
- 746
- 554
+ 508
+ 525
@@ -2485,8 +2501,8 @@ for assessing propagation and system performance.
0
0
- 760
- 502
+ 487
+ 341
@@ -2592,7 +2608,7 @@ for assessing propagation and system performance.
-
- Working Frequencies
+ Frequencies
-
@@ -3063,8 +3079,8 @@ QListView::item:hover {
0
0
- 738
- 378
+ 271
+ 195
@@ -4065,12 +4081,12 @@ soundcard changes
-
-
-
-
+
+
+
+
diff --git a/mainwindow.cpp b/mainwindow.cpp
index c743dab..a8d0c9e 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -1125,7 +1125,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
return;
}
- if(!ensureCallsignSet(true) || !ensureSelcalCallsignSelected(true)){
+ if(!ensureCallsignSet(true)){
return;
}
@@ -1448,15 +1448,14 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
gridButtonLayout->setColumnMinimumWidth(0, width);
gridButtonLayout->setColumnMinimumWidth(1, width);
gridButtonLayout->setColumnMinimumWidth(2, width);
- gridButtonLayout->setColumnMinimumWidth(3, width);
gridButtonLayout->setColumnStretch(0, 1);
gridButtonLayout->setColumnStretch(1, 1);
gridButtonLayout->setColumnStretch(2, 1);
- gridButtonLayout->setColumnStretch(3, 1);
pskSetLocal();
aprsSetLocal();
+ clearActivity();
displayActivity(true);
/*
@@ -1747,7 +1746,6 @@ void MainWindow::writeSettings()
m_settings->setValue("TextVerticalSplitter", ui->textVerticalSplitter->saveState());
m_settings->setValue("ShowTimeDrift", ui->driftSyncFrame->isVisible());
m_settings->setValue("TimeDrift", ui->driftSpinBox->value());
- m_settings->setValue("SelCal", ui->selcalButton->isChecked());
m_settings->setValue("ShowTooltips", ui->actionShow_Tooltips->isChecked());
m_settings->endGroup();
@@ -1862,7 +1860,6 @@ void MainWindow::readSettings()
}
ui->driftSyncFrame->setVisible(m_settings->value("ShowTimeDrift", false).toBool());
ui->driftSpinBox->setValue(m_settings->value("TimeDrift", 0).toInt());
- ui->selcalButton->setChecked(m_settings->value("SelCal", false).toBool());
ui->actionShow_Tooltips->setChecked(m_settings->value("ShowTooltips", true).toBool());
m_settings->endGroup();
@@ -2367,9 +2364,7 @@ void rebuildMacQAction(QMenu *menu, QAction *existingAction){
void MainWindow::on_menuControl_aboutToShow(){
ui->actionEnable_Spotting->setChecked(ui->spotButton->isChecked());
- ui->actionEnable_Active->setChecked(ui->activeButton->isChecked());
ui->actionEnable_Auto_Reply->setChecked(ui->autoReplyButton->isChecked());
- ui->actionEnable_Selcall->setChecked(ui->selcalButton->isChecked());
QMenu * heartbeatMenu = new QMenu(this->menuBar());
buildHeartbeatMenu(heartbeatMenu);
@@ -2394,14 +2389,6 @@ void MainWindow::on_actionEnable_Auto_Reply_toggled(bool checked){
ui->autoReplyButton->setChecked(checked);
}
-void MainWindow::on_actionEnable_Active_toggled(bool checked){
- ui->activeButton->setChecked(checked);
-}
-
-void MainWindow::on_actionEnable_Selcall_toggled(bool checked){
- ui->selcalButton->setChecked(checked);
-}
-
void MainWindow::on_menuWindow_aboutToShow(){
ui->actionShow_Fullscreen->setChecked((windowState() & Qt::WindowFullScreen) == Qt::WindowFullScreen);
@@ -2770,33 +2757,6 @@ void MainWindow::on_monitorTxButton_toggled(bool checked){
resetPushButtonToggleText(ui->monitorTxButton);
}
-void MainWindow::on_selcalButton_toggled(bool checked){
-#if SELCAL_SHOULD_HIDE_BAND_ACTIVITY
- if(checked){
- if(ui->tableWidgetRXAll->isVisible()){
- ui->tableWidgetRXAll->setVisible(false);
- m_bandActivityWasVisible = true;
- } else {
- m_bandActivityWasVisible = false;
- }
- } else {
- ui->tableWidgetRXAll->setVisible(m_bandActivityWasVisible);
- }
-#endif
-
- if(checked && callsignSelected() == "@ALLCALL"){
- clearCallsignSelected();
- }
-
- if(checked){
- resetAutomaticIntervalTransmissions(true, true);
- }
-
- resetPushButtonToggleText(ui->selcalButton);
-
- displayCallActivity();
-}
-
void MainWindow::on_tuneButton_toggled(bool checked){
resetPushButtonToggleText(ui->tuneButton);
}
@@ -2805,43 +2765,6 @@ void MainWindow::on_spotButton_toggled(bool checked){
resetPushButtonToggleText(ui->spotButton);
}
-void MainWindow::on_activeButton_toggled(bool checked){
-#if 0
- // clear the ping queue when you toggle the button
- m_txHeartbeatQueue.clear();
- displayBandActivity();
-
- // then process the action
- if(checked){
- scheduleHeartbeat(false);
- } else {
- pauseHeartbeat();
- }
-#endif
-
- // we call this so hb button disabled state is updated
- updateButtonDisplay();
-
- resetPushButtonToggleText(ui->activeButton);
-}
-
-#if 0
-void MainWindow::on_heartbeatButton_toggled(bool checked){
- // clear the ping queue when you toggle the button
- m_txHeartbeatQueue.clear();
- displayBandActivity();
-
- // then process the action
- if(checked){
- scheduleHeartbeat(false);
- } else {
- pauseHeartbeat();
- }
-
- resetPushButtonToggleText(ui->heartbeatButton);
-}
-#endif
-
void MainWindow::auto_tx_mode (bool state)
{
ui->autoButton->setChecked (state);
@@ -5433,7 +5356,8 @@ void MainWindow::createAllcallTableRows(QTableWidget *table, QString const &sele
int startCol = 1;
- if(!ui->selcalButton->isChecked()){
+ if(!m_config.avoid_allcall())
+ {
table->insertRow(table->rowCount());
foreach(auto cd, m_callActivity.values()){
@@ -5689,19 +5613,6 @@ bool MainWindow::ensureCallsignSet(bool alert){
return true;
}
-bool MainWindow::ensureSelcalCallsignSelected(bool alert){
- auto selectedCallsign = callsignSelected(true);
- bool isAllCall = isAllCallIncluded(selectedCallsign);
- bool missingCall = selectedCallsign.isEmpty();
- bool blockTransmit = ui->selcalButton->isChecked() && (isAllCall || missingCall);
-
- if(blockTransmit && alert){
- MessageBox::warning_message(this, tr ("Please select or enter a callsign to direct this message while SELCALL is enabled."));
- }
-
- return !blockTransmit;
-}
-
bool MainWindow::ensureKeyNotStuck(QString const& text){
// be annoying and drop messages with all the same character to reduce spam...
if(text.length() > 5 && QString(text).replace(text.at(0), "").trimmed().isEmpty()){
@@ -5730,11 +5641,6 @@ void MainWindow::createMessage(QString const& text){
return;
}
- if(!ensureSelcalCallsignSelected()){
- on_stopTxButton_clicked();
- return;
- }
-
if(!ensureNotIdle()){
on_stopTxButton_clicked();
return;
@@ -6797,8 +6703,7 @@ void MainWindow::buildRepeatMenu(QMenu *menu, QPushButton * button, int * interv
void MainWindow::sendHeartbeat(){
QString mycall = m_config.my_callsign();
QString mygrid = m_config.my_grid().left(4);
- QString status = ui->activeButton->isChecked() ? "ACTIVE" : "IDLE";
- QString message = QString("%1: HB %2 %3").arg(mycall).arg(status).arg(mygrid).trimmed();
+ QString message = QString("%1: HB %2").arg(mycall).arg(mygrid).trimmed();
auto f = m_config.heartbeat_anywhere() ? -1 : findFreeFreqOffset(500, 1000, 50);
@@ -7210,7 +7115,7 @@ void MainWindow::buildQueryMenu(QMenu * menu, QString call){
if(m_config.transmit_directed()) toggleTx(true);
});
- auto stationIdleQueryAction = menu->addAction(QString("%1 STATUS? - Is your station active or inactive?").arg(call).trimmed());
+ auto stationIdleQueryAction = menu->addAction(QString("%1 STATUS? - What is the status of your station (auto, version, etc)?").arg(call).trimmed());
stationIdleQueryAction->setDisabled(isAllCall);
connect(stationIdleQueryAction, &QAction::triggered, this, [this](){
@@ -7474,8 +7379,7 @@ QMap MainWindow::buildMacroValues(){
{"", m_config.my_station()},
{"", m_config.my_qth()},
{"", m_config.cq_message()},
- {"", m_config.reply_message()},
- {"", (ui->activeButton->isChecked() ? "ACTIVE" : "IDLE")},
+ {"", m_config.reply_message()}
};
auto selectedCall = callsignSelected();
@@ -8660,9 +8564,8 @@ void MainWindow::updateRepeatButtonDisplay(){
void MainWindow::updateTextDisplay(){
bool isTransmitting = m_transmitting || m_txFrameCount > 0;
bool emptyText = ui->extFreeTextMsgEdit->toPlainText().isEmpty();
- bool invalidSelcal = !ensureSelcalCallsignSelected(false);
- ui->startTxButton->setDisabled(isTransmitting || emptyText || invalidSelcal);
+ ui->startTxButton->setDisabled(isTransmitting || emptyText);
if(m_txTextDirty){
// debounce frame and word count
@@ -8790,7 +8693,7 @@ void MainWindow::updateTxButtonDisplay(){
ui->startTxButton->setFlat(true);
} else {
ui->startTxButton->setText(m_txFrameCountEstimate <= 0 ? QString("Send") : QString("Send (%1)").arg(m_txFrameCountEstimate));
- ui->startTxButton->setEnabled(m_txFrameCountEstimate > 0 && ensureSelcalCallsignSelected(false));
+ ui->startTxButton->setEnabled(m_txFrameCountEstimate > 0);
ui->startTxButton->setFlat(false);
}
}
@@ -8944,7 +8847,10 @@ void MainWindow::observeTimeDeltaForAverage(float delta){
}
// display average
- ui->driftAvgLabel->setText(QString("Avg Time Delta: %1 ms").arg(m_timeDeltaMsMMA));
+ if(m_timeDeltaMsMMA < -15.0F || m_timeDeltaMsMMA > 15.0F){
+ resetTimeDeltaAverage();
+ }
+ ui->driftAvgLabel->setText(QString("Avg Time Delta: %1 ms").arg((int)m_timeDeltaMsMMA));
}
void MainWindow::resetTimeDeltaAverage(){
@@ -9015,7 +8921,7 @@ void MainWindow::processRxActivity() {
int prevOffset = d.freq;
if(hasExistingMessageBuffer(d.freq, false, &prevOffset) && (
(m_messageBuffer[prevOffset].cmd.to == m_config.my_callsign()) ||
- // (isAllCallIncluded(m_messageBuffer[prevOffset].cmd.to) && !ui->selcalButton->isChecked()) || // don't incrementally print allcalls
+ // (isAllCallIncluded(m_messageBuffer[prevOffset].cmd.to)) || // uncomment this if we want to incrementally print allcalls
(isGroupCallIncluded(m_messageBuffer[prevOffset].cmd.to))
)
){
@@ -9042,10 +8948,6 @@ void MainWindow::processRxActivity() {
if(d.isDirected && d.text.contains(": HB ")){ // TODO: HEARTBEAT
continue;
}
-
- if(ui->selcalButton->isChecked()){
- continue;
- }
}
// TODO: incremental printing of directed messages
@@ -9342,8 +9244,9 @@ void MainWindow::processCommandActivity() {
continue;
}
- // if selcal is enabled and this is an allcall, take no action.
- if (isAllCall && ui->selcalButton->isChecked()) {
+ // we're only responding to allcalls if we are participating in the allcall group
+ // but, don't avoid for heartbeats...those are technically allcalls but are processed differently
+ if(isAllCall && m_config.avoid_allcall() && d.cmd != " HB"){
continue;
}
@@ -9457,11 +9360,7 @@ void MainWindow::processCommandActivity() {
// QUERIED ACTIVE
else if (d.cmd == " STATUS?" && !isAllCall) {
- if(ui->activeButton->isChecked()){
- reply = QString("%1 ACTIVE").arg(d.from);
- } else {
- reply = QString("%1 IDLE").arg(d.from);
- }
+ reply = QString("%1 AUTO:%2 VER:%3").arg(d.from).arg(ui->autoReplyButton->isChecked() ? "ON" : "OFF").arg(version());
}
// QUERIED GRID
@@ -9585,7 +9484,7 @@ void MainWindow::processCommandActivity() {
// PROCESS ACTIVE HEARTBEAT
// if we have auto reply enabled and we are heartbeating and selcall is not enabled
- else if (d.cmd == " HB" && ui->autoReplyButton->isChecked() && ui->hbMacroButton->isChecked() && m_hbInterval > 0 && !ui->selcalButton->isChecked()){
+ else if (d.cmd == " HB" && ui->autoReplyButton->isChecked() && ui->hbMacroButton->isChecked() && m_hbInterval > 0){
sendHeartbeatAck(d.from, d.snr);
if(isAllCall){
@@ -9598,7 +9497,7 @@ void MainWindow::processCommandActivity() {
}
// PROCESS BUFFERED QUERY
- else if (d.cmd == " QUERY" && ui->autoReplyButton->isChecked() && !ui->selcalButton->isChecked()){
+ else if (d.cmd == " QUERY" && ui->autoReplyButton->isChecked()){
auto who = d.text;
if(who.isEmpty()){
continue;
@@ -11100,21 +10999,18 @@ void MainWindow::tx_watchdog (bool triggered)
// if the watchdog is triggered...we're no longer active
bool wasAuto = ui->autoReplyButton->isChecked();
- bool wasActive = ui->activeButton->isChecked();
bool wasHB = ui->hbMacroButton->isChecked();
bool wasCQ = ui->cqMacroButton->isChecked();
// save the button states
ui->autoReplyButton->setChecked(false);
- ui->activeButton->setChecked(false);
ui->hbMacroButton->setChecked(false);
ui->cqMacroButton->setChecked(false);
- MessageBox::warning_message(this, QString("Attempting to transmit, but you have been inactive for more than %1 minutes.").arg(m_config.watchdog()));
+ MessageBox::warning_message(this, QString("You have been inactive for more than %1 minutes.").arg(m_config.watchdog()));
// restore the button states
ui->autoReplyButton->setChecked(wasAuto);
- ui->activeButton->setChecked(wasActive);
ui->hbMacroButton->setChecked(wasHB);
ui->cqMacroButton->setChecked(wasCQ);
}
diff --git a/mainwindow.h b/mainwindow.h
index cbe3a76..f016dc4 100644
--- a/mainwindow.h
+++ b/mainwindow.h
@@ -151,7 +151,6 @@ public slots:
void restoreMessage();
void initializeDummyData();
bool ensureCallsignSet(bool alert=true);
- bool ensureSelcalCallsignSelected(bool alert=true);
bool ensureKeyNotStuck(QString const& text);
bool ensureNotIdle();
void createMessage(QString const& text);
@@ -174,9 +173,7 @@ private slots:
void on_tx6_editingFinished();
void on_menuControl_aboutToShow();
void on_actionEnable_Spotting_toggled(bool checked);
- void on_actionEnable_Active_toggled(bool checked);
void on_actionEnable_Auto_Reply_toggled(bool checked);
- void on_actionEnable_Selcall_toggled(bool checked);
void on_menuWindow_aboutToShow();
void on_actionShow_Fullscreen_triggered(bool checked);
void on_actionShow_Frequency_Clock_triggered(bool checked);
@@ -360,10 +357,8 @@ private slots:
void on_autoReplyButton_toggled(bool checked);
void on_monitorButton_toggled(bool checked);
void on_monitorTxButton_toggled(bool checked);
- void on_selcalButton_toggled(bool checked);
void on_tuneButton_toggled(bool checked);
void on_spotButton_toggled(bool checked);
- void on_activeButton_toggled(bool checked);
void on_actionMessage_averaging_triggered();
void on_actionFox_Log_triggered();
diff --git a/mainwindow.ui b/mainwindow.ui
index c647882..af036a3 100644
--- a/mainwindow.ui
+++ b/mainwindow.ui
@@ -476,7 +476,7 @@ QPushButton:checked {
QFrame::Plain
-
+
QLayout::SetMinimumSize
@@ -715,120 +715,39 @@ QPushButton:checked {
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::MinimumExpanding
+
+
+
+ 20
+ 10
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+ QSizePolicy::MinimumExpanding
+
+
+
+ 20
+ 10
+
+
+
+
-
-
-
- true
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 16777215
-
-
-
-
- 9
-
-
-
- <html><head/><body><p>Register your station as active or idle</p></body></html>
-
-
- QPushButton {
- background-color:lightgray;
- padding:0.25em 0.25em; font-weight:normal;
- border-style:solid;
- border-width:0px;
- border-radius:2px;
- }
-
-QPushButton:checked {
- background-color:#6699ff;
-}
-
-
- ACTIVE
-
-
- true
-
-
- false
-
-
-
- -
-
-
- true
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 16777215
- 16777215
-
-
-
-
- 9
-
-
-
- true
-
-
- <html><head/><body><p>Enable or disable selective calling (i.e., only directed messages to you will be displayed in the RX area)</p></body></html>
-
-
- QPushButton {
- background-color:lightgray;
- padding:0.25em 0.25em; font-weight:normal;
- border-style:solid;
- border-width:0px;
- border-radius:2px;
- }
-
-QPushButton:checked {
- background-color:#6699ff;
-}
-
-
- SELCALL
-
-
- true
-
-
- false
-
-
-
- -
true
@@ -883,7 +802,7 @@ QPushButton:checked {
- -
+
-
true
@@ -938,87 +857,55 @@ QPushButton:checked {
- -
-
-
- Qt::Vertical
-
-
- QSizePolicy::MinimumExpanding
-
-
-
- 20
- 10
-
-
-
-
- -
-
-
- Qt::Vertical
-
-
- QSizePolicy::MinimumExpanding
-
-
-
- 20
- 10
-
-
-
-
- -
-
-
- false
-
-
-
- 0
- 0
-
-
-
-
- 0
- 30
-
-
-
-
- 9
-
-
-
- false
-
-
- QPushButton {
- background-color:lightgray;
- padding:0.25em 0.25em; font-weight:normal;
- border-style:solid;
- border-width:0px;
- border-radius:2px;
- }
-
-QPushButton:checked {
- background-color:#6699ff;
-}
-
-
- TURBO
-
-
- true
-
-
-
+ -
+
+
+ false
+
+
+
+ 0
+ 0
+
+
+
+
+ 0
+ 30
+
+
+
+
+ 9
+
+
+
+ false
+
+
+ QPushButton {
+ background-color:lightgray;
+ padding:0.25em 0.25em; font-weight:normal;
+ border-style:solid;
+ border-width:0px;
+ border-radius:2px;
+}
+
+QPushButton:checked {
+background-color:#6699ff;
+}
+
+
+ TURBO
+
+
+ true
+
+
+
diff --git a/varicode.cpp b/varicode.cpp
index 944a7e1..5c16e91 100644
--- a/varicode.cpp
+++ b/varicode.cpp
@@ -71,11 +71,10 @@ QMap directed_cmds = {
{" TU", 9 }, // thank you
- {" ACTIVE", 10 }, // i am active
- {" IDLE", 11 }, // i am idle
-
{" HB", -1 }, // this is my heartbeat (unused except for faux processing of HBs as directed commands)
+ // {" ", 10 }, // unused
+ // {" ", 11 }, // unused
// {" ", 12 }, // unused
{" QUERY", 13 }, // can you transmit a ping to callsign?
@@ -103,7 +102,7 @@ QMap directed_cmds = {
{" ", 31 }, // send freetext
};
-QSet allowed_cmds = {-1, 0, 1, 2, 3, 4, 5, 6, /*7,*/ /*8,*/ 9, 10, 11, /*12,*/ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, /*24,*/ 25, 26, 27, 28, 29, 30, 31};
+QSet allowed_cmds = {-1, 0, 1, 2, 3, 4, 5, 6, /*7,*/ /*8,*/ 9, /*10,*/ /*11,*/ /*12,*/ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, /*24,*/ 25, 26, 27, 28, 29, 30, 31};
QSet buffered_cmds = {3, 5, /*6,*/ /*7,*/ 13, 14, 15};
@@ -117,7 +116,7 @@ QMap checksum_cmds = {
};
QString callsign_pattern = QString("(?[@]?[A-Z0-9/]+)");
-QString optional_cmd_pattern = QString("(?\\s?(?:AGN[?]|QSL[?]|HW CPY[?]|APRS[:]|SNR[?]|QTC[?]|QTH[?]|GRID[?]|STATUS[?]|HEARING[?]|(?:(?:QUERY|ACK|73|YES|NO|SNR|QSL|RR|SK|FB|QTH|QTC|GRID|ACTIVE|IDLE|TU)(?=[ ]|$))|[?*^&@$> ]))?");
+QString optional_cmd_pattern = QString("(?\\s?(?:AGN[?]|QSL[?]|HW CPY[?]|APRS[:]|SNR[?]|QTC[?]|QTH[?]|GRID[?]|STATUS[?]|HEARING[?]|(?:(?:QUERY|ACK|73|YES|NO|SNR|QSL|RR|SK|FB|QTH|QTC|GRID|TU)(?=[ ]|$))|[?*^&@$> ]))?");
QString optional_grid_pattern = QString("(?\\s?[A-R]{2}[0-9]{2})?");
QString optional_extended_grid_pattern = QString("^(?\\s?(?:[A-R]{2}[0-9]{2}(?:[A-X]{2}(?:[0-9]{2})?)*))?");
QString optional_num_pattern = QString("(?(?<=SNR|ACK)\\s?[-+]?(?:3[01]|[0-2]?[0-9]))?");
@@ -127,7 +126,7 @@ QRegularExpression directed_re("^" +
optional_cmd_pattern +
optional_num_pattern);
-QRegularExpression heartbeat_re(R"(^\s*(?CQCQCQ|CQ QRPP?|CQ DX|CQ TEST|CQ( CQ){0,2}|HB (ACTIVE|IDLE))(?:\s(?[A-R]{2}[0-9]{2}))?\b)");
+QRegularExpression heartbeat_re(R"(^\s*(?CQCQCQ|CQ QRPP?|CQ DX|CQ TEST|CQ( CQ){0,2}|HB)(?:\s(?[A-R]{2}[0-9]{2}))?\b)");
QRegularExpression compound_re("^\\s*[`]" +
callsign_pattern +
@@ -210,8 +209,8 @@ QMap cqs = {
};
QMap hbs = {
- { 0, "HB ACTIVE" },
- { 1, "HB IDLE" },
+ { 0, "HB" }, // HB ACTIVE
+ { 1, "HB" }, // HB IDLE
};
@@ -1146,8 +1145,7 @@ bool Varicode::isCompoundCallsign(const QString &callsign){
// CQCQCQ EM73
// CQ DX EM73
// CQ QRP EM73
-// HB ACTIVE EM73
-// HB IDLE EM73
+// HB EM73
QString Varicode::packHeartbeatMessage(QString const &text, const QString &callsign, int *n){
QString frame;