Add minimum support for one way CAT control rigs

Older  rigs like  the  Yaesu  FT-736R only  support  set commands  and
extremely   limited  query   commands   (like   squelch  and   S-meter
levels). This change allows them to  be supported via Hamlib albeit in
a very minimal way.

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7556 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Bill Somerville 2017-01-28 18:46:55 +00:00
parent cf97a23379
commit b4fc646455
2 changed files with 63 additions and 49 deletions

View File

@ -189,6 +189,7 @@ HamlibTransceiver::HamlibTransceiver (TransceiverFactory::PTTMethod ptt_type, QS
, one_VFO_ {false}
, is_dummy_ {true}
, reversed_ {false}
, freq_query_works_ {true}
, mode_query_works_ {true}
, split_query_works_ {true}
, tickle_hamlib_ {false}
@ -240,6 +241,7 @@ HamlibTransceiver::HamlibTransceiver (int model_number, TransceiverFactory::Para
, one_VFO_ {false}
, is_dummy_ {RIG_MODEL_DUMMY == model_number}
, reversed_ {false}
, freq_query_works_ {rig_ && rig_->caps->get_freq}
, mode_query_works_ {rig_ && rig_->caps->get_mode}
, split_query_works_ {rig_ && rig_->caps->get_split_vfo}
, tickle_hamlib_ {false}
@ -441,7 +443,8 @@ int HamlibTransceiver::do_start ()
rmode_t mb;
pbwidth_t w {RIG_PASSBAND_NORMAL};
pbwidth_t wb;
if ((!get_vfo_works_ || !rig_->caps->get_vfo)
if (freq_query_works_
&& (!get_vfo_works_ || !rig_->caps->get_vfo)
&& (rig_->caps->set_vfo || rig_has_vfo_op (rig_.data (), RIG_OP_TOGGLE)))
{
// Icom have deficient CAT protocol with no way of reading which
@ -553,6 +556,8 @@ int HamlibTransceiver::do_start ()
}
int resolution {0};
if (freq_query_works_)
{
freq_t current_frequency;
error_check (rig_get_freq (rig_.data (), RIG_VFO_CURR, &current_frequency), tr ("getting current VFO frequency"));
current_frequency = std::round (current_frequency);
@ -584,6 +589,11 @@ int HamlibTransceiver::do_start ()
}
error_check (rig_set_freq (rig_.data (), RIG_VFO_CURR, current_frequency), tr ("setting frequency"));
}
}
else
{
resolution = -1; // best guess
}
poll ();
@ -874,7 +884,9 @@ void HamlibTransceiver::poll ()
reversed_ = RIG_VFO_B == v;
}
// only read when receiving or simplex
if (freq_query_works_)
{
// only read if possible and when receiving or simplex
if (!state ().ptt () || !state ().split ())
{
error_check (rig_get_freq (rig_.data (), RIG_VFO_CURR, &f), tr ("getting current VFO frequency"));
@ -903,6 +915,7 @@ void HamlibTransceiver::poll ()
TRACE_CAT_POLL ("HamlibTransceiver", "rig_get_freq other VFO =" << f);
update_other_frequency (f);
}
}
// only read when receiving or simplex if direct VFO addressing unavailable
if ((!state ().ptt () || !state ().split ())

View File

@ -63,6 +63,7 @@ class HamlibTransceiver final
bool mutable reversed_;
bool freq_query_works_;
bool mode_query_works_;
bool split_query_works_;
bool tickle_hamlib_; // Hamlib requires a