refclock: slew last sample even after it was used
It may be needed by locked PPS refclocks.
This commit is contained in:
parent
a75d2db75b
commit
8c11044ee2
1 changed files with 13 additions and 2 deletions
15
refclock.c
15
refclock.c
|
@ -939,11 +939,22 @@ filter_get_sample(struct MedianFilter *filter, struct timespec *sample_time, dou
|
||||||
static void
|
static void
|
||||||
filter_slew_samples(struct MedianFilter *filter, struct timespec *when, double dfreq, double doffset)
|
filter_slew_samples(struct MedianFilter *filter, struct timespec *when, double dfreq, double doffset)
|
||||||
{
|
{
|
||||||
int i;
|
int i, first, last;
|
||||||
double delta_time;
|
double delta_time;
|
||||||
struct timespec *sample;
|
struct timespec *sample;
|
||||||
|
|
||||||
for (i = 0; i < filter->used; i++) {
|
if (filter->last < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* always slew the last sample as it may be needed by PPS refclocks */
|
||||||
|
if (filter->used > 0) {
|
||||||
|
first = 0;
|
||||||
|
last = filter->used - 1;
|
||||||
|
} else {
|
||||||
|
first = last = filter->last;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = first; i <= last; i++) {
|
||||||
sample = &filter->samples[i].sample_time;
|
sample = &filter->samples[i].sample_time;
|
||||||
UTI_AdjustTimespec(sample, when, sample, &delta_time, dfreq, doffset);
|
UTI_AdjustTimespec(sample, when, sample, &delta_time, dfreq, doffset);
|
||||||
filter->samples[i].offset -= delta_time;
|
filter->samples[i].offset -= delta_time;
|
||||||
|
|
Loading…
Reference in a new issue