Add modeB to caching

update rig_vfo_get_info to recognize different VFO caches
https://github.com/Hamlib/Hamlib/issues/578
pull/574/head
Michael Black W9MDB 2021-03-02 11:11:12 -06:00
rodzic 396d985261
commit 8371f335cd
2 zmienionych plików z 42 dodań i 5 usunięć

Wyświetl plik

@ -2093,6 +2093,7 @@ struct rig_cache {
#endif
rmode_t mode;
pbwidth_t width;
pbwidth_t widthB; // if non-zero then rig has separate width for VFOB
ptt_t ptt;
split_t split;
vfo_t split_vfo; // split caches two values
@ -2113,6 +2114,7 @@ struct rig_cache {
vfo_t vfo_freq; // last vfo cached
vfo_t vfo_mode; // last vfo cached
int satmode; // if rig is in satellite mode
rmode_t modeB;
};
@ -2182,6 +2184,7 @@ struct rig_state {
int poll_interval; /*!< Event notification polling period in milliseconds */
freq_t current_freq; /*!< Frequency currently set */
rmode_t current_mode; /*!< Mode currently set */
//rmode_t current_modeB; /*!< Mode currently set VFOB */
pbwidth_t current_width; /*!< Passband width currently set */
vfo_t tx_vfo; /*!< Tx VFO currently set */
rmode_t mode_list; /*!< Complete list of modes for this rig */

Wyświetl plik

@ -2011,8 +2011,16 @@ int HAMLIB_API rig_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
rig->state.current_width = width;
}
rig->state.cache.mode = mode;
rig->state.cache.vfo_mode = vfo;
if (vfo == RIG_VFO_B || vfo == RIG_VFO_SUB || vfo == RIG_VFO_MAIN_B)
{
rig->state.cache.mode = mode;
}
else
{
rig->state.cache.modeB = mode;
}
rig->state.cache.vfo_mode = mode; // is this still needed?
elapsed_ms(&rig->state.cache.time_mode, HAMLIB_ELAPSED_SET);
RETURNFUNC(retcode);
@ -2062,13 +2070,20 @@ int HAMLIB_API rig_get_mode(RIG *rig,
}
cache_ms = elapsed_ms(&rig->state.cache.time_mode, HAMLIB_ELAPSED_GET);
rig_debug(RIG_DEBUG_TRACE, "%s: cache check age=%dms\n", __func__, cache_ms);
rig_debug(RIG_DEBUG_TRACE, "%s: %s cache check age=%dms\n", __func__,
rig_strvfo(vfo), cache_ms);
if (cache_ms < rig->state.cache.timeout_ms && rig->state.cache.vfo_mode == vfo)
{
rig_debug(RIG_DEBUG_TRACE, "%s: cache hit age=%dms\n", __func__, cache_ms);
*mode = rig->state.cache.mode;
*width = rig->state.cache.width;
if (vfo == RIG_VFO_B || vfo == RIG_VFO_SUB || vfo == RIG_VFO_MAIN_B)
{
*width = rig->state.cache.widthB;
}
RETURNFUNC(RIG_OK);
}
else
@ -2129,8 +2144,21 @@ int HAMLIB_API rig_get_mode(RIG *rig,
}
rig->state.cache.mode = *mode;
rig->state.cache.width = *width;
rig->state.cache.vfo_mode = vfo;
if (vfo == RIG_VFO_B || vfo == RIG_VFO_SUB || vfo == RIG_VFO_MAIN_B)
{
rig->state.cache.widthB = *width;
if (*width == 0) { *width = rig->state.cache.width; }
rig->state.cache.modeB = vfo;
}
else
{
rig->state.cache.width = *width;
rig->state.cache.vfo_mode = vfo;
}
cache_ms = elapsed_ms(&rig->state.cache.time_mode, HAMLIB_ELAPSED_SET);
RETURNFUNC(retcode);
@ -5762,16 +5790,22 @@ int HAMLIB_API rig_get_vfo_info(RIG *rig, vfo_t vfo, freq_t *freq,
{
*freq = rig->state.cache.freqMainB;
*width = rig->state.cache.width;
if (rig->state.cache.widthB) { *width = rig->state.cache.widthB; }
}
else if (vfo == RIG_VFO_SUB_B)
{
*freq = rig->state.cache.freqSubB;
*width = rig->state.cache.width;
if (rig->state.cache.widthB) { *width = rig->state.cache.widthB; }
}
else
{
*freq = rig->state.cache.freqMainB;
*width = rig->state.cache.width;
if (rig->state.cache.widthB) { *width = rig->state.cache.widthB; }
}
*split = rig->state.cache.split;