linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

  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).