Serial Port belauschen

29/07/2008 - 19:33 von Gerhard Wolf | Report spam
Hallo,

ich muss eine Anwendung testen und lauschen was sie auf der Seriellen Schnittstelle ausgibt. Dazu habe ich schon mal:

use Device::SerialPort qw( :PARAM :STAT 0.07 );
use strict;

my $port = "/dev/ttyS1";
my $pass;
my $return;



my $ob = Device::SerialPort->new ($port) || die "Can’t open $port:$!";

$ob->baudrate (9600) || die "fail setting baudrate";
$ob->parity ("none") || die "fail setting parity";
$ob->databits (8) || die "fail setting databits";
$ob->stopbits (1) || die "fail setting stopbits";
$ob->handshake ("none") || die "fail setting handshake";
$ob->dtr_active (1) || die "fail setting dtr_active";

$ob->write_settings || die "no settings";

sleep 1;

while (1){
$return = $ob->input;
print $return;
sleep 1;
}

undef $ob

gebastelt. Jetzt weis ich nicht wie man auf einer seriellen Schnittstelle lauscht. Die while schleife scheint nicht richtig.

Wie geht das?
 

Lesen sie die antworten

#1 Peter Arnhold
31/07/2008 - 10:39 | Warnen spam
Gerhard Wolf schrieb:
Hallo,

ich muss eine Anwendung testen und lauschen was sie auf der Seriellen Schnittstelle ausgibt. Dazu habe ich schon mal:

use Device::SerialPort qw( :PARAM :STAT 0.07 );
use strict;

my $port = "/dev/ttyS1";
my $pass;
my $return;



my $ob = Device::SerialPort->new ($port) || die "Can’t open $port:$!";

$ob->baudrate (9600) || die "fail setting baudrate";
$ob->parity ("none") || die "fail setting parity";
$ob->databits (8) || die "fail setting databits";
$ob->stopbits (1) || die "fail setting stopbits";
$ob->handshake ("none") || die "fail setting handshake";
$ob->dtr_active (1) || die "fail setting dtr_active";

$ob->write_settings || die "no settings";

sleep 1;

while (1){
$return = $ob->input;
print $return;
sleep 1;
}

undef $ob

gebastelt. Jetzt weis ich nicht wie man auf einer seriellen Schnittstelle lauscht. Die while schleife scheint nicht richtig.

Wie geht das?



while (1){
my($BlockingFlags,$InBytes,$OutBytes,$LatchErrorFlags) = $ob->status();
die "port is gone" if !defined $LatchErrorFlags;

if ( $InBytes ) {
my $in = $ob->read($InBytes);
print $in;
}

select undef, undef, undef, 0.01;
}

Gruß,
Peter

Ähnliche fragen