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

Windows Discussion :

Winapi - Rs232


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 83
    Par défaut Winapi - Rs232
    Bonjour,
    Je suis entrain de développer une interface (avec les API/C) me permettant de recevoir des données en continue à partir du port série.
    Je souhaite afficher les octets recus en 'temps réel' dans une status bar.
    Le problème est que je ne sais pas quel évènement sous Windows scruter...
    J'ai tenté de faire un truc du genre: "lorsqu'on appuie sur un bouton, on ouvre le port COM, on le lit et on affiche les données dans une zone d'une status bar" malheureusement sans succès car ce qui est affiché dans ma status bar ne change pas! (cf screen)
    Je sollicite votre aide svp et je précise que je ne suis pas informaticien.
    mon code:
    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
    /* Message de la barre d'outils : Bouton 1 - Connecter*/
    		case ID_TOOLBAR_BTN_1:
    			{
    				char cMsg[50];
    				
    				/* variables locales */ 
                    char buffer[256]; 
                    int nBytesRead=0,PORT=3; 
                    
                    /*tentative d'ouverture du PORT COM*/
                    if(!OpenCOM(3)) {
                    /*on affiche dans la zone de status le message*/
                    sprintf(cMsg, "Impossible d'ouvrir COM%d",PORT);
                    SendMessage(hStatusbar,
                    SB_SETTEXT,
                    ID_STATUS_ZONE_1,
                    (LPARAM)(LPSTR)cMsg);
                    }
                    else {
                    sprintf(cMsg, "COM%d ouvert",PORT);
                    SendMessage(hStatusbar,
                    SB_SETTEXT,
                    ID_STATUS_ZONE_1,
                    (LPARAM)(LPSTR)cMsg);   
                    
                        if(ReadCOM(buffer, sizeof(buffer)-1, &nBytesRead)) 
                        { 
                          buffer[nBytesRead] = '\0';
                          
                          /*on affiche les octets recus dans la zone de status*/
                          sprintf(cMsg, "%d reçus: %d",nBytesRead, buffer);
                          SendMessage(hStatusbar,
                          SB_SETTEXT,
                          ID_STATUS_ZONE_3,
                          (LPARAM)(LPSTR)cMsg);
                                               
                        } 
                        else 
                          sprintf(cMsg, "erreur lors de la réception!",nBytesRead, buffer);
                          SendMessage(hStatusbar,
                          SB_SETTEXT,
                          ID_STATUS_ZONE_2,
                          (LPARAM)(LPSTR)cMsg);      
                         
                         }
                    
    
    				/* On affiche le dernier bouton clique dans la barre d'etat */
    				SendMessage(hStatusbar,
    					SB_SETTEXT,
    					ID_STATUS_ZONE_3,
    					(LPARAM)(LPSTR)"Connect");
    			}
    			break;
    Images attachées Images attachées  

  2. #2
    Invité
    Invité(e)
    Par défaut
    il faudrai peut être rafraichir la statusbar par un refresh.

  3. #3
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    As tu vérifié si ta lecture du port série fonctionne correctement, par exemple en regardant le contenu de buffer après le read()?
    En plus, je ne vois nulle part de fermeture du port...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 83
    Par défaut
    Citation Envoyé par joellel
    As tu vérifié si ta lecture du port série fonctionne correctement, par exemple en regardant le contenu de buffer après le read()?
    Je reçois des caractères je pense car j'obtiens les mêmes caractères avec l'executable fourni par l'exemple...
    Citation Envoyé par joellel
    En plus, je ne vois nulle part de fermeture du port...
    Il me semble appeler la fonction CloseCOM() dans mon code?

  5. #5
    Membre chevronné
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Citation Envoyé par rin01
    Je reçois des caractères je pense car j'obtiens les mêmes caractères avec l'executable fourni par l'exemple...

    Il me semble appeler la fonction CloseCOM() dans mon code?
    Vérifie quand même, comme ça, tu seras sûr et tu pourras te concentrer sur le VRAI problème

  6. #6
    Membre chevronné Avatar de Mayti4
    Inscrit en
    Février 2004
    Messages
    442
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 442
    Par défaut
    C'est l'adresse du buffer que tu affiches.

    char cMsg[50];
    C'est un peu petit si tu places un buffer de 255 octets dedans..

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 83
    Par défaut
    Citation Envoyé par gcorbineau
    il faudrai peut être rafraichir la statusbar par un refresh.
    Ok, et comment rafraîchir la status bar car je n'ai pas trouvé cette fonction dans la doc WIN32?
    Faut-il créer une fonction spécifique et comment procéder stp?

Discussions similaires

  1. lecture/ecriture des broches RTS/CTS du port RS232
    Par .:: sly51 ::. dans le forum C
    Réponses: 3
    Dernier message: 24/10/2006, 15h28
  2. [WinAPI C++] MultiThreading?
    Par Gruik dans le forum Windows
    Réponses: 2
    Dernier message: 25/03/2004, 00h08
  3. Réponses: 8
    Dernier message: 29/09/2003, 15h33
  4. [TP] port série rs232
    Par cyb33 dans le forum Turbo Pascal
    Réponses: 44
    Dernier message: 13/01/2003, 15h49

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