Bonjour tt le monde,

J'ai besoin de vos aides si c possible SVP.

Je suis entrain de programmer un petit code qui communique avec une carte électronique (carte de comptage de puissance) pour récupérer les valeurs mesurées.
La communication se fait sur le port UART. Le problème que je n'arrive pas à récupérer le buffer de ReadFile.
Sachant que j'ai branché un oscillo lorsque j'ai lancé le programme pour voir ce qui se passe. Et comme j'ai dit l'envoie de la trame s'effectue correctement et sur l'oscillo j'arrive à visualiser le message qui doit être retournée
mais mon programme affiche: Buffer vide.
J'arrive pas à trouver ma faute. Si quelqu'un pourra m'aider SVP.

Merci d'avance
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
 
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <winbase.h>
#include <conio.h>
#include <string.h>
 
 
void main(void)
{
    int Erreur;
 
 
 
    Erreur = InitCom("\\\\.\\COM50", "Aucune", "9600", "8", "1");
    if (Erreur!=0) //périphérique initialisé correctement
    {
        printf("périphérique initialisé correctement \n");
          //Envoie de la chaine
        EnvoiChainePort("82 FF FF FF", "\\\\.\\COM50");
 
        // recevoir le chaine lus
        RecevoirPort ("\\\\.\\COM50");
 
 
 
    }
    else
    {
         printf("Erreur lors de la configuration %d. \n", GetLastError());
    }
 
}
 
             /*Configuration du port série */
int InitCom( char *pcCommPort, char *Parite, char *Vitesse, char *TailleData, char *StopBit)
{
 
    //Initialisation
    DCB dcb;
    HANDLE hCom;
    BOOL fSuccess; // Tout est bien passé
 
    //Ouverture du port Comm
    hCom= CreateFile ( pcCommPort,
                      GENERIC_READ|GENERIC_WRITE, //accés lecture/ecriture
                      0, //pas de partage possible du port une fois ouvert
                      NULL, //pas d'héritage
                      OPEN_EXISTING, //doit etre open_existing
                      0, // pas d'overlopped I/O
                      NULL //hTemplate doit etre null
                 );
    // Vérifier si handle ouvre correctement
    if (hCom ==INVALID_HANDLE_VALUE)
    {
        //Manipuler l'erreur
        printf("Create file failed with error %d\n", GetLastError());
        return (1);
 
    }
    //Lecture de configuration initiale
    fSuccess = GetCommState (hCom, &dcb);
    if (!fSuccess)
    {
 
         //Manipuler l'erreur
        printf("GetCommState failed with error %d\n", GetLastError());
        return (2);
 
    }
    //Configuration du port
    dcb.BaudRate= atoi(Vitesse); // gestion de vitesse . atoi:Convertir String to integer
    dcb.ByteSize= atoi(TailleData); //gestion de la taille
    /*Gestion de la partité*/
    if (strcmp (Parite, "Aucune")==0) //strcmp : si égaux renvoie 0
        dcb.Parity=NOPARITY; // pas de parité
    if (strcmp (Parite, "Paire")==0)
        dcb.Parity=EVENPARITY;
    if (strcmp (Parite, "Impaire")==0)
        dcb.Parity=ODDPARITY;
    /* Gestion bit de Stop*/
    if (strcmp (StopBit, "1")==0)
        dcb.StopBits= ONESTOPBIT; // 1 bit stop
    if (strcmp (StopBit, "1.5")==0)
        dcb.StopBits= ONE5STOPBITS; // 1.5 bit stop
    if (strcmp (StopBit, "2")==0)
        dcb.StopBits= TWOSTOPBITS; // 2 bit stop
 
    //Configurer le port
    fSuccess = SetCommState(hCom, &dcb);
    if (!fSuccess)
    {
        //Manipuler l'erreur
        printf("SetCommState failed with error %d\n", GetLastError());
        return (3);
    }
    //Fermer le port
    CloseHandle(hCom);
    return (fSuccess);
    }
 
 /*Ecriture sur un port série */
 
 
int EnvoiChainePort(char *chaine, char *pcCommPort)
{
 
 
    HANDLE hCom;
    BOOL fSuccess;
    int NbOctet;
 
    unsigned long nBytesWrite;
 
 
 
    // Ouverture du port de communication
    hCom= CreateFile ( pcCommPort,
                      GENERIC_READ|GENERIC_WRITE, //accés lecture/ecriture
                      0, //pas de partage possible du port une fois ouvert
                      NULL, //pas d'héritage
                      OPEN_EXISTING, //doit etre open_existing
                      0, // pas d'overlopped I/O
                      NULL //hTemplate doit etre null
                 );
 
 
    NbOctet= strlen(chaine);
    //Ecrire dans le fichier
    WriteFile(hCom,chaine, 4, &nBytesWrite, NULL);
    //Fermer le handle de Com
    CloseHandle(hCom);
 
    return fSuccess;
 
 
}
 
 
                /* Lecture sur un port série */
 
 
BOOL RecevoirPort (char *pcCommPort)
{
   DCB dcb;
   HANDLE hCom;
   BOOL fSuccess;
   BOOL bResult;
   COMMTIMEOUTS tTimeout;
  char *inBuffer="NULL";
   int TimeoutRead;
   unsigned long nBytesRead;
 
 
 
 
 
 
   // Initialisation des variables
   inBuffer= malloc(200); // Réservation mémoire pour le buffer de récéption
   nBytesRead=0;
   // Ouverture du port de communication
    hCom= CreateFile ( pcCommPort,
                      GENERIC_READ|GENERIC_WRITE, //accés lecture/ecriture
                      0, //pas de partage possible du port une fois ouvert
                      NULL, //pas d'héritage
                      OPEN_EXISTING, //doit etre open_existing
                      0, // pas d'overlopped I/O
                      NULL //hTemplate doit etre null
                 );
 
    //Définition des timeouts
    TimeoutRead=500; // timeout de 1000ms
    tTimeout.ReadIntervalTimeout= MAXWORD;
    tTimeout.ReadTotalTimeoutMultiplier=0;
    tTimeout.ReadTotalTimeoutConstant=TimeoutRead;
    tTimeout.WriteTotalTimeoutMultiplier=0;
    tTimeout.WriteTotalTimeoutConstant=0;
 
    //Configuration du Timeout
    SetCommTimeouts(hCom, &tTimeout);
 
    /* Boucle d'attente de lecture des octets */
 
    bResult=ReadFile(hCom, inBuffer, 4096, &nBytesRead, NULL); //4096: maximum of bytes to be read
 
 
   if (nBytesRead<=0) // pas des octets lus
        printf("Buffer est vide: %s", inBuffer);
   else
 
        printf(" Chaine reçue est : %s", inBuffer);  //Retourner la choine reçue.
 
    //fermer le port
    CloseHandle(hCom);
    //Libérer la mémoire
    free(inBuffer);
    return (fSuccess);
}