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++Builder Discussion :

Comment ouvrir le bon port série ?


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut Comment ouvrir le bon port série ?
    Bonjour,

    j'ai commencé à écrire un "bout" de fonction qui cherche à ouvrir et à configurer le port série associé au matériel branché sur le pc.

    Je m'explique : je branche le matériel sur le pc en usb, je lance l'application, je clique sur le bouton "Connexion" et l'application détecte et ouvre le bon port série auquel j'ai connecté le matériel.

    Voici le "bout" de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    AnsiString COM;
    	while (hdl == INVALID_HANDLE_VALUE)
    	{
     
     
    		for (int n=1;n<=255;n++){
    				COM="COM"+AnsiString(n);
     
    	hdl = CreateFile(COM.c_str()                ,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
     
    		}
           }

  2. #2
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Si tu veux que le code fonctionne avec les ports plus haut que 9 il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    COM="\\\\.\\COM"+AnsiString(n);
    Pour plus de détail va lire: http://support.microsoft.com/?id=115831

    Pour énumérer les port série disponible sur ton PC va voir:
    http://support.microsoft.com/kb/259695
    Et avec la commande SetupDiGetDeviceRegistryProperty tu peux en profiter pour prendre des informations sur ton périphérique USB (je pense avoir compris qu'il s'agit d'un "Virtual COM Port to USB"). Si c'est le cas tu n'as qu'a lire le SPDRP_HARDWAREID: http://msdn.microsoft.com/en-us/library/ms792967.aspx

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Pinaise !!!!

    Je trouve cela un peu compliqué quand même !!!

    J'ai une erreur "getcommstate" maintenant.
    Je voudrai juste que lorsque je clique sur mon bouton "connexion", ça trouve et ouvre automatiquement le port série USB du module que j'ai connecté !!!!
    Je sais que le port est le "COM3" sur mon PC mais sur d'autres PC ça change !!!


  4. #4
    Membre Expert
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Par défaut
    Salut, pourrais-tu donner plus de détail sur ton erreur?
    Je voudrais aussi voir ton code et connaître le HARDWARE ID de ton truc USB. Si tu ne connais pas, tu peux mettre aussi le contenu de ton fichier INF dans ton message.

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Salut c_boireau
    J'ai adapte et essaye le code MSN fourni par Crayon
    le 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
    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include <stdio.h>
    #include <windows.h>
    #include <setupapi.h>
    #include <devguid.h>
    #include <regstr.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
           HDEVINFO hDevInfo;
           SP_DEVINFO_DATA DeviceInfoData;
           DWORD i;
           // Create a HDEVINFO with all present devices.
           hDevInfo = SetupDiGetClassDevs(NULL,
               0, // Enumerator
               0,
               DIGCF_PRESENT | DIGCF_ALLCLASSES );
     
           if (hDevInfo == INVALID_HANDLE_VALUE)
           {
               // Insert error handling here.
    //           return ;
           }
     
           // Enumerate through all devices in Set.
     
           DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
           for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,
               &DeviceInfoData);i++)
           {
               DWORD DataT;
               LPTSTR buffer = NULL;
               DWORD buffersize = 0;
     
               //
               // Call function with null to begin with, 
               // then use the returned buffer size (doubled)
               // to Alloc the buffer. Keep calling until
               // success or an unknown failure.
               //
               //  Double the returned buffersize to correct
               //  for underlying legacy CM functions that 
               //  return an incorrect buffersize value on 
               //  DBCS/MBCS systems.
               // 
               while (!SetupDiGetDeviceRegistryProperty(
                   hDevInfo,
                   &DeviceInfoData,
                   SPDRP_DEVICEDESC,
                   &DataT,
                   (PBYTE)buffer,
                   buffersize,
                   &buffersize))
               {
                   if (GetLastError() ==
                       ERROR_INSUFFICIENT_BUFFER)
                   {
                       // Change the buffer size.
                       if (buffer) LocalFree(buffer);
                       // Double the size to avoid problems on 
                       // W2k MBCS systems per KB 888609.
                       // soit
    //                   buffer = (char*)LocalAlloc(LPTR, buffersize * 2);
                       // ou
                       buffer = (PCHAR)LocalAlloc(LPTR, buffersize * 2);
                   }
                   else
                   {
                       // Insert error handling here.
                       break;
                   }
               }
    //           printf("Result:[%s]\n",buffer);
               Memo1->Lines->Add(buffer);
               if (buffer) LocalFree(buffer);
           }
     
     
           if ( GetLastError()!=NO_ERROR &&
                GetLastError()!=ERROR_NO_MORE_ITEMS )
           {
               // Insert error handling here.
    //           return ;
           }
     
           //  Cleanup
           SetupDiDestroyDeviceInfoList(hDevInfo);
     Memo1->Lines->Add("nb perifs" );
     Memo1->Lines->Add(i);
    //       return ;
    }
    Ce code fournit la liste de tous les periferiques, je ne sais pas si c'est ce que tu recherche

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    508
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Avril 2008
    Messages : 508
    Par défaut
    Ce code fournit la liste de tous les periferiques, je ne sais pas si c'est ce que tu recherche
    Comment ça ?
    Ce code détecte tous les périphériques qui sont raccordés au PC ?

    Ce que j'aimerai c'est qu'en appuyant sur un bouton ("connexion" par exemple), le programme détecte ensuite le périphérique associé au port USB du PC et ouvre ce port, ... etc


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

Discussions similaires

  1. Comment ouvrir tous les ports
    Par bmarcellin71 dans le forum Hardware
    Réponses: 5
    Dernier message: 08/02/2014, 16h08
  2. comment écouter sur un Port série spécifique
    Par sebac dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 06/01/2010, 14h22
  3. Trouver le bon port série
    Par RR instinct dans le forum C++
    Réponses: 1
    Dernier message: 27/11/2006, 18h22
  4. COMMENT OUVRIR LE PORT 1433
    Par nil dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/03/2006, 11h18
  5. Comment écouter un port série avec flash ?
    Par Alex01 dans le forum Flash
    Réponses: 11
    Dernier message: 07/10/2005, 16h11

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