From ca873bf088b0723d06418623f52d875bd8ee5e5f Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Sat, 23 Jul 2016 13:22:34 +0000 Subject: [PATCH] Fix some potential bounds errors in setting frequency limits. Implement submodes QRA65B-E on the Tx side. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6942 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- lib/qra64a.f90 | 6 +++--- lib/sync64.f90 | 8 +++++--- mainwindow.cpp | 12 +++++++++++- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/qra64a.f90 b/lib/qra64a.f90 index d9b037bc1..d141e06d6 100644 --- a/lib/qra64a.f90 +++ b/lib/qra64a.f90 @@ -37,8 +37,8 @@ subroutine qra64a(dd0,nutc,nf1,nf2,nfqso,ntol,mycall_12,hiscall_12, & call spec64(dd0,-1,s,savg,ss) fa=max(nf1,nfqso-ntol) fb=min(nf2,nfqso+ntol) - ia=nint(fa/df) - ib=nint(fb/df) + ia=max(1,nint(fa/df)) + ib=min(NZ,nint(fb/df)) call pctile(savg(ia),ib-ia+1,45,base) savg=savg/base - 1.0 ss=ss/base @@ -105,7 +105,7 @@ subroutine qra64a(dd0,nutc,nf1,nf2,nfqso,ntol,mycall_12,hiscall_12, & ! write(*,5001) dtx,nint(f0),0,snr1 !5001 format(f6.3,2i6,f7.1) maxf1=10 - call sync64(dd0,nf1,nf2,maxf1,dtx,f0,kpk,snr,s3a) + call sync64(dd0,nf1,nf2,nfqso,ntol,maxf1,dtx,f0,kpk,snr,s3a) ! write(*,5001) dtx,nint(f0),kpk,snr mycall=mycall_12(1:6) !### May need fixing ### diff --git a/lib/sync64.f90 b/lib/sync64.f90 index d73943087..666bd51c6 100644 --- a/lib/sync64.f90 +++ b/lib/sync64.f90 @@ -1,4 +1,4 @@ -subroutine sync64(dd,nf1,nf2,maxf1,dtx,f0,kpk,snrdb,s3a) +subroutine sync64(dd,nf1,nf2,nfqso,ntol,maxf1,dtx,f0,kpk,snrdb,s3a) parameter (NMAX=60*12000) !Max size of raw data at 12000 Hz parameter (NSPS=2304) !Samples per symbol at 4000 Hz @@ -53,8 +53,10 @@ subroutine sync64(dd,nf1,nf2,maxf1,dtx,f0,kpk,snrdb,s3a) nfft3=NSPC nh3=nfft3/2 df3=4000.0/nfft3 - ia=nint(nf1/df3) - ib=nint(nf2/df3) + fa=max(nf1,nfqso-ntol) + fb=min(nf2,nfqso+ntol) + ia=max(maxf1,nint(fa/df3)) + ib=min(NSPC-1-maxf1,nint(fb/df3)) iz=ib-ia+1 snr=0. jpk=0 diff --git a/mainwindow.cpp b/mainwindow.cpp index 761c3e3a4..43bab649a 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -3984,7 +3984,9 @@ void MainWindow::on_actionMSK144_triggered() void MainWindow::on_actionQRA64_triggered() { + int n=m_nSubMode; on_actionJT65_triggered(); + m_nSubMode=n; m_mode="QRA64"; m_modeTx="QRA64"; ui->actionQRA64->setChecked(true); @@ -3993,9 +3995,15 @@ void MainWindow::on_actionQRA64_triggered() setup_status_bar (m_config.enable_VHF_features ()); m_wideGraph->setMode(m_mode); m_wideGraph->setModeTx(m_modeTx); + ui->sbSubmode->setMaximum(4); + if(m_config.enable_VHF_features()) { + ui->sbSubmode->setValue(m_nSubMode); + } else { + ui->sbSubmode->setValue(0); + ui->sbTR->setValue(0); + } } - void MainWindow::on_actionJT65_triggered() { if(m_mode=="JT4" or m_mode.startsWith ("WSPR")) { @@ -4865,6 +4873,8 @@ void MainWindow::transmit (double snr) if(m_nSubMode==0) toneSpacing=12000.0/6912.0; if(m_nSubMode==1) toneSpacing=2*12000.0/6912.0; if(m_nSubMode==2) toneSpacing=4*12000.0/6912.0; + if(m_nSubMode==3) toneSpacing=8*12000.0/6912.0; + if(m_nSubMode==4) toneSpacing=16*12000.0/6912.0; Q_EMIT sendMessage (NUM_QRA64_SYMBOLS, 6912.0, ui->TxFreqSpinBox->value () - m_XIT, toneSpacing, m_soundOutput, m_config.audio_output_channel (),