diff --git a/src/misc.c b/src/misc.c index 28ed3bc6d..fa310e502 100644 --- a/src/misc.c +++ b/src/misc.c @@ -1267,7 +1267,10 @@ int HAMLIB_API elapsed_ms(struct timespec *start, int option) switch (option) { case ELAPSED_GET: - if (start->tv_nsec == 0) { return 1000000; } // if we haven't done SET yet + if (start->tv_nsec == 0) { // if we haven't done SET yet + clock_gettime(CLOCK_REALTIME, start); + return 1000 * 1000; + } clock_gettime(CLOCK_REALTIME, &stop); break; @@ -1275,16 +1278,17 @@ int HAMLIB_API elapsed_ms(struct timespec *start, int option) 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); + return 999 * 1000; // so we can tell the difference in debug where we came from break; - case ELAPSED_INVALIDATE: // we take care of this below + case ELAPSED_INVALIDATE: + start->tv_sec -= 3600*24*365; // let's back off 1 year -- should expire most elapsed measurements break; } + elapsed_msec = ((stop.tv_sec - start->tv_sec) + (stop.tv_nsec/1e9 - + start->tv_nsec/1e9)) / 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_msec); + rig_debug(RIG_DEBUG_TRACE, "%s: elapsed_secs=%g\n", __func__, elapsed_msec); if (elapsed_msec < 0 || option == ELAPSED_INVALIDATE) { return 1000000; } diff --git a/src/rig.c b/src/rig.c index e1972b687..0f6995201 100644 --- a/src/rig.c +++ b/src/rig.c @@ -1345,7 +1345,7 @@ int HAMLIB_API rig_get_freq(RIG *rig, vfo_t vfo, freq_t *freq) } else { - rig_debug(RIG_DEBUG_TRACE, "%s: cache miss age=%dms\n", __func__, cache_ms); + rig_debug(RIG_DEBUG_TRACE, "%s: cache miss age=%dms, cached_vfo=%s, asked_vfo=%s\n", __func__, cache_ms, rig_strvfo(rig->state.cache.vfo_freq), rig_strvfo(vfo)); } caps = rig->caps; @@ -1410,7 +1410,7 @@ 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", + rig_debug(RIG_DEBUG_TRACE, "%s: cache reset age=%dms, vfo=%s, freq=%g\n", __func__, cache_ms, rig_strvfo(vfo), *freq); rig->state.cache.freq = *freq; rig->state.cache.vfo_freq = vfo; @@ -1812,7 +1812,7 @@ int HAMLIB_API rig_set_vfo(RIG *rig, vfo_t vfo) } // we need to update our internal freq to avoid getting detected as twiddling - if (caps->get_freq) { retcode = rig_get_freq(rig, RIG_VFO_CURR, &curr_freq); } + if (caps->get_freq) { retcode = rig_get_freq(rig, vfo, &curr_freq); } rig->state.cache.vfo = vfo; // expire several cached items when we switch VFOs