mirror of https://github.com/saitohirga/WSJT-X.git
Plot a red "sync" curve in QRA64 mode.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6876 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
73c5fef39b
commit
77e295d36d
|
@ -19,6 +19,7 @@ extern "C" {
|
||||||
extern struct dec_data {
|
extern struct dec_data {
|
||||||
float ss[184*NSMAX];
|
float ss[184*NSMAX];
|
||||||
float savg[NSMAX];
|
float savg[NSMAX];
|
||||||
|
float sred[5760];
|
||||||
short int d2[NTMAX*RX_SAMPLE_RATE];
|
short int d2[NTMAX*RX_SAMPLE_RATE];
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
|
|
|
@ -52,8 +52,10 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
|
||||||
else
|
else
|
||||||
open(13,file=trim(temp_dir)//'/decoded.txt',status='unknown')
|
open(13,file=trim(temp_dir)//'/decoded.txt',status='unknown')
|
||||||
end if
|
end if
|
||||||
if(params%nmode.eq.4 .or. params%nmode.eq.65) open(14,file=trim(temp_dir)//'/avemsg.txt', &
|
if(params%nmode.eq.4 .or. params%nmode.eq.65) open(14,file=trim(temp_dir)// &
|
||||||
status='unknown')
|
'/avemsg.txt',status='unknown')
|
||||||
|
if(params%nmode.eq.164) open(17,file=trim(temp_dir)//'/red.dat', &
|
||||||
|
access='stream',status='unknown')
|
||||||
|
|
||||||
if(params%nmode.eq.4) then
|
if(params%nmode.eq.4) then
|
||||||
jz=52*nfsample
|
jz=52*nfsample
|
||||||
|
@ -84,7 +86,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
|
||||||
!$omp parallel sections num_threads(2) copyin(/timer_private/) shared(ndecoded) if(.true.) !iif() needed on Mac
|
!$omp parallel sections num_threads(2) copyin(/timer_private/) shared(ndecoded) if(.true.) !iif() needed on Mac
|
||||||
|
|
||||||
!$omp section
|
!$omp section
|
||||||
if(params%nmode.eq.65 .or. params%nmode.eq.165 .or. &
|
if(params%nmode.eq.65 .or. params%nmode.eq.164 .or. &
|
||||||
(params%nmode.eq.(65+9) .and. params%ntxmode.eq.65)) then
|
(params%nmode.eq.(65+9) .and. params%ntxmode.eq.65)) then
|
||||||
! We're in JT65 mode, or should do JT65 first
|
! We're in JT65 mode, or should do JT65 first
|
||||||
if(newdat65) dd(1:npts65)=id2(1:npts65)
|
if(newdat65) dd(1:npts65)=id2(1:npts65)
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
type, bind(C) :: dec_data
|
type, bind(C) :: dec_data
|
||||||
real(c_float) :: ss(184,NSMAX)
|
real(c_float) :: ss(184,NSMAX)
|
||||||
real(c_float) :: savg(NSMAX)
|
real(c_float) :: savg(NSMAX)
|
||||||
|
real(c_float) :: sred(5760)
|
||||||
integer(c_short) :: id2(NMAX)
|
integer(c_short) :: id2(NMAX)
|
||||||
type(params_block) :: params
|
type(params_block) :: params
|
||||||
end type dec_data
|
end type dec_data
|
||||||
|
|
|
@ -14,6 +14,7 @@ subroutine qra64a(dd,nf1,nf2,nfqso,ntol,mycall_12,sync,nsnr,dtx,nfreq, &
|
||||||
real s(NZ)
|
real s(NZ)
|
||||||
real savg(NZ)
|
real savg(NZ)
|
||||||
real blue(0:25)
|
real blue(0:25)
|
||||||
|
real red0(NZ)
|
||||||
real red(NZ)
|
real red(NZ)
|
||||||
real x(NFFT)
|
real x(NFFT)
|
||||||
complex cx(0:NH)
|
complex cx(0:NH)
|
||||||
|
@ -23,11 +24,6 @@ subroutine qra64a(dd,nf1,nf2,nfqso,ntol,mycall_12,sync,nsnr,dtx,nfreq, &
|
||||||
common/qra64com/ss(NZ,194),s3(0:63,1:63),ccf(NZ,0:25)
|
common/qra64com/ss(NZ,194),s3(0:63,1:63),ccf(NZ,0:25)
|
||||||
save
|
save
|
||||||
|
|
||||||
! rewind 73
|
|
||||||
! rewind 74
|
|
||||||
! rewind 75
|
|
||||||
! rewind 76
|
|
||||||
|
|
||||||
decoded=' '
|
decoded=' '
|
||||||
nft=99
|
nft=99
|
||||||
nsnr=-30
|
nsnr=-30
|
||||||
|
@ -59,10 +55,11 @@ subroutine qra64a(dd,nf1,nf2,nfqso,ntol,mycall_12,sync,nsnr,dtx,nfreq, &
|
||||||
fb=min(nf2,nfqso+ntol)
|
fb=min(nf2,nfqso+ntol)
|
||||||
ia=nint(fa/df)
|
ia=nint(fa/df)
|
||||||
ib=nint(fb/df)
|
ib=nint(fb/df)
|
||||||
|
red0=0.
|
||||||
fac=1.0/sqrt(21.0)
|
fac=1.0/sqrt(21.0)
|
||||||
sync=0.
|
sync=0.
|
||||||
do if0=ia,ib
|
do if0=ia,ib
|
||||||
red(if0)=0.
|
red0(if0)=0.
|
||||||
do j=0,25
|
do j=0,25
|
||||||
t=-3.0
|
t=-3.0
|
||||||
do n=0,6
|
do n=0,6
|
||||||
|
@ -70,10 +67,10 @@ subroutine qra64a(dd,nf1,nf2,nfqso,ntol,mycall_12,sync,nsnr,dtx,nfreq, &
|
||||||
t=t + ss(i,1+2*n+j) + ss(i,1+2*n+j+78) + ss(i,1+2*n+j+154)
|
t=t + ss(i,1+2*n+j) + ss(i,1+2*n+j+78) + ss(i,1+2*n+j+154)
|
||||||
enddo
|
enddo
|
||||||
ccf(if0,j)=fac*t
|
ccf(if0,j)=fac*t
|
||||||
if(ccf(if0,j).gt.red(if0)) then
|
if(ccf(if0,j).gt.red0(if0)) then
|
||||||
red(if0)=ccf(if0,j)
|
red0(if0)=ccf(if0,j)
|
||||||
if(red(if0).gt.sync) then
|
if(red0(if0).gt.sync) then
|
||||||
sync=red(if0)
|
sync=red0(if0)
|
||||||
f0=if0*df
|
f0=if0*df
|
||||||
dtx=j*istep/12000.0 - 1.0
|
dtx=j*istep/12000.0 - 1.0
|
||||||
i0=if0
|
i0=if0
|
||||||
|
@ -83,6 +80,22 @@ subroutine qra64a(dd,nf1,nf2,nfqso,ntol,mycall_12,sync,nsnr,dtx,nfreq, &
|
||||||
enddo
|
enddo
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
|
red(ia:ib)=0.
|
||||||
|
rewind 73
|
||||||
|
do i=ia+3,ib-3
|
||||||
|
r1=red0(i)
|
||||||
|
red0(i)=0.
|
||||||
|
r0=maxval(red0(i-3:i+3))
|
||||||
|
red0(i)=r1
|
||||||
|
red(i)=max(0.0,r1-r0)
|
||||||
|
write(73,3001) i*df,red(i),red0(i),r0
|
||||||
|
3001 format(4f12.3)
|
||||||
|
enddo
|
||||||
|
flush(73)
|
||||||
|
|
||||||
|
write(17) ia,ib,red(ia:ib)
|
||||||
|
close(17)
|
||||||
|
|
||||||
if0=nint(f0/df)
|
if0=nint(f0/df)
|
||||||
nfreq=nint(f0)
|
nfreq=nint(f0)
|
||||||
blue(0:25)=ccf(if0,0:25)
|
blue(0:25)=ccf(if0,0:25)
|
||||||
|
|
|
@ -2117,8 +2117,8 @@ void MainWindow::decode() //decode()
|
||||||
if(m_modeTx=="JT65") dec_data.params.ntxmode=65;
|
if(m_modeTx=="JT65") dec_data.params.ntxmode=65;
|
||||||
dec_data.params.nmode=9;
|
dec_data.params.nmode=9;
|
||||||
if(m_mode=="JT65") dec_data.params.nmode=65;
|
if(m_mode=="JT65") dec_data.params.nmode=65;
|
||||||
if(m_mode=="QRA64") dec_data.params.nmode=165;
|
if(m_mode=="QRA64") dec_data.params.nmode=164;
|
||||||
if(m_mode=="QRA64") dec_data.params.ntxmode=165;
|
if(m_mode=="QRA64") dec_data.params.ntxmode=164;
|
||||||
if(m_mode=="JT9+JT65") dec_data.params.nmode=9+65; // = 74
|
if(m_mode=="JT9+JT65") dec_data.params.nmode=9+65; // = 74
|
||||||
if(m_mode=="JT4") {
|
if(m_mode=="JT4") {
|
||||||
dec_data.params.nmode=4;
|
dec_data.params.nmode=4;
|
||||||
|
@ -2326,6 +2326,26 @@ void MainWindow::readFromStdout() //readFromStdout
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(t.indexOf("<DecodeFinished>") >= 0) {
|
if(t.indexOf("<DecodeFinished>") >= 0) {
|
||||||
|
|
||||||
|
//###
|
||||||
|
if(m_mode=="QRA64") {
|
||||||
|
char name[512];
|
||||||
|
QString fname=m_config.temp_dir ().absoluteFilePath ("red.dat");
|
||||||
|
strncpy(name,fname.toLatin1(), sizeof (name) - 1);
|
||||||
|
name[sizeof (name) - 1] = '\0';
|
||||||
|
FILE* fp=fopen(name,"rb");
|
||||||
|
if(fp != NULL) {
|
||||||
|
int n,ia,ib;
|
||||||
|
memset(dec_data.sred,0,4*5760);
|
||||||
|
n=fread(&ia,4,1,fp);
|
||||||
|
n=fread(&ib,4,1,fp);
|
||||||
|
n=fread(&dec_data.sred[ia-1],4,ib-ia+1,fp);
|
||||||
|
m_wideGraph->drawRed(ia,ib);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//###
|
||||||
|
|
||||||
m_bDecoded = t.mid (20).trimmed ().toInt () > 0;
|
m_bDecoded = t.mid (20).trimmed ().toInt () > 0;
|
||||||
if(!m_diskData) killFileTimer.start (3*1000*m_TRperiod/4); //Kill in 45 s
|
if(!m_diskData) killFileTimer.start (3*1000*m_TRperiod/4); //Kill in 45 s
|
||||||
decodeDone ();
|
decodeDone ();
|
||||||
|
|
55
plotter.cpp
55
plotter.cpp
|
@ -92,11 +92,11 @@ void CPlotter::paintEvent(QPaintEvent *) // paint
|
||||||
m_paintEventBusy=false;
|
m_paintEventBusy=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CPlotter::draw(float swide[], bool bScroll) //draw()
|
void CPlotter::draw(float swide[], bool bScroll, bool bRed)
|
||||||
{
|
{
|
||||||
int j,j0;
|
int j,j0;
|
||||||
|
static int jtop=0;
|
||||||
float y,y2,ymin;
|
float y,y2,ymin;
|
||||||
|
|
||||||
double fac = sqrt(m_binsPerPixel*m_waterfallAvg/15.0);
|
double fac = sqrt(m_binsPerPixel*m_waterfallAvg/15.0);
|
||||||
double gain = fac*pow(10.0,0.02*m_plotGain);
|
double gain = fac*pow(10.0,0.02*m_plotGain);
|
||||||
double gain2d = pow(10.0,0.02*(m_plot2dGain));
|
double gain2d = pow(10.0,0.02*(m_plot2dGain));
|
||||||
|
@ -118,18 +118,53 @@ void CPlotter::draw(float swide[], bool bScroll) //dr
|
||||||
if(m_bLinearAvg) {
|
if(m_bLinearAvg) {
|
||||||
painter2D.setPen(Qt::yellow);
|
painter2D.setPen(Qt::yellow);
|
||||||
} else if(m_bReference) {
|
} else if(m_bReference) {
|
||||||
painter2D.setPen(Qt::red);
|
painter2D.setPen(Qt::blue);
|
||||||
} else {
|
} else {
|
||||||
painter2D.setPen(Qt::green);
|
painter2D.setPen(Qt::green);
|
||||||
}
|
}
|
||||||
|
static QPoint LineBuf[MAX_SCREENSIZE];
|
||||||
QPoint LineBuf[MAX_SCREENSIZE];
|
QPoint LineBuf2[MAX_SCREENSIZE];
|
||||||
j=0;
|
j=0;
|
||||||
j0=int(m_startFreq/m_fftBinWidth + 0.5);
|
j0=int(m_startFreq/m_fftBinWidth + 0.5);
|
||||||
int iz=XfromFreq(5000.0);
|
int iz=XfromFreq(5000.0);
|
||||||
int jz=iz*m_binsPerPixel;
|
int jz=iz*m_binsPerPixel;
|
||||||
m_fMax=FreqfromX(iz);
|
m_fMax=FreqfromX(iz);
|
||||||
|
|
||||||
|
m_line++;
|
||||||
|
if(m_mode=="QRA64" and bRed) {
|
||||||
|
double df_qra64=12000.0/(2*6912);
|
||||||
|
int j0,j1;
|
||||||
|
int k=0;
|
||||||
|
float smax,y3max=0;
|
||||||
|
float y3[MAX_SCREENSIZE];
|
||||||
|
for(int i=1; i<iz; i++) {
|
||||||
|
j0=FreqfromX(i-1)/df_qra64;
|
||||||
|
j1=FreqfromX(i)/df_qra64;
|
||||||
|
smax=0.0;
|
||||||
|
y3[i]=0.0;
|
||||||
|
for(int jj=j0; jj<=j1; jj++) {
|
||||||
|
if(dec_data.sred[jj]>smax) smax=dec_data.sred[jj];
|
||||||
|
}
|
||||||
|
y3[i]=smax;
|
||||||
|
if(smax>y3max)y3max=smax;
|
||||||
|
}
|
||||||
|
// qDebug() << "a" << y3max << m_ia << m_ib;
|
||||||
|
float fac=0.8/qMax(y3max,50.0f);
|
||||||
|
for(int i=1; i<iz; i++) {
|
||||||
|
if(y3[i]>0.0) {
|
||||||
|
y2=fac*y3[i];
|
||||||
|
LineBuf2[k].setX(i);
|
||||||
|
LineBuf2[k].setY(int(m_h2*(0.9-y2)));
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
painter2D.drawPolyline(LineBuf,jtop);
|
||||||
|
painter2D.setPen(Qt::red);
|
||||||
|
painter2D.drawPolyline(LineBuf2,k);
|
||||||
|
update(); //trigger a new paintEvent
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(bScroll) {
|
if(bScroll) {
|
||||||
flat4_(swide,&iz,&m_Flatten);
|
flat4_(swide,&iz,&m_Flatten);
|
||||||
flat4_(&dec_data.savg[j0],&jz,&m_Flatten);
|
flat4_(&dec_data.savg[j0],&jz,&m_Flatten);
|
||||||
|
@ -184,6 +219,7 @@ void CPlotter::draw(float swide[], bool bScroll) //dr
|
||||||
}
|
}
|
||||||
|
|
||||||
if(i==iz-1) painter2D.drawPolyline(LineBuf,j);
|
if(i==iz-1) painter2D.drawPolyline(LineBuf,j);
|
||||||
|
jtop=j;
|
||||||
LineBuf[j].setX(i);
|
LineBuf[j].setX(i);
|
||||||
LineBuf[j].setY(int(0.9*m_h2-y2*m_h2/70.0));
|
LineBuf[j].setY(int(0.9*m_h2-y2*m_h2/70.0));
|
||||||
if(y2<y2min) y2min=y2;
|
if(y2<y2min) y2min=y2;
|
||||||
|
@ -192,7 +228,6 @@ void CPlotter::draw(float swide[], bool bScroll) //dr
|
||||||
}
|
}
|
||||||
|
|
||||||
if(swide[0]>1.0e29) m_line=0;
|
if(swide[0]>1.0e29) m_line=0;
|
||||||
m_line++;
|
|
||||||
if(m_line == painter1.fontMetrics ().height ()) {
|
if(m_line == painter1.fontMetrics ().height ()) {
|
||||||
painter1.setPen(Qt::white);
|
painter1.setPen(Qt::white);
|
||||||
QString t;
|
QString t;
|
||||||
|
@ -226,6 +261,14 @@ void CPlotter::draw(float swide[], bool bScroll) //dr
|
||||||
m_bScaleOK=true;
|
m_bScaleOK=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CPlotter::drawRed(int ia, int ib, float swide[])
|
||||||
|
{
|
||||||
|
m_ia=ia;
|
||||||
|
m_ib=ib;
|
||||||
|
|
||||||
|
draw(swide,false,true);
|
||||||
|
}
|
||||||
|
|
||||||
void CPlotter::DrawOverlay() //DrawOverlay()
|
void CPlotter::DrawOverlay() //DrawOverlay()
|
||||||
{
|
{
|
||||||
if(m_OverlayPixmap.isNull()) return;
|
if(m_OverlayPixmap.isNull()) return;
|
||||||
|
|
|
@ -35,7 +35,7 @@ public:
|
||||||
QSize sizeHint() const;
|
QSize sizeHint() const;
|
||||||
bool m_bScaleOK;
|
bool m_bScaleOK;
|
||||||
|
|
||||||
void draw(float swide[], bool bScroll); //Update the waterfall
|
void draw(float swide[], bool bScroll, bool bRed); //Update the waterfall
|
||||||
void SetRunningState(bool running);
|
void SetRunningState(bool running);
|
||||||
void setPlotZero(int plotZero);
|
void setPlotZero(int plotZero);
|
||||||
int plotZero();
|
int plotZero();
|
||||||
|
@ -82,6 +82,7 @@ public:
|
||||||
void setRxBand(QString band);
|
void setRxBand(QString band);
|
||||||
void setReference(bool b) {m_bReference = b;}
|
void setReference(bool b) {m_bReference = b;}
|
||||||
bool Reference() const {return m_bReference;}
|
bool Reference() const {return m_bReference;}
|
||||||
|
void drawRed(int ia, int ib, float swide[]);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void freezeDecode1(int n);
|
void freezeDecode1(int n);
|
||||||
|
@ -116,6 +117,8 @@ private:
|
||||||
qint32 m_w;
|
qint32 m_w;
|
||||||
qint32 m_Flatten;
|
qint32 m_Flatten;
|
||||||
qint32 m_nSubMode;
|
qint32 m_nSubMode;
|
||||||
|
qint32 m_ia;
|
||||||
|
qint32 m_ib;
|
||||||
|
|
||||||
QPixmap m_WaterfallPixmap;
|
QPixmap m_WaterfallPixmap;
|
||||||
QPixmap m_2DPixmap;
|
QPixmap m_2DPixmap;
|
||||||
|
|
|
@ -139,6 +139,11 @@ void WideGraph::saveSettings() //saveS
|
||||||
m_settings->endGroup ();
|
m_settings->endGroup ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WideGraph::drawRed(int ia, int ib)
|
||||||
|
{
|
||||||
|
ui->widePlot->drawRed(ia,ib,swide);
|
||||||
|
}
|
||||||
|
|
||||||
void WideGraph::dataSink2(float s[], float df3, int ihsym, int ndiskdata) //dataSink2
|
void WideGraph::dataSink2(float s[], float df3, int ihsym, int ndiskdata) //dataSink2
|
||||||
{
|
{
|
||||||
static float splot[NSMAX];
|
static float splot[NSMAX];
|
||||||
|
@ -181,7 +186,7 @@ void WideGraph::dataSink2(float s[], float df3, int ihsym, int ndiskdata) //dat
|
||||||
m_bHaveTransmitted=false;
|
m_bHaveTransmitted=false;
|
||||||
}
|
}
|
||||||
m_ntr0=ntr;
|
m_ntr0=ntr;
|
||||||
ui->widePlot->draw(swide,true);
|
ui->widePlot->draw(swide,true,false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +224,7 @@ void WideGraph::keyPressEvent(QKeyEvent *e) //F1
|
||||||
void WideGraph::setRxFreq(int n) //setRxFreq
|
void WideGraph::setRxFreq(int n) //setRxFreq
|
||||||
{
|
{
|
||||||
ui->widePlot->setRxFreq(n);
|
ui->widePlot->setRxFreq(n);
|
||||||
ui->widePlot->draw(swide,false);
|
ui->widePlot->draw(swide,false,false);
|
||||||
if(m_lockTxFreq) setTxFreq(n);
|
if(m_lockTxFreq) setTxFreq(n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -316,7 +321,7 @@ void WideGraph::on_spec2dComboBox_currentIndexChanged(const QString &arg1)
|
||||||
if(arg1=="Reference") {
|
if(arg1=="Reference") {
|
||||||
ui->widePlot->setReference(true);
|
ui->widePlot->setReference(true);
|
||||||
}
|
}
|
||||||
if(ui->widePlot->m_bScaleOK) ui->widePlot->draw(swide,false);
|
if(ui->widePlot->m_bScaleOK) ui->widePlot->draw(swide,false,false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WideGraph::on_fSplitSpinBox_valueChanged(int n) //fSplit
|
void WideGraph::on_fSplitSpinBox_valueChanged(int n) //fSplit
|
||||||
|
@ -437,13 +442,19 @@ void WideGraph::on_zeroSlider_valueChanged(int value) //Zero
|
||||||
void WideGraph::on_gain2dSlider_valueChanged(int value) //Gain2
|
void WideGraph::on_gain2dSlider_valueChanged(int value) //Gain2
|
||||||
{
|
{
|
||||||
ui->widePlot->setPlot2dGain(value);
|
ui->widePlot->setPlot2dGain(value);
|
||||||
if(ui->widePlot->m_bScaleOK) ui->widePlot->draw(swide,false);
|
if(ui->widePlot->m_bScaleOK) {
|
||||||
|
ui->widePlot->draw(swide,false,false);
|
||||||
|
if(m_mode=="QRA64") ui->widePlot->draw(swide,false,true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WideGraph::on_zero2dSlider_valueChanged(int value) //Zero2
|
void WideGraph::on_zero2dSlider_valueChanged(int value) //Zero2
|
||||||
{
|
{
|
||||||
ui->widePlot->setPlot2dZero(value);
|
ui->widePlot->setPlot2dZero(value);
|
||||||
if(ui->widePlot->m_bScaleOK) ui->widePlot->draw(swide,false);
|
if(ui->widePlot->m_bScaleOK) {
|
||||||
|
ui->widePlot->draw(swide,false,false);
|
||||||
|
if(m_mode=="QRA64") ui->widePlot->draw(swide,false,true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void WideGraph::setTol(int n) //setTol
|
void WideGraph::setTol(int n) //setTol
|
||||||
|
|
|
@ -46,6 +46,7 @@ public:
|
||||||
int smoothYellow();
|
int smoothYellow();
|
||||||
void setRxBand(QString band);
|
void setRxBand(QString band);
|
||||||
void setWSPRtransmitted();
|
void setWSPRtransmitted();
|
||||||
|
void drawRed(int ia, int ib);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void freezeDecode2(int n);
|
void freezeDecode2(int n);
|
||||||
|
|
Loading…
Reference in New Issue