begin process at 2012 05 29 23:14:47
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

Lecture port série et Timeout sous linux.


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Lecture port série et Timeout sous linux.

vendredi 31 mars 2006 à 17:36:34 | Lecture port série et Timeout sous linux.

olivier857

Membre Club
Bonjour à tous,

Voilà je viens de développer un prog pour linux qui me permet de lire le en mode non canonique caractère par caractère le contenu de mon port série. (sur le port série et brancher un lecteur de carte à puce est le but et de récupérer le numéro des cartes qui se badge).

le programme tourne, ca marche nickel. mais j'aimerai bien maintenant ajouter une gestion de timeout. pour cela j'ai du mal a m'orienter. il faut je crois utiliser le VTIME du termios et bricoler avec le retour du read() mais je ne sais pas vraiment comment mi prendre. Sachant que entre chaque carctère on va dire qu'il ne faut pas dépasser 5 ms par exemple.

Et autre chose je cherche également a pouvoir stopper le programme par l'appui sur une touche du clavier, sans avoir a valider celle-ci comme avec getchar(). Je crois savoir que kbhit() fait ca sous windows mais ne fonctionne pas sous linux.

Merci d'avance.

Voici mon code :

[code]#include <termios.h>     /*  port série  */
#include <sys/fcntl.h>   /*    open()    */
#include <unistd.h>      /*    close()   */
#include <stdio.h>       /* lib standard */

#define PORT "/dev/ttyS0"

#define FALSE 0
#define TRUE 1

int main () {
 
  int stop=FALSE;
  int fd;
  int i,j,num_int;
  char recup_port[30],num_str[30];
  char c;
  struct termios  termios_p;
 
  /* Ouverture de la liaison série */
  fd = open(PORT, O_RDWR | O_NOCTTY);
  if (fd <0) {perror(PORT); exit(-1); }
 
  /*********************   Configuration du port serie   *********************/
  /* 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] = 1;                                                 //
  /* Sauvegarde des nouveaux parametres */                                   //
  tcsetattr(fd,TCSANOW,&termios_p);                                          //
  /***************************************************************************/
 
  /* Boucle de lecture du port */
  while(stop==FALSE){
 
    /* Vide le buffer */
    tcflush(fd, TCIFLUSH);
   
    /* Initialise le caractère et le compteur de caractère */
    c='\0';
    i=0;
   
    while((c!=0x0a) & (stop==FALSE)){
      /* Récupère un caractère */
      read(fd, &c, 1);
      printf("%c\n",c);
     
      /* Concatène le caractère dans le string recup_port */
      recup_port[i]=c;
      i++;
     
      if (i>sizeof(recup_port)-1){
        printf("Erreur de lecture carte : trop de caractère\n");
        stop=TRUE;
      }
    }
   
    if (!stop){
      /* Ajoute le 0 de fin de chaîne */
      recup_port[i]=0;
     
      /* Récupère le numéro de carte au format entier */
      strncpy(num_str,recup_port,i-3);
      num_int=atoi(num_str);
      printf("Numéro de carte = %d\n",num_int);      
     
      /* Tempo : évite d'endormir le programme de lecture sur la même carte */
      sleep(2);
    }
  }

/* Fermeture de la liaion serie */
close(fd);  

return 0;

}
[/code]


Cette discussion est classée dans : lecture, port, caractère, fd, termios


Répondre à ce message

Sujets en rapport avec ce message

Access en lecture et en écriture d'un port. [ par Philipin_Alain ] Est il encore possible avec C++ sous wintNT d'accéder à un registre quelconque. Je pense que les instructions "inport" et "outport" ne fonctionne pas ecriture/lecture Port série [ par bryg ] Salu, Voila je dois exploiter le port série de mon Pc sous win 2000 pour recevoir et envoyer des données comment faire ?Si quelqu'un aurai un program ecriture/lecture Port série VC++ [ par bryg ] Salut,La prog c pas mon fort je recherche desésperement un exemple de programme pour ecrire et lire sur mon port série sous windows 2000 avec VC++.Mer ecriture/lecture Port série VC++ [ par bryg ] Salut,La prog c pas mon fort je recherche desésperement un exemple de programme pour ecrire et lire sur mon port série sous windows 2000 avec VC++.Mer Lecture d'un port serie (RS232) sous LINUX [ par DjBouch ] Je suis en BTS informatique industriel et mon projet consiste à lire les trames d'une station météo (wmr918) à travers un port série (RS232) sous Linu lecture sur le port usb [ par Draven ] je souhaite branche une webcam sur le port usb et faire la lecture de ce que transmet la webcam. mais je sais pas koment lire le port usb.alors si vou pb avec lecture sur port COM bloquant !! [ par jujunio ] Bonjour, J'ai réalisé une appli en MFC et lorsque je clic sur un bouton, il y a une lecture sur un des ports com du PC qui est lancée. Le PB c'est que URGENT Lecture du port paralelle [ par pirate75000 ] J'ai essayer je pense la plupart des dll pour lire les broche 2 a 9 du port paralelle, Data 1 a data 8Elles fonctionnaient bien sur mon ancien ordinat Lecture d'UN SEUL caractère ? [ par judi_kl ] Bonjour !C'est mon premier message alors pour fêter ça j'ai brisé une bouteille de champagne sur mon pc ... ne le faites pas ça crée pleins de problèm lecture du port USB [ par peb69 ] Bonjour, je souhaite lire les données sur un port USB. En faite j'ai crée une interface qui se branche sur le port USB, et je souhaite lire les inform


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,388 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales