Updated callsign handling

Reducing compound callsigns to their basecall for most commands except CQ and DE (beacon)
This commit is contained in:
Jordan Sherer 2018-07-23 11:45:41 -04:00
parent f47224979e
commit 857e19ed94
2 changed files with 50 additions and 65 deletions

View File

@ -3209,7 +3209,7 @@ void MainWindow::readFromStdout() //readFromStdout
d.snr = decodedtext.snr(); d.snr = decodedtext.snr();
d.freq = decodedtext.frequencyOffset(); d.freq = decodedtext.frequencyOffset();
d.utcTimestamp = QDateTime::currentDateTimeUtc(); d.utcTimestamp = QDateTime::currentDateTimeUtc();
m_callActivity[cqCall] = d; m_callActivity[Radio::base_callsign(cqCall)] = d; // original call is stored in CallDetail.
} }
@ -3245,7 +3245,7 @@ void MainWindow::readFromStdout() //readFromStdout
d.snr = decodedtext.snr(); d.snr = decodedtext.snr();
d.freq = decodedtext.frequencyOffset(); d.freq = decodedtext.frequencyOffset();
d.utcTimestamp = QDateTime::currentDateTimeUtc(); d.utcTimestamp = QDateTime::currentDateTimeUtc();
m_callActivity[de_callsign] = d; m_callActivity[Radio::base_callsign(de_callsign)] = d;
} }
} }
} }
@ -3272,7 +3272,7 @@ void MainWindow::readFromStdout() //readFromStdout
cd.snr = decodedtext.snr(); cd.snr = decodedtext.snr();
cd.freq = decodedtext.frequencyOffset(); cd.freq = decodedtext.frequencyOffset();
cd.utcTimestamp = d.utcTimestamp; cd.utcTimestamp = d.utcTimestamp;
m_callActivity[cd.call] = cd; m_callActivity[Radio::base_callsign(cd.call)] = cd;
int nsec=QDateTime::currentMSecsSinceEpoch()/1000-m_secBandChanged; int nsec=QDateTime::currentMSecsSinceEpoch()/1000-m_secBandChanged;
bool okToPost=(nsec>(4*m_TRperiod)/5); bool okToPost=(nsec>(4*m_TRperiod)/5);
@ -5287,6 +5287,7 @@ void MainWindow::clearActivity(){
m_rxCommandQueue.clear(); m_rxCommandQueue.clear();
clearTableWidget(ui->tableWidgetCalls); clearTableWidget(ui->tableWidgetCalls);
// this is now duplicated in three places :( // this is now duplicated in three places :(
ui->tableWidgetCalls->insertRow(ui->tableWidgetCalls->rowCount()); ui->tableWidgetCalls->insertRow(ui->tableWidgetCalls->rowCount());
ui->tableWidgetCalls->setItem(ui->tableWidgetCalls->rowCount() - 1, 0, new QTableWidgetItem("ALLCALL")); ui->tableWidgetCalls->setItem(ui->tableWidgetCalls->rowCount() - 1, 0, new QTableWidgetItem("ALLCALL"));
@ -5483,7 +5484,8 @@ QPair<QStringList, QStringList> MainWindow::buildFT8MessageFrames(QString const&
QStringList frames; QStringList frames;
QStringList lines; QStringList lines;
QString mycall = m_config.my_callsign(); QString mycall = Radio::base_callsign(m_config.my_callsign());
foreach(QString line, text.split(QRegExp("[\\r\\n]"), QString::SkipEmptyParts)){ foreach(QString line, text.split(QRegExp("[\\r\\n]"), QString::SkipEmptyParts)){
#if 0 #if 0
@ -5731,16 +5733,17 @@ void MainWindow::scheduleBeacon(bool first){
timestamp = timestamp.addSecs(15); timestamp = timestamp.addSecs(15);
} }
setBeaconTimer(timestamp); setBaconTimer(timestamp);
} }
void MainWindow::setBeaconTimer(QDateTime timestamp){ void MainWindow::setBaconTimer(QDateTime timestamp){
// set the next beacon timestamp and timer // set the next beacon timestamp and timer
beaconTimer.stop(); beaconTimer.stop();
m_nextBeacon = timestamp; m_nextBeacon = timestamp;
beaconTimer.start(QDateTime::currentDateTimeUtc().msecsTo(m_nextBeacon) - 2*1000); beaconTimer.start(QDateTime::currentDateTimeUtc().msecsTo(m_nextBeacon) - 2*1000);
} }
// prepareBeacon
void MainWindow::prepareBacon(){ void MainWindow::prepareBacon(){
if(!ui->beaconButton->isChecked()){ if(!ui->beaconButton->isChecked()){
return; return;
@ -5773,8 +5776,14 @@ void MainWindow::prepareBacon(){
QStringList lines; QStringList lines;
lines.append(QString("DE %1 %2").arg(m_config.my_callsign()).arg(m_config.my_grid().mid(0, 4))); QString call = m_config.my_callsign();
lines.append(QString("DE %1 %2").arg(m_config.my_callsign()).arg(m_config.my_grid().mid(0, 4))); QString grid = m_config.my_grid().left(4);
if(call != Radio::base_callsign(call)){
grid = "";
}
lines.append(QString("DE %1 %2").arg(call).arg(grid));
lines.append(QString("DE %1 %2").arg(call).arg(grid));
#if 0 #if 0
if(!m_callActivity.isEmpty()){ if(!m_callActivity.isEmpty()){
@ -6884,7 +6893,13 @@ void MainWindow::on_clearAction_triggered(QObject * sender){
} }
void MainWindow::on_cqMacroButton_clicked(){ void MainWindow::on_cqMacroButton_clicked(){
QString text = QString("CQ %1 %2").arg(m_config.my_callsign()).arg(m_config.my_grid().left(4)); QString call = m_config.my_callsign();
QString grid = m_config.my_grid().left(4);
if(call != Radio::base_callsign(call)){
grid = "";
}
QString text = QString("CQ %1 %2").arg(call).arg(grid);
addMessageText(text); addMessageText(text);
} }
@ -6897,21 +6912,11 @@ void MainWindow::on_qtcMacroButton_clicked(){
} }
void MainWindow::on_replyMacroButton_clicked(){ void MainWindow::on_replyMacroButton_clicked(){
auto items = ui->tableWidgetCalls->selectedItems(); QString selectedCall = callsignSelected();
if(!items.isEmpty()){ if(selectedCall.isEmpty()){
QString selectedCall = items.first()->text();
addMessageText(selectedCall);
return; return;
} }
addMessageText(selectedCall);
int offset = currentFreq();
if(m_bandActivity.contains(offset)){
auto activity = m_bandActivity[offset].last();
if(!activity.firstCall.isEmpty()){
addMessageText(activity.firstCall);
return;
}
}
} }
void MainWindow::on_qthMacroButton_clicked(){ void MainWindow::on_qthMacroButton_clicked(){
@ -6926,15 +6931,17 @@ void MainWindow::on_qthMacroButton_clicked(){
} }
void MainWindow::on_snrMacroButton_clicked(){ void MainWindow::on_snrMacroButton_clicked(){
auto items = ui->tableWidgetCalls->selectedItems(); QString selectedCall = callsignSelected();
if(!items.isEmpty()){ if(selectedCall.isEmpty()){
QString selectedCall = items.first()->text(); return;
if(m_callActivity.contains(selectedCall)){
int snr = m_callActivity[selectedCall].snr;
addMessageText(QString("%1 SNR %2").arg(selectedCall).arg(Varicode::formatSNR(snr)));
return;
}
} }
if(!m_callActivity.contains(selectedCall)){
return;
}
auto d = m_callActivity[selectedCall];
addMessageText(QString("%1 SNR %2").arg(selectedCall).arg(Varicode::formatSNR(d.snr)));
} }
void MainWindow::buildQueryMenu(QMenu * menu){ void MainWindow::buildQueryMenu(QMenu * menu){
@ -7138,14 +7145,13 @@ void MainWindow::on_tableWidgetRXAll_selectionChanged(const QItemSelection &sele
void MainWindow::on_tableWidgetCalls_cellClicked(int row, int col){ void MainWindow::on_tableWidgetCalls_cellClicked(int row, int col){
auto item = ui->tableWidgetCalls->item(row, 0); auto item = ui->tableWidgetCalls->item(row, 0);
auto call = item->text(); auto call = Radio::base_callsign(item->text());
if(!m_callActivity.contains(call)){ if(!m_callActivity.contains(call)){
return; return;
} }
int offset = m_callActivity[call].freq; auto d = m_callActivity[call];
setFreqForRestore(d.freq, true);
setFreq4(offset, offset);
ui->tableWidgetRXAll->selectionModel()->select( ui->tableWidgetRXAll->selectionModel()->select(
ui->tableWidgetRXAll->selectionModel()->selection(), ui->tableWidgetRXAll->selectionModel()->selection(),
@ -7156,27 +7162,12 @@ void MainWindow::on_tableWidgetCalls_cellDoubleClicked(int row, int col){
on_tableWidgetCalls_cellClicked(row, col); on_tableWidgetCalls_cellClicked(row, col);
auto item = ui->tableWidgetCalls->item(row, 0); auto item = ui->tableWidgetCalls->item(row, 0);
auto call = item->text(); auto call = Radio::base_callsign(item->text());
addMessageText(call); addMessageText(call);
} }
void MainWindow::on_tableWidgetCalls_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected){ void MainWindow::on_tableWidgetCalls_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected){
on_tableWidgetRXAll_selectionChanged(selected, deselected); on_tableWidgetRXAll_selectionChanged(selected, deselected);
/*
if(selected.isEmpty()){
return;
}
QString selectedCall = ui->tableWidgetCalls->selectedItems().first()->text();
int offset = m_callActivity[selectedCall].freq;
QList<QTableWidgetItem*> items = ui->tableWidgetRXAll->findItems(QString("%1").arg(offset), Qt::MatchExactly);
if(items.isEmpty()){
return;
}
ui->tableWidgetRXAll->setItemSelected(items.first(), true);
*/
} }
void MainWindow::on_freeTextMsg_currentTextChanged (QString const& text) void MainWindow::on_freeTextMsg_currentTextChanged (QString const& text)
@ -8101,7 +8092,7 @@ void MainWindow::updateButtonDisplay(){
QString MainWindow::callsignSelected(){ QString MainWindow::callsignSelected(){
if(!ui->tableWidgetCalls->selectedItems().isEmpty()){ if(!ui->tableWidgetCalls->selectedItems().isEmpty()){
auto selectedCalls = ui->tableWidgetCalls->selectedItems(); auto selectedCalls = ui->tableWidgetCalls->selectedItems();
return selectedCalls.first()->text(); return Radio::base_callsign(selectedCalls.first()->text());
} }
if(!ui->tableWidgetRXAll->selectedItems().isEmpty()){ if(!ui->tableWidgetRXAll->selectedItems().isEmpty()){
@ -8109,7 +8100,8 @@ QString MainWindow::callsignSelected(){
auto selectedItems = ui->tableWidgetRXAll->selectedItems(); auto selectedItems = ui->tableWidgetRXAll->selectedItems();
selectedOffset = selectedItems.first()->text().toInt(); selectedOffset = selectedItems.first()->text().toInt();
foreach(auto call, m_callActivity.keys()){ foreach(auto call, m_callActivity.keys()){
if(m_callActivity[call].freq == selectedOffset){ auto d = m_callActivity[call];
if(d.freq == selectedOffset){
return call; return call;
} }
} }
@ -8133,7 +8125,7 @@ bool MainWindow::isDirectedOffset(int offset){
} }
bool MainWindow::isMyCallIncluded(const QString &text){ bool MainWindow::isMyCallIncluded(const QString &text){
QString myCall = m_config.my_callsign(); QString myCall = Radio::base_callsign(m_config.my_callsign());
if(myCall.isEmpty()){ if(myCall.isEmpty()){
return false; return false;
@ -8159,11 +8151,8 @@ void MainWindow::displayActivity(bool force){
selectedOffset = selectedItems.first()->text().toInt(); selectedOffset = selectedItems.first()->text().toInt();
} }
QString selectedCall; // Selected callsign
auto selectedCalls = ui->tableWidgetCalls->selectedItems(); QString selectedCall = callsignSelected();
if(!selectedCalls.isEmpty()){
selectedCall = selectedCalls.first()->text();
}
// Band Activity // Band Activity
auto now = QDateTime::currentDateTimeUtc(); auto now = QDateTime::currentDateTimeUtc();
@ -8293,7 +8282,7 @@ void MainWindow::displayActivity(bool force){
} }
ui->tableWidgetCalls->insertRow(ui->tableWidgetCalls->rowCount()); ui->tableWidgetCalls->insertRow(ui->tableWidgetCalls->rowCount());
ui->tableWidgetCalls->setItem(ui->tableWidgetCalls->rowCount() - 1, 0, new QTableWidgetItem(call)); ui->tableWidgetCalls->setItem(ui->tableWidgetCalls->rowCount() - 1, 0, new QTableWidgetItem(d.call));
ui->tableWidgetCalls->setItem(ui->tableWidgetCalls->rowCount() - 1, 1, new QTableWidgetItem(QString("(%1)").arg(since(d.utcTimestamp)))); ui->tableWidgetCalls->setItem(ui->tableWidgetCalls->rowCount() - 1, 1, new QTableWidgetItem(QString("(%1)").arg(since(d.utcTimestamp))));
ui->tableWidgetCalls->setItem(ui->tableWidgetCalls->rowCount() - 1, 2, new QTableWidgetItem(QString("%1").arg(Varicode::formatSNR(d.snr)))); ui->tableWidgetCalls->setItem(ui->tableWidgetCalls->rowCount() - 1, 2, new QTableWidgetItem(QString("%1").arg(Varicode::formatSNR(d.snr))));
ui->tableWidgetCalls->setItem(ui->tableWidgetCalls->rowCount() - 1, 3, new QTableWidgetItem(QString("%1").arg(d.grid))); ui->tableWidgetCalls->setItem(ui->tableWidgetCalls->rowCount() - 1, 3, new QTableWidgetItem(QString("%1").arg(d.grid)));
@ -8357,7 +8346,7 @@ void MainWindow::displayActivity(bool force){
} }
// we're only processing allcall and our callsign at this point // we're only processing allcall and our callsign at this point
if(!isAllCall && d.to != m_config.my_callsign().trimmed()){ if(!isAllCall && d.to != m_config.my_callsign().trimmed() && d.to != Radio::base_callsign(m_config.my_callsign()).trimmed()){
continue; continue;
} }
@ -8371,8 +8360,6 @@ void MainWindow::displayActivity(bool force){
// SNR // SNR
if(d.cmd == "?"){ if(d.cmd == "?"){
// standard FT8 reply
// reply = QString("%1 %2 %3").arg(d.from).arg(m_config.my_callsign()).arg(d.snr);
reply = QString("%1 SNR %2").arg(d.from).arg(Varicode::formatSNR(d.snr)); reply = QString("%1 SNR %2").arg(d.from).arg(Varicode::formatSNR(d.snr));
} }
// QTH // QTH
@ -8383,8 +8370,6 @@ void MainWindow::displayActivity(bool force){
if(grid.isEmpty()){ if(grid.isEmpty()){
continue; continue;
} }
// standard FT8 reply
// reply = QString("%1 %2 %3").arg(d.from).arg(m_config.my_callsign()).arg(grid);
qth = grid; qth = grid;
} }

View File

@ -261,7 +261,7 @@ private slots:
bool isFreqOffsetFree(int f, int bw); bool isFreqOffsetFree(int f, int bw);
int findFreeFreqOffset(int fmin, int fmax, int bw); int findFreeFreqOffset(int fmin, int fmax, int bw);
void scheduleBeacon(bool first=false); void scheduleBeacon(bool first=false);
void setBeaconTimer(QDateTime timestamp); void setBaconTimer(QDateTime timestamp);
void prepareBacon(); void prepareBacon();
QString calculateDistance(QString const& grid); QString calculateDistance(QString const& grid);
void on_rptSpinBox_valueChanged(int n); void on_rptSpinBox_valueChanged(int n);