diff --git a/commons.h b/commons.h index e02fa9251..7c202d26e 100644 --- a/commons.h +++ b/commons.h @@ -83,6 +83,7 @@ extern struct { extern struct { float wave[606720]; int nslots; + int nfreq; int i3bit[5]; char cmsg[5][40]; char mycall[12]; diff --git a/lib/ft8/foxfilt.f90 b/lib/ft8/foxfilt.f90 index ab97034e8..d97923a8f 100644 --- a/lib/ft8/foxfilt.f90 +++ b/lib/ft8/foxfilt.f90 @@ -1,4 +1,4 @@ -subroutine foxfilt(nslots,width,wave) +subroutine foxfilt(nslots,nfreq,width,wave) parameter (NN=79,ND=58,KK=87,NSPS=4*1920) parameter (NWAVE=NN*NSPS,NFFT=614400,NH=NFFT/2) @@ -11,8 +11,8 @@ subroutine foxfilt(nslots,width,wave) x(NWAVE+1:)=0. call four2a(x,NFFT,1,-1,0) !r2c df=48000.0/NFFT - fa=1800.0 - 0.5*6.25 - fb=1800.0 + 7.5*6.25 + (nslots-1)*60.0 + fa=nfreq - 0.5*6.25 + fb=nfreq + 7.5*6.25 + (nslots-1)*60.0 ia2=nint(fa/df) ib1=nint(fb/df) ia1=nint(ia2-width/df) diff --git a/lib/ft8/foxgen.f90 b/lib/ft8/foxgen.f90 index 2fa019dd1..2519550fb 100644 --- a/lib/ft8/foxgen.f90 +++ b/lib/ft8/foxgen.f90 @@ -31,7 +31,7 @@ subroutine foxgen() real x(NFFT) real*8 dt,twopi,f0,fstep,dfreq,phi,dphi complex cx(0:NH) - common/foxcom/wave(NWAVE),nslots,i3bit(5),cmsg(5),mycall(12) + common/foxcom/wave(NWAVE),nslots,nfreq,i3bit(5),cmsg(5),mycall(12) common/foxcom2/itone2(NN),msgbits2(KK) equivalence (x,cx),(y,cy) data icos7/2,5,6,0,4,1,3/ !Costas 7x7 tone pattern @@ -95,8 +95,7 @@ subroutine foxgen() ! Make copies of itone() and msgbits() for ft8sim itone2=itone msgbits2=msgbits - - f0=1800.d0 + fstep*(n-1) + f0=nfreq + fstep*(n-1) phi=0.d0 k=0 do j=1,NN @@ -128,7 +127,7 @@ subroutine foxgen() ! call plotspec(2,wave) !Plot the spectrum width=50.0 - call foxfilt(nslots,width,wave) + call foxfilt(nslots,nfreq,width,wave) peak3=maxval(abs(wave)) wave=wave/peak3 diff --git a/lib/ft8/foxgen_wrap.f90 b/lib/ft8/foxgen_wrap.f90 index 8ffe37c35..dbcb2582f 100644 --- a/lib/ft8/foxgen_wrap.f90 +++ b/lib/ft8/foxgen_wrap.f90 @@ -7,10 +7,11 @@ subroutine foxgen_wrap(msg40,msgbits,itone) character*12 mycall12 integer*1 msgbits(KK),msgbits2 integer itone(NN) - common/foxcom/wave(NWAVE),nslots,i3bit(5),cmsg(5),mycall12 + common/foxcom/wave(NWAVE),nslots,nfreq,i3bit(5),cmsg(5),mycall12 common/foxcom2/itone2(NN),msgbits2(KK) nslots=1 + nfreq=300 i1=index(msg40,'<') i2=index(msg40,'>') mycall12=msg40(i1+1:i2-1)//' ' diff --git a/mainwindow.cpp b/mainwindow.cpp index 5f4faad60..3939bd036 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -2941,6 +2941,7 @@ void MainWindow::readFromStdout() //readFromStdout } } else { QStringList w=decodedtext.string().mid(24).split(" ",QString::SkipEmptyParts); + if(decodedtext.string().contains("/")) w.append(" +00"); //Add a dummy report if(w.size()==3) { QString foxCall=w.at(1); if(w.at(0)==m_config.my_callsign()) { @@ -3243,12 +3244,12 @@ void MainWindow::guiUpdate() icw[0]=m_ncw; g_iptt = 1; setRig (); - if(m_mode=="FT8" and m_config.bFox() and ui->TxFreqSpinBox->value() > 999) { + if(m_mode=="FT8" and m_config.bFox() and ui->TxFreqSpinBox->value() > 900) { ui->TxFreqSpinBox->setValue(300); } if(m_mode=="FT8" and m_config.bHound() and (ui->TxFreqSpinBox->value() < 999) and m_ntx != 3) { - int nf = (qrand() % 3000) + 1000; + int nf = (qrand() % 2000) + 1000; // Hound randomized range: 1000-3000 Hz ui->TxFreqSpinBox->setValue(nf); } setXIT (ui->TxFreqSpinBox->value ()); @@ -3303,6 +3304,10 @@ void MainWindow::guiUpdate() } ba=msg2.toLatin1(); } else { + if(m_config.bHound() and m_ntx!=3) { //Hound transmits only Tx1 or Tx3 + m_ntx=1; + ui->txrb1->setChecked(true); + } if(m_ntx == 1) ba=ui->tx1->text().toLocal8Bit(); if(m_ntx == 2) ba=ui->tx2->text().toLocal8Bit(); if(m_ntx == 3) ba=ui->tx3->text().toLocal8Bit(); @@ -7427,9 +7432,11 @@ void MainWindow::foxTxSequencer() fm = hc1 + " " + m_config.my_callsign(); //Tx msg m_fullFoxCallTime=now; } + if(islot>0 and fm==m_fm0) break; //Suppress duplicate Fox signals islot++; //Generate tx waveform foxGenWaveform(islot-1,fm); + m_fm0=fm; if(islot >= m_Nslots) goto Transmit; } @@ -7467,6 +7474,8 @@ void MainWindow::foxTxSequencer() Transmit: foxcom_.nslots=islot; + foxcom_.nfreq=ui->TxFreqSpinBox->value(); + if(m_config.split_mode()) foxcom_.nfreq = foxcom_.nfreq + 1500; //Fox Tx freq QString foxCall=m_config.my_callsign() + " "; strncpy(&foxcom_.mycall[0], foxCall.toLatin1(),12); //Copy Fox callsign into foxcom_ foxgen_(); @@ -7531,12 +7540,10 @@ void MainWindow::foxGenWaveform(int i,QString fm) QString txModeArg; txModeArg.sprintf("FT8fox %d",i+1); ui->decodedTextBrowser2->displayTransmittedText(fm.trimmed(), txModeArg, - 300+60*i,m_config.color_TxMsg(),m_bFastMode); - + ui->TxFreqSpinBox->value()+60*i,m_config.color_TxMsg(),m_bFastMode); foxcom_.i3bit[i]=0; if(fm.indexOf("<")>0) foxcom_.i3bit[i]=1; strncpy(&foxcom_.cmsg[i][0],fm.toLatin1(),40); //Copy this message into cmsg[i] -// qDebug() << "Fox Transmitting:" << i << fm.trimmed(); writeFoxQSO(" Tx: " + fm.trimmed()); } diff --git a/mainwindow.h b/mainwindow.h index 486ef53d4..5f48e9891 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -565,6 +565,7 @@ private: QString m_CQtype; QString m_opCall; QString m_houndCallers; //Sorted list of Hound callers + QString m_fm0; QSet m_pfx; QSet m_sfx;