Bonjour à tous
J'aurai besoin d'une aide en toute urgence concernant le dialogue avec un microcontroller via le port USB.
J'ai résussi à faire le "CreateFile" me permettant de créer le Handle avec mon appareil.
J'ai une fonction WriteFile qui, je pense, marche.
Le problème est la fonction ReadFile. Lecture et ecriture doivent se faire de façon asynchrone, ce qui nécessite l'utilisation d'une structure overlapped.
Je programme sous dev-cpp. Peut être le ReadFile est-il différent sous ce logiciel de programmation?
voici mon code pour le WriteFile, qui apparemment marche (je n'ai en fait pas de moyen de vérifier actuellement):
nBytesWritten=strlen(buffer2);
OVERLAPPED osWrite = {0};
DWORD dwWritten;
DWORD dwRes;
osWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (osWrite.hEvent == NULL)
printf("Erreur 1\n");
if (!WriteFile(g_hCOM, buffer2, nBytesWritten, &dwWritten, &osWrite)) {
if (GetLastError() != ERROR_IO_PENDING) {
printf("Erreur 2\n");
}
else
dwRes = WaitForSingleObject(osWrite.hEvent, INFINITE);
switch(dwRes)
{
case WAIT_OBJECT_0:
if (!GetOverlappedResult(g_hCOM, &osWrite, &dwWritten, FALSE))
printf("Erreur 3\n");
else {
if (dwWritten != nBytesWritten) {
printf("Erreur 4\n");
}
else
{
printf("Envoi en cours...\n");
}
break;
default:
printf("Erreur 5\n");
break;
}
}
}
else {
if (dwWritten != nBytesWritten) {
printf("Erreur 6\n");
}
else
printf("Envoi en cours...\n");
}
CloseHandle(osWrite.hEvent);
et voici mon code pour le ReadFile qui, lui, me renvoie comme erreur lorsque je fais GetLastError: erreur n°1, c'est à dire que je n'utiliserai pas la bonne fonction (id es ReadFile):
nBytesRead=255;
OVERLAPPED osRead = {0};
DWORD dwRead;
DWORD dwResR;
int* pBytesRead=0;
osRead.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (osRead.hEvent == NULL)
{printf("Erreur 7\n");}
if (!ReadFile(g_hCOM, buffer, nBytesRead, (DWORD*)pBytesRead, &osRead)) {
printf("Erreur %d\n",GetLastError()); //c'est cette ligne qui me renvoie erreur 1, c'est à dire que ReadFile n'est pas appropriée
if (GetLastError() == ERROR_IO_PENDING) { WaitForSingleObject(g_hCOM, INFINITE);
if (GetOverlappedResult(g_hCOM, &osRead, (DWORD*)pBytesRead, FALSE)) {
printf("je suis dans l'overlapped..\n");
}
} else {
printf("Reception\n");
CloseHandle(osRead.hEvent);
}
}
Comment puis je faire marcher mon ReadFile?
Merci d'avance
Olivier