Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2401 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C]problème read sur port série

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C]problème read sur port série

n°682749
Longfield
Posté le 24-03-2004 à 14:15:41  profilanswer
 

Hello,
 
J'essaie de lire et écrire sur le port série (/dev/ttySA0) de mon ipaq qui tourne la distribution Familiar. J'arrive bien à écrire, ça apparait nickel sur la console, mais par contre l'appel à read ne marche jamais : soit il retourne une erreur (-1) soit il ne retourne rien !!! Même quand je l'appelle avec read(fd, answ, 0), il devrait selon la man page de read me retourner 0, et l'appel est bloquant !!!!
 
Voici le code :
 

Code :
  1. #include <termios.h>
  2. #include <stdio.h>
  3. #include <unistd.h>
  4. #include <fcntl.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <sys/signal.h>
  8. #include <sys/types.h>
  9. #include <errno.h>
  10. #define BAUDRATE B115200
  11. #define MODEMDEVICE "/dev/ttySA0"
  12. #define _POSIX_SOURCE 1 /* code source conforme à POSIX */
  13. #define FALSE 0
  14. #define TRUE 1
  15. int main(int argc, char **argv)
  16. {
  17.   int fd, res;
  18.   struct termios oldtio,newtio;
  19.   struct sigaction saio;        /* définition de l'action du signal */
  20.   char *buf, *answ;
  21.   __sigset_t aide;
  22.   buf = (char *) malloc (10*sizeof(char));
  23.   answ = (char *) malloc (10*sizeof(char));
  24.   /* ouvre le port en mode non-bloquant (read retourne immédiatement) */
  25.   fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY);
  26.   if (fd <0) {perror(MODEMDEVICE); exit(-1); }
  27.   tcgetattr(fd,&oldtio); /* sauvegarde de la configuration courante */
  28.   /*valeur pour lecture non canonique : on reçoit tjrs le même nbre de bits */
  29.    bzero(&newtio, sizeof(newtio));
  30.    newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
  31.    newtio.c_iflag = IGNPAR;
  32.    newtio.c_oflag = 0;
  33.    /* positionne le mode de lecture (non canonique, sans echo, ...) */
  34.    newtio.c_lflag = 0;
  35.    newtio.c_cc[VTIME]    = 0;   /* timer inter-caractères non utilisé */
  36.    newtio.c_cc[VMIN]     = 0;   /* read bloquant jusqu'à ce que 5 */
  37.                                   /* caractères soient lus */
  38.    tcflush(fd, TCIFLUSH);
  39.    tcsetattr(fd,TCSANOW,&newtio);
  40.    printf("je veux ecrire sur le port serie\n" );
  41.   buf = argv[1];
  42.   write(fd,buf,10);
  43.   printf("j'ai écrit %s\n", buf);
  44.   printf("je veux lire\n" );
  45.   res=read(fd,answ,0);
  46.   if (res == -1)
  47.    if (errno == EINTR) printf("read interrompu par le signal !!!\n" );
  48.   answ[res]=0;
  49.   printf("j'ai lu %d charactères: %s\n)",res, answ);
  50.   /* restaure les anciens paramètres du port */
  51.   tcsetattr(fd,TCSANOW,&oldtio);
  52.   return 0;
  53. }


 
Merci beaucoup !!!

mood
Publicité
Posté le 24-03-2004 à 14:15:41  profilanswer
 

n°683010
Longfield
Posté le 24-03-2004 à 16:43:26  profilanswer
 

cause du problème déteminée : Familiar fait un getty sur le même port que je veux lire ---> gros bordel ... en virant le getty, tout marche comme j'en ai envie !!!

n°683033
Taz
bisounours-codeur
Posté le 24-03-2004 à 17:03:43  profilanswer
 

buf = (char *) malloc (10*sizeof(char));  
 
c'est tellement mieux de mettre un cast inutile et un sizeof(char) qui encore heureux faudra toujours 1 char buf[10] étant définivement une solution de looser


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C]problème read sur port série

 

Sujets relatifs
probleme de sessions...[php] probleme upload fichier par formulaire
[ASP.NET] problème posting d'un formProbleme de broken pipe
[java] Probleme avec la classe AuthenticatorProblème de "static "
Probleme avec SDLprobleme librairie activeX tapi
Probleme de rafraichissement[C] Fonctions pour le port COM
Plus de sujets relatifs à : [C]problème read sur port série


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR