HELP!!!probleme programmation port serie win32
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

HELP!!!probleme programmation port serie win32



  1. #1
    inviteac751535

    HELP!!!probleme programmation port serie win32


    ------

    bonsoir a tous et toutes

    donc voila j'essaie depuis peu de programmer le port serie avec win32 en C.
    mais bon je veux fairre une petite appli en utilisant l'overlapped. mais voila ca ne marche pas.
    Je respecte portant tout ce que me dit le msdn et les sites sur le net concernant le port serie en overlapped.

    en bref ca ne bloque pas mais je n'ai pas de polling sur le port a la lecture ei vient directement me donner la valeur de mon lpbuf...meme vide.
    alors voila je sollicte votre precieuse aide car je galerrrreeeeeeeeee

    voici le code
    Code:
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    
    #define RX_SIZE         4096    /* taille tampon d'entrée  */
    #define TX_SIZE         4096    /* taille tampon de sortie */
    #define MAX_WAIT_READ   500    /* temps max d'attente pour lecture (en ms) */
    
    bool ReadCom() ;
    int _tmain(int argc, _TCHAR* argv[])
    
    {	
    		
    	COMMTIMEOUTS g_cto =
    	{
        MAX_WAIT_READ,  /* ReadIntervalTimeOut          */
        0,              /* ReadTotalTimeOutMultiplier   */
        MAX_WAIT_READ,  /* ReadTotalTimeOutConstant     */
        0,              /* WriteTotalTimeOutMultiplier  */
        0               /* WriteTotalTimeOutConstant    */
    	};
    	DCB g_dcb =
    	{
        sizeof(DCB),        /* DCBlength            */
        9600,               /* BaudRate             */
        TRUE,               /* fBinary              */
        FALSE,              /* fParity              */
        FALSE,              /* fOutxCtsFlow         */
        FALSE,              /* fOutxDsrFlow         */
        DTR_CONTROL_DISABLE, /* fDtrControl          */
        FALSE,              /* fDsrSensitivity      */
        FALSE,              /* fTXContinueOnXoff    */
        FALSE,              /* fOutX                */
        FALSE,              /* fInX                 */
        FALSE,              /* fErrorChar           */
        FALSE,              /* fNull                */
        RTS_CONTROL_DISABLE, /* fRtsControl          */
        FALSE,              /* fAbortOnError        */
        0,                  /* fDummy2              */
        0,                  /* wReserved            */
        0x100,              /* XonLim               */
        0x100,              /* XoffLim              */
        8,                  /* ByteSize             */
        NOPARITY,           /* Parity               */
        ONESTOPBIT,         /* StopBits             */
        0x11,               /* XonChar              */
        0x13,               /* XoffChar             */
        '?',                /* ErrorChar            */
        0x1A,               /* EofChar              */
        0x10                /* EvtChar              */
    	};
    
    	h_serialCOM = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL,
                            OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
        if(h_serialCOM == INVALID_HANDLE_VALUE)
        {
            printf("\nErreur lors de l'ouverture du port COM");
    		
        }
    
        /* affectation taille des tampons d'émission et de réception */
        SetupComm(h_serialCOM, RX_SIZE, TX_SIZE);
    
        /* configuration du port COM */
        if(!SetCommTimeouts(h_serialCOM, &g_cto) || !SetCommState(h_serialCOM, &g_dcb))
        {
            printf("\nErreur lors de la configuration du port COM");
            CloseHandle(h_serialCOM);
                }
    
        /* on vide les tampons d'émission et de réception, mise à 1 DTR */
        PurgeComm(h_serialCOM, PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT);
        EscapeCommFunction(h_serialCOM, SETDTR);
    
    	ReadCom();
    
    	return 0;
    }
    bool ReadCom() 
    {
    	DWORD dwRead;
    	char lpBuf[50]={0};
    	bool fres=false;
    	bool fWaitingOnRead = false;
    	OVERLAPPED osReader = {0};
    	// Create the overlapped event. Must be closed before exiting
    // to avoid a handle leak.
    	osReader.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
    	if (osReader.hEvent == NULL)
    	return false;
    // Error creating overlapped event; abort.
    	
    	do
    	{if (!fWaitingOnRead) 
    		{
    		// Issue read operation.
    		if (ReadFile(h_serialCOM, lpBuf, 1, &dwRead, &osReader)==false) 
    			{
    			if (GetLastError() != ERROR_IO_PENDING) // read not delayed?
    			// Error in communications; report it.
    			printf ("erreur de com");
    			
    			else
    			fWaitingOnRead = true;//signaled
    			}
    	else {
    			// read completed immediately
    			printf("succes reception :%s",lpBuf);
    			fres=true;
    		 }
    		}	
    
    	if (fWaitingOnRead) 
    		{
    		DWORD dwRes = WaitForSingleObject(osReader.hEvent, 500);
    		switch(dwRes)
    			{
    // Read completed.
    			case WAIT_OBJECT_0:
    			if (!GetOverlappedResult(h_serialCOM, &osReader, &dwRead, FALSE))
    			// Read completed successfully.
    			printf("\n succes reception :%s",lpBuf);
    			// Reset flag so that another opertion can be issued.
    			fWaitingOnRead = false;
    			fres = true;
    			break;
    
    			case WAIT_TIMEOUT:
    			printf("\n time out");
    			
    			// Operation isn't complete yet. fWaitingOnRead flag isn't
    			// changed since I'll loop back around, and I don't want
    			// to issue another read until the first one finishes.
    			//
    			// This is a good time to do some background work.
    			fres = false;	
    			break;
    
    			default:
    			// Error in the WaitForSingleObject; abort.
    			// This indicates a problem with the OVERLAPPED structure's
    			// event handle.
    			printf("\n DEFAULT");
    			fres = false;
    			break;
    			}
    		}
    	}
    	while(fres=false);
    
    }
    merci d'avance pour votre aide

    -----

  2. #2
    inviteeeb6425e

    Re : HELP!!!probleme programmation port serie win32

    je pence que WINDEV est plus simple et garantie que c
    pour louverture du port avec windev tu n'as pas besion plus qu'une simple instruction qui est la fonction: souvre(param1,param2,...)
    les parametres de la fonction sont le numero du port nbre de bauds la durée d'attente...

  3. #3
    inviteeeb6425e

    Re : HELP!!!probleme programmation port serie win32

    voici les parametres de sOuvre en detail:
    <Résultat>=sOuvre(<Numéro de port>, <Taille du buffer d'entrée>, <Taille du buffer de sortie> [, <Durée d'attente> [, <Gestion des événements>]])




    <Résultat> : Booléen

    Vrai si le port a été ouvert et initialisé, Faux dans le cas contraire.

    <Numéro de port> : Entier

    Numéro du port série concerné : 1, 2, 3, ... 32 pour COM1, COM2, COM3, ... COM32.

    Numéro de port parallèle concerné : -1, -2, -3 ou -4 pour LPT1, LPT2, LPT3 ou LPT4.

    <Taille du buffer d'entrée> : Entier

    Taille en octets du buffer d'entrée (32768 au maximum).

    <Taille du buffer de sortie> : Entier

    Taille en octets du buffer de sortie (32768 au maximum).

    <Durée d'attente> : Entier

    Durée (exprimée en millisecondes) accordée pour la lecture ou l'écriture d'un caractère. Ce paramètre permet d'éviter un blocage lors d'un problème de lecture ou d'écriture sur le port d'impression. Lorsque la <Durée d'attente> est expirée, la fonction de lecture ou d'écriture renvoie 0. La valeur par défaut de ce paramètre est définie au niveau du système.
    Pour utiliser la durée d'attente définie par défaut, utilisez la constante sTimeoutDéfaut.

    <Gestion des événements> : Booléen

    Vrai pour détecter des événements sur le port série, Faux (valeur par défaut) pour ne pas gérer les événements. Ces événements pourront être gérés par la fonction sEvénement.

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/04/2009, 17h24
  2. Probleme programmation d'un port parallele
    Par invite0f7a3b8d dans le forum Électronique
    Réponses: 9
    Dernier message: 11/08/2008, 10h18
  3. Problème port série RS232
    Par RomainD2 dans le forum Électronique
    Réponses: 1
    Dernier message: 02/05/2008, 20h37
  4. programmation port serie pc
    Par invitefc1671e3 dans le forum Électronique
    Réponses: 1
    Dernier message: 15/05/2007, 17h18
  5. Programmation du port série
    Par invitedd813fde dans le forum Électronique
    Réponses: 0
    Dernier message: 08/12/2005, 14h10