mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-22 04:11:16 -05:00
Merge branch 'feat-map65-integration' of bitbucket.org:k1jt/wsjtx into feat-map65-integration
This commit is contained in:
commit
98d0319134
@ -26,10 +26,9 @@ typedef struct dec_data {
|
|||||||
int nutc; //UTC as integer, HHMM
|
int nutc; //UTC as integer, HHMM
|
||||||
bool ndiskdat; //true ==> data read from *.wav file
|
bool ndiskdat; //true ==> data read from *.wav file
|
||||||
int ntrperiod; //TR period (seconds)
|
int ntrperiod; //TR period (seconds)
|
||||||
int nQSOProgress; /* QSO state machine state */
|
int nQSOProgress; //QSO state machine state
|
||||||
int nfqso; //User-selected QSO freq (kHz)
|
int nfqso; //User-selected QSO freq (kHz)
|
||||||
int nftx; /* Transmit audio offset where
|
int nftx; //TX audio offset where replies might be expected
|
||||||
replies might be expected */
|
|
||||||
bool newdat; //true ==> new data, must do long FFT
|
bool newdat; //true ==> new data, must do long FFT
|
||||||
int npts8; //npts for c0() array
|
int npts8; //npts for c0() array
|
||||||
int nfa; //Low decode limit (Hz)
|
int nfa; //Low decode limit (Hz)
|
||||||
@ -59,6 +58,7 @@ typedef struct dec_data {
|
|||||||
int naggressive;
|
int naggressive;
|
||||||
bool nrobust;
|
bool nrobust;
|
||||||
int nexp_decode;
|
int nexp_decode;
|
||||||
|
int max_drift;
|
||||||
char datetime[20];
|
char datetime[20];
|
||||||
char mycall[12];
|
char mycall[12];
|
||||||
char mygrid[6];
|
char mygrid[6];
|
||||||
|
@ -1,34 +1,34 @@
|
|||||||
Here are the "displayWidgets()" strings for WSJT-X modes
|
Here are the "displayWidgets()" strings for WSJT-X modes
|
||||||
|
|
||||||
1 2 3
|
1 2 3
|
||||||
0123456789012345678901234567890123456
|
01234567890123456789012345678901234567
|
||||||
------------------------------------------------
|
-------------------------------------------------
|
||||||
JT4 1110100000001100001100000000000000000
|
JT4 11101000000011000011000000000000000000
|
||||||
JT4/VHF 1111100100101101101111000000000000000
|
JT4/VHF 11111001001011011011110000000000000000
|
||||||
JT9 1110100000001110000100000000000010000
|
JT9 11101000000011100001000000000000100000
|
||||||
JT9/VHF 1111101010001111100100000000000000000
|
JT9/VHF 11111010100011111001000000000000000000
|
||||||
JT9+JT65 1110100000011110000100000000000010000
|
JT9+JT65 11101000000111100001000000000000100000
|
||||||
JT65 1110100000001110000100000000000010000
|
JT65 11101000000011100001000000000000100000
|
||||||
JT65/VHF 1111100100001101101011000100000000000
|
JT65/VHF 11111001000011011010110001000000000000
|
||||||
Q65 1111110101101101001110000001000000001
|
Q65 11111101011011010011100000010000000011
|
||||||
ISCAT 1001110000000001100000000000000000000
|
ISCAT 10011100000000011000000000000000000000
|
||||||
MSK144 1011111101000000000100010000000000000
|
MSK144 10111111010000000001000100000000000000
|
||||||
WSPR 0000000000000000010100000000000000000
|
WSPR 00000000000000000101000000000000000000
|
||||||
FST4 1111110001001110000100000001000000110
|
FST4 11111100010011100001000000010000001100
|
||||||
FST4W 0000000000000000010100000000000001000
|
FST4W 00000000000000000101000000000000010000
|
||||||
Echo 0000000000000000000000100000000000000
|
Echo 00000000000000000000001000000000000000
|
||||||
FCal 0011010000000000000000000000010000000
|
FCal 00110100000000000000000000000100000000
|
||||||
FT8 1110100001001110000100001001100010000
|
FT8 11101000010011100001000010011000100000
|
||||||
FT8/VHF 1110100001001110000100001001100010000
|
FT8/VHF 11101000010011100001000010011000100000
|
||||||
FT8/Fox 1110100001001110000100000000001000000
|
FT8/Fox 11101000010011100001000000000010000000
|
||||||
FT8/Hound 1110100001001110000100000000001100000
|
FT8/Hound 11101000010011100001000000000011000000
|
||||||
----------------------------------------------
|
-------------------------------------------------
|
||||||
1 2 3
|
1 2 3
|
||||||
012345678901234567890123456789012
|
01234567890123456789012345678901234567
|
||||||
|
|
||||||
----------------------------------------------
|
-------------------------------------------------
|
||||||
Mapping of column numbers to widgets
|
Mapping of column numbers to widgets
|
||||||
----------------------------------------------
|
-------------------------------------------------
|
||||||
0. txFirstCheckbox
|
0. txFirstCheckbox
|
||||||
1. TxFreqSpinBox
|
1. TxFreqSpinBox
|
||||||
2. RxFreqSpinBox
|
2. RxFreqSpinBox
|
||||||
@ -66,3 +66,4 @@ Mapping of column numbers to widgets
|
|||||||
34. sbF_Low
|
34. sbF_Low
|
||||||
35. sbF_High
|
35. sbF_High
|
||||||
36. AutoClrAvg
|
36. AutoClrAvg
|
||||||
|
37. sbMaxDrift
|
||||||
|
@ -1,15 +1,27 @@
|
|||||||
[[NEW_FEATURES]]
|
[[NEW_FEATURES]]
|
||||||
=== New in Version {VERSION}
|
=== New in Version {VERSION}
|
||||||
|
|
||||||
_WSJT-X 2.4.0_ introduces *Q65*, a new digital protocol designed for
|
_WSJT-X 2.5.0_ introduces an enhanced Q65 decoder that measures and
|
||||||
minimal two-way QSOs over especially difficult propagation paths. On
|
compensates for linear frequency drifts of Q65 signals. Activate this
|
||||||
paths with Doppler spread more than a few Hz, the weak-signal
|
feature by setting a spinner control *Max Drift* on the _WSJT-X_ main
|
||||||
performance of Q65 is the best among all WSJT-X modes.
|
window to a number greater than 0. We suggest a setting of 10 for
|
||||||
|
submode Q65-60A, the recommended submode for EME on 50 and 144 MHz,
|
||||||
|
which will accommodate drift rates up to 20 Hz/minute. Similarly, we
|
||||||
|
suggest *Max Drift* = 40 for submode Q65-15C, used for for 10 GHz QSOs
|
||||||
|
(up to 900 km) via aircraft scatter and drift rates up to about 20
|
||||||
|
Hz/s.
|
||||||
|
|
||||||
Q65 uses message formats and sequencing identical to those used in
|
On the Windows platform only, _WSJT-X 2.5.0_ installations now include
|
||||||
FST4, FT4, FT8, and MSK144. Submodes are provided with a wide variety
|
an early version of _MAP65 3.0_. This program works together with
|
||||||
of tone spacings and T/R sequence lengths 15, 30, 60, 120, and 300 s.
|
suitable hardware that converts RF to baseband. The hardware/software
|
||||||
A new, highly reliable list-decoding technique is used for messages
|
combination implements a wideband, highly optimized receiver for the
|
||||||
that contain previously copied message fragments. Message averaging
|
Q65 and JT65 protocols, with matching transmitting features that
|
||||||
is provided for situations where single transmissions are too weak or
|
require a standard SSB transceiver. _MAP65_ is effective in both
|
||||||
signal enhancements too sparse for a signal to be decoded.
|
single-polarization and dual-polarization systems. If two
|
||||||
|
polarization channels are available, _MAP65_ determines and matches
|
||||||
|
the linear polarization angle of each decodable signal. This
|
||||||
|
capability provides a major advantage for efficient EME communication
|
||||||
|
on bands up to 432 MHz. A single-channel _MAP65_ system works
|
||||||
|
extremely well for EME on 1296 MHz and higher bands, displaying all
|
||||||
|
signals in a 90 kHz sub-band and decoding all the Q65 and JT65
|
||||||
|
signals.
|
||||||
|
@ -209,7 +209,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
|
|||||||
call my_q65%decode(q65_decoded,id2,nqd,params%nutc,params%ntr, &
|
call my_q65%decode(q65_decoded,id2,nqd,params%nutc,params%ntr, &
|
||||||
params%nsubmode,params%nfqso,params%ntol,params%ndepth, &
|
params%nsubmode,params%nfqso,params%ntol,params%ndepth, &
|
||||||
params%nfa,params%nfb,logical(params%nclearave), &
|
params%nfa,params%nfb,logical(params%nclearave), &
|
||||||
single_decode,logical(params%nagain), &
|
single_decode,logical(params%nagain),params%max_drift, &
|
||||||
logical(params%newdat),params%emedelay,mycall,hiscall,hisgrid, &
|
logical(params%newdat),params%emedelay,mycall,hiscall,hisgrid, &
|
||||||
params%nQSOProgress,ncontest,logical(params%lapcqonly),navg0)
|
params%nQSOProgress,ncontest,logical(params%lapcqonly),navg0)
|
||||||
call timer('dec_q65 ',1)
|
call timer('dec_q65 ',1)
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
integer(c_int) :: naggressive
|
integer(c_int) :: naggressive
|
||||||
logical(c_bool) :: nrobust
|
logical(c_bool) :: nrobust
|
||||||
integer(c_int) :: nexp_decode
|
integer(c_int) :: nexp_decode
|
||||||
|
integer(c_int) :: max_drift
|
||||||
character(kind=c_char) :: datetime(20)
|
character(kind=c_char) :: datetime(20)
|
||||||
character(kind=c_char) :: mycall(12)
|
character(kind=c_char) :: mycall(12)
|
||||||
character(kind=c_char) :: mygrid(6)
|
character(kind=c_char) :: mygrid(6)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
subroutine map65_mmdec(nutc,id2,nqd,nsubmode,nfa,nfb,nfqso,ntol,newdat, &
|
subroutine map65_mmdec(nutc,id2,nqd,nsubmode,nfa,nfb,nfqso,ntol,newdat, &
|
||||||
nagain,mycall,hiscall,hisgrid)
|
nagain,max_drift,mycall,hiscall,hisgrid)
|
||||||
|
|
||||||
use prog_args
|
use prog_args
|
||||||
use timer_module, only: timer
|
use timer_module, only: timer
|
||||||
@ -48,7 +48,7 @@ subroutine map65_mmdec(nutc,id2,nqd,nsubmode,nfa,nfb,nfqso,ntol,newdat, &
|
|||||||
|
|
||||||
call timer('dec_q65 ',0)
|
call timer('dec_q65 ',0)
|
||||||
call my_q65%decode(q65_decoded,id2,nqd,nutc,ntrperiod,nsubmode,nfqso, &
|
call my_q65%decode(q65_decoded,id2,nqd,nutc,ntrperiod,nsubmode,nfqso, &
|
||||||
ntol,ndepth,nfa,nfb,lclearave,single_decode,lagain,lnewdat, &
|
ntol,ndepth,nfa,nfb,lclearave,single_decode,lagain,max_drift,lnewdat, &
|
||||||
emedelay,mycall,hiscall,hisgrid,nQSOProgress,ncontest,lapcqonly,navg0)
|
emedelay,mycall,hiscall,hisgrid,nQSOProgress,ncontest,lapcqonly,navg0)
|
||||||
call timer('dec_q65 ',1)
|
call timer('dec_q65 ',1)
|
||||||
|
|
||||||
|
@ -31,8 +31,9 @@ module q65_decode
|
|||||||
contains
|
contains
|
||||||
|
|
||||||
subroutine decode(this,callback,iwave,nqd0,nutc,ntrperiod,nsubmode,nfqso, &
|
subroutine decode(this,callback,iwave,nqd0,nutc,ntrperiod,nsubmode,nfqso, &
|
||||||
ntol,ndepth,nfa0,nfb0,lclearave,single_decode,lagain,lnewdat0, &
|
ntol,ndepth,nfa0,nfb0,lclearave,single_decode,lagain,max_drift0, &
|
||||||
emedelay,mycall,hiscall,hisgrid,nQSOprogress,ncontest,lapcqonly,navg0)
|
lnewdat0,emedelay,mycall,hiscall,hisgrid,nQSOprogress,ncontest, &
|
||||||
|
lapcqonly,navg0)
|
||||||
|
|
||||||
! Top-level routine that organizes the decoding of Q65 signals
|
! Top-level routine that organizes the decoding of Q65 signals
|
||||||
! Input: iwave Raw data, i*2
|
! Input: iwave Raw data, i*2
|
||||||
@ -81,6 +82,7 @@ contains
|
|||||||
nfb=nfb0
|
nfb=nfb0
|
||||||
nqd=nqd0
|
nqd=nqd0
|
||||||
lnewdat=lnewdat0
|
lnewdat=lnewdat0
|
||||||
|
max_drift=max_drift0
|
||||||
idec=-1
|
idec=-1
|
||||||
idf=0
|
idf=0
|
||||||
idt=0
|
idt=0
|
||||||
|
@ -11,7 +11,7 @@ module q65
|
|||||||
38,46,50,55,60,62,66,69,74,76,85/)
|
38,46,50,55,60,62,66,69,74,76,85/)
|
||||||
integer codewords(63,206)
|
integer codewords(63,206)
|
||||||
integer ibwa,ibwb,ncw,nsps,mode_q65,nfa,nfb,nqd
|
integer ibwa,ibwb,ncw,nsps,mode_q65,nfa,nfb,nqd
|
||||||
integer idfbest,idtbest,ibw,ndistbest,maxiters
|
integer idfbest,idtbest,ibw,ndistbest,maxiters,max_drift
|
||||||
integer istep,nsmo,lag1,lag2,npasses,nused,iseq,ncand,nrc
|
integer istep,nsmo,lag1,lag2,npasses,nused,iseq,ncand,nrc
|
||||||
integer i0,j0
|
integer i0,j0
|
||||||
integer navg(0:1)
|
integer navg(0:1)
|
||||||
@ -437,13 +437,7 @@ subroutine q65_ccf_22(s1,iz,jz,nfqso,ntol,ndepth,ntrperiod,iavg,ipk,jpk, &
|
|||||||
|
|
||||||
ia=max(nfa,100)/df
|
ia=max(nfa,100)/df
|
||||||
ib=min(nfb,4900)/df
|
ib=min(nfb,4900)/df
|
||||||
max_drift=0 !Drift units: bins/TxT
|
if(nqd.ne.1 .or. iavg.ne.0 .or. ntol.ge.200) max_drift=0
|
||||||
! Do we need a GUI control to set max_drift ?
|
|
||||||
! For now, turn on drift compensation only for submodes 15B amd 60A.
|
|
||||||
if(nqd.eq.1 .and. iavg.eq.0 .and. ntol.le.100 .and. ntrperiod.eq.60 .and. &
|
|
||||||
mode_q65.eq.1) max_drift=10 !Q65-60A
|
|
||||||
if(nqd.eq.1 .and. iavg.eq.0 .and. ntol.le.100 .and. ntrperiod.eq.15 .and. &
|
|
||||||
mode_q65.eq.4) max_drift=40 !Q65-15C
|
|
||||||
if(max_drift.ne.0) then
|
if(max_drift.ne.0) then
|
||||||
ia=nint((nfqso-ntol)/df)
|
ia=nint((nfqso-ntol)/df)
|
||||||
ib=nint((nfqso+ntol)/df)
|
ib=nint((nfqso+ntol)/df)
|
||||||
|
@ -33,6 +33,7 @@ extern struct { //This is "common/datcom/..." in Fortran
|
|||||||
int nmode; //nmode = 10*m_modeQ65 + m_modeJT65
|
int nmode; //nmode = 10*m_modeQ65 + m_modeJT65
|
||||||
int nfast; //No longer used
|
int nfast; //No longer used
|
||||||
int nsave; //Number of s3(64,63) spectra saved
|
int nsave; //Number of s3(64,63) spectra saved
|
||||||
|
int max_drift; //Maximum Q65 drift: units symbol_rate/TxT
|
||||||
char mycall[12];
|
char mycall[12];
|
||||||
char mygrid[6];
|
char mygrid[6];
|
||||||
char hiscall[12];
|
char hiscall[12];
|
||||||
|
@ -11,7 +11,7 @@ subroutine decode0(dd,ss,savg,nstandalone)
|
|||||||
common/npar/fcenter,nutc,idphi,mousedf,mousefqso,nagain, &
|
common/npar/fcenter,nutc,idphi,mousedf,mousefqso,nagain, &
|
||||||
ndepth,ndiskdat,neme,newdat,nfa,nfb,nfcal,nfshift, &
|
ndepth,ndiskdat,neme,newdat,nfa,nfb,nfcal,nfshift, &
|
||||||
mcall3,nkeep,ntol,nxant,nrxlog,nfsample,nxpol,nmode, &
|
mcall3,nkeep,ntol,nxant,nrxlog,nfsample,nxpol,nmode, &
|
||||||
nfast,nsave,mycall,mygrid,hiscall,hisgrid,datetime
|
nfast,nsave,max_drift,mycall,mygrid,hiscall,hisgrid,datetime
|
||||||
data neme0/-99/,mcall3b/1/
|
data neme0/-99/,mcall3b/1/
|
||||||
save
|
save
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ subroutine decode0(dd,ss,savg,nstandalone)
|
|||||||
|
|
||||||
call timer('map65a ',0)
|
call timer('map65a ',0)
|
||||||
call map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
|
call map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
|
||||||
mousedf,mousefqso,nagain,ndecdone,nfshift,ndphi, &
|
mousedf,mousefqso,nagain,ndecdone,nfshift,ndphi,max_drift, &
|
||||||
nfcal,nkeep,mcall3b,nsum,nsave,nxant,mycall,mygrid, &
|
nfcal,nkeep,mcall3b,nsum,nsave,nxant,mycall,mygrid, &
|
||||||
neme,ndepth,nstandalone,hiscall,hisgrid,nhsym,nfsample,nxpol,nmode)
|
neme,ndepth,nstandalone,hiscall,hisgrid,nhsym,nfsample,nxpol,nmode)
|
||||||
call timer('map65a ',1)
|
call timer('map65a ',1)
|
||||||
|
@ -36,11 +36,11 @@ program m65
|
|||||||
real*8 fc0,fcenter
|
real*8 fc0,fcenter
|
||||||
character*80 arg,infile
|
character*80 arg,infile
|
||||||
character mycall*12,hiscall*12,mygrid*6,hisgrid*6,datetime*20
|
character mycall*12,hiscall*12,mygrid*6,hisgrid*6,datetime*20
|
||||||
common/datcom/dd(4,5760000),ss(4,322,NFFT),savg(4,NFFT),fc0,nutc0,junk(36)
|
common/datcom/dd(4,5760000),ss(4,322,NFFT),savg(4,NFFT),fc0,nutc0,junk(37)
|
||||||
common/npar/fcenter,nutc,idphi,mousedf,mousefqso,nagain, &
|
common/npar/fcenter,nutc,idphi,mousedf,mousefqso,nagain, &
|
||||||
ndepth,ndiskdat,neme,newdat,nfa,nfb,nfcal,nfshift, &
|
ndepth,ndiskdat,neme,newdat,nfa,nfb,nfcal,nfshift, &
|
||||||
mcall3,nkeep,ntol,nxant,nrxlog,nfsample,nxpol,nmode, &
|
mcall3,nkeep,ntol,nxant,nrxlog,nfsample,nxpol,nmode, &
|
||||||
nfast,nsave,mycall,mygrid,hiscall,hisgrid,datetime
|
nfast,nsave,max_drift,mycall,mygrid,hiscall,hisgrid,datetime
|
||||||
|
|
||||||
nargs=iargc()
|
nargs=iargc()
|
||||||
if(nargs.ne.1 .and. nargs.lt.5) then
|
if(nargs.ne.1 .and. nargs.lt.5) then
|
||||||
|
@ -79,7 +79,7 @@ subroutine m65c(dd,ss,savg,nparams0)
|
|||||||
common/npar/fcenter,nutc,idphi,mousedf,mousefqso,nagain, &
|
common/npar/fcenter,nutc,idphi,mousedf,mousefqso,nagain, &
|
||||||
ndepth,ndiskdat,neme,newdat,nfa,nfb,nfcal,nfshift, &
|
ndepth,ndiskdat,neme,newdat,nfa,nfb,nfcal,nfshift, &
|
||||||
mcall3,nkeep,ntol,nxant,nrxlog,nfsample,nxpol,nmode, &
|
mcall3,nkeep,ntol,nxant,nrxlog,nfsample,nxpol,nmode, &
|
||||||
nfast,nsave,mycall,mygrid,hiscall,hisgrid,datetime
|
nfast,nsave,max_drift,mycall,mygrid,hiscall,hisgrid,datetime
|
||||||
equivalence (nparams,fcenter)
|
equivalence (nparams,fcenter)
|
||||||
|
|
||||||
nparams=nparams0 !Copy parameters into common/npar/
|
nparams=nparams0 !Copy parameters into common/npar/
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
|
subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
|
||||||
mousedf,mousefqso,nagain,ndecdone,nfshift,ndphi, &
|
mousedf,mousefqso,nagain,ndecdone,nfshift,ndphi,max_drift, &
|
||||||
nfcal,nkeep,mcall3b,nsum,nsave,nxant,mycall,mygrid, &
|
nfcal,nkeep,mcall3b,nsum,nsave,nxant,mycall,mygrid, &
|
||||||
neme,ndepth,nstandalone,hiscall,hisgrid,nhsym,nfsample,nxpol,nmode)
|
neme,ndepth,nstandalone,hiscall,hisgrid,nhsym,nfsample,nxpol,nmode)
|
||||||
|
|
||||||
@ -370,7 +370,7 @@ subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
|
|||||||
call timer('q65b ',0)
|
call timer('q65b ',0)
|
||||||
call q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
|
call q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
|
||||||
xpol,mycall,hiscall,hisgrid,mode_q65,f0,fqso,newdat, &
|
xpol,mycall,hiscall,hisgrid,mode_q65,f0,fqso,newdat, &
|
||||||
nagain,idec)
|
nagain,max_drift,idec)
|
||||||
call timer('q65b ',1)
|
call timer('q65b ',1)
|
||||||
if(idec.ge.0) candec(icand)=.true.
|
if(idec.ge.0) candec(icand)=.true.
|
||||||
enddo
|
enddo
|
||||||
@ -381,7 +381,7 @@ subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
|
|||||||
call timer('q65b ',0)
|
call timer('q65b ',0)
|
||||||
call q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
|
call q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
|
||||||
xpol,mycall,hiscall,hisgrid,mode_q65,f0,fqso,newdat, &
|
xpol,mycall,hiscall,hisgrid,mode_q65,f0,fqso,newdat, &
|
||||||
nagain,idec)
|
nagain,max_drift,idec)
|
||||||
call timer('q65b ',1)
|
call timer('q65b ',1)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
@ -418,7 +418,7 @@ subroutine map65a(dd,ss,savg,newdat,nutc,fcenter,ntol,idphi,nfa,nfb, &
|
|||||||
call timer('q65b ',0)
|
call timer('q65b ',0)
|
||||||
call q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
|
call q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol, &
|
||||||
xpol,mycall,hiscall,hisgrid,mode_q65,f0,fqso,newdat, &
|
xpol,mycall,hiscall,hisgrid,mode_q65,f0,fqso,newdat, &
|
||||||
nagain,idec)
|
nagain,max_drift,idec)
|
||||||
call timer('q65b ',1)
|
call timer('q65b ',1)
|
||||||
if(idec.ge.0) candec(icand)=.true.
|
if(idec.ge.0) candec(icand)=.true.
|
||||||
enddo ! icand
|
enddo ! icand
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
subroutine q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol,xpol, &
|
subroutine q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol,xpol, &
|
||||||
mycall0,hiscall0,hisgrid,mode_q65,f0,fqso,newdat,nagain,idec)
|
mycall0,hiscall0,hisgrid,mode_q65,f0,fqso,newdat,nagain,max_drift,idec)
|
||||||
|
|
||||||
! This routine provides an interface between MAP65 and the Q65 decoder
|
! This routine provides an interface between MAP65 and the Q65 decoder
|
||||||
! in WSJT-X. All arguments are input data obtained from the MAP65 GUI.
|
! in WSJT-X. All arguments are input data obtained from the MAP65 GUI.
|
||||||
@ -128,7 +128,7 @@ subroutine q65b(nutc,nqd,fcenter,nfcal,nfsample,ikhz,mousedf,ntol,xpol, &
|
|||||||
|
|
||||||
! NB: Frequency of ipk is now shifted to 1000 Hz.
|
! NB: Frequency of ipk is now shifted to 1000 Hz.
|
||||||
call map65_mmdec(nutc,iwave,nqd,nsubmode,nfa,nfb,1000,ntol, &
|
call map65_mmdec(nutc,iwave,nqd,nsubmode,nfa,nfb,1000,ntol, &
|
||||||
newdat,nagain,mycall,hiscall,hisgrid)
|
newdat,nagain,max_drift,mycall,hiscall,hisgrid)
|
||||||
|
|
||||||
MHz=fcenter
|
MHz=fcenter
|
||||||
freq0=MHz + 0.001*ikhz
|
freq0=MHz + 0.001*ikhz
|
||||||
|
@ -399,6 +399,7 @@ void MainWindow::writeSettings()
|
|||||||
settings.setValue("Cal570",m_cal570);
|
settings.setValue("Cal570",m_cal570);
|
||||||
settings.setValue("TxOffset",m_TxOffset);
|
settings.setValue("TxOffset",m_TxOffset);
|
||||||
settings.setValue("Colors",m_colors);
|
settings.setValue("Colors",m_colors);
|
||||||
|
settings.setValue("MaxDrift",ui->sbMaxDrift->value());
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------- readSettings()
|
//---------------------------------------------------------- readSettings()
|
||||||
@ -484,6 +485,7 @@ void MainWindow::readSettings()
|
|||||||
ui->actionF4_sets_Tx6->setChecked(m_kb8rq);
|
ui->actionF4_sets_Tx6->setChecked(m_kb8rq);
|
||||||
m_NB=settings.value("NB",false).toBool();
|
m_NB=settings.value("NB",false).toBool();
|
||||||
ui->NBcheckBox->setChecked(m_NB);
|
ui->NBcheckBox->setChecked(m_NB);
|
||||||
|
ui->sbMaxDrift->setValue(settings.value("MaxDrift",0).toInt());
|
||||||
m_NBslider=settings.value("NBslider",40).toInt();
|
m_NBslider=settings.value("NBslider",40).toInt();
|
||||||
ui->NBslider->setValue(m_NBslider);
|
ui->NBslider->setValue(m_NBslider);
|
||||||
m_gainx=settings.value("GainX",1.0).toFloat();
|
m_gainx=settings.value("GainX",1.0).toFloat();
|
||||||
@ -1282,6 +1284,7 @@ void MainWindow::decode() //decode()
|
|||||||
datcom_.nmode=10*m_modeQ65 + m_modeJT65;
|
datcom_.nmode=10*m_modeQ65 + m_modeJT65;
|
||||||
datcom_.nfast=1; //No longer used
|
datcom_.nfast=1; //No longer used
|
||||||
datcom_.nsave=m_nsave;
|
datcom_.nsave=m_nsave;
|
||||||
|
datcom_.max_drift=ui->sbMaxDrift->value();
|
||||||
|
|
||||||
QString mcall=(m_myCall+" ").mid(0,12);
|
QString mcall=(m_myCall+" ").mid(0,12);
|
||||||
QString mgrid=(m_myGrid+" ").mid(0,6);
|
QString mgrid=(m_myGrid+" ").mid(0,6);
|
||||||
|
@ -574,6 +574,22 @@ p, li { white-space: pre-wrap; }
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSpinBox" name="sbMaxDrift">
|
||||||
|
<property name="alignment">
|
||||||
|
<set>Qt::AlignCenter</set>
|
||||||
|
</property>
|
||||||
|
<property name="prefix">
|
||||||
|
<string>Max Drift </string>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>50</number>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer">
|
<spacer name="verticalSpacer">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
@ -212,7 +212,7 @@ namespace
|
|||||||
// grid exact match excluding RR73
|
// grid exact match excluding RR73
|
||||||
QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"};
|
QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"};
|
||||||
auto quint32_max = std::numeric_limits<quint32>::max ();
|
auto quint32_max = std::numeric_limits<quint32>::max ();
|
||||||
constexpr int N_WIDGETS {37};
|
constexpr int N_WIDGETS {38};
|
||||||
constexpr int default_rx_audio_buffer_frames {-1}; // lets Qt decide
|
constexpr int default_rx_audio_buffer_frames {-1}; // lets Qt decide
|
||||||
constexpr int default_tx_audio_buffer_frames {-1}; // lets Qt decide
|
constexpr int default_tx_audio_buffer_frames {-1}; // lets Qt decide
|
||||||
|
|
||||||
@ -1174,6 +1174,7 @@ void MainWindow::writeSettings()
|
|||||||
m_settings->setValue("NoOwnCall",ui->cbNoOwnCall->isChecked());
|
m_settings->setValue("NoOwnCall",ui->cbNoOwnCall->isChecked());
|
||||||
m_settings->setValue ("BandHopping", ui->band_hopping_group_box->isChecked ());
|
m_settings->setValue ("BandHopping", ui->band_hopping_group_box->isChecked ());
|
||||||
m_settings->setValue ("TRPeriod", ui->sbTR->value ());
|
m_settings->setValue ("TRPeriod", ui->sbTR->value ());
|
||||||
|
m_settings->setValue ("MaxDrift", ui->sbMaxDrift->value());
|
||||||
m_settings->setValue ("TRPeriod_FST4W", ui->sbTR_FST4W->value ());
|
m_settings->setValue ("TRPeriod_FST4W", ui->sbTR_FST4W->value ());
|
||||||
m_settings->setValue("FastMode",m_bFastMode);
|
m_settings->setValue("FastMode",m_bFastMode);
|
||||||
m_settings->setValue("Fast9",m_bFast9);
|
m_settings->setValue("Fast9",m_bFast9);
|
||||||
@ -1260,6 +1261,7 @@ void MainWindow::readSettings()
|
|||||||
m_bFast9=m_settings->value("Fast9",false).toBool();
|
m_bFast9=m_settings->value("Fast9",false).toBool();
|
||||||
m_bFastMode=m_settings->value("FastMode",false).toBool();
|
m_bFastMode=m_settings->value("FastMode",false).toBool();
|
||||||
ui->sbTR->setValue (m_settings->value ("TRPeriod", 15).toInt());
|
ui->sbTR->setValue (m_settings->value ("TRPeriod", 15).toInt());
|
||||||
|
ui->sbMaxDrift->setValue (m_settings->value ("MaxDrift",0).toInt());
|
||||||
ui->sbTR_FST4W->setValue (m_settings->value ("TRPeriod_FST4W", 15).toInt());
|
ui->sbTR_FST4W->setValue (m_settings->value ("TRPeriod_FST4W", 15).toInt());
|
||||||
m_lastMonitoredFrequency = m_settings->value ("DialFreq",
|
m_lastMonitoredFrequency = m_settings->value ("DialFreq",
|
||||||
QVariant::fromValue<Frequency> (default_frequency)).value<Frequency> ();
|
QVariant::fromValue<Frequency> (default_frequency)).value<Frequency> ();
|
||||||
@ -3172,6 +3174,7 @@ void MainWindow::decode() //decode()
|
|||||||
if(m_config.single_decode()) dec_data.params.nexp_decode += 32;
|
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_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);
|
if(m_mode.startsWith("FST4")) dec_data.params.nexp_decode += 256*(ui->sbNB->value()+3);
|
||||||
|
dec_data.params.max_drift=ui->sbMaxDrift->value();
|
||||||
|
|
||||||
::memcpy(dec_data.params.datetime, m_dateTime.toLatin1()+" ", sizeof dec_data.params.datetime);
|
::memcpy(dec_data.params.datetime, m_dateTime.toLatin1()+" ", sizeof dec_data.params.datetime);
|
||||||
::memcpy(dec_data.params.mycall, (m_config.my_callsign()+" ").toLatin1(), sizeof dec_data.params.mycall);
|
::memcpy(dec_data.params.mycall, (m_config.my_callsign()+" ").toLatin1(), sizeof dec_data.params.mycall);
|
||||||
@ -6058,6 +6061,7 @@ void MainWindow::displayWidgets(qint64 n)
|
|||||||
}
|
}
|
||||||
if(i==35) ui->sbF_High->setVisible(b);
|
if(i==35) ui->sbF_High->setVisible(b);
|
||||||
if(i==36) ui->actionAuto_Clear_Avg->setVisible (b);
|
if(i==36) ui->actionAuto_Clear_Avg->setVisible (b);
|
||||||
|
if(i==37) ui->sbMaxDrift->setVisible(b);
|
||||||
j=j>>1;
|
j=j>>1;
|
||||||
}
|
}
|
||||||
ui->pbBestSP->setVisible(m_mode=="FT4");
|
ui->pbBestSP->setVisible(m_mode=="FT4");
|
||||||
@ -6091,11 +6095,11 @@ void MainWindow::on_actionFST4_triggered()
|
|||||||
ui->rh_decodes_title_label->setText(tr ("Rx Frequency"));
|
ui->rh_decodes_title_label->setText(tr ("Rx Frequency"));
|
||||||
WSPR_config(false);
|
WSPR_config(false);
|
||||||
if(m_config.single_decode()) {
|
if(m_config.single_decode()) {
|
||||||
// 0123456789012345678901234567890123456
|
// 01234567890123456789012345678901234567
|
||||||
displayWidgets(nWidgets("1111110001001110000100000001000000000"));
|
displayWidgets(nWidgets("11111100010011100001000000010000000000"));
|
||||||
m_wideGraph->setSingleDecode(true);
|
m_wideGraph->setSingleDecode(true);
|
||||||
} else {
|
} else {
|
||||||
displayWidgets(nWidgets("1110110001001110000100000001000000110"));
|
displayWidgets(nWidgets("11101100010011100001000000010000001100"));
|
||||||
m_wideGraph->setSingleDecode(false);
|
m_wideGraph->setSingleDecode(false);
|
||||||
ui->sbFtol->setValue(20);
|
ui->sbFtol->setValue(20);
|
||||||
}
|
}
|
||||||
@ -6131,8 +6135,8 @@ void MainWindow::on_actionFST4W_triggered()
|
|||||||
m_FFTSize = m_nsps / 2;
|
m_FFTSize = m_nsps / 2;
|
||||||
Q_EMIT FFTSize(m_FFTSize);
|
Q_EMIT FFTSize(m_FFTSize);
|
||||||
WSPR_config(true);
|
WSPR_config(true);
|
||||||
// 0123456789012345678901234567890123456
|
// 01234567890123456789012345678901234567
|
||||||
displayWidgets(nWidgets("0000000000000000010100000000000001000"));
|
displayWidgets(nWidgets("00000000000000000101000000000000010000"));
|
||||||
setup_status_bar(false);
|
setup_status_bar(false);
|
||||||
ui->band_hopping_group_box->setChecked(false);
|
ui->band_hopping_group_box->setChecked(false);
|
||||||
ui->band_hopping_group_box->setVisible(false);
|
ui->band_hopping_group_box->setVisible(false);
|
||||||
@ -6180,7 +6184,8 @@ void MainWindow::on_actionFT4_triggered()
|
|||||||
ui->rh_decodes_title_label->setText(tr ("Rx Frequency"));
|
ui->rh_decodes_title_label->setText(tr ("Rx Frequency"));
|
||||||
ui->lh_decodes_title_label->setText(tr ("Band Activity"));
|
ui->lh_decodes_title_label->setText(tr ("Band Activity"));
|
||||||
ui->lh_decodes_headings_label->setText( " UTC dB DT Freq " + tr ("Message"));
|
ui->lh_decodes_headings_label->setText( " UTC dB DT Freq " + tr ("Message"));
|
||||||
displayWidgets(nWidgets("1110100001001110000100000001100010000"));
|
// 01234567890123456789012345678901234567
|
||||||
|
displayWidgets(nWidgets("11101000010011100001000000011000100000"));
|
||||||
ui->txrb2->setEnabled(true);
|
ui->txrb2->setEnabled(true);
|
||||||
ui->txrb4->setEnabled(true);
|
ui->txrb4->setEnabled(true);
|
||||||
ui->txrb5->setEnabled(true);
|
ui->txrb5->setEnabled(true);
|
||||||
@ -6229,7 +6234,8 @@ void MainWindow::on_actionFT8_triggered()
|
|||||||
ui->lh_decodes_title_label->setText(tr ("Band Activity"));
|
ui->lh_decodes_title_label->setText(tr ("Band Activity"));
|
||||||
ui->lh_decodes_headings_label->setText( " UTC dB DT Freq " + tr ("Message"));
|
ui->lh_decodes_headings_label->setText( " UTC dB DT Freq " + tr ("Message"));
|
||||||
}
|
}
|
||||||
displayWidgets(nWidgets("1110100001001110000100001001100010000"));
|
// 01234567890123456789012345678901234567
|
||||||
|
displayWidgets(nWidgets("11101000010011100001000010011000100000"));
|
||||||
ui->txrb2->setEnabled(true);
|
ui->txrb2->setEnabled(true);
|
||||||
ui->txrb4->setEnabled(true);
|
ui->txrb4->setEnabled(true);
|
||||||
ui->txrb5->setEnabled(true);
|
ui->txrb5->setEnabled(true);
|
||||||
@ -6247,7 +6253,8 @@ void MainWindow::on_actionFT8_triggered()
|
|||||||
ui->cbAutoSeq->setEnabled(false);
|
ui->cbAutoSeq->setEnabled(false);
|
||||||
ui->tabWidget->setCurrentIndex(1);
|
ui->tabWidget->setCurrentIndex(1);
|
||||||
ui->TxFreqSpinBox->setValue(300);
|
ui->TxFreqSpinBox->setValue(300);
|
||||||
displayWidgets(nWidgets("1110100001001110000100000000001000000"));
|
// 01234567890123456789012345678901234567
|
||||||
|
displayWidgets(nWidgets("11101000010011100001000000000010000000"));
|
||||||
ui->labDXped->setText(tr ("Fox"));
|
ui->labDXped->setText(tr ("Fox"));
|
||||||
on_fox_log_action_triggered();
|
on_fox_log_action_triggered();
|
||||||
}
|
}
|
||||||
@ -6257,7 +6264,8 @@ void MainWindow::on_actionFT8_triggered()
|
|||||||
ui->cbAutoSeq->setEnabled(false);
|
ui->cbAutoSeq->setEnabled(false);
|
||||||
ui->tabWidget->setCurrentIndex(0);
|
ui->tabWidget->setCurrentIndex(0);
|
||||||
ui->cbHoldTxFreq->setChecked(true);
|
ui->cbHoldTxFreq->setChecked(true);
|
||||||
displayWidgets(nWidgets("1110100001001100000100000000001100000"));
|
// 01234567890123456789012345678901234567
|
||||||
|
displayWidgets(nWidgets("11101000010011000001000000000011000000"));
|
||||||
ui->labDXped->setText(tr ("Hound"));
|
ui->labDXped->setText(tr ("Hound"));
|
||||||
ui->txrb1->setChecked(true);
|
ui->txrb1->setChecked(true);
|
||||||
ui->txrb2->setEnabled(false);
|
ui->txrb2->setEnabled(false);
|
||||||
@ -6332,9 +6340,10 @@ void MainWindow::on_actionJT4_triggered()
|
|||||||
ui->sbSubmode->setValue(0);
|
ui->sbSubmode->setValue(0);
|
||||||
}
|
}
|
||||||
if(bVHF) {
|
if(bVHF) {
|
||||||
displayWidgets(nWidgets("1111100100101101101111000000000000000"));
|
// 01234567890123456789012345678901234567
|
||||||
|
displayWidgets(nWidgets("11111001001011011011110000000000000000"));
|
||||||
} else {
|
} else {
|
||||||
displayWidgets(nWidgets("1110100000001100001100000000000000000"));
|
displayWidgets(nWidgets("11101000000011000011000000000000000000"));
|
||||||
}
|
}
|
||||||
fast_config(false);
|
fast_config(false);
|
||||||
statusChanged();
|
statusChanged();
|
||||||
@ -6391,9 +6400,10 @@ void MainWindow::on_actionJT9_triggered()
|
|||||||
ui->lh_decodes_title_label->setText(tr ("Band Activity"));
|
ui->lh_decodes_title_label->setText(tr ("Band Activity"));
|
||||||
ui->rh_decodes_title_label->setText(tr ("Rx Frequency"));
|
ui->rh_decodes_title_label->setText(tr ("Rx Frequency"));
|
||||||
if(bVHF) {
|
if(bVHF) {
|
||||||
displayWidgets(nWidgets("1111101010001111100100000000000000000"));
|
// 01234567890123456789012345678901234567
|
||||||
|
displayWidgets(nWidgets("11111010100011111001000000000000000000"));
|
||||||
} else {
|
} else {
|
||||||
displayWidgets(nWidgets("1110100000001110000100000000000010000"));
|
displayWidgets(nWidgets("11101000000011100001000000000000100000"));
|
||||||
}
|
}
|
||||||
fast_config(m_bFastMode);
|
fast_config(m_bFastMode);
|
||||||
ui->cbAutoSeq->setVisible(m_bFast9);
|
ui->cbAutoSeq->setVisible(m_bFast9);
|
||||||
@ -6439,9 +6449,10 @@ void MainWindow::on_actionJT65_triggered()
|
|||||||
ui->rh_decodes_title_label->setText(tr ("Rx Frequency"));
|
ui->rh_decodes_title_label->setText(tr ("Rx Frequency"));
|
||||||
}
|
}
|
||||||
if(bVHF) {
|
if(bVHF) {
|
||||||
displayWidgets(nWidgets("1111100100001101101011000100000000000"));
|
// 01234567890123456789012345678901234567
|
||||||
|
displayWidgets(nWidgets("11111001000011011010110001000000000000"));
|
||||||
} else {
|
} else {
|
||||||
displayWidgets(nWidgets("1110100000001110000100000000000010000"));
|
displayWidgets(nWidgets("11101000000011100001000000000000100000"));
|
||||||
}
|
}
|
||||||
fast_config(false);
|
fast_config(false);
|
||||||
if(ui->cbShMsgs->isChecked()) {
|
if(ui->cbShMsgs->isChecked()) {
|
||||||
@ -6476,8 +6487,8 @@ void MainWindow::on_actionQ65_triggered()
|
|||||||
m_wideGraph->setRxFreq(ui->RxFreqSpinBox->value());
|
m_wideGraph->setRxFreq(ui->RxFreqSpinBox->value());
|
||||||
m_wideGraph->setTxFreq(ui->TxFreqSpinBox->value());
|
m_wideGraph->setTxFreq(ui->TxFreqSpinBox->value());
|
||||||
switch_mode (Modes::Q65);
|
switch_mode (Modes::Q65);
|
||||||
// 0123456789012345678901234567890123456
|
// 01234567890123456789012345678901234567
|
||||||
displayWidgets(nWidgets("1111110101101101001110000001000000001"));
|
displayWidgets(nWidgets("11111101011011010011100000010000000011"));
|
||||||
ui->labDXped->setText("");
|
ui->labDXped->setText("");
|
||||||
ui->lh_decodes_title_label->setText(tr ("Single-Period Decodes"));
|
ui->lh_decodes_title_label->setText(tr ("Single-Period Decodes"));
|
||||||
ui->rh_decodes_title_label->setText(tr ("Average Decodes"));
|
ui->rh_decodes_title_label->setText(tr ("Average Decodes"));
|
||||||
@ -6548,7 +6559,8 @@ void MainWindow::on_actionMSK144_triggered()
|
|||||||
ui->rptSpinBox->setValue(0);
|
ui->rptSpinBox->setValue(0);
|
||||||
ui->rptSpinBox->setSingleStep(1);
|
ui->rptSpinBox->setSingleStep(1);
|
||||||
ui->sbFtol->values ({20, 50, 100, 200});
|
ui->sbFtol->values ({20, 50, 100, 200});
|
||||||
displayWidgets(nWidgets("1011111101000000000100010000100000000"));
|
// 01234567890123456789012345678901234567
|
||||||
|
displayWidgets(nWidgets("10111111010000000001000100001000000000"));
|
||||||
fast_config(m_bFastMode);
|
fast_config(m_bFastMode);
|
||||||
statusChanged();
|
statusChanged();
|
||||||
|
|
||||||
@ -6589,7 +6601,8 @@ void MainWindow::on_actionWSPR_triggered()
|
|||||||
m_bFastMode=false;
|
m_bFastMode=false;
|
||||||
m_bFast9=false;
|
m_bFast9=false;
|
||||||
ui->TxFreqSpinBox->setValue(ui->WSPRfreqSpinBox->value());
|
ui->TxFreqSpinBox->setValue(ui->WSPRfreqSpinBox->value());
|
||||||
displayWidgets(nWidgets("0000000000000000010100000000000000000"));
|
// 01234567890123456789012345678901234567
|
||||||
|
displayWidgets(nWidgets("00000000000000000101000000000000000000"));
|
||||||
fast_config(false);
|
fast_config(false);
|
||||||
statusChanged();
|
statusChanged();
|
||||||
}
|
}
|
||||||
@ -6622,7 +6635,8 @@ void MainWindow::on_actionEcho_triggered()
|
|||||||
m_bFast9=false;
|
m_bFast9=false;
|
||||||
WSPR_config(true);
|
WSPR_config(true);
|
||||||
ui->lh_decodes_headings_label->setText(" UTC N Level Sig DF Width Q");
|
ui->lh_decodes_headings_label->setText(" UTC N Level Sig DF Width Q");
|
||||||
displayWidgets(nWidgets("0000000000000000000000100000000000000"));
|
// 01234567890123456789012345678901234567
|
||||||
|
displayWidgets(nWidgets("00000000000000000000001000000000000000"));
|
||||||
fast_config(false);
|
fast_config(false);
|
||||||
statusChanged();
|
statusChanged();
|
||||||
}
|
}
|
||||||
@ -6648,7 +6662,8 @@ void MainWindow::on_actionFreqCal_triggered()
|
|||||||
// 18:15:47 0 1 1500 1550.349 0.100 3.5 10.2
|
// 18:15:47 0 1 1500 1550.349 0.100 3.5 10.2
|
||||||
ui->lh_decodes_headings_label->setText(" UTC Freq CAL Offset fMeas DF Level S/N");
|
ui->lh_decodes_headings_label->setText(" UTC Freq CAL Offset fMeas DF Level S/N");
|
||||||
ui->measure_check_box->setChecked (false);
|
ui->measure_check_box->setChecked (false);
|
||||||
displayWidgets(nWidgets("0011010000000000000000000000010000000"));
|
// 01234567890123456789012345678901234567
|
||||||
|
displayWidgets(nWidgets("00110100000000000000000000000100000000"));
|
||||||
statusChanged();
|
statusChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1677,6 +1677,19 @@ When not checked you can view the calibration results.</string>
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QSpinBox" name="sbMaxDrift">
|
||||||
|
<property name="prefix">
|
||||||
|
<string>Max Drift </string>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>50</number>
|
||||||
|
</property>
|
||||||
|
<property name="singleStep">
|
||||||
|
<number>5</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="verticalSpacer_6">
|
<spacer name="verticalSpacer_6">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
|
Loading…
Reference in New Issue
Block a user