WIP toward sending decodes from Q65W to WSJT-X through shared memory.

This commit is contained in:
Joe Taylor 2022-12-14 11:51:01 -05:00
parent 439f17c123
commit a60edeb607
6 changed files with 26 additions and 47 deletions

View File

@ -33,9 +33,9 @@ set (libq65_FSRCS
f77_wisdom.f
)
set (libq65_CXXSRCS
ipcomm.cpp
)
#set (libq65_CXXSRCS
# ipcomm.cpp
# )
set (libq65_C_and_CXXSRCS
${libq65_CSRCS}

View File

@ -1,34 +0,0 @@
#include <QDebug>
#include <qsharedmemory.h>
#include <QSystemSemaphore>
QSharedMemory mem_m65("mem_m65");
QSystemSemaphore sem_m65("sem_m65", 1, QSystemSemaphore::Open);
extern "C" {
bool attach_m65_();
bool create_m65_(int nsize);
bool detach_m65_();
bool lock_m65_();
bool unlock_m65_();
char* address_m65_();
int size_m65_();
bool acquire_m65_();
bool release_m65_();
extern struct {
char c[10];
} m65com_;
}
bool attach_m65_() {return mem_m65.attach();}
bool create_m65_(int nsize) {return mem_m65.create(nsize);}
bool detach_m65_() {return mem_m65.detach();}
bool lock_m65_() {return mem_m65.lock();}
bool unlock_m65_() {return mem_m65.unlock();}
char* address_m65_() {return (char*)mem_m65.constData();}
int size_m65_() {return (int)mem_m65.size();}
bool acquire_m65_() {return sem_m65.acquire();}
bool release_m65_() {return sem_m65.release();}

View File

@ -24,8 +24,6 @@ subroutine q65c(itimer)
mcall3,nkeep,ntol,nxant,nrxlog,nfsample,nxpol,nmode, &
ndop00,nsave,max_drift,nhsym,mycall,mygrid,hiscall,hisgrid, &
datetime,junk1,junk2
!### REMEMBER that /npar/ is not updated until nparams=nparams0 is executed. ###
equivalence (nparams,fcenter)
data first/.true./
save first
@ -38,10 +36,6 @@ subroutine q65c(itimer)
endif
datetime(18:20)=':00'
! if(first) call timer('q65w ',0)
! first=.false.
npatience=1
call timer('decode0 ',0)
call decode0(dd,ss,savg)

View File

@ -957,6 +957,13 @@ void MainWindow::guiUpdate()
ui->decodedTextBrowser->append(t.trimmed());
m_fetched++;
}
mem_q65w.lock();
// char *from = (char*) decodes_.ndecodes;
// char *from = (char*) &decodes_;
memcpy((char*)ipc_wsjtx, &decodes_, sizeof(decodes_));
mem_q65w.unlock();
}
if(nsec != m_sec0) { //Once per second

View File

@ -191,7 +191,6 @@ int volatile itone[MAX_NUM_SYMBOLS]; //Audio tones for all Tx symbols
int volatile itone0[MAX_NUM_SYMBOLS]; //Dummy array, data not actually used
int volatile icw[NUM_CW_SYMBOLS]; //Dits for CW ID
dec_data_t dec_data; // for sharing with Fortran
int outBufSize;
int rc;
qint32 g_iptt {0};
@ -213,6 +212,11 @@ bool no_a7_decodes = false;
bool keep_frequency = false;
QSharedMemory mem_q65w("mem_q65w"); //Memory segment to be shared (optionally) with Q65W
struct {
int ndecodes;
int ncand;
char result[50][60];
} q65wcom;
int* ipc_q65w;
namespace
@ -3404,6 +3408,7 @@ void MainWindow::decode() //decode()
narg[13]=-1;
narg[14]=m_config.aggressive();
memcpy(d2b,dec_data.d2,2*360000);
m_fetched=0;
watcher3.setFuture (QtConcurrent::run (std::bind (fast_decode_, &d2b[0],
&narg[0],&m_TRperiod, &m_msg[0][0], dec_data.params.mycall,
dec_data.params.hiscall, (FCL)8000, (FCL)12, (FCL)12)));
@ -4806,12 +4811,18 @@ void MainWindow::guiUpdate()
//Once per second (onesec)
if(nsec != m_sec0) {
// mem_q65w.lock();
// ipc_q65w[0]=nsec;
// qDebug() << "AAA" << nsec << ipc_q65w[0] << ipc_q65w[1];
// mem_q65w.unlock();
if(m_mode=="Q65") {
mem_q65w.lock();
memcpy(&q65wcom, (char*)ipc_q65w, sizeof(q65wcom));
qDebug() << "AAA" << nsec << q65wcom.ndecodes << q65wcom.ncand << m_fetched;
QString t0=QString::fromLatin1(q65wcom.result[0]);
QString t1=QString::fromLatin1(q65wcom.result[1]);
qDebug() << "BBB" << t0 << "\n" << t1;
mem_q65w.unlock();
QFileInfo fi(m_appDir+"/q65w_decodes.txt");
QDateTime fileTime=fi.lastModified();
QDateTime now = QDateTime::currentDateTimeUtc ();

View File

@ -509,6 +509,7 @@ private:
qint32 m_score=0;
qint32 m_fDop=0;
qint32 m_echoSec0=0;
qint32 m_fetched=0;
bool m_btxok; //True if OK to transmit
bool m_diskData;