Bonjour à tous,
J'ai un problème au niveau de mon code de communication entre port com. Tout d'abord comme je n'ai qu'un pc portable (donc pas de port com) j'ai télécharger un logiciel qui me permet de créer des paires de ports com virtuels (par exemple COM1 et COM2) connectés entre eux, de voir leur état (fermés/ouverts), le nombre de bytes qu'ils émettent et reçoivent...
Quand j'exécute mon code j'arrive à voir que mon port COM1 à envoyer un certain nombre de bytes et que mon port COM2 a reçu ce même nombre de bytes.
Mais la fonction ReadFile lit 0 bytes.
Je n'arrive pas à voir mon erreur pourtant il y en a surement.
Merci d'avance pour votre aide.
Voila le code :
int RecevoirRS232(char *ChaineRecue,char *Port)
{
DCB dcb;
HANDLE hCom;
BOOL fSuccess;
BOOL bResult;
COMMTIMEOUTS tTimeout;
unsigned long nBytesRead;
int TimeoutRead;
int NbOctet;
/*-------------------------------------*/
/* Initialisation des variables */
/*-------------------------------------*/
BYTE*inBuffer[200]={0};
/*-----------------------------------------------*/
/* Ouverture du port de communication */
/*-----------------------------------------------*/
hCom = CreateFile(Port,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL
);
/*----------------------------------*/
/* Définition des timeouts */
/*----------------------------------*/
TimeoutRead = 500; // timeout de 500ms
tTimeout.ReadIntervalTimeout = MAXWORD;
tTimeout.ReadTotalTimeoutMultiplier = 0;
tTimeout.ReadTotalTimeoutConstant = TimeoutRead; // pas de time out = 0
tTimeout.WriteTotalTimeoutMultiplier = 0;
tTimeout.WriteTotalTimeoutConstant = 0;
// configurer le timeout
SetCommTimeouts(hCom,&tTimeout);
/*-------------------------------------------------------------*/
/* boucle d'attente de lecture des octets */
/* Sortie de la boucle par timeout par exemple, si */
/* l’on suppose le format de la trame reçu n’est */
/* variable. */
/*-------------------------------------------------------------*/
bResult = ReadFile(hCom,&inBuffer,199,&nBytesRead,NULL);
printf("ChaineRecue :%s",inBuffer);
if (nBytesRead==0) // il n'y a pas d'octets lus
{
sprintf(inBuffer, "%s", "Pas de donnee recue");
}
sprintf(ChaineRecue, "%s", inBuffer) ;
printf("ChaineRecue :%s",ChaineRecue); // Retourner la chaine recue
// fermer le port
CloseHandle(hCom);
// Libérer la mémoire
delete[] inBuffer;
return(fSuccess);
}