mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-09-04 14:17:52 -04:00
Install MSK144 as a new mode.
git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6721 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
c417b56d25
commit
0188257072
@ -16,7 +16,8 @@ namespace
|
|||||||
"WSPR",
|
"WSPR",
|
||||||
"Echo",
|
"Echo",
|
||||||
"ISCAT",
|
"ISCAT",
|
||||||
"JTMSK"
|
"JTMSK",
|
||||||
|
"MSK144"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ public:
|
|||||||
Echo,
|
Echo,
|
||||||
ISCAT,
|
ISCAT,
|
||||||
JTMSK,
|
JTMSK,
|
||||||
|
MSK144,
|
||||||
};
|
};
|
||||||
Q_ENUM (Mode)
|
Q_ENUM (Mode)
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ void DisplayText::displayTransmittedText(QString text, QString modeTx, qint32 tx
|
|||||||
QString t1=" @ ";
|
QString t1=" @ ";
|
||||||
if(modeTx=="JT4") t1=" $ ";
|
if(modeTx=="JT4") t1=" $ ";
|
||||||
if(modeTx=="JT65") t1=" # ";
|
if(modeTx=="JT65") t1=" # ";
|
||||||
if(modeTx=="JTMSK") t1=" & ";
|
if(modeTx=="JTMSK" or modeTx=="MSK144") t1=" & ";
|
||||||
QString t2;
|
QString t2;
|
||||||
t2.sprintf("%4d",txFreq);
|
t2.sprintf("%4d",txFreq);
|
||||||
QString t;
|
QString t;
|
||||||
|
@ -31,6 +31,9 @@ subroutine fast_decode(id2,narg,line)
|
|||||||
else if(nmode.eq.103) then
|
else if(nmode.eq.103) then
|
||||||
call jtmsk_decode(id2,narg,line)
|
call jtmsk_decode(id2,narg,line)
|
||||||
go to 900
|
go to 900
|
||||||
|
else if(nmode.eq.104) then
|
||||||
|
call msk144_decode(id2,ndat0,nutc,0,line)
|
||||||
|
go to 900
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if(newdat.eq.1) then
|
if(newdat.eq.1) then
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
subroutine msk144_decode(id2,npts,nutc,line)
|
subroutine msk144_decode(id2,npts,nutc,nprint,line)
|
||||||
|
|
||||||
! Calls the experimental decoder for JTMSK 72ms ldpc messages
|
! Calls the experimental decoder for JTMSK 72ms ldpc messages
|
||||||
|
|
||||||
@ -67,8 +67,8 @@ subroutine msk144_decode(id2,npts,nutc,line)
|
|||||||
y=10.0**(0.1*(yellow(n)-1.5))
|
y=10.0**(0.1*(yellow(n)-1.5))
|
||||||
nsnr=max(-5,nint(db(y)))
|
nsnr=max(-5,nint(db(y)))
|
||||||
! if(nsnr.gt.nsnr0 .and. nline.gt.0) then
|
! if(nsnr.gt.nsnr0 .and. nline.gt.0) then
|
||||||
! write(line(nline),1020) nutc,nsnr,t0,nint(freq),msg
|
write(line(nline),1020) nutc,nsnr,t0,nint(freq),msg
|
||||||
write(*,1020) nutc,nsnr,t0,nint(freq),msg
|
if(nprint.ne.0) write(*,1020) nutc,nsnr,t0,nint(freq),msg
|
||||||
1020 format(i6.6,i4,f5.1,i5,' & ',a22)
|
1020 format(i6.6,i4,f5.1,i5,' & ',a22)
|
||||||
nsnr0=nsnr
|
nsnr0=nsnr
|
||||||
! go to 900
|
! go to 900
|
||||||
|
@ -63,7 +63,7 @@ program msk144d
|
|||||||
read(unit=wav%lun) id2(1:npts)
|
read(unit=wav%lun) id2(1:npts)
|
||||||
close(unit=wav%lun)
|
close(unit=wav%lun)
|
||||||
call timer('read ',1)
|
call timer('read ',1)
|
||||||
call msk144_decode(id2,npts,nutc,line)
|
call msk144_decode(id2,npts,nutc,1,line)
|
||||||
enddo
|
enddo
|
||||||
|
|
||||||
call timer('msk144 ',1)
|
call timer('msk144 ',1)
|
||||||
|
153
mainwindow.cpp
153
mainwindow.cpp
@ -71,6 +71,9 @@ extern "C" {
|
|||||||
void genmsk_(char* msg, int* ichk, char* msgsent, int itone[],
|
void genmsk_(char* msg, int* ichk, char* msgsent, int itone[],
|
||||||
int* itext, int len1, int len2);
|
int* itext, int len1, int len2);
|
||||||
|
|
||||||
|
void genmsk144_(char* msg, int* ichk, char* msgsent, int itone[],
|
||||||
|
int* itext, int len1, int len2);
|
||||||
|
|
||||||
void gen65_(char* msg, int* ichk, char* msgsent, int itone[],
|
void gen65_(char* msg, int* ichk, char* msgsent, int itone[],
|
||||||
int* itext, int len1, int len2);
|
int* itext, int len1, int len2);
|
||||||
|
|
||||||
@ -340,6 +343,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
ui->actionEcho->setActionGroup(modeGroup);
|
ui->actionEcho->setActionGroup(modeGroup);
|
||||||
ui->actionISCAT->setActionGroup(modeGroup);
|
ui->actionISCAT->setActionGroup(modeGroup);
|
||||||
ui->actionJTMSK->setActionGroup(modeGroup);
|
ui->actionJTMSK->setActionGroup(modeGroup);
|
||||||
|
ui->actionMSK144->setActionGroup(modeGroup);
|
||||||
|
|
||||||
QActionGroup* saveGroup = new QActionGroup(this);
|
QActionGroup* saveGroup = new QActionGroup(this);
|
||||||
ui->actionNone->setActionGroup(saveGroup);
|
ui->actionNone->setActionGroup(saveGroup);
|
||||||
@ -677,7 +681,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
m_config.transceiver_online ();
|
m_config.transceiver_online ();
|
||||||
|
|
||||||
bool b=m_config.enable_VHF_features() and (m_mode=="JT4" or m_mode=="JT65" or
|
bool b=m_config.enable_VHF_features() and (m_mode=="JT4" or m_mode=="JT65" or
|
||||||
m_mode=="ISCAT" or m_mode=="JT9" or m_mode=="JTMSK");
|
m_mode=="ISCAT" or m_mode=="JT9" or m_mode=="JTMSK" or m_mode=="MSK144");
|
||||||
VHF_controls_visible(b);
|
VHF_controls_visible(b);
|
||||||
|
|
||||||
if(m_mode=="JT4") on_actionJT4_triggered();
|
if(m_mode=="JT4") on_actionJT4_triggered();
|
||||||
@ -689,6 +693,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
|||||||
if(m_mode=="Echo") on_actionEcho_triggered();
|
if(m_mode=="Echo") on_actionEcho_triggered();
|
||||||
if(m_mode=="ISCAT") on_actionISCAT_triggered();
|
if(m_mode=="ISCAT") on_actionISCAT_triggered();
|
||||||
if(m_mode=="JTMSK") on_actionJTMSK_triggered();
|
if(m_mode=="JTMSK") on_actionJTMSK_triggered();
|
||||||
|
if(m_mode=="MSK144") on_actionMSK144_triggered();
|
||||||
|
|
||||||
if(m_mode=="Echo") monitor(false); //Don't auto-start Monitor in Echo mode.
|
if(m_mode=="Echo") monitor(false); //Don't auto-start Monitor in Echo mode.
|
||||||
|
|
||||||
@ -922,12 +927,12 @@ void MainWindow::dataSink(qint64 frames)
|
|||||||
dec_data.params.ndiskdat=0;
|
dec_data.params.ndiskdat=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_mode=="ISCAT" or m_mode=="JTMSK" or m_bFast9) {
|
if(m_mode=="ISCAT" or m_mode=="JTMSK" or m_mode=="MSK144" or m_bFast9) {
|
||||||
fastSink(frames);
|
fastSink(frames);
|
||||||
return; //### Had been commented out (2/4/2016) ###
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get power, spectrum, and ihsym
|
// Get power, spectrum, and ihsym
|
||||||
int trmin=m_TRperiod/60;
|
int trmin=m_TRperiod/60;
|
||||||
// int k (frames - 1);
|
// int k (frames - 1);
|
||||||
dec_data.params.nfa=m_wideGraph->nStartFreq();
|
dec_data.params.nfa=m_wideGraph->nStartFreq();
|
||||||
@ -1193,7 +1198,8 @@ void MainWindow::on_actionSettings_triggered() //Setup Dialog
|
|||||||
auto_tx_label->setText (m_config.quick_call () ? "Auto-Tx-Enable Armed" : "Auto-Tx-Enable Disarmed");
|
auto_tx_label->setText (m_config.quick_call () ? "Auto-Tx-Enable Armed" : "Auto-Tx-Enable Disarmed");
|
||||||
displayDialFrequency ();
|
displayDialFrequency ();
|
||||||
bool b=m_config.enable_VHF_features() and (m_mode=="JT4" or m_mode=="JT65" or
|
bool b=m_config.enable_VHF_features() and (m_mode=="JT4" or m_mode=="JT65" or
|
||||||
m_mode=="ISCAT" or m_mode=="JT9" or m_mode=="JTMSK");
|
m_mode=="ISCAT" or m_mode=="JT9" or m_mode=="JTMSK" or
|
||||||
|
m_mode=="MSK144");
|
||||||
VHF_features_enabled(b);
|
VHF_features_enabled(b);
|
||||||
VHF_controls_visible(b);
|
VHF_controls_visible(b);
|
||||||
}
|
}
|
||||||
@ -1923,7 +1929,7 @@ void MainWindow::decode() //decode()
|
|||||||
from += noffset;
|
from += noffset;
|
||||||
size -= noffset;
|
size -= noffset;
|
||||||
}
|
}
|
||||||
if(m_mode=="ISCAT" or m_mode=="JTMSK" or m_bFast9) {
|
if(m_mode=="ISCAT" or m_mode=="JTMSK" or m_mode=="MSK144" or m_bFast9) {
|
||||||
float t0=m_t0;
|
float t0=m_t0;
|
||||||
float t1=m_t1;
|
float t1=m_t1;
|
||||||
qApp->processEvents(); //Update the waterfall
|
qApp->processEvents(); //Update the waterfall
|
||||||
@ -1949,6 +1955,7 @@ void MainWindow::decode() //decode()
|
|||||||
if(m_mode=="ISCAT") narg[9]=101; //ISCAT
|
if(m_mode=="ISCAT") narg[9]=101; //ISCAT
|
||||||
if(m_mode=="JT9") narg[9]=102; //Fast JT9
|
if(m_mode=="JT9") narg[9]=102; //Fast JT9
|
||||||
if(m_mode=="JTMSK") narg[9]=103; //JTMSK
|
if(m_mode=="JTMSK") narg[9]=103; //JTMSK
|
||||||
|
if(m_mode=="MSK144") narg[9]=104; //MSK144
|
||||||
narg[10]=ui->RxFreqSpinBox->value();
|
narg[10]=ui->RxFreqSpinBox->value();
|
||||||
narg[11]=m_Ftol;
|
narg[11]=m_Ftol;
|
||||||
m_calls="<" + m_config.my_callsign() + " " + hisCall + ">";
|
m_calls="<" + m_config.my_callsign() + " " + hisCall + ">";
|
||||||
@ -1973,8 +1980,8 @@ void::MainWindow::fast_decode_done()
|
|||||||
for(int i=0; i<100; i++) {
|
for(int i=0; i<100; i++) {
|
||||||
int i1=msg0.indexOf(m_baseCall);
|
int i1=msg0.indexOf(m_baseCall);
|
||||||
int i2=msg0.indexOf(m_hisCall);
|
int i2=msg0.indexOf(m_hisCall);
|
||||||
if(((m_mode=="JTMSK") or m_bFast9) and m_bEME and tmax>=0.0 and i1>10 and
|
if((m_mode=="JTMSK" or m_mode=="MSK144" or m_bFast9) and m_bEME and tmax>=0.0 and
|
||||||
i2>i1+3) { //Here, "m_bEME" implies AutoSeq
|
i1>10 and i2>i1+3) { //Here, "m_bEME" implies AutoSeq
|
||||||
processMessage(msg0,40,false);
|
processMessage(msg0,40,false);
|
||||||
}
|
}
|
||||||
if(m_msg[i][0]==0) break;
|
if(m_msg[i][0]==0) break;
|
||||||
@ -2012,15 +2019,14 @@ void::MainWindow::fast_decode_done()
|
|||||||
msgBox("Cannot open \"" + f.fileName () + "\" for append:" + f.errorString ());
|
msgBox("Cannot open \"" + f.fileName () + "\" for append:" + f.errorString ());
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_mode=="JT9" or m_mode=="JTMSK") {
|
if(m_mode=="JT9" or m_mode=="JTMSK" or m_mode=="MSK144") {
|
||||||
// find and extract any report for myCall
|
// find and extract any report for myCall
|
||||||
QString msg=message.mid(0,4) + message.mid(6,-1);
|
QString msg=message.mid(0,4) + message.mid(6,-1);
|
||||||
decodedtext=msg.replace("\n","");
|
decodedtext=msg.replace("\n","");
|
||||||
bool stdMsg = decodedtext.report(m_baseCall,
|
bool stdMsg = decodedtext.report(m_baseCall,
|
||||||
Radio::base_callsign(ui->dxCallEntry->text().toUpper().trimmed()), m_rptRcvd);
|
Radio::base_callsign(ui->dxCallEntry->text().toUpper().trimmed()), m_rptRcvd);
|
||||||
// extract details and send to PSKreporter
|
|
||||||
// int nsec=QDateTime::currentMSecsSinceEpoch()/1000-m_secBandChanged;
|
|
||||||
|
|
||||||
|
// extract details and send to PSKreporter
|
||||||
if(m_config.spot_to_psk_reporter() and stdMsg and !m_diskData) {
|
if(m_config.spot_to_psk_reporter() and stdMsg and !m_diskData) {
|
||||||
QString msgmode="JT9";
|
QString msgmode="JT9";
|
||||||
QString deCall;
|
QString deCall;
|
||||||
@ -2277,7 +2283,9 @@ void MainWindow::guiUpdate()
|
|||||||
if(m_modeTx=="JT9") txDuration=1.0 + 85.0*m_nsps/12000.0; // JT9
|
if(m_modeTx=="JT9") txDuration=1.0 + 85.0*m_nsps/12000.0; // JT9
|
||||||
if(m_modeTx=="JT65") txDuration=1.0 + 126*4096/11025.0; // JT65
|
if(m_modeTx=="JT65") txDuration=1.0 + 126*4096/11025.0; // JT65
|
||||||
if(m_mode=="WSPR-2") txDuration=2.0 + 162*8192/12000.0; // WSPR
|
if(m_mode=="WSPR-2") txDuration=2.0 + 162*8192/12000.0; // WSPR
|
||||||
if(m_mode=="ISCAT" or m_bFast9) txDuration=m_TRperiod-0.25; // ISCAT, JT9-fast, JTMSK
|
if(m_mode=="ISCAT" or m_mode=="JTMSK" or m_mode=="MSK144" or m_bFast9) {
|
||||||
|
txDuration=m_TRperiod-0.25; // ISCAT, JT9-fast, JTMSK, MSK144
|
||||||
|
}
|
||||||
//### if(m_mode=="WSPR-15") tx2=...
|
//### if(m_mode=="WSPR-15") tx2=...
|
||||||
|
|
||||||
double tx1=0.0;
|
double tx1=0.0;
|
||||||
@ -2325,7 +2333,7 @@ void MainWindow::guiUpdate()
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// For all modes other than WSPR
|
// For all modes other than WSPR
|
||||||
m_bTxTime = (t2p >= tx1) and (t2p < tx2);
|
m_bTxTime = (t2p >= tx1) and (t2p < tx2);
|
||||||
if(m_mode=="Echo") m_bTxTime = m_bTxTime and m_bEchoTxOK;
|
if(m_mode=="Echo") m_bTxTime = m_bTxTime and m_bEchoTxOK;
|
||||||
}
|
}
|
||||||
@ -2362,17 +2370,14 @@ void MainWindow::guiUpdate()
|
|||||||
setXIT (ui->TxFreqSpinBox->value ());
|
setXIT (ui->TxFreqSpinBox->value ());
|
||||||
|
|
||||||
// If "CQ nnn ..." feature is active, set the proper Tx frequency
|
// If "CQ nnn ..." feature is active, set the proper Tx frequency
|
||||||
if(m_config.offsetRxFreq() && ui->cbCQRx->isChecked()
|
if(m_config.offsetRxFreq() && ui->cbCQRx->isChecked() &&
|
||||||
&& (m_monitoring || m_transmitting)
|
(m_monitoring || m_transmitting) && m_config.is_transceiver_online ()
|
||||||
&& m_config.is_transceiver_online ()
|
&& m_config.split_mode ()) {
|
||||||
&& m_config.split_mode ())
|
|
||||||
{
|
|
||||||
// All conditions are met, reset the transceiver Tx frequency:
|
// All conditions are met, reset the transceiver Tx frequency:
|
||||||
Frequency tx_frequency {6 == m_ntx ?
|
Frequency tx_frequency {6 == m_ntx ? m_callingFrequency :
|
||||||
m_callingFrequency :
|
|
||||||
m_freqTxNominal / 1000000 * 1000000 + 1000 * m_freqCQ + m_XIT};
|
m_freqTxNominal / 1000000 * 1000000 + 1000 * m_freqCQ + m_XIT};
|
||||||
Q_EMIT m_config.transceiver_tx_frequency (tx_frequency);
|
Q_EMIT m_config.transceiver_tx_frequency (tx_frequency);
|
||||||
}
|
}
|
||||||
|
|
||||||
Q_EMIT m_config.transceiver_ptt (true); //Assert the PTT
|
Q_EMIT m_config.transceiver_ptt (true); //Assert the PTT
|
||||||
ptt1Timer->start(200); //Sequencer delay
|
ptt1Timer->start(200); //Sequencer delay
|
||||||
@ -2458,6 +2463,8 @@ void MainWindow::guiUpdate()
|
|||||||
len1, len1);
|
len1, len1);
|
||||||
if(m_modeTx=="JTMSK") genmsk_(message, &ichk, msgsent, const_cast<int *> (itone),
|
if(m_modeTx=="JTMSK") genmsk_(message, &ichk, msgsent, const_cast<int *> (itone),
|
||||||
&m_currentMessageType, len1, len1);
|
&m_currentMessageType, len1, len1);
|
||||||
|
if(m_modeTx=="MSK144") genmsk144_(message, &ichk, msgsent, const_cast<int *> (itone),
|
||||||
|
&m_currentMessageType, len1, len1);
|
||||||
msgsent[22]=0;
|
msgsent[22]=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2995,7 +3002,7 @@ void MainWindow::processMessage(QString const& messages, int position, bool ctrl
|
|||||||
|
|
||||||
QString rpt = decodedtext.report();
|
QString rpt = decodedtext.report();
|
||||||
int n=rpt.toInt();
|
int n=rpt.toInt();
|
||||||
if(m_mode=="JTMSK" and m_bShMsgs) {
|
if((m_mode=="JTMSK" or m_mode=="MSK144") and m_bShMsgs) {
|
||||||
n=26;
|
n=26;
|
||||||
if(rpt.toInt()>4) n=27;
|
if(rpt.toInt()>4) n=27;
|
||||||
if(rpt.toInt()>8) n=28;
|
if(rpt.toInt()>8) n=28;
|
||||||
@ -3149,7 +3156,7 @@ void MainWindow::genStdMsgs(QString rpt) //genStdMsgs()
|
|||||||
} else {
|
} else {
|
||||||
int n=rpt.toInt();
|
int n=rpt.toInt();
|
||||||
rpt.sprintf("%+2.2d",n);
|
rpt.sprintf("%+2.2d",n);
|
||||||
if(m_mode=="JTMSK" and m_bShMsgs) {
|
if((m_mode=="JTMSK" or m_mode=="MSK144") and m_bShMsgs) {
|
||||||
int i=t0.length()-1;
|
int i=t0.length()-1;
|
||||||
t0="<" + t0.mid(0,i) + "> ";
|
t0="<" + t0.mid(0,i) + "> ";
|
||||||
if(n<26) n=26;
|
if(n<26) n=26;
|
||||||
@ -3396,7 +3403,7 @@ void MainWindow::msgtype(QString t, QLineEdit* tx) //msgtype()
|
|||||||
bool short65=false;
|
bool short65=false;
|
||||||
if(itype==6) text=true;
|
if(itype==6) text=true;
|
||||||
if(itype==7) short65=true;
|
if(itype==7) short65=true;
|
||||||
if(m_mode=="JTMSK" and t.mid(0,1)=="<") text=false;
|
if((m_mode=="JTMSK" or m_mode=="MSK144") and t.mid(0,1)=="<") text=false;
|
||||||
QString t1;
|
QString t1;
|
||||||
t1.fromLatin1(msgsent);
|
t1.fromLatin1(msgsent);
|
||||||
if(text) t1=t1.mid(0,13);
|
if(text) t1=t1.mid(0,13);
|
||||||
@ -3408,13 +3415,15 @@ void MainWindow::msgtype(QString t, QLineEdit* tx) //msgtype()
|
|||||||
p.setColor(QPalette::Base,"#66ffff");
|
p.setColor(QPalette::Base,"#66ffff");
|
||||||
} else {
|
} else {
|
||||||
p.setColor(QPalette::Base,Qt::white);
|
p.setColor(QPalette::Base,Qt::white);
|
||||||
if(m_mode=="JTMSK" and t.mid(0,1)=="<") p.setColor(QPalette::Base,"#00ffff");
|
if((m_mode=="JTMSK" or m_mode=="MSK144") and t.mid(0,1)=="<") {
|
||||||
|
p.setColor(QPalette::Base,"#00ffff");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tx->setPalette(p);
|
tx->setPalette(p);
|
||||||
int len=t.length();
|
int len=t.length();
|
||||||
auto pos = tx->cursorPosition ();
|
auto pos = tx->cursorPosition ();
|
||||||
if(text && m_mode!="JTMSK" && t.mid(0,1)!="<") {
|
if(text && m_mode!="JTMSK" && m_mode!="MSK144" && t.mid(0,1)!="<") {
|
||||||
len=qMin(len,13);
|
len=qMin(len,13);
|
||||||
tx->setText(t.mid(0,len).toUpper());
|
tx->setText(t.mid(0,len).toUpper());
|
||||||
} else {
|
} else {
|
||||||
@ -3645,6 +3654,21 @@ void MainWindow::on_actionJTMSK_triggered()
|
|||||||
ui->ClrAvgButton->setVisible(false);
|
ui->ClrAvgButton->setVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_actionMSK144_triggered()
|
||||||
|
{
|
||||||
|
on_actionJTMSK_triggered();
|
||||||
|
m_mode="MSK144";
|
||||||
|
m_modeTx="MSK144";
|
||||||
|
ui->actionMSK144->setChecked(true);
|
||||||
|
switch_mode (Modes::MSK144);
|
||||||
|
statusChanged();
|
||||||
|
m_nsps=6;
|
||||||
|
mode_label->setStyleSheet("QLabel{background-color: #ff6666}");
|
||||||
|
mode_label->setText(m_mode);
|
||||||
|
m_toneSpacing=0.0;
|
||||||
|
ui->actionMSK144->setChecked(true);
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::on_actionJT65_triggered()
|
void MainWindow::on_actionJT65_triggered()
|
||||||
{
|
{
|
||||||
if(m_mode=="JT4" or m_mode.startsWith ("WSPR")) {
|
if(m_mode=="JT4" or m_mode.startsWith ("WSPR")) {
|
||||||
@ -3897,7 +3921,7 @@ void MainWindow::switch_mode (Mode mode)
|
|||||||
ui->bandComboBox->setCurrentIndex (row);
|
ui->bandComboBox->setCurrentIndex (row);
|
||||||
on_bandComboBox_activated (row);
|
on_bandComboBox_activated (row);
|
||||||
}
|
}
|
||||||
bool b=m_mode=="JTMSK";
|
bool b=(m_mode=="JTMSK" or m_mode=="MSK144");
|
||||||
ui->sbCQRxFreq->setVisible(b);
|
ui->sbCQRxFreq->setVisible(b);
|
||||||
ui->cbCQRx->setVisible(b);
|
ui->cbCQRx->setVisible(b);
|
||||||
ui->syncSpinBox->setVisible(!b);
|
ui->syncSpinBox->setVisible(!b);
|
||||||
@ -3947,7 +3971,7 @@ void MainWindow::fast_config(bool b)
|
|||||||
ui->cbEME->setText("EME delay");
|
ui->cbEME->setText("EME delay");
|
||||||
ui->sbTR->setVisible(false);
|
ui->sbTR->setVisible(false);
|
||||||
}
|
}
|
||||||
if(b and (m_bFast9 or m_mode=="JTMSK" or m_mode=="ISCAT")) {
|
if(b and (m_bFast9 or m_mode=="JTMSK" or m_mode=="MSK144" or m_mode=="ISCAT")) {
|
||||||
ui->sbTR->setValue(m_TRindex);
|
ui->sbTR->setValue(m_TRindex);
|
||||||
m_wideGraph->hide();
|
m_wideGraph->hide();
|
||||||
m_fastGraph->show();
|
m_fastGraph->show();
|
||||||
@ -4428,38 +4452,36 @@ void MainWindow::handle_transceiver_update (Transceiver::TransceiverState const&
|
|||||||
{
|
{
|
||||||
m_lastMonitoredFrequency = m_freqNominal;
|
m_lastMonitoredFrequency = m_freqNominal;
|
||||||
}
|
}
|
||||||
if (m_lastDialFreq != m_freqNominal and (m_mode!="JTMSK" or !ui->cbCQRx->isChecked()))
|
if (m_lastDialFreq != m_freqNominal and ((m_mode!="JTMSK" and m_mode!="MSK144") or
|
||||||
{
|
!ui->cbCQRx->isChecked())) {
|
||||||
m_lastDialFreq = m_freqNominal;
|
m_lastDialFreq = m_freqNominal;
|
||||||
m_repeatMsg=0;
|
m_repeatMsg=0;
|
||||||
m_secBandChanged=QDateTime::currentMSecsSinceEpoch()/1000;
|
m_secBandChanged=QDateTime::currentMSecsSinceEpoch()/1000;
|
||||||
if(s.frequency () < 30000000u && !m_mode.startsWith ("WSPR")) {
|
if(s.frequency () < 30000000u && !m_mode.startsWith ("WSPR")) {
|
||||||
// Write freq changes to ALL.TXT only below 30 MHz.
|
// Write freq changes to ALL.TXT only below 30 MHz.
|
||||||
QFile f2 {m_dataDir.absoluteFilePath ("ALL.TXT")};
|
QFile f2 {m_dataDir.absoluteFilePath ("ALL.TXT")};
|
||||||
if (f2.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) {
|
if (f2.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append)) {
|
||||||
QTextStream out(&f2);
|
QTextStream out(&f2);
|
||||||
out << QDateTime::currentDateTimeUtc().toString("yyyy-MMM-dd hh:mm")
|
out << QDateTime::currentDateTimeUtc().toString("yyyy-MMM-dd hh:mm")
|
||||||
<< " " << qSetRealNumberPrecision (12) << (m_freqNominal / 1.e6) << " MHz "
|
<< " " << qSetRealNumberPrecision (12) << (m_freqNominal / 1.e6) << " MHz "
|
||||||
<< m_mode << endl;
|
<< m_mode << endl;
|
||||||
f2.close();
|
f2.close();
|
||||||
} else {
|
} else {
|
||||||
msgBox("Cannot open \"" + f2.fileName () + "\" for append:" + f2.errorString ());
|
msgBox("Cannot open \"" + f2.fileName () + "\" for append:" + f2.errorString ());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_config.spot_to_psk_reporter ()) {
|
|
||||||
pskSetLocal ();
|
|
||||||
}
|
|
||||||
statusChanged();
|
|
||||||
m_wideGraph->setDialFreq(m_freqNominal / 1.e6);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
if (m_config.spot_to_psk_reporter ()) {
|
||||||
{
|
pskSetLocal ();
|
||||||
m_freqTxNominal = s.split () ? s.tx_frequency () - m_astroCorrection.tx : s.frequency ();
|
}
|
||||||
}
|
statusChanged();
|
||||||
|
m_wideGraph->setDialFreq(m_freqNominal / 1.e6);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
m_freqTxNominal = s.split () ? s.tx_frequency () - m_astroCorrection.tx : s.frequency ();
|
||||||
|
}
|
||||||
if (m_astroWidget) m_astroWidget->nominal_frequency (m_freqNominal, m_freqTxNominal);
|
if (m_astroWidget) m_astroWidget->nominal_frequency (m_freqNominal, m_freqTxNominal);
|
||||||
}
|
}
|
||||||
// ensure frequency display is correct
|
// ensure frequency display is correct
|
||||||
if (m_astroWidget && old_state.ptt () != s.ptt ()) setRig ();
|
if (m_astroWidget && old_state.ptt () != s.ptt ()) setRig ();
|
||||||
|
|
||||||
@ -4538,12 +4560,17 @@ void MainWindow::transmit (double snr)
|
|||||||
true, fastmode, snr, m_TRperiod);
|
true, fastmode, snr, m_TRperiod);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_modeTx == "JTMSK") {
|
if (m_modeTx == "JTMSK" or m_modeTx == "MSK144") {
|
||||||
m_nsps=6;
|
m_nsps=6;
|
||||||
m_toneSpacing=6000.0/m_nsps;
|
m_toneSpacing=6000.0/m_nsps;
|
||||||
double f0=1000.0;
|
double f0=1000.0;
|
||||||
int nsym=NUM_JTMSK_SYMBOLS;
|
int nsym;
|
||||||
if(itone[35] < 0) nsym=35;
|
if (m_modeTx == "JTMSK") {
|
||||||
|
nsym=NUM_JTMSK_SYMBOLS;
|
||||||
|
if(itone[35] < 0) nsym=35;
|
||||||
|
} else {
|
||||||
|
nsym=NUM_MSK144_SYMBOLS;
|
||||||
|
}
|
||||||
Q_EMIT sendMessage (nsym, double(m_nsps), f0, m_toneSpacing,
|
Q_EMIT sendMessage (nsym, double(m_nsps), f0, m_toneSpacing,
|
||||||
m_soundOutput, m_config.audio_output_channel (),
|
m_soundOutput, m_config.audio_output_channel (),
|
||||||
true, true, snr, m_TRperiod);
|
true, true, snr, m_TRperiod);
|
||||||
@ -4885,7 +4912,7 @@ void MainWindow::on_cbShMsgs_toggled(bool b)
|
|||||||
{
|
{
|
||||||
ui->cbTx6->setEnabled(b);
|
ui->cbTx6->setEnabled(b);
|
||||||
m_bShMsgs=b;
|
m_bShMsgs=b;
|
||||||
if(m_bShMsgs and m_mode=="JTMSK") ui->rptSpinBox->setValue(26);
|
if(m_bShMsgs and (m_mode=="JTMSK" or m_mode=="JTMSK")) ui->rptSpinBox->setValue(26);
|
||||||
int itone0=itone[0];
|
int itone0=itone[0];
|
||||||
int ntx=m_ntx;
|
int ntx=m_ntx;
|
||||||
genStdMsgs(m_rpt);
|
genStdMsgs(m_rpt);
|
||||||
|
@ -38,6 +38,7 @@
|
|||||||
#define NUM_WSPR_SYMBOLS 162 //(50+31)*2, embedded sync
|
#define NUM_WSPR_SYMBOLS 162 //(50+31)*2, embedded sync
|
||||||
#define NUM_ISCAT_SYMBOLS 1291 //30*11025/256
|
#define NUM_ISCAT_SYMBOLS 1291 //30*11025/256
|
||||||
#define NUM_JTMSK_SYMBOLS 234 //(72+15+12)*2 + 3*11 sync + 3 f0-parity
|
#define NUM_JTMSK_SYMBOLS 234 //(72+15+12)*2 + 3*11 sync + 3 f0-parity
|
||||||
|
#define NUM_MSK144_SYMBOLS 144 //s8 + d48 + s8 + d80
|
||||||
|
|
||||||
#define NUM_CW_SYMBOLS 250
|
#define NUM_CW_SYMBOLS 250
|
||||||
#define TX_SAMPLE_RATE 48000
|
#define TX_SAMPLE_RATE 48000
|
||||||
@ -244,6 +245,8 @@ private slots:
|
|||||||
void on_sbCQRxFreq_valueChanged(int n);
|
void on_sbCQRxFreq_valueChanged(int n);
|
||||||
void on_cbCQRx_toggled(bool b);
|
void on_cbCQRx_toggled(bool b);
|
||||||
|
|
||||||
|
void on_actionMSK144_triggered();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Q_SIGNAL void initializeAudioOutputStream (QAudioDeviceInfo,
|
Q_SIGNAL void initializeAudioOutputStream (QAudioDeviceInfo,
|
||||||
unsigned channels, unsigned msBuffered) const;
|
unsigned channels, unsigned msBuffered) const;
|
||||||
|
@ -2,6 +2,14 @@
|
|||||||
<ui version="4.0">
|
<ui version="4.0">
|
||||||
<class>MainWindow</class>
|
<class>MainWindow</class>
|
||||||
<widget class="QMainWindow" name="MainWindow">
|
<widget class="QMainWindow" name="MainWindow">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>896</width>
|
||||||
|
<height>565</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>WSJT-X by K1JT</string>
|
<string>WSJT-X by K1JT</string>
|
||||||
</property>
|
</property>
|
||||||
@ -2282,6 +2290,14 @@ QPushButton[state="ok"] {
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenuBar" name="menuBar">
|
<widget class="QMenuBar" name="menuBar">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>896</width>
|
||||||
|
<height>21</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
<widget class="QMenu" name="menuFile">
|
<widget class="QMenu" name="menuFile">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>File</string>
|
<string>File</string>
|
||||||
@ -2358,6 +2374,7 @@ QPushButton[state="ok"] {
|
|||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionISCAT"/>
|
<addaction name="actionISCAT"/>
|
||||||
<addaction name="actionJTMSK"/>
|
<addaction name="actionJTMSK"/>
|
||||||
|
<addaction name="actionMSK144"/>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenu" name="menuConfig">
|
<widget class="QMenu" name="menuConfig">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
@ -2819,6 +2836,14 @@ QPushButton[state="ok"] {
|
|||||||
<string><html><head/><body><p>Download sample audio files demonstrating the various modes.</p></body></html></string>
|
<string><html><head/><body><p>Download sample audio files demonstrating the various modes.</p></body></html></string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionMSK144">
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>MSK144</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
</widget>
|
</widget>
|
||||||
<layoutdefault spacing="6" margin="11"/>
|
<layoutdefault spacing="6" margin="11"/>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user