Merge branch 'develop' of bitbucket.org:k1jt/wsjtx into develop

This commit is contained in:
Steven Franke 2020-01-03 14:29:12 -06:00
commit 52075fca24
16 changed files with 320 additions and 115 deletions

1
.gitattributes vendored
View File

@ -3,3 +3,4 @@
/lib/fsk4hf export-ignore
/lib/fsk4hf export-ignore
/robots export-ignore
/plots export-ignore

View File

@ -479,6 +479,7 @@ set (wsjt_FSRCS
lib/ft8/genft8.f90
lib/genmsk_128_90.f90
lib/genmsk40.f90
lib/ft4/ft4code.f90
lib/ft4/genft4.f90
lib/ft4/gen_ft4wave.f90
lib/ft8/gen_ft8wave.f90
@ -1305,6 +1306,9 @@ target_link_libraries (jt65 wsjt_fort wsjt_cxx)
add_executable (ft8code lib/ft8/ft8code.f90 wsjtx.rc)
target_link_libraries (ft8code wsjt_fort wsjt_cxx)
add_executable (ft4code lib/ft4/ft4code.f90 wsjtx.rc)
target_link_libraries (ft4code wsjt_fort wsjt_cxx)
add_executable (ft8 lib/ft8.f90 wsjtx.rc)
target_link_libraries (ft8 wsjt_fort wsjt_cxx)

View File

@ -951,7 +951,7 @@ a few, particularly some Kenwood rigs, require it).</string>
<item row="0" column="1">
<widget class="QRadioButton" name="PTT_DTR_radio_button">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Use the RS-232 DTR control line to toggle your radio's PTT, requires hardware to inteface the line.&lt;/p&gt;&lt;p&gt;Some commercial interface units also use this method.&lt;/p&gt;&lt;p&gt;The DTR control line of the CAT serial port may be used for this or a DTR control line on a different serial port may be used.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Use the RS-232 DTR control line to toggle your radio's PTT, requires hardware to interface the line.&lt;/p&gt;&lt;p&gt;Some commercial interface units also use this method.&lt;/p&gt;&lt;p&gt;The DTR control line of the CAT serial port may be used for this or a DTR control line on a different serial port may be used.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>&amp;DTR</string>
@ -982,7 +982,7 @@ other hardware interface for PTT.</string>
<item row="1" column="1">
<widget class="QRadioButton" name="PTT_RTS_radio_button">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Use the RS-232 RTS control line to toggle your radio's PTT, requires hardware to inteface the line.&lt;/p&gt;&lt;p&gt;Some commercial interface units also use this method.&lt;/p&gt;&lt;p&gt;The RTS control line of the CAT serial port may be used for this or a RTS control line on a different serial port may be used. Note that this option is not available on the CAT serial port when hardware flow control is used.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Use the RS-232 RTS control line to toggle your radio's PTT, requires hardware to interface the line.&lt;/p&gt;&lt;p&gt;Some commercial interface units also use this method.&lt;/p&gt;&lt;p&gt;The RTS control line of the CAT serial port may be used for this or a RTS control line on a different serial port may be used. Note that this option is not available on the CAT serial port when hardware flow control is used.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>R&amp;TS</string>
@ -1080,7 +1080,7 @@ or bandwidth is selected).</string>
<item row="0" column="2">
<widget class="QRadioButton" name="mode_data_radio_button">
<property name="toolTip">
<string>If this is availabe then it is usually the correct mode for this program.</string>
<string>If this is available then it is usually the correct mode for this program.</string>
</property>
<property name="text">
<string>Data/P&amp;kt</string>

View File

@ -94,7 +94,7 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes.
:win32_openssl: https://slproweb.com/download/Win32OpenSSL_Light-1_0_2t.exe[Win32 OpenSSL Light Package]
:win64_openssl: https://slproweb.com/download/Win64OpenSSL_Light-1_1_0L.exe[Win64 OpenSSL Light Package]
:writelog: https://writelog.com/[Writelog]
:wsjt_yahoo_group: https://groups.yahoo.com/neo/groups/wsjtgroup/info[WSJT Group]
:wsjtx_group: https://groups.io/g/WSJTX[WSJTX Group]
:wsjtx: http://physics.princeton.edu/pulsar/K1JT/wsjtx.html[WSJT-X]
:wspr0_guide: http://www.physics.princeton.edu/pulsar/K1JT/WSPR0_Instructions.TXT[WSPR0 Guide]
:wspr: http://physics.princeton.edu/pulsar/K1JT/wspr.html[WSPR Home Page]

View File

@ -1,8 +1,8 @@
=== Help with Setup
The best source of help in setting up your station or configuring
_WSJT-X_ is the {wsjt_yahoo_group} at email address
wsjtgroup@yahoogroups.com. The chances are good that someone with
_WSJT-X_ is the {wsjtx_group} at email address
wsjtx@groups.io. The chances are good that someone with
similar interests and equipment has already solved your problem and
will be happy to help. To post messages here you will need to join
the group.

View File

@ -1,2 +1,3 @@
gfortran -o test28 -fbounds-check -Wall -Wno-conversion test28.f90 pack28.f90 \
unpack28.f90 ihashcall.f90 hash22.f90 save_hash_call.f90
gfortran -c packjt77.f90
gfortran -o test28 -fbounds-check -Wall -Wno-conversion test28.f90 \
../chkcall.f90 packjt77.o

View File

@ -808,7 +808,7 @@ subroutine pack77_01(nwords,w,i3,n3,c77)
call chkcall(w(3),bcall_2,ok2)
if(.not.ok2) go to 900 !3rd word must be a valid basecall
! Type 0.1: K1ABC RR73; W9XYZ <KH1/KH7Z> -11 28 28 10 5 71 DXpedition Mode
! Type 0.1: K1ABC RR73; W9XYZ <KH1/KH7Z> -11 28 28 10 5 71
i3=0
n3=1
call pack28(w(1),n28a)
@ -826,6 +826,9 @@ end subroutine pack77_01
subroutine pack77_02(nwords,w,i3,n3,c77)
! Pack a Type 0.2 message: EU VHF Contest mode
! Example message: PA3XYZ/P R 590003 IO91NP 28 1 1 3 12 25
character*13 w(19),c13
character*77 c77
character*6 bcall_1,grid6
@ -879,7 +882,9 @@ end subroutine pack77_02
subroutine pack77_03(nwords,w,i3,n3,c77)
! Check 0.3 and 0.4 (ARRL Field Day exchange)
! Example message: WA9XYZ KA1ABC R 16A EMA 28 28 1 4 3 7 71
parameter (NSEC=84) !Number of ARRL Sections
character*13 w(19)
@ -941,8 +946,11 @@ subroutine pack77_03(nwords,w,i3,n3,c77)
return
end subroutine pack77_03
subroutine pack77_1(nwords,w,i3,n3,c77)
! Check Type 1 (Standard 77-bit message) and Type 2 (ditto, with a "/P" call)
! Example message: WA9XYZ/R KA1ABC/R R FN42 28 1 28 1 1 15 74
parameter (MAXGRID4=32400)
character*13 w(19),c13
@ -1043,10 +1051,12 @@ end subroutine pack77_1
subroutine pack77_3(nwords,w,i3,n3,c77)
! Check Type 2 (ARRL RTTY contest exchange)
!ARRL RTTY - US/Can: rpt state/prov R 579 MA
! - DX: rpt serial R 559 0013
! Check Type 3 (ARRL RTTY contest exchange)
! ARRL RTTY - US/Can: rpt state/prov R 579 MA
! - DX: rpt serial R 559 0013
! Example message: TU; W9XYZ K1ABC R 579 MA 1 28 28 1 3 13 74
parameter (NUSCAN=65) !Number of US states and Canadian provinces/territories
character*13 w(19)
character*77 c77
@ -1111,8 +1121,11 @@ subroutine pack77_3(nwords,w,i3,n3,c77)
900 return
end subroutine pack77_3
subroutine pack77_4(nwords,w,i3,n3,c77)
! Check Type 3 (One nonstandard call and one hashed call)
! Check Type 4 (One nonstandard call and one hashed call)
! Example message: <WA9XYZ> PJ4/KA1ABC RR73 12 58 1 2 1 74
integer*8 n58
logical ok1,ok2
@ -1180,8 +1193,9 @@ subroutine pack77_4(nwords,w,i3,n3,c77)
end subroutine pack77_4
subroutine pack77_5(nwords,w,i3,n3,c77)
! Check Type 5 (WWROF contest exchange)
!Example message: TU; W9XYZ K1ABC R-09 FN 1 28 28 1 7 9 74 WWROF contest
character*13 w(19)
character*77 c77
character*6 bcall_1,bcall_2
@ -1224,7 +1238,7 @@ subroutine pack77_5(nwords,w,i3,n3,c77)
if(trim(w(1)).eq.'TU;') itu=1
call pack28(w(1+itu),n28a)
call pack28(w(2+itu),n28b)
! 5 TU; W9XYZ K1ABC R-09 FN 1 28 28 1 7 9 74 WWROF contest
!Example message: TU; W9XYZ K1ABC R-09 FN 1 28 28 1 7 9 74 WWROF contest
write(c77,1010) itu,n28a,n28b,ir,irpt,nexch,i3
1010 format(b1,2b28.28,b1,b7.7,b9.9,b3.3)

View File

@ -1,11 +1,20 @@
program test28
use packjt77
parameter (NTOKENS=2063592,MAX22=4194304)
character*13 call_0,call_1,bare_call_1
character*13 arg,call_00,call_0,call_1
character*1 cerr
logical unpk28_success
nargs=iargc()
open(10,file='test28.txt',status='old')
n28=-1
if(nargs.eq.1) then
call getarg(1,arg)
read(arg,'(i13)',err=2) n28
endif
if(n28.ge.0) go to 100
2 open(10,file='test28.txt',status='old')
write(*,1000)
1000 format('Encoded text Recovered text n28 Err? Type'/60('-'))
@ -14,30 +23,41 @@ program test28
if(nargs.eq.0) then
read(10,'(a13)',end=999) call_0
else
call getarg(1,call_0)
call_0=arg
endif
if(call_0.eq.' ') exit
if(call_0(1:3).eq.'CQ ' .and. call_0(4:4).ne.' ') call_0(3:3)='_'
call_1=' '
call pack28(call_0,n28)
call unpack28(n28,call_1)
call_00=call_0
call pack28(call_00,n28)
call unpack28(n28,call_1,unpk28_success)
cerr=' '
if(call_0.ne.call_1) cerr='*'
if(call_1(1:1).eq.'<') then
i=index(call_1,'>')
bare_call_1=call_1(2:i-1)//' '
endif
if(call_0.eq.bare_call_1) cerr=' '
if(call_0(1:3).eq.'CQ_') call_0(3:3)=' '
if(call_1(1:3).eq.'CQ_') call_1(3:3)=' '
if(n28.lt.NTOKENS) write(*,1010) call_0,call_1,n28,cerr
1010 format(a13,2x,a13,i10,2x,a1,2x,'Special token')
if(n28.ge.NTOKENS .and. n28.lt.NTOKENS+MAX22) write(*,1012) call_0, &
call_1,n28,cerr
1012 format(a13,2x,a13,i10,2x,a1,2x,'22-bit hash')
if(n28.ge.NTOKENS .and. n28.lt.NTOKENS+MAX22) then
call_00=call_0
call save_hash_call(call_00,n10,n12,n22)
write(*,1012) call_0,call_1,n28,cerr,n22
1012 format(a13,2x,a13,i10,2x,a1,2x,'22-bit hash',i15)
endif
if(n28.ge.NTOKENS+MAX22) write(*,1014) call_0,call_1,n28,cerr
1014 format(a13,2x,a13,i10,2x,a1,2x,'Standard callsign')
if(nargs.gt.0) exit
enddo
go to 999
100 call unpack28(n28,call_1,unpk28_success)
cerr=' '
if(.not.unpk28_success) cerr='*'
if(call_1(1:3).eq.'CQ_') call_1(3:3)=' '
if(n28.lt.NTOKENS) write(*,2010) n28,call_1,cerr
2010 format(i10,2x,a13,2x,a1,2x,'Special token')
if(n28.ge.NTOKENS .and. n28.lt.NTOKENS+MAX22) write(*,2012) n28,call_1,cerr
2012 format(i10,2x,a13,2x,a1,2x,'22-bit hash')
if(n28.ge.NTOKENS+MAX22) write(*,2014) n28,call_1,cerr
2014 format(i10,2x,a13,2x,a1,2x,'Standard callsign')
999 end program test28

View File

@ -12,23 +12,16 @@ CQ_AAA
CQ_ZZZ
CQ_AAAA
CQ_ZZZZ
EI30T
YW18FIFA
KH1/KH7Z
<EI30T>
<YW18FIFA>
<KH1/KH7Z>
ZS9YOTA
YB50ST
00A
99ZZZ
000A
009ZZZ
999ZZZ
HA70BAY
WB2000XYZ
WB2000XYZABCD
ZM90DX
<ZS9YOTA>
<YB50ST>
<HA70BAY>
<WB2000XYZ>
<ZM90DX>
<VP2E/KA1ABC>
HB9GOLD
<HB9GOLD>
A0
A0A
K1ABC

50
lib/ft4/ft4_testmsg.f90 Normal file
View File

@ -0,0 +1,50 @@
parameter (MAXTEST=75,NTEST=47)
character*37 testmsg(MAXTEST)
data testmsg(1:NTEST)/ &
"TNX BOB 73 GL", & ! 0.0
"PA9XYZ 590003 IO91NP", & ! 0.2
"G4ABC/P R 570007 JO22DB", & ! 0.2
"K1ABC W9XYZ 6A WI", & ! 0.3
"W9XYZ K1ABC R 17B EMA", & ! 0.3
"123456789ABCDEF012", & ! 0.5
"CQ K1ABC FN42", & ! 1.
"K1ABC W9XYZ EN37", & ! 1.
"W9XYZ K1ABC -11", & ! 1.
"K1ABC W9XYZ R-09", & ! 1.
"W9XYZ K1ABC RRR", & ! 1.
"K1ABC W9XYZ 73", & ! 1.
"K1ABC W9XYZ RR73", & ! 1.
"CQ FD K1ABC FN42", & ! 1.
"CQ TEST K1ABC/R FN42", & ! 1.
"K1ABC/R W9XYZ EN37", & ! 1.
"W9XYZ K1ABC/R R FN42", & ! 1.
"K1ABC/R W9XYZ RR73", & ! 1.
"CQ TEST K1ABC FN42", & ! 1.
"W9XYZ <PJ4/K1ABC> -11", & ! 1.
"<PJ4/K1ABC> W9XYZ R-09", & ! 1.
"CQ W9XYZ EN37", & ! 1.
"<YW18FIFA> W9XYZ -11", & ! 1.
"W9XYZ <YW18FIFA> R-09", & ! 1.
"<YW18FIFA> KA1ABC", & ! 1.
"KA1ABC <YW18FIFA> -11", & ! 1.
"<YW18FIFA> KA1ABC R-17", & ! 1.
"<YW18FIFA> KA1ABC 73", & ! 1.
"CQ G4ABC/P IO91", & ! 2.
"G4ABC/P PA9XYZ JO22", & ! 2.
"PA9XYZ G4ABC/P RR73", & ! 2.
"K1ABC W9XYZ 579 WI", & ! 3.
"W9XYZ K1ABC R 589 MA", & ! 3.
"K1ABC KA0DEF 559 MO", & ! 3.
"TU; KA0DEF K1ABC R 569 MA", & ! 3.
"KA1ABC G3AAA 529 0013", & ! 3.
"TU; G3AAA K1ABC R 559 MA", & ! 3.
"CQ KH1/KH7Z", & ! 4.
"CQ PJ4/K1ABC", & ! 4.
"PJ4/K1ABC <W9XYZ>", & ! 4.
"<W9XYZ> PJ4/K1ABC RRR", & ! 4.
"PJ4/K1ABC <W9XYZ> 73", & ! 4.
"<W9XYZ> YW18FIFA", & ! 4.
"YW18FIFA <W9XYZ> RRR", & ! 4.
"<W9XYZ> YW18FIFA 73", & ! 4.
"CQ YW18FIFA", & ! 4.
"<KA1ABC> YW18FIFA RR73"/

101
lib/ft4/ft4code.f90 Normal file
View File

@ -0,0 +1,101 @@
program ft4code
! Provides examples of message packing, LDPC(174,91) encoding, bit and
! symbol ordering, and other details of the FT8 protocol.
use packjt77
include 'ft4_params.f90' !Set various constants
include 'ft4_testmsg.f90'
parameter (NWAVE=NN*NSPS)
character*37 msg,msgsent
character*77 c77
character*9 comment
character bad*1,msgtype*18
integer itone(NN)
integer*1 msgbits(77),rvec(77),codeword(174)
data rvec/0,1,0,0,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,1,0, &
1,0,0,1,0,1,1,0,0,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1, &
0,1,0,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,1/
! Get command-line argument(s)
nargs=iargc()
if(nargs.ne.1 .and. nargs.ne.3) then
print*
print*,'Program ft4code: Provides examples of message packing, ', &
'LDPC(174,91) encoding,'
print*,'bit and symbol ordering, and other details of the FT4 protocol.'
print*
print*,'Usage: ft4code [-c grid] "message" # Results for specified message'
print*,' ft4code -t # Examples of all message types'
go to 999
endif
call getarg(1,msg) !Message to be transmitted
if(len(trim(msg)).eq.2 .and. msg(1:2).eq.'-t') then
nmsg=NTEST
else
call fmtmsg(msg,iz) !To upper case; collapse multiple blanks
nmsg=1
endif
write(*,1010)
1010 format(4x,'Message',31x,'Decoded',29x,'Err i3.n3'/100('-'))
do imsg=1,nmsg
if(nmsg.gt.1) msg=testmsg(imsg)
! Generate msgsent, msgbits, and itone
i3=-1
n3=-1
call pack77(msg,i3,n3,c77)
call genft4(msg,0,msgsent,msgbits,itone)
call encode174_91(msgbits,codeword)
msgtype=""
if(i3.eq.0) then
if(n3.eq.0) msgtype="Free text"
if(n3.eq.1) msgtype="DXpedition mode"
if(n3.eq.2) msgtype="EU VHF Contest"
if(n3.eq.3) msgtype="ARRL Field Day"
if(n3.eq.4) msgtype="ARRL Field Day"
if(n3.eq.5) msgtype="Telemetry"
if(n3.ge.6) msgtype="Undefined type"
endif
if(i3.eq.1) msgtype="Standard msg"
if(i3.eq.2) msgtype="EU VHF Contest"
if(i3.eq.3) msgtype="ARRL RTTY Roundup"
if(i3.eq.4) msgtype="Nonstandard calls"
if(i3.ge.5) msgtype="Undefined msg type"
if(i3.ge.1) n3=-1
bad=" "
comment=' '
if(msg.ne.msgsent) bad="*"
if(n3.ge.0) then
write(*,1020) imsg,msg,msgsent,bad,i3,n3,msgtype,comment
1020 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',i1,1x,a18,1x,a9)
else
write(*,1022) imsg,msg,msgsent,bad,i3,msgtype,comment
1022 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',1x,1x,a18,1x,a9)
endif
enddo
if(nmsg.eq.1) then
write(*,1030) ieor(msgbits,rvec)
1030 format(/'Source-encoded message before scrambling, 77 bits: ',/77i1)
write(*,1032) rvec
1032 format(/'Scrambling vector, 77 bits: ',/77i1)
write(*,1034) msgbits
1034 format(/'Source-encoded message after scrambling, 77 bits:'/77i1)
write(*,1036) codeword(78:91)
1036 format(/'14-bit CRC: ',/14i1)
write(*,1038) codeword(92:174)
1038 format(/'83 Parity bits: ',/83i1)
write(*,1040) 0,itone,0
1040 format(/'Channel symbols (105 tones):'/ &
'R Sync',13x,'Data',13x, &
' Sync',13x,'Data',13x, &
' Sync',13x,'Data',13x,' Sync R'/ &
i1,1x,4i1,1x,29i1,1x,4i1,1x,29i1,1x,4i1,1x,29i1,1x,4i1,i2)
endif
999 end program ft4code

View File

@ -1,51 +1,51 @@
parameter (MAXTEST=75,NTEST=48)
character*37 testmsg(MAXTEST)
data testmsg(1:NTEST)/ &
"CQ K1ABC FN42", &
"K1ABC W9XYZ EN37", &
"W9XYZ K1ABC -11", &
"K1ABC W9XYZ R-09", &
"W9XYZ K1ABC RRR", &
"K1ABC W9XYZ 73", &
"K1ABC W9XYZ RR73", &
"CQ KH1/KH7Z", &
"K1ABC RR73; W9XYZ <KH1/KH7Z> -08", &
"CQ FD K1ABC FN42", &
"K1ABC W9XYZ 6A WI", &
"W9XYZ K1ABC R 2B EMA", &
"CQ TEST K1ABC/R FN42", &
"K1ABC/R W9XYZ EN37", &
"W9XYZ K1ABC/R R FN42", &
"K1ABC/R W9XYZ RR73", &
"CQ TEST K1ABC FN42", &
"K1ABC W9XYZ 579 WI", &
"W9XYZ K1ABC R 589 MA", &
"K1ABC KA0DEF 559 MO", &
"TU; KA0DEF K1ABC R 569 MA", &
"KA1ABC G3AAA 529 0013", &
"TU; G3AAA K1ABC R 559 MA", &
"CQ G4ABC/P IO91", &
"G4ABC/P PA9XYZ JO22", &
"PA9XYZ 590003 IO91NP", &
"G4ABC/P R 570007 JO22DB", &
"PA9XYZ G4ABC/P RR73", &
"CQ PJ4/K1ABC", &
"PJ4/K1ABC <W9XYZ>", &
"W9XYZ <PJ4/K1ABC> -11", &
"<PJ4/K1ABC> W9XYZ R-09", &
"<W9XYZ> PJ4/K1ABC RRR", &
"PJ4/K1ABC <W9XYZ> 73", &
"CQ W9XYZ EN37", &
"<W9XYZ> YW18FIFA", &
"<YW18FIFA> W9XYZ -11", &
"W9XYZ <YW18FIFA> R-09", &
"YW18FIFA <W9XYZ> RRR", &
"<W9XYZ> YW18FIFA 73", &
"TNX BOB 73 GL", &
"CQ YW18FIFA", &
"<YW18FIFA> KA1ABC", &
"KA1ABC <YW18FIFA> -11", &
"<YW18FIFA> KA1ABC R-17", &
"<KA1ABC> YW18FIFA RR73", &
"<YW18FIFA> KA1ABC 73", &
"123456789ABCDEF012"/
"TNX BOB 73 GL", & ! 0.0
"K1ABC RR73; W9XYZ <KH1/KH7Z> -08", & ! 0.1
"PA9XYZ 590003 IO91NP", & ! 0.2
"G4ABC/P R 570007 JO22DB", & ! 0.2
"K1ABC W9XYZ 6A WI", & ! 0.3
"W9XYZ K1ABC R 17B EMA", & ! 0.3
"123456789ABCDEF012", & ! 0.5
"CQ K1ABC FN42", & ! 1.
"K1ABC W9XYZ EN37", & ! 1.
"W9XYZ K1ABC -11", & ! 1.
"K1ABC W9XYZ R-09", & ! 1.
"W9XYZ K1ABC RRR", & ! 1.
"K1ABC W9XYZ 73", & ! 1.
"K1ABC W9XYZ RR73", & ! 1.
"CQ FD K1ABC FN42", & ! 1.
"CQ TEST K1ABC/R FN42", & ! 1.
"K1ABC/R W9XYZ EN37", & ! 1.
"W9XYZ K1ABC/R R FN42", & ! 1.
"K1ABC/R W9XYZ RR73", & ! 1.
"CQ TEST K1ABC FN42", & ! 1.
"W9XYZ <PJ4/K1ABC> -11", & ! 1.
"<PJ4/K1ABC> W9XYZ R-09", & ! 1.
"CQ W9XYZ EN37", & ! 1.
"<YW18FIFA> W9XYZ -11", & ! 1.
"W9XYZ <YW18FIFA> R-09", & ! 1.
"<YW18FIFA> KA1ABC", & ! 1.
"KA1ABC <YW18FIFA> -11", & ! 1.
"<YW18FIFA> KA1ABC R-17", & ! 1.
"<YW18FIFA> KA1ABC 73", & ! 1.
"CQ G4ABC/P IO91", & ! 2.
"G4ABC/P PA9XYZ JO22", & ! 2.
"PA9XYZ G4ABC/P RR73", & ! 2.
"K1ABC W9XYZ 579 WI", & ! 3.
"W9XYZ K1ABC R 589 MA", & ! 3.
"K1ABC KA0DEF 559 MO", & ! 3.
"TU; KA0DEF K1ABC R 569 MA", & ! 3.
"KA1ABC G3AAA 529 0013", & ! 3.
"TU; G3AAA K1ABC R 559 MA", & ! 3.
"CQ KH1/KH7Z", & ! 4.
"CQ PJ4/K1ABC", & ! 4.
"PJ4/K1ABC <W9XYZ>", & ! 4.
"<W9XYZ> PJ4/K1ABC RRR", & ! 4.
"PJ4/K1ABC <W9XYZ> 73", & ! 4.
"<W9XYZ> YW18FIFA", & ! 4.
"YW18FIFA <W9XYZ> RRR", & ! 4.
"<W9XYZ> YW18FIFA 73", & ! 4.
"CQ YW18FIFA", & ! 4.
"<KA1ABC> YW18FIFA RR73"/

View File

@ -12,7 +12,8 @@ program ft8code
character*9 comment
character bad*1,msgtype*18
integer itone(NN)
integer*1 msgbits(77)
integer*1 msgbits(77),codeword(174)
logical short
! Get command-line argument(s)
nargs=iargc()
@ -23,19 +24,22 @@ program ft8code
print*,'bit and symbol ordering, and other details of the FT8 protocol.'
print*
print*,'Usage: ft8code [-c grid] "message" # Results for specified message'
print*,' ft8code -t # Examples of all message types'
print*,' ft8code -T # Examples of all message types'
print*,' ft8code -t # Short format examples'
go to 999
endif
call getarg(1,msg) !Message to be transmitted
if(len(trim(msg)).eq.2 .and. msg(1:2).eq.'-t') then
short=.false.
if(len(trim(msg)).eq.2 .and. (msg(1:2).eq.'-T' .or. msg(1:2).eq.'-t')) then
nmsg=NTEST
short=msg(1:2).eq.'-t'
else
call fmtmsg(msg,iz) !To upper case; collapse multiple blanks
nmsg=1
endif
write(*,1010)
if(.not.short) write(*,1010)
1010 format(4x,'Message',31x,'Decoded',29x,'Err i3.n3'/100('-'))
do imsg=1,nmsg
@ -45,6 +49,7 @@ program ft8code
i3=-1
n3=-1
call genft8(msg,i3,n3,msgsent,msgbits,itone)
call encode174_91(msgbits,codeword)
msgtype=""
if(i3.eq.0) then
if(n3.eq.0) msgtype="Free text"
@ -58,26 +63,42 @@ program ft8code
if(i3.eq.1) msgtype="Standard msg"
if(i3.eq.2) msgtype="EU VHF Contest"
if(i3.eq.3) msgtype="ARRL RTTY Roundup"
if(i3.eq.4) msgtype="Nonstandard calls"
if(i3.ge.5) msgtype="Undefined msg type"
if(i3.eq.4) msgtype="Nonstandard call"
if(i3.ge.5) msgtype="Undefined type"
if(i3.ge.1) n3=-1
bad=" "
comment=' '
if(msg.ne.msgsent) bad="*"
if(n3.ge.0) then
write(*,1020) imsg,msg,msgsent,bad,i3,n3,msgtype,comment
1020 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',i1,1x,a18,1x,a9)
if(short) then
if(n3.ge.0) then
write(*,1020) i3,n3,msg,bad,msgtype
1020 format(i1,'.',i1,2x,a37,1x,a1,1x,a18)
else
write(*,1022) i3,msg,bad,msgtype
1022 format(i1,'.',3x,a37,1x,a1,1x,a18)
endif
else
write(*,1022) imsg,msg,msgsent,bad,i3,msgtype,comment
1022 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',1x,1x,a18,1x,a9)
if(n3.ge.0) then
write(*,1024) imsg,msg,msgsent,bad,i3,n3,msgtype,comment
1024 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',i1,1x,a18,1x,a9)
else
write(*,1026) imsg,msg,msgsent,bad,i3,msgtype,comment
1026 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',1x,1x,a18,1x,a9)
endif
endif
enddo
if(nmsg.eq.1) then
write(*,1030) msgbits
1030 format(/'Message bits: ',/77i1)
1030 format(/'Source-encoded message, 77 bits: ',/77i1)
write(*,1031) codeword(78:91)
1031 format(/'14-bit CRC: ',/14i1)
write(*,1032) codeword(92:174)
1032 format(/'83 Parity bits: ',/83i1)
write(*,1034) itone
1034 format(/'Channel symbols (tones):'/79i1)
1034 format(/'Channel symbols (79 tones):'/ &
' Sync ',14x,'Data',15x,'Sync',15x,'Data',15x,'Sync'/ &
7i1,1x,29i1,1x,7i1,1x,29i1,1x,7i1)
endif
999 end program ft8code

View File

@ -2066,7 +2066,7 @@ Yellow when too low</source>
</message>
<message>
<location filename="../widgets/mainwindow.ui" line="984"/>
<source>Frequncy entry</source>
<source>Frequency entry</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -2894,12 +2894,12 @@ list. The list can be maintained in Settings (F2).</source>
</message>
<message>
<location filename="../widgets/mainwindow.ui" line="2638"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;6 digit locators cause 2 different messages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.ui" line="2641"/>
<source>6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</source>
<source>6 digit locators cause 2 different messages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</source>
<translation type="unfinished"></translation>
</message>
<message>

View File

@ -2066,7 +2066,7 @@ Yellow when too low</source>
</message>
<message>
<location filename="../widgets/mainwindow.ui" line="984"/>
<source>Frequncy entry</source>
<source>Frequency entry</source>
<translation type="unfinished"></translation>
</message>
<message>
@ -2894,12 +2894,12 @@ list. The list can be maintained in Settings (F2).</source>
</message>
<message>
<location filename="../widgets/mainwindow.ui" line="2638"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;6 digit locators cause 2 different messages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.ui" line="2641"/>
<source>6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</source>
<source>6 digit locators cause 2 different messages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</source>
<translation type="unfinished"></translation>
</message>
<message>

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="utf-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
@ -981,7 +981,7 @@ QPushButton[state=&quot;ok&quot;] {
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Select operating band or enter frequency in MHz or enter kHz increment followed by k.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleName">
<string>Frequncy entry</string>
<string>Frequency entry</string>
</property>
<property name="accessibleDescription">
<string>Select operating band or enter frequency in MHz or enter kHz increment followed by k.</string>
@ -2635,10 +2635,10 @@ list. The list can be maintained in Settings (F2).</string>
<item>
<widget class="QCheckBox" name="WSPR_prefer_type_1_check_box">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;6 digit locators cause 2 different messages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="accessibleDescription">
<string>6 digit locators cause 2 different mesages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</string>
<string>6 digit locators cause 2 different messages to be sent, the second contains the full locator but only a hashed callsign, other stations must have decoded the first once before they can decode your call in the second. Check this option to only send 4 digit locators if it will avoid the two message protocol.</string>
</property>
<property name="text">
<string>Prefer type 1 messages</string>