mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-05-27 20:02:28 -04:00
66 lines
2.3 KiB
Fortran
66 lines
2.3 KiB
Fortran
subroutine sftx_sub(ckey0)
|
|
|
|
! This routine is required in order to create a SuperFox transmission.
|
|
|
|
! The present version goes through the following steps:
|
|
! 1. Read old-style Fox messages from file 'sfox_1.dat' in the WSJT-X
|
|
! writable data directory.
|
|
! 2. Parse up to NSlots=5 messages to extract MyCall, up to 9 Hound
|
|
! calls, and the report or RR73 to be sent to each Hound.
|
|
! 3. Assemble and encode a single SuperFox message to produce itone(1:151),
|
|
! the array of channel symbol values.
|
|
! 4. Write the contents of array itone to file 'sfox_2.dat'.
|
|
|
|
use qpc_mod
|
|
use sfox_mod
|
|
character*120 line !List of SuperFox message pieces
|
|
character*40 cmsg !Old-style Fox messages
|
|
character*26 freeTextMsg
|
|
character*(*) ckey0
|
|
character*10 ckey
|
|
character*11 foxcall
|
|
logical*1 bMoreCQs,bSendMsg
|
|
integer*1 xin(0:49) !Packed message as 7-bit symbols
|
|
integer*1 y(0:127) !Encoded symbols as i*1 integers
|
|
integer chansym0(127) !Transmitted symbols, data only
|
|
integer isync(24) !Symbol numbers for sync tones
|
|
common/foxcom3/nslots,cmsg(5),itone(151)
|
|
data isync/1,2,4,7,11,16,22,29,37,39,42,43,45,48,52,57,63,70,78,80, &
|
|
83,84,86,89/
|
|
|
|
ckey=ckey0
|
|
|
|
fsample=12000.0
|
|
call sfox_init(7,127,50,'no',fspread,delay,fsample,24)
|
|
freeTextMsg=' '
|
|
bMoreCQs=cmsg(1)(40:40).eq.'1'
|
|
bSendMsg=cmsg(nslots)(39:39).eq.'1'
|
|
if(bSendMsg) then
|
|
freeTextMsg=cmsg(nslots)(1:26)
|
|
if(nslots.gt.2) nslots=2
|
|
endif
|
|
|
|
call foxgen2(nslots,cmsg,line,foxcall) !Parse old-style Fox messages
|
|
|
|
! Pack message information and CRC into xin(0:49)
|
|
call sfox_pack(line,ckey,bMoreCQs,bSendMsg,freeTextMsg,xin)
|
|
call qpc_encode(y,xin) !Encode the message to 128 symbols
|
|
y=cshift(y,1) !Puncture the code by removing y(0)
|
|
y(127)=0
|
|
chansym0=y(0:126)
|
|
|
|
! Create the full itone sequence containing both data and sync symbols
|
|
j=1
|
|
k=0
|
|
do i=1,NDS
|
|
if(j.le.NS .and. i.eq.isync(j)) then
|
|
if(j.lt.NS) j=j+1 !Index for next sync symbol
|
|
itone(i)=0 !Insert sync symbol at tone 0
|
|
else
|
|
k=k+1
|
|
itone(i)=chansym0(k) + 1 !Symbol value 0 transmitted as tone 1, etc.
|
|
endif
|
|
enddo
|
|
|
|
end subroutine sftx_sub
|