IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

[API win32 sans MFC] Evenement: arriv�e de donn�es port s�rie


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �prouv� Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par d�faut [API win32 sans MFC] Evenement: arriv�e de donn�es port s�rie
    Bonjour � tous,

    Je travaille avec embedded UNICODE pour d�velopper pour windows CE.
    J'arrive � r�cuperer les donn�es arriv�es sur le port COM en cliquant sur un bouton,
    Or j'aimerais r�cuperer l'evenement d'arriv�es de donn�es pour automatiser la chose.

    J'ai essay� en bricolant de moi m�me, je n'y suis pas arriv�, je viens donc de prendre ce code:
    http://c.developpez.com/faq/vc/?page...WithSerialPort

    Mais il y a des erreurs du style:
    error C2065: 'BuildCommDCB' : undeclared identifier
    error C2065: 'GetOverlappedResult' : undeclared identifier
    error C2065: 'AfxBeginThread' : undeclared identifier

    Comme s'il manquait un biblioth�que... Mais tout devrait se trouver dans windows.h qui est d�j� incluse.

    Pourquoi ce code ne marche pas ?
    Est ce que quelqu'un peut me dire comment (simplement) attacher un evenement au port COM ?

    Merci d'avance.

    Voici mon code bricol� qui ne marche pas:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    int ouvrirPort(int numport) { // Retourne 1 en cas de succès
        //char szPort[16];
    	TCHAR szPort[15];
        //sprintf(szPort, "\\\\.\\COM%d:", numport);//modifie pour prendre les port com>9
    	wsprintf(szPort, _T("COM%d:"), numport);
    	hPort = CreateFile(
    		(LPCTSTR)szPort,							//Pointer to the name of the port
    		GENERIC_READ|GENERIC_WRITE,		//accès en lecture ou en écriture
    		0,                             //Share mode
    		NULL,                          //Pointer to the security attribute
    		OPEN_EXISTING,                 //Cela indique que l'instance sera créée si que le port existe
    		FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, //Port attributes
    		NULL);
     
    	if(hPort==INVALID_HANDLE_VALUE) {
    		return 0;
    	}
     
    	if(!m_Ov.hEvent)
            m_Ov.hEvent=CreateEvent(NULL,   // no security attributes
                                    FALSE,  // auto reset event
                                    FALSE,  // not signaled
                                    NULL    // no name
                                    );
     
        SetEvent(m_Ov.hEvent);
     
     
    	DCB PortDCB;
    	if (!GetCommState (hPort, &PortDCB)) { // Structure de configuration
    		return 0;
    	}
    	// mise à jour de la structure
    	PortDCB.DCBlength = sizeof (DCB); 
    	PortDCB.BaudRate = 9600; 
    	PortDCB.fBinary = TRUE; 
    	PortDCB.fParity = TRUE; 
    	PortDCB.fOutxCtsFlow = FALSE; 
    	PortDCB.fOutxDsrFlow = FALSE; 
    	PortDCB.fDtrControl = DTR_CONTROL_ENABLE; 
    	PortDCB.fDsrSensitivity = FALSE; 
    	PortDCB.fTXContinueOnXoff = TRUE; 
    	PortDCB.fOutX = FALSE; 
    	PortDCB.fInX = FALSE; 
    	PortDCB.fErrorChar = FALSE; 
    	PortDCB.fNull = FALSE; 
    	PortDCB.fRtsControl = RTS_CONTROL_ENABLE;
    	PortDCB.fAbortOnError = FALSE; 
    	PortDCB.ByteSize = 8; 
    	PortDCB.Parity = NOPARITY; 
    	PortDCB.StopBits = ONESTOPBIT; 
     
    	//Renvoie des nouvelles informations dans le registre de votre port série
    	if (SetCommState (hPort, &PortDCB)) {
    		GetCommTimeouts(hPort,&m_ComTimeouts);
    		m_ComTimeouts.ReadIntervalTimeout = 0xFFFFFFFF;
    		m_ComTimeouts.ReadTotalTimeoutMultiplier = 0;
    		m_ComTimeouts.ReadTotalTimeoutConstant = 0;
    		m_ComTimeouts.WriteTotalTimeoutMultiplier = 0;
    		m_ComTimeouts.WriteTotalTimeoutConstant = 10000;
    		if (!SetCommTimeouts(hPort,&m_ComTimeouts))
    			return 0;
    		memset(&m_OverlappedRead,0,sizeof(OVERLAPPED));
    		m_OverlappedRead.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
    		memset(&m_OverlappedWrite,0,sizeof(OVERLAPPED));
    		m_OverlappedWrite.hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
    		if (m_OverlappedRead.hEvent==NULL || m_OverlappedWrite.hEvent==NULL)
    			return 0;
    		if(m_OverlappedRead.hEvent!=NULL) 
    			CloseHandle(m_OverlappedRead.hEvent);
    		if(m_OverlappedWrite.hEvent!=NULL) 
    			CloseHandle(m_OverlappedWrite.hEvent);
     
    		// PRM2: Indique que l'on va détecter la réception (entrée de type DWORD)
    		SetCommMask(hPort,EV_RXCHAR); // définit les évènements pour lesquels ont va réagir par rapport à notre instance
    		return 1;
    	} else
    		return 0;
     
    }

  2. #2
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    salut,
    h� bien c'est une grande question !
    Apparemment BuildCommDCB et GetOverlappedResult ne sont pas support�es par WinCe du coup pas de gestion du mode Overlapped (asynchrone) possible.

    je n'ai pas trouv� l'equivalent de ces fonctions, avis aux amateurs ....

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Par d�faut
    Salut,

    Il y a un article la dessus sur CodePPC ici.

  4. #4
    Membre �prouv� Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par d�faut
    Bonjour farscape,

    C'est quoi la grosse diff�rence entre sychrone et asynchrone?
    Je vois partout que asynchrone c'est mieux, mais jamais de courte d�finition.

    Bonjour VitamineC,

    Cet article, je le connais par coeur, en ce moment, je passe mes jours et mes nuits sur ce site.
    Seulement, si �a m'a beaucoup aid� pour lire les donn�es... Il n'y a rien concernant les evenements li�s aux ports COM.

    J'ai lu que WaitCommEvent savait le g�rer mais comment l'utiliiser ?

    Merci.

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Par d�faut
    WaitCommEvent est bloquant donc il faut le placer dans un thread et fixer, probablement, le masque sur EV_RXCHAR si tu ne veux gerer que la lecture.

  6. #6
    Membre �prouv� Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par d�faut
    Oui, je m'�tait aper�u qu'il �tait bloquant...
    Ce comportement me d�range vraiment !

    Seulement, je ne sais pas comment fonctionnent les threads...

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    119
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 119
    Par d�faut
    Pour les threads en eVC : ici
    AfxBeginThread fonctionne avec les mfc...

  8. #8
    R�dacteur
    Avatar de farscape
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes C�te d'Azur)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par d�faut
    la transmission asynchrone n'est pas bloquante :
    Citation Envoy� par faq
    les op�rations sont plac�es en file d'attente par le syst�me et trait�es d�s que possible.
    le hic c'est que sans cette fonction (GetOverlappedResult) je ne sais pas comment faire ...
    en mode synchrone tant que les caract�res ne seront pas envoy�s le programme attend ....
    Pour la r�ception la possibilit� de perdre des caract�res est plus �lev�e.
    Alors soit il y a une grosse astuce, soit ce n'est pas possible.
    Mais le sujet m'intrigue car tu n�es pas le premier � me poser le probl�me...

Discussions similaires

  1. Faire appel aux API Win32 sans IAT
    Par yannguibet dans le forum x86 32-bits / 64-bits
    R�ponses: 8
    Dernier message: 01/08/2008, 16h21
  2. [API Win32 sans MFC] pb BuildCommDCB
    Par dacid dans le forum Biblioth�ques
    R�ponses: 3
    Dernier message: 24/05/2006, 18h04
  3. [API Win32 sans MFC] Lecture port s�rie: thread bloqu�
    Par dacid dans le forum Biblioth�ques
    R�ponses: 2
    Dernier message: 24/05/2006, 13h34
  4. [API Win32 sans MFC] Ajouter et r�cuperer du texte d'un EDIT
    Par dacid dans le forum Biblioth�ques
    R�ponses: 5
    Dernier message: 17/05/2006, 17h45
  5. [API win32 sans MFC] Cr�ation textbox et evenement bouton
    Par dacid dans le forum Biblioth�ques
    R�ponses: 2
    Dernier message: 17/05/2006, 11h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo