From owner-FreeBSD-users-jp@jp.FreeBSD.org Sun Jun 23 22:27:21 2002
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) id g5NDRL058442;
	Sun, 23 Jun 2002 22:27:21 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from serio.al.rim.or.jp (serio.al.rim.or.jp [202.247.191.123])
	by castle.jp.FreeBSD.org (8.11.6+3.4W/8.11.3) with ESMTP/inet id g5NDRLN58437
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Sun, 23 Jun 2002 22:27:21 +0900 (JST)
	(envelope-from yoshiaki@kt.rim.or.jp)
Received: from mail2.rim.or.jp
	by serio.al.rim.or.jp (3.7W/HMX-13) id WAA00498
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Sun, 23 Jun 2002 22:27:20 +0900 (JST)
Received: from yoshiaki_kt.rim.or.jp (yoshiaki.st.rim.or.jp [202.247.140.34]) by mail2.rim.or.jp (8.9.3/3.7W)
	id WAA07243 for <FreeBSD-users-jp@jp.FreeBSD.org>; Sun, 23 Jun 2002 22:28:11 +0900 (JST)
Received: from localhost (localhost [127.0.0.1])
	by yoshiaki_kt.rim.or.jp (8.12.4/8.12.2) with ESMTP id g5NDR9kJ000745
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Sun, 23 Jun 2002 22:27:09 +0900 (JST)
	(envelope-from yoshiaki@kt.rim.or.jp)
Date: Sun, 23 Jun 2002 22:27:09 +0900 (JST)
Message-Id: <20020623.222709.74751785.yoshiaki@kt.rim.or.jp>
To: FreeBSD-users-jp@jp.FreeBSD.org
From: Yoshiaki Uchikawa <yoshiaki@kt.rim.or.jp>
In-Reply-To: <200206230921.g5N9LN2j029269@smtp3.dti.ne.jp>
References: <20020622134423O.matusita@jp.FreeBSD.org>
	<ybsptyj5q16.wl@ett.sat.t.u-tokyo.ac.jp>
	<200206230921.g5N9LN2j029269@smtp3.dti.ne.jp>
X-Mailer: Mew version 2.2 on Emacs 20.7 / Mule 4.0 (HANANOEN)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Reply-To: FreeBSD-users-jp@jp.FreeBSD.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+020611
X-Sequence: FreeBSD-users-jp 69516
Subject: [FreeBSD-users-jp 69516] Re: FreeBSD
 =?ISO-2022-JP?B?GyRCJEhCPiROGyhC?= OS
 =?ISO-2022-JP?B?GyRCJEgkTkhmM1MbKEI=?= 
Errors-To: owner-FreeBSD-users-jp@jp.FreeBSD.org
Sender: owner-FreeBSD-users-jp@jp.FreeBSD.org
X-Originator: yoshiaki@kt.rim.or.jp

$BFb@n$G$9(B

>>>>> From: Toshiaki Nozawa <t-nozawa@pluto.dti.ne.jp>
>>>>> Date: Sun, 23 Jun 2002 18:19:24 +0900

 >  $B$5$i$K<+?H$r$b$C$F!"(BFreeBSD$B$r?d>)$9$k$3$H$,$G$-$^$9!#(B
 > #ntp$B$J$N$G!"(BFreeBSD$B$H$O4X78$J$$$+$bCN$l$^$;$s$,!"$=$3$iJU$O%J%$%7%g$K$7$F$*$3$&!#(B ;-)
 > 
 >  $B$H$3$m$G!"0JA0$+$i5?Ld$K;W$C$F$$$?$N$G$9$,!"(BPC$B$K(BGPS$B%l%7!<%P$+$i$N;~9o>pJs$r<h$j9~$`$?$a$K$O!"(Bkernel option 
 > $B$N(BPPS_SYNC$B$@$1$G$O%@%a$G!"(Bntpd$B$rF0$+$5$J$$$H;~9o$OF14|$7$J$$$N$G$7$g$&$+!)(B
 >  PPS_SYNC$B$@$1$@$H!"IC$N99?7%?%$%_%s%0$@$1$,F14|$7$F!"%7%j%"%k$GN.$l$F$/$k(BNMEA$BJ8;zNs$r$H$j$3$^$:$K!"(BPC$BFbIt;~7W$N;~9o$,$=$N$^$^$H$J$k$N$G$7$g$&(B
 > $B$+!)(B

$B$=$&$O$J$i$J$$$H;W$$$^$9!#$?$@MW5a$9$k%l%Y%k$K$b$h$j$^$9$,!"FC$K9b@:EY(B
$B$rMW5a$7$J$$$N$G$"$l$P(Bntp$B$r;H$o$:$K(BPPS API$B$r;H$C$F;~9o$r$"$kDxEYF14|$5(B
$B$;$k%W%m%0%i%`$r:n$k$3$H$O$=$l$[$IFq$7$/$J$$$G$7$g$&!#(B

PPS API$B$N;EMM$H$7$F$O(BIETF$B$N%I%i%U%H$G(Bdraft-mogul-pps-api-05.txt$B$H$$$&(B
$BJ8=q$,$"$j$^$9$,$3$3$K<($5$l$F$$$k%5%s%W%k%3!<%I$+$i$N%W%m%0%i%`$J$N$G(B
$B$9$,!"2<5-$N%W%m%0%i%`$r(B1PPS$B$rF~NO$7$?>uBV$GF0$+$7$F$_$F$/$@$5$$!#(B

=========
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <termios.h>
#include <time.h>
#include <sys/timepps.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
#include <string.h>

#include <sys/time.h>


/* #define PPSDEV	"/dev/gps1"*/
#define PPSDEV	"/dev/cuaa0"
#define DEVNAME_LEN (32)
#define RDBUF_LEN   (1024)

int init_serial(int fd)
{
    int  baud;
    struct termios term;

    /* get default term setting  */
    if (tcgetattr(fd, &term) < 0){
        fprintf(stderr, "tcgetattr Error.\n");
        close(fd);
        return -1;
    }
    baud = B4800;
    cfsetspeed(&term,baud);

    term.c_lflag &= ~(ECHO | IEXTEN | ISIG);
    term.c_lflag |= ICANON; 
    /* term.c_lflag &= ~(ICANON);*/
    term.c_cflag |= CS8|CLOCAL|CREAD|CRTS_IFLOW|CCTS_OFLOW;
    term.c_iflag &= ~(BRKINT |  ICRNL | INPCK | IXON |IXOFF);
    term.c_iflag |= IGNBRK|IGNPAR;
    term.c_oflag &= ~(OPOST);
    term.c_cc[VMIN] = 1;
    term.c_cc[VTIME] = 0;

    if ( tcsetattr(fd,TCSANOW, &term)  < 0){
        fprintf(stderr,"SIO set error.\n");
    }

    baud = cfgetispeed(&term);
    return fd;
}

int main()
{
    int fd,ret;
    pps_handle_t handle;
    pps_params_t params;
    pps_info_t infobuf;
    int avail_mode;
    long difftime;
    char rdbuf[RDBUF_LEN];
    struct timespec timeout,systime;

    /* Open a file descriptor */
    if ((fd = open(PPSDEV, O_RDWR, 0)) < 0){
	fprintf(stderr,"can't open /dev/gps1.\n");
        return -1;
    }
    time_pps_create(fd, &handle);

    /*
     * Find out what features are supported
     */
    time_pps_getcap(handle, &avail_mode);
    fprintf(stderr, "available PPS mode = %X\n", avail_mode);

    if ((avail_mode & PPS_CAPTUREASSERT) == 0) {
	fprintf(stderr, "%s cannot CAPTUREASSERT\n", PPSDEV);
	exit(1);
    }
    if ((avail_mode & PPS_OFFSETASSERT) == 0) {
	fprintf(stderr, "%s cannot OFFSETASSERT\n", PPSDEV);
	exit(1);
    }

    /*
     * Capture assert timestamps, and
     *   compensate for a 675 nsec propagation delay
     */

    time_pps_getparams(handle, &params);
    params.assert_offset.tv_sec = 0;
    params.assert_offset.tv_nsec = 675;
    params.mode |= PPS_CAPTUREASSERT | PPS_OFFSETASSERT;
    time_pps_setparams(handle, &params);

    /* create a zero-valued timeout */
    timeout.tv_sec = 0;
    timeout.tv_nsec = 0;
    systime.tv_sec = 0;
    systime.tv_nsec = 0;
    /* serial init */
    if (init_serial(fd) < 0){
	fprintf(stderr,"Can't init serial.\n");
        exit(-1) ;
    }

    /* loop, printing the most recent timestamp every second or so */
    while (1) {
	if (avail_mode & PPS_CANWAIT) {
	    time_pps_fetch(handle, PPS_TSFMT_TSPEC, &infobuf, NULL);
	    /* waits for the next event */
	} else {
	    sleep(1);
/*
	    ret = read(fd, rdbuf, RDBUF_LEN);
	    if (ret == RDBUF_LEN){
		strncpy(tmp_buf, rdbuf, RDBUF_LEN);
		tmp_buf[RDBUF_LEN] = '\0';
		printf("%s", tmp_buf);
	    } else {
		rdbuf[ret] = '\0';
		printf("%s", rdbuf);
	    }
*/
	    time_pps_fetch(handle, PPS_TSFMT_TSPEC, &infobuf,
			   &timeout);
	}
	clock_gettime(CLOCK_REALTIME, &systime);
	difftime = (systime.tv_sec - infobuf.assert_timestamp.tv_sec)*1000000000+systime.tv_nsec - infobuf.assert_timestamp.tv_nsec;
	printf("%d.%09ld\t%f\n",
	       infobuf.assert_timestamp.tv_sec,
	       infobuf.assert_timestamp.tv_nsec,
	       difftime/1e9);
	fflush(stdout);
    }

}    

=========
PPS API$B$N;HMQNc$G$9!#(BFreeBSD$B$G$O(Btime_pps_fetch()$B$G(B1PPS$B$NF~NO$rBT$D(B
$B$3$H$,$G$-$k$h$&$J<BAu$K$J$C$F$$$^$;$s$N$G(Btime_pps_fetch()$B$G:G?7$N(B
1PPS$B?.9f$NF~$C$?;~9o$r<h$j=P$7$^$9!#(B
sleep(1)$B$GLs(B1$BIC$4$H$K(Bsystemtime$B$r<h$j=P$7$F(B1PPS$B?.9f$,F~NO$5$l$?(B
$B;~9o$HHf3S$9$k$H$$$&$N$,>e5-$N%W%m%0%i%`$NF0:n$K$J$j$^$9!#(B

$B$?$H$($P=PNO$O$3$&$$$&$h$&$J$b$N$,F@$i$l$^$9!#(B

1024837235.742299110    0.292566
1024837236.743845303    0.301001
1024837237.745392336    0.309449
1024837238.746938529    0.317875
1024837239.748485561    0.326313
1024837240.750031754    0.334754
1024837241.751577948    0.343197
1024837242.753124980    0.351637
1024837243.754671173    0.360095
1024837244.756218206    0.368525
1024837245.757764399    0.376967
1024837246.759310592    0.385408

$B%7%9%F%`%/%m%C%/$N@:EY$O$"$s$^$jNI$/$J$$$G$9$M(B....

adjtime(2)$B$r;H$($P(BPPS API$B$+$iF@$i$l$k8m:9$N=$@5$O$G$-$k$H;W$$$^$9!#(B

 > 
 >  $B:#2s$N;~9oF14|$K$O!"(BGPS$B%l%7!<%P(B <-> PC$B$rFsAH;HMQ$7$F!"(B2$BBf$N(BPC$B$N;~9o$rF14|$5$;$h$&$H$7$F$$$^$9(B(ntp$B%5!<%P(B - 
 > $B%/%i%$%"%s%H$H$7$F$N@\B3$O9T$J$$$^$;$s(B)$B!#ITMW$J$i$P!"(Bntpd$B$rF0$+$5$:$K:Q$^$;$i$l$k$+$H;W$$$^$7$F!"<ALd$5$;$FD:$-$^$7$?!#(B
 > 

PPS$B?.9f$K%N%$%:$,F~$C$?>l9g$K$I$&$9$k$+!"A08e$N%G!<%?$+$i%/%m%C%/<~GH(B
$B?t$N%*%U%;%C%H!"%I%j%U%H>pJs$rF@$F=$@5%Q%i%a!<%?$K2CL#$9$k$+$J$I9M$($F(B
ntp$B$r;H$o$:$KFH<+$NJ}K!$G;~9oF14|$r9T$&$N$b$*$b$7$m$$$+$bCN$l$^$;$s!#(B

$B!t$H$3$m$G(B40$BBfH>$P$N?M$,(BBSD$B$KBP$7$FNI$$0u>]$,L5$$$C$F$I$&$$$&$3$H(B
$B!t$J$s$G$7$g$&$M(B?
$B!tC<Kv@)8fEy$G$"$k$H$+(BAPI$B4X78$N$3$H$J$i(B4.4BSD$B0J9_$N!V(BBSD$B!W$O$=$N$3$m$N(B
$B!t!V(BBSD$B!W$H$OJLJ*$@$H8@$C$F$_$k$H$+(B...
-- 
  yoshiaki@kt.rim.or.jp
 ($B$&(B)  
