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
/lib/fsk4hf export-ignore /lib/fsk4hf export-ignore
/robots export-ignore /robots export-ignore
/plots export-ignore

View File

@ -479,6 +479,7 @@ set (wsjt_FSRCS
lib/ft8/genft8.f90 lib/ft8/genft8.f90
lib/genmsk_128_90.f90 lib/genmsk_128_90.f90
lib/genmsk40.f90 lib/genmsk40.f90
lib/ft4/ft4code.f90
lib/ft4/genft4.f90 lib/ft4/genft4.f90
lib/ft4/gen_ft4wave.f90 lib/ft4/gen_ft4wave.f90
lib/ft8/gen_ft8wave.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) add_executable (ft8code lib/ft8/ft8code.f90 wsjtx.rc)
target_link_libraries (ft8code wsjt_fort wsjt_cxx) 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) add_executable (ft8 lib/ft8.f90 wsjtx.rc)
target_link_libraries (ft8 wsjt_fort wsjt_cxx) 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"> <item row="0" column="1">
<widget class="QRadioButton" name="PTT_DTR_radio_button"> <widget class="QRadioButton" name="PTT_DTR_radio_button">
<property name="toolTip"> <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>
<property name="text"> <property name="text">
<string>&amp;DTR</string> <string>&amp;DTR</string>
@ -982,7 +982,7 @@ other hardware interface for PTT.</string>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QRadioButton" name="PTT_RTS_radio_button"> <widget class="QRadioButton" name="PTT_RTS_radio_button">
<property name="toolTip"> <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>
<property name="text"> <property name="text">
<string>R&amp;TS</string> <string>R&amp;TS</string>
@ -1080,7 +1080,7 @@ or bandwidth is selected).</string>
<item row="0" column="2"> <item row="0" column="2">
<widget class="QRadioButton" name="mode_data_radio_button"> <widget class="QRadioButton" name="mode_data_radio_button">
<property name="toolTip"> <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>
<property name="text"> <property name="text">
<string>Data/P&amp;kt</string> <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] :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] :win64_openssl: https://slproweb.com/download/Win64OpenSSL_Light-1_1_0L.exe[Win64 OpenSSL Light Package]
:writelog: https://writelog.com/[Writelog] :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] :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] :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] :wspr: http://physics.princeton.edu/pulsar/K1JT/wspr.html[WSPR Home Page]

View File

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

View File

@ -1,2 +1,3 @@
gfortran -o test28 -fbounds-check -Wall -Wno-conversion test28.f90 pack28.f90 \ gfortran -c packjt77.f90
unpack28.f90 ihashcall.f90 hash22.f90 save_hash_call.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) call chkcall(w(3),bcall_2,ok2)
if(.not.ok2) go to 900 !3rd word must be a valid basecall 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 i3=0
n3=1 n3=1
call pack28(w(1),n28a) call pack28(w(1),n28a)
@ -826,6 +826,9 @@ end subroutine pack77_01
subroutine pack77_02(nwords,w,i3,n3,c77) 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*13 w(19),c13
character*77 c77 character*77 c77
character*6 bcall_1,grid6 character*6 bcall_1,grid6
@ -879,7 +882,9 @@ end subroutine pack77_02
subroutine pack77_03(nwords,w,i3,n3,c77) subroutine pack77_03(nwords,w,i3,n3,c77)
! Check 0.3 and 0.4 (ARRL Field Day exchange) ! 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 parameter (NSEC=84) !Number of ARRL Sections
character*13 w(19) character*13 w(19)
@ -941,8 +946,11 @@ subroutine pack77_03(nwords,w,i3,n3,c77)
return return
end subroutine pack77_03 end subroutine pack77_03
subroutine pack77_1(nwords,w,i3,n3,c77) subroutine pack77_1(nwords,w,i3,n3,c77)
! Check Type 1 (Standard 77-bit message) and Type 2 (ditto, with a "/P" call) ! 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) parameter (MAXGRID4=32400)
character*13 w(19),c13 character*13 w(19),c13
@ -1043,9 +1051,11 @@ end subroutine pack77_1
subroutine pack77_3(nwords,w,i3,n3,c77) 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 ! Check Type 3 (ARRL RTTY contest exchange)
! - DX: rpt serial R 559 0013 ! 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 parameter (NUSCAN=65) !Number of US states and Canadian provinces/territories
character*13 w(19) character*13 w(19)
@ -1111,8 +1121,11 @@ subroutine pack77_3(nwords,w,i3,n3,c77)
900 return 900 return
end subroutine pack77_3 end subroutine pack77_3
subroutine pack77_4(nwords,w,i3,n3,c77) 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 integer*8 n58
logical ok1,ok2 logical ok1,ok2
@ -1180,8 +1193,9 @@ subroutine pack77_4(nwords,w,i3,n3,c77)
end subroutine pack77_4 end subroutine pack77_4
subroutine pack77_5(nwords,w,i3,n3,c77) subroutine pack77_5(nwords,w,i3,n3,c77)
! Check Type 5 (WWROF contest exchange)
! 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*13 w(19)
character*77 c77 character*77 c77
character*6 bcall_1,bcall_2 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 if(trim(w(1)).eq.'TU;') itu=1
call pack28(w(1+itu),n28a) call pack28(w(1+itu),n28a)
call pack28(w(2+itu),n28b) 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 write(c77,1010) itu,n28a,n28b,ir,irpt,nexch,i3
1010 format(b1,2b28.28,b1,b7.7,b9.9,b3.3) 1010 format(b1,2b28.28,b1,b7.7,b9.9,b3.3)

View File

@ -1,11 +1,20 @@
program test28 program test28
use packjt77
parameter (NTOKENS=2063592,MAX22=4194304) 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 character*1 cerr
logical unpk28_success
nargs=iargc() 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) write(*,1000)
1000 format('Encoded text Recovered text n28 Err? Type'/60('-')) 1000 format('Encoded text Recovered text n28 Err? Type'/60('-'))
@ -14,30 +23,41 @@ program test28
if(nargs.eq.0) then if(nargs.eq.0) then
read(10,'(a13)',end=999) call_0 read(10,'(a13)',end=999) call_0
else else
call getarg(1,call_0) call_0=arg
endif endif
if(call_0.eq.' ') exit if(call_0.eq.' ') exit
if(call_0(1:3).eq.'CQ ' .and. call_0(4:4).ne.' ') call_0(3:3)='_' if(call_0(1:3).eq.'CQ ' .and. call_0(4:4).ne.' ') call_0(3:3)='_'
call_1=' ' call_1=' '
call pack28(call_0,n28) call_00=call_0
call unpack28(n28,call_1) call pack28(call_00,n28)
call unpack28(n28,call_1,unpk28_success)
cerr=' ' cerr=' '
if(call_0.ne.call_1) 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_0(1:3).eq.'CQ_') call_0(3:3)=' '
if(call_1(1:3).eq.'CQ_') call_1(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 if(n28.lt.NTOKENS) write(*,1010) call_0,call_1,n28,cerr
1010 format(a13,2x,a13,i10,2x,a1,2x,'Special token') 1010 format(a13,2x,a13,i10,2x,a1,2x,'Special token')
if(n28.ge.NTOKENS .and. n28.lt.NTOKENS+MAX22) write(*,1012) call_0, & if(n28.ge.NTOKENS .and. n28.lt.NTOKENS+MAX22) then
call_1,n28,cerr call_00=call_0
1012 format(a13,2x,a13,i10,2x,a1,2x,'22-bit hash') 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 if(n28.ge.NTOKENS+MAX22) write(*,1014) call_0,call_1,n28,cerr
1014 format(a13,2x,a13,i10,2x,a1,2x,'Standard callsign') 1014 format(a13,2x,a13,i10,2x,a1,2x,'Standard callsign')
if(nargs.gt.0) exit if(nargs.gt.0) exit
enddo 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 999 end program test28

View File

@ -12,23 +12,16 @@ CQ_AAA
CQ_ZZZ CQ_ZZZ
CQ_AAAA CQ_AAAA
CQ_ZZZZ CQ_ZZZZ
EI30T <EI30T>
YW18FIFA <YW18FIFA>
KH1/KH7Z
<KH1/KH7Z> <KH1/KH7Z>
ZS9YOTA <ZS9YOTA>
YB50ST <YB50ST>
00A <HA70BAY>
99ZZZ <WB2000XYZ>
000A <ZM90DX>
009ZZZ
999ZZZ
HA70BAY
WB2000XYZ
WB2000XYZABCD
ZM90DX
<VP2E/KA1ABC> <VP2E/KA1ABC>
HB9GOLD <HB9GOLD>
A0 A0
A0A A0A
K1ABC 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) parameter (MAXTEST=75,NTEST=48)
character*37 testmsg(MAXTEST) character*37 testmsg(MAXTEST)
data testmsg(1:NTEST)/ & data testmsg(1:NTEST)/ &
"CQ K1ABC FN42", & "TNX BOB 73 GL", & ! 0.0
"K1ABC W9XYZ EN37", & "K1ABC RR73; W9XYZ <KH1/KH7Z> -08", & ! 0.1
"W9XYZ K1ABC -11", & "PA9XYZ 590003 IO91NP", & ! 0.2
"K1ABC W9XYZ R-09", & "G4ABC/P R 570007 JO22DB", & ! 0.2
"W9XYZ K1ABC RRR", & "K1ABC W9XYZ 6A WI", & ! 0.3
"K1ABC W9XYZ 73", & "W9XYZ K1ABC R 17B EMA", & ! 0.3
"K1ABC W9XYZ RR73", & "123456789ABCDEF012", & ! 0.5
"CQ KH1/KH7Z", & "CQ K1ABC FN42", & ! 1.
"K1ABC RR73; W9XYZ <KH1/KH7Z> -08", & "K1ABC W9XYZ EN37", & ! 1.
"CQ FD K1ABC FN42", & "W9XYZ K1ABC -11", & ! 1.
"K1ABC W9XYZ 6A WI", & "K1ABC W9XYZ R-09", & ! 1.
"W9XYZ K1ABC R 2B EMA", & "W9XYZ K1ABC RRR", & ! 1.
"CQ TEST K1ABC/R FN42", & "K1ABC W9XYZ 73", & ! 1.
"K1ABC/R W9XYZ EN37", & "K1ABC W9XYZ RR73", & ! 1.
"W9XYZ K1ABC/R R FN42", & "CQ FD K1ABC FN42", & ! 1.
"K1ABC/R W9XYZ RR73", & "CQ TEST K1ABC/R FN42", & ! 1.
"CQ TEST K1ABC FN42", & "K1ABC/R W9XYZ EN37", & ! 1.
"K1ABC W9XYZ 579 WI", & "W9XYZ K1ABC/R R FN42", & ! 1.
"W9XYZ K1ABC R 589 MA", & "K1ABC/R W9XYZ RR73", & ! 1.
"K1ABC KA0DEF 559 MO", & "CQ TEST K1ABC FN42", & ! 1.
"TU; KA0DEF K1ABC R 569 MA", & "W9XYZ <PJ4/K1ABC> -11", & ! 1.
"KA1ABC G3AAA 529 0013", & "<PJ4/K1ABC> W9XYZ R-09", & ! 1.
"TU; G3AAA K1ABC R 559 MA", & "CQ W9XYZ EN37", & ! 1.
"CQ G4ABC/P IO91", & "<YW18FIFA> W9XYZ -11", & ! 1.
"G4ABC/P PA9XYZ JO22", & "W9XYZ <YW18FIFA> R-09", & ! 1.
"PA9XYZ 590003 IO91NP", & "<YW18FIFA> KA1ABC", & ! 1.
"G4ABC/P R 570007 JO22DB", & "KA1ABC <YW18FIFA> -11", & ! 1.
"PA9XYZ G4ABC/P RR73", & "<YW18FIFA> KA1ABC R-17", & ! 1.
"CQ PJ4/K1ABC", & "<YW18FIFA> KA1ABC 73", & ! 1.
"PJ4/K1ABC <W9XYZ>", & "CQ G4ABC/P IO91", & ! 2.
"W9XYZ <PJ4/K1ABC> -11", & "G4ABC/P PA9XYZ JO22", & ! 2.
"<PJ4/K1ABC> W9XYZ R-09", & "PA9XYZ G4ABC/P RR73", & ! 2.
"<W9XYZ> PJ4/K1ABC RRR", & "K1ABC W9XYZ 579 WI", & ! 3.
"PJ4/K1ABC <W9XYZ> 73", & "W9XYZ K1ABC R 589 MA", & ! 3.
"CQ W9XYZ EN37", & "K1ABC KA0DEF 559 MO", & ! 3.
"<W9XYZ> YW18FIFA", & "TU; KA0DEF K1ABC R 569 MA", & ! 3.
"<YW18FIFA> W9XYZ -11", & "KA1ABC G3AAA 529 0013", & ! 3.
"W9XYZ <YW18FIFA> R-09", & "TU; G3AAA K1ABC R 559 MA", & ! 3.
"YW18FIFA <W9XYZ> RRR", & "CQ KH1/KH7Z", & ! 4.
"<W9XYZ> YW18FIFA 73", & "CQ PJ4/K1ABC", & ! 4.
"TNX BOB 73 GL", & "PJ4/K1ABC <W9XYZ>", & ! 4.
"CQ YW18FIFA", & "<W9XYZ> PJ4/K1ABC RRR", & ! 4.
"<YW18FIFA> KA1ABC", & "PJ4/K1ABC <W9XYZ> 73", & ! 4.
"KA1ABC <YW18FIFA> -11", & "<W9XYZ> YW18FIFA", & ! 4.
"<YW18FIFA> KA1ABC R-17", & "YW18FIFA <W9XYZ> RRR", & ! 4.
"<KA1ABC> YW18FIFA RR73", & "<W9XYZ> YW18FIFA 73", & ! 4.
"<YW18FIFA> KA1ABC 73", & "CQ YW18FIFA", & ! 4.
"123456789ABCDEF012"/ "<KA1ABC> YW18FIFA RR73"/

View File

@ -12,7 +12,8 @@ program ft8code
character*9 comment character*9 comment
character bad*1,msgtype*18 character bad*1,msgtype*18
integer itone(NN) integer itone(NN)
integer*1 msgbits(77) integer*1 msgbits(77),codeword(174)
logical short
! Get command-line argument(s) ! Get command-line argument(s)
nargs=iargc() nargs=iargc()
@ -23,19 +24,22 @@ program ft8code
print*,'bit and symbol ordering, and other details of the FT8 protocol.' print*,'bit and symbol ordering, and other details of the FT8 protocol.'
print* print*
print*,'Usage: ft8code [-c grid] "message" # Results for specified message' 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 go to 999
endif endif
call getarg(1,msg) !Message to be transmitted 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 nmsg=NTEST
short=msg(1:2).eq.'-t'
else else
call fmtmsg(msg,iz) !To upper case; collapse multiple blanks call fmtmsg(msg,iz) !To upper case; collapse multiple blanks
nmsg=1 nmsg=1
endif endif
write(*,1010) if(.not.short) write(*,1010)
1010 format(4x,'Message',31x,'Decoded',29x,'Err i3.n3'/100('-')) 1010 format(4x,'Message',31x,'Decoded',29x,'Err i3.n3'/100('-'))
do imsg=1,nmsg do imsg=1,nmsg
@ -45,6 +49,7 @@ program ft8code
i3=-1 i3=-1
n3=-1 n3=-1
call genft8(msg,i3,n3,msgsent,msgbits,itone) call genft8(msg,i3,n3,msgsent,msgbits,itone)
call encode174_91(msgbits,codeword)
msgtype="" msgtype=""
if(i3.eq.0) then if(i3.eq.0) then
if(n3.eq.0) msgtype="Free text" if(n3.eq.0) msgtype="Free text"
@ -58,26 +63,42 @@ program ft8code
if(i3.eq.1) msgtype="Standard msg" if(i3.eq.1) msgtype="Standard msg"
if(i3.eq.2) msgtype="EU VHF Contest" if(i3.eq.2) msgtype="EU VHF Contest"
if(i3.eq.3) msgtype="ARRL RTTY Roundup" if(i3.eq.3) msgtype="ARRL RTTY Roundup"
if(i3.eq.4) msgtype="Nonstandard calls" if(i3.eq.4) msgtype="Nonstandard call"
if(i3.ge.5) msgtype="Undefined msg type" if(i3.ge.5) msgtype="Undefined type"
if(i3.ge.1) n3=-1 if(i3.ge.1) n3=-1
bad=" " bad=" "
comment=' ' comment=' '
if(msg.ne.msgsent) bad="*" if(msg.ne.msgsent) bad="*"
if(n3.ge.0) then if(short) then
write(*,1020) imsg,msg,msgsent,bad,i3,n3,msgtype,comment if(n3.ge.0) then
1020 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',i1,1x,a18,1x,a9) 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 else
write(*,1022) imsg,msg,msgsent,bad,i3,msgtype,comment if(n3.ge.0) then
1022 format(i2,'.',1x,a37,1x,a37,1x,a1,2x,i1,'.',1x,1x,a18,1x,a9) 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 endif
enddo enddo
if(nmsg.eq.1) then if(nmsg.eq.1) then
write(*,1030) msgbits 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 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 endif
999 end program ft8code 999 end program ft8code

View File

@ -2066,7 +2066,7 @@ Yellow when too low</source>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.ui" line="984"/> <location filename="../widgets/mainwindow.ui" line="984"/>
<source>Frequncy entry</source> <source>Frequency entry</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@ -2894,12 +2894,12 @@ list. The list can be maintained in Settings (F2).</source>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.ui" line="2638"/> <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> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.ui" line="2641"/> <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> <translation type="unfinished"></translation>
</message> </message>
<message> <message>

View File

@ -2066,7 +2066,7 @@ Yellow when too low</source>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.ui" line="984"/> <location filename="../widgets/mainwindow.ui" line="984"/>
<source>Frequncy entry</source> <source>Frequency entry</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@ -2894,12 +2894,12 @@ list. The list can be maintained in Settings (F2).</source>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.ui" line="2638"/> <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> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.ui" line="2641"/> <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> <translation type="unfinished"></translation>
</message> </message>
<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"> <ui version="4.0">
<class>MainWindow</class> <class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow"> <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> <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>
<property name="accessibleName"> <property name="accessibleName">
<string>Frequncy entry</string> <string>Frequency entry</string>
</property> </property>
<property name="accessibleDescription"> <property name="accessibleDescription">
<string>Select operating band or enter frequency in MHz or enter kHz increment followed by k.</string> <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> <item>
<widget class="QCheckBox" name="WSPR_prefer_type_1_check_box"> <widget class="QCheckBox" name="WSPR_prefer_type_1_check_box">
<property name="toolTip"> <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>
<property name="accessibleDescription"> <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>
<property name="text"> <property name="text">
<string>Prefer type 1 messages</string> <string>Prefer type 1 messages</string>