2b15cb3d09
Thanks to roberto for providing pointers to wedge this into HEAD. Approved by: roberto
60 lines
1.2 KiB
Plaintext
60 lines
1.2 KiB
Plaintext
#! @PATH_PERL@ -w
|
|
#
|
|
# drift of 104.8576 -> +1 tick. Base of 10000 ticks.
|
|
#
|
|
# 970306 HMS Deal with nanoseconds. Fix sign of adjustments.
|
|
package calc_tickadj;
|
|
use strict;
|
|
|
|
exit run(@ARGV) unless caller;
|
|
|
|
sub run {
|
|
my $opts;
|
|
if (!processOptions(\@_, $opts)) {
|
|
usage(1);
|
|
};
|
|
my $drift_file = $opts->{'drift-file'};
|
|
my $tick = $opts->{'tick'};
|
|
|
|
if (!$tick) {
|
|
my ($fl) = `tickadj`;
|
|
if (defined $fl && $fl =~ /(?:KERNEL|PRESET)?\s*tick\s+=\s+(\d+)/) {
|
|
$tick = $1;
|
|
}
|
|
else {
|
|
die "Could not get tick value, try manually with -t/--tick\n";
|
|
}
|
|
}
|
|
|
|
# Drift file is in PPM where Milion is actually 2**20
|
|
my $cvt = (2 ** 20) / $tick;
|
|
my $drift = 0.;
|
|
|
|
open my $dfh, $drift_file or die "Could not open $drift_file: $!\n";
|
|
|
|
$drift = <$dfh>;
|
|
|
|
close $dfh;
|
|
die "Invalid drift file value <$drift>" if $drift !~ /[+-]?\d+\.?[0-9]+/;
|
|
|
|
while ($drift < 0) {
|
|
$drift += $cvt;
|
|
$tick--;
|
|
}
|
|
|
|
while ($drift > $cvt) {
|
|
$drift -= $cvt;
|
|
$tick++;
|
|
}
|
|
|
|
printf "%.3f (drift)\n", $drift;
|
|
printf "%d usec; %d nsec\n", $tick, ($tick + ($drift/$cvt)) * 1000;
|
|
|
|
return 0;
|
|
}
|
|
|
|
@calc_tickadj_opts@
|
|
|
|
1;
|
|
__END__
|