From owner-FreeBSD-users-jp@jp.FreeBSD.org Tue Nov 13 20:41:43 2012
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) id qADBfhd23529;
	Tue, 13 Nov 2012 20:41:43 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from sh.kkdlabs.jp (s236214.ppp.asahi-net.or.jp [220.157.236.214])
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) with ESMTP/inet id qADBfhv23524
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Tue, 13 Nov 2012 20:41:43 +0900 (JST)
	(envelope-from kohi@kkdlabs.jp)
Received: from localhost (sh.kkdlabs.jp [10.2.255.241])
	by sh.kkdlabs.jp (8.14.5/8.14.4) with ESMTP id qADBffAO053371;
	Tue, 13 Nov 2012 20:41:43 +0900 (JST)
	(envelope-from kohi@kkdlabs.jp)
Message-Id: <20121113.204141.1314500237419629619.kohi@kkdlabs.jp>
To: FreeBSD-users-jp@jp.FreeBSD.org
From: Koh-ichi Ito <kohi@kkdlabs.jp>
In-Reply-To: <20121112.193844.308355197.kohi@kkdlabs.jp>
References: <20121111.173821.501318127.kohi@kkdlabs.jp>
	<20121111181814.64d02195.kh@mogami.com>
	<20121112.193844.308355197.kohi@kkdlabs.jp>
X-Mailer: Mew version 6.5 on Emacs 24.2 / Mule 6.0 (HANACHIRUSATO)
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
Date: Tue, 13 Nov 2012 20:41:41 +0900
X-Sequence: FreeBSD-users-jp 94050
Subject: [FreeBSD-users-jp 94050] Re: umodem
 =?ISO-2022-JP?B?GyRCJEcbKEI=?= PICC18F2550
 =?ISO-2022-JP?B?GyRCJEslIiUvJTslOSQ5JGskSElUMEJEahsoQg==?=
Sender: owner-FreeBSD-users-jp@jp.FreeBSD.org
X-Originator: kohi@kkdlabs.jp
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+060209

$B$$$H$&$G$9!#2?EY$b$9$_$^$;$s!#(B

From: Koh-ichi Ito <kohi@kkdlabs.jp>
Subject: [FreeBSD-users-jp 94048] Re: umodem $B$G(B PICC18F2550 $B$K%"%/%;%9$9$k$HIT0BDj(B
Date: Mon, 12 Nov 2012 19:38:44 +0900

>> $B%G%P%$%9%I%i%$%P$r=q$/B&$+$i8+$?$i!"$$$D%G!<%?$,Mh$k$+(B
>> $B$o$+$i$J$$$H$-$O!V(B100$B2s0J>e2s$7$F$bJ?5$!W$J$[$&$N9=B$(B
>> $B$K$9$k$+!"%;%s%5B&$,%G!<%?Aw=P;XNa$rBT$D$h$&$K$9$Y$-$@(B
>> $B$H;W$$$^$9$,!"1?$,$h$1$l$P!":G=i$N%W%m%0%i%`9=B$$G$b!"(B
>> sleep() $B$r(B close() $B$N8e$K0\F0$9$k$H(B($B40A4$G$O$J$$$K$7$F(B
>> $B$b(B)$B2~A1$5$l$k$+$b$7$l$J$$$G$9$M!#(B
>> 
>> $BJ?NS(B $B9@0l(B
> 
> $B<B$OK\HV$N(B($B$H$$$&$[$IBg$2$5$JOC$8$c$J$$$s$G$9$1$I(B :-)$B%W%m%0%i%`$O(B Perl
> $B$8$c$J$/$C$F(B C $B$G=q$$$F$$$k$s$G$9$,!"$H$b$+$/(B close()$B$N8e$m$K(B sleep()$B$r(B
> $BF~$l$k$H2~A1$5$l$k$3$H$O$o$+$j$^$7$?$N$G!"$,$s$P$C$F$_$^$9!#(B

C $B$N%3!<%I$G$O!"(Bclose()$B$N8e$m$K(B sleep()$B$rF~$l$F$_$F$b8=>]$OJQ$o$i$:!"(B
read()$B$NA0$N(B select()$B$,%?%$%`%"%&%H$7!"$=$N$^$^:F<B9T$9$k$H!"(Bselect()$B$,(B
$B%?%$%`%"%&%H$9$i$;$:JV$C$F$3$J$/$J$j$^$9!#(B^C $B$rBG80$9$k$H%W%m%s%W%H$OJV$C(B
$B$F$-$^$9!#(B

$BD9$/$F62=L$G$9$,;n$7$?%3!<%I$r:\$;$^$9!#(BPAUSE $B$NCM$O(B1$B$G%@%a$@$C$?$N$G(B5
$B$K$7$F$_$^$7$?$,!"$d$O$j%@%a$G$7$?!#(B

#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <termios.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/select.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/uio.h>

#define PAUSE	5

main()
{
	int	i,
		fd;
	size_t	rlen,
		tlen;
	ssize_t	n;
	char	*tmesg,
		rmesg[16];
	fd_set	fds;
	struct termios	tios;
	struct timeval	timeout;

	for (i = 0; ; i++) {
		printf("i = %d\n", i);
		if ( (fd = open("/dev/ttyU0", O_RDWR | O_NONBLOCK) ) < 0) {
			err(1, "open()");
		}
		if (ioctl(fd, TIOCEXCL) < 0) {
			err(1, "ioctl(TIOCEXCL)");
		}
		if (tcflush(fd, TCOFLUSH) < 0) {
			err(1, "tcflush(TCOFLUSH)");
		}
		if (tcflush(fd, TCIFLUSH) < 0) {
			err(1, "tcflush(TCIFLUSH)");
		}
		if (tcgetattr(fd, &tios) < 0) {
			err(1, "tcgetattr()");
		}
		tios.c_cflag |= (CREAD | CLOCAL);
		tios.c_iflag |= IXANY;
		tios.c_iflag &= ~(ISTRIP | ICRNL | INLCR | IXON | IXOFF
			| IMAXBEL);
		tios.c_lflag |= ICANON;
		tios.c_lflag &= ~(ECHO | ECHONL);
		tios.c_oflag &= ~OPOST;
		if (tcsetattr(fd, TCSADRAIN, &tios) < 0) {
			err(1, "tcsetattr()");
		}
		FD_ZERO(&fds);
		FD_SET(fd, &fds);
		timeout.tv_sec = 1;
		timeout.tv_usec = 0;
		tmesg = "BARH\r\n";
		tlen = strlen(tmesg);
		if ( (n = select(fd + 1, NULL, &fds, NULL, &timeout) ) < 0) {
			err(1, "select() for write()");
		} else if (n == 0) {
			fprintf(stderr, "select() for write() timeout.\n");
			close(fd);
			sleep(PAUSE);
			exit(1);
		}
		if (write(fd, tmesg, tlen) < 0) {
			err(1, "write()");
		}
		FD_ZERO(&fds);
		FD_SET(fd, &fds);
		if ( (n = select(fd + 1, &fds, NULL, NULL, &timeout) ) < 0) {
			err(1, "select() for read()");
		} else if (n == 0) {
			fprintf(stderr, "select() for read() timeout.\n");
			close(fd);
			sleep(PAUSE);
			exit(1);
		}
		bzero(rmesg, 16);
		if ( (n = read(fd, rmesg, 15) ) < 0) {
			err(1, "read()");
			close(fd);
			sleep(PAUSE);
			exit(1);
		}
		printf("rmesg: %s\n", rmesg);
		close(fd);
		sleep(PAUSE);
	}
}

-----
kkdlabs.jp, featuring Koh-ichi Ito as just another DNS freak in town.
