#!/usr/bin/perl -w use strict; require 5.003; use Win32API::CommPort; use Win32::SerialPort qw( :STAT0.19); use Win32; my $PortName = 'COM1'; my $pass; my $return; my $quiet = 1; my $configFile= 'ER400TRS.cfg'; my $PortObj = new Win32::SerialPort($PortName,$quiet) || die "Can't open $PortName: $^E\n"; $PortObj->user_msg('ON'); $PortObj->baudrate (9600) || die "fail setting baudrate"; $PortObj->parity ("none") || die "fail setting parity"; $PortObj->databits (8) || die "fail setting databits"; $PortObj->stopbits (1) || die "fail setting stopbits"; $PortObj->handshake ("none") || die "fail setting handshake"; $PortObj>dtr_active (1) || die "fail setting dtr_active"; my @ar=$PortObj->buffers(128,128); $PortObj->write_settings || die "no settings\n"; $PortObj->save($configFile) || die "no settings\n"; $PortObj->Close ||die "failed to close"; undef $PortObj; $PortObj = tie( *COMFH,'Win32::SerialPort',$configFile) || die "can tie using"; my $BlockingFlags; my ( $InBytes, $OutBytes, $LatchErrorFlags ); ( $BlockingFlags, $InBytes, $OutBytes, $LatchErrorFlags ) = $PortObj->status || warn "could not get port status\n"; if ( $BlockingFlags ) { warn "Port is blocked"; } if ( $BlockingFlags & BM_fCtsHold ) { warn "Waiting for CTS (clear to send)"; } if ( $LatchErrorFlags & CE_FRAME ) { warn "Framing Error"; } my ( $count_out, $output_string ); $output_string = "Hallo "; while(1){ $ca++; ($BlockingFlags,$InBytes,$OutBytes,$ErrorFlags) = $PortObj->status; die "lost port\n" unless defined $ErrorFlags; unless($InBytes){ last if($ca > 25); select(undef,undef,undef,0.01); next; } if($string_in = $PortObj->read($InBytes)){ last; } } $PortObj->close or die "failed to close"; undef $PortObj;