Assuming that the serial connection is from a Windows box to a console/TTY on the Linux box, this old code excerpt may be instructive.
use strict;
use warnings;
use Win32::SerialPort;
my $loggedin = 0;
my $term = Win32::SerialPort->new('COM1') or die "bad COM1\n";
$term->baudrate(9600);
$term->databits(8);
$term->parity("none");
$term->parity_enable(0);
$term->stopbits(1);
$term->handshake('xoff');
$term->user_msg(1); # misc. warnings
$term->error_msg(1); # hardware and data errors
$term->read_interval(1000); # max time between chars 1000 ms (1
+sec)
$term->read_interval(0xffffffff); # non-blocking read
$term->write_settings;
$term->write("\r");
my $esccount = 0;
while ($prompt !~ /Supervisor Name :/) {
die "$esccount attempts to contact the PBX have failed." if $escco
+unt++ > 10;
# loop sending ESCs until we get the login prompt
$term->write("\e");
sleep 2;
($count, $prompt) = $term->read(2000);
}
# we should now be at the Supervisor Name prompt
$term->write("REPORTS\r");
sleep 2;
($count, $prompt) = $term->read(2000);
if ($prompt =~ /Password\s+:/) {
$term->write("REPORTS\r");
sleep 3;
($count, $prompt) = $term->read(2000);
if ($prompt =~ /Main Menu/) {
$loggedin = 1;
}
}
. . .
(yes, I did just give away the password to that old PBX. If it's still running and you can find it and connect to its serial port, feel free to hack away) |