Allow asyncio rigs to use cached-only values for rig_get_freq and rig_get_mode

https://github.com/Hamlib/Hamlib/issues/894
pull/948/head
Mike Black W9MDB 2022-01-29 08:28:54 -06:00
rodzic 86c62d5dbb
commit dc34cae503
4 zmienionych plików z 9 dodań i 3 usunięć

Wyświetl plik

@ -2532,6 +2532,10 @@ struct rig_state {
hamlib_port_t dcdport; /*!< DCD port (internal use). */ hamlib_port_t dcdport; /*!< DCD port (internal use). */
/********* DO NOT ADD or CHANGE anything (or than to rename) ABOVE THIS LINE *********/ /********* DO NOT ADD or CHANGE anything (or than to rename) ABOVE THIS LINE *********/
/********* ENSURE ANY NEW ITEMS ARE ADDED AFTER HERE *********/ /********* 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; /*<! flag instructing rig_get_freq to use cached values when asyncio is in use */
int use_cached_mode; /*<! flag instructing rig_get_mode to use cached values when asyncio is in use */
int use_cached_ptt; /*<! flag instructing rig_get_ptt to use cached values when asyncio is in use */
}; };
//! @cond Doxygen_Suppress //! @cond Doxygen_Suppress

Wyświetl plik

@ -8775,6 +8775,7 @@ int icom_process_async_frame(RIG *rig, size_t frame_length,
// TODO: rig_set_cache_timeout_ms(rig, HAMLIB_CACHE_FREQ, HAMLIB_CACHE_ALWAYS); // TODO: rig_set_cache_timeout_ms(rig, HAMLIB_CACHE_FREQ, HAMLIB_CACHE_ALWAYS);
freq_t freq = (freq_t) from_bcd(frame + 5, (priv->civ_731_mode ? 4 : 5) * 2); freq_t freq = (freq_t) from_bcd(frame + 5, (priv->civ_731_mode ? 4 : 5) * 2);
rig_fire_freq_event(rig, RIG_VFO_CURR, freq); rig_fire_freq_event(rig, RIG_VFO_CURR, freq);
rs->use_cached_freq = 1;
break; 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); // TODO: rig_set_cache_timeout_ms(rig, HAMLIB_CACHE_MODE, HAMLIB_CACHE_ALWAYS);
icom2rig_mode(rig, frame[5], frame[6], &mode, &width); icom2rig_mode(rig, frame[5], frame[6], &mode, &width);
rig_fire_mode_event(rig, RIG_VFO_CURR, mode, width); rig_fire_mode_event(rig, RIG_VFO_CURR, mode, width);
rs->use_cached_mode = 1;
break; break;
case C_CTL_SCP: case C_CTL_SCP:

Wyświetl plik

@ -30,7 +30,7 @@
#include <sys/time.h> #include <sys/time.h>
#endif #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_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) #define ICOM_GET_VFO_NUMBER(vfo) (ICOM_IS_SECONDARY_VFO(vfo) ? 0x01 : 0x00)

Wyświetl plik

@ -1795,7 +1795,7 @@ int HAMLIB_API rig_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
rig_cache_show(rig, __func__, __LINE__); rig_cache_show(rig, __func__, __LINE__);
if (*freq != 0 && (cache_ms_freq < rig->state.cache.timeout_ms 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_debug(RIG_DEBUG_TRACE, "%s: %s cache hit age=%dms, freq=%.0f\n", __func__,
rig_strvfo(vfo), cache_ms_freq, *freq); 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__); 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", rig_debug(RIG_DEBUG_TRACE, "%s: cache hit age mode=%dms, width=%dms\n",
__func__, cache_ms_mode, cache_ms_width); __func__, cache_ms_mode, cache_ms_width);