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 :
Merci pour votre aide
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
Partager