[Previo por Fecha] [Siguiente por Fecha] [Previo por Hilo] [Siguiente por Hilo]

[Hilos de Discusión] [Fecha] [Tema] [Autor]

Sigo con el serial con perl



Tengo un script con perl que me permite hacer un chat con un puerto pero
necesito poder darle entrada de datos desde variables arbitrarias, alguien
puede decirme que debo hacer?.

La secuencia que necesito esta aqui:

sysopen hacia ttyS1 y luego

Send:           "\x0d" --> Enter 
Receive:        "ID="
Send:           "M\x0d"
Receive:        "Enter pager ID: "
Send:           "123456\x0d"
Receive:        "Enter message:"
Send:           "Message here\x0d"
Receive:        "Enter pager ID: "
Send:           "\x0d"
Receive:        "Goodbye"

close dev at ttyS1


Gracias Gracias.
------------------------------------------------------------------------
#!/usr/bin/perl -w

use POSIX qw(:termios_h :fcntl_h);

sysopen ( MODEM, "/dev/ttyS1", O_RDWR | O_NONBLOCK ) || die "cannot
sysopen";  

$in = POSIX::Termios->new;   
$insave = POSIX::Termios->new;  
$mo = POSIX::Termios->new;  

#  STDIN: raw 

$in->getattr(fileno(STDIN)); 
$insave->getattr(fileno(STDIN));

$in->setiflag(0);          #  XON, XOFF goes here
$in->setoflag(0);
$in->setlflag(0);
$in->setcc(VMIN, 1);
$in->setcc(VTIME, 0);
$in->setattr(fileno(STDIN), TCSANOW);


#  Modem: like STDIN plus baudrate

$mo->getattr(fileno(STDIN));

$mo->setcflag( B9600 | CLOCAL | CREAD | CSTOPB | HUPCL | PARENB | CS7 );
#$mo->setcflag(CREAD | CS8 | B9600 | HUPCL);
$mo->setattr(fileno(MODEM), TCSANOW);


my $rbits = "";                            
vec($rbits, fileno(STDIN), 1) = 1;
vec($rbits, fileno(MODEM), 1) = 1;

my $n = 0;  

do {
   
  $n = select($selrbits = $rbits, undef, undef, undef);    # BLOCKING 
  die "cannot select" if ($n == -1);

  if (vec($selrbits, fileno(STDIN), 1)) {
    $len = sysread(STDIN, $buf, 100 );
    syswrite(MODEM, $buf, $len );
  }
  if (vec($selrbits, fileno(MODEM), 1)) {
    $len = sysread(MODEM, $buf, 100 );
    syswrite(STDOUT, $buf, $len );
  }

} while ( $buf ne "q" );   


close MODEM;

$insave->setattr(fileno(STDIN), TCSANOW);     # restore terminal settings
------------------------------------------------------------------------



Armando Montiel Caba                    mailto:amontiel en ns tecnet net mx
ViAjErO @ IRC        Tel: (525) 171-99-16,18,24
Beeper (525) 1710976 Sin PIN, Sin Clave" ComRed S.A. de C.V.
Otro Pleonasmo: "Ha Ocurrido un Error en Windows"



[Hilos de Discusión] [Fecha] [Tema] [Autor]