PB de liaison serie sous Windows ouverture port ou DCB

ludolechinois Messages postés 12 Date d'inscription mercredi 25 février 2004 Statut Membre Dernière intervention 27 février 2008 - 18 juin 2004 à 11:50
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 - 21 juin 2004 à 08:11
J'ai fais un petit prog avec une liaison serie au debut rien ne communique.Mais si je lance l hyperternimal avec 9600 bauds,pas de parite, un bit stop, pas de control de flux puis je ferme l hyperterminal et que je lance mon prog ca marche. Je pense que j'oublie un parametre utile dans le DCB voici un extrait de l'ouverture de port
Liaison_Serie::Liaison_Serie(char * com, DWORD vitesse, BYTE taille,
BYTE parite, BYTE stop, DWORD inque,DWORD outque)

{
/* Création du port */
hCom = CreateFile(com,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL);
/* Initialisation de la structure DCB */
if(hCom != INVALID_HANDLE_VALUE)
{
// Paramètres de la donnée DCB
GetCommState(hCom,& maStructure);
maStructure.BaudRate = vitesse;
maStructure.ByteSize = taille;
maStructure.Parity = parite;
maStructure.StopBits = stop;
if (parite==0)
{
maStructure.fParity = FALSE;
}
else
{
maStructure.fParity = TRUE;
}
maStructure.fDtrControl=1;
maStructure.fTXContinueOnXoff=1;
maStructure.fRtsControl=1;
maStructure.fAbortOnError=1;
maStructure.fOutxCtsFlow = FALSE;
maStructure.fOutxDsrFlow = FALSE;
maStructure.fOutX = FALSE;
maStructure.fInX = FALSE;
maStructure.fDsrSensitivity = FALSE;
maStructure.fBinary = TRUE;
maStructure.fNull = false; // n'élimine pas les caractère 0 (NULL)
maStructure.DCBlength = sizeof(maStructure);
SetCommState(hCom,& maStructure);
//Option : Fonction de lecture non bloquante
GetCommTimeouts(hCom,& test);
test.ReadIntervalTimeout = MAXDWORD;
test.ReadTotalTimeoutConstant = 0;
SetCommTimeouts(hCom,& test);
// Initialise la taille du buffer d'entree et de sortie
SetupComm(hCom,inque,outque);
// vider le comm des perturbation
PurgeComm(hCom,PURGE_TXCLEAR & PURGE_RXCLEAR);
}
else
{
MessageBox (NULL, "Erreur Ouverture Port Com1","",MB_OK);
}
}

1 réponse

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
21 juin 2004 à 08:11
Salut,
Si c'est bien dans le DCB, tu devrais trouver en comparant les DCB que tu obtiens quand ça ne marche pas et quand ne ça marche pas. Un point d'arrêt à l'appel de la fonction SetCommState et tu regardes.

Ken@vo
____________________
Code, Code, Codec !
0