Nastaveni rychlosti portu
Milan Sorm
xsorm na informatics.muni.cz
Pátek Červenec 3 20:54:55 MEST 1998
V poslednim dopise Petr Barta pise:
> > > Potrebuju komunikovat z perl skriptu se seriovym portem, ale neni mi
> > > jasne, jak nastavit rychlost komunikace. Je vubec mozne to nejak udelat z
> > > PERLu? (Konkretne potrebuju nastavit parametry 38400 8N1, jak je vypisuje
> > > napr. minicom.)
> > >
> > > No a po nastaveni rychlosti - jakym zpusobem dal komunikovat? Je mozne
> > > pouzit normalni open(PORT,"/dev/ttyS0") ?
> >
> > $modem = '/dev/ttyS0';
> >
> > # Otevirame a nastavujeme modem
> > open(MODEM, "+<$modem") || mrtvej "Chyba pri otevirani modemu $modem: $!";
> > system("stty 1200 -echo raw <$modem");
>
> OK. Tomu rozumim - nastavil jsem rychlost na to, na cem je modem zamceny.
>
> > cteni se pak realizuje pomoci sysread, psani pomoci syswrite.
>
> Tohle mi ale moc nechodi - zkusil jsem to pres priklad, ktery je v camel
> book ve stylu "$written = syswrite MODEM, $string, $len;".
> Ten se pri spusteni tvari, ze je funkcni, ale efekt na modemu neni veskery
> zadny - poslal jsem tam takhle retezec "ATZ\n" ($len se odvozuje z tohoto
> retezce, print "$len" mi napise 4, takze si myslim, ze je to dobre), ale
> modem vubec nezareagoval. Kde delam chybu?
>
> Petr Barta
>
mam tu kod:
sub do_write {
my $co = shift;
syswrite(MODEM, $co, length($co), 0);
}
o nemz vim, ze bezpecne funguje.
pro cteni pak tu mam:
sub do_read {
my $rin = '';
vec($rin,fileno(MODEM),1) = 1;
my $offset = 0;
$data = ""; # Globalni, urcite se to Adeltonovi nelibi
my $timeout = 120;
my $rout;
while (select($rout=$rin, undef, undef, $timeout) != 0) {
my $delka = sysread(MODEM, $data, 1024, $offset);
$offset += $delka; $timeout=1.0;
}
}
coz zkousi cist zadany pocet sekund (zde 120 s) a pokud mezitim neco prijde,
cte porad dal a dal.
tohle taky funguje, je to overene.
mezi ctenim a zapisem je dobre delat pauzu (napr. 0.2s) - napr.
select(undef,undef,undef,0.2);
milan
--
--------------------------------------------------------------------
Milan Sorm (aka Popelnik) tel/fax/zazn: +420 5 46211083/46211311
office: B205 - FI MU Brno e-mail: sorm na fi.muni.cz
telefon: +420 5 41512348 web: http://www.fi.muni.cz/~sorm/
Další informace o konferenci Perl