diff --git a/Audio/soundin.cpp b/Audio/soundin.cpp
index d9bc78446..81d323d54 100644
--- a/Audio/soundin.cpp
+++ b/Audio/soundin.cpp
@@ -97,7 +97,7 @@ void SoundInput::start(QAudioDeviceInfo const& device, int framesPerBuffer, Audi
m_stream->start (sink);
checkStream ();
cummulative_lost_usec_ = -1;
- LOG_DEBUG ("Selected buffer size (bytes): " << m_stream->bufferSize () << " period size: " << m_stream->periodSize ());
+// LOG_DEBUG ("Selected buffer size (bytes): " << m_stream->bufferSize () << " period size: " << m_stream->periodSize ());
}
else
{
diff --git a/Audio/soundout.cpp b/Audio/soundout.cpp
index f3ec3dce3..48fe0a4fc 100644
--- a/Audio/soundout.cpp
+++ b/Audio/soundout.cpp
@@ -111,7 +111,7 @@ void SoundOutput::restart (QIODevice * source)
}
m_stream->setCategory ("production");
m_stream->start (source);
- LOG_DEBUG ("Selected buffer size (bytes): " << m_stream->bufferSize () << " period size: " << m_stream->periodSize ());
+// LOG_DEBUG ("Selected buffer size (bytes): " << m_stream->bufferSize () << " period size: " << m_stream->periodSize ());
}
void SoundOutput::suspend ()
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ffe482eb3..4e5cabaa4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -71,7 +71,7 @@ message (STATUS "******************************************************")
include (set_build_type)
# RC 0 or omitted is a development build, GA is a General Availability release build
-set_build_type (RC 2)
+set_build_type (RC 3)
set (wsjtx_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${BUILD_TYPE_REVISION}")
#
@@ -509,6 +509,7 @@ set (wsjt_FSRCS
lib/refspectrum.f90
lib/savec2.f90
lib/save_dxbase.f90
+ lib/save_echo_params.f90
lib/sec0.f90
lib/sec_midn.f90
lib/setup65.f90
diff --git a/Configuration.hpp b/Configuration.hpp
index 50c17033b..cb32f0365 100644
--- a/Configuration.hpp
+++ b/Configuration.hpp
@@ -188,7 +188,8 @@ public:
bool highlight_DXcall () const;
bool highlight_DXgrid () const;
- enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, WW_DIGI, ARRL_DIGI, FOX, HOUND};
+// 0 1 2 3 4 5 6 7 8
+ enum class SpecialOperatingActivity {NONE, NA_VHF, EU_VHF, FIELD_DAY, RTTY, WW_DIGI, FOX, HOUND, ARRL_DIGI};
SpecialOperatingActivity special_op_id () const;
struct CalibrationParams
diff --git a/Network/NetworkMessage.hpp b/Network/NetworkMessage.hpp
index 61aaf7038..c211abb0f 100644
--- a/Network/NetworkMessage.hpp
+++ b/Network/NetworkMessage.hpp
@@ -199,6 +199,7 @@
* 5 -> WW DIGI
* 6 -> FOX
* 7 -> HOUND
+ * 8 -> ARRL DIGI
*
* The Frequency Tolerance and T/R period fields may have a value
* of the maximum quint32 value which implies the field is not
diff --git a/doc/user_guide/en/install-windows.adoc b/doc/user_guide/en/install-windows.adoc
index 19c73e3a3..616761894 100644
--- a/doc/user_guide/en/install-windows.adoc
+++ b/doc/user_guide/en/install-windows.adoc
@@ -1,8 +1,8 @@
// Status=edited
-Download and execute the package file {win32} (Win 7,
-Win 8, Win10, 32-bit) or {win64} (Win 7, Win 8, Win10, 64-bit)
-following these instructions:
+Download and execute the package file {win32} (Windows 7 or later,
+32-bit) or {win64} (Windows 7 or later, 64-bit) following these
+instructions:
* Install _WSJT-X_ into its own directory, for example `C:\WSJTX` or `C:\WSJT\WSJTX`, rather than the conventional location `C:\Program
Files ...\WSJTX`.
diff --git a/lib/astrosub.f90 b/lib/astrosub.f90
index 8e27a4a52..e190fac11 100644
--- a/lib/astrosub.f90
+++ b/lib/astrosub.f90
@@ -79,13 +79,14 @@ contains
ih,im,is,AzSun8,ElSun8, &
ih,im,is,AzAux,ElAux, &
nfreq,doppler,dfdt,doppler00,dfdt0,c1
- if (azel_extra_lines.ge.1) write(15, 1020, err=10) poloffset8,xnr8,Dgrd8
+ if (azel_extra_lines.ge.1) write(15, 1020, err=10) poloffset8, &
+ xnr8,Dgrd8,width1,width2
1010 format( &
i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Moon'/ &
i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Sun'/ &
i2.2,':',i2.2,':',i2.2,',',f5.1,',',f5.1,',Source'/ &
i5,',',f8.1,',',f8.2,',',f8.1,',',f8.2,',Doppler, ',a1)
-1020 format(f8.1,','f8.1,',',f8.1,',Pol')
+1020 format(f8.1,',',f8.1,',',f8.1,',',f8.1,',',f8.1,',Pol')
10 close(15)
go to 999
diff --git a/lib/avecho.f90 b/lib/avecho.f90
index 04b80df65..19fb53e23 100644
--- a/lib/avecho.f90
+++ b/lib/avecho.f90
@@ -1,5 +1,5 @@
subroutine avecho(id2,ndop,nfrit,nauto,nqual,f1,xlevel,snrdb,db_err, &
- dfreq,width)
+ dfreq,width,bDiskData)
integer TXLENGTH
parameter (TXLENGTH=27648) !27*1024
@@ -15,6 +15,7 @@ subroutine avecho(id2,ndop,nfrit,nauto,nqual,f1,xlevel,snrdb,db_err, &
real x(NFFT)
integer ipkv(1)
logical ex
+ logical*1 bDiskData
complex c(0:NH)
equivalence (x,c),(ipk,ipkv)
common/echocom/nclearave,nsum,blue(NZ),red(NZ)
@@ -22,6 +23,7 @@ subroutine avecho(id2,ndop,nfrit,nauto,nqual,f1,xlevel,snrdb,db_err, &
save dop0,sa,sb
fspread=fspread_dx !### Use the predicted Doppler spread ###
+ if(bDiskData) fspread=width
if(nauto.eq.1) fspread=fspread_self
inquire(file='fspread.txt',exist=ex)
if(ex) then
@@ -57,8 +59,13 @@ subroutine avecho(id2,ndop,nfrit,nauto,nqual,f1,xlevel,snrdb,db_err, &
fnominal=1500.0 !Nominal audio frequency w/o doppler or dither
ia=nint((fnominal+dop0-nfrit)/df)
ib=nint((f1+dop-nfrit)/df)
- if(ia.lt.600 .or. ib.lt.600) go to 900
- if(ia.gt.7590 .or. ib.gt.7590) go to 900
+ if(ia.lt.2048 .or. ib.lt.2048 .or. ia.gt.6144 .or. ib.gt.6144) then
+ xlevel=0.
+ snrdb=0.
+ db_err=0.
+ dfreq=0.
+ go to 900
+ endif
nsum=nsum+1
do i=1,NZ
diff --git a/lib/decoder.f90 b/lib/decoder.f90
index 1e2eba9c2..039096fd3 100644
--- a/lib/decoder.f90
+++ b/lib/decoder.f90
@@ -108,11 +108,11 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
nfail=0
10 if (params%nagain) then
open(13,file=trim(temp_dir)//'/decoded.txt',status='unknown', &
- position='append',iostat=ios)
+ position='append',iostat=ios13)
else
- open(13,file=trim(temp_dir)//'/decoded.txt',status='unknown',iostat=ios)
+ open(13,file=trim(temp_dir)//'/decoded.txt',status='unknown',iostat=ios13)
endif
- if(ios.ne.0) then
+ if(ios13.ne.0) then
nfail=nfail+1
if(nfail.le.3) then
call sleep_msec(10)
@@ -523,8 +523,8 @@ contains
write(*,1010) params%nutc,snr,dt,freq,csync,decoded,cflags
1010 format(i4.4,i4,f5.1,i5,1x,a2,1x,a22,1x,a3)
endif
- write(13,1012) params%nutc,nint(sync),snr,dt,float(freq),drift, &
- decoded,ft,nsum,nsmo
+ if(ios13.eq.0) write(13,1012) params%nutc,nint(sync),snr,dt, &
+ float(freq),drift,decoded,ft,nsum,nsmo
1012 format(i4.4,i4,i5,f6.2,f8.0,i4,3x,a22,' JT65',3i3)
call flush(6)
@@ -550,7 +550,8 @@ contains
!$omp critical(decode_results)
write(*,1000) params%nutc,snr,dt,nint(freq),decoded
1000 format(i4.4,i4,f5.1,i5,1x,'@ ',1x,a22)
- write(13,1002) params%nutc,nint(sync),snr,dt,freq,drift,decoded
+ if(ios13.eq.0) write(13,1002) params%nutc,nint(sync),snr,dt,freq, &
+ drift,decoded
1002 format(i4.4,i4,i5,f6.1,f8.0,i4,3x,a22,' JT9')
call flush(6)
!$omp end critical(decode_results)
@@ -614,8 +615,9 @@ contains
1000 format(i6.6,i4,f5.1,i5,' ~ ',1x,a22,1x,a2)
if(i0.gt.0) write(*,1001) params%nutc,snr,dt,nint(freq),decoded0,annot
1001 format(i6.6,i4,f5.1,i5,' ~ ',1x,a37,1x,a2)
- write(13,1002) params%nutc,nint(sync),snr,dt,freq,0,decoded0
+ if(ios13.eq.0) write(13,1002) params%nutc,nint(sync),snr,dt,freq,0,decoded0
1002 format(i6.6,i4,i5,f6.1,f8.0,i4,3x,a37,' FT8')
+ print*,'A',ios13
if(ncontest.eq.6) then
i1=index(decoded0,' ')
@@ -651,7 +653,7 @@ contains
endif
call flush(6)
- call flush(13)
+ if(ios13.eq.0) call flush(13)
select type(this)
type is (counting_ft8_decoder)
@@ -686,11 +688,12 @@ contains
write(*,1001) params%nutc,snr,dt,nint(freq),decoded0,annot
1001 format(i6.6,i4,f5.1,i5,' + ',1x,a37,1x,a2)
- write(13,1002) params%nutc,nint(sync),snr,dt,freq,0,decoded0
+ if(ios13.eq.0) write(13,1002) params%nutc,nint(sync),snr,dt, &
+ freq,0,decoded0
1002 format(i6.6,i4,i5,f6.1,f8.0,i4,3x,a37,' FT4')
call flush(6)
- call flush(13)
+ if(ios13.eq.0) call flush(13)
select type(this)
type is (counting_ft4_decoder)
@@ -734,12 +737,12 @@ contains
if(ntrperiod.lt.60) then
write(line,1001) nutc,nsnr,dt,nint(freq),decoded0,annot
1001 format(i6.6,i4,f5.1,i5,' ` ',1x,a37,1x,a2)
- write(13,1002) nutc,nint(sync),nsnr,dt,freq,0,decoded0
+ if(ios13.eq.0) write(13,1002) nutc,nint(sync),nsnr,dt,freq,0,decoded0
1002 format(i6.6,i4,i5,f6.1,f8.0,i4,3x,a37,' FST4')
else
write(line,1003) nutc,nsnr,dt,nint(freq),decoded0,annot
1003 format(i4.4,i4,f5.1,i5,' ` ',1x,a37,1x,a2,2f7.3)
- write(13,1004) nutc,nint(sync),nsnr,dt,freq,0,decoded0
+ if(ios13.eq.0) write(13,1004) nutc,nint(sync),nsnr,dt,freq,0,decoded0
1004 format(i4.4,i4,i5,f6.1,f8.0,i4,3x,a37,' FST4')
endif
@@ -752,7 +755,7 @@ contains
1005 format(a70)
call flush(6)
- call flush(13)
+ if(ios13.eq.0) call flush(13)
select type(this)
type is (counting_fst4_decoder)
@@ -790,17 +793,17 @@ contains
if(ntrperiod.lt.60) then
write(*,1001) nutc,nsnr,dt,nint(freq),decoded,cflags
1001 format(i6.6,i4,f5.1,i5,' : ',1x,a37,1x,a3)
- write(13,1002) nutc,nint(snr1),nsnr,dt,freq,0,decoded
+ if(ios13.eq.0) write(13,1002) nutc,nint(snr1),nsnr,dt,freq,0,decoded
1002 format(i6.6,i4,i5,f6.1,f8.0,i4,3x,a37,' Q65')
else
write(*,1003) nutc,nsnr,dt,nint(freq),decoded,cflags
1003 format(i4.4,i4,f5.1,i5,' : ',1x,a37,1x,a3)
- write(13,1004) nutc,nint(snr1),nsnr,dt,freq,0,decoded
+ if(ios13.eq.0) write(13,1004) nutc,nint(snr1),nsnr,dt,freq,0,decoded
1004 format(i4.4,i4,i5,f6.1,f8.0,i4,3x,a37,' Q65')
endif
call flush(6)
- call flush(13)
+ if(ios13.eq.0) call flush(13)
select type(this)
type is (counting_q65_decoder)
diff --git a/lib/save_echo_params.f90 b/lib/save_echo_params.f90
new file mode 100644
index 000000000..d9ae6ca9b
--- /dev/null
+++ b/lib/save_echo_params.f90
@@ -0,0 +1,27 @@
+subroutine save_echo_params(nDop,nfrit,f1,fspread,id2,idir)
+
+ integer*2 id2(10)
+ integer*2 id2a(10)
+ real*8 fspread,fspread0
+ equivalence (nDop0,id2a(1))
+ equivalence (nfrit0,id2a(3))
+ equivalence (f10,id2a(5))
+ equivalence (fspread0,id2a(7))
+
+ if(idir.gt.0) then
+ nDop0=nDop
+ nfrit0=nfrit
+ f10=f1
+ fspread0=fspread
+ id2=id2a
+ else
+ id2a=id2
+ id2(1:10)=0
+ nDop=nDop0
+ nfrit=nfrit0
+ f1=f10
+ fspread=fspread0
+ endif
+
+ return
+end subroutine save_echo_params
diff --git a/widgets/astro.cpp b/widgets/astro.cpp
index d90a29ed3..fd0671d3c 100644
--- a/widgets/astro.cpp
+++ b/widgets/astro.cpp
@@ -92,7 +92,7 @@ void Astro::write_settings ()
}
auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const& hisgrid, Frequency freq,
- bool dx_is_self, bool bTx, bool no_tx_QSY, double TR_period) -> Correction
+ bool bEchoMode, bool bTx, bool bAuto, bool no_tx_QSY, double TR_period) -> Correction
{
Frequency freq_moon {freq};
double azsun,elsun,azmoon,elmoon,azmoondx,elmoondx;
@@ -121,6 +121,7 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const
AzElFileName.toLocal8Bit ().constData (),
jpleph.toLocal8Bit ().constData ());
+// qDebug() << "AA1" << m_dop00 << m_dop << width1 << width2;
QString message;
{
QTextStream out {&message};
@@ -136,14 +137,14 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const
<< "Az: " << azmoon << "\n"
"El: " << elmoon << "\n"
"SelfDop:" << m_dop00 << "\n"
- "Width: " << int(width1) << "\n"
+ "Width: " << int(width1+0.5) << "\n"
<< qSetRealNumberPrecision (2)
<< "Delay: " << techo << "\n"
<< qSetRealNumberPrecision (1)
<< "DxAz: " << azmoondx << "\n"
"DxEl: " << elmoondx << "\n"
"DxDop: " << m_dop << "\n"
- "DxWid: " << int(width2) << "\n"
+ "DxWid: " << int(width2+0.5) << "\n"
"Dec: " << decmoon << "\n"
"SunAz: " << azsun << "\n"
"SunEl: " << elsun << "\n"
@@ -159,7 +160,14 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const
ui_->text_label->setText(message);
Correction correction;
+ correction.dop=m_dop00;
+ correction.width=width1;
+ if(hisgrid!="" and !bAuto) {
+ correction.dop=m_dop;
+ correction.width=width2;
+ }
if (ui_->cbDopplerTracking->isChecked ()) {
+ ui_->sbRIT->setEnabled(m_DopplerMethod==0);
switch (m_DopplerMethod)
{
case 1: // All Doppler correction done here; DX station stays at nominal dial frequency.
@@ -170,7 +178,7 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const
break;
//case 5: // All Doppler correction done here; DX station stays at nominal dial frequency.
case 3: // Both stations do full correction on Rx and none on Tx
- //correction.rx = dx_is_self ? m_dop00 : m_dop;
+ //correction.rx = bEchoMode ? m_dop00 : m_dop;
correction.rx = m_dop00; // Now always sets RX to *own* echo freq
break;
case 2:
@@ -195,7 +203,7 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const
}
//if (3 != m_DopplerMethod || 4 != m_DopplerMethod) correction.tx = -correction.rx;
- if(dx_is_self && m_DopplerMethod == 1) correction.rx = 0;
+ if(bEchoMode && m_DopplerMethod == 1) correction.rx = 0;
if (no_tx_QSY && 3 != m_DopplerMethod && 0 != m_DopplerMethod)
{
@@ -229,7 +237,7 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const
{
case 1:
// All Doppler correction done here; DX station stays at nominal dial frequency.
- offset = dx_is_self ? m_dop00 : m_dop;
+ offset = bEchoMode ? m_dop00 : m_dop;
break;
case 2:
@@ -250,11 +258,14 @@ auto Astro::astroUpdate(QDateTime const& t, QString const& mygrid, QString const
//qDebug () << "correction.tx (no tx qsy):" << correction.tx;
}
}
+
+// qDebug() << "AA0" << m_DopplerMethod << bAuto << correction.tx << correction.rx << correction.width;
return correction;
}
void Astro::check_split ()
{
+ /* TEMPORARILY DISABLE
if (doppler_tracking () && !configuration_->split_mode ())
{
MessageBox::warning_message (this, tr ("Doppler Tracking Error"),
@@ -262,6 +273,7 @@ void Astro::check_split ()
tr ("Go to \"Menu->File->Settings->Radio\" to enable split operation"));
ui_->rbNoDoppler->click ();
}
+ */
}
void Astro::on_rbFullTrack_clicked(bool)
@@ -331,3 +343,27 @@ void Astro::hideEvent (QHideEvent * e)
Q_EMIT tracking_update ();
QWidget::hideEvent (e);
}
+
+bool Astro::bDither()
+{
+ return ui_->cbDither->isChecked();
+}
+
+void Astro::selectOwnEcho()
+{
+ ui_->rbOwnEcho->click();
+}
+
+void Astro::selectOnDxEcho()
+{
+ ui_->rbOnDxEcho->click();
+}
+
+qint32 Astro::nfRIT()
+{
+ if(m_DopplerMethod==0) {
+ return ui_->sbRIT->value();
+ } else {
+ return 0;
+ }
+}
diff --git a/widgets/astro.h b/widgets/astro.h
index 2b544872c..28654b7d5 100644
--- a/widgets/astro.h
+++ b/widgets/astro.h
@@ -32,6 +32,8 @@ public:
Correction ()
: rx {0}
, tx {0}
+ , dop {0}
+ , width {0}
{}
Correction (Correction const&) = default;
Correction& operator = (Correction const&) = default;
@@ -45,6 +47,8 @@ public:
FrequencyDelta rx;
FrequencyDelta tx;
+ double dop;
+ double width;
};
Correction astroUpdate(QDateTime const& t,
@@ -53,10 +57,16 @@ public:
Frequency frequency,
bool dx_is_self,
bool bTx,
+ bool bAuto,
bool no_tx_QSY,
double TR_period);
bool doppler_tracking () const;
+ bool bDither();
+ void selectOwnEcho();
+ void selectOnDxEcho();
+ qint32 nfRIT();
+
Q_SLOT void nominal_frequency (Frequency rx, Frequency tx);
Q_SIGNAL void tracking_update () const;
@@ -67,8 +77,8 @@ protected:
private slots:
void on_rbConstFreqOnMoon_clicked(bool);
void on_rbFullTrack_clicked(bool);
- void on_rbOwnEcho_clicked(bool);
void on_rbNoDoppler_clicked(bool);
+ void on_rbOwnEcho_clicked(bool);
void on_rbOnDxEcho_clicked(bool);
void on_rbCallDx_clicked(bool);
void on_cbDopplerTracking_toggled(bool);
diff --git a/widgets/astro.ui b/widgets/astro.ui
index 6bbb15749..c1a9bc081 100644
--- a/widgets/astro.ui
+++ b/widgets/astro.ui
@@ -7,7 +7,7 @@
0
0
359
- 342
+ 401
@@ -70,7 +70,7 @@
- -
+
-
<html><head/><body><p>DX station announces their TX Freq, which is entered as the Sked Freq. Correction applied to RX and TX so you appear on the DX's station's own echo Freq.</p><p>If the rig does not accept CAT QSY commands while transmitting a single correction is applied for the whole transmit period.</p></body></html>
@@ -83,7 +83,7 @@
- -
+
-
<html><head/><body><p>Tune radio manually and select this mode to put your echo on the same frequency.</p><p>If the rig does not accept CAT QSY commands while transmitting a single correction is applied for the whole transmit period.</p></body></html>
@@ -95,7 +95,7 @@
false
-
+
-
@@ -109,7 +109,7 @@
-
+
-
@@ -202,6 +202,76 @@
+ -
+
+
+
+ 0
+ 50
+
+
+
+ Echo Mode
+
+
+
+
+ 20
+ 20
+ 164
+ 22
+
+
+
+
-
+
+
+ false
+
+
+ Qt::AlignCenter
+
+
+ Hz
+
+
+ RIT
+
+
+ -20000
+
+
+ 20000
+
+
+ 100
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Dither
+
+
+
+
+
+
+
-
diff --git a/widgets/mainwindow.cpp b/widgets/mainwindow.cpp
index 5345a8f6c..07cf316c8 100644
--- a/widgets/mainwindow.cpp
+++ b/widgets/mainwindow.cpp
@@ -153,9 +153,11 @@ extern "C" {
int savec2_(char const * fname, int* TR_seconds, double* dial_freq, fortran_charlen_t);
+ void save_echo_params_(int* ndop, int* nfrit, float* f1, double* fspread, short id2[], int* idir);
+
void avecho_( short id2[], int* dop, int* nfrit, int* nauto, int* nqual, float* f1,
float* level, float* sigdb, float* snr, float* dfreq,
- float* width);
+ float* width, bool* bDiskData);
void fast_decode_(short id2[], int narg[], double * trperiod,
char msg[], char mycall[], char hiscall[],
@@ -1047,6 +1049,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
QTimer::singleShot (0, this, SLOT (not_GA_warning_message ()));
}
+ m_specOp=m_config.special_op_id();
ui->pbBestSP->setVisible(m_mode=="FT4");
// this must be the last statement of constructor
@@ -1371,12 +1374,12 @@ void MainWindow::readSettings()
void MainWindow::checkMSK144ContestType()
{
- if(SpecOp::NONE != m_config.special_op_id())
+ if(SpecOp::NONE != m_specOp)
{
- if(m_mode=="MSK144" && SpecOp::EU_VHF < m_config.special_op_id())
+ if(m_mode=="MSK144" && SpecOp::EU_VHF < m_specOp)
{
MessageBox::warning_message (this, tr ("Improper mode"),
- "Mode will be changed to FT8. MSK144 not available if Field Day, WW Digi, RTTY or Fox/Hound is selected.");
+ "Mode will be changed to FT8. MSK144 not available if Fox, Hound, Field Day, FT Roundup, WW Digi. or ARRL Digi contest is selected.");
on_actionFT8_triggered();
}
}
@@ -1589,31 +1592,50 @@ void MainWindow::dataSink(qint64 frames)
if(m_mode=="Echo") {
float dBerr=0.0;
int nfrit=0;
+ if(m_astroWidget) nfrit=m_astroWidget->nfRIT();
int nauto=0;
if(m_auto) nauto=1;
int nqual=0;
- float f1=1500.0;
+ float f1=1500.0 + m_fDither;
float xlevel=0.0;
float sigdb=0.0;
float dfreq=0.0;
float width=0.0;
echocom_.nclearave=m_nclearave;
- int nDop=0;
+ int nDop=m_fAudioShift;
+ if(m_diskData) {
+ int idir=-1;
+ save_echo_params_(&nDop,&nfrit,&f1,&m_fSpread,dec_data.d2,&idir);
+ width=m_fSpread;
+ }
avecho_(dec_data.d2,&nDop,&nfrit,&nauto,&nqual,&f1,&xlevel,&sigdb,
- &dBerr,&dfreq,&width);
+ &dBerr,&dfreq,&width,&m_diskData);
+// qDebug() << "bb" << m_s6 << f1 << nfrit << nDop << width;
QString t;
- t = t.asprintf("%3d %7.1f %7.1f %7.1f %7.1f %7.1f %3d",echocom_.nsum,xlevel,sigdb,
- dBerr,dfreq,width,nqual);
- t=QDateTime::currentDateTimeUtc().toString("hh:mm:ss ") + t;
+// t = t.asprintf("%3d %7.1f %7.1f %7.1f %7.1f %7d %7.1f %3d %7d %7d",echocom_.nsum,xlevel,sigdb,
+// dBerr,dfreq,m_fDop,width,nqual,nDop,nfrit);
+ t = t.asprintf("%3d %7.1f %7.1f %7.1f %7.1f %7d %7.1f %3d",echocom_.nsum,xlevel,sigdb,
+ dBerr,dfreq,m_fDop,width,nqual);
+ QString t0;
+ if(m_diskData) {
+ t0=t0.asprintf("%06d ",m_UTCdisk);
+ } else {
+ t0=QDateTime::currentDateTimeUtc().toString("hhmmss ");
+ }
+ t = t0 + t;
if (ui) ui->decodedTextBrowser->appendText(t);
if(m_echoGraph->isVisible()) m_echoGraph->plotSpec();
+ if(m_saveAll) {
+ int idir=1;
+ save_echo_params_(&nDop,&nfrit,&f1,&m_fSpread,dec_data.d2,&idir);
+ }
m_nclearave=0;
//Don't restart Monitor after an Echo transmission
if(m_bEchoTxed and !m_auto) {
monitor(false);
m_bEchoTxed=false;
}
- return;
+// return;
}
if(m_mode=="FreqCal") {
return;
@@ -1877,7 +1899,7 @@ void MainWindow::on_actionSettings_triggered() //Setup Dialog
// things that might change that we need know about
auto callsign = m_config.my_callsign ();
auto my_grid = m_config.my_grid ();
- SpecOp nContest0=m_config.special_op_id();
+ SpecOp nContest0=m_specOp;
auto psk_on = m_config.spot_to_psk_reporter ();
if (QDialog::Accepted == m_config.exec ()) {
checkMSK144ContestType();
@@ -1943,16 +1965,17 @@ void MainWindow::on_actionSettings_triggered() //Setup Dialog
ui->actionEnable_AP_JT65->setVisible(false);
ui->actionAuto_Clear_Avg->setVisible(false);
}
- if(m_config.special_op_id()!=nContest0) {
+ m_specOp=m_config.special_op_id();
+ if(m_specOp!=nContest0) {
ui->tx1->setEnabled(true);
ui->txb1->setEnabled(true);
}
chkFT4();
- if(SpecOp::EU_VHF==m_config.special_op_id() and m_config.my_grid().size()<6) {
+ if(SpecOp::EU_VHF==m_specOp and m_config.my_grid().size()<6) {
MessageBox::information_message (this,
"EU VHF Contest messages require a 6-character locator.");
}
- if((m_config.special_op_id()==SpecOp::FOX or m_config.special_op_id()==SpecOp::HOUND) and
+ if((m_specOp==SpecOp::FOX or m_specOp==SpecOp::HOUND) and
m_mode!="FT8") {
MessageBox::information_message (this,
"Fox-and-Hound operation is available only in FT8 mode.\nGo back and change your selection.");
@@ -2015,9 +2038,14 @@ void MainWindow::on_autoButton_clicked (bool checked)
if (!checked) m_bCallingCQ = false;
statusUpdate ();
m_bEchoTxOK=false;
- if(m_auto and (m_mode=="Echo")) {
- m_nclearave=1;
- echocom_.nsum=0;
+ if(m_mode=="Echo") {
+ if(m_auto) {
+ m_nclearave=1;
+ echocom_.nsum=0;
+ m_astroWidget->selectOwnEcho();
+ } else {
+ m_astroWidget->selectOnDxEcho();
+ }
}
m_tAutoOn=QDateTime::currentMSecsSinceEpoch()/1000;
}
@@ -2036,7 +2064,7 @@ void MainWindow::auto_tx_mode (bool state)
void MainWindow::keyPressEvent (QKeyEvent * e)
{
- if(SpecOp::FOX == m_config.special_op_id()) {
+ if(SpecOp::FOX == m_specOp) {
switch (e->key()) {
case Qt::Key_Return:
doubleClickOnCall2(Qt::KeyboardModifier(Qt::ShiftModifier + Qt::ControlModifier + Qt::AltModifier));
@@ -2051,7 +2079,7 @@ void MainWindow::keyPressEvent (QKeyEvent * e)
QMainWindow::keyPressEvent (e);
}
- if(SpecOp::HOUND == m_config.special_op_id()) {
+ if(SpecOp::HOUND == m_specOp) {
switch (e->key()) {
case Qt::Key_Return:
auto_tx_mode(true);
@@ -2186,11 +2214,11 @@ void MainWindow::keyPressEvent (QKeyEvent * e)
abortQSO();
return;
case Qt::Key_E:
- if((e->modifiers() & Qt::ShiftModifier) and SpecOp::FOX > m_config.special_op_id()) {
+ if((e->modifiers() & Qt::ShiftModifier) and m_specOp!=SpecOp::FOX and m_specOp!=SpecOp::HOUND) {
ui->txFirstCheckBox->setChecked(false);
return;
}
- else if((e->modifiers() & Qt::ControlModifier) and SpecOp::FOX > m_config.special_op_id()) {
+ else if((e->modifiers() & Qt::ControlModifier) and m_specOp!=SpecOp::FOX and m_specOp!=SpecOp::HOUND) {
ui->txFirstCheckBox->setChecked(true);
return;
}
@@ -3192,8 +3220,8 @@ void MainWindow::decode() //decode()
dec_data.params.nfa=m_wideGraph->nStartFreq();
dec_data.params.nfSplit=m_wideGraph->Fmin();
dec_data.params.nfb=m_wideGraph->Fmax();
- if(m_mode=="FT8" and SpecOp::HOUND == m_config.special_op_id() and !ui->cbRxAll->isChecked()) dec_data.params.nfb=1000;
- if(m_mode=="FT8" and SpecOp::FOX == m_config.special_op_id() ) dec_data.params.nfqso=200;
+ if(m_mode=="FT8" and SpecOp::HOUND == m_specOp and !ui->cbRxAll->isChecked()) dec_data.params.nfb=1000;
+ if(m_mode=="FT8" and SpecOp::FOX == m_specOp ) dec_data.params.nfqso=200;
dec_data.params.ntol=ui->sbFtol->value ();
if(!m_config.enable_VHF_features()) {
dec_data.params.ntol=20;
@@ -3246,7 +3274,7 @@ void MainWindow::decode() //decode()
dec_data.params.emedelay=0.0;
if(m_config.decode_at_52s()) dec_data.params.emedelay=2.5;
dec_data.params.minSync=ui->syncSpinBox->isVisible () ? m_minSync : 0;
- dec_data.params.nexp_decode = static_cast (m_config.special_op_id());
+ dec_data.params.nexp_decode = static_cast (m_specOp);
if(m_config.single_decode()) dec_data.params.nexp_decode += 32;
if(m_config.enable_VHF_features()) dec_data.params.nexp_decode += 64;
if(m_mode.startsWith("FST4")) dec_data.params.nexp_decode += 256*(ui->sbNB->value()+3);
@@ -3409,7 +3437,7 @@ void MainWindow::decodeDone ()
ui->DecodeButton->setChecked (false);
decodeBusy(false);
m_RxLog=0;
- if(SpecOp::FOX == m_config.special_op_id()) houndCallers();
+ if(SpecOp::FOX == m_specOp) houndCallers();
to_jt9(m_ihsym,-1,1); //Tell jt9 we know it has finished
m_startAnother=m_loopall;
@@ -3602,7 +3630,7 @@ void MainWindow::readFromStdout() //readFromStdout
bool bDisplayPoints = false;
if(m_ActiveStationsWidget!=NULL) {
bDisplayPoints=(m_mode=="FT4" or m_mode=="FT8") and
- (m_config.special_op_id()==SpecOp::ARRL_DIGI or m_ActiveStationsWidget->isVisible());
+ (m_specOp==SpecOp::ARRL_DIGI or m_ActiveStationsWidget->isVisible());
}
while(proc_jt9.canReadLine()) {
auto line_read = proc_jt9.readLine ();
@@ -3684,7 +3712,7 @@ void MainWindow::readFromStdout() //readFromStdout
if (line_read.left(ntime) != m_tBlankLine) {
ui->decodedTextBrowser->new_period ();
if (m_config.insert_blank ()
- && SpecOp::FOX != m_config.special_op_id()) {
+ && SpecOp::FOX != m_specOp) {
QString band;
if(((QDateTime::currentMSecsSinceEpoch() / 1000 - m_secBandChanged) > 4*int(m_TRperiod)/4)
or m_displayBand) {
@@ -3701,7 +3729,7 @@ void MainWindow::readFromStdout() //readFromStdout
DecodedText decodedtext0 {QString::fromUtf8(line_read.constData())};
DecodedText decodedtext {QString::fromUtf8(line_read.constData()).remove("TU; ")};
- if(m_mode=="FT8" and SpecOp::FOX == m_config.special_op_id() and
+ if(m_mode=="FT8" and SpecOp::FOX == m_specOp and
(decodedtext.string().contains("R+") or decodedtext.string().contains("R-"))) {
auto for_us = decodedtext.string().contains(" " + m_config.my_callsign() + " ") or
decodedtext.string().contains(" "+m_baseCall) or
@@ -3717,7 +3745,7 @@ void MainWindow::readFromStdout() //readFromStdout
//Left (Band activity) window
if(!bAvgMsg) {
- if(m_mode=="FT8" and SpecOp::FOX == m_config.special_op_id()) {
+ if(m_mode=="FT8" and SpecOp::FOX == m_specOp) {
if(!m_bDisplayedOnce) {
// This hack sets the font. Surely there's a better way!
DecodedText dt{"."};
@@ -3801,7 +3829,7 @@ void MainWindow::readFromStdout() //readFromStdout
for_us = false;
}
}
- if(m_bCallingCQ && !m_bAutoReply && for_us && SpecOp::FOX > m_config.special_op_id()) {
+ if(m_bCallingCQ && !m_bAutoReply && for_us && m_specOp!=SpecOp::FOX && m_specOp!=SpecOp::HOUND) {
bool bProcessMsgNormally=ui->respondComboBox->currentText()=="CQ: First" or
(ui->respondComboBox->currentText()=="CQ: Max Dist" and m_ActiveStationsWidget==NULL) or
(m_ActiveStationsWidget!=NULL and !m_ActiveStationsWidget->isVisible());
@@ -3839,7 +3867,7 @@ void MainWindow::readFromStdout() //readFromStdout
m_bDoubleClicked=true;
ui->dxCallEntry->setText(deCall);
int m_ntx=2;
- bool bContest=m_config.special_op_id()==SpecOp::NA_VHF or m_config.special_op_id()==SpecOp::ARRL_DIGI;
+ bool bContest=m_specOp==SpecOp::NA_VHF or m_specOp==SpecOp::ARRL_DIGI;
if(bContest) m_ntx=3;
if(deGrid.contains(grid_regexp)) {
m_deGrid=deGrid;
@@ -3858,9 +3886,9 @@ void MainWindow::readFromStdout() //readFromStdout
}
}
- if(SpecOp::FOX==m_config.special_op_id() and decodedtext.string().contains(" DE ")) for_us=true; //Hound with compound callsign
- if(SpecOp::FOX==m_config.special_op_id() and for_us and (audioFreq<1000)) bDisplayRight=true;
- if(SpecOp::FOX!=m_config.special_op_id() and (for_us or (abs(audioFreq - m_wideGraph->rxFreq()) <= 10))) bDisplayRight=true;
+ if(SpecOp::FOX==m_specOp and decodedtext.string().contains(" DE ")) for_us=true; //Hound with compound callsign
+ if(SpecOp::FOX==m_specOp and for_us and (audioFreq<1000)) bDisplayRight=true;
+ if(SpecOp::FOX!=m_specOp and (for_us or (abs(audioFreq - m_wideGraph->rxFreq()) <= 10))) bDisplayRight=true;
}
} else {
if((abs(audioFreq - m_wideGraph->rxFreq()) <= 10) and
@@ -3879,7 +3907,7 @@ void MainWindow::readFromStdout() //readFromStdout
postDecode (true, decodedtext.string ());
- if(m_mode=="FT8" and SpecOp::HOUND==m_config.special_op_id()) {
+ if(m_mode=="FT8" and SpecOp::HOUND==m_specOp) {
if(decodedtext.string().contains(";")) {
QStringList w=decodedtext.string().mid(24).split(" ",SkipEmptyParts);
QString foxCall=w.at(3);
@@ -3921,7 +3949,7 @@ void MainWindow::readFromStdout() //readFromStdout
}
//### I think this is where we are preventing Hounds from spotting Fox ###
- if(m_mode!="FT8" or (SpecOp::HOUND != m_config.special_op_id())) {
+ if(m_mode!="FT8" or (SpecOp::HOUND != m_specOp)) {
if(m_mode=="FT8" or m_mode=="FT4" or m_mode=="Q65"
or m_mode=="JT4" or m_mode=="JT65" or m_mode=="JT9" or m_mode=="FST4") {
auto_sequence (decodedtext, 25, 50);
@@ -4045,7 +4073,7 @@ void MainWindow::auto_sequence (DecodedText const& message, unsigned start_toler
// look for type 2 compound call replies on our Tx and Rx offsets
&& ((within_tolerance && "DE" == message_words.at (2))
|| message_words.at (2).contains (m_baseCall))))) {
- if(SpecOp::FOX != m_config.special_op_id()) processMessage (message);
+ if(SpecOp::FOX != m_specOp) processMessage (message);
}
}
}
@@ -4150,14 +4178,14 @@ void MainWindow::guiUpdate()
int nsec=ms/1000;
double tsec=0.001*ms;
double t2p=fmod(tsec,2*m_TRperiod);
- double s6=fmod(tsec,6.0);
+ m_s6=fmod(tsec,6.0);
int nseq = fmod(double(nsec),m_TRperiod);
m_tRemaining=m_TRperiod - fmod(tsec,m_TRperiod);
if(m_mode=="Echo") {
tx1=0.0;
tx2=txDuration;
- if(m_auto and s6>4.0) m_bEchoTxOK=true;
+ if(m_auto and m_s6>4.0) m_bEchoTxOK=true;
if(m_transmitting) m_bEchoTxed=true;
}
@@ -4213,7 +4241,7 @@ void MainWindow::guiUpdate()
}
}
- if(m_mode=="FT8" and SpecOp::FOX==m_config.special_op_id()) {
+ if(m_mode=="FT8" and SpecOp::FOX==m_specOp) {
// Don't allow Fox mode in any of the default FT8 sub-bands.
qint32 ft8Freq[]={1840,3573,7074,10136,14074,18100,21074,24915,28074,50313,70100};
for(int i=0; i<11; i++) {
@@ -4255,12 +4283,12 @@ void MainWindow::guiUpdate()
g_iptt = 1;
setRig ();
if(m_mode=="FT8") {
- if (SpecOp::FOX == m_config.special_op_id()) {
+ if (SpecOp::FOX == m_specOp) {
if (ui->TxFreqSpinBox->value() > 900) {
ui->TxFreqSpinBox->setValue(300);
}
}
- else if (SpecOp::HOUND == m_config.special_op_id()) {
+ else if (SpecOp::HOUND == m_specOp) {
if(m_auto && !m_tune) {
if (ui->TxFreqSpinBox->value() < 999 && m_ntx != 3) {
// Hound randomized range: 1000-3000 Hz
@@ -4286,7 +4314,7 @@ void MainWindow::guiUpdate()
// If HoldTxFreq is not checked, randomize Fox's Tx Freq
// NB: Maybe this should be done no more than once every 5 minutes or so ?
- if(m_mode=="FT8" and SpecOp::FOX==m_config.special_op_id() and !ui->cbHoldTxFreq->isChecked()) {
+ if(m_mode=="FT8" and SpecOp::FOX==m_specOp and !ui->cbHoldTxFreq->isChecked()) {
#if QT_VERSION >= QT_VERSION_CHECK (5, 15, 0)
ui->TxFreqSpinBox->setValue (QRandomGenerator::global ()->bounded (300, 599));
#else
@@ -4328,7 +4356,7 @@ void MainWindow::guiUpdate()
if(m_mode=="WSPR") {
ba=WSPR_message().toLatin1();
} else {
- if(SpecOp::HOUND == m_config.special_op_id() and m_ntx!=3) { //Hound transmits only Tx1 or Tx3
+ if(SpecOp::HOUND == m_specOp and m_ntx!=3) { //Hound transmits only Tx1 or Tx3
m_ntx=1;
ui->txrb1->setChecked(true);
}
@@ -4382,7 +4410,7 @@ void MainWindow::guiUpdate()
}
if(m_mode=="FT8") {
- if(SpecOp::FOX==m_config.special_op_id() and ui->tabWidget->currentIndex()==1) {
+ if(SpecOp::FOX==m_specOp and ui->tabWidget->currentIndex()==1) {
foxTxSequencer();
} else {
int i3=0;
@@ -4399,7 +4427,7 @@ void MainWindow::guiUpdate()
int nwave=nsym*nsps;
gen_ft8wave_(const_cast(itone),&nsym,&nsps,&bt,&fsample,&f0,foxcom_.wave,
foxcom_.wave,&icmplx,&nwave);
- if(SpecOp::FOX == m_config.special_op_id()) {
+ if(SpecOp::FOX == m_specOp) {
//Fox must generate the full Tx waveform, not just an itone[] array.
QString fm = QString::fromStdString(message).trimmed();
foxGenWaveform(0,fm);
@@ -4482,12 +4510,12 @@ void MainWindow::guiUpdate()
&fsample,&hmod,&f0,&icmplx,foxcom_.wave,foxcom_.wave);
}
- if(SpecOp::EU_VHF==m_config.special_op_id()) {
+ if(SpecOp::EU_VHF==m_specOp) {
if(m_ntx==2) m_xSent=ui->tx2->text().right(13);
if(m_ntx==3) m_xSent=ui->tx3->text().right(13);
}
- if(SpecOp::FIELD_DAY==m_config.special_op_id() or SpecOp::RTTY==m_config.special_op_id()) {
+ if(SpecOp::FIELD_DAY==m_specOp or SpecOp::RTTY==m_specOp) {
if(m_ntx==2 or m_ntx==3) {
QStringList t=ui->tx2->text().split(' ', SkipEmptyParts);
int n=t.size();
@@ -4618,7 +4646,7 @@ void MainWindow::guiUpdate()
if (m_mode != "FST4W" && m_mode != "WSPR")
{
if(!m_tune) write_all("Tx",m_currentMessage);
- if (m_config.TX_messages () && !m_tune && SpecOp::FOX!=m_config.special_op_id())
+ if (m_config.TX_messages () && !m_tune && SpecOp::FOX!=m_specOp)
{
ui->decodedTextBrowser2->displayTransmittedText(current_message.trimmed(),
m_mode,ui->TxFreqSpinBox->value(),m_bFastMode,m_TRperiod);
@@ -4661,16 +4689,16 @@ void MainWindow::guiUpdate()
if(m_mode=="FT8" or m_mode=="MSK144" or m_mode=="FT4" || "Q65" == m_mode) {
if(ui->txrb1->isEnabled() and
- (SpecOp::NA_VHF==m_config.special_op_id() or
- SpecOp::FIELD_DAY==m_config.special_op_id() or
- SpecOp::RTTY==m_config.special_op_id() or
- SpecOp::WW_DIGI==m_config.special_op_id() or
- SpecOp::ARRL_DIGI==m_config.special_op_id()) ) {
+ (SpecOp::NA_VHF==m_specOp or
+ SpecOp::FIELD_DAY==m_specOp or
+ SpecOp::RTTY==m_specOp or
+ SpecOp::WW_DIGI==m_specOp or
+ SpecOp::ARRL_DIGI==m_specOp) ) {
//We're in a contest-like mode other than EU_VHF: start QSO with Tx2.
ui->tx1->setEnabled(false);
ui->txb1->setEnabled(false);
}
- if(!ui->tx1->isEnabled() and SpecOp::EU_VHF==m_config.special_op_id()) {
+ if(!ui->tx1->isEnabled() and SpecOp::EU_VHF==m_specOp) {
//We're in EU_VHF mode: start QSO with Tx1.
ui->tx1->setEnabled(true);
ui->txb1->setEnabled(true);
@@ -4679,11 +4707,11 @@ void MainWindow::guiUpdate()
//Once per second (onesec)
if(nsec != m_sec0) {
-// qDebug() << "AAA" << nsec;
+// qDebug() << "AAA" << nsec << int(m_config.special_op_id()) << int(m_specOp);
if(m_mode=="FST4") chk_FST4_freq_range();
m_currentBand=m_config.bands()->find(m_freqNominal);
- if( SpecOp::HOUND == m_config.special_op_id() ) {
+ if( SpecOp::HOUND == m_specOp ) {
qint32 tHound=QDateTime::currentMSecsSinceEpoch()/1000 - m_tAutoOn;
//To keep calling Fox, Hound must reactivate Enable Tx at least once every 2 minutes
if(tHound >= 120 and m_ntx==1) auto_tx_mode(false);
@@ -4691,9 +4719,11 @@ void MainWindow::guiUpdate()
progressBar.setVisible(true);
progressBar.setFormat ("%v/%m");
- if(m_auto and m_mode=="Echo" and m_bEchoTxOK) {
+ if(m_mode=="Echo") {
progressBar.setMaximum(3);
- progressBar.setValue(int(s6));
+ int n=0;
+ if(m_transmitting or m_monitoring) n=int(m_s6)%3;
+ progressBar.setValue(n);
}
if(m_mode!="Echo") {
if(m_monitoring or m_transmitting) {
@@ -4714,7 +4744,7 @@ void MainWindow::guiUpdate()
if(m_transmitting) {
char s[42];
- if(SpecOp::FOX==m_config.special_op_id() and ui->tabWidget->currentIndex()==1) {
+ if(SpecOp::FOX==m_specOp and ui->tabWidget->currentIndex()==1) {
sprintf(s,"Tx: %d Slots",foxcom_.nslots);
} else {
sprintf(s,"Tx: %s",msgsent);
@@ -4736,7 +4766,7 @@ void MainWindow::guiUpdate()
} else {
s[40]=0;
QString t{QString::fromLatin1(s)};
- if(SpecOp::FOX==m_config.special_op_id() and ui->tabWidget->currentIndex()==1 and foxcom_.nslots==1) {
+ if(SpecOp::FOX==m_specOp and ui->tabWidget->currentIndex()==1 and foxcom_.nslots==1) {
t=m_fm1.trimmed();
}
if(m_mode=="FT4") t="Tx: "+ m_currentMessage;
@@ -4915,7 +4945,7 @@ bool MainWindow::elide_tx1_not_allowed () const
{
auto const& my_callsign = m_config.my_callsign ();
return
- (m_mode=="FT8" && SpecOp::HOUND == m_config.special_op_id())
+ (m_mode=="FT8" && SpecOp::HOUND == m_specOp)
|| ((m_mode.startsWith ("FT") || "MSK144" == m_mode || "Q65" == m_mode || "FST4" == m_mode)
&& Radio::is_77bit_nonstandard_callsign (my_callsign))
|| (my_callsign != m_baseCall && !shortList (my_callsign));
@@ -5089,7 +5119,7 @@ void MainWindow::doubleClickOnCall(Qt::KeyboardModifiers modifiers)
cursor.setPosition(cursor.selectionStart());
}
- if(SpecOp::FOX==m_config.special_op_id() and m_decodedText2) {
+ if(SpecOp::FOX==m_specOp and m_decodedText2) {
if(m_houndQueue.count()<10 and m_nSortedHounds>0) {
QString t=cursor.block().text();
selectHound(t);
@@ -5147,8 +5177,8 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
int nmod = fmod(double(message.timeInSeconds()),2.0*m_TRperiod);
m_txFirst=(nmod!=0);
- if( SpecOp::HOUND == m_config.special_op_id() ) m_txFirst=false; //Hound must not transmit first
- if( SpecOp::FOX == m_config.special_op_id() ) m_txFirst=true; //Fox must always transmit first
+ if( SpecOp::HOUND == m_specOp ) m_txFirst=false; //Hound must not transmit first
+ if( SpecOp::FOX == m_specOp ) m_txFirst=true; //Fox must always transmit first
ui->txFirstCheckBox->setChecked(m_txFirst);
auto const& message_words = message.messageWords ();
@@ -5192,7 +5222,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
}
// ignore calls by other hounds
- if (SpecOp::HOUND == m_config.special_op_id()
+ if (SpecOp::HOUND == m_specOp
&& message.messageWords ().indexOf (QRegularExpression {R"(R\+-[0-9]+)"}) >= 1)
{
return;
@@ -5207,7 +5237,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
&& firstcall != m_config.my_callsign () && firstcall != m_baseCall
&& firstcall != "DE")
|| "CQ" == firstcall || "QRZ" == firstcall || ctrl || shift) {
- if (((SpecOp::HOUND != m_config.special_op_id()) || m_mode != "FT8")
+ if (((SpecOp::HOUND != m_specOp) || m_mode != "FT8")
&& (!ui->cbHoldTxFreq->isChecked () || shift || ctrl)) {
ui->TxFreqSpinBox->setValue(frequency);
}
@@ -5244,7 +5274,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
}
bool bRTTY = (nrpt>=529 and nrpt<=599);
bool bEU_VHF_w2=(nrpt>=520001 and nrpt<=594000);
- if(bEU_VHF_w2 and SpecOp::EU_VHF!=m_config.special_op_id()) {
+ if(bEU_VHF_w2 and SpecOp::EU_VHF!=m_specOp) {
auto const& msg = tr("Should you switch to EU VHF Contest mode?\n\n"
"To do so, check 'Special operating activity' and\n"
"'EU VHF Contest' on the Settings | Advanced tab.");
@@ -5262,17 +5292,17 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
m_xRcvd=t.at(n-2) + " " + t.at(n-1);
t0=t.at(n-3);
}
- if(bFieldDay_msg and SpecOp::FIELD_DAY!=m_config.special_op_id()) {
+ if(bFieldDay_msg and SpecOp::FIELD_DAY!=m_specOp) {
// ### Should be in ARRL Field Day mode ??? ###
MessageBox::information_message (this, tr ("Should you switch to ARRL Field Day mode?"));
}
- if(bRTTY and SpecOp::RTTY != m_config.special_op_id()) {
+ if(bRTTY and SpecOp::RTTY != m_specOp) {
// ### Should be in RTTY contest mode ??? ###
MessageBox::information_message (this, tr ("Should you switch to RTTY contest mode?"));
}
- if(SpecOp::EU_VHF==m_config.special_op_id() and message_words.at(2).contains(m_baseCall) and
+ if(SpecOp::EU_VHF==m_specOp and message_words.at(2).contains(m_baseCall) and
(!message_words.at(3).contains(qso_partner_base_call)) and (!m_bDoubleClicked)) {
return;
}
@@ -5282,9 +5312,9 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
&& (message_words.at(2).contains(m_baseCall) || "DE" == message_words.at(2))
&& (message_words.at(3).contains(qso_partner_base_call) or m_bDoubleClicked
or bEU_VHF_w2 or (m_QSOProgress==CALLING))) {
- if(message_words.at(4).contains(grid_regexp) and SpecOp::EU_VHF!=m_config.special_op_id()) {
- if((SpecOp::NA_VHF==m_config.special_op_id() or SpecOp::WW_DIGI==m_config.special_op_id() or
- SpecOp::ARRL_DIGI==m_config.special_op_id() )
+ if(message_words.at(4).contains(grid_regexp) and SpecOp::EU_VHF!=m_specOp) {
+ if((SpecOp::NA_VHF==m_specOp or SpecOp::WW_DIGI==m_specOp or
+ SpecOp::ARRL_DIGI==m_specOp )
and bContestOK) {
setTxMsg(3);
m_QSOProgress=ROGER_REPORT;
@@ -5297,7 +5327,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
m_QSOProgress=REPORT;
}
}
- } else if(w34.contains(grid_regexp) and SpecOp::EU_VHF==m_config.special_op_id()) {
+ } else if(w34.contains(grid_regexp) and SpecOp::EU_VHF==m_specOp) {
if(nrpt==0) {
setTxMsg(2);
@@ -5311,7 +5341,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
m_QSOProgress=ROGER_REPORT;
}
}
- } else if(SpecOp::RTTY == m_config.special_op_id() and bRTTY) {
+ } else if(SpecOp::RTTY == m_specOp and bRTTY) {
if(w2=="R") {
setTxMsg(4);
m_QSOProgress=ROGERS;
@@ -5320,7 +5350,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
m_QSOProgress=ROGER_REPORT;
}
m_xRcvd=t[n-2] + " " + t[n-1];
- } else if(SpecOp::FIELD_DAY==m_config.special_op_id() and bFieldDay_msg) {
+ } else if(SpecOp::FIELD_DAY==m_specOp and bFieldDay_msg) {
if(t0=="R") {
setTxMsg(4);
m_QSOProgress=ROGERS;
@@ -5338,7 +5368,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
if(m_mode=="FT4" and "RR73" == word_3) m_dateTimeRcvdRR73=QDateTime::currentDateTimeUtc();
m_bTUmsg=false;
m_nextCall=""; //### Temporary: disable use of "TU;" message
- if(SpecOp::RTTY == m_config.special_op_id() and m_nextCall!="") {
+ if(SpecOp::RTTY == m_specOp and m_nextCall!="") {
// We're in RTTY contest and have "nextCall" queued up: send a "TU; ..." message
if (m_config.prompt_to_log() || m_config.autoLog()) {
logQSOTimer.start(0);
@@ -5352,12 +5382,6 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
ui->tx3->setText(t);
m_bTUmsg=true;
} else {
-
-// The following test was to skip sending 73 after receiving RR73, in a contest mode.
-// I'm disabling it so thet we always send 73 after receiving RR73.
-// if (m_QSOProgress > CALLING && m_QSOProgress < SIGNOFF
-// && SpecOp::NONE < m_config.special_op_id () && SpecOp::FOX > m_config.special_op_id ()
-// && ("RR73" == word_3 || 73 == word_3_as_number))
if (false) // Always Send 73 after receiving RRR or RR73, even in contest mode.
{
if (m_config.prompt_to_log() || m_config.autoLog()) {
@@ -5416,7 +5440,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
&& word_3.startsWith ('R')) {
m_ntx=4;
m_QSOProgress = ROGERS;
- if(SpecOp::RTTY == m_config.special_op_id()) {
+ if(SpecOp::RTTY == m_specOp) {
int n=t.size();
int nRpt=t[n-2].toInt();
if(nRpt>=529 and nRpt<=599) m_xRcvd=t[n-2] + " " + t[n-1];
@@ -5427,9 +5451,9 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
if ((word_3_as_number >= -50 && word_3_as_number <= 49)
|| (word_3_as_number >= 529 && word_3_as_number <= 599))
{
- if(SpecOp::EU_VHF==m_config.special_op_id() or
- SpecOp::FIELD_DAY==m_config.special_op_id() or
- SpecOp::RTTY==m_config.special_op_id())
+ if(SpecOp::EU_VHF==m_specOp or
+ SpecOp::FIELD_DAY==m_specOp or
+ SpecOp::RTTY==m_specOp)
{
setTxMsg(2);
m_QSOProgress=REPORT;
@@ -5654,16 +5678,16 @@ void MainWindow::genCQMsg ()
QString t=ui->tx6->text();
QStringList tlist=t.split(" ");
if((m_mode=="FT4" or m_mode=="FT8" or m_mode=="MSK144" || "Q65" == m_mode) and
- SpecOp::NONE != m_config.special_op_id() and
+ SpecOp::NONE != m_specOp and
( tlist.at(1)==my_callsign or
tlist.at(2)==my_callsign ) and
stdCall(my_callsign)) {
- if(SpecOp::NA_VHF == m_config.special_op_id()) m_cqStr="TEST";
- if(SpecOp::EU_VHF == m_config.special_op_id()) m_cqStr="TEST";
- if(SpecOp::FIELD_DAY == m_config.special_op_id()) m_cqStr="FD";
- if(SpecOp::RTTY == m_config.special_op_id()) m_cqStr="RU";
- if(SpecOp::WW_DIGI == m_config.special_op_id()) m_cqStr="WW";
- if(SpecOp::ARRL_DIGI == m_config.special_op_id()) m_cqStr="TEST";
+ if(SpecOp::NA_VHF == m_specOp) m_cqStr="TEST";
+ if(SpecOp::EU_VHF == m_specOp) m_cqStr="TEST";
+ if(SpecOp::FIELD_DAY == m_specOp) m_cqStr="FD";
+ if(SpecOp::RTTY == m_specOp) m_cqStr="RU";
+ if(SpecOp::WW_DIGI == m_specOp) m_cqStr="WW";
+ if(SpecOp::ARRL_DIGI == m_specOp) m_cqStr="TEST";
if( tlist.at(1)==my_callsign ) {
t="CQ " + m_cqStr + " " + tlist.at(1) + " " + tlist.at(2);
} else {
@@ -5771,11 +5795,11 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
t=t0a;
msgtype(t0a + my_grid, ui->tx1);
}
- if(SpecOp::NA_VHF==m_config.special_op_id()) sent=my_grid;
- if(SpecOp::WW_DIGI==m_config.special_op_id()) sent=my_grid;
- if(SpecOp::ARRL_DIGI==m_config.special_op_id()) sent=my_grid;
- if(SpecOp::FIELD_DAY==m_config.special_op_id()) sent=m_config.Field_Day_Exchange();
- if(SpecOp::RTTY==m_config.special_op_id()) {
+ if(SpecOp::NA_VHF==m_specOp) sent=my_grid;
+ if(SpecOp::WW_DIGI==m_specOp) sent=my_grid;
+ if(SpecOp::ARRL_DIGI==m_specOp) sent=my_grid;
+ if(SpecOp::FIELD_DAY==m_specOp) sent=m_config.Field_Day_Exchange();
+ if(SpecOp::RTTY==m_specOp) {
sent=rst + m_config.RTTY_Exchange();
QString t1=m_config.RTTY_Exchange();
if(t1=="DX" or t1=="#") {
@@ -5783,7 +5807,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
sent=rst + t1;
}
}
- if(SpecOp::EU_VHF==m_config.special_op_id()) {
+ if(SpecOp::EU_VHF==m_specOp) {
QString a;
t="<" + t0s.split(" ").at(0) + "> <" + t0s.split(" ").at(1) + "> ";
a = a.asprintf("%4.4d ",ui->sbSerialNumber->value());
@@ -5792,7 +5816,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
msgtype(t + sent, ui->tx2);
if(sent==rpt) msgtype(t + "R" + sent, ui->tx3);
if(sent!=rpt) msgtype(t + "R " + sent, ui->tx3);
- if(m_mode=="FT4" and SpecOp::RTTY==m_config.special_op_id()) {
+ if(m_mode=="FT4" and SpecOp::RTTY==m_specOp) {
QDateTime now=QDateTime::currentDateTimeUtc();
int sinceTx3 = m_dateTimeSentTx3.secsTo(now);
int sinceRR73 = m_dateTimeRcvdRR73.secsTo(now);
@@ -5806,7 +5830,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
if(m_mode=="MSK144" and m_bShMsgs) {
int i=t0s.length()-1;
t0="<" + t0s.mid(0,i) + "> ";
- if(SpecOp::NA_VHF != m_config.special_op_id()) {
+ if(SpecOp::NA_VHF != m_specOp) {
if(n<=-2) n=-3;
if(n>=-1 and n<=1) n=0;
if(n>=2 and n<=4) n=3;
@@ -5826,7 +5850,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
}
if(m_mode=="MSK144" and m_bShMsgs) {
- if(m_config.special_op_id()==SpecOp::NONE) {
+ if(m_specOp==SpecOp::NONE) {
t=t0 + "R" + rpt;
msgtype(t, ui->tx3);
}
@@ -5871,7 +5895,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
case Configuration::type_2_msg_1_full:
msgtype(t + my_grid, ui->tx1);
if (!eme_short_codes) {
- if(is77BitMode () && SpecOp::NA_VHF == m_config.special_op_id()) {
+ if(is77BitMode () && SpecOp::NA_VHF == m_specOp) {
msgtype(t + "R " + my_grid, ui->tx3); // #### Unreachable code
} else {
msgtype(t + "R" + rpt, ui->tx3);
@@ -5883,7 +5907,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
break;
case Configuration::type_2_msg_3_full:
- if (is77BitMode () && SpecOp::NA_VHF == m_config.special_op_id()) {
+ if (is77BitMode () && SpecOp::NA_VHF == m_specOp) {
msgtype(t + "R " + my_grid, ui->tx3);
msgtype(t + "RRR", ui->tx4);
} else {
@@ -5898,7 +5922,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
case Configuration::type_2_msg_5_only:
msgtype(t00 + my_grid, ui->tx1);
if (!eme_short_codes) {
- if (is77BitMode () && SpecOp::NA_VHF == m_config.special_op_id()) {
+ if (is77BitMode () && SpecOp::NA_VHF == m_specOp) {
msgtype(t + "R " + my_grid, ui->tx3); // #### Unreachable code
msgtype(t + "RRR", ui->tx4);
} else {
@@ -5919,7 +5943,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
msgtype(t, ui->tx5->lineEdit ());
}
} else {
- if (hisCall != hisBase and SpecOp::HOUND != m_config.special_op_id()) {
+ if (hisCall != hisBase and SpecOp::HOUND != m_specOp) {
if (shortList(hisCall)) {
// cfm we know his full call with a type 1 tx1 message
t = hisCall + " " + my_callsign;
@@ -5933,7 +5957,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
}
}
m_rpt=rpt;
- if(SpecOp::HOUND == m_config.special_op_id() and is_compound) ui->tx1->setText("DE " + my_callsign);
+ if(SpecOp::HOUND == m_specOp and is_compound) ui->tx1->setText("DE " + my_callsign);
}
void MainWindow::TxAgain()
@@ -5956,7 +5980,7 @@ void MainWindow::clearDX ()
m_qsoStop.clear ();
m_inQSOwith.clear();
genStdMsgs (QString {});
- if (m_mode=="FT8" and SpecOp::HOUND == m_config.special_op_id()) {
+ if (m_mode=="FT8" and SpecOp::HOUND == m_specOp) {
m_ntx=1;
ui->txrb1->setChecked(true);
} else {
@@ -6120,7 +6144,7 @@ void MainWindow::msgtype(QString t, QLineEdit* tx) //msgtype()
if(itype==7 and m_config.enable_VHF_features() and m_mode=="JT65") shortMsg=true;
if(m_mode=="MSK144" and t.mid(0,1)=="<") text=false;
if((m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT4" || "Q65" == m_mode) and
- SpecOp::NA_VHF==m_config.special_op_id()) {
+ SpecOp::NA_VHF==m_specOp) {
int i0=t.trimmed().length()-7;
if(t.mid(i0,3)==" R ") text=false;
}
@@ -6258,7 +6282,7 @@ void MainWindow::on_genStdMsgsPushButton_clicked() //genStdMsgs button
void MainWindow::cease_auto_Tx_after_QSO ()
{
- if (SpecOp::FOX != m_config.special_op_id ()
+ if (SpecOp::FOX != m_specOp
&& ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isEnabled () && ui->cbAutoSeq->isChecked ())
{
// ensure that auto Tx is disabled even if disable Tx
@@ -6284,7 +6308,7 @@ void MainWindow::on_logQSOButton_clicked() //Log QSO button
QString grid=m_hisGrid;
if(grid=="....") grid="";
- switch( m_config.special_op_id() )
+ switch( m_specOp )
{
case SpecOp::NA_VHF:
m_xSent=m_config.my_grid().left(4);
@@ -6356,10 +6380,9 @@ void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call,
}
}
- if(m_config.clear_DX () and SpecOp::HOUND != m_config.special_op_id()) clearDX ();
+ if(m_config.clear_DX () and SpecOp::HOUND != m_specOp) clearDX ();
m_dateTimeQSOOn = QDateTime {};
- auto special_op = m_config.special_op_id ();
- if (SpecOp::NONE < special_op && special_op < SpecOp::FOX) {
+ if(m_specOp!=SpecOp::NONE and m_specOp!=SpecOp::FOX and m_specOp!=SpecOp::HOUND) {
ui->sbSerialNumber->setValue(ui->sbSerialNumber->value() + 1);
}
@@ -6471,11 +6494,11 @@ void MainWindow::displayWidgets(qint64 n)
ui->pbBestSP->setVisible(m_mode=="FT4");
b=false;
if(m_mode=="FT4" or m_mode=="FT8" || "Q65" == m_mode) {
- b=SpecOp::EU_VHF==m_config.special_op_id() or
- ( SpecOp::RTTY==m_config.special_op_id() and
+ b=SpecOp::EU_VHF==m_specOp or
+ ( SpecOp::RTTY==m_specOp and
(m_config.RTTY_Exchange()=="DX" or m_config.RTTY_Exchange()=="#") );
}
- if(m_mode=="MSK144") b=SpecOp::EU_VHF==m_config.special_op_id();
+ if(m_mode=="MSK144") b=SpecOp::EU_VHF==m_specOp;
ui->sbSerialNumber->setVisible(b);
m_lastCallsign.clear (); // ensures Tx5 is updated for new modes
b=m_mode.startsWith("FST4");
@@ -6638,7 +6661,7 @@ void MainWindow::on_actionFT8_triggered()
m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe
m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe
ui->rh_decodes_title_label->setText(tr ("Rx Frequency"));
- if(SpecOp::FOX==m_config.special_op_id()) {
+ if(SpecOp::FOX==m_specOp) {
ui->lh_decodes_title_label->setText(tr ("Stations calling DXpedition %1").arg (m_config.my_callsign()));
ui->lh_decodes_headings_label->setText( "Call Grid dB Freq Dist Age Continent");
} else {
@@ -6657,7 +6680,7 @@ void MainWindow::on_actionFT8_triggered()
ui->txb6->setEnabled(true);
ui->txFirstCheckBox->setEnabled(true);
ui->cbAutoSeq->setEnabled(true);
- if(SpecOp::FOX==m_config.special_op_id()) {
+ if(SpecOp::FOX==m_specOp) {
ui->txFirstCheckBox->setChecked(true);
ui->txFirstCheckBox->setEnabled(false);
ui->cbHoldTxFreq->setChecked(true);
@@ -6669,7 +6692,7 @@ void MainWindow::on_actionFT8_triggered()
ui->labDXped->setText(tr ("Fox"));
on_fox_log_action_triggered();
}
- if(SpecOp::HOUND == m_config.special_op_id()) {
+ if(SpecOp::HOUND == m_specOp) {
ui->houndButton->setChecked(true);
ui->houndButton->setStyleSheet("background-color: #ff0000;");
ui->txFirstCheckBox->setChecked(false);
@@ -6693,19 +6716,19 @@ void MainWindow::on_actionFT8_triggered()
switch_mode (Modes::FT8);
}
- if(m_config.special_op_id() != SpecOp::HOUND) {
+ if(m_specOp != SpecOp::HOUND) {
ui->houndButton->setChecked(false);
ui->houndButton->setStyleSheet("");
}
- if (SpecOp::NONE < m_config.special_op_id () && SpecOp::FOX > m_config.special_op_id ()) {
+ if(m_specOp!=SpecOp::NONE and m_specOp!=SpecOp::FOX and m_specOp!=SpecOp::HOUND) {
QString t0="";
- if(SpecOp::NA_VHF==m_config.special_op_id()) t0="NA VHF";
- if(SpecOp::EU_VHF==m_config.special_op_id()) t0="EU VHF";
- if(SpecOp::FIELD_DAY==m_config.special_op_id()) t0="Field Day";
- if(SpecOp::RTTY==m_config.special_op_id()) t0="RTTY";
- if(SpecOp::WW_DIGI==m_config.special_op_id()) t0="WW_DIGI";
- if(SpecOp::ARRL_DIGI==m_config.special_op_id()) t0="ARRL_DIGI";
+ if(SpecOp::NA_VHF==m_specOp) t0="NA VHF";
+ if(SpecOp::EU_VHF==m_specOp) t0="EU VHF";
+ if(SpecOp::FIELD_DAY==m_specOp) t0="Field Day";
+ if(SpecOp::RTTY==m_specOp) t0="FT RU";
+ if(SpecOp::WW_DIGI==m_specOp) t0="WW_DIGI";
+ if(SpecOp::ARRL_DIGI==m_specOp) t0="ARRL_DIGI";
if(t0=="") {
ui->labDXped->setVisible(false);
} else {
@@ -6715,7 +6738,7 @@ void MainWindow::on_actionFT8_triggered()
on_contest_log_action_triggered();
}
- if((SpecOp::FOX==m_config.special_op_id() or SpecOp::HOUND==m_config.special_op_id()) and !m_config.split_mode() and !m_bWarnedSplit) {
+ if((SpecOp::FOX==m_specOp or SpecOp::HOUND==m_specOp) and !m_config.split_mode() and !m_bWarnedSplit) {
QString errorMsg;
MessageBox::critical_message (this,
"Operation in FT8 DXpedition mode normally requires\n"
@@ -6933,14 +6956,14 @@ void MainWindow::on_actionQ65_triggered()
ui->rh_decodes_headings_label->setText("UTC dB DT Freq " + tr ("Message"));
statusChanged();
- if (SpecOp::NONE < m_config.special_op_id () && SpecOp::FOX > m_config.special_op_id ()) {
+ if(m_specOp!=SpecOp::NONE and m_specOp!=SpecOp::FOX and m_specOp!=SpecOp::HOUND) {
QString t0="";
- if(SpecOp::NA_VHF==m_config.special_op_id()) t0="NA VHF";
- if(SpecOp::EU_VHF==m_config.special_op_id()) t0="EU VHF";
- if(SpecOp::FIELD_DAY==m_config.special_op_id()) t0="Field Day";
- if(SpecOp::RTTY==m_config.special_op_id()) t0="RTTY";
- if(SpecOp::WW_DIGI==m_config.special_op_id()) t0="WW_DIGI";
- if(SpecOp::ARRL_DIGI==m_config.special_op_id()) t0="ARRL_DIGI";
+ if(SpecOp::NA_VHF==m_specOp) t0="NA VHF";
+ if(SpecOp::EU_VHF==m_specOp) t0="EU VHF";
+ if(SpecOp::FIELD_DAY==m_specOp) t0="Field Day";
+ if(SpecOp::RTTY==m_specOp) t0="FT RU";
+ if(SpecOp::WW_DIGI==m_specOp) t0="WW_DIGI";
+ if(SpecOp::ARRL_DIGI==m_specOp) t0="ARRL_DIGI";
if(t0=="") {
ui->labDXped->setVisible(false);
} else {
@@ -6954,7 +6977,7 @@ void MainWindow::on_actionQ65_triggered()
void MainWindow::on_actionMSK144_triggered()
{
- if(SpecOp::EU_VHF < m_config.special_op_id()) {
+ if(SpecOp::EU_VHF < m_specOp) {
// We are rejecting the requested mode change, so re-check the old mode
if("FT8"==m_mode) ui->actionFT8->setChecked(true);
if("JT4"==m_mode) ui->actionJT4->setChecked(true);
@@ -6969,7 +6992,7 @@ void MainWindow::on_actionMSK144_triggered()
// Make sure that MSK144 is not checked.
ui->actionMSK144->setChecked(false);
MessageBox::warning_message (this, tr ("Improper mode"),
- "MSK144 not available if Fox, Hound, Field Day, RTTY, or WW Digi contest is selected.");
+ "MSK144 not available if Fox, Hound, Field Day, FT Roundup, WW Digi. or ARRL Digi contest is selected.");
return;
}
m_mode="MSK144";
@@ -7016,8 +7039,8 @@ void MainWindow::on_actionMSK144_triggered()
statusChanged();
QString t0="";
- if(SpecOp::NA_VHF==m_config.special_op_id()) t0="NA VHF";
- if(SpecOp::EU_VHF==m_config.special_op_id()) t0="EU VHF";
+ if(SpecOp::NA_VHF==m_specOp) t0="NA VHF";
+ if(SpecOp::EU_VHF==m_specOp) t0="EU VHF";
if(t0=="") {
ui->labDXped->setVisible(false);
} else {
@@ -7081,10 +7104,11 @@ void MainWindow::on_actionEcho_triggered()
m_bFastMode=false;
m_bFast9=false;
WSPR_config(true);
- ui->lh_decodes_headings_label->setText(" UTC N Level SNR dBerr DF Width Q");
+ ui->lh_decodes_headings_label->setText(" UTC N Level SNR dBerr DF Doppler Width Q");
// 01234567890123456789012345678901234567
displayWidgets(nWidgets("00000000000000000010001000000000000000"));
fast_config(false);
+ m_astroWidget->selectOnDxEcho();
statusChanged();
}
@@ -7781,7 +7805,7 @@ void MainWindow::transmit (double snr)
true, false, snr, m_TRperiod);
}
- if((m_mode=="FT4" or m_mode=="FT8") and m_maxPoints>0 and SpecOp::ARRL_DIGI==m_config.special_op_id()) {
+ if((m_mode=="FT4" or m_mode=="FT8") and m_maxPoints>0 and SpecOp::ARRL_DIGI==m_specOp) {
ui->dxCallEntry->setText(m_deCall);
ui->dxGridEntry->setText(m_deGrid);
genStdMsgs("-10");
@@ -7792,7 +7816,7 @@ void MainWindow::transmit (double snr)
toneSpacing=-3;
if(m_config.x2ToneSpacing()) toneSpacing=2*12000.0/1920.0;
if(m_config.x4ToneSpacing()) toneSpacing=4*12000.0/1920.0;
- if(SpecOp::FOX==m_config.special_op_id() and !m_tune) toneSpacing=-1;
+ if(SpecOp::FOX==m_specOp and !m_tune) toneSpacing=-1;
Q_EMIT sendMessage (m_mode, NUM_FT8_SYMBOLS,
1920.0, ui->TxFreqSpinBox->value () - m_XIT,
toneSpacing, m_soundOutput, m_config.audio_output_channel (),
@@ -7907,10 +7931,11 @@ void MainWindow::transmit (double snr)
}
if(m_mode=="Echo") {
- //??? should use "fastMode = true" here ???
- Q_EMIT sendMessage (m_mode, 27, 1024.0, 1500.0, 0.0, m_soundOutput,
- m_config.audio_output_channel(),
- false, false, snr, m_TRperiod);
+ m_fDither=0.;
+ if(m_astroWidget->bDither()) m_fDither = QRandomGenerator::global()->bounded(20.0) - 10.0; //Dither by +/- 10 Hz
+ Q_EMIT sendMessage (m_mode, 27, 1024.0, 1500.0+m_fDither, 0.0, m_soundOutput,
+ m_config.audio_output_channel(), false, false, snr, m_TRperiod);
+// qDebug() << "aa" << m_s6 << m_freqNominal << m_rigState.frequency() << m_fDither;
}
// In auto-sequencing mode, stop after 5 transmissions of "73" message.
@@ -8064,7 +8089,7 @@ void::MainWindow::VHF_features_enabled(bool b)
ui->actionMessage_averaging->setEnabled(b && (m_mode=="JT4" or m_mode=="JT65"));
ui->actionEnable_AP_JT65->setVisible (b && m_mode=="JT65");
- if(!b && m_msgAvgWidget and (SpecOp::FOX != m_config.special_op_id()) and !m_config.autoLog()) {
+ if(!b && m_msgAvgWidget and (SpecOp::FOX != m_specOp) and !m_config.autoLog()) {
if(m_msgAvgWidget->isVisible() and m_mode!="JT4" and m_mode!="JT9" and m_mode!="JT65") {
m_msgAvgWidget->close();
}
@@ -8710,23 +8735,26 @@ void MainWindow::WSPR_scheduling ()
void MainWindow::astroUpdate ()
{
- if (m_astroWidget)
- {
+ if (m_astroWidget) {
// no Doppler correction while CTRL pressed allows manual tuning
if (Qt::ControlModifier & QApplication::queryKeyboardModifiers ()) return;
auto correction = m_astroWidget->astroUpdate(QDateTime::currentDateTimeUtc (),
- m_config.my_grid(), m_hisGrid,
- m_freqNominal,
- "Echo" == m_mode, m_transmitting,
- !m_config.tx_QSY_allowed (), m_TRperiod);
- // no Doppler correction in Tx if rig can't do it
- if (m_transmitting && !m_config.tx_QSY_allowed ()) return;
- if (!m_astroWidget->doppler_tracking ()) return;
+ m_config.my_grid(), m_hisGrid,m_freqNominal,"Echo" == m_mode,
+ m_transmitting,m_auto,!m_config.tx_QSY_allowed (),m_TRperiod);
+ m_fDop=correction.dop;
+ m_fSpread=correction.width;
+
+ if (m_transmitting && !m_config.tx_QSY_allowed ()) return; // No Tx Doppler correction if rig can't do it
+ if (!m_astroWidget->doppler_tracking()) { // We are not using Doppler correction
+ m_fAudioShift=m_fDop;
+// qDebug() << "cc1" << m_hisGrid << m_auto << m_astroWidget->doppler_tracking()
+// << m_fSpread << m_fDop << correction.rx << m_fAudioShift;
+ return;
+ }
if ((m_monitoring || m_transmitting)
- // no Doppler correction below 6m
- && m_freqNominal >= 50000000
- && m_config.split_mode ())
+ && m_freqNominal >= 21000000 // No Doppler correction below 15m
+ && m_config.split_mode ()) // Doppler correcion needs split mode
{
// adjust for rig resolution
if (m_config.transceiver_resolution () > 2)
@@ -8760,17 +8788,14 @@ void MainWindow::astroUpdate ()
correction.tx = correction.tx / 10 * 10;
}
m_astroCorrection = correction;
- if (m_reverse_Doppler)
- {
- m_astroCorrection.reverse ();
- }
- }
- else
- {
+ if (m_reverse_Doppler) m_astroCorrection.reverse ();
+ } else {
m_astroCorrection = {};
}
-
setRig ();
+ m_fAudioShift=m_fDop - correction.rx;
+// qDebug() << "cc2" << m_hisGrid << m_auto << m_astroWidget->doppler_tracking()
+// << m_fSpread << m_fDop << correction.rx << m_fAudioShift;
}
}
@@ -8903,7 +8928,7 @@ void MainWindow::statusUpdate () const
m_config.my_callsign (), m_config.my_grid (),
m_hisGrid, m_tx_watchdog,
submode != QChar::Null ? QString {submode} : QString {}, m_bFastMode,
- static_cast (m_config.special_op_id ()),
+ static_cast (m_specOp),
ftol, tr_period, m_multi_settings->configuration_name (),
m_currentMessage);
}
@@ -9060,7 +9085,7 @@ void MainWindow::on_sbNlist_valueChanged(int n)
void MainWindow::on_sbNslots_valueChanged(int n)
{
m_Nslots=n;
- if(m_config.special_op_id()!=SpecOp::FOX) return;
+ if(m_specOp!=SpecOp::FOX) return;
QString t;
t = t.asprintf(" NSlots %d",m_Nslots);
writeFoxQSO(t);
@@ -9069,7 +9094,7 @@ void MainWindow::on_sbNslots_valueChanged(int n)
void MainWindow::on_sbMax_dB_valueChanged(int n)
{
m_max_dB=n;
- if(m_config.special_op_id()!=SpecOp::FOX) return;
+ if(m_specOp!=SpecOp::FOX) return;
QString t;
t = t.asprintf(" Max_dB %d",m_max_dB);
writeFoxQSO(t);
@@ -9077,7 +9102,7 @@ void MainWindow::on_sbMax_dB_valueChanged(int n)
void MainWindow::on_pbFoxReset_clicked()
{
- if(m_config.special_op_id()!=SpecOp::FOX) return;
+ if(m_specOp!=SpecOp::FOX) return;
auto button = MessageBox::query_message (this, tr ("Confirm Reset"),
tr ("Are you sure you want to clear the QSO queues?"));
if(button == MessageBox::Yes) {
@@ -9746,17 +9771,17 @@ void MainWindow::chkFT4()
ui->cbAutoSeq->setEnabled(true);
ui->respondComboBox->setVisible(true);
ui->respondComboBox->setEnabled(true);
- ui->labDXped->setVisible(m_config.special_op_id()!=SpecOp::NONE);
+ ui->labDXped->setVisible(m_specOp!=SpecOp::NONE);
ui->respondComboBox->setVisible(ui->cbAutoSeq->isChecked());
- if (SpecOp::NONE < m_config.special_op_id () && SpecOp::FOX > m_config.special_op_id ()) {
+ if(m_specOp!=SpecOp::NONE and m_specOp!=SpecOp::FOX and m_specOp!=SpecOp::HOUND) {
QString t0="";
- if(SpecOp::NA_VHF==m_config.special_op_id()) t0="NA VHF";
- if(SpecOp::EU_VHF==m_config.special_op_id()) t0="EU VHF";
- if(SpecOp::FIELD_DAY==m_config.special_op_id()) t0="Field Day";
- if(SpecOp::RTTY==m_config.special_op_id()) t0="RTTY";
- if(SpecOp::WW_DIGI==m_config.special_op_id()) t0="WW_DIGI";
- if(SpecOp::ARRL_DIGI==m_config.special_op_id()) t0="ARRL_DIGI";
+ if(SpecOp::NA_VHF==m_specOp) t0="NA VHF";
+ if(SpecOp::EU_VHF==m_specOp) t0="EU VHF";
+ if(SpecOp::FIELD_DAY==m_specOp) t0="Field Day";
+ if(SpecOp::RTTY==m_specOp) t0="FT RU";
+ if(SpecOp::WW_DIGI==m_specOp) t0="WW_DIGI";
+ if(SpecOp::ARRL_DIGI==m_specOp) t0="ARRL_DIGI";
if(t0=="") {
ui->labDXped->setVisible(false);
} else {
@@ -9765,7 +9790,7 @@ void MainWindow::chkFT4()
}
on_contest_log_action_triggered();
}
- if (SpecOp::HOUND == m_config.special_op_id() or SpecOp::FOX == m_config.special_op_id()) {
+ if (SpecOp::HOUND == m_specOp or SpecOp::FOX == m_specOp) {
ui->labDXped->setVisible(false);
}
@@ -9906,21 +9931,25 @@ QString MainWindow::WSPR_message()
void MainWindow::on_houndButton_clicked (bool checked)
{
- if (checked) {
- ui->houndButton->setStyleSheet("background-color: #ff0000;");
- m_config.setSpecial_Hound();
- } else {
- ui->houndButton->setStyleSheet("");
- m_config.setSpecial_None();
- }
- on_actionFT8_triggered();
+ if (checked) {
+ ui->houndButton->setStyleSheet("background-color: #ff0000;");
+ m_config.setSpecial_Hound();
+ } else {
+ ui->houndButton->setStyleSheet("");
+ m_config.setSpecial_None();
+ }
+ m_specOp=m_config.special_op_id();
+ on_actionFT8_triggered();
}
void MainWindow::on_ft8Button_clicked()
{
ui->houndButton->setChecked(false);
ui->houndButton->setStyleSheet("");
- if(m_config.special_op_id()==SpecOp::HOUND) m_config.setSpecial_None();
+ if(m_specOp==SpecOp::HOUND) {
+ m_config.setSpecial_None();
+ m_specOp=m_config.special_op_id();
+ }
on_actionFT8_triggered();
}
@@ -9928,7 +9957,10 @@ void MainWindow::on_ft4Button_clicked()
{
ui->houndButton->setChecked(false);
ui->houndButton->setStyleSheet("");
- if(m_config.special_op_id()==SpecOp::HOUND) m_config.setSpecial_None();
+ if(m_specOp==SpecOp::HOUND) {
+ m_config.setSpecial_None();
+ m_specOp=m_config.special_op_id();
+ }
on_actionFT4_triggered();
}
@@ -9936,7 +9968,10 @@ void MainWindow::on_msk144Button_clicked()
{
ui->houndButton->setChecked(false);
ui->houndButton->setStyleSheet("");
- if(m_config.special_op_id()==SpecOp::HOUND) m_config.setSpecial_None();
+ if(m_specOp==SpecOp::HOUND) {
+ m_config.setSpecial_None();
+ m_specOp=m_config.special_op_id();
+ }
on_actionMSK144_triggered();
}
@@ -9944,7 +9979,10 @@ void MainWindow::on_q65Button_clicked()
{
ui->houndButton->setChecked(false);
ui->houndButton->setStyleSheet("");
- if(m_config.special_op_id()==SpecOp::HOUND) m_config.setSpecial_None();
+ if(m_specOp==SpecOp::HOUND) {
+ m_config.setSpecial_None();
+ m_specOp=m_config.special_op_id();
+ }
on_actionQ65_triggered();
}
@@ -9952,6 +9990,9 @@ void MainWindow::on_jt65Button_clicked()
{
ui->houndButton->setChecked(false);
ui->houndButton->setStyleSheet("");
- if(m_config.special_op_id()==SpecOp::HOUND) m_config.setSpecial_None();
+ if(m_specOp==SpecOp::HOUND) {
+ m_config.setSpecial_None();
+ m_specOp=m_config.special_op_id();
+ }
on_actionJT65_triggered();
}
diff --git a/widgets/mainwindow.h b/widgets/mainwindow.h
index 01c142e88..aa1796c4a 100644
--- a/widgets/mainwindow.h
+++ b/widgets/mainwindow.h
@@ -105,6 +105,7 @@ public:
using Frequency = Radio::Frequency;
using FrequencyDelta = Radio::FrequencyDelta;
using Mode = Modes::Mode;
+ using SpecOp = Configuration::SpecialOperatingActivity;
explicit MainWindow(QDir const& temp_directory, bool multiple, MultiSettings *,
QSharedMemory *shdmem, unsigned downSampleFactor,
@@ -432,6 +433,10 @@ private:
double m_tRemaining;
double m_TRperiod;
+ double m_fSpread;
+ double m_s6;
+ double m_fDither;
+ double m_fAudioShift;
float m_DTtol;
float m_t0;
@@ -500,6 +505,7 @@ private:
qint32 m_latestDecodeTime=-1;
qint32 m_points=-99;
qint32 m_score=0;
+ qint32 m_fDop=0;
bool m_btxok; //True if OK to transmit
bool m_diskData;
@@ -557,6 +563,8 @@ private:
bool m_bOK_to_chk=false;
bool m_bSentReport=false;
+ SpecOp m_specOp;
+
enum
{
CALLING,