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

Langage C++ Discussion :

Problème de connexion à un port COM


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Par défaut Problème de connexion à un port COM
    Bonjour à tous,

    Je suis en train de développer un petit logiciel qui doit me permettre de visualiser des informations retournées par un périphérique branché sur un port COM Bluetooth.
    Le problème c'est que pour l'instant mon code refuse la connexion et me renvoi un INVALID_HANDLE_VALUE.
    Pour réaliser la connexion je me suis inspiré d'un bout de code trouvé sur Internet qui même testé tel quel ne fonctionne pas avec mes périphériques Bluetooth.

    Je vous demande donc un peu d'aide, je précise que je ne suis qu'un débutant.

    Voilà le code qui gère la connexion :

    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
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    #include "windows.h"
    #include "stdio.h"
    #include <QDebug>
     
    #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) */
     
    /* Handle du port COM ouvert */
    HANDLE g_hCOM = NULL;
     
    /* Délais d'attente sur le port COM */
    COMMTIMEOUTS g_cto =
    {
        MAX_WAIT_READ,  /* ReadIntervalTimeOut          */
        0,              /* ReadTotalTimeOutMultiplier   */
        MAX_WAIT_READ,  /* ReadTotalTimeOutConstant     */
        0,              /* WriteTotalTimeOutMultiplier  */
        0               /* WriteTotalTimeOutConstant    */
    };
     
    /* Configuration du port COM */
    DCB g_dcb =
    {
        sizeof(DCB),        /* DCBlength            */
        38400,              /* BaudRate             */
        TRUE,               /* fBinary              */
        FALSE,              /* fParity              */
        FALSE,              /* fOutxCtsFlow         */
        FALSE,              /* fOutxDsrFlow         */
        DTR_CONTROL_ENABLE, /* fDtrControl          */
        FALSE,              /* fDsrSensitivity      */
        FALSE,              /* fTXContinueOnXoff    */
        FALSE,              /* fOutX                */
        FALSE,              /* fInX                 */
        FALSE,              /* fErrorChar           */
        FALSE,              /* fNull                */
        RTS_CONTROL_ENABLE, /* 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              */
    };
     
    BOOL engine::OpenCOM(int nId)
    {
        /* variables locales */
        char szCOM[16];
        qDebug("ok1");
     
        /* construction du nom du port, tentative d'ouverture */
        sprintf(szCOM, "COM%d", nId);
        qDebug("ok2");
        /* conversion char vers WCHAR */
        wchar_t *WszCOM = (wchar_t *)malloc( sizeof( wchar_t ));
        qDebug("ok3");
        mbstowcs( WszCOM, szCOM, 16 );
        qDebug("ok4");
     
        /*fin de conversion*/
        //g_hCOM = CreateFile(WszCOM, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL);
        g_hCOM=CreateFile(WszCOM,GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_NEW|OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
        qDebug("ok5");
        if(g_hCOM == INVALID_HANDLE_VALUE)
        {
          //  printf("Erreur lors de l'ouverture du port COM%d", nId);
            return FALSE;
        }
        qDebug("ok6");
        /* affectation taille des tampons d'émission et de réception */
        SetupComm(g_hCOM, RX_SIZE, TX_SIZE);
        qDebug("ok7");
        /* configuration du port COM */
        if(!SetCommTimeouts(g_hCOM, &g_cto) || !SetCommState(g_hCOM, &g_dcb))
        {
            //printf("Erreur lors de la configuration du port COM%d", nId);
            CloseHandle(g_hCOM);
            return FALSE;
        }
        qDebug("ok8");
        /* on vide les tampons d'émission et de réception, mise à 1 DTR */
        PurgeComm(g_hCOM, PURGE_TXCLEAR|PURGE_RXCLEAR|PURGE_TXABORT|PURGE_RXABORT);
        EscapeCommFunction(g_hCOM, SETDTR);
        return TRUE;
    }
    Le dernier signal renvoyé par Qdebug est "ok5".

    Merci d'avance !

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    cf ici.

    P.S. : c'est dommage d'utiliser Qt pour faire du C

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Par défaut
    Merci !
    (Sinon ce fichier s'intègre dans un projet un peu plus gros qui utilise Qt dans tout le code voilà le pourquoi du qDebug)

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Julien1619 Voir le message
    (Sinon ce fichier s'intègre dans un projet un peu plus gros qui utilise Qt dans tout le code voilà le pourquoi du qDebug)
    Mais tant qu'à faire du C++ autant utiliser des std::string (ou au pire des QString) à la place des char, wchar_t, mbstowcs et autres malloc/free.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 8
    Par défaut
    C'était bien ce que j'avais essayé de faire au début et ça compilait bien sous Code Blocks mais une fois passé à QtCreator j'ai du faire marche arrière et je ne comprends toujours pas pourquoi ça n'a pas fonctionné (erreur de types en cascades, et plus encore). D'ailleurs cette solution je l'avais trouvée ici même dans la FAQ je crois .

    (J'ai pas encore coché résolu parce que j'attends de tester ça chez moi ce week end).

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Julien1619 Voir le message
    C'était bien ce que j'avais essayé de faire au début et ça compilait bien sous Code Blocks mais une fois passé à QtCreator j'ai du faire marche arrière et je ne comprends toujours pas pourquoi ça n'a pas fonctionné (erreur de types en cascades, et plus encore). D'ailleurs cette solution je l'avais trouvée ici même dans la FAQ je crois .
    Si tu as eu un problème, il est peut être intéressant de comprendre pourquoi... et ouvrir une nouvelle discussion sur le sujet

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

Discussions similaires

  1. Problème envoi caractère par port COM
    Par Briceba dans le forum Windows Forms
    Réponses: 1
    Dernier message: 08/09/2008, 09h29
  2. Problème de lecture du port Com
    Par zoheir13 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 26/04/2008, 13h49
  3. comment détecter l'absence de connexion sur port COM ?
    Par nicoboud2 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 12/04/2006, 14h41
  4. Problème de lecture sur port COM
    Par Marthym dans le forum MFC
    Réponses: 10
    Dernier message: 11/04/2006, 15h36
  5. Problème de reception sur Port COM
    Par Revan777 dans le forum C
    Réponses: 9
    Dernier message: 19/04/2005, 21h55

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