mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-08-01 13:42:39 -04:00
Merge branch 'feat-Q65-special-ops' into release-2.5.0
This commit is contained in:
commit
201c646bc5
@ -735,7 +735,7 @@ bool Configuration::monitor_last_used () const {return m_->rig_is_dummy_ || m_->
|
|||||||
bool Configuration::log_as_RTTY () const {return m_->log_as_RTTY_;}
|
bool Configuration::log_as_RTTY () const {return m_->log_as_RTTY_;}
|
||||||
bool Configuration::report_in_comments () const {return m_->report_in_comments_;}
|
bool Configuration::report_in_comments () const {return m_->report_in_comments_;}
|
||||||
bool Configuration::prompt_to_log () const {return m_->prompt_to_log_;}
|
bool Configuration::prompt_to_log () const {return m_->prompt_to_log_;}
|
||||||
bool Configuration::autoLog() const {return m_->autoLog_;}
|
bool Configuration::autoLog() const {return m_->autoLog_ && m_->bSpecialOp_;}
|
||||||
bool Configuration::decodes_from_top () const {return m_->decodes_from_top_;}
|
bool Configuration::decodes_from_top () const {return m_->decodes_from_top_;}
|
||||||
bool Configuration::insert_blank () const {return m_->insert_blank_;}
|
bool Configuration::insert_blank () const {return m_->insert_blank_;}
|
||||||
bool Configuration::DXCC () const {return m_->DXCC_;}
|
bool Configuration::DXCC () const {return m_->DXCC_;}
|
||||||
|
@ -23,7 +23,7 @@ DecodedText::DecodedText (QString const& the_string)
|
|||||||
, is_standard_ {false}
|
, is_standard_ {false}
|
||||||
{
|
{
|
||||||
// discard appended AP info
|
// discard appended AP info
|
||||||
clean_string_.replace (QRegularExpression {R"(^(.*?)(?:\?\s)?a[0-9].*$)"}, "\\1");
|
clean_string_.replace (QRegularExpression {R"(^(.*?)(?:\?\s)?(?:a|q)[0-9].*$)"}, "\\1");
|
||||||
|
|
||||||
// qDebug () << "DecodedText: the_string:" << the_string << "Nbsp pos:" << the_string.indexOf (QChar::Nbsp);
|
// qDebug () << "DecodedText: the_string:" << the_string << "Nbsp pos:" << the_string.indexOf (QChar::Nbsp);
|
||||||
if (message_.length() >= 1)
|
if (message_.length() >= 1)
|
||||||
|
@ -4019,33 +4019,10 @@ void MainWindow::guiUpdate()
|
|||||||
&m_currentMessageType, 22, 22);
|
&m_currentMessageType, 22, 22);
|
||||||
if(m_mode=="JT65") gen65_(message, &ichk, msgsent, const_cast<int *> (itone),
|
if(m_mode=="JT65") gen65_(message, &ichk, msgsent, const_cast<int *> (itone),
|
||||||
&m_currentMessageType, 22, 22);
|
&m_currentMessageType, 22, 22);
|
||||||
if(m_mode=="Q65") {
|
|
||||||
int i3=-1;
|
|
||||||
int n3=-1;
|
|
||||||
genq65_(message,&ichk,msgsent,const_cast<int *>(itone),&i3,&n3,37,37);
|
|
||||||
int nsps=1800;
|
|
||||||
if(m_TRperiod==30) nsps=3600;
|
|
||||||
if(m_TRperiod==60) nsps=7200;
|
|
||||||
if(m_TRperiod==120) nsps=16000;
|
|
||||||
if(m_TRperiod==300) nsps=41472;
|
|
||||||
int nsps4=4*nsps; //48000 Hz sampling
|
|
||||||
int nsym=85;
|
|
||||||
float fsample=48000.0;
|
|
||||||
int nwave=(nsym+2)*nsps4;
|
|
||||||
int icmplx=0;
|
|
||||||
int hmod=1;
|
|
||||||
float f0=ui->TxFreqSpinBox->value()-m_XIT;
|
|
||||||
genwave_(const_cast<int *>(itone),&nsym,&nsps4,&nwave,
|
|
||||||
&fsample,&hmod,&f0,&icmplx,foxcom_.wave,foxcom_.wave);
|
|
||||||
}
|
|
||||||
if(m_mode=="WSPR") genwspr_(message, msgsent, const_cast<int *> (itone),
|
if(m_mode=="WSPR") genwspr_(message, msgsent, const_cast<int *> (itone),
|
||||||
22, 22);
|
22, 22);
|
||||||
if(m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT4"
|
if(m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT4"
|
||||||
or m_mode=="FST4" or m_mode=="FST4W") {
|
or m_mode=="FST4" or m_mode=="FST4W" || "Q65" == m_mode) {
|
||||||
char MyCall[6];
|
|
||||||
char MyGrid[6];
|
|
||||||
::memcpy(MyCall, (m_config.my_callsign()+" ").toLatin1(), sizeof MyCall);
|
|
||||||
::memcpy(MyGrid, (m_config.my_grid()+" ").toLatin1(), sizeof MyGrid);
|
|
||||||
if(m_mode=="MSK144") {
|
if(m_mode=="MSK144") {
|
||||||
genmsk_128_90_(message, &ichk, msgsent, const_cast<int *> (itone),
|
genmsk_128_90_(message, &ichk, msgsent, const_cast<int *> (itone),
|
||||||
&m_currentMessageType, 37, 37);
|
&m_currentMessageType, 37, 37);
|
||||||
@ -4137,6 +4114,25 @@ void MainWindow::guiUpdate()
|
|||||||
|
|
||||||
QString t = QString::fromStdString(message).trimmed();
|
QString t = QString::fromStdString(message).trimmed();
|
||||||
}
|
}
|
||||||
|
if(m_mode=="Q65") {
|
||||||
|
int i3=-1;
|
||||||
|
int n3=-1;
|
||||||
|
genq65_(message,&ichk,msgsent,const_cast<int *>(itone),&i3,&n3,37,37);
|
||||||
|
int nsps=1800;
|
||||||
|
if(m_TRperiod==30) nsps=3600;
|
||||||
|
if(m_TRperiod==60) nsps=7200;
|
||||||
|
if(m_TRperiod==120) nsps=16000;
|
||||||
|
if(m_TRperiod==300) nsps=41472;
|
||||||
|
int nsps4=4*nsps; //48000 Hz sampling
|
||||||
|
int nsym=85;
|
||||||
|
float fsample=48000.0;
|
||||||
|
int nwave=(nsym+2)*nsps4;
|
||||||
|
int icmplx=0;
|
||||||
|
int hmod=1;
|
||||||
|
float f0=ui->TxFreqSpinBox->value()-m_XIT;
|
||||||
|
genwave_(const_cast<int *>(itone),&nsym,&nsps4,&nwave,
|
||||||
|
&fsample,&hmod,&f0,&icmplx,foxcom_.wave,foxcom_.wave);
|
||||||
|
}
|
||||||
|
|
||||||
if(SpecOp::EU_VHF==m_config.special_op_id()) {
|
if(SpecOp::EU_VHF==m_config.special_op_id()) {
|
||||||
if(m_ntx==2) m_xSent=ui->tx2->text().right(13);
|
if(m_ntx==2) m_xSent=ui->tx2->text().right(13);
|
||||||
@ -4206,9 +4202,13 @@ void MainWindow::guiUpdate()
|
|||||||
{
|
{
|
||||||
logQSOTimer.start(0);
|
logQSOTimer.start(0);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cease_auto_Tx_after_QSO ();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool b=(m_mode=="FT8" or m_mode=="FT4") and ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isEnabled () && ui->cbAutoSeq->isChecked ();
|
bool b=("FT8"==m_mode or "FT4"==m_mode or "Q65"==m_mode) and ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isEnabled () && ui->cbAutoSeq->isChecked ();
|
||||||
if(is_73 and (m_config.disable_TX_on_73() or b)) {
|
if(is_73 and (m_config.disable_TX_on_73() or b)) {
|
||||||
m_nextCall=""; //### Temporary: disable use of "TU;" messages;
|
m_nextCall=""; //### Temporary: disable use of "TU;" messages;
|
||||||
if(m_nextCall!="") {
|
if(m_nextCall!="") {
|
||||||
@ -4316,7 +4316,7 @@ void MainWindow::guiUpdate()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_mode=="FT8" or m_mode=="MSK144" or m_mode=="FT4") {
|
if(m_mode=="FT8" or m_mode=="MSK144" or m_mode=="FT4" || "Q65" == m_mode) {
|
||||||
if(ui->txrb1->isEnabled() and
|
if(ui->txrb1->isEnabled() and
|
||||||
(SpecOp::NA_VHF==m_config.special_op_id() or
|
(SpecOp::NA_VHF==m_config.special_op_id() or
|
||||||
SpecOp::FIELD_DAY==m_config.special_op_id() or
|
SpecOp::FIELD_DAY==m_config.special_op_id() or
|
||||||
@ -4993,7 +4993,12 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|
|||||||
m_nextCall=""; //### Temporary: disable use of "TU;" message
|
m_nextCall=""; //### Temporary: disable use of "TU;" message
|
||||||
if(SpecOp::RTTY == m_config.special_op_id() and m_nextCall!="") {
|
if(SpecOp::RTTY == m_config.special_op_id() and m_nextCall!="") {
|
||||||
// We're in RTTY contest and have "nextCall" queued up: send a "TU; ..." message
|
// We're in RTTY contest and have "nextCall" queued up: send a "TU; ..." message
|
||||||
logQSOTimer.start(0);
|
if (m_config.prompt_to_log() || m_config.autoLog()) {
|
||||||
|
logQSOTimer.start(0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cease_auto_Tx_after_QSO ();
|
||||||
|
}
|
||||||
ui->tx3->setText(ui->tx3->text().remove("TU; "));
|
ui->tx3->setText(ui->tx3->text().remove("TU; "));
|
||||||
useNextCall();
|
useNextCall();
|
||||||
QString t="TU; " + ui->tx3->text();
|
QString t="TU; " + ui->tx3->text();
|
||||||
@ -5004,7 +5009,12 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|
|||||||
&& SpecOp::NONE < m_config.special_op_id () && SpecOp::FOX > m_config.special_op_id ()
|
&& SpecOp::NONE < m_config.special_op_id () && SpecOp::FOX > m_config.special_op_id ()
|
||||||
&& ("RR73" == word_3 || 73 == word_3_as_number))
|
&& ("RR73" == word_3 || 73 == word_3_as_number))
|
||||||
{
|
{
|
||||||
logQSOTimer.start(0);
|
if (m_config.prompt_to_log() || m_config.autoLog()) {
|
||||||
|
logQSOTimer.start(0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cease_auto_Tx_after_QSO ();
|
||||||
|
}
|
||||||
m_ntx=6;
|
m_ntx=6;
|
||||||
ui->txrb6->setChecked(true);
|
ui->txrb6->setChecked(true);
|
||||||
}
|
}
|
||||||
@ -5022,7 +5032,12 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|
|||||||
}
|
}
|
||||||
else if (ROGERS == m_QSOProgress)
|
else if (ROGERS == m_QSOProgress)
|
||||||
{
|
{
|
||||||
logQSOTimer.start(0);
|
if (m_config.prompt_to_log() || m_config.autoLog()) {
|
||||||
|
logQSOTimer.start(0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
cease_auto_Tx_after_QSO ();
|
||||||
|
}
|
||||||
m_ntx=6;
|
m_ntx=6;
|
||||||
ui->txrb6->setChecked(true);
|
ui->txrb6->setChecked(true);
|
||||||
}
|
}
|
||||||
@ -5046,7 +5061,7 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
|
|||||||
}
|
}
|
||||||
} else if((m_QSOProgress >= REPORT
|
} else if((m_QSOProgress >= REPORT
|
||||||
|| (m_QSOProgress >= REPLYING &&
|
|| (m_QSOProgress >= REPLYING &&
|
||||||
(m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT4")))
|
(m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT4" || "Q65" == m_mode)))
|
||||||
&& word_3.startsWith ('R')) {
|
&& word_3.startsWith ('R')) {
|
||||||
m_ntx=4;
|
m_ntx=4;
|
||||||
m_QSOProgress = ROGERS;
|
m_QSOProgress = ROGERS;
|
||||||
@ -5268,7 +5283,7 @@ void MainWindow::genCQMsg ()
|
|||||||
|
|
||||||
QString t=ui->tx6->text();
|
QString t=ui->tx6->text();
|
||||||
QStringList tlist=t.split(" ");
|
QStringList tlist=t.split(" ");
|
||||||
if((m_mode=="FT4" or m_mode=="FT8" or m_mode=="MSK144") and
|
if((m_mode=="FT4" or m_mode=="FT8" or m_mode=="MSK144" || "Q65" == m_mode) and
|
||||||
SpecOp::NONE != m_config.special_op_id() and
|
SpecOp::NONE != m_config.special_op_id() and
|
||||||
( tlist.at(1)==my_callsign or
|
( tlist.at(1)==my_callsign or
|
||||||
tlist.at(2)==my_callsign ) and
|
tlist.at(2)==my_callsign ) and
|
||||||
@ -5726,7 +5741,7 @@ void MainWindow::msgtype(QString t, QLineEdit* tx) //msgtype()
|
|||||||
//### Check this stuff ###
|
//### Check this stuff ###
|
||||||
if(itype==7 and m_config.enable_VHF_features() and m_mode=="JT65") shortMsg=true;
|
if(itype==7 and m_config.enable_VHF_features() and m_mode=="JT65") shortMsg=true;
|
||||||
if(m_mode=="MSK144" and t.mid(0,1)=="<") text=false;
|
if(m_mode=="MSK144" and t.mid(0,1)=="<") text=false;
|
||||||
if((m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT4") and
|
if((m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT4" || "Q65" == m_mode) and
|
||||||
SpecOp::NA_VHF==m_config.special_op_id()) {
|
SpecOp::NA_VHF==m_config.special_op_id()) {
|
||||||
int i0=t.trimmed().length()-7;
|
int i0=t.trimmed().length()-7;
|
||||||
if(t.mid(i0,3)==" R ") text=false;
|
if(t.mid(i0,3)==" R ") text=false;
|
||||||
@ -5856,7 +5871,7 @@ void MainWindow::on_genStdMsgsPushButton_clicked() //genStdMsgs button
|
|||||||
genStdMsgs(m_rpt);
|
genStdMsgs(m_rpt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::on_logQSOButton_clicked() //Log QSO button
|
void MainWindow::cease_auto_Tx_after_QSO ()
|
||||||
{
|
{
|
||||||
if (SpecOp::FOX != m_config.special_op_id ()
|
if (SpecOp::FOX != m_config.special_op_id ()
|
||||||
&& ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isEnabled () && ui->cbAutoSeq->isChecked ())
|
&& ui->cbAutoSeq->isVisible () && ui->cbAutoSeq->isEnabled () && ui->cbAutoSeq->isChecked ())
|
||||||
@ -5866,6 +5881,11 @@ void MainWindow::on_logQSOButton_clicked() //Log QSO button
|
|||||||
// to be a robot.
|
// to be a robot.
|
||||||
auto_tx_mode (false);
|
auto_tx_mode (false);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::on_logQSOButton_clicked() //Log QSO button
|
||||||
|
{
|
||||||
|
cease_auto_Tx_after_QSO ();
|
||||||
|
|
||||||
if (!m_hisCall.size ()) {
|
if (!m_hisCall.size ()) {
|
||||||
MessageBox::warning_message (this, tr ("Warning: DX Call field is empty."));
|
MessageBox::warning_message (this, tr ("Warning: DX Call field is empty."));
|
||||||
@ -6030,7 +6050,7 @@ void MainWindow::displayWidgets(qint64 n)
|
|||||||
}
|
}
|
||||||
ui->pbBestSP->setVisible(m_mode=="FT4");
|
ui->pbBestSP->setVisible(m_mode=="FT4");
|
||||||
b=false;
|
b=false;
|
||||||
if(m_mode=="FT4" or m_mode=="FT8") {
|
if(m_mode=="FT4" or m_mode=="FT8" || "Q65" == m_mode) {
|
||||||
b=SpecOp::EU_VHF==m_config.special_op_id() or
|
b=SpecOp::EU_VHF==m_config.special_op_id() or
|
||||||
( SpecOp::RTTY==m_config.special_op_id() and
|
( SpecOp::RTTY==m_config.special_op_id() and
|
||||||
(m_config.RTTY_Exchange()=="DX" or m_config.RTTY_Exchange()=="#") );
|
(m_config.RTTY_Exchange()=="DX" or m_config.RTTY_Exchange()=="#") );
|
||||||
@ -6451,6 +6471,8 @@ void MainWindow::on_actionQ65_triggered()
|
|||||||
if(SpecOp::NA_VHF==m_config.special_op_id()) t0="NA VHF";
|
if(SpecOp::NA_VHF==m_config.special_op_id()) t0="NA VHF";
|
||||||
if(SpecOp::EU_VHF==m_config.special_op_id()) t0="EU VHF";
|
if(SpecOp::EU_VHF==m_config.special_op_id()) t0="EU VHF";
|
||||||
if(SpecOp::FIELD_DAY==m_config.special_op_id()) t0="Field Day";
|
if(SpecOp::FIELD_DAY==m_config.special_op_id()) t0="Field Day";
|
||||||
|
if(SpecOp::RTTY==m_config.special_op_id()) t0+="RTTY";
|
||||||
|
if(SpecOp::WW_DIGI==m_config.special_op_id()) t0+="WW_DIGI";
|
||||||
if(t0=="") {
|
if(t0=="") {
|
||||||
ui->labDXped->setVisible(false);
|
ui->labDXped->setVisible(false);
|
||||||
} else {
|
} else {
|
||||||
|
@ -779,6 +779,7 @@ private:
|
|||||||
void writeFoxQSO (QString const& msg);
|
void writeFoxQSO (QString const& msg);
|
||||||
void to_jt9(qint32 n, qint32 istart, qint32 idone);
|
void to_jt9(qint32 n, qint32 istart, qint32 idone);
|
||||||
bool is77BitMode () const;
|
bool is77BitMode () const;
|
||||||
|
void cease_auto_Tx_after_QSO ();
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int killbyname(const char* progName);
|
extern int killbyname(const char* progName);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user