Reuse REF_SetReference code with manual reference

This commit is contained in:
Miroslav Lichvar 2013-06-14 18:57:30 +02:00
parent e0171f6e96
commit 6d7605a3d0

View file

@ -722,7 +722,7 @@ REF_SetReference(int stratum,
if (!is_offset_ok(offset)) if (!is_offset_ok(offset))
return; return;
are_we_synchronised = 1; are_we_synchronised = leap != LEAP_Unsynchronised ? 1 : 0;
our_stratum = stratum + 1; our_stratum = stratum + 1;
our_ref_id = ref_id; our_ref_id = ref_id;
if (ref_ip) if (ref_ip)
@ -760,9 +760,9 @@ REF_SetReference(int stratum,
correction_rate = correction_time_ratio * 0.5 * offset_sd * update_interval; correction_rate = correction_time_ratio * 0.5 * offset_sd * update_interval;
/* Eliminate updates that are based on totally unreliable frequency /* Eliminate updates that are based on totally unreliable frequency
information */ information. Ignore this limit with manual reference. */
if (fabs(skew) < max_update_skew) { if (fabs(skew) < max_update_skew || leap == LEAP_Unsynchronised) {
previous_skew = our_skew; previous_skew = our_skew;
new_skew = skew; new_skew = skew;
@ -774,9 +774,10 @@ REF_SetReference(int stratum,
the local module. */ the local module. */
new_freq = frequency; new_freq = frequency;
/* Set new frequency based on weighted average of old and new skew. */ /* Set new frequency based on weighted average of old and new skew. With
manual reference the old frequency has no weight. */
old_weight = 1.0 / Sqr(previous_skew); old_weight = leap != LEAP_Unsynchronised ? 1.0 / Sqr(previous_skew) : 0.0;
new_weight = 3.0 / Sqr(new_skew); new_weight = 3.0 / Sqr(new_skew);
sum_weight = old_weight + new_weight; sum_weight = old_weight + new_weight;
@ -843,10 +844,6 @@ REF_SetReference(int stratum,
avg2_moving = 1; avg2_moving = 1;
avg2_offset = our_offset * our_offset; avg2_offset = our_offset * our_offset;
} }
/* And now set the freq and offset to zero */
our_frequency = 0.0;
our_offset = 0.0;
} }
/* ================================================== */ /* ================================================== */
@ -860,36 +857,15 @@ REF_SetManualReference
double skew double skew
) )
{ {
double abs_freq_ppm; IPAddr local_ip;
UTI_StringToIP("127.127.1.1", &local_ip);
/* We are not synchronised to an external source, as such. This is /* We are not synchronised to an external source, as such. This is
only supposed to be used with the local source option, really only supposed to be used with the local source option, really
... */ ... */
are_we_synchronised = 0; REF_SetReference(0, LEAP_Unsynchronised, LOCAL_REFERENCE_ID, &local_ip,
ref_time, offset, 0.0, frequency, skew, 0.0, 0.0);
if (skew < MIN_SKEW)
skew = MIN_SKEW;
our_skew = skew;
our_residual_freq = 0.0;
maybe_log_offset(offset);
LCL_AccumulateFrequencyAndOffset(frequency, offset, 0.0);
maybe_make_step();
abs_freq_ppm = LCL_ReadAbsoluteFrequency();
write_log(ref_time,
"127.127.1.1",
our_stratum,
our_leap_status,
abs_freq_ppm,
1.0e6*our_skew,
offset);
if (drift_file) {
update_drift_file(abs_freq_ppm, our_skew);
}
} }
/* ================================================== */ /* ================================================== */