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
This commit is contained in:
Bill Somerville 2017-07-16 14:32:48 +00:00
parent 29fc1719a9
commit 28ec5de9ee
3 changed files with 35 additions and 33 deletions

View File

@ -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;

View File

@ -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<Frequency>::max () - 10000))
{
if ((s.tx_frequency () != requested_.tx_frequency () // and QSY
|| (s.mode () != UNK && s.mode () != requested_.mode ())) // or mode change

View File

@ -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 ();