phc2sys: add option to set slave-master time offset.
Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>master
parent
a373805b6d
commit
1a83619b17
|
@ -24,6 +24,8 @@ phc2sys \- synchronize two clocks
|
||||||
.BI \-R " update-rate"
|
.BI \-R " update-rate"
|
||||||
] [
|
] [
|
||||||
.BI \-N " clock-readings"
|
.BI \-N " clock-readings"
|
||||||
|
] [
|
||||||
|
.BI \-O " offset"
|
||||||
]
|
]
|
||||||
|
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
|
@ -84,6 +86,10 @@ the fastest reading is used to update the slave clock, this is useful to
|
||||||
minimize the error caused by random delays in scheduling and bus utilization.
|
minimize the error caused by random delays in scheduling and bus utilization.
|
||||||
The default is 5.
|
The default is 5.
|
||||||
.TP
|
.TP
|
||||||
|
.BI \-O " offset"
|
||||||
|
Specify the offset between the slave and master times in seconds.
|
||||||
|
The default is 0 seconds.
|
||||||
|
.TP
|
||||||
.BI \-h
|
.BI \-h
|
||||||
Display a help message.
|
Display a help message.
|
||||||
|
|
||||||
|
|
10
phc2sys.c
10
phc2sys.c
|
@ -241,6 +241,7 @@ static void usage(char *progname)
|
||||||
" -I [ki] integration constant (0.3)\n"
|
" -I [ki] integration constant (0.3)\n"
|
||||||
" -R [rate] slave clock update rate in HZ (1)\n"
|
" -R [rate] slave clock update rate in HZ (1)\n"
|
||||||
" -N [num] number of master clock readings per update (5)\n"
|
" -N [num] number of master clock readings per update (5)\n"
|
||||||
|
" -O [offset] slave-master time offset (0)\n"
|
||||||
" -h prints this message and exits\n"
|
" -h prints this message and exits\n"
|
||||||
"\n",
|
"\n",
|
||||||
progname);
|
progname);
|
||||||
|
@ -253,12 +254,12 @@ int main(int argc, char *argv[])
|
||||||
clockid_t src = CLOCK_INVALID, dst = CLOCK_REALTIME;
|
clockid_t src = CLOCK_INVALID, dst = CLOCK_REALTIME;
|
||||||
uint64_t phc_ts;
|
uint64_t phc_ts;
|
||||||
int64_t phc_offset;
|
int64_t phc_offset;
|
||||||
int c, phc_readings = 5, phc_rate = 1;
|
int c, phc_readings = 5, phc_rate = 1, sync_offset = 0;
|
||||||
|
|
||||||
/* Process the command line arguments. */
|
/* Process the command line arguments. */
|
||||||
progname = strrchr(argv[0], '/');
|
progname = strrchr(argv[0], '/');
|
||||||
progname = progname ? 1+progname : argv[0];
|
progname = progname ? 1+progname : argv[0];
|
||||||
while (EOF != (c = getopt(argc, argv, "c:d:hs:P:I:R:N:i:"))) {
|
while (EOF != (c = getopt(argc, argv, "c:d:hs:P:I:R:N:O:i:"))) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'c':
|
case 'c':
|
||||||
dst = clock_open(optarg);
|
dst = clock_open(optarg);
|
||||||
|
@ -281,6 +282,9 @@ int main(int argc, char *argv[])
|
||||||
case 'N':
|
case 'N':
|
||||||
phc_readings = atoi(optarg);
|
phc_readings = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
case 'O':
|
||||||
|
sync_offset = atoi(optarg);
|
||||||
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
ethdev = optarg;
|
ethdev = optarg;
|
||||||
break;
|
break;
|
||||||
|
@ -311,6 +315,7 @@ int main(int argc, char *argv[])
|
||||||
struct timespec now;
|
struct timespec now;
|
||||||
if (clock_gettime(src, &now))
|
if (clock_gettime(src, &now))
|
||||||
perror("clock_gettime");
|
perror("clock_gettime");
|
||||||
|
now.tv_sec += sync_offset;
|
||||||
if (clock_settime(dst, &now))
|
if (clock_settime(dst, &now))
|
||||||
perror("clock_settime");
|
perror("clock_settime");
|
||||||
}
|
}
|
||||||
|
@ -323,6 +328,7 @@ int main(int argc, char *argv[])
|
||||||
if (!read_phc(src, dst, phc_readings, &phc_offset, &phc_ts)) {
|
if (!read_phc(src, dst, phc_readings, &phc_offset, &phc_ts)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
phc_offset -= sync_offset * NS_PER_SEC;
|
||||||
do_servo(&servo, dst, phc_offset, phc_ts, kp, ki);
|
do_servo(&servo, dst, phc_offset, phc_ts, kp, ki);
|
||||||
show_servo(stdout, "phc", phc_offset, phc_ts);
|
show_servo(stdout, "phc", phc_offset, phc_ts);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue