|
|||||||||||||||||||||||||||
Hej.
Jeg har et lille problem der har medført at jeg har skulle lave et lille
kommandolinje terminalprogram. Jeg begyndte med at finde ud af at læse fra
serielporten i et script, og derefter at skrive til porten i et andet perl
script.
Disse to scripts skulle nu gerne samles til et, men jeg mangler noget der
kan læse fra stdin. Hvis der ikke er et tegn at læse, skal den blot gå
videre i løkken.
Herunder følger programmet som det ser ud lige nu. Det jeg har brug for er
at kunne få linjen
$cc = getc();
til at hoppe videre hvis der ikke er noget input lige nu. Den skal altså
IKKE stå og vente på input.
<------------------- ./bin/sr0.pl --------------------->
#!/usr/bin/perl
use Device::SerialPort;
my $device = '/dev/ttyS0';
my $sp = Device::SerialPort->new($device) || die "Unable to open $device"=
;
$sp->baudrate(115200) || die "Unable to set baudrate";
$sp->parity("none") || die "Unable to set parity";
$sp->databits(8) || die "Unable to set databits";
$sp->stopbits(1) || die "Unable to set stopbits";
$sp->handshake("none") || die "Unable to set handshake";
$sp->write_settings || die "No settings";
$message = "Command line terminal.\r\nType CTRL-C to quit\r\n\r\n"
print $message;
$in = 1;
$sendcommand = "";
while ($in) {
# Get input. Needs <cr> after each character.
$cc = getc();
if ("$cc" ne "\n") {
$command = sprintf("%s%s", $command, $cc) if ("$cc" ne "\n");
} else {
$sendcommand = 1;
}
if ($sendcommand) {
if ("$command" eq "quit") {
$in = 0;
} else {
$command = sprintf("%s%s", $command, "^M");
$sendcommand = 0;
printf("Sending command: %s\n", $command);
$written = $sp->write($command);
printf("sent %d bytes\n", $written);
$command = "";
}
}
# Read from serial port
$spr = $sp->read(1);
# Write serial
printf("%s", $spr);
}
>------------------- ./bin/sr0.pl ---------------------<
Med venlig hilsen
Bjørn Bille Højte
sslug@sslug
|
||||||||||||||
|
||||||||||||||