This script sets the terminal attributes for the I404:
#!/usr/bin/perl -w
use strict;
use POSIX qw(:termios_h);
use FileHandle;
# syst:pass 12345
# syst:comm:term 1
# syst:comm:check 0
sub ascii_format
{
my ($argin) = @_;
my $argout = "";
foreach my $i ( 0 .. (length($argin) - 1))
{
my $let = substr( $argin, $i, 1);
my $dec = unpack( "C", $let);
if( $dec < 32)
{
if( $dec == 10){ $argout .= "<LF>";}
elsif( $dec == 13){ $argout .= "<CR>";}
else { $argout .= "<$dec>";}
}
else
{
$argout .= $let;
}
}
return $argout;
}
my $buffer= " " x 200;
my ($nfd);
#
# root> chmod 666 /dev/ttyUSB1
#
sysopen( I404, "/dev/ttyUSB1", O_RDWR) or die 'Failed to open /dev/ttyUSB1';
my $fd = fileno( I404);
my $term = POSIX::Termios->new;
$term->getattr( $fd);
#$term->setospeed( 4098); # B115200
#$term->setispeed( 4098);
$term->setospeed( &POSIX::B19200); # B19200
$term->setispeed( &POSIX::B19200);
my $lflag = $term->getlflag();
$lflag = $lflag & ~(&POSIX::ECHO);
$lflag = $lflag | &POSIX::ISIG | &POSIX::ICANON | &POSIX::IEXTEN;
$term->setlflag( $lflag);
my $c_cflag = $term->getcflag();
$term->setcflag( $c_cflag | &POSIX::CS8);
$term->setcc( VMIN, 1);
my $iflag = $term->getiflag();
$iflag = $iflag & ~(&POSIX::IXOFF);
$iflag = $iflag | &POSIX::ICRNL | &POSIX::IXON;
$term->setiflag( $iflag);
my $oflag = $term->getoflag();
$oflag = $oflag | &POSIX::OPOST;
$term->setoflag( $oflag);
$term->setattr( $fd, &POSIX::TCSANOW);
my $len;
my $argout = "";
print " enter 'bye' to exit \n";
while()
{
print " Enter> ";
$buffer = <>;
$buffer =~ s/^\s*(.*?)\s*$/$1/;
goto finish if( $buffer =~ /bye/i);
if( length( $buffer))
{
$buffer .= "\n";
$len = syswrite( I404, $buffer, length( $buffer), 0);
print " write $len bytes " . ascii_format( $buffer) . "\n";
}
$nfd = 1;
while( $nfd)
{
my $rin = my $win = my $ein = "";
vec( $rin, fileno( I404), 1) = 1;
$ein = $rin | $win;
$nfd = select( $rin, $win, $ein, 1.);
print " nfd $nfd \n";
if( $nfd)
{
$buffer = "";
$len = sysread( I404, $buffer, 100, 0);
print " --- len $len " . ascii_format( $buffer) . "\n";
if( $len)
{
$argout .= $buffer;
}
$buffer =~ s/^\s*(.*?)\s*$/$1/;
if( $len == 1)
{
last;
}
}
}
}
finish:
close I404;