Add facility to disallow CAT commands while transmitting.

Some rigs either do not honour some CAT commands while transmitting or
interpret them  incorrectly. To  deal with this  a settings  option to
allow TX  frequency changes while  transmitting has been added  with a
default value of off.

Any UI actions that directly or indirectly change the TX frequency are
guarded according to this new option. As well as this band changes and
use of  the +2kHz check box  are disabled and guarded  respectively in
transmit mode.

Mode changes via the menu are now disabled while transmitting.

When TX frequency changes are allowed; frequency changes are correctly
implemented while in tune mode.

Double clicking  decodes while  transmitting now  correctly regenerate
and change the message sent on the fly.

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@4349 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Bill Somerville 2014-09-24 17:25:19 +00:00
parent a4c04b6de6
commit 4a32b0bef6
11 changed files with 201 additions and 136 deletions

View File

@ -369,6 +369,7 @@ private:
QString my_grid_;
qint32 id_interval_;
bool id_after_73_;
bool tx_QSY_allowed_;
bool spot_to_psk_reporter_;
bool monitor_off_at_startup_;
bool log_as_RTTY_;
@ -425,6 +426,7 @@ QString Configuration::my_grid () const {return m_->my_grid_;}
QFont Configuration::decoded_text_font () const {return m_->decoded_text_font_;}
qint32 Configuration::id_interval () const {return m_->id_interval_;}
bool Configuration::id_after_73 () const {return m_->id_after_73_;}
bool Configuration::tx_QSY_allowed () const {return m_->tx_QSY_allowed_ || !split_mode ();}
bool Configuration::spot_to_psk_reporter () const {return m_->spot_to_psk_reporter_;}
bool Configuration::monitor_off_at_startup () const {return m_->monitor_off_at_startup_;}
bool Configuration::log_as_RTTY () const {return m_->log_as_RTTY_;}
@ -839,6 +841,7 @@ void Configuration::impl::initialise_models ()
ui_->PTT_method_button_group->button (rig_params_.PTT_method_)->setChecked (true);
ui_->save_path_display_label->setText (save_directory_.absolutePath ());
ui_->CW_id_after_73_check_box->setChecked (id_after_73_);
ui_->tx_QSY_check_box->setChecked (tx_QSY_allowed_);
ui_->psk_reporter_check_box->setChecked (spot_to_psk_reporter_);
ui_->monitor_off_check_box->setChecked (monitor_off_at_startup_);
ui_->log_as_RTTY_check_box->setChecked (log_as_RTTY_);
@ -987,6 +990,7 @@ void Configuration::impl::read_settings ()
monitor_off_at_startup_ = settings_->value ("MonitorOFF", false).toBool ();
spot_to_psk_reporter_ = settings_->value ("PSKReporter", false).toBool ();
id_after_73_ = settings_->value ("After73", false).toBool ();
tx_QSY_allowed_ = settings_->value ("TxQSYAllowed", false).toBool ();
macros_.setStringList (settings_->value ("Macros", QStringList {"TNX 73 GL"}).toStringList ());
@ -1067,6 +1071,7 @@ void Configuration::impl::write_settings ()
settings_->setValue ("MonitorOFF", monitor_off_at_startup_);
settings_->setValue ("PSKReporter", spot_to_psk_reporter_);
settings_->setValue ("After73", id_after_73_);
settings_->setValue ("TxQSYAllowed", tx_QSY_allowed_);
settings_->setValue ("Macros", macros_.stringList ());
settings_->setValue ("frequencies", QVariant::fromValue (frequencies_.frequencies ()));
settings_->setValue ("stations", QVariant::fromValue (stations_.stations ()));
@ -1404,6 +1409,7 @@ void Configuration::impl::accept ()
spot_to_psk_reporter_ = ui_->psk_reporter_check_box->isChecked ();
id_interval_ = ui_->CW_id_interval_spin_box->value ();
id_after_73_ = ui_->CW_id_after_73_check_box->isChecked ();
tx_QSY_allowed_ = ui_->tx_QSY_check_box->isChecked ();
monitor_off_at_startup_ = ui_->monitor_off_check_box->isChecked ();
jt9w_bw_mult_ = ui_->jt9w_bandwidth_mult_combo_box->currentText ().toUInt ();
jt9w_min_dt_ = static_cast<float> (ui_->jt9w_min_dt_double_spin_box->value ());

View File

@ -85,6 +85,7 @@ public:
QFont decoded_text_font () const;
qint32 id_interval () const;
bool id_after_73 () const;
bool tx_QSY_allowed () const;
bool spot_to_psk_reporter () const;
bool monitor_off_at_startup () const;
bool log_as_RTTY () const;

View File

@ -214,6 +214,27 @@
<string>Behavior</string>
</property>
<layout class="QGridLayout" name="gridLayout_8">
<item row="2" column="0">
<widget class="QCheckBox" name="disable_TX_on_73_check_box">
<property name="toolTip">
<string>Turns off automatic transmissions after sending a 73 or any other free
text message.</string>
</property>
<property name="text">
<string>Di&amp;sable Tx after sending 73</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="watchdog_check_box">
<property name="toolTip">
<string>Stop transmitting automatically after five periods.</string>
</property>
<property name="text">
<string>Runaway Tx &amp;watchdog</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="monitor_off_check_box">
<property name="toolTip">
@ -237,28 +258,17 @@
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="disable_TX_on_73_check_box">
<item row="0" column="1">
<widget class="QCheckBox" name="tx_QSY_check_box">
<property name="toolTip">
<string>Turns off automatic transmissions after sending a 73 or any other free
text message.</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Some rigs are not able to process CAT commands while transmitting. This means that if you are operating in split mode you may have to uncheck this option.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Di&amp;sable Tx after sending 73</string>
<string>Allow Tx Frequency Changes While Transmitting</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QCheckBox" name="watchdog_check_box">
<property name="toolTip">
<string>Stop transmitting automatically after five periods.</string>
</property>
<property name="text">
<string>Runaway Tx &amp;watchdog</string>
</property>
</widget>
</item>
<item row="4" column="0">
<item row="4" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_9">
<item>
<widget class="QCheckBox" name="CW_id_after_73_check_box">
@ -1825,11 +1835,11 @@ soundcard changes</string>
</connections>
<buttongroups>
<buttongroup name="CAT_stop_bits_button_group"/>
<buttongroup name="TX_audio_source_button_group"/>
<buttongroup name="CAT_data_bits_button_group"/>
<buttongroup name="CAT_handshake_button_group"/>
<buttongroup name="TX_mode_button_group"/>
<buttongroup name="TX_audio_source_button_group"/>
<buttongroup name="split_mode_button_group"/>
<buttongroup name="PTT_method_button_group"/>
<buttongroup name="TX_mode_button_group"/>
</buttongroups>
</ui>

View File

@ -58,7 +58,9 @@ void Modulator::start (unsigned symbolsLength, double framesPerSymbol, unsigned
m_quickClose = false;
m_symbolsLength = symbolsLength;
m_isym0 = std::numeric_limits<unsigned>::max (); // Arbitrary big number
m_isym0 = std::numeric_limits<unsigned>::max (); // Arbitrary big
// number
m_frequency0 = 0.;
m_addNoise = dBSNR < 0.;
m_nsps = framesPerSymbol;
m_frequency = frequency;
@ -223,7 +225,7 @@ qint64 Modulator::readData (char * data, qint64 maxSize)
for (unsigned i = 0; i < numFrames && m_ic <= i1; ++i) {
isym = m_tuning ? 0 : m_ic / (4.0 * m_nsps); //Actual fsample=48000
if (isym != m_isym0) {
if (isym != m_isym0 || m_frequency != m_frequency0) {
// qDebug () << "@m_ic:" << m_ic << "itone[" << isym << "] =" << itone[isym] << "@" << i << "in numFrames:" << numFrames;
if(m_toneSpacing==0.0) {
@ -233,6 +235,7 @@ qint64 Modulator::readData (char * data, qint64 maxSize)
}
m_dphi = m_twoPi * toneFrequency0 / m_frameRate;
m_isym0 = isym;
m_frequency0 = m_frequency;
}
int j=m_ic/480;

View File

@ -60,6 +60,7 @@ private:
double m_amp;
double m_nsps;
double volatile m_frequency;
double m_frequency0;
double m_snr;
double m_fac;
double m_toneSpacing;

View File

@ -285,8 +285,6 @@ MainWindow::MainWindow(bool multiple, QSettings * settings, QSharedMemory *shdme
m_killAll=false;
m_widebandDecode=false;
m_ntx=1;
m_rxFreq=1500;
m_txFreq=1500;
m_setftx=0;
m_loopall=false;
m_startAnother=false;
@ -373,8 +371,6 @@ MainWindow::MainWindow(bool multiple, QSettings * settings, QSharedMemory *shdme
if(m_mode!="JT9" and m_mode!="JT9W-1" and m_mode!="JT65" and
m_mode!="JT9+JT65") m_mode="JT9";
on_actionWide_Waterfall_triggered(); //###
m_wideGraph->setRxFreq(m_rxFreq);
m_wideGraph->setTxFreq(m_txFreq);
m_wideGraph->setLockTxFreq(m_lockTxFreq);
m_wideGraph->setModeTx(m_mode);
m_wideGraph->setModeTx(m_modeTx);
@ -398,7 +394,7 @@ MainWindow::MainWindow(bool multiple, QSettings * settings, QSharedMemory *shdme
Q_EMIT startAudioInputStream (m_config.audio_input_device (), m_framesAudioInputBuffered, &m_detector, m_downSampleFactor, m_config.audio_input_channel ());
Q_EMIT initializeAudioOutputStream (m_config.audio_output_device (), AudioDevice::Mono == m_config.audio_output_channel () ? 1 : 2, m_msAudioOutputBuffered);
Q_EMIT transmitFrequency (m_txFreq - m_XIT);
Q_EMIT transmitFrequency (ui->TxFreqSpinBox->value () - m_XIT);
auto t = "UTC dB DT Freq Message";
ui->decodedTextLabel->setText(t);
@ -447,8 +443,8 @@ void MainWindow::writeSettings()
m_settings->setValue("SaveDecoded",ui->actionSave_decoded->isChecked());
m_settings->setValue("SaveAll",ui->actionSave_all->isChecked());
m_settings->setValue("NDepth",m_ndepth);
m_settings->setValue("RxFreq",m_rxFreq);
m_settings->setValue("TxFreq",m_txFreq);
m_settings->setValue("RxFreq",ui->RxFreqSpinBox->value ());
m_settings->setValue("TxFreq",ui->TxFreqSpinBox->value ());
m_settings->setValue ("DialFreq", QVariant::fromValue(m_lastMonitoredFrequency));
m_settings->setValue("InGain",m_inGain);
m_settings->setValue("OutAttenuation", ui->outAttenuation->value ());
@ -500,12 +496,10 @@ void MainWindow::readSettings()
ui->actionSave_decoded->setChecked(m_settings->value(
"SaveDecoded",false).toBool());
ui->actionSave_all->setChecked(m_settings->value("SaveAll",false).toBool());
m_rxFreq=m_settings->value("RxFreq",1500).toInt();
ui->RxFreqSpinBox->setValue(m_rxFreq);
m_txFreq=m_settings->value("TxFreq",1500).toInt();
ui->RxFreqSpinBox->setValue(m_settings->value("RxFreq",1500).toInt());
m_lastMonitoredFrequency = m_settings->value ("DialFreq", QVariant::fromValue<Frequency> (default_frequency)).value<Frequency> ();
ui->TxFreqSpinBox->setValue(m_txFreq);
Q_EMIT transmitFrequency (m_txFreq - m_XIT);
ui->TxFreqSpinBox->setValue(m_settings->value("TxFreq",1500).toInt());
Q_EMIT transmitFrequency (ui->TxFreqSpinBox->value () - m_XIT);
m_saveDecoded=ui->actionSave_decoded->isChecked();
m_saveAll=ui->actionSave_all->isChecked();
m_ndepth=m_settings->value("NDepth",3).toInt();
@ -644,7 +638,7 @@ void MainWindow::on_actionSettings_triggered() //Setup Dialog
displayDialFrequency ();
}
setXIT (m_txFreq);
setXIT (ui->TxFreqSpinBox->value ());
if (m_config.transceiver_online ())
{
Q_EMIT m_config.transceiver_frequency (m_dialFreq);
@ -664,7 +658,7 @@ void MainWindow::on_monitorButton_clicked (bool checked)
// put rig back where it was when last in control
Q_EMIT m_config.transceiver_frequency (m_lastMonitoredFrequency);
setXIT (m_txFreq);
setXIT (ui->TxFreqSpinBox->value ());
}
Q_EMIT m_config.sync_transceiver (true, checked); // gets
@ -828,14 +822,17 @@ void MainWindow::bumpFqso(int n) //bumpFqso()
int i;
bool ctrl = (n>=100);
n=n%100;
i=m_wideGraph->rxFreq();
i=ui->RxFreqSpinBox->value ();
if(n==11) i--;
if(n==12) i++;
m_wideGraph->setRxFreq(i);
if(ctrl) {
ui->TxFreqSpinBox->setValue(i);
m_wideGraph->setTxFreq(i);
}
if (ui->RxFreqSpinBox->isEnabled ())
{
ui->RxFreqSpinBox->setValue (i);
}
if(ctrl && ui->TxFreqSpinBox->isEnabled ())
{
ui->TxFreqSpinBox->setValue (i);
}
}
void MainWindow::qsy (Frequency f)
@ -848,14 +845,11 @@ void MainWindow::qsy (Frequency f)
if (m_dialFreq != f)
{
m_dialFreq = f;
setXIT(m_txFreq);
setXIT(ui->TxFreqSpinBox->value ());
m_repeatMsg=0;
m_secBandChanged=QDateTime::currentMSecsSinceEpoch()/1000;
bumpFqso(11);
bumpFqso(12);
QFile f2(m_config.data_path ().absoluteFilePath ("ALL.TXT"));
f2.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append);
QTextStream out(&f2);
@ -1198,12 +1192,6 @@ void MainWindow::on_DecodeButton_clicked (bool /* checked */) //Decode request
void MainWindow::freezeDecode(int n) //freezeDecode()
{
bool ctrl = (n>=100);
int i=m_wideGraph->rxFreq();
if(ctrl) {
ui->TxFreqSpinBox->setValue(i);
m_wideGraph->setTxFreq(i);
}
if((n%100)==2) on_DecodeButton_clicked (true);
}
@ -1426,7 +1414,7 @@ void MainWindow::guiUpdate()
bTxTime=true;
}
Frequency onAirFreq = m_dialFreq + m_txFreq;
Frequency onAirFreq = m_dialFreq + ui->TxFreqSpinBox->value ();
if (onAirFreq > 10139900 && onAirFreq < 10140320)
{
bTxTime=false;
@ -1506,7 +1494,7 @@ void MainWindow::guiUpdate()
f.close();
if (m_config.TX_messages ())
{
ui->decodedTextBrowser2->displayTransmittedText(t,m_modeTx,m_txFreq);
ui->decodedTextBrowser2->displayTransmittedText(t,m_modeTx,ui->TxFreqSpinBox->value ());
}
}
@ -1553,36 +1541,48 @@ void MainWindow::guiUpdate()
if (g_iptt == 1 && iptt0 == 0)
{
QString t=QString::fromLatin1(msgsent);
if(t==m_msgSent0) {
m_repeatMsg++;
} else {
m_repeatMsg=0;
m_msgSent0=t;
}
signalMeter->setValue(0);
if (m_monitoring)
if(t==m_msgSent0)
{
monitor (false);
m_repeatMsg++;
}
else
{
m_repeatMsg=0;
m_msgSent0=t;
if(!m_tune)
{
QFile f(m_config.data_path ().absoluteFilePath ("ALL.TXT"));
f.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append);
QTextStream out(&f);
out << QDateTime::currentDateTimeUtc().toString("hhmm")
<< " Transmitting " << (m_dialFreq / 1.e6) << " MHz " << m_modeTx
<< ": " << t << endl;
f.close();
}
if (m_config.TX_messages () && !m_tune)
{
ui->decodedTextBrowser2->displayTransmittedText(t,m_modeTx,ui->TxFreqSpinBox->value ());
}
}
if(!m_tune)
{
QFile f(m_config.data_path ().absoluteFilePath ("ALL.TXT"));
f.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append);
QTextStream out(&f);
out << QDateTime::currentDateTimeUtc().toString("hhmm")
<< " Transmitting " << (m_dialFreq / 1.e6) << " MHz " << m_modeTx
<< ": " << t << endl;
f.close();
}
m_btxok=true;
m_transmitting=true;
ui->pbTxMode->setEnabled(false);
if(!m_tune) {
QFile f(m_config.data_path ().absoluteFilePath ("ALL.TXT"));
f.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Append);
QTextStream out(&f);
out << QDateTime::currentDateTimeUtc().toString("hhmm")
<< " Transmitting " << (m_dialFreq / 1.e6) << " MHz " << m_modeTx
<< ": " << t << endl;
f.close();
}
if (m_config.TX_messages () && !m_tune)
{
ui->decodedTextBrowser2->displayTransmittedText(t,m_modeTx,m_txFreq);
ui->decodedTextBrowser2->displayTransmittedText(t,m_modeTx,ui->TxFreqSpinBox->value ());
}
m_transmitting = true;
transmitDisplay (true);
}
if(!m_btxok && btxok0 && g_iptt==1) stopTx();
@ -1604,7 +1604,7 @@ void MainWindow::guiUpdate()
QDateTime t = QDateTime::currentDateTimeUtc();
int fQSO=125;
if(m_astroWidget) m_astroWidget->astroUpdate(t, m_config.my_grid (), m_hisGrid, fQSO,
m_setftx, m_txFreq);
m_setftx, ui->TxFreqSpinBox->value ());
if(m_transmitting) {
if(nsendingsh==1) {
@ -1658,21 +1658,14 @@ void MainWindow::startTx2()
if(snr>0.0 or snr < -50.0) snr=99.0;
transmit (snr);
signalMeter->setValue(0);
//monitor (false);
//m_btxok=true;
//m_transmitting=true;
ui->pbTxMode->setEnabled(false);
}
}
void MainWindow::stopTx()
{
Q_EMIT endTransmitMessage ();
m_transmitting=false;
m_btxok = false;
if ("JT9+JT65" == m_mode) ui->pbTxMode->setEnabled(true);
m_transmitting = false;
g_iptt=0;
tx_status_label->setStyleSheet("");
tx_status_label->setText("");
@ -1819,18 +1812,23 @@ void MainWindow::doubleClickOnCall(bool shift, bool ctrl)
int frequency = decodedtext.frequencyOffset();
m_wideGraph->setRxFreq(frequency); //Set Rx freq
if (ui->RxFreqSpinBox->isEnabled ())
{
ui->RxFreqSpinBox->setValue (frequency); //Set Rx freq
}
if (decodedtext.isTX())
{
if (ctrl)
ui->TxFreqSpinBox->setValue(frequency); //Set Tx freq
if (ctrl && ui->TxFreqSpinBox->isEnabled ())
{
ui->TxFreqSpinBox->setValue(frequency); //Set Tx freq
}
return;
}
QString firstcall = decodedtext.call();
// Don't change Tx freq if a station is calling me, unless m_lockTxFreq
// is true or CTRL is held down
if ((firstcall!=m_config.my_callsign ()) or m_lockTxFreq or ctrl)
if (((firstcall!=m_config.my_callsign ()) or m_lockTxFreq or ctrl) and ui->TxFreqSpinBox->isEnabled ())
ui->TxFreqSpinBox->setValue(frequency);
if (decodedtext.isJT9())
@ -1929,6 +1927,7 @@ void MainWindow::doubleClickOnCall(bool shift, bool ctrl)
ui->rbGenMsg->setChecked(true);
}
}
if(m_transmitting) m_restart=true;
if(m_config.quick_call ())
{
auto_tx_mode (true);
@ -2288,7 +2287,7 @@ void MainWindow::on_logQSOButton_clicked() //Log QSO button
, m_rptSent
, m_rptRcvd
, m_dateTimeQSO
, (m_dialFreq + m_txFreq) / 1.e6
, (m_dialFreq + ui->TxFreqSpinBox->value ()) / 1.e6
, m_config.my_callsign ()
, m_config.my_grid ()
, m_noSuffix
@ -2301,7 +2300,7 @@ void MainWindow::acceptQSO2(bool accepted)
{
if(accepted)
{
QString band = ADIF::bandFromFrequency ((m_dialFreq + m_txFreq) / 1.e6);
QString band = ADIF::bandFromFrequency ((m_dialFreq + ui->TxFreqSpinBox->value ()) / 1.e6);
QString date = m_dateTimeQSO.toString("yyyy-MM-dd");
date=date.mid(0,4) + date.mid(5,2) + date.mid(8,2);
m_logBook.addAsWorked(m_hisCall,band,m_modeTx,date);
@ -2394,17 +2393,19 @@ void MainWindow::on_actionJT9_JT65_triggered()
void MainWindow::on_TxFreqSpinBox_valueChanged(int n)
{
m_txFreq=n;
m_wideGraph->setTxFreq(n);
if(m_lockTxFreq) ui->RxFreqSpinBox->setValue(n);
Q_EMIT transmitFrequency (m_txFreq - m_XIT);
Q_EMIT transmitFrequency (n - m_XIT);
}
void MainWindow::on_RxFreqSpinBox_valueChanged(int n)
{
m_rxFreq=n;
m_wideGraph->setRxFreq(n);
if(m_lockTxFreq) ui->TxFreqSpinBox->setValue(n);
if (m_lockTxFreq && ui->TxFreqSpinBox->isEnabled ())
{
ui->TxFreqSpinBox->setValue (n);
}
}
void MainWindow::on_actionQuickDecode_triggered()
@ -2662,7 +2663,6 @@ void MainWindow::on_stopTxButton_clicked() //Stop Tx
auto_tx_mode (false);
}
m_transmitting = false;
m_btxok=false;
m_repeatMsg=0;
}
@ -2679,13 +2679,18 @@ void MainWindow::rigOpen ()
void MainWindow::on_pbR2T_clicked()
{
int n=m_wideGraph->rxFreq();
ui->TxFreqSpinBox->setValue(n);
if (ui->TxFreqSpinBox->isEnabled ())
{
ui->TxFreqSpinBox->setValue(ui->RxFreqSpinBox->value ());
}
}
void MainWindow::on_pbT2R_clicked()
{
m_wideGraph->setRxFreq(m_txFreq);
if (ui->RxFreqSpinBox->isEnabled ())
{
ui->RxFreqSpinBox->setValue (ui->TxFreqSpinBox->value ());
}
}
@ -2731,15 +2736,20 @@ void MainWindow::setXIT(int n)
}
}
Q_EMIT transmitFrequency (m_txFreq - m_XIT);
Q_EMIT transmitFrequency (ui->TxFreqSpinBox->value () - m_XIT);
}
void MainWindow::setFreq4(int rxFreq, int txFreq)
{
m_rxFreq=rxFreq;
m_txFreq=txFreq;
ui->RxFreqSpinBox->setValue(m_rxFreq);
ui->TxFreqSpinBox->setValue(m_txFreq);
if (ui->RxFreqSpinBox->isEnabled ())
{
ui->RxFreqSpinBox->setValue(rxFreq);
}
if (ui->TxFreqSpinBox->isEnabled ())
{
ui->TxFreqSpinBox->setValue(txFreq);
}
}
void MainWindow::on_cbTxLock_clicked(bool checked)
@ -2773,6 +2783,14 @@ void MainWindow::on_cbPlus2kHz_toggled(bool checked)
void MainWindow::handle_transceiver_update (Transceiver::TransceiverState s)
{
static bool prior_ptt {false};
if (!s.ptt () && prior_ptt)
{
transmitDisplay (false);
}
prior_ptt = s.ptt ();
if ((s.frequency () - m_dialFreq) || s.split () != m_splitMode)
{
m_splitMode = s.split ();
@ -2821,11 +2839,11 @@ void MainWindow::transmit (double snr)
{
if (m_modeTx == "JT65")
{
Q_EMIT sendMessage (NUM_JT65_SYMBOLS, 4096.0 * 12000.0 / 11025.0, m_txFreq - m_XIT, m_toneSpacing, &m_soundOutput, m_config.audio_output_channel (), true, snr);
Q_EMIT sendMessage (NUM_JT65_SYMBOLS, 4096.0 * 12000.0 / 11025.0, ui->TxFreqSpinBox->value () - m_XIT, m_toneSpacing, &m_soundOutput, m_config.audio_output_channel (), true, snr);
}
else
{
Q_EMIT sendMessage (NUM_JT9_SYMBOLS, m_nsps, m_txFreq - m_XIT, m_toneSpacing, &m_soundOutput, m_config.audio_output_channel (), true, snr);
Q_EMIT sendMessage (NUM_JT9_SYMBOLS, m_nsps, ui->TxFreqSpinBox->value () - m_XIT, m_toneSpacing, &m_soundOutput, m_config.audio_output_channel (), true, snr);
}
}
@ -2951,3 +2969,45 @@ void MainWindow::pskSetLocal ()
, m_config.my_grid ()
, antenna_description, "WSJT-X " + m_revision);
}
void MainWindow::transmitDisplay (bool transmitting)
{
if (transmitting)
{
signalMeter->setValue(0);
if (m_monitoring)
{
monitor (false);
}
m_btxok=true;
}
auto QSY_allowed = !transmitting || m_config.tx_QSY_allowed ();
if (ui->cbTxLock->isChecked ())
{
ui->RxFreqSpinBox->setEnabled (QSY_allowed);
ui->pbT2R->setEnabled (QSY_allowed);
}
ui->TxFreqSpinBox->setEnabled (QSY_allowed);
ui->pbR2T->setEnabled (QSY_allowed);
ui->cbTxLock->setEnabled (QSY_allowed);
ui->cbPlus2kHz->setEnabled (QSY_allowed);
// the following are always disallowed in transmit
ui->menuMode->setEnabled (!transmitting);
ui->bandComboBox->setEnabled (!transmitting);
if (!transmitting)
{
if ("JT9+JT65" == m_mode)
{
// allow mode switch in Rx when in dual mode
ui->pbTxMode->setEnabled (true);
}
}
else
{
ui->pbTxMode->setEnabled (false);
}
}

View File

@ -220,8 +220,6 @@ private:
qint32 m_waterfallAvg;
qint32 m_ntx;
qint32 m_timeout;
qint32 m_rxFreq;
qint32 m_txFreq;
int m_XIT;
qint32 m_setftx;
qint32 m_ndepth;
@ -389,6 +387,7 @@ private:
void rigFailure (QString const& reason, QString const& detail);
void pskSetLocal ();
void displayDialFrequency ();
void transmitDisplay (bool);
};
extern void getfile(QString fname, int ntrperiod);

View File

@ -399,18 +399,9 @@ int CPlotter::binsPerPixel() // get nbpp
return m_binsPerPixel;
}
void CPlotter::setRxFreq(int x, bool bf) //setRxFreq()
void CPlotter::setRxFreq (int x)
{
if(bf) {
m_rxFreq=x; // x is freq in Hz
m_xClick=XfromFreq(m_rxFreq);
} else {
if(x<0) x=0; // x is pixel number
if(x>m_Size.width()) x=m_Size.width();
m_rxFreq=int(FreqfromX(x)+0.5);
m_xClick=x;
}
emit setFreq1(m_rxFreq,m_txFreq);
m_rxFreq = x; // x is freq in Hz
DrawOverlay();
update();
}
@ -420,18 +411,22 @@ int CPlotter::rxFreq() {return m_rxFreq;} //get rxFreq
void CPlotter::mousePressEvent(QMouseEvent *event) //mousePressEvent
{
int x=event->x();
setRxFreq(x,false); // Wideband waterfall
if(x<0) x=0;
if(x>m_Size.width()) x=m_Size.width();
bool ctrl = (event->modifiers() & Qt::ControlModifier);
int freq = int(FreqfromX(x)+0.5);
int tx_freq = m_txFreq;
if (ctrl or m_lockTxFreq) tx_freq = freq;
emit setFreq1 (freq, tx_freq);
int n=1;
if(ctrl) n+=100;
emit freezeDecode1(n);
if(ctrl or m_lockTxFreq) setTxFreq(m_rxFreq);
}
void CPlotter::mouseDoubleClickEvent(QMouseEvent *event) //mouse2click
{
// int x=event->x();
// setRxFreq(x,false);
bool ctrl = (event->modifiers() & Qt::ControlModifier);
int n=2;
if(ctrl) n+=100;
@ -464,7 +459,6 @@ void CPlotter::setNsps(int ntrperiod, int nsps)
void CPlotter::setTxFreq(int n) //setTol()
{
m_txFreq=n;
emit setFreq1(m_rxFreq,m_txFreq);
DrawOverlay();
update();
}

View File

@ -48,7 +48,7 @@ public:
void setRxRange(int fMin);
void setBinsPerPixel(int n);
int binsPerPixel();
void setRxFreq(int n, bool bf);
void setRxFreq(int n);
void DrawOverlay();
int rxFreq();
void setFsample(int n);

View File

@ -214,9 +214,8 @@ void WideGraph::keyPressEvent(QKeyEvent *e)
void WideGraph::setRxFreq(int n)
{
m_rxFreq=n;
ui->widePlot->setRxFreq(m_rxFreq,true);
if(m_lockTxFreq) setTxFreq(m_rxFreq);
ui->widePlot->setRxFreq(n);
if(m_lockTxFreq) setTxFreq(n);
}
int WideGraph::rxFreq()
@ -322,14 +321,11 @@ void WideGraph::setLockTxFreq(bool b)
void WideGraph::setFreq2(int rxFreq, int txFreq)
{
m_rxFreq=rxFreq;
m_txFreq=txFreq;
emit setFreq3(rxFreq,txFreq);
}
void WideGraph::setDialFreq(double d)
{
m_dialFreq=d;
ui->widePlot->setDialFreq(d);
}

View File

@ -77,11 +77,6 @@ private:
QDir m_palettes_path;
WFPalette m_userPalette;
qint32 m_rxFreq;
qint32 m_txFreq;
double m_dialFreq;
qint32 m_waterfallAvg;
qint32 m_fSample;
qint32 m_TRperiod;