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

API, COM et SDKs Delphi Discussion :

Connection Bluetooth, détection automatique des COMs entrant/sortant


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 62
    Par défaut Connection Bluetooth, détection automatique des COMs entrant/sortant
    Bonjour, je voudrais communiquer avec un module Bluetooth, non, en fait je communique déjà avec ce module, mon problème se situe plutôt au niveau de l'identification des ports COM entrant et sortant affectées à ma clé Bluetooth quand je la connecte, d'après mes recherches, il me faut utiliser l'API Windows mais je ne la connais pas du tout.

    Pour l'instant, voici ce que j'ai, avec le composant Cport-3.10 (qui me donne les numéro de port COM utilisés) et avec le programme BlueLock1.8 (qui me permet d'avoir le nom de ma clé Bluetooth et son adresse physique), mais ce qu'il me faudrait c'est ce que donne l'onglet "Ports Com" de la fenêtre "Périphériques Bluetooth" qui donne les ports COM utilisés par le Bluetooth, le nom du Bluetooth et la direction:




    Pour l'instant, je renseigne ces champs (COM entrant/sortant) à la main dans des Tedit au démarrage de mon appli (ce qui m'oblique à chaque fois à ouvrir la fenêtre "Périphériques Bluetooth" de windows), je voudrais rendre cela automatique si c'est possible.

    Merci de me montrer le chemin vers les fonctions que je dois utiliser pour faire ça.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 23
    Par défaut ...
    Bonjour,

    ton périphérique Bluetooth est-il reconnu par TComPort ?

    J'ai un peu le même soucis que toi pour ce qui est de la connexion automatique mais je travaille actuellement en USB. As-tu trouvé une solution depuis ?

    Je suis parvenu à obtenir la liste des ports connectés depuis le registre (HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM), puis j'effectue une procédure en boucle sur chacun des ports qui vise à se connecter au périphérique (un GSM dans mon cas) afin de lui envoyer une commande du type "AT+GMM" me renvoyant le nom du mobile.

    Seulement je ne parviens pas à récupérer la réponse du GSM par l'évênement OnRxChar de TComPort lorsque je suis dans une boucle

    Voici 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
    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
     
     
    procedure TMain.AutoDetectionClick(Sender: TObject);
    var
      Val : TStringList;
      ScanPorts : Boolean;
      NomCOM : array[1..256] of String;
      i, result, NbreCOM : Integer;
      tampon : String;
    begin
      //ports_connectes
      With TRegistry.Create do
            try
              RootKey := HKEY_LOCAL_MACHINE;
              OpenKey('HARDWARE\DEVICEMAP\SERIALCOMM', false);
     
              try
                Val := TStringList.Create;
              finally
                GetValueNames(Val);
                NbreCOM := Val.Count;
                //definir_COM
                For i := 0 to (Val.Count - 1) do
                    begin
                      tampon := ReadString(Val.Strings[i]);
                      NomCOM[i + 1] := tampon;
                    end;
              end;
     
              Val.Free;
              CloseKey;
            finally
              Free;
            end;
     
      If NbreCOM = 0 then
            begin
              AbortProcedure := True;
              MessageDlg('Aucun périphérique détecté !', MtWarning, [MbOk], 0);
            end
            else
              begin
                //analyse_ports
                ScanPorts := True;
                AbortProcedure := False;
                i := 1;
                While (ScanPorts) or (i <= NbreCOM) or (not AbortProcedure) do
                    begin
                      With ComPort1 do If Copy(NomCOM[i], 0, 3) = 'COM' then
                            begin
                              If Connected then Connected := False;
                              Port := NomCOM[i];
                              PosRX := 0;
                              ValeurRXChar := '';
     
                              try
                                Connected := True;
                                WriteStr('AT+GMM' + Chr(13));
                              finally
                                //accepter_port?
                                If (ValeurRXChar <> '') and (ValeurRXChar <> OldValeurRXChar) then
                                    begin
                                      result := MessageDlg('Accepter la connexion sur '+ Port + ' : ' + ValeurRXChar, MtConfirmation, [MbYes, MbNo, MbCancel], 0);
     
                                      //produit_accepte
                                      If result = mrYes then ScanPorts := False;
     
                                      //procedure_annulee
                                      If result = mrCancel then AbortProcedure := True;
                                    end;
                              end;
     
                              inc(i);
                            end;
                    end;
            end;
    end;
     
    procedure TMain.ComPort1RxChar(Sender: TObject; Count: Integer);
    begin
      //recupValeur
      If PosRX = 1 then
            begin
              ComPort1.ReadStr(ValeurRXChar, Count);
              OldValeurRXChar := ValeurRXChar;
            end;
      inc(PosRX);
    end;

Discussions similaires

  1. détection automatique des équipement réseau
    Par lamou23 dans le forum Réseau
    Réponses: 1
    Dernier message: 16/07/2010, 23h45
  2. Détection automatique des entrées
    Par snortus dans le forum Hibernate
    Réponses: 3
    Dernier message: 11/06/2008, 21h20
  3. "Détection automatique des paramètre proxy" en Java ?
    Par filc0 dans le forum Général Java
    Réponses: 9
    Dernier message: 15/01/2008, 22h15

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