From 29360db01a7c7acb1555b4a6ec6c2c71731522b2 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Thu, 26 Jan 2023 10:55:10 -0500 Subject: [PATCH] Clean up the IPC between WSJT-X and QMAP. Fix the "QSOs:" listing in ActiveStations window. --- qmap/commons.h | 12 ++++++------ qmap/mainwindow.cpp | 10 +++------- widgets/activeStations.cpp | 1 + widgets/mainwindow.cpp | 32 +++++++++++++++++++------------- 4 files changed, 29 insertions(+), 26 deletions(-) diff --git a/qmap/commons.h b/qmap/commons.h index 26cc2d7ca..511ab7ae8 100644 --- a/qmap/commons.h +++ b/qmap/commons.h @@ -84,12 +84,12 @@ extern struct { //This is "common/datcom/..." in Fortran } datcom2_; extern struct { - int ndecodes; - int ncand; - int nQDecoderDone; - int nWDecoderBusy; - int nWTransmitting; - char result[50][60]; + int ndecodes; //These are flags for inter-process communication + int ncand; //between QMAP and WSJT-X + int nQDecoderDone; //1 for real-time decodes, 2 for data from disk + int nWDecoderBusy; //Set to 1 when WSJT-X decoder is busy + int nWTransmitting; //Set to 1 when WSJT-X is transmitting + char result[50][60]; //Staging area for QMAP decodes } decodes_; } diff --git a/qmap/mainwindow.cpp b/qmap/mainwindow.cpp index 53f2f12b6..1b6e8c135 100644 --- a/qmap/mainwindow.cpp +++ b/qmap/mainwindow.cpp @@ -408,8 +408,6 @@ void MainWindow::dataSink(int k) datcom_.nhsym=ihsym; QDateTime t = QDateTime::currentDateTimeUtc(); m_dateTime=t.toString("yymmdd_hhmm"); -// qDebug() << "aa" << "Decoder called" << ihsym << ipc_wsjtx[0] << ipc_wsjtx[1] -// << ipc_wsjtx[2] << ipc_wsjtx[3] << ipc_wsjtx[4] ; decode(); //Start the decoder if(m_saveAll and !m_diskData and m_nTransmitted<10) { QString fname=m_saveDir + "/" + t.date().toString("yyMMdd") + "_" + @@ -701,7 +699,6 @@ void MainWindow::on_actionDecode_remaining_files_in_directory_triggered() void MainWindow::diskDat() //diskDat() { -// qDebug() << "aa1" << datcom_.fcenter; double hsym; //These may be redundant?? m_diskData=true; @@ -727,10 +724,11 @@ void MainWindow::decoderFinished() //diskWriteFinished decodes_.nQDecoderDone=1; if(m_diskData) decodes_.nQDecoderDone=2; mem_qmap.lock(); - memcpy((char*)ipc_wsjtx, &decodes_, sizeof(decodes_)); + decodes_.nWDecoderBusy=ipc_wsjtx[3]; //Prevent overwriting values + decodes_.nWTransmitting=ipc_wsjtx[4]; //written here by WSJT-X + memcpy((char*)ipc_wsjtx, &decodes_, sizeof(decodes_)); //Send decodes and flags to WSJT-X mem_qmap.unlock(); QString t1; -// t1=t1.asprintf(" %3d/%d ",decodes_.ndecodes,decodes_.ncand); t1=t1.asprintf(" %d ",decodes_.ndecodes); lab4->setText(t1); QDateTime now=QDateTime::currentDateTimeUtc(); @@ -788,7 +786,6 @@ void MainWindow::freezeDecode(int n) //freezeDecode() datcom_.ntol=m_tol; } m_nDoubleClicked++; -// qDebug() << "aa" << m_nDoubleClicked << m_decoderBusy << m_nTransmitted << n; if(!m_decoderBusy) { datcom_.nagain=1; datcom_.newdat=0; @@ -845,7 +842,6 @@ void MainWindow::decode() //decode() datcom_.nfa=nfa; datcom_.nfb=nfb; -// qDebug() << "bbb" << datcom_.fcenter << datcom_.nfa << datcom_.nfb << datcom_.fselected; datcom_.nfcal=m_fCal; datcom_.nfshift=nfshift; datcom_.mcall3=0; diff --git a/widgets/activeStations.cpp b/widgets/activeStations.cpp index 04e79f477..afaccc3ed 100644 --- a/widgets/activeStations.cpp +++ b/widgets/activeStations.cpp @@ -131,6 +131,7 @@ void ActiveStations::setRate(int n) void ActiveStations::setScore(int n) { + qDebug() << "FF" << n; ui->score->setText(QLocale(QLocale::English).toString(n)); } diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp index 57be809c9..6e4c84597 100644 --- a/widgets/mainwindow.cpp +++ b/widgets/mainwindow.cpp @@ -903,7 +903,10 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple, ui->lh_decodes_headings_label->setText(t); ui->rh_decodes_headings_label->setText(t); readSettings(); //Restore user's setup parameters - if(m_mode=="Q65") read_log(); + if(m_mode=="Q65") { + m_score=0; + read_log(); + } m_audioThread.start (m_audioThreadPriority); #ifdef WIN32 @@ -2940,6 +2943,7 @@ void MainWindow::on_actionActiveStations_triggered() connect(m_ActiveStationsWidget.data(), SIGNAL(callSandP(int)),this,SLOT(callSandP2(int))); connect(m_ActiveStationsWidget.data(), SIGNAL(activeStationsDisplay()),this,SLOT(ARRL_Digi_Display())); m_ActiveStationsWidget->setScore(m_score); + if(m_mode=="Q65") m_ActiveStationsWidget->setRate(m_score); } void MainWindow::on_actionOpen_triggered() //Open File @@ -3554,7 +3558,6 @@ void MainWindow::read_log() { static QFile f {QDir {QStandardPaths::writableLocation (QStandardPaths::DataLocation)}.absoluteFilePath ("wsjtx.log")}; f.open(QIODevice::ReadOnly); - m_score=0; if(f.isOpen()) { QTextStream in(&f); QString line,callsign; @@ -3566,10 +3569,13 @@ void MainWindow::read_log() if(n>0) callsign=callsign.left(n); m_EMEworked[callsign]=true; m_score++; - qDebug() << "aa" << m_score << callsign; } f.close(); } + if(m_ActiveStationsWidget!=NULL) { + m_ActiveStationsWidget->setScore(m_score); + if(m_mode=="Q65") m_ActiveStationsWidget->setRate(m_score); + } } void MainWindow::ARRL_Digi_Update(DecodedText dt) @@ -4859,7 +4865,7 @@ void MainWindow::guiUpdate() n=0; if(m_transmitting) n=1; ipc_qmap[4]=n; - if(ipc_qmap[0] > m_fetched) { //ndecodes + if(ipc_qmap[0] > 0) { //ndecodes memcpy(&qmapcom, (char*)ipc_qmap, sizeof(qmapcom)); //Fetch the new decode(s) readWidebandDecodes(); } @@ -4868,8 +4874,8 @@ void MainWindow::guiUpdate() //Once per second (onesec) if(nsec != m_sec0) { - qDebug() << "AAA" << nsec << ipc_qmap[0] << ipc_qmap[1] << ipc_qmap[2] - << ipc_qmap[3] << ipc_qmap[4] << m_fetched; +// qDebug() << "AAA" << nsec%60 << ipc_qmap[0] << ipc_qmap[1] << ipc_qmap[2] +// << ipc_qmap[3] << ipc_qmap[4] << m_fetched; if(m_mode=="FST4") chk_FST4_freq_range(); m_currentBand=m_config.bands()->find(m_freqNominal); @@ -6562,7 +6568,7 @@ void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call, if(m_mode=="Q65") { m_score++; m_EMEworked[call]=true; - qDebug() << "bb" << m_score << call; + m_ActiveStationsWidget->setRate(m_score); } else { QString band=m_config.bands()->find(dial_freq); activeWorked(call,band); @@ -6573,8 +6579,8 @@ void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call, al.band=band; al.points=points; m_arrl_log.append(al); + updateRate(); } - updateRate(); } m_xSent.clear (); @@ -7535,7 +7541,10 @@ void MainWindow::on_reset_cabrillo_log_action_triggered () m_activeCall.clear(); //Erase the QMap of active calls m_EMECall.clear(); //ditto for EME calls m_score=0; - if (m_ActiveStationsWidget) m_ActiveStationsWidget->setScore(0); + if (m_ActiveStationsWidget) { + m_ActiveStationsWidget->setScore(0); + if(m_mode=="Q65") m_ActiveStationsWidget->setRate(0); + } } } @@ -9260,7 +9269,6 @@ void MainWindow::write_transmit_entry (QString const& file_name) void MainWindow::readWidebandDecodes() { - qDebug() << "dd" << m_fetched << qmapcom.ndecodes; if(m_ActiveStationsWidget==NULL) return; int nhr=0; @@ -9321,8 +9329,6 @@ void MainWindow::readWidebandDecodes() if(age<=maxAge) { dxcall=(i.key()+" ").left(8); dxgrid4=(i->grid4+"... ").left(4); -// if(i->worked) { - qDebug() << "cc" << dxcall.trimmed(); if(m_EMEworked[dxcall.trimmed()]) { t1=t1.asprintf("%7.3f %5.1f %+03d %8s %4s %3d %3d\n",i->frx,i->fsked,snr,dxcall.toLatin1().constData(), dxgrid4.toLatin1().constData(),odd,age); @@ -9355,7 +9361,7 @@ void MainWindow::readWidebandDecodes() m_ActiveStationsWidget->displayRecentStations(m_mode,t); m_ActiveStationsWidget->setClickOK(true); } - if(ipc_qmap[2]==1) { + if(ipc_qmap[2]!=0) { m_fetched=0; ipc_qmap[0]=0; ipc_qmap[2]=0;