This commit is contained in:
Brian Moran 2024-08-14 20:26:51 -07:00
commit e26d2cb02c
6 changed files with 49 additions and 12 deletions

View File

@ -180,14 +180,15 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
else
do i=1,nfox
n=n30fox(i)
if(n30-n30fox(i).le.4) then
nage=min(99,mod(n30-n+288000,2880))
if(nage.le.4) then
j=j+1
c2fox(j)=c2fox(i)
g2fox(j)=g2fox(i)
nsnrfox(j)=nsnrfox(i)
nfreqfox(j)=nfreqfox(i)
n30fox(j)=n
nage=min(99,mod(n30-n+288000,2880))
! nage=min(99,mod(n30-n+288000,2880))
if(len(trim(g2fox(j))).eq.4) then
call azdist(mygrid,g2fox(j)//' ',0.d0,nAz,nEl,nDmiles, &
nDkm,nHotAz,nHotABetter)

View File

@ -1,6 +1,6 @@
module ft8_a7
parameter(MAXDEC=100)
parameter(MAXDEC=200)
! For the following three arrays
! First index i=decode number in this sequence
@ -43,7 +43,7 @@ subroutine ft8_a7_save(nutc,dt,f,msg)
! Add this decode to current table for this sequence
ndec(j,1)=ndec(j,1)+1 !Number of decodes in this sequence
i=ndec(j,1) !i is index of a new table entry
if(i.ge.MAXDEC-1) return !Prevent table overflow
if(i.gt.MAXDEC) return !Prevent table overflow (indexes start at 1)
dt0(i,j,1)=dt !Save dt in table
f0(i,j,1)=f !Save f in table

View File

@ -44,7 +44,7 @@ contains
class(ft8_decoder), intent(inout) :: this
procedure(ft8_decode_callback) :: callback
parameter (MAXCAND=600,MAX_EARLY=100)
parameter (MAXCAND=600,MAX_EARLY=200)
real*8 tsec,tseq
real sbase(NH1)
real candidate(3,MAXCAND)
@ -58,9 +58,9 @@ contains
integer*2 iwave(15*12000)
integer apsym2(58),aph10(10)
character datetime*13,msg37*37
character*37 allmessages(200)
character*37 allmessages(MAX_EARLY)
character*12 ctime
integer allsnrs(200)
integer allsnrs(MAX_EARLY)
integer itone(NN)
integer itone_save(NN,MAX_EARLY)
real f1_save(MAX_EARLY)
@ -215,6 +215,9 @@ contains
if(msg37.eq.allmessages(id)) ldupe=.true.
enddo
if(.not.ldupe) then
if(ndecodes.ge.MAX_EARLY) then
cycle
endif
ndecodes=ndecodes+1
allmessages(ndecodes)=msg37
allsnrs(ndecodes)=nsnr

View File

@ -561,8 +561,8 @@ void DisplayText::displayHoundToBeCalled(QString t, bool bAtTop, QColor bg, QCol
}
void DisplayText::setHighlightedHoundText(QString t) {
QColor bg;
QColor fg;
QColor bg=QColor{255,255,255};
QColor fg=QColor{0,0,0};
highlight_types types{Highlight::Call};
set_colours(m_config, &bg, &fg, types);
// t is multiple lines of text, each line is a hound calling

View File

@ -4519,6 +4519,7 @@ void MainWindow::readFromStdout() //readFromStdout
m_nFoxFreq=decodedtext.string().mid(16,4).toInt();
hound_reply ();
} else {
if (SpecOp::HOUND==m_specOp && (text.mid(4,2).contains("15") or text.mid(4,2).contains("45"))) return; // ignore stations calling in the wrong time slot
if (text.contains(" " + m_config.my_callsign() + " " + m_hisCall) && !text.contains("73 ")) processMessage(decodedtext0); // needed for MSHV multistream messages
}
}
@ -5033,7 +5034,10 @@ void MainWindow::guiUpdate()
foxcom_.bSendMsg=ui->cbSendMsg->isChecked();
memcpy(foxcom_.textMsg, m_freeTextMsg.leftJustified(26,' ').toLatin1(),26);
foxgen_(&bSuperFox, fname.constData(), (FCL)fname.size());
if(bSuperFox) sfox_tx();
if(bSuperFox) {
writeFoxTxMsgs();
sfox_tx();
}
}
}
}
@ -5331,6 +5335,14 @@ void MainWindow::guiUpdate()
// n64=n64/30;
// n64=n64*30;
// qDebug() << "bb" << m_config.FoxKey() << nsec%60 << dec_data.params.nutc << n64 << n64%60;
// prevent tuning on top of a SuperFox message
if (SpecOp::HOUND==m_specOp && m_config.superFox() && m_tune) {
QDateTime now = QDateTime::currentDateTimeUtc();
int s = now.time().toString("ss").toInt();
if ((s >= 0 && s < 15) || (s >= 30 && s < 45)) ui->tuneButton->click ();
}
if(m_mode=="FST4") chk_FST4_freq_range();
m_currentBand=m_config.bands()->find(m_freqNominal);
if( SpecOp::HOUND == m_specOp ) {
@ -10642,7 +10654,10 @@ Transmit:
::memcpy(foxcom_.textMsg, m_freeTextMsg0.leftJustified(26,' ').toLatin1(),26);
auto fname {QDir::toNativeSeparators(m_config.writeable_data_dir().absoluteFilePath("sfox_1.dat")).toLocal8Bit()};
foxgen_(&bSuperFox, fname.constData(), (FCL)fname.size());
if(bSuperFox) sfox_tx();
if(bSuperFox) {
writeFoxTxMsgs();
sfox_tx();
}
m_tFoxTxSinceCQ++;
for(QString hc: m_foxQSO.keys()) { //Check for strikeout or timeout
@ -10775,7 +10790,24 @@ void MainWindow::foxGenWaveform(int i,QString fm)
writeFoxQSO(t + fm.trimmed());
}
void MainWindow::writeFoxQSO(QString const& msg)
void MainWindow::writeFoxTxMsgs() {
// references extern struct foxcom_
QString t;
for (int i = 0; i < 5; i++) {
t = QString::fromLatin1(foxcom_.cmsg[i]).left(40);
if (t.length() > 0) {
write_all("Tx", t);
}
}
t = QString::fromLatin1(foxcom_.textMsg).left(38);
if (foxcom_.bSendMsg) {
write_all("Tx", "-Free Text- "+t);
}
if (foxcom_.bMoreCQs) {
write_all("Tx", "-MoreCQs- ");
}
}
void MainWindow::writeFoxQSO(QString const& msg)
{
QString t;
t = t.asprintf("%3d%3d%3d",m_houndQueue.count(),m_foxQSOinProgress.count(),m_foxQSO.count());

View File

@ -894,6 +894,7 @@ private:
void refreshPileupList();
QString userAgent();
void handleVerifyMsg(int status, QDateTime ts, QString callsign, QString code, QString const &response);
void writeFoxTxMsgs();
};
extern int killbyname(const char* progName);