use strict; use Win32::SerialPort qw( :STAT 0.19 ); my $PortName = 'COM1'; my $ob = new Win32::SerialPort($PortName) || die "Can't open $PortName: $^E\n"; Win32::SerialPort->set_test_mode_active(1); $ob->handshake("none"); $ob->baudrate(57600); #may need to be 56000 $ob->parity("none"); $ob->databits(8); $ob->stopbits(1); $ob->binary(1); $ob->parity_enable(0); $ob->read_const_time(5000); $ob->read_interval(0); $ob->write_const_time(3000); $ob->debug(1); $ob->error_msg(1); # prints hardware messages like "Framing Error" $ob->user_msg(1); # prints function messages like "Waiting for CTS" $ob->buffers(16,16); # read, write $ob->write_settings || die "Cannot write settings"; $ob->status; print "Starting 1 character background read\n"; my $in = $ob->read_bg(1); my $done = 0; my $blk; my $err; my $out; my $result; for (;;) { ($done, $in, $result) = $ob->read_done(0); $ob->status; sleep(1); last if $done; } print "got = $in\nresult = ",ord($result),"\n"; undef $ob;