The following script communicates with the I404 BPMs.
#!/usr/bin/perl -w use strict; use POSIX qw(:termios_h); use FileHandle; my $buffer= " " x 200; my ($nfd); # # root> chmod 666 /dev/ttyS0 # sysopen( I404, "/dev/ttyS0", O_RDWR) or die 'Failed to open /dev/ttyS0'; my $fd = fileno( I404); my $term = POSIX::Termios->new; $term->getattr( $fd); $term->setospeed( 4098); # B115200 $term->setispeed( 4098); my $lflag = $term->getlflag(); $term->setlflag( $lflag & ~(POSIX::ECHO)); my $c_cflag = $term->getcflag(); $term->setcflag( $c_cflag | &POSIX::CS8); $term->setattr( $fd, &POSIX::TCSANOW); print " enter 'bye' to exit \n"; while() { print " Enter> "; $buffer = <>; goto finish if( $buffer =~ /bye/i); if( length( $buffer)) { syswrite( I404, $buffer, length( $buffer), 0); } $nfd = 1; while( $nfd) { my $rin = my $win = my $ein = ""; vec( $rin, fileno( I404), 1) = 1; $ein = $rin | $win; $nfd = select( $rin, $win, $ein, 0.1); if( $nfd) { my $len = sysread( I404, $buffer, 100, 0); $buffer =~ s/^\s*(.*?)\s*$/$1/; if( length( $buffer)) { print " len $len $buffer \n"; } } } } finish: close I404;