From 28ec5de9ee6b41b3d68a266ed3e6259792036e98 Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Sun, 16 Jul 2017 14:32:48 +0000 Subject: [PATCH] Improved rig control start up behavour Avoid trying to set bogus uninitialized frequency values. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7897 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- HamlibTransceiver.cpp | 58 +++++++++++++++++++++---------------------- TransceiverBase.cpp | 4 ++- mainwindow.cpp | 6 ++--- 3 files changed, 35 insertions(+), 33 deletions(-) diff --git a/HamlibTransceiver.cpp b/HamlibTransceiver.cpp index 6b70069b7..473f761d3 100644 --- a/HamlibTransceiver.cpp +++ b/HamlibTransceiver.cpp @@ -919,6 +919,35 @@ void HamlibTransceiver::poll () reversed_ = RIG_VFO_B == v; } + if ((WSJT_RIG_NONE_CAN_SPLIT || !is_dummy_) + && rig_->caps->get_split_vfo && split_query_works_) + { + vfo_t v {RIG_VFO_NONE}; // so we can tell if it doesn't get updated :( + auto rc = rig_get_split_vfo (rig_.data (), RIG_VFO_CURR, &s, &v); + if (-RIG_OK == rc && RIG_SPLIT_ON == s) + { + TRACE_CAT_POLL ("HamlibTransceiver", "rig_get_split_vfo split = " << s << " VFO = " << rig_strvfo (v)); + update_split (true); + // if (RIG_VFO_A == v) + // { + // reversed_ = true; // not sure if this helps us here + // } + } + else if (-RIG_OK == rc) // not split + { + TRACE_CAT_POLL ("HamlibTransceiver", "rig_get_split_vfo split = " << s << " VFO = " << rig_strvfo (v)); + update_split (false); + } + else + { + // Some rigs (Icom) don't have a way of reporting SPLIT + // mode + TRACE_CAT_POLL ("HamlibTransceiver", "rig_get_split_vfo can't do on this rig"); + // just report how we see it based on prior commands + split_query_works_ = false; + } + } + if (freq_query_works_) { // only read if possible and when receiving or simplex @@ -974,35 +1003,6 @@ void HamlibTransceiver::poll () } } - if ((WSJT_RIG_NONE_CAN_SPLIT || !is_dummy_) - && rig_->caps->get_split_vfo && split_query_works_) - { - vfo_t v {RIG_VFO_NONE}; // so we can tell if it doesn't get updated :( - auto rc = rig_get_split_vfo (rig_.data (), RIG_VFO_CURR, &s, &v); - if (-RIG_OK == rc && RIG_SPLIT_ON == s) - { - TRACE_CAT_POLL ("HamlibTransceiver", "rig_get_split_vfo split = " << s << " VFO = " << rig_strvfo (v)); - update_split (true); - // if (RIG_VFO_A == v) - // { - // reversed_ = true; // not sure if this helps us here - // } - } - else if (-RIG_OK == rc) // not split - { - TRACE_CAT_POLL ("HamlibTransceiver", "rig_get_split_vfo split = " << s << " VFO = " << rig_strvfo (v)); - update_split (false); - } - else - { - // Some rigs (Icom) don't have a way of reporting SPLIT - // mode - TRACE_CAT_POLL ("HamlibTransceiver", "rig_get_split_vfo can't do on this rig"); - // just report how we see it based on prior commands - split_query_works_ = false; - } - } - if (RIG_PTT_NONE != rig_->state.pttport.type.ptt && rig_->caps->get_ptt) { ptt_t p; diff --git a/TransceiverBase.cpp b/TransceiverBase.cpp index 7e2483652..ef77d51e4 100644 --- a/TransceiverBase.cpp +++ b/TransceiverBase.cpp @@ -86,7 +86,9 @@ void TransceiverBase::set (TransceiverState const& s, requested_.frequency (actual_.frequency ()); requested_.mode (actual_.mode ()); } - if (!s.tx_frequency () || s.tx_frequency () > 10000) // ignore bogus startup values + if (!s.tx_frequency () + || (s.tx_frequency () > 10000 // ignore bogus startup values + && s.tx_frequency () < std::numeric_limits::max () - 10000)) { if ((s.tx_frequency () != requested_.tx_frequency () // and QSY || (s.mode () != UNK && s.mode () != requested_.mode ())) // or mode change diff --git a/mainwindow.cpp b/mainwindow.cpp index 29765d672..e543fcd02 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -5350,6 +5350,8 @@ void MainWindow::handle_transceiver_update (Transceiver::TransceiverState const& m_tx_when_ready = false; } m_rigState = s; + auto old_freqNominal = m_freqNominal; + m_freqNominal = s.frequency () - m_astroCorrection.rx; if (old_state.online () == false && s.online () == true) { // initializing @@ -5360,9 +5362,7 @@ void MainWindow::handle_transceiver_update (Transceiver::TransceiverState const& m_splitMode = s.split (); if (!s.ptt ()) //!m_transmitting) { - auto temp = m_freqNominal; - m_freqNominal = s.frequency () - m_astroCorrection.rx; - if (temp != m_freqNominal) + if (old_freqNominal != m_freqNominal) { m_freqTxNominal = m_freqNominal; genCQMsg ();