Moi j'ai pas SerialController dans HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\MultifunctionAdapter\5\ quand je vais voir dans regedit.
Finalement je n'utilise pas la base de registre, je passe en revue tout les COM de 0 à 9 (je sais pas si c'est possible d'avoir un COM0 ?) en supposant que sur un pc on aura en général pas de COM supérieur à 9. Chez moi les COM disponible en ouvrant hyperterminal sont le 2, 3 et 5, j'ai abandonné d'essayer de comprendre...
J'ai modifié un code d'exemple de communication série trouvé sur le site (http://www.cppfrance.com/code.aspx?id=22441).
Puis je prends un échantillon de la chaine reçue et je cherche si elle contient une suite de caractère envoyé par le périphérique visé.
Voila le code (une partie) :
Code C/C++ :
int detectionCOM()
{
/* variables locales */
char buffer[64];
int nId, nChoice, nBytesWritten, nBytesRead;
// boucle de scan des différents port COM //
for (nId = 0; nId < 10; nId++)
{
// tentative d'ouverture //
printf("Ouverture et configuration du port COM%d...\r\n", nId);
if(OpenCOM(nId))
{
printf("...OK\r\n");
// recevoir des données //
printf("\r\n");
printf("Reception de donnees...\r\n");
if(ReadCOM(buffer, sizeof(buffer)-1, &nBytesRead))
{
buffer[nBytesRead] = '\0';
printf("%d octet(s) recu(s) :\r\n%s\r\n", nBytesRead, buffer);
if (strstr(buffer,"$IIVWR")!= NULL)
{
if (nId == 0) COM = "COM0:";
else if (nId == 1) COM = "COM1:";
else if (nId == 2) COM = "COM2:";
else if (nId == 3) COM = "COM3:";
else if (nId == 4) COM = "COM4:";
else if (nId == 5) COM = "COM5:";
else if (nId == 6) COM = "COM6:";
else if (nId == 7) COM = "COM7:";
else if (nId == 8) COM = "COM8:";
else if (nId == 9) COM = "COM9:";
printf("COM retenu : COM%d\r\n", nId);
CloseCOM();
break;
}
}
else
printf("Erreur lors de la reception.\r\n");
}
CloseCOM();
}
if (COM == NULL) COM = "COM1:";
}
Ça marche, mais je voudrais savoir si vous y voyez des incohérences ou des inepties vu que moi et la programmation c'est pas trop ça...