Bonjour, je suis en train de coder une application pour récupérer des données à partir d'un appareil Bluetooth par le port COM.
Ce dernier m'envoie une trame de 30 octets toutes les secondes. J'enregistre alors les trames reçues dans un fichier. Je reçois donc ca :
?Qb
ÿ?Qb
?ÿ?Qc
*?ÿ?Qd
...
ETC...ETC...
....
ùáÈ»ÙóûþþûîÙȺ¯ºãèº-Íp?ÿ?Q
gµÏÑÇÀ¶?·äãÐ??¯´¢àÔ|?ÿ?Q\
En fait le readFile, même si il me dit lire 30 octets, ne semble lire que la fin de la trame, puis lire un octet de plus a chaque passsage dans la boucle, jusqu'à arriver a 30 octets lus (la trame entiere donc) puis il raprt a un octet, etc...
Du coup je ne reçois entièrement qu'une trame sur 30 à peu près.
Voilà mon code :
Boucle principalewhile (triesLeft != 0)
{
char *data = new char[30];
retour = port->ReadStr(data, triesLeft);
......
}
Timeouts : GetCommState( hCommPort, &PortDCB );
GetCommTimeouts( hCommPort, &commtimeouts );
//initialisation du timeout
commtimeouts.ReadIntervalTimeout = 0;
commtimeouts.ReadTotalTimeoutMultiplier = 0;
commtimeouts.ReadTotalTimeoutConstant = 0;
commtimeouts.WriteTotalTimeoutMultiplier = 0;
commtimeouts.WriteTotalTimeoutConstant = 0;
SetCommTimeouts(hCommPort, &commtimeouts);
Fonction ReadStr.....
ReadFile(hCommPort,data,30,&dwNumBytesRead,NULL);
AfxMessageBox((int)dwNumBytesRead+" : "+wxT(data),MB_OK,0);
.....
Au niveau des timeouts j'ai essayé plusiuers solutions et j'ai le meme résultata donc ça doit venir d'ailleurs.
(A noter qu'en faisant un hyper terminal, les trames sont bien reçus sur le port COM)
Merci
