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 afd595d2da
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). */
/********* 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; /*<! 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

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);
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);
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:

Wyświetl plik

@ -30,7 +30,7 @@
#include <sys/time.h>
#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)

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__);
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);