From dc34cae503c71e961d0ca547dbe7dfebfa243f76 Mon Sep 17 00:00:00 2001 From: Mike Black W9MDB Date: Sat, 29 Jan 2022 08:28:54 -0600 Subject: [PATCH] Allow asyncio rigs to use cached-only values for rig_get_freq and rig_get_mode https://github.com/Hamlib/Hamlib/issues/894 --- include/hamlib/rig.h | 4 ++++ rigs/icom/icom.c | 2 ++ rigs/icom/icom.h | 2 +- src/rig.c | 4 ++-- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index 9f06349d3..299a18dcb 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -2532,6 +2532,10 @@ struct rig_state { hamlib_port_t dcdport; /*!< DCD port (internal use). */ /********* DO NOT ADD or CHANGE anything (or than to rename) ABOVE THIS LINE *********/ /********* ENSURE ANY NEW ITEMS ARE ADDED AFTER HERE *********/ + /* flags instructing the rig_get routines to use cached values when asyncio is in use */ + int use_cached_freq; /*civ_731_mode ? 4 : 5) * 2); rig_fire_freq_event(rig, RIG_VFO_CURR, freq); + rs->use_cached_freq = 1; break; } @@ -8783,6 +8784,7 @@ int icom_process_async_frame(RIG *rig, size_t frame_length, // TODO: rig_set_cache_timeout_ms(rig, HAMLIB_CACHE_MODE, HAMLIB_CACHE_ALWAYS); icom2rig_mode(rig, frame[5], frame[6], &mode, &width); rig_fire_mode_event(rig, RIG_VFO_CURR, mode, width); + rs->use_cached_mode = 1; break; case C_CTL_SCP: diff --git a/rigs/icom/icom.h b/rigs/icom/icom.h index f8c254064..ca2eae095 100644 --- a/rigs/icom/icom.h +++ b/rigs/icom/icom.h @@ -30,7 +30,7 @@ #include #endif -#define BACKEND_VER "20220123" +#define BACKEND_VER "20220128" #define ICOM_IS_SECONDARY_VFO(vfo) ((vfo) & (RIG_VFO_B | RIG_VFO_SUB | RIG_VFO_SUB_B | RIG_VFO_MAIN_B)) #define ICOM_GET_VFO_NUMBER(vfo) (ICOM_IS_SECONDARY_VFO(vfo) ? 0x01 : 0x00) diff --git a/src/rig.c b/src/rig.c index efe314055..d46791e66 100644 --- a/src/rig.c +++ b/src/rig.c @@ -1795,7 +1795,7 @@ int HAMLIB_API rig_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) rig_cache_show(rig, __func__, __LINE__); if (*freq != 0 && (cache_ms_freq < rig->state.cache.timeout_ms - || rig->state.cache.timeout_ms == HAMLIB_CACHE_ALWAYS)) + || (rig->state.cache.timeout_ms == HAMLIB_CACHE_ALWAYS || rig->state.use_cached_freq))) { rig_debug(RIG_DEBUG_TRACE, "%s: %s cache hit age=%dms, freq=%.0f\n", __func__, rig_strvfo(vfo), cache_ms_freq, *freq); @@ -2114,7 +2114,7 @@ int HAMLIB_API rig_get_mode(RIG *rig, rig_cache_show(rig, __func__, __LINE__); - if (rig->state.cache.timeout_ms == HAMLIB_CACHE_ALWAYS) + if (rig->state.cache.timeout_ms == HAMLIB_CACHE_ALWAYS || rig->state.use_cached_mode) { rig_debug(RIG_DEBUG_TRACE, "%s: cache hit age mode=%dms, width=%dms\n", __func__, cache_ms_mode, cache_ms_width);