mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2024-11-25 05:38:46 -05:00
Fix bug that prevented generation of MSK144 Sh messages with extended callsign. Change all MSK144 Sh code to use 12-char mycall and hiscall and 37-char messages. Hash full extended callsigns (not just base call) and print full callsigns, e.g. <KP4/K1JT K9AN> RRR
This commit is contained in:
parent
5aaa49d4ae
commit
dd9bdc6d1f
@ -29,7 +29,7 @@ subroutine genmsk40(msg,msgsent,ichk,itone,itype)
|
|||||||
10 irpt=i !Report index, 0-15
|
10 irpt=i !Report index, 0-15
|
||||||
if(ichk.lt.10000) then
|
if(ichk.lt.10000) then
|
||||||
hashmsg=msg(2:i1-1)
|
hashmsg=msg(2:i1-1)
|
||||||
call hash(hashmsg,22,ihash)
|
call hash(hashmsg,37,ihash)
|
||||||
ihash=iand(ihash,4095) !12-bit hash
|
ihash=iand(ihash,4095) !12-bit hash
|
||||||
ig=16*ihash + irpt !4-bit report
|
ig=16*ihash + irpt !4-bit report
|
||||||
else
|
else
|
||||||
|
@ -46,6 +46,7 @@ subroutine genmsk_128_90(msg0,ichk,msgsent,i4tone,itype)
|
|||||||
enddo
|
enddo
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
message(1:37)=' '
|
||||||
itype=1
|
itype=1
|
||||||
if(msg0(1:1).eq.'@') then !Generate a fixed tone
|
if(msg0(1:1).eq.'@') then !Generate a fixed tone
|
||||||
read(msg0(2:5),*,end=1,err=1) nfreq !at specified frequency
|
read(msg0(2:5),*,end=1,err=1) nfreq !at specified frequency
|
||||||
@ -54,23 +55,28 @@ subroutine genmsk_128_90(msg0,ichk,msgsent,i4tone,itype)
|
|||||||
2 i4tone(1)=nfreq
|
2 i4tone(1)=nfreq
|
||||||
else
|
else
|
||||||
message=msg0
|
message=msg0
|
||||||
|
|
||||||
do i=1, 37
|
do i=1, 37
|
||||||
if(ichar(message(i:i)).eq.0) then
|
if(ichar(message(i:i)).eq.0) then
|
||||||
message(i:)=' '
|
message(i:37)=' '
|
||||||
exit
|
exit
|
||||||
endif
|
endif
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
do i=1,37 !Strip leading blanks
|
do i=1,37 !Strip leading blanks
|
||||||
if(message(1:1).ne.' ') exit
|
if(message(1:1).ne.' ') exit
|
||||||
message=message(i+1:)
|
message=message(i+1:)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
if(message(1:1).eq.'<') then
|
if(message(1:1).eq.'<') then
|
||||||
call genmsk40(message,msgsent,ichk,i4tone,itype)
|
i2=index(message,'>')
|
||||||
if(itype.lt.0) go to 999
|
i1=0
|
||||||
i4tone(41)=-40
|
if(i2.gt.0) i1=index(message(1:i2),' ')
|
||||||
go to 999
|
if(i1.gt.0) then
|
||||||
|
call genmsk40(message,msgsent,ichk,i4tone,itype)
|
||||||
|
if(itype.lt.0) go to 999
|
||||||
|
i4tone(41)=-40
|
||||||
|
go to 999
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
i3=-1
|
i3=-1
|
||||||
|
@ -5,8 +5,8 @@ subroutine msk40decodeframe(c,mycall,hiscall,xsnr,bswl,nhasharray, &
|
|||||||
|
|
||||||
parameter (NSPM=240)
|
parameter (NSPM=240)
|
||||||
character*4 rpt(0:15)
|
character*4 rpt(0:15)
|
||||||
character*6 mycall,hiscall,mycall0,hiscall0
|
character*12 mycall,hiscall,mycall0,hiscall0
|
||||||
character*22 hashmsg,msgreceived
|
character*37 hashmsg,msgreceived
|
||||||
complex cb(42)
|
complex cb(42)
|
||||||
complex cfac,cca
|
complex cfac,cca
|
||||||
complex c(NSPM)
|
complex c(NSPM)
|
||||||
@ -59,7 +59,7 @@ subroutine msk40decodeframe(c,mycall,hiscall,xsnr,bswl,nhasharray, &
|
|||||||
hashmsg=trim(mycall)//' '//trim(hiscall)
|
hashmsg=trim(mycall)//' '//trim(hiscall)
|
||||||
if( hashmsg .ne. ' ' .and. hiscall .ne. '' ) then ! protect against blank mycall/hiscall
|
if( hashmsg .ne. ' ' .and. hiscall .ne. '' ) then ! protect against blank mycall/hiscall
|
||||||
call fmtmsg(hashmsg,iz)
|
call fmtmsg(hashmsg,iz)
|
||||||
call hash(hashmsg,22,ihash)
|
call hash(hashmsg,37,ihash)
|
||||||
ihash=iand(ihash,4095)
|
ihash=iand(ihash,4095)
|
||||||
else
|
else
|
||||||
ihash=9999 ! so that it can never match a received hash
|
ihash=9999 ! so that it can never match a received hash
|
||||||
|
@ -6,8 +6,8 @@ subroutine msk40spd(cbig,n,ntol,mycall,hiscall,bswl,nhasharray, &
|
|||||||
use timer_module, only: timer
|
use timer_module, only: timer
|
||||||
|
|
||||||
parameter (NSPM=240, MAXSTEPS=150, NFFT=NSPM, MAXCAND=5, NPATTERNS=6)
|
parameter (NSPM=240, MAXSTEPS=150, NFFT=NSPM, MAXCAND=5, NPATTERNS=6)
|
||||||
character*6 mycall,hiscall
|
character*12 mycall,hiscall
|
||||||
character*22 msgreceived
|
character*37 msgreceived
|
||||||
complex cbig(n)
|
complex cbig(n)
|
||||||
complex cdat(3*NSPM) !Analytic signal
|
complex cdat(3*NSPM) !Analytic signal
|
||||||
complex c(NSPM)
|
complex c(NSPM)
|
||||||
|
@ -15,8 +15,7 @@ subroutine mskrtd(id2,nutc0,tsec,ntol,nrxfreq,ndepth,mycall,mygrid,hiscall, &
|
|||||||
|
|
||||||
character*4 decsym !"&" for mskspd or "^" for long averages
|
character*4 decsym !"&" for mskspd or "^" for long averages
|
||||||
character*37 msgreceived !Decoded message
|
character*37 msgreceived !Decoded message
|
||||||
character*22 msgrx22 !Sh messages are returned as 22chars
|
character*37 msglast,msglastswl !Used for dupechecking
|
||||||
character*37 msglast,msglastswl !Used for dupechecking
|
|
||||||
character*80 line !Formatted line with UTC dB T Freq Msg
|
character*80 line !Formatted line with UTC dB T Freq Msg
|
||||||
character*12 mycall,hiscall
|
character*12 mycall,hiscall
|
||||||
character*6 mygrid
|
character*6 mygrid
|
||||||
@ -119,9 +118,8 @@ subroutine mskrtd(id2,nutc0,tsec,ntol,nrxfreq,ndepth,mycall,mygrid,hiscall, &
|
|||||||
call msk144spd(cdat,np,ntol,ndecodesuccess,msgreceived,fc,fest,tdec,navg,ct, &
|
call msk144spd(cdat,np,ntol,ndecodesuccess,msgreceived,fc,fest,tdec,navg,ct, &
|
||||||
softbits)
|
softbits)
|
||||||
if(ndecodesuccess.eq.0 .and. (bshmsg.or.bswl)) then
|
if(ndecodesuccess.eq.0 .and. (bshmsg.or.bswl)) then
|
||||||
call msk40spd(cdat,np,ntol,mycall(1:6),hiscall(1:6),bswl,nhasharray, &
|
call msk40spd(cdat,np,ntol,mycall,hiscall,bswl,nhasharray, &
|
||||||
ndecodesuccess,msgrx22,fc,fest,tdec,navg)
|
ndecodesuccess,msgreceived,fc,fest,tdec,navg)
|
||||||
if( ndecodesuccess .ge. 1 ) msgreceived=msgrx22//' '
|
|
||||||
endif
|
endif
|
||||||
if( ndecodesuccess .ge. 1 ) then
|
if( ndecodesuccess .ge. 1 ) then
|
||||||
tdec=tsec+tdec
|
tdec=tsec+tdec
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
subroutine update_hasharray(nhasharray)
|
subroutine update_hasharray(nhasharray)
|
||||||
|
|
||||||
use packjt77
|
use packjt77
|
||||||
character*22 hashmsg
|
character*37 hashmsg
|
||||||
integer nhasharray(MAXRECENT,MAXRECENT)
|
integer nhasharray(MAXRECENT,MAXRECENT)
|
||||||
|
|
||||||
nhasharray=-1
|
nhasharray=-1
|
||||||
@ -10,12 +10,12 @@ subroutine update_hasharray(nhasharray)
|
|||||||
if( recent_calls(i)(1:1) .ne. ' ' .and. recent_calls(j)(1:1) .ne. ' ' ) then
|
if( recent_calls(i)(1:1) .ne. ' ' .and. recent_calls(j)(1:1) .ne. ' ' ) then
|
||||||
hashmsg=trim(recent_calls(i))//' '//trim(recent_calls(j))
|
hashmsg=trim(recent_calls(i))//' '//trim(recent_calls(j))
|
||||||
call fmtmsg(hashmsg,iz)
|
call fmtmsg(hashmsg,iz)
|
||||||
call hash(hashmsg,22,ihash)
|
call hash(hashmsg,37,ihash)
|
||||||
ihash=iand(ihash,4095)
|
ihash=iand(ihash,4095)
|
||||||
nhasharray(i,j)=ihash
|
nhasharray(i,j)=ihash
|
||||||
hashmsg=trim(recent_calls(j))//' '//trim(recent_calls(i))
|
hashmsg=trim(recent_calls(j))//' '//trim(recent_calls(i))
|
||||||
call fmtmsg(hashmsg,iz)
|
call fmtmsg(hashmsg,iz)
|
||||||
call hash(hashmsg,22,ihash)
|
call hash(hashmsg,37,ihash)
|
||||||
ihash=iand(ihash,4095)
|
ihash=iand(ihash,4095)
|
||||||
nhasharray(j,i)=ihash
|
nhasharray(j,i)=ihash
|
||||||
endif
|
endif
|
||||||
|
@ -1510,11 +1510,13 @@ void MainWindow::fastSink(qint64 frames)
|
|||||||
int RxFreq=ui->RxFreqSpinBox->value ();
|
int RxFreq=ui->RxFreqSpinBox->value ();
|
||||||
int nTRpDepth=m_TRperiod + 1000*(m_ndepth & 3);
|
int nTRpDepth=m_TRperiod + 1000*(m_ndepth & 3);
|
||||||
qint64 ms0 = QDateTime::currentMSecsSinceEpoch();
|
qint64 ms0 = QDateTime::currentMSecsSinceEpoch();
|
||||||
strncpy(dec_data.params.mycall, (m_baseCall+" ").toLatin1(),12);
|
// strncpy(dec_data.params.mycall, (m_baseCall+" ").toLatin1(),12);
|
||||||
|
strncpy(dec_data.params.mycall,(m_config.my_callsign () + " ").toLatin1(),12);
|
||||||
QString hisCall {ui->dxCallEntry->text ()};
|
QString hisCall {ui->dxCallEntry->text ()};
|
||||||
bool bshmsg=ui->cbShMsgs->isChecked();
|
bool bshmsg=ui->cbShMsgs->isChecked();
|
||||||
bool bswl=ui->cbSWL->isChecked();
|
bool bswl=ui->cbSWL->isChecked();
|
||||||
strncpy(dec_data.params.hiscall,(Radio::base_callsign (hisCall) + " ").toLatin1 ().constData (), 12);
|
// strncpy(dec_data.params.hiscall,(Radio::base_callsign (hisCall) + " ").toLatin1 ().constData (), 12);
|
||||||
|
strncpy(dec_data.params.hiscall,(hisCall + " ").toLatin1 ().constData (), 12);
|
||||||
strncpy(dec_data.params.mygrid, (m_config.my_grid()+" ").toLatin1(),6);
|
strncpy(dec_data.params.mygrid, (m_config.my_grid()+" ").toLatin1(),6);
|
||||||
QString dataDir;
|
QString dataDir;
|
||||||
dataDir = m_config.writeable_data_dir ().absolutePath ();
|
dataDir = m_config.writeable_data_dir ().absolutePath ();
|
||||||
@ -4708,6 +4710,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
|
|||||||
(!bMyCall or !bHisCall or m_config.bGenerate77());
|
(!bMyCall or !bHisCall or m_config.bGenerate77());
|
||||||
|
|
||||||
QString t0=hisBase + " " + m_baseCall + " ";
|
QString t0=hisBase + " " + m_baseCall + " ";
|
||||||
|
QString t0s=hisCall + " " + my_callsign + " ";
|
||||||
QString t0a,t0b;
|
QString t0a,t0b;
|
||||||
if(b77) {
|
if(b77) {
|
||||||
if(bHisCall and bMyCall) t0=hisCall + " " + my_callsign + " ";
|
if(bHisCall and bMyCall) t0=hisCall + " " + my_callsign + " ";
|
||||||
@ -4763,8 +4766,8 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(m_mode=="MSK144" and m_bShMsgs) {
|
if(m_mode=="MSK144" and m_bShMsgs) {
|
||||||
int i=t0.length()-1;
|
int i=t0s.length()-1;
|
||||||
t0="<" + t0.mid(0,i) + "> ";
|
t0="<" + t0s.mid(0,i) + "> ";
|
||||||
if(!m_config.bNA_VHF_Contest()) {
|
if(!m_config.bNA_VHF_Contest()) {
|
||||||
if(n<=-2) n=-3;
|
if(n<=-2) n=-3;
|
||||||
if(n>=-1 and n<=1) n=0;
|
if(n>=-1 and n<=1) n=0;
|
||||||
@ -4790,7 +4793,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
|
|||||||
}
|
}
|
||||||
|
|
||||||
t=t0 + (m_send_RR73 ? "RR73" : "RRR");
|
t=t0 + (m_send_RR73 ? "RR73" : "RRR");
|
||||||
if(m_mode=="MSK144" or m_mode=="FT8") {
|
if((m_mode=="MSK144" and !m_bShMsgs) or m_mode=="FT8") {
|
||||||
if(!bHisCall and bMyCall) t=hisCall + " <" + my_callsign + "> " + (m_send_RR73 ? "RR73" : "RRR");
|
if(!bHisCall and bMyCall) t=hisCall + " <" + my_callsign + "> " + (m_send_RR73 ? "RR73" : "RRR");
|
||||||
if(bHisCall and !bMyCall) t="<" + hisCall + "> " + my_callsign + " " + (m_send_RR73 ? "RR73" : "RRR");
|
if(bHisCall and !bMyCall) t="<" + hisCall + "> " + my_callsign + " " + (m_send_RR73 ? "RR73" : "RRR");
|
||||||
}
|
}
|
||||||
@ -4798,7 +4801,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
|
|||||||
msgtype(t, ui->tx4);
|
msgtype(t, ui->tx4);
|
||||||
|
|
||||||
t=t0 + "73";
|
t=t0 + "73";
|
||||||
if(m_mode=="MSK144" or m_mode=="FT8") {
|
if((m_mode=="MSK144" and !m_bShMsgs) or m_mode=="FT8") {
|
||||||
if(!bHisCall and bMyCall) t=hisCall + " <" + my_callsign + "> 73";
|
if(!bHisCall and bMyCall) t=hisCall + " <" + my_callsign + "> 73";
|
||||||
if(bHisCall and !bMyCall) t="<" + hisCall + "> " + my_callsign + " 73";
|
if(bHisCall and !bMyCall) t="<" + hisCall + "> " + my_callsign + " 73";
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user