Implemented CW ID.

Signal reports 0 dB and above now displayed as "+03", "+16", etc.


git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@3089 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Joe Taylor 2013-03-25 01:24:47 +00:00
parent 3c5f145c95
commit 3362a37672
7 changed files with 96 additions and 19 deletions

View File

@ -130,6 +130,7 @@ void DevSetup::initDlg()
ui.saveDirEntry->setText(m_saveDir);
ui.comboBoxSndIn->setCurrentIndex(m_nDevIn);
ui.comboBoxSndOut->setCurrentIndex(m_nDevOut);
ui.cbID73->setChecked(m_After73);
ui.cbPSKReporter->setChecked(m_pskReporter);
m_paInDevice=m_inDevList[m_nDevIn];
m_paOutDevice=m_outDevList[m_nDevOut];
@ -304,3 +305,8 @@ void DevSetup::on_rigComboBox_activated(int index)
QString t=ui.rigComboBox->itemText(index);
m_rig=t.mid(0,7).toInt();
}
void DevSetup::on_cbID73_toggled(bool checked)
{
m_After73=checked;
}

View File

@ -39,6 +39,7 @@ public:
bool m_pskReporter;
bool m_firstCall;
bool m_catEnabled;
bool m_After73;
QString m_myCall;
QString m_myGrid;
@ -66,14 +67,11 @@ private slots:
void on_catPortComboBox_activated(int index);
void on_cbEnableCAT_toggled(bool checked);
void on_serialRateComboBox_activated(int index);
void on_handshakeComboBox_activated(int index);
void on_dataBitsComboBox_activated(int index);
void on_stopBitsComboBox_activated(int index);
void on_rigComboBox_activated(int index);
void on_cbID73_toggled(bool checked);
private:
void msgBox(QString t);

View File

@ -387,7 +387,7 @@
<item>
<widget class="QSpinBox" name="idIntSpinBox">
<property name="enabled">
<bool>false</bool>
<bool>true</bool>
</property>
<property name="maximumSize">
<size>
@ -403,6 +403,26 @@
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_7">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="cbID73">
<property name="text">
<string>ID after 73</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">

View File

@ -29,7 +29,7 @@ OBJS1 = pctile.o graycode.o sort.o ssort.o \
fil3.o redsync.o decoder.o grid2n.o n2grid.o timer.o \
decode9a.o peakdt9.o getlags.o afc9.o fchisq.o \
twkfreq.o downsam9.o symspec2.o ipcomm.o sleep_msec.o \
stdmsg.o sec_midn.o cutil.o azdist.o geodist.o
stdmsg.o sec_midn.o cutil.o azdist.o geodist.o morse.o
libjt9.a: $(OBJS1)
ar cr libjt9.a $(OBJS1)

View File

@ -11,6 +11,7 @@
#include "logqso.h"
int itone[85]; //Tx audio tones for 85 symbols
int icw[250]; //Dits for CW ID
int rc;
wchar_t buffer[256];
bool btxok; //True if OK to transmit
@ -146,6 +147,7 @@ MainWindow::MainWindow(QWidget *parent) :
m_dataAvailable=false;
m_iptt=0;
m_COMportOpen=0;
m_secID=0;
decodeBusy(false);
ui->xThermo->setFillBrush(Qt::green);
@ -326,6 +328,7 @@ void MainWindow::writeSettings()
settings.setValue("Tol",m_tol);
settings.setValue("InGain",m_inGain);
settings.setValue("PSKReporter",m_pskReporter);
settings.setValue("After73",m_After73);
settings.setValue("Macros",m_macro);
settings.setValue("toRTTY",m_toRTTY);
settings.setValue("NoSuffix",m_noSuffix);
@ -364,6 +367,7 @@ void MainWindow::readSettings()
settings.beginGroup("Common");
m_myCall=settings.value("MyCall","").toString();
morse_(m_myCall.toAscii().data(),icw,&m_ncw,m_myCall.length());
m_myGrid=settings.value("MyGrid","").toString();
m_idInt=settings.value("IDint",0).toInt();
m_pttMethodIndex=settings.value("PTTmethod",1).toInt();
@ -407,6 +411,7 @@ void MainWindow::readSettings()
m_monitorStartOFF=settings.value("MonitorOFF",false).toBool();
ui->actionMonitor_OFF_at_startup->setChecked(m_monitorStartOFF);
m_pskReporter=settings.value("PSKReporter",false).toBool();
m_After73=settings.value("After73",false).toBool();
m_macro=settings.value("Macros","").toStringList();
m_toRTTY=settings.value("toRTTY",false).toBool();
ui->actionConvert_JT9_x_to_RTTY->setChecked(m_toRTTY);
@ -519,6 +524,7 @@ void MainWindow::on_actionDeviceSetup_triggered() //Setup Dialog
dlg.m_nDevIn=m_nDevIn;
dlg.m_nDevOut=m_nDevOut;
dlg.m_pskReporter=m_pskReporter;
dlg.m_After73=m_After73;
dlg.m_macro=m_macro;
dlg.m_catEnabled=m_catEnabled;
dlg.m_rig=m_rig;
@ -578,6 +584,7 @@ void MainWindow::on_actionDeviceSetup_triggered() //Setup Dialog
}
#endif
m_pskReporter=dlg.m_pskReporter;
m_After73=dlg.m_After73;
if(dlg.m_restartSoundIn) {
soundInThread.quit();
@ -1231,8 +1238,7 @@ void MainWindow::guiUpdate()
int khsym=0;
double tx1=0.0;
// double tx2=m_TRperiod;
double tx2=1.0 + 85.0*m_nsps/12000.0;
double tx2=1.0 + 85.0*m_nsps/12000.0 + icw[0]*2048.0/48000.0;
if(!m_txFirst) {
tx1 += m_TRperiod;
@ -1252,6 +1258,7 @@ void MainWindow::guiUpdate()
}
if(bTxTime and m_iptt==0 and !btxMute) {
icw[0]=m_ncw;
#define NEW
#ifdef NEW
//Raise PTT
@ -1307,10 +1314,21 @@ void MainWindow::guiUpdate()
f.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append);
QTextStream out(&f);
out << QDateTime::currentDateTimeUtc().toString("hhmm")
<< " Transmitted: " << t << endl;
<< " Transmitting: " << t << endl;
f.close();
}
QStringList w=t.split(" ",QString::SkipEmptyParts);
icw[0]=0;
if(m_After73 and (w[2]=="73" or itext!=0)) icw[0]=m_ncw;
if(m_idInt>0) {
int nmin=(m_sec0-m_secID)/60;
if(nmin >= m_idInt) {
icw[0]=m_ncw;
m_secID=m_sec0;
}
}
QString t2=QDateTime::currentDateTimeUtc().toString("hhmm");
if(itext==0 and w[1]==m_myCall) {
t=w[2];
@ -1618,8 +1636,11 @@ void MainWindow::doubleClickOnCall(bool shift, bool ctrl)
if(rpt.indexOf(" ")==0) rpt="+" + rpt.mid(2,2);
if(rpt.indexOf(" -")==0) rpt=rpt.mid(1,2);
if(rpt.indexOf(" ")==0) rpt="+" + rpt.mid(1,2);
if(rpt.toInt()<-50) rpt="-50";
if(rpt.toInt()>49) rpt="+49";
int nr=rpt.toInt();
if(nr<-50) rpt="-50";
if(nr>49) rpt="+49";
if(nr>=0 and nr<=9) rpt="+0" + rpt;
if(nr>=10) rpt="+" + rpt;
genStdMsgs(rpt);
if(t2.indexOf(m_myCall)>0) {
m_ntx=2;

View File

@ -207,6 +207,7 @@ private:
bool m_toRTTY;
bool m_dBtoComments;
bool m_catEnabled;
bool m_After73;
char m_decoded[80];
@ -304,6 +305,8 @@ bool stdmsg_(const char* msg);
void azdist_(char* MyGrid, char* HisGrid, double* utch, int* nAz, int* nEl,
int* nDmiles, int* nDkm, int* nHotAz, int* nHotABetter,
int len1, int len2);
void morse_(char* msg, int* icw, int* ncw, int len);
}
#endif // MAINWINDOW_H

View File

@ -8,6 +8,7 @@ extern "C" {
extern float gran(); //Noise generator (for tests only)
extern int itone[85]; //Tx audio tones for 85 symbols
extern int icw[250]; //Dits for CW ID
extern bool btxok;
extern bool btxMute;
extern double outputLatency;
@ -40,7 +41,7 @@ extern "C" int d2aCallback(const void *inputBuffer, void *outputBuffer,
static double freq;
static double snr;
static double fac;
static int ic=0;
static int ic=0,j=0;
static short int i2;
int isym;
@ -55,16 +56,46 @@ extern "C" int d2aCallback(const void *inputBuffer, void *outputBuffer,
srand(mstr); //Initialize random seed
}
isym=ic/(4*udata->nsps); //Actual fsample=48000
if(isym>=85) return 1;
baud=12000.0/udata->nsps;
freq=udata->ntxfreq + itone[isym]*baud;
dphi=twopi*freq/48000.0;
if(udata->txsnrdb < 0.0) {
snr=pow(10.0,0.05*(udata->txsnrdb-6.0));
fac=3000.0;
if(snr>1.0) fac=3000.0/snr;
}
if(isym>=85 and icw[0]>0) { //Output the CW ID
freq=udata->ntxfreq;
dphi=twopi*freq/48000.0;
// float wpm=20.0;
// int nspd=1.2*48000.0/wpm;
int nspd=3072; //18.75 wpm
nspd=2048;
int ic0=85*4*udata->nsps;
for(int i=0 ; i<framesToProcess; i++ ) {
phi += dphi;
if(phi>twopi) phi -= twopi;
i2=32767.0*sin(phi);
j=(ic-ic0)/nspd;
if(icw[j]==0) i2=0;
if(udata->txsnrdb < 0.0) {
int i4=fac*(gran() + i2*snr/32768.0);
if(i4>32767) i4=32767;
if(i4<-32767) i4=-32767;
i2=i4;
}
if(!btxok or btxMute) i2=0;
*wptr++ = i2; //left
#ifdef unix
*wptr++ = i2; //right
#endif
ic++;
}
return paContinue;
}
if(isym>=85 and itone[0]>=0) return paComplete;
baud=12000.0/udata->nsps;
freq=udata->ntxfreq + itone[isym]*baud;
dphi=twopi*freq/48000.0;
for(uint i=0 ; i<framesToProcess; i++ ) {
phi += dphi;
if(phi>twopi) phi -= twopi;
@ -80,11 +111,9 @@ extern "C" int d2aCallback(const void *inputBuffer, void *outputBuffer,
#ifdef unix
*wptr++ = i2; //right
#endif
ic++;
}
//qDebug() << "PA Callback";
return 0;
return paContinue;
}
void SoundOutThread::run()