mirror of https://github.com/saitohirga/WSJT-X.git
Several enhancements to DXpedition mode:
1. Insert dummy report when Hound is called by complex-callsign Fox. 2. Allow Fox to transmit anywhere between 300 and 900 Hz. 3. Restrict randomized Hound freq to the range 1000 - 3000 Hz. 4. Suppress Fox signals that would be duplicates. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@8376 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
6ebf71e4e0
commit
d1be2506a9
|
@ -83,6 +83,7 @@ extern struct {
|
||||||
extern struct {
|
extern struct {
|
||||||
float wave[606720];
|
float wave[606720];
|
||||||
int nslots;
|
int nslots;
|
||||||
|
int nfreq;
|
||||||
int i3bit[5];
|
int i3bit[5];
|
||||||
char cmsg[5][40];
|
char cmsg[5][40];
|
||||||
char mycall[12];
|
char mycall[12];
|
||||||
|
|
|
@ -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 (NN=79,ND=58,KK=87,NSPS=4*1920)
|
||||||
parameter (NWAVE=NN*NSPS,NFFT=614400,NH=NFFT/2)
|
parameter (NWAVE=NN*NSPS,NFFT=614400,NH=NFFT/2)
|
||||||
|
@ -11,8 +11,8 @@ subroutine foxfilt(nslots,width,wave)
|
||||||
x(NWAVE+1:)=0.
|
x(NWAVE+1:)=0.
|
||||||
call four2a(x,NFFT,1,-1,0) !r2c
|
call four2a(x,NFFT,1,-1,0) !r2c
|
||||||
df=48000.0/NFFT
|
df=48000.0/NFFT
|
||||||
fa=1800.0 - 0.5*6.25
|
fa=nfreq - 0.5*6.25
|
||||||
fb=1800.0 + 7.5*6.25 + (nslots-1)*60.0
|
fb=nfreq + 7.5*6.25 + (nslots-1)*60.0
|
||||||
ia2=nint(fa/df)
|
ia2=nint(fa/df)
|
||||||
ib1=nint(fb/df)
|
ib1=nint(fb/df)
|
||||||
ia1=nint(ia2-width/df)
|
ia1=nint(ia2-width/df)
|
||||||
|
|
|
@ -31,7 +31,7 @@ subroutine foxgen()
|
||||||
real x(NFFT)
|
real x(NFFT)
|
||||||
real*8 dt,twopi,f0,fstep,dfreq,phi,dphi
|
real*8 dt,twopi,f0,fstep,dfreq,phi,dphi
|
||||||
complex cx(0:NH)
|
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)
|
common/foxcom2/itone2(NN),msgbits2(KK)
|
||||||
equivalence (x,cx),(y,cy)
|
equivalence (x,cx),(y,cy)
|
||||||
data icos7/2,5,6,0,4,1,3/ !Costas 7x7 tone pattern
|
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
|
! Make copies of itone() and msgbits() for ft8sim
|
||||||
itone2=itone
|
itone2=itone
|
||||||
msgbits2=msgbits
|
msgbits2=msgbits
|
||||||
|
f0=nfreq + fstep*(n-1)
|
||||||
f0=1800.d0 + fstep*(n-1)
|
|
||||||
phi=0.d0
|
phi=0.d0
|
||||||
k=0
|
k=0
|
||||||
do j=1,NN
|
do j=1,NN
|
||||||
|
@ -128,7 +127,7 @@ subroutine foxgen()
|
||||||
! call plotspec(2,wave) !Plot the spectrum
|
! call plotspec(2,wave) !Plot the spectrum
|
||||||
|
|
||||||
width=50.0
|
width=50.0
|
||||||
call foxfilt(nslots,width,wave)
|
call foxfilt(nslots,nfreq,width,wave)
|
||||||
peak3=maxval(abs(wave))
|
peak3=maxval(abs(wave))
|
||||||
wave=wave/peak3
|
wave=wave/peak3
|
||||||
|
|
||||||
|
|
|
@ -7,10 +7,11 @@ subroutine foxgen_wrap(msg40,msgbits,itone)
|
||||||
character*12 mycall12
|
character*12 mycall12
|
||||||
integer*1 msgbits(KK),msgbits2
|
integer*1 msgbits(KK),msgbits2
|
||||||
integer itone(NN)
|
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)
|
common/foxcom2/itone2(NN),msgbits2(KK)
|
||||||
|
|
||||||
nslots=1
|
nslots=1
|
||||||
|
nfreq=300
|
||||||
i1=index(msg40,'<')
|
i1=index(msg40,'<')
|
||||||
i2=index(msg40,'>')
|
i2=index(msg40,'>')
|
||||||
mycall12=msg40(i1+1:i2-1)//' '
|
mycall12=msg40(i1+1:i2-1)//' '
|
||||||
|
|
|
@ -2941,6 +2941,7 @@ void MainWindow::readFromStdout() //readFromStdout
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
QStringList w=decodedtext.string().mid(24).split(" ",QString::SkipEmptyParts);
|
QStringList w=decodedtext.string().mid(24).split(" ",QString::SkipEmptyParts);
|
||||||
|
if(decodedtext.string().contains("/")) w.append(" +00"); //Add a dummy report
|
||||||
if(w.size()==3) {
|
if(w.size()==3) {
|
||||||
QString foxCall=w.at(1);
|
QString foxCall=w.at(1);
|
||||||
if(w.at(0)==m_config.my_callsign()) {
|
if(w.at(0)==m_config.my_callsign()) {
|
||||||
|
@ -3243,12 +3244,12 @@ void MainWindow::guiUpdate()
|
||||||
icw[0]=m_ncw;
|
icw[0]=m_ncw;
|
||||||
g_iptt = 1;
|
g_iptt = 1;
|
||||||
setRig ();
|
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);
|
ui->TxFreqSpinBox->setValue(300);
|
||||||
}
|
}
|
||||||
if(m_mode=="FT8" and m_config.bHound() and (ui->TxFreqSpinBox->value() < 999) and
|
if(m_mode=="FT8" and m_config.bHound() and (ui->TxFreqSpinBox->value() < 999) and
|
||||||
m_ntx != 3) {
|
m_ntx != 3) {
|
||||||
int nf = (qrand() % 3000) + 1000;
|
int nf = (qrand() % 2000) + 1000; // Hound randomized range: 1000-3000 Hz
|
||||||
ui->TxFreqSpinBox->setValue(nf);
|
ui->TxFreqSpinBox->setValue(nf);
|
||||||
}
|
}
|
||||||
setXIT (ui->TxFreqSpinBox->value ());
|
setXIT (ui->TxFreqSpinBox->value ());
|
||||||
|
@ -3303,6 +3304,10 @@ void MainWindow::guiUpdate()
|
||||||
}
|
}
|
||||||
ba=msg2.toLatin1();
|
ba=msg2.toLatin1();
|
||||||
} else {
|
} 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 == 1) ba=ui->tx1->text().toLocal8Bit();
|
||||||
if(m_ntx == 2) ba=ui->tx2->text().toLocal8Bit();
|
if(m_ntx == 2) ba=ui->tx2->text().toLocal8Bit();
|
||||||
if(m_ntx == 3) ba=ui->tx3->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
|
fm = hc1 + " " + m_config.my_callsign(); //Tx msg
|
||||||
m_fullFoxCallTime=now;
|
m_fullFoxCallTime=now;
|
||||||
}
|
}
|
||||||
|
if(islot>0 and fm==m_fm0) break; //Suppress duplicate Fox signals
|
||||||
islot++;
|
islot++;
|
||||||
//Generate tx waveform
|
//Generate tx waveform
|
||||||
foxGenWaveform(islot-1,fm);
|
foxGenWaveform(islot-1,fm);
|
||||||
|
m_fm0=fm;
|
||||||
if(islot >= m_Nslots) goto Transmit;
|
if(islot >= m_Nslots) goto Transmit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7467,6 +7474,8 @@ void MainWindow::foxTxSequencer()
|
||||||
|
|
||||||
Transmit:
|
Transmit:
|
||||||
foxcom_.nslots=islot;
|
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() + " ";
|
QString foxCall=m_config.my_callsign() + " ";
|
||||||
strncpy(&foxcom_.mycall[0], foxCall.toLatin1(),12); //Copy Fox callsign into foxcom_
|
strncpy(&foxcom_.mycall[0], foxCall.toLatin1(),12); //Copy Fox callsign into foxcom_
|
||||||
foxgen_();
|
foxgen_();
|
||||||
|
@ -7531,12 +7540,10 @@ void MainWindow::foxGenWaveform(int i,QString fm)
|
||||||
QString txModeArg;
|
QString txModeArg;
|
||||||
txModeArg.sprintf("FT8fox %d",i+1);
|
txModeArg.sprintf("FT8fox %d",i+1);
|
||||||
ui->decodedTextBrowser2->displayTransmittedText(fm.trimmed(), txModeArg,
|
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;
|
foxcom_.i3bit[i]=0;
|
||||||
if(fm.indexOf("<")>0) foxcom_.i3bit[i]=1;
|
if(fm.indexOf("<")>0) foxcom_.i3bit[i]=1;
|
||||||
strncpy(&foxcom_.cmsg[i][0],fm.toLatin1(),40); //Copy this message into cmsg[i]
|
strncpy(&foxcom_.cmsg[i][0],fm.toLatin1(),40); //Copy this message into cmsg[i]
|
||||||
// qDebug() << "Fox Transmitting:" << i << fm.trimmed();
|
|
||||||
writeFoxQSO(" Tx: " + fm.trimmed());
|
writeFoxQSO(" Tx: " + fm.trimmed());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -565,6 +565,7 @@ private:
|
||||||
QString m_CQtype;
|
QString m_CQtype;
|
||||||
QString m_opCall;
|
QString m_opCall;
|
||||||
QString m_houndCallers; //Sorted list of Hound callers
|
QString m_houndCallers; //Sorted list of Hound callers
|
||||||
|
QString m_fm0;
|
||||||
|
|
||||||
QSet<QString> m_pfx;
|
QSet<QString> m_pfx;
|
||||||
QSet<QString> m_sfx;
|
QSet<QString> m_sfx;
|
||||||
|
|
Loading…
Reference in New Issue