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

C++ Discussion :

Ecrire sur le port serie


Sujet :

C++

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut Ecrire sur le port serie
    Slt,

    Je suis en train d'ecrire une classe simple pour ecrire et lire sur le port serie,
    mais voila, j'ai un ptit soucis tout bete

    Les données passent bien sur le port serie, je les vois sur un terminal connecté sur le COM1, et cependant la variable nWritten reste à 0 apres la ligne en rouge

    D'ou cela peut il venir selon vous ? du fait que je suis en asynchrone ?

    Je me suis pourtant bien inspiré de la FAQ

    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
    class CLiaisonSerie
    {
    private:
        HANDLE        m_ComPort;
        DCB            m_config;
        OVERLAPPED    m_Ov;
    public:
        CLiaisonSerie(void);
        ~CLiaisonSerie(void);
        BOOL Connecter(void);
        BOOL Deconnecter(void);
        BOOL Transmettre(CString buffer);
    
    };
    
    
    CLiaisonSerie::CLiaisonSerie(void)
    {
        m_Ov.hEvent=NULL;
    }
    
    CLiaisonSerie::~CLiaisonSerie(void)
    {
    }
    
    
    BOOL CLiaisonSerie::Connecter(void)
    {
        BOOL err;
        // *****     OUVERTURE DU PORT     *****
        m_ComPort = CreateFile(    "COM1",                         // Choix du port « COMx » 
                                GENERIC_READ | GENERIC_WRITE,    // accès pour lire et écrire sur le port 
                                0,                                // accès exclusif au port de COM 
                                NULL,                            // sécurité par défaut 
                                OPEN_EXISTING,                    //Doit être à cette valeur car se n’est pas un fichier 
                                FILE_FLAG_OVERLAPPED,            // mode asynchrone asynchrone
                                NULL                          
                              );
        err = m_ComPort == INVALID_HANDLE_VALUE;
    
        if (!err){
            
            memset(&m_Ov,0,sizeof(m_Ov));
    
            // *****     CONFIGURATION DU PORT     *****
            GetCommState(m_ComPort,&m_config);
            m_config.BaudRate=115200;
            m_config.Parity=0;
            m_config.StopBits=0;
            m_config.ByteSize=8;
            err = SetCommState(m_ComPort,&m_config) == 0;
        }
        return(!err);
    }
    
    BOOL CLiaisonSerie::Deconnecter(void){
        if(m_Ov.hEvent) CloseHandle(m_Ov.hEvent);
        m_Ov.hEvent=NULL;
        return (CloseHandle(m_ComPort) ==  S_OK);
    }
    
    BOOL CLiaisonSerie::Transmettre(CString buffer){
        DWORD nWritten;
        BOOL Err;
        
        Err = WriteFile(m_ComPort, (LPCTSTR)buffer, buffer.GetLength(), &nWritten, &m_Ov);
        if (!Err) Err = nWritten != buffer.GetLength();
        return !Err;
    }

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    650
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 650
    Points : 546
    Points
    546
    Par défaut
    OK, en planchant plus sur le code exemple de la faq,

    j'ai capté le bloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        m_count = amountwritten;
        if ( result == 0 )
        {
            if ( ( comerr = GetLastError() ) != ERROR_IO_PENDING )
            {
                ClearCommError( m_hCom, &comerr, &comstat );
                m_comerr|= comerr;
            }
            else m_count = amounttowrite;
        }
    qui pallie à ca, par contre, niveau explication, jvois pas pourquoi...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecrire sur un port serie d'un PC
    Par poulp86 dans le forum Services Web
    Réponses: 0
    Dernier message: 22/04/2009, 17h35
  2. Réponses: 3
    Dernier message: 08/04/2009, 14h48
  3. lecture & ecriture sur le port serie
    Par anouar dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 08/07/2005, 17h15
  4. evenement sur le port serie !
    Par Stopher dans le forum Windows
    Réponses: 10
    Dernier message: 27/01/2005, 22h12
  5. Comment déterminer la fin d'un message sur le port serie ?
    Par zeddy23 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 11/01/2005, 05h12

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