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 :

[Windows CE] classe SerialCom


Sujet :

MFC

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut [Windows CE] classe SerialCom
    Bonsoir à tous.

    j'avais réalisé une IHM sur PC que l'on me demande aujourd'hui de porter sur Windows CE. Mon IHM utilise la classe CCom de Farscape ; mais pour le portage je dois remplacer deux fonctions qui ne sont pas présentes.

    méthode PortSet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (BuildCommDCB(szBaud, &m_dcb)) result=SetCommState(m_hCom, &m_dcb);
    remplacé par :
    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
    //parser "light"... BuildCommDCB isn't available on WinCE
    		switch(baudrate) {
    			case 110:
    			case 300:
    			case 600:
    			case 1200:
    			case 2400:
    			case 4800:
    			case 9600:
    			case 14400:
    			case 19200:
    			case 38400:
    			case 57600:
    			case 115200:
    			case 256000:
    				m_dcb.BaudRate = baudrate;
    				break;
    			default:
    				m_dcb.BaudRate = 57600; // default value
    		}
    		switch(parity) {
    			case 1:
    			case 2:
    			case 3:
    			case 4:
    				m_dcb.fParity = true;
    				m_dcb.Parity = parity;
    				break;
    			case 'O':
    			case 'Y':
    				m_dcb.fParity = true;
    				m_dcb.fParity = 1; // default
    				break;
    			case 0:
    			case 'N':
    			default:
    				m_dcb.fParity = false;
    				m_dcb.Parity = 0;
    				break;
    		}
    		switch(wordlength) {
    			case 5:
    			case 6:
    			case 7:
    			case 8:
    				m_dcb.ByteSize = wordlength;
    				break;
    			default :
    				m_dcb.ByteSize = 8;
    				break;
    		}
    		switch(stopbits) {
    			case 1:
    				m_dcb.StopBits = 0;
    				break;
    			case 2: 
    				m_dcb.StopBits = 2;
    				break;
    			default :
    				m_dcb.StopBits = 0; // 1 stop bit by default
    				break;
    		}
    		result=SetCommState(m_hCom, &m_dcb);
    par contre, je bloque dans la méthode ReadBuffer : je ne sais pas comment remplacer l'appel suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetOverlappedResult( m_hCom, &m_Ov, &countread, TRUE )
    si vous aviez une idée... je suis preneur ! ou une autre classe éprouvée sur CE...
    merci par avance

  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,
    tu n'es pas le premier à m'en faire la remarque ,
    l'api32 GetOverlappedResult est absente de windows CE, ce qui est un vrai probléme car je ne connais pas d"equivalent pour gérer une communication asynchrone
    Donc si quelqu'un à une idée je suis preneur...

  3. #3
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    est-ce qu'elle est simplement absente des .h et .lib ou aussi dans la DLL ?

    t'as essayé de la charger dynamiquement à partir de kernel32.dll ?

  4. #4
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    après une courte recherche, il semblerait que CE ne supporte pas l'overlapped I/O.
    Une solution émise serait de créer son propre driver

  5. #5
    Membre très actif
    Profil pro
    Développeur indépendant
    Inscrit en
    Août 2004
    Messages
    374
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : Développeur indépendant
    Secteur : Transports

    Informations forums :
    Inscription : Août 2004
    Messages : 374
    Par défaut question
    windows CE, est-ce qu'il gére l'ouverture de fichier comme le windows normal.??
    puisque pour controler mes imprimantes séries (des thermiques ),
    j'ai du reprendre une classe de communication asynchrone serie.
    celle ci ouvre des fichiers d'impression, et l'astuce, c'est que par ce biais, on peut aussi ouvrir des communications series, sur des ports com et meme et surtout des usb..
    si tu dois reecrire le drivr, ca revient a faire un thread qui essaie regulierement de lire le fichier, en esperant que ce fait ainsi..
    je te poste le source.?

  6. #6
    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
    je serais curieux de voir comment la communication asynchrone est gérée...

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Avril 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2005
    Messages : 87
    Par défaut
    merci eomer212, je veux bien voir comment tu as fait la lecture.
    Mais en effet, je m'orientais vers la réécriture partielle du driver de farscape en utilisant un thread.

    Sinon, un autre solution se trouve là : http://www.codeproject.com/system/serial.asp ; et plus particulièrement le passage
    Citation Envoyé par Windows CE support and the lack of overlapped I/O
    To include this library into you Windows CE project, just add the Serial.dsp project file to your own workspace. (...) . Make sure you define the SERIAL_NO_OVERLAPPED symbol to avoid the use of overlapped I/O.
    J'ai pris 2 minutes pour tester, mais j'ai récolté pas mal d'erreur de compil... Des fonctions de l'API Win32 non accessibles. Je n'ai pas pris le temps de creuser plus en détail.

Discussions similaires

  1. [windows] une classe qui crée et termine un thread
    Par Biosox dans le forum Windows
    Réponses: 11
    Dernier message: 07/06/2007, 10h52
  2. [MFC] Classe SerialCom et contrôle de flux
    Par Philippe320 dans le forum MFC
    Réponses: 2
    Dernier message: 24/05/2006, 09h09
  3. Réponses: 2
    Dernier message: 05/04/2006, 12h06
  4. Class de Explorer de Windows
    Par YURI2006 dans le forum Langage
    Réponses: 1
    Dernier message: 14/02/2006, 17h24

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