Re: serial port
On 19-Jul-2004, Mon, 10:42:34, Alexander Pytlev <apytlev@tut.by> wrote:
> ltb> есть необходимось постоянноо слушать com порт и писать все в файл, но
> ltb> программы типа minicom плохо, что посоветуете ? Как это сделать
> ltb> максимально просто ?
> У меня этим скриптом читаются данные из миниАТС:
> (взято из pblogan-0.0.1a.tar.gz)
>
> #!/usr/bin/perl -w
> #
> # This perl script is based on a program written by Paul Haas, the original program
> # can be found at http://hamjudo.com/rcx/talkrcx.txt
> #
> #
>
> $port = "/dev/ttyS0";
> open("portfh","+<$port") || die "opening $port for input: $!";
>
> system("stty 9600 -echo parmrk cs8 -cstopb raw < $port");
> while(1) {
> getmsg("portfh" );
> sleep( 1 );
> }
> close("portfh");
>
>
> sub getmsg {
> local $portfh = @_;
> local($inbuff,$rin) = ('','');
>
> vec($rin,fileno("portfh"),1) = 1;
> while ( select($rin, undef, undef, 0.3) ) {
> $char = '';
> sysread ("portfh",$char,1);
> $inbuff .= $char;
> }
> if( length( $inbuff ) > 0 ){
> open( LOG, ">>/var/log/pbx.log" );
> print LOG "$inbuff" ;
> close( LOG );
> }
> return;
> }
Тогда уж лучше использовать Device::SerialPort, так как болучается немного
более гибко, а то system("stty 9600 -echo parmrk cs8 -cstopb raw < $port");
это конечно здорово, но ...
use Device::SerialPort;
my $Port = '/dev/ttyS0';
my $Lock = '/var/lock/LCK..ttyS0';
my $port = Device::SerialPort->new( $Port, 0, $Lock )
or die "error open serial port $Port - $!";
# Init port
$port->baudrate( 9600 ) or warn "port->baudrate\n";
$port->databits( 8 ) or warn "port->databits\n";
$port->parity( "none" ) or warn "port->parity\n";
$port->stopbits( 1 ) or warn "port->stopbits\n";
$port->handshake( "none" ) or warn "port->handshake\n";
# $port->debug( 1 ) or warn "port->debug\n";
$port->purge_all;
$port->read_char_time( 1200 );
$port->write_settings;
Ну а дальше можно через $port->read(...) читать, в принципе можно сделать
tie для STDIN и работать должно, но я не пробывал.
Ну и выводить можно не в файл а в syslog, а уже на уровне syslog
перенаправить это дело в любой файл да и по сети проще пересылать - ни каких
переделок программы не будет.
> Alexander
--
With Best, | http://www.excom.spb.su/~andrey
Andrey Chernomyrdin | mailto:andrey@excom.spb.su
Reply to: