int is_step_change,
void *not_used)
{
- double elapsed, delta_time;
+ double delta_time;
int i;
for (i=0; i<n_samples; i++) {
- UTI_DiffTimevalsToDouble(&elapsed, cooked, &samples[i].when);
- delta_time = elapsed * dfreq - doffset;
- UTI_AddDoubleToTimeval(&samples[i].when, delta_time, &samples[i].when);
+ UTI_AdjustTimeval(&samples[i].when, cooked, &samples[i].when, &delta_time,
+ dfreq, doffset);
samples[i].offset += delta_time;
}
return;
NCR_SlewTimes(NCR_Instance inst, struct timeval *when, double dfreq, double doffset)
{
struct timeval prev;
+ double delta;
prev = inst->local_rx;
- UTI_AdjustTimeval(&inst->local_rx, when, &inst->local_rx, dfreq, doffset);
+ UTI_AdjustTimeval(&inst->local_rx, when, &inst->local_rx, &delta, dfreq, doffset);
#ifdef TRACEON
LOG(LOGS_INFO, LOGF_NtpCore, "rx prev=[%s] new=[%s]",
UTI_TimevalToString(&prev), UTI_TimevalToString(&inst->local_rx));
#endif
prev = inst->local_tx;
- UTI_AdjustTimeval(&inst->local_tx, when, &inst->local_tx, dfreq, doffset);
+ UTI_AdjustTimeval(&inst->local_tx, when, &inst->local_tx, &delta, dfreq, doffset);
#ifdef TRACEON
LOG(LOGS_INFO, LOGF_NtpCore, "tx prev=[%s] new=[%s]",
UTI_TimevalToString(&prev), UTI_TimevalToString(&inst->local_tx));
filter_slew_samples(struct MedianFilter *filter, struct timeval *when, double dfreq, double doffset)
{
int i;
- double elapsed, delta_time, prev_offset;
+ double delta_time, prev_offset;
struct timeval *sample;
for (i = 0; i < filter->used; i++) {
sample = &filter->samples[i].sample_time;
-
- UTI_DiffTimevalsToDouble(&elapsed, when, sample);
- delta_time = elapsed * dfreq - doffset;
- UTI_AddDoubleToTimeval(sample, delta_time, sample);
-
+ UTI_AdjustTimeval(sample, when, sample, &delta_time, dfreq, doffset);
prev_offset = filter->samples[i].offset;
filter->samples[i].offset -= delta_time;
#if 0
void *anything)
{
int i;
- double elapsed;
double delta_time;
double old_seconds_fast, old_gain_rate;
for (i=0; i<n_samples; i++) {
- UTI_DiffTimevalsToDouble(&elapsed, cooked, system_times + i);
-
- delta_time = elapsed * dfreq - doffset;
-
- UTI_AddDoubleToTimeval(system_times + i, delta_time, system_times + i);
-
+ UTI_AdjustTimeval(system_times + i, cooked, system_times + i, &delta_time,
+ dfreq, doffset);
}
old_seconds_fast = coef_seconds_fast;
SST_SlewSamples(SST_Stats inst, struct timeval *when, double dfreq, double doffset)
{
int n, i;
- double elapsed;
double delta_time;
struct timeval *sample, prev;
double prev_offset, prev_freq;
for (i=0; i<n; i++) {
sample = &(inst->sample_times[i]);
prev = *sample;
-#if 0
- UTI_AdjustTimeval(sample, when, sample, dfreq, doffset);
- /* Can't easily use this because we need to slew offset */
-#endif
- UTI_DiffTimevalsToDouble(&elapsed, when, sample);
- delta_time = elapsed * dfreq - doffset;
- UTI_AddDoubleToTimeval(sample, delta_time, sample);
+ UTI_AdjustTimeval(sample, when, sample, &delta_time, dfreq, doffset);
prev_offset = inst->offsets[i];
inst->offsets[i] += delta_time;
#ifdef TRACEON
}
/* Do a half-baked update to the regression estimates */
- UTI_DiffTimevalsToDouble(&elapsed, when, &(inst->offset_time));
prev = inst->offset_time;
- delta_time = elapsed * dfreq - doffset;
- UTI_AddDoubleToTimeval(&(inst->offset_time), delta_time, &(inst->offset_time));
prev_offset = inst->estimated_offset;
prev_freq = inst->estimated_frequency;
+ UTI_AdjustTimeval(&(inst->offset_time), when, &(inst->offset_time),
+ &delta_time, dfreq, doffset);
inst->estimated_offset += delta_time;
inst->estimated_frequency -= dfreq;
/* ================================================== */
void
-UTI_AdjustTimeval(struct timeval *old_tv, struct timeval *when, struct timeval *new_tv, double dfreq, double doffset)
+UTI_AdjustTimeval(struct timeval *old_tv, struct timeval *when, struct timeval *new_tv, double *delta_time, double dfreq, double doffset)
{
- double elapsed, delta_time;
+ double elapsed;
UTI_DiffTimevalsToDouble(&elapsed, when, old_tv);
- delta_time = elapsed * dfreq - doffset;
- UTI_AddDoubleToTimeval(old_tv, delta_time, new_tv);
+ *delta_time = elapsed * dfreq - doffset;
+ UTI_AddDoubleToTimeval(old_tv, *delta_time, new_tv);
}
/* ================================================== */
extern char *UTI_TimeToLogForm(time_t t);
/* Adjust time following a frequency/offset change */
-extern void UTI_AdjustTimeval(struct timeval *old_tv, struct timeval *when, struct timeval *new_tv, double dfreq, double doffset);
+extern void UTI_AdjustTimeval(struct timeval *old_tv, struct timeval *when, struct timeval *new_tv, double *delta, double dfreq, double doffset);
extern void UTI_TimevalToInt64(struct timeval *src, NTP_int64 *dest);