Bonjour,

Je programme une classe pour gérer le port série mais j'ai un petit problème : ma fonction recevoir n'attend pas les données... Elle me dit tout de suite que le buffer est vide. Est-ce que c'est normal ??

Les timeouts ne permettent pas de faire "attendre" la fonction ReadFile un certain temps avant de dire que le buffer est vide ??

Je fais mes test avec un bouchon qui me permet de recevoir les données que j'envoi (il marche, en faisant une pause avant "recevoir" tout marche bien...).


fonction recevoir :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
1.  // Permet de recevoir des octets sur le liaison série
2.  int LiaisonSerie::recevoir(void * telBuffer, unsigned int telleTailleBuffer)
3.  { 
4.      COMSTAT stat; 
5.      DWORD errors; 
6.      unsigned int nbCarALire = 0; 
7.      unsigned long nbCarLus = 0; 
8.      int codeRetour = EXIT_SUCCESS;
 
9.     if(handleCom == NULL) 
10.    { // si la connexion n'est pas établie
11.         messageErreur(Err_Connexion);
12.         return Err_Connexion;
13.    }  
 
14.    //Pour connaitre le nombre d'octets dans le buffer d'entrée 
15.    ClearCommError(handleCom,&errors,&stat); 
16.    nbCarALire = stat.cbInQue; 
 
17.    if(nbCarALire<=0)
18.    { // si le buffer est vide
19.         messageErreur(Err_Buffer_Vide);
20.         return Err_Buffer_Vide;
21.    }
 
22.    if(nbCarALire <= telleTailleBuffer)
23.        nbCarALire = telleTailleBuffer;
24.    else
25.        codeRetour = Reception_Non_Finie;
 
26.    //On effectue la lecture si il y a des caractères présents 
27.    if(ReadFile(handleCom,telBuffer,nbCarALire,&nbCarLus,NULL)==0) 
28.    { // Echec
29.        messageErreur(Err_Reception);
30.        return Err_Reception;
31.    } 
 
32.    return codeRetour; // EXIT_SUCCESS si la reception est finie, sinon Reception_Non_Finie
33.}// recevoir
Merci pour votre aide