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_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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
44
src/misc.c
44
src/misc.c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
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)
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Ładowanie…
Reference in New Issue