/* Filename of the drift file. */
static char *drift_file=NULL;
+static double drift_file_age;
static void update_drift_file(double, double);
drift_file);
}
- update_drift_file(our_frequency_ppm,our_skew);
+ drift_file_age = 0.0;
}
LCL_SetAbsoluteFrequency(our_frequency_ppm);
LCL_SetLeap(0);
}
+ if (drift_file && drift_file_age > 0.0) {
+ update_drift_file(LCL_ReadAbsoluteFrequency(), our_skew);
+ }
+
Free(fb_drifts);
initialised = 0;
double abs_freq_ppm;
+ double update_interval;
+
assert(initialised);
/* Avoid getting NaNs */
1.0e6*our_skew,
our_offset);
+ UTI_DiffTimevalsToDouble(&update_interval, ref_time, &last_ref_update);
+
if (drift_file) {
- update_drift_file(abs_freq_ppm, our_skew);
+ /* Update drift file at most once per hour */
+ drift_file_age += update_interval;
+ if (drift_file_age < 0.0 || drift_file_age > 3600.0) {
+ update_drift_file(abs_freq_ppm, our_skew);
+ drift_file_age = 0.0;
+ }
}
/* Update fallback drifts */
if (fb_drifts) {
- double update_interval;
-
- UTI_DiffTimevalsToDouble(&update_interval, ref_time, &last_ref_update);
-
update_fb_drifts(abs_freq_ppm, update_interval);
- last_ref_update = *ref_time;
- last_ref_update_interval = update_interval;
}
+ last_ref_update = *ref_time;
+ last_ref_update_interval = update_interval;
+
/* And now set the freq and offset to zero */
our_frequency = 0.0;
our_offset = 0.0;