From owner-FreeBSD-users-jp@jp.freebsd.org  Sat Aug  1 02:10:34 1998
Received: (from daemon@localhost)
	by jaz.jp.freebsd.org (8.8.8+3.0Wbeta13/8.7.3) id CAA28195;
	Sat, 1 Aug 1998 02:10:34 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from nalserver.nal.go.jp (nalserver.nal.go.jp [202.26.95.66])
	by jaz.jp.freebsd.org (8.8.8+3.0Wbeta13/8.7.3) with ESMTP id CAA28181
	for <FreeBSD-users-jp@jp.freebsd.org>; Sat, 1 Aug 1998 02:10:30 +0900 (JST)
	(envelope-from kohno@nal.go.jp)
Received: from asuka.nal.go.jp (asuka.nal.go.jp [202.26.75.65])
	by nalserver.nal.go.jp (8.9.0/NAL1.1-ns) with ESMTP id CAA02941
	for <FreeBSD-users-jp@jp.freebsd.org>; Sat, 1 Aug 1998 02:10:23 +0900 (JST)
Received: from [202.26.77.16] 
	by asuka.nal.go.jp (8.8.8/NAL1.0) with SMTP id CAA19524
	for <FreeBSD-users-jp@jp.freebsd.org>; Sat, 1 Aug 1998 02:10:22 +0900 (JST)
Message-Id: <199807311710.CAA19524@asuka.nal.go.jp>
Date: Sat, 1 Aug 1998 02:09:56 +0900
To: FreeBSD-users-jp@jp.freebsd.org
From: kohno@nal.go.jp (Takashi KOHNO)
X-Sender: kohno@202.26.75.65
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
X-Mailer: Eudora-J(1.3.8.5-J13)
Reply-To: FreeBSD-users-jp@jp.freebsd.org
Precedence: bulk
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+980729
X-Sequence: FreeBSD-users-jp 31467
Subject: [FreeBSD-users-jp 31467] Re: RS232C on FreeBSD
Errors-To: owner-FreeBSD-users-jp@jp.freebsd.org
Sender: owner-FreeBSD-users-jp@jp.freebsd.org

$B2OLn!w9R5;8&$J$N$G$9!#$$$/$D$+%U%)%m!<$rD:$-$^$7$F!"H>J,$[$I2r7h$7$?$s$G(B
$B$H$j$"$($E8fJs9p$5$;$FD:$-$^$9!#(B

$BDL?.BP>]$O(B9600bps$B!"(BDTR=1$B$G=i4|2=L?Na$rAw?.8e!"(B38400bps$B!"(BDTR=0$B$GDL?.$r9T(B
$B$o$J$1$l$P$J$j$^$;$s!#$G!"(B/dev/ttyd0$B$r(Bopen$B$9$k$H(BDTR$B$O>!<j$K(B1$B$K$J$C$F$7$^(B
$B$&$7!"(BI/O$B%]!<%H(B0x32$B$X$N%b!<%I%$%s%9%H%i%/%7%g%s$G%\!<%l!<%H$r%W%m%0%i%`(B
$BCf$GJQ$($kJ}K!$,H=$i$J$+$C$?$N$G!"(B

        % stty -f /dev/ttyid0 speed 38400

$B$H$7$F$*$$$F$+$i%W%m%0%i%`$r5/F0$7!"(B9600bps$B$N;~E@$G$OIaDL$K(B/dev/ttyd0$B$r(B
open$B$7$FDL?.$r9T$$!"(Bclose$B$7$F$+$i!J$=$&$9$k$H(B38400bps$B$KLa$k!#!K(BI/O$B%]!<(B
$B%H(B0x30$B$rD>@\C!$/$3$H$K$7$^$7$?!#$3$l$K$h$jDL?.BP>]$K(Boutb(0x30, data)$B$G(B
$B%G!<%?$rAw$k$3$H$K$O@.8y$7$^$7$?!#(B

$B$7$+$7!"(Binb(0x30)$B$G%G!<%?$rFI$_9~$b$&$H$9$k$H!"(Bhang up$B$7$FA4$F$NF~NO$r<u(B
$B$1IU$1$J$/$J$C$F$7$^$$$^$9!#!J%-!<%\!<%I$N(BCAPS$B$H$+$K$bH?1~$7$J$/$J$k!#!K(B
$B$^$!Ce?.3d9~$,;H$($J$$$N$G%?%$%_%s%0$NLdBj$G$O$J$$$+$H;W$C$F$$$k$N$G$9$,!"(B
$B$?$@!"%G!<%?$,2=$1$k$N$G$O$J$/(Bhang up$B$9$k$N$,2?8N$J$N$+H=$i$:$K$$$^$9!#(B

$B$=$s$J$o$1$G!"$3$l$^$G>pJs$rD:$$$?J}!"M-Fq$&8f:B$$$^$7$?!#$b$7!"(BI/O$B%]!<(B
$B%H$rD>@\C!$/0J30$K(BDTR=0$B$N>uBV$G%7%j%"%kDL?.$r9T$&J}K!$r8fB8$8$NJ}$,$$$i(B
$B$C$7$c$$$^$7$?$i!"0z$-B3$->pJs$r$*BT$A$7$F$*$j$^$9!#N.@P$K$A$g$C$H(B
FreeBSD$B$NOC$+$iN%$l$F$-$F$$$k$N$+$bCN$l$^$;$s$,!"%W%m%0%i%`$r7G:\$7$F$*(B
$B$-$^$9$s$G!"LdBjE@$NH=$kJ}!"8f;XE&$$$?$@$1$l$P9,$$$G$9!#DL?.Aj<j$X$NAw(B
$B?.$O%G!<%?(B0x???$B$rAw$k$N$K(B"I0???<CR>"$B$rAw$k$3$H$K$J$C$F$*$j!"Aw?.MW5a(B'Y'
$B$rAw$k$H%G!<%?(B"X0???<CR>"$B$rJV$7$F$-$^$9!#(B

**** $B$3$3$+$i(B ****

/* Sample for using RS-232C
   Source Code for GCC on freeBSD
   last updated on July 31, 1998 */

#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <sys/errno.h>
#include <sys/time.h>
#include <machine/cpufunc.h>

#define WAIT_RCVD 9600L

struct timeval t_now, t_past;


int rs_read (long wait_count) {         /* 0x32$B$N(BRxRDY$B$r%A%'%C%/$7$F(B */
   long count = 0L;

   while (((inb(0x32) & 0x02) == 0)||(count < wait_count)) count++;
   if (count < wait_count) return (0);   
                      else return (inb (0x30)); /* $B%G!<%?$rFI$_9~$_(B */
}


double waitInterval (long itvl) {
$B!cCfN,!'(Bitvl msec$BBT$D$?$a$N%k!<%A%s!#<B:]$N7P2a;~4V$r(Bmsec$B$GJV$9!#!d(B
   return (w/1000.0);
}


int initTermio (void) {
   struct termios siopara;
   speed_t        siobaud;
   char  str[6];
   int   cmd[] = {0x41, 0x21, 0x07, 0x34, 0x51}, fd, i;

   fd = open ("/dev/ttyd0", O_RDWR|O_NONBLOCK); /* ttyd0$B$r(Bopen */
   if (fd<0) {
      perror ("/dev/ttyd0"); exit (-1);
   }
   siopara.c_cflag = CS8|CLOCAL|CREAD;
   siopara.c_iflag = IGNPAR|ICRNL;
   siopara.c_oflag = 0;
   siopara.c_lflag = ICANON;
   cfsetspeed (&siopara, B9600);        /* 9600bps$B$K@_Dj(B */
   tcflush (fd, TCIFLUSH);
   tcsetattr (fd, TCSANOW, &siopara);
   scanf ("%d", &i);                    /* $B$^$!%F%9%HMQ$H$$$&$3$H$G(B... */
   for (i=0; i<5; i++) {                /* $B=i4|2=L?Na$rAw?.(B */
      str[0] = cmd[i]; str[1] = 0;
      write (fd, str, 1);
   }
   gettimeofday (&t_past, NULL);        /* 10msec$BBT$D(B */
   waitInterval (10L);
   close (fd);                          /* /dev/ttyd0$B$rJD$8$k(B */
   fd = open ("/dev/io", O_RDWR);
   outb (0x32, 0x82);
   outb (0x32, 0x40);                   /* $BFbIt%j%;%C%H(B */
   outb (0x32, 0x4e);                   /* 8bit 1stopbit no-parity */
   outb (0x32, 0x35);                   /* DTR = 0$B$K@_Dj(B */
   return (fd);
}


int sendIR (long d) {
   char str1[8], str2[8];
   int  i, err, status;

$B!cCfN,!'Aw?.%G!<%?(Bd(0x???)$B$rJ8;zNs(Bstr2("I0???<CR>"$B$K3JG<$9$k!d(B
   disable_intr();                      /* $B3d$j9~$_$r6X;_(B */
   for (i=0; i<6; i++){
      while ((inb(0x32) & 0x01) == 0);  /* TxRDY$B$r%A%'%C%/$7$F(B */
      outb (0x30, str2[i]);             /* $B0lJ8;z$E$DAw?.(B*/
   }
   enable_intr();                       /* $B3d$j9~$_$r5v2D(B */
   return (0);
}


int main (void) {
   double dt;
   long d;
   char str[128];
   int  fd, i, j, rst;

   fd = initTermio();                   /* $B=i4|2=%k!<%A%s(B */
   gettimeofday (&t_past, NULL);
   for (d=0xf00; d>0x000; d-=0x100) {
      sendIR (d);                       /* $BDL?.BP>]$N?6Iq$$$+$i$3$l$O(B
                                           $B@.8y$7$F$$$k$3$H$,$o$+$k!#(B */
   printf ("input any to go > "); scanf ("%d", &i); 
      for (i=0; i<3; i++) {             
         dt = waitInterval (20);        /* 20msec$B4V3V$r6u$1$k(B */
         printf ("%2d ", i);
         disable_intr();                /* $B3d$j9~$_$r6X;_(B */
         while ((inb(0x32) & 0x01) == 0);
         outb (0x30, 'Y');              /* $B%G!<%?Aw?.$rDL?.BP>]$KMW5a(B */
         j=0;
         if ((rst = rs_read (WAIT_RCVD)) < 0) { /* $B$3$3$G(Bhang up */
            printf ("no reply\n");
         } else {
            while (rst!=0x0d) {
               rst = rs_read (1200L);
               if (rst>0) {str[j] = rst; j++;}
            }
            str[j] = 0;
            printf ("%8.5lf : %2d : %2d : %s\n", dt, j, errno, str);
         }      
         enable_intr();                 /* $B3d$j9~$_$r5v2D(B */
      }*/
   }
   close (fd);
}

**** $B$3$3$^$G(B ****


--

   $B2O(B  $BLn(B    $B7I(B  (Takashi KOHNO)      
      Div. of Aircraft Aerodynamics, National Aerospace Lab.
       Phone:0422(47)5911 ex.3534   E-mail:kohno@nal.go.jp

