kopia lustrzana https://github.com/Hamlib/Hamlib
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/231pull/236/head
rodzic
54fd75ffe8
commit
baa3787bc5
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
44
src/misc.c
44
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;
|
||||
}
|
||||
|
|
13
src/rig.c
13
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;
|
||||
}
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue