kopia lustrzana https://github.com/Hamlib/Hamlib
Fix caching math...helps when you get the units right...nanoseconds...not microseconds
https://github.com/Hamlib/Hamlib/issues/228pull/236/head
rodzic
baa3787bc5
commit
b244fe234c
16
src/misc.c
16
src/misc.c
|
@ -1267,7 +1267,10 @@ int HAMLIB_API elapsed_ms(struct timespec *start, int option)
|
||||||
switch (option)
|
switch (option)
|
||||||
{
|
{
|
||||||
case ELAPSED_GET:
|
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);
|
clock_gettime(CLOCK_REALTIME, &stop);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1275,16 +1278,17 @@ int HAMLIB_API elapsed_ms(struct timespec *start, int option)
|
||||||
clock_gettime(CLOCK_REALTIME, start);
|
clock_gettime(CLOCK_REALTIME, start);
|
||||||
rig_debug(RIG_DEBUG_TRACE, "%s: after gettime, start = %ld,%ld\n", __func__,
|
rig_debug(RIG_DEBUG_TRACE, "%s: after gettime, start = %ld,%ld\n", __func__,
|
||||||
(long)start->tv_sec, (long)start->tv_nsec);
|
(long)start->tv_sec, (long)start->tv_nsec);
|
||||||
|
return 999 * 1000; // so we can tell the difference in debug where we came from
|
||||||
break;
|
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;
|
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 -
|
rig_debug(RIG_DEBUG_TRACE, "%s: elapsed_secs=%g\n", __func__, elapsed_msec);
|
||||||
start->tv_nsec) / 1e6)) / 1e3;
|
|
||||||
|
|
||||||
rig_debug(RIG_DEBUG_TRACE, "%s: elapse_secs=%g\n", __func__, elapsed_msec);
|
|
||||||
|
|
||||||
if (elapsed_msec < 0 || option == ELAPSED_INVALIDATE) { return 1000000; }
|
if (elapsed_msec < 0 || option == ELAPSED_INVALIDATE) { return 1000000; }
|
||||||
|
|
||||||
|
|
|
@ -1345,7 +1345,7 @@ int HAMLIB_API rig_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
|
||||||
}
|
}
|
||||||
else
|
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;
|
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);
|
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);
|
__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;
|
||||||
|
@ -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
|
// 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;
|
rig->state.cache.vfo = vfo;
|
||||||
// expire several cached items when we switch VFOs
|
// expire several cached items when we switch VFOs
|
||||||
|
|
Ładowanie…
Reference in New Issue