All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.