[Perl] Port série, Device::SerialPort; et STDOUT

Patrice Karatchentzeff patrice.karatchentzeff at gmail.com
Jeu 16 Mar 14:08:08 CET 2017


Re moi,

J'ai avancé un peu... En fait, j'ai l'impression que le module
Device::SerialPort;
redéfinit beaucoup de choses...

Je n'arrive pas non plus à écrire dans un fichier par exemple !

Je n'ai rien lu - ou pas compris - si la doc du module en parlait...

Quelqu'un a-t-il une idée comment contourner ?

Merci

PK

2017-03-13 10:07 GMT+01:00 Patrice Karatchentzeff <
patrice.karatchentzeff at gmail.com>:

> Salut les mongueurs
>
> J'ai un petit souci avec une redirection sur la sortie standard en jouant
> avec les ports série. Le but de la manipulation est de récupérer les
> données d'un appareil de mesure branché sur un port série (USB en fait).
>
> Voici un extrait crash-test du programme.
>
> Pour ceux qui veulent tester tout, voici un exemple sous Linux (pour
> Windows, il n'est pas encore prêt pour le desktop à mon dernier test de
> décembre 2016 😉) :
>
> # Créer une liaison de ports série virtuels :
> % socat -d -d pty,raw,echo=0 pty,raw,echo=0
> 2017/03/13 09:36:06 socat[29169] N PTY is /dev/pts/7
> 2017/03/13 09:36:06 socat[29169] N PTY is /dev/pts/8
> 2017/03/13 09:36:06 socat[29169] N starting data transfer loop with FDs
> [5,5] and [7,7]
>
> # Lancement de mon scrit
> % ./getserial.pl /dev/pts/8
>
> # envoi de données dans le port série
> %  echo coucou >| /dev/pts/7
>
> # ce qui se passe en sortie de mon programme:
> % ./getserial.pl /dev/pts/8
> Debug level: /dev/pts/8 = 0 at ./getserial.pl line 36.
>
> Data Bit Options:  none odd evencoucou
> coucou
> coucou
>
> etc.
>
> Maintenant, si je veux rediriger la sortie de mon programme *en externe *:
>
>  % ./getserial.pl /dev/pts/8 >>| toto.txt
>
> Le fichier ne se remplit pas...
>
> Je ne comprends pas pourquoi...
>
> Voici le programme simplifié :
>
> % cat getserial.pl
> #!/usr/bin/perl
>
> use strict;
> use warnings;
> use English;
>
> use Device::SerialPort;
> my $port = Device::SerialPort->new("$ARGV[0]")
>   or die "can't open port: $OS_ERROR\n";
>
>
> $port->baudrate(115200); # Configure this to match your device
> #$port->baudrate(19200); # Configure this to match your device
> $port->databits(8);
> $port->parity("odd");
> $port->stopbits(1);
> $port->handshake('on');
> #$port->handshake("xoff");
> $port->buffers(4096, 4096);
> $port->stty_icrnl(1)     || die "failed setting convert cr to new line";
> $port->user_msg(1);           # misc. warnings
> $port->error_msg(1);          # hardware and data errors
> $port->debug(1);              # debug on at 0, 1 otherwise
> #$port->read_const_time(500); # const time for read (milliseconds)
> $port->read_char_time(0);
> $port->write_settings;
>
> # print port configuration
> my @data_opt = $port->parity; # list context
> print "\nData Bit Options: ";
> foreach $a (@data_opt) { print " $a"; }
>
> # begin reading serial port
> #$port->write("\nBegin perl serial listener\n");
>
> while (1) {
>   my $char = $port->lookfor();
>     if ($char) {
>         print "$char\n";
>     }
> #  $port->lookclear; # needed to prevent blocking
>   }
>
> ​Any help welcome 😁
>
> Merci
>
> PK​
>
>
> --
>       |\      _,,,---,,_           Patrice KARATCHENTZEFF
> ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:patrice.karatchentzeff at gmail.com
>      |,4-  ) )-,_. ,\ (  `'-'      http://p.karatchentzeff.free.fr
>     '---''(_/--'  `-'\_)
>



-- 
      |\      _,,,---,,_           Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:patrice.karatchentzeff at gmail.com
     |,4-  ) )-,_. ,\ (  `'-'      http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'\_)
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://listes.mongueurs.net/mailman/private/perl/attachments/20170316/7a8d2e2f/attachment.html>


Plus d'informations sur la liste de diffusion Perl