Add ELAPSED_INVALIDATE for caching use

Change rig_get_vfo to use ELAPSED_INVALIDATE
Change elapsed_ms code to make a little more sense
https://github.com/Hamlib/Hamlib/issues/231
pull/236/head
mdblack98 2020-05-02 11:19:44 -05:00
rodzic 54fd75ffe8
commit baa3787bc5
4 zmienionych plików z 41 dodań i 24 usunięć

Wyświetl plik

@ -1856,6 +1856,7 @@ typedef hamlib_port_t port_t;
#define ELAPSED_GET 0 #define ELAPSED_GET 0
#define ELAPSED_SET 1 #define ELAPSED_SET 1
#define ELAPSED_INVALIDATE 2
typedef enum { typedef enum {
CACHE_ALL, // to set all cache timeouts at once CACHE_ALL, // to set all cache timeouts at once

Wyświetl plik

@ -1573,7 +1573,8 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width)
signed char icmode_ext; signed char icmode_ext;
int ack_len = sizeof(ackbuf), retval, err; int ack_len = sizeof(ackbuf), retval, err;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); rig_debug(RIG_DEBUG_VERBOSE, "%s called vfo=%s, mode=%s, width=%d\n", __func__,
rig_strvfo(vfo), rig_strrmode(mode), (int)width);
rs = &rig->state; rs = &rig->state;
priv = (struct icom_priv_data *) rs->priv; priv = (struct icom_priv_data *) rs->priv;
@ -1743,7 +1744,7 @@ int icom_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
const struct icom_priv_caps *priv_caps; const struct icom_priv_caps *priv_caps;
int mode_len, retval; int mode_len, retval;
rig_debug(RIG_DEBUG_VERBOSE, "%s called\n", __func__); rig_debug(RIG_DEBUG_VERBOSE, "%s called vfo=%s\n", __func__, rig_strvfo(vfo));
priv_caps = (const struct icom_priv_caps *) rig->caps->priv; priv_caps = (const struct icom_priv_caps *) rig->caps->priv;
retval = icom_transaction(rig, C_RD_MODE, -1, NULL, 0, modebuf, &mode_len); retval = icom_transaction(rig, C_RD_MODE, -1, NULL, 0, modebuf, &mode_len);
@ -1801,6 +1802,8 @@ int icom_get_mode(RIG *rig, vfo_t vfo, rmode_t *mode, pbwidth_t *width)
*width = retval; *width = retval;
} }
rig_debug(RIG_DEBUG_TRACE, "%s: vfo=%s returning mode=%s, width=%d\n", __func__,
rig_strvfo(vfo), rig_strrmode(*mode), (int)*width);
return RIG_OK; return RIG_OK;
} }

Wyświetl plik

@ -1254,32 +1254,41 @@ void HAMLIB_API rig_no_restore_ai()
} }
//! @cond Doxygen_Suppress //! @cond Doxygen_Suppress
int HAMLIB_API elapsed_ms(struct timespec *start, int flag_start) int HAMLIB_API elapsed_ms(struct timespec *start, int option)
{ {
// If flag_start then we are starting the timing, else we get elapsed // If option then we are starting the timing, else we get elapsed
struct timespec stop; struct timespec stop;
double elapsed_secs; double elapsed_msec;
rig_debug(RIG_DEBUG_TRACE, "%s: start = %ld,%ld\n",__func__,(long)start->tv_sec,(long)start->tv_nsec); rig_debug(RIG_DEBUG_TRACE, "%s: start = %ld,%ld\n", __func__,
if (!flag_start && start->tv_nsec == 0) return 1000000; (long)start->tv_sec, (long)start->tv_nsec);
if (flag_start)
{ switch (option)
clock_gettime(CLOCK_REALTIME, start);
return 0;
}
else
{ {
case ELAPSED_GET:
if (start->tv_nsec == 0) { return 1000000; } // if we haven't done SET yet
clock_gettime(CLOCK_REALTIME, &stop); clock_gettime(CLOCK_REALTIME, &stop);
break;
case ELAPSED_SET:
clock_gettime(CLOCK_REALTIME, start);
rig_debug(RIG_DEBUG_TRACE, "%s: after gettime, start = %ld,%ld\n", __func__,
(long)start->tv_sec, (long)start->tv_nsec);
break;
case ELAPSED_INVALIDATE: // we take care of this below
break;
} }
elapsed_secs = (stop.tv_sec - start->tv_sec) * 1e6 + (stop.tv_nsec - elapsed_msec = ((stop.tv_sec - start->tv_sec) + ((stop.tv_nsec -
start->tv_nsec) / 1e3; start->tv_nsec) / 1e6)) / 1e3;
rig_debug(RIG_DEBUG_TRACE, "%s: elapse_secs=%g\n",__func__,elapsed_secs); rig_debug(RIG_DEBUG_TRACE, "%s: elapse_secs=%g\n", __func__, elapsed_msec);
if (elapsed_secs < 0) return 1000000;
return elapsed_secs / 1000; if (elapsed_msec < 0 || option == ELAPSED_INVALIDATE) { return 1000000; }
return elapsed_msec;
} }
int HAMLIB_API rig_get_cache_timeout_ms(RIG *rig, cache_t selection) int HAMLIB_API rig_get_cache_timeout_ms(RIG *rig, cache_t selection)
@ -1290,7 +1299,8 @@ int HAMLIB_API rig_get_cache_timeout_ms(RIG *rig, cache_t selection)
int HAMLIB_API rig_set_cache_timeout_ms(RIG *rig, cache_t selection, int ms) int HAMLIB_API rig_set_cache_timeout_ms(RIG *rig, cache_t selection, int ms)
{ {
rig_debug(RIG_DEBUG_TRACE, "%s: called selection=%d, ms=%d\n", __func__, selection, ms); rig_debug(RIG_DEBUG_TRACE, "%s: called selection=%d, ms=%d\n", __func__,
selection, ms);
rig->state.cache.timeout_ms = ms; rig->state.cache.timeout_ms = ms;
return RIG_OK; return RIG_OK;
} }

Wyświetl plik

@ -1338,7 +1338,8 @@ int HAMLIB_API rig_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
if (cache_ms < rig->state.cache.timeout_ms && rig->state.cache.vfo_freq == vfo) if (cache_ms < rig->state.cache.timeout_ms && rig->state.cache.vfo_freq == vfo)
{ {
rig_debug(RIG_DEBUG_TRACE, "%s: %s cache hit age=%dms\n", __func__, rig_strvfo(vfo), cache_ms); rig_debug(RIG_DEBUG_TRACE, "%s: %s cache hit age=%dms\n", __func__,
rig_strvfo(vfo), cache_ms);
*freq = rig->state.cache.freq; *freq = rig->state.cache.freq;
return RIG_OK; return RIG_OK;
} }
@ -1409,7 +1410,8 @@ int HAMLIB_API rig_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
cache_ms = elapsed_ms(&(rig->state.cache.time_freq), ELAPSED_SET); cache_ms = elapsed_ms(&(rig->state.cache.time_freq), ELAPSED_SET);
rig_debug(RIG_DEBUG_TRACE, "%s: cache reset age=%dm, vfo=%s, freq=%g\n", __func__, cache_ms, rig_strvfo(vfo), *freq); rig_debug(RIG_DEBUG_TRACE, "%s: cache reset age=%dm, vfo=%s, freq=%g\n",
__func__, cache_ms, rig_strvfo(vfo), *freq);
rig->state.cache.freq = *freq; rig->state.cache.freq = *freq;
rig->state.cache.vfo_freq = vfo; rig->state.cache.vfo_freq = vfo;
@ -1814,10 +1816,11 @@ int HAMLIB_API rig_set_vfo(RIG *rig, vfo_t vfo)
rig->state.cache.vfo = vfo; rig->state.cache.vfo = vfo;
// expire several cached items when we switch VFOs // expire several cached items when we switch VFOs
elapsed_ms(&rig->state.cache.time_vfo, ELAPSED_SET); elapsed_ms(&rig->state.cache.time_vfo, ELAPSED_INVALIDATE);
elapsed_ms(&rig->state.cache.time_freq, ELAPSED_SET); elapsed_ms(&rig->state.cache.time_freq, ELAPSED_INVALIDATE);
elapsed_ms(&rig->state.cache.time_mode, ELAPSED_SET); elapsed_ms(&rig->state.cache.time_mode, ELAPSED_INVALIDATE);
rig_debug(RIG_DEBUG_TRACE, "%s: return %d, vfo=%s\n", __func__, retcode, rig_strvfo(vfo));
return retcode; return retcode;
} }