mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2025-02-21 13:08:39 -05:00
Round frequencies returned from Hamlib to the nearest Hertz
Hamlib can return fractional decimal Hertz for some devices that use internal fixed point binary registers e.g. devices using the Si570 clock generator as a frequency synthesizer. Rounding to the nearest Hertz should ensure accurate round tripping of frequencies. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6622 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
parent
c297e1e23b
commit
9de00a5082
@ -1,6 +1,7 @@
|
||||
#include "HamlibTransceiver.hpp"
|
||||
|
||||
#include <cstring>
|
||||
#include <cmath>
|
||||
|
||||
#include <QByteArray>
|
||||
#include <QString>
|
||||
@ -439,6 +440,7 @@ int HamlibTransceiver::do_start ()
|
||||
// assume it is as when we started by setting at open time right
|
||||
// here. We also gather/set other initial state.
|
||||
error_check (rig_get_freq (rig_.data (), RIG_VFO_CURR, &f1), tr ("getting current frequency"));
|
||||
f1 = std::round (f1);
|
||||
TRACE_CAT ("HamlibTransceiver", "current frequency =" << f1);
|
||||
|
||||
error_check (rig_get_mode (rig_.data (), RIG_VFO_CURR, &m, &w), tr ("getting current mode"));
|
||||
@ -456,6 +458,7 @@ int HamlibTransceiver::do_start ()
|
||||
}
|
||||
|
||||
error_check (rig_get_freq (rig_.data (), RIG_VFO_CURR, &f2), tr ("getting other VFO frequency"));
|
||||
f2 = std::round (f2);
|
||||
TRACE_CAT ("HamlibTransceiver", "rig_get_freq other frequency =" << f2);
|
||||
|
||||
error_check (rig_get_mode (rig_.data (), RIG_VFO_CURR, &mb, &wb), tr ("getting other VFO mode"));
|
||||
@ -481,6 +484,7 @@ int HamlibTransceiver::do_start ()
|
||||
else
|
||||
{
|
||||
error_check (rig_get_freq (rig_.data (), RIG_VFO_CURR, &f1), tr ("getting frequency"));
|
||||
f1 = std::round (f1);
|
||||
TRACE_CAT ("HamlibTransceiver", "rig_get_freq frequency =" << f1);
|
||||
|
||||
error_check (rig_get_mode (rig_.data (), RIG_VFO_CURR, &m, &w), tr ("getting mode"));
|
||||
@ -542,6 +546,7 @@ int HamlibTransceiver::do_start ()
|
||||
int resolution {0};
|
||||
freq_t current_frequency;
|
||||
error_check (rig_get_freq (rig_.data (), RIG_VFO_CURR, ¤t_frequency), tr ("getting current VFO frequency"));
|
||||
current_frequency = std::round (current_frequency);
|
||||
Frequency f = current_frequency;
|
||||
if (f && !(f % 10))
|
||||
{
|
||||
@ -549,6 +554,7 @@ int HamlibTransceiver::do_start ()
|
||||
error_check (rig_set_freq (rig_.data (), RIG_VFO_CURR, test_frequency), tr ("setting frequency"));
|
||||
freq_t new_frequency;
|
||||
error_check (rig_get_freq (rig_.data (), RIG_VFO_CURR, &new_frequency), tr ("getting current VFO frequency"));
|
||||
new_frequency = std::round (new_frequency);
|
||||
switch (static_cast<Radio::FrequencyDelta> (new_frequency - test_frequency))
|
||||
{
|
||||
case -5: resolution = -1; break; // 10Hz truncated
|
||||
@ -570,6 +576,7 @@ void HamlibTransceiver::do_stop ()
|
||||
if (is_dummy_)
|
||||
{
|
||||
rig_get_freq (rig_.data (), RIG_VFO_CURR, &dummy_frequency_);
|
||||
dummy_frequency_ = std::round (dummy_frequency_);
|
||||
if (mode_query_works_)
|
||||
{
|
||||
pbwidth_t width;
|
||||
@ -851,6 +858,7 @@ void HamlibTransceiver::poll ()
|
||||
if (!state ().ptt () || !state ().split ())
|
||||
{
|
||||
error_check (rig_get_freq (rig_.data (), RIG_VFO_CURR, &f), tr ("getting current VFO frequency"));
|
||||
f = std::round (f);
|
||||
TRACE_CAT_POLL ("HamlibTransceiver", "rig_get_freq frequency =" << f);
|
||||
update_rx_frequency (f);
|
||||
}
|
||||
@ -871,6 +879,7 @@ void HamlibTransceiver::poll ()
|
||||
? (rig_->state.vfo_list & RIG_VFO_A ? RIG_VFO_A : RIG_VFO_MAIN)
|
||||
: (rig_->state.vfo_list & RIG_VFO_B ? RIG_VFO_B : RIG_VFO_SUB)
|
||||
, &f), tr ("getting other VFO frequency"));
|
||||
f = std::round (f);
|
||||
TRACE_CAT_POLL ("HamlibTransceiver", "rig_get_freq other VFO =" << f);
|
||||
update_other_frequency (f);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user