Bonjour,
Je cherche a comprendre comment inserer un timeout dans mon programme.
Ce programme utilise une structure termios pour aller lire en mode non canonique caractère par caractère ce qui passe sur mon port série via un read(). Je veux donc ajouter une verification de timeout entre la lecture de chaque caractère.
- Voici mon ouverture et configuration du port série :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| fd = open(PORT, O_RDWR | O_NOCTTY);
if (fd <0) {perror(PORT); exit(-1); }
/* Lecture des parametres courants */
tcgetattr(fd,&termios_p);
/* On ignore les BREAK et les caracteres avec erreurs de parite */
termios_p.c_iflag = IGNBRK | IGNPAR;
/* Pas de mode de sortie particulier */
termios_p.c_oflag = 0;
/* Liaison a 9600 bps avec 8 bits de donnees et une parite paire */
termios_p.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
/* Mode non-canonique avec echo */
termios_p.c_lflag = ECHO;
/* Caractères immediatement disponibles */
termios_p.c_cc[VMIN] = 1;
termios_p.c_cc[VTIME] = 0;
/* Sauvegarde des nouveaux parametres */
tcsetattr(fd,TCSANOW,&termios_p); |
Si j'ai bien compris je crois qu'il faut que je passe une valeur à termios_p.c_cc[VTIME] en ms, qui sera mon timeout.
termios_p.c_cc[VTIME]=10 //par exemple 10ms
- Et voici la lecture des caractères en simplifié :
1 2 3 4 5
| while(c!=0x0a) {
/* Récupère un caractère */
read(fd, &c, 1);
printf("%c\n",c);
} |
Ici je pense qu'il faut que je test le retour du read et qu'en fonction de celui-ci je traite le résultat.
Voilà j'ai donc quelques idées mais je n'y arrive pas, je ne sais pas trop comment m'y prendre.
Merci d'avance de votre aide !
Partager