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;