From: Rodolfo Giometti <giometti@enneenne.com>
To: Lennart Sorensen <lsorense@csclub.uwaterloo.ca>
Cc: linux-kernel@vger.kernel.org, linuxpps@ml.enneenne.com,
Russell King <rmk+lkml@arm.linux.org.uk>,
Jan Dittmer <jdi@l4x.org>, Pavel Machek <pavel@ucw.cz>
Subject: Re: [PATCH 1/1] LinuxPPS: Pulse per Second support for Linux
Date: Wed, 14 Mar 2007 10:31:46 +0100 [thread overview]
Message-ID: <20070314093146.GE24556@enneenne.com> (raw)
In-Reply-To: <20070313224817.GF22466@csclub.uwaterloo.ca>
On Tue, Mar 13, 2007 at 06:48:17PM -0400, Lennart Sorensen wrote:
>
> I have tried out 3.0.0-rc2 which seems to work pretty well so far (when
Thanks. I just posted to the linux kernel ML the last release
3.0.0. Maybe you can do a "git pull" and try it out. :)
> combined with the patches to the jsm driver I just posted). It took soe
> work to get ntp's refclock_nmea to work though, since the patch that is
> linked to from the linuxpps page seems out of date. Here is the patch
> that seems to be working for me, although I am still testing it. Given
> you know the linuxpps code better perhaps you can see if it looks sane
> to you.
>
> --- ntpd/refclock_nmea.c.ori 2007-03-13 18:38:01.000000000 -0400
> +++ ntpd/refclock_nmea.c 2007-03-13 18:44:47.000000000 -0400
> @@ -79,6 +79,7 @@
> #define RANGEGATE 500000 /* range gate (ns) */
>
> #define LENNMEA 75 /* min timecode length */
> +#define LENPPS PPS_MAX_NAME_LEN
>
> /*
> * Tables to compute the ddd of year form icky dd/mm timecode. Viva la
> @@ -99,6 +100,7 @@
> pps_params_t pps_params; /* pps parameters */
> pps_info_t pps_info; /* last pps data */
> pps_handle_t handle; /* pps handlebars */
> + int handle_created; /* pps handle created flag */
> #endif /* HAVE_PPSAPI */
> };
>
> @@ -147,6 +149,11 @@
> register struct nmeaunit *up;
> struct refclockproc *pp;
> int fd;
> +#ifdef PPS_HAVE_FINDPATH
> + char id[LENPPS] = "",
> + path[LENPPS],
> + mylink[LENPPS] = ""; /* just a default device */
> +#endif /* PPS_HAVE_FINDPATH */
> char device[20];
>
> /*
> @@ -201,7 +208,20 @@
> #else
> return (0);
> #endif
> - }
> + } else {
> + struct serial_struct ss;
> + if (ioctl(fd, TIOCGSERIAL, &ss) < 0 ||
> + (
> + ss.flags |= ASYNC_HARDPPS_CD,
> + ioctl(fd, TIOCSSERIAL, &ss)) < 0) {
> + msyslog(LOG_NOTICE, "refclock_nmea: TIOCSSERIAL fd %d, %m", fd);
> + msyslog(LOG_NOTICE,
> + "refclock_nmea: optional PPS processing not available");
> + } else {
> + msyslog(LOG_INFO,
> + "refclock_nmea: PPS detection on");
> + }
> + }
You should use "setserial" here. Keep in mind that the PPS source
could be _not_ connected with the serial line at all.
> /*
> * Allocate and initialize unit structure
> @@ -238,12 +258,26 @@
> * Start the PPSAPI interface if it is there. Default to use
> * the assert edge and do not enable the kernel hardpps.
> */
> +#ifdef PPS_HAVE_FINDPATH
> + /* Get the PPS source's real name */
> + //time_pps_readlink(mylink, LENPPS, path, LENPPS);
Remove unneeded code.
> + time_pps_readlink(device, LENPPS, path, LENPPS);
Test the return value (see the wiki at
http://wiki.enneenne.com/index.php/LinuxPPS_support#How_to_modify_a_refclock_to_work_with_LinuxPPS).
> + /* Try to find the source */
> + fd = time_pps_findpath(path, LENPPS, id, LENPPS);
> + if (fd < 0) {
> + msyslog(LOG_ERR, "refclock_nmea: cannot find PPS path \"%s\" in the system", path);
> + return (0);
> + }
> + msyslog(LOG_INFO, "refclock_nmea: found PPS source \"%s\" at id #%d on \"%s\"", path, fd, id);
> +#endif /* PPS_HAVE_FINDPATH */
> if (time_pps_create(fd, &up->handle) < 0) {
> - up->handle = 0;
> + up->handle_created = 0;
> msyslog(LOG_ERR,
> "refclock_nmea: time_pps_create failed: %m");
> return (1);
> }
> + up->handle_created = ~0;
> return(nmea_ppsapi(peer, 0, 0));
> #else
> return (1);
> @@ -265,8 +299,10 @@
> pp = peer->procptr;
> up = (struct nmeaunit *)pp->unitptr;
> #ifdef HAVE_PPSAPI
> - if (up->handle != 0)
> + if (up->handle_created) {
> time_pps_destroy(up->handle);
> + up->handle_created = 0;
> + }
> #endif /* HAVE_PPSAPI */
> io_closeclock(&pp->io);
> free(up);
> @@ -374,7 +410,7 @@
> /*
> * Convert the timespec nanoseconds field to ntp l_fp units.
> */
> - if (up->handle == 0)
> + if (!up->handle_created)
> return (0);
> timeout.tv_sec = 0;
> timeout.tv_nsec = 0;
Please, rewiev and test the code and I'll publish it.
Ciao,
Rodolfo
--
GNU/Linux Solutions e-mail: giometti@enneenne.com
Linux Device Driver giometti@gnudd.com
Embedded Systems giometti@linux.it
UNIX programming phone: +39 349 2432127
next prev parent reply other threads:[~2007-03-14 9:31 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-02-16 18:52 [PATCH 1/1] LinuxPPS: Pulse per Second support for Linux Rodolfo Giometti
2007-02-16 19:12 ` Russell King
2007-02-16 20:43 ` Rodolfo Giometti
2007-02-16 20:51 ` Russell King
2007-02-16 21:03 ` Rodolfo Giometti
2007-02-16 19:56 ` Jan Dittmer
2007-02-16 20:57 ` Rodolfo Giometti
2007-02-16 21:19 ` Jan Dittmer
2007-02-18 22:43 ` LinuxPPS: fixes Rodolfo Giometti
2007-02-20 2:56 ` [PATCH 1/1] LinuxPPS: Pulse per Second support for Linux H. Peter Anvin
2007-02-21 12:04 ` Rodolfo Giometti
2007-02-21 16:14 ` H. Peter Anvin
2007-02-22 8:51 ` Rodolfo Giometti
2007-02-21 23:51 ` Roman Zippel
2007-02-22 9:00 ` Rodolfo Giometti
2007-02-21 10:16 ` Pavel Machek
2007-02-22 9:59 ` Rodolfo Giometti
2007-03-13 21:38 ` Rodolfo Giometti
2007-03-13 22:48 ` Lennart Sorensen
2007-03-14 9:31 ` Rodolfo Giometti [this message]
2007-03-14 13:19 ` Lennart Sorensen
2007-03-14 14:06 ` Rodolfo Giometti
2007-03-14 14:12 ` Lennart Sorensen
2007-03-14 14:27 ` Rodolfo Giometti
2007-03-14 14:42 ` Lennart Sorensen
2007-03-14 14:52 ` Rodolfo Giometti
2007-03-14 15:37 ` Lennart Sorensen
2007-03-14 15:47 ` Rodolfo Giometti
2007-03-14 20:57 ` Lennart Sorensen
2007-03-15 10:29 ` Rodolfo Giometti
2007-03-15 15:18 ` Lennart Sorensen
2007-03-15 15:37 ` Rodolfo Giometti
-- strict thread matches above, loose matches on Subject: below --
2007-03-21 7:41 Rodolfo Giometti
2007-03-21 8:05 ` Jon K Hellan
2007-03-21 8:08 ` Rodolfo Giometti
2007-03-21 15:34 ` Lennart Sorensen
2007-05-02 19:33 ` Rodolfo Giometti
2007-05-02 21:06 ` john stultz
2007-05-03 10:03 ` Rodolfo Giometti
2007-05-10 7:27 ` Andrew Morton
2007-05-10 9:48 ` Andrew Morton
2007-05-10 10:58 ` Rodolfo Giometti
2007-05-10 11:01 ` David Miller
2007-05-10 11:45 ` Rodolfo Giometti
2007-05-10 11:51 ` David Miller
2007-05-10 11:54 ` David Miller
2007-05-12 5:59 ` Rodolfo Giometti
2007-05-12 6:17 ` Andrew Morton
2007-05-12 7:08 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070314093146.GE24556@enneenne.com \
--to=giometti@enneenne.com \
--cc=jdi@l4x.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxpps@ml.enneenne.com \
--cc=lsorense@csclub.uwaterloo.ca \
--cc=pavel@ucw.cz \
--cc=rmk+lkml@arm.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).