gpsd-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gpsd-users] ppsthread.c broken for FreeBSD gpio


From: Tony Hain
Subject: [gpsd-users] ppsthread.c broken for FreeBSD gpio
Date: Fri, 10 Mar 2017 11:51:52 -0800

The "non-linux" code in ppsthread.c is designed to fail in the case of gpio on 
FreeBSD. The discussion below was on the ntpsec list, but fixing gpsd clearly 
belongs here. 

> -----Original Message-----
> From: bugs [mailto:address@hidden On Behalf Of Gary E. Miller
> Sent: Friday, March 10, 2017 9:53 AM
> To: address@hidden
> Subject: Re: nmea refclock not locking to the pps
...
> On Thu, 9 Mar 2017 22:33:36 -0800
> "Tony Hain" <address@hidden> wrote:
> 
> > Following up with a patch :::
> >
> > ...
> >
> > I patched ppsthread.c, and I am sure this is not the correct way to do
> > this since I have not been able to follow the overall structure, but
> > it does appear to have opened the api.
> >
> > ppsthread.c -
> > ...
> > #else /* not __linux__ */
> >     /*
> >      * On BSDs that support RFC2783, one uses the API calls on serial
> >      * port file descriptor.
> >      *
> >      * FIXME! need more specific than 'not linux'
> >      */
> > // inserting if test for /dev/pps name
> >     if (strncmp(pps_thread->devicename, "/dev/pps", 8) == 0) {
> >         ret = open(pps_thread->devicename, O_RDWR);
> >     } else {       // existing
> >
> >     (void)strlcpy(path, pps_thread->devicename, sizeof(path));
> >     // cppcheck-suppress redundantAssignment
> >     ret  = pps_thread->devicefd;
> >
> >     }
> > //
> > #endif
> > // inserting error check for non-linux (makes test in linux block
> > redundant) if ( 0 > ret ) {
> >         char errbuf[BUFSIZ] = "unknown error";
> >         (void)strerror_r(errno, errbuf, sizeof(errbuf));
> >         pps_thread->log_hook(pps_thread, THREAD_INF,
> >                 "KPPS:%s running as %d/%d, cannot open %s: %s\n",
> >                 pps_thread->devicename,
> >                 getuid(), geteuid(),
> >                 path, errbuf);
> >         return -1;
> >     } else {        // existing
> >
> >     /* assert(ret >= 0); */
> >     pps_thread->log_hook(pps_thread, THREAD_INF,
> >                 "KPPS:%s RFC2783 path:%s, fd is %d\n",
> >                 pps_thread->devicename, path,
> >                 ret);
> >
> >     }
> > //
> >     /* RFC 2783 implies the time_pps_setcap() needs priviledges * ...
> >
> > # grep KPPS /var/log/messages
> > Mar  9 20:53:59 tic gpsd[67512]: gpsd:INFO: KPPS:/dev/pps1 RFC2783
> > path:, fd is 7 
> > Mar  9 20:53:59 tic gpsd[67512]: gpsd:INFO: KPPS:/dev/pps1 pps_caps
> > 0x1111 Mar  9 20:53:59 tic gpsd[67512]:
> > gpsd:INFO: KPPS:/dev/pps1 have PPS_CANWAIT
> >  Mar  9 20:53:59 tic gpsd[67512]: gpsd:WARN: KPPS:/dev/pps1
> > missing PPS_CAPTURECLEAR, pulse may be offset
> > Mar  9 20:53:59 tic gpsd[67512]: gpsd:INFO: KPPS:/dev/pps1 kernel
> > PPS will be used 
> > Mar  9 20:53:59 tic gpsd[67512]: gpsd:PROG: KPPS:/dev/pps1 
> > gps_fd:-2 not a tty, can not use TIOMCIWAIT 
> > Mar 10 04:54:00 tic gpsd[67512]: gpsd:PROG: KPPS:/dev/pps1 assert  
> > 1489121640.028303412, sequence: 693997,clear   0.000000000, 
> > sequence: 0 - using: assert 
> > Mar 10 04:54:00 tic gpsd[67512]: gpsd:PROG: KPPS:/dev/pps1 
> > Assert cycle: 1489121640028303, duration:       0 @  1489121640.028303412 
> > Mar 10 04:54:01 tic gpsd[67512]: gpsd:PROG: KPPS:/dev/pps1 assert
> > 1489121641.027803327, sequence: 693998, clear   0.000000000,
> > sequence: 0 - using: assert 
> > Mar 10 04:54:01 tic gpsd[67512]:gpsd:PROG: KPPS:/dev/pps1 
> > Assert cycle:  999499, duration:       0 @ 1489121641.027803327
> >
> >
> > I am getting log events above that the api is open,  and ntpshmmon
> > shows the pps events now, but the ntpsec.conf refclock line is not
> > recognizing the shm pps device.
> >
> > # ntpshmmon
> > ntpshmmon version 1
> > #      Name Seen@                Clock
> > Real                 L Prec 
> > sample NTP0 1489124430.611470658 1489124430.412209171
> > 1489124430.000000000 0 -20 
> > sample NTP2 1489124430.611553695 1489124428.000033371 
> > 1489124428.000000000 0 -30
> > sample NTP0 1489124431.412239685 1489124431.411282520
> > 1489124431.000000000 0 -20 
> > sample NTP2 1489124432.001544155 1489124432.000033265 
> > 1489124432.000000000 0 -30 
> > sample NTP0 1489124432.415040281 1489124432.413955830 
> > 1489124432.000000000 0 -20
> > sample NTP2 1489124433.002155059 1489124433.000033281
> > 1489124433.000000000 0 -30 
> > sample NTP0 1489124433.411896022 1489124433.411793694
> > 1489124433.000000000 0 -20 
> > sample NTP2 1489124434.002308776 1489124434.000033212 
> > 1489124434.000000000 0 -30
> > 
> > # ntpmon
> >   remote  refid   st t when poll reach   delay offset   jitter
> > xSHM(0)  .GPS.  0  l  2  64  377  0.0000  33.9512  2.4540 
> >   SHM(1)  .PPS.  0  l  -   4    0  0.0000  0.0000  0.0000
> > *2001:470:e930:2 .PPS.  1  u   33  64 377 0.9863  -0.3318 0.1757
> > +express.tndh.ne .GPS.  1  u  39  64 377 1.2442 -0.2851 1.6407
> > +trail.tndh.net  .GPS.  1 u  36   64  377 1.1138 -0.2766 0.1899
> > ntpd ntpsec-0.9.6+536 2017-02-22T20:26:50Z
> >   Last update: 2017-03-09T21:13:30
> >
> > # grep ^refclock /etc/ntp.conf
> > refclock shm unit 0 refid GPS time1 0.4429166667 refclock shm unit 1
> > refid PPS prefer minpoll 2 maxpoll 2 time1 0.000000337160
---

Tony




reply via email to

[Prev in Thread] Current Thread [Next in Thread]