From baa3787bc54ce39de5d2667fb97afecd41c774c3 Mon Sep 17 00:00:00 2001 From: mdblack98 Date: Sat, 2 May 2020 11:19:44 -0500 Subject: [PATCH] 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 --- include/hamlib/rig.h | 1 + rigs/icom/icom.c | 7 +++++-- src/misc.c | 44 +++++++++++++++++++++++++++----------------- src/rig.c | 13 ++++++++----- 4 files changed, 41 insertions(+), 24 deletions(-) diff --git a/include/hamlib/rig.h b/include/hamlib/rig.h index 99bd35023..09d0a3a12 100644 --- a/include/hamlib/rig.h +++ b/include/hamlib/rig.h @@ -1856,6 +1856,7 @@ typedef hamlib_port_t port_t; #define ELAPSED_GET 0 #define ELAPSED_SET 1 +#define ELAPSED_INVALIDATE 2 typedef enum { CACHE_ALL, // to set all cache timeouts at once diff --git a/rigs/icom/icom.c b/rigs/icom/icom.c index cfc490df4..8a6420410 100644 --- a/rigs/icom/icom.c +++ b/rigs/icom/icom.c @@ -1573,7 +1573,8 @@ int icom_set_mode(RIG *rig, vfo_t vfo, rmode_t mode, pbwidth_t width) signed char icmode_ext; 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; 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; 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; 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; } + 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; } diff --git a/src/misc.c b/src/misc.c index 70b0c7374..28ed3bc6d 100644 --- a/src/misc.c +++ b/src/misc.c @@ -1254,32 +1254,41 @@ void HAMLIB_API rig_no_restore_ai() } //! @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; - 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); - if (!flag_start && start->tv_nsec == 0) return 1000000; + rig_debug(RIG_DEBUG_TRACE, "%s: start = %ld,%ld\n", __func__, + (long)start->tv_sec, (long)start->tv_nsec); - if (flag_start) - { - clock_gettime(CLOCK_REALTIME, start); - return 0; - } - else + + switch (option) { + case ELAPSED_GET: + if (start->tv_nsec == 0) { return 1000000; } // if we haven't done SET yet 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 - - start->tv_nsec) / 1e3; + elapsed_msec = ((stop.tv_sec - start->tv_sec) + ((stop.tv_nsec - + start->tv_nsec) / 1e6)) / 1e3; - rig_debug(RIG_DEBUG_TRACE, "%s: elapse_secs=%g\n",__func__,elapsed_secs); - if (elapsed_secs < 0) return 1000000; + rig_debug(RIG_DEBUG_TRACE, "%s: elapse_secs=%g\n", __func__, elapsed_msec); - 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) @@ -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) { - 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; return RIG_OK; } diff --git a/src/rig.c b/src/rig.c index dfc1c38bd..e1972b687 100644 --- a/src/rig.c +++ b/src/rig.c @@ -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) { - 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; 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); - 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.vfo_freq = vfo; @@ -1814,10 +1816,11 @@ int HAMLIB_API rig_set_vfo(RIG *rig, vfo_t vfo) rig->state.cache.vfo = vfo; // expire several cached items when we switch VFOs - elapsed_ms(&rig->state.cache.time_vfo, ELAPSED_SET); - elapsed_ms(&rig->state.cache.time_freq, ELAPSED_SET); - elapsed_ms(&rig->state.cache.time_mode, ELAPSED_SET); + elapsed_ms(&rig->state.cache.time_vfo, ELAPSED_INVALIDATE); + elapsed_ms(&rig->state.cache.time_freq, ELAPSED_INVALIDATE); + 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; }