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

Lazarus Pascal Discussion :

Bibliothèque Bluetooth pour Windows


Sujet :

Lazarus Pascal

  1. #1
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 892
    Points : 992
    Points
    992
    Par défaut Bibliothèque Bluetooth pour Windows
    Bonjour à toutes et à tous,

    Je cherche une bibliothèque qui peut exploiter un dongle BlueTooth connecté sur un port USB. Je n'en ai trouvé qu"une mais elle ne fonctionne qu'avec Linux.

    En existe-t-il une pour Windows ?

    Merci pour vos informations.

    Cordialement.

    Pierre

  2. #2
    Membre régulier Avatar de TheFreeBerga
    Profil pro
    Inscrit en
    octobre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : octobre 2005
    Messages : 63
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Essayes de regarder par .

  3. #3
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 892
    Points : 992
    Points
    992
    Par défaut
    Merci "TheFreeBerga" pour ce lien.

    Pour autant, sans exemple, ça va être dur.

    Cordialement.

    Pierre

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    3 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : mai 2002
    Messages : 3 199
    Points : 5 355
    Points
    5 355
    Par défaut
    salut

    en regardant les source tu te fais vite une idée

    tu as deux helper => il servent à surcharger une class sans tout réécrire
    en l’occurrence TIdStackWindows et TIdSocketHandle

    et une class qui se nomme TIdBluetoothClient
    je vois pas bien le problème ... il a créé un class en se basant sur les composants INDY
    tu dois utiliser le client


    PS : sinon tu as les info dans le MSDN
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  5. #5
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 892
    Points : 992
    Points
    992
    Par défaut
    Dans le source que j'ai téléchargé, il y a ces deux fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        function BindBT(ASocket: TIdStackSocketHandle; const AIP: string; aRaiseException: boolean): Integer;
        function AcceptBT(ASocket: TIdStackSocketHandle; const AIP: string; aRaiseException: boolean): THandle;
    Elles font appel à une constante AIP. Qu'est-ce ? et quelle valeur y donner ?

    Cordialement.

    Pierre

  6. #6
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    3 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : mai 2002
    Messages : 3 199
    Points : 5 355
    Points
    5 355
    Par défaut
    salut

    elle ne font pas appel a une constant
    const dans les paramètre de fonction correspond à la façon dont le compilateur va pouvoir optimiser le code

    dans ton cas il demande un simple chaîne de caractère
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  7. #7
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 892
    Points : 992
    Points
    992
    Par défaut
    Citation Envoyé par anapurna Voir le message
    ... dans ton cas il demande un simple chaîne de caractère
    Certes. Voici ce que j'ai écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button1Click(Sender: TObject);
    var
      zz: TIdStackWindows;
    begin
      zz:= TIdStackWindows.Create;
      zz.NewBTSocketHandle(True);
      zz.Bind(1, 'Je mets quoi ici ?', 1);
    end;
    Mais quoi que je mette, je me fait jeter. Apparemment, il est attendu une valeur du type suivant :

    A.B.C.D où A, B, C, D sont des entiers. Cela ressemble à une adresse de réseau. J'ai mis l'adresse de mon PC et j'obtiens l'erreur 10038.

    Que doit donc représenter A.B.C.D ?

    Cordialement.

    Pierre

  8. #8
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    juillet 2006
    Messages
    9 744
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : juillet 2006
    Messages : 9 744
    Points : 13 961
    Points
    13 961
    Par défaut
    Citation Envoyé par ChPr Voir le message
    J'ai mis l'adresse de mon PC et j'obtiens l'erreur 10038.
    Extrait d'un vieux winerror.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //
    // MessageId: WSAENOTSOCK
    //
    // MessageText:
    //
    //  An operation was attempted on something that is not a socket.
    //
    #define WSAENOTSOCK                      10038L
    Citation Envoyé par ChPr Voir le message
    Que doit donc représenter A.B.C.D ?
    Je ne sais pas encore : l'adresse source ? L'adresse destination ?

    Mais surtout, à cause du message de l'erreur 10038, est-ce que la socket a été créée avant d'appeler la fonction ?

    Je pense qu'il faudrait s'inspirer de l'établissement d'une connexion classique (genre par câble), et juste adapter le mode de transport.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  9. #9
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 892
    Points : 992
    Points
    992
    Par défaut
    Citation Envoyé par Jipété Voir le message
    ... Je pense qu'il faudrait s'inspirer de l'établissement d'une connexion classique (genre par câble), et juste adapter le mode de transport.
    C'est là que le bât blesse, je n'ai aucune connaissance dans ce type de connexion.

    Cordialement.

    Pierre

  10. #10
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    A priori, c'est l'adresse Bluetooth (https://msdn.microsoft.com/en-us/library/cc510863.aspx) qui est attendue, à savoir 6 octets en hexadecimal.

    Dans votre cas, 12 caractères hexa donc. Extrait de IdBluetooth.pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sin.btAddr         := StrToInt64('$' + AIP);
    Quelque chose du genre: ' 001060AA36F8'. Cf. ce lien par exemple: http://fr.codecorp.com/find-bdaddr.php

  11. #11
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 892
    Points : 992
    Points
    992
    Par défaut
    Merci FchrisF pour ces liens, j'ai trouvé l'adresse de ma connexion BT.

    Pour autant, tout cela reste inextricable.

    La fonction "Bind" attend un AIP formé de quatre champs alphanumériques mais "décimaux" et non pas "hexadécimaux" et compte tenu de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    A Bluetooth–enabled device address is a unique, 48–bit address containing the following three fields:
     
        LAP field: lower part of the address containing 24 bits.
        UAP field: upper part of the address containing 8 bits.
        NAP field: non–significant part of the address containing 16 bits.
    format qui ne représente que trois champs, je ne vois pas comment établir un lien entre ces deux formats.

    La fonction "AcceptBT", quand à elle, si elle demande le paramètre AIP, elle ne s'en sert pas. Par contre comme la fonction "Bind, il lui faut un paramètre "ASocket: TIdStackSocketHandle" que j'ai fixé a priori à 1 et c'est sur cette valeur qu'elle me renvoie une erreur 10038.

    Bref, je tourne en rond. Je ne vois absolument pas comment me servir de ces fonctions.

    Merci de votre aide.

    Cordialement.

    Pierre

  12. #12
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    La fonction "Bind" attend un AIP formé de quatre champs alphanumériques mais "décimaux" et non pas "hexadécimaux"
    Désolé, je ne comprends pas à quoi correspondent votre référence à ces "quatre champs alphanumériques". D'après ce que je vois, ce sont plutôt des caractères hexadécimaux qui sont attendus (ce n'est pas une véritable "adresse IP" pour le Bluetooth). D'où le caractère '$' dans la conversion: "sin.btAddr := StrToInt64('$' + AIP);"

    Mais je peux me tromper, car je n'ai jeté qu'un coup d’œil très rapide.

    Exemple pour '001060AA36F8':

    - LAP field: lower part of the address containing 24 bits: AA36F8
    - UAP field: upper part of the address containing 8 bits: 60
    - NAP field: non–significant part of the address containing 16 bits: 0010

    (OUI = UAP + NAP = 001060)


    La fonction "AcceptBT", quand à elle, si elle demande le paramètre AIP, elle ne s'en sert pas.
    C'est pour un "serveur", qui doit donc accepter n'importe quel client.


    Par contre comme la fonction "Bind, il lui faut un paramètre "ASocket: TIdStackSocketHandle" que j'ai fixé a priori à 1 et c'est sur cette valeur qu'elle me renvoie une erreur 10038.
    A priori, cette valeur est le handle retourné lors de la création. Par exemple, en reprenant votre code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      zz: TIdStackWindows;
          SocketHandle: THandle;
          RetCode: Integer;
    begin
      zz := TIdStackWindows.Create;
      SocketHandle := zz.NewBTSocketHandle(True);
      RetCode := zz.BindBT(SocketHandle, '001060AA36F8', False);  // Remplacer '001060AA36F8' par l'adresse Bluetooth
      ShowMessage('Code retour = ' + IntToStr(RetCode));
      zz.Free;
    end;

    PS. Code non testé.

    D'ailleurs, je pense qu'il faudrait plutôt utiliser les classes de "plus haut niveau" (comme TIdBluetoothClient par exemple).

  13. #13
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    septembre 2005
    Messages
    1 892
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : septembre 2005
    Messages : 1 892
    Points : 992
    Points
    992
    Par défaut
    Citation Envoyé par FChrisF Voir le message
    Désolé, je ne comprends pas à quoi correspondent votre référence à ces "quatre champs alphanumériques". D'après ce que je vois, ce sont plutôt des caractères hexadécimaux qui sont attendus (ce n'est pas une véritable "adresse IP" pour le Bluetooth). D'où le caractère '$' dans la conversion: "sin.btAddr := StrToInt64('$' + AIP);" ...
    C'est moi qui me suis trompé. J'ai utilisé par erreur la fonction "bind" (qui est une fonction appelée dans la hiérarchie) au lieu de la fonction "BindBT".

    Citation Envoyé par FChrisF Voir le message

    La fonction "AcceptBT", quand à elle, si elle demande le paramètre AIP, elle ne s'en sert pas.

    C'est pour un "serveur", qui doit donc accepter n'importe quel client. ...
    Ok.

    Voyant mes erreurs, j'en suis arrivé au code que vous me proposez.

    Mais le code de retour est -1. C'est-à-dire que dans la fonction BindBT, si on met le boolean à True, le code interne à cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      if aRaiseException then
        CheckForSocketError(Result);
    renvoie une erreur 10022 (argument invalide), ce qui montre qu'il y a quand même problème.

    Bon, je dois encore faire des erreurs. L'adresse BT que j'avais mise était celle du BlueTooth du PC. Je l'ai remplacée par celle d'un petit GPS Bluetooth que j'ai et le code de retour est cette fois "0" et le clignotant de mon GPS m'indique qu'une communication est établie.

    Citation Envoyé par FChrisF Voir le message
    ... D'ailleurs, je pense qu'il faudrait plutôt utiliser les classes de "plus haut niveau" (comme TIdBluetoothClient par exemple). ...
    Oui, je vais voir ça.

    Cordialement.

    Pierre

  14. #14
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2013
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : novembre 2013
    Messages : 241
    Points : 433
    Points
    433
    Billets dans le blog
    2
    Par défaut Lien mort
    Citation Envoyé par TheFreeBerga Voir le message
    Bonjour,

    Essayes de regarder par .
    Lien mort ...

  15. #15
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 877
    Points : 4 259
    Points
    4 259
    Billets dans le blog
    2
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  16. #16
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2013
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : novembre 2013
    Messages : 241
    Points : 433
    Points
    433
    Billets dans le blog
    2
    Par défaut Composants WCL Bluetooth: proprio, payant et hors de prix
    Citation Envoyé par BeanzMaster Voir le message
    J'ai vu:
    Bluetooth: Linux only
    Composants WCL Bluetooth: proprio, payant et hors de prix. Pour Windows only

  17. #17
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    septembre 2015
    Messages
    1 877
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : septembre 2015
    Messages : 1 877
    Points : 4 259
    Points
    4 259
    Billets dans le blog
    2
    Par défaut
    Hello avec les composants TLazSerial de notre ami JurrasicPork cela semble possible. Si il passe par là, il pourrait confirmer
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  18. #18
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2013
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : novembre 2013
    Messages : 241
    Points : 433
    Points
    433
    Billets dans le blog
    2
    Par défaut Protocole BLE, != rfcomm
    Citation Envoyé par BeanzMaster Voir le message
    Hello avec les composants TLazSerial de notre ami JurrasicPork cela semble possible. Si il passe par là, il pourrait confirmer
    Protocole BLE GATT, différent du port série émulé rfcomm

  19. #19
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    décembre 2008
    Messages
    2 884
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : décembre 2008
    Messages : 2 884
    Points : 7 091
    Points
    7 091
    Par défaut
    hello,
    Citation Envoyé par BeanzMaster Voir le message
    Hello avec les composants TLazSerial de notre ami JurrasicPork cela semble possible. Si il passe par là, il pourrait confirmer
    je passe par là . TLazserial ne traite que les protocoles série mais pas les autres types de protocole Bluetooth

    Par contre pour utiliser le bluetooth BLE il y a une possibilité avec Lazarus --> Lazarus4Python (interfaçage python - lazarus) et le module python Bleak :
    Bleak is a GATT client software, capable of connecting to BLE devices acting as GATT servers. It is designed to provide a asynchronous, cross-platform Python API to connect and communicate with e.g. sensors.Features
    Supports Windows 10, version 16299 (Fall Creators Update) or greater
    Supports Linux distributions with BlueZ >= 5.43
    OS X/macOS support via Core Bluetooth API, from at least OS X version 10.11
    Android backend compatible with python-for-android
    Bleak supports reading, writing and getting notifications from GATT servers, as well as a function for discovering BLE devices.
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  20. #20
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    novembre 2013
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : novembre 2013
    Messages : 241
    Points : 433
    Points
    433
    Billets dans le blog
    2
    Par défaut Bluetooth: Traduction des headers
    Citation Envoyé par jurassic pork Voir le message
    hello,


    je passe par là . TLazserial ne traite que les protocoles série mais pas les autres types de protocole Bluetooth

    Par contre pour utiliser le bluetooth BLE il y a une possibilité avec Lazarus --> Lazarus4Python (interfaçage python - lazarus) et le module python Bleak :


    Ami calmant, J.P
    J'ai essayé avec Bleak, mais j'ai une erreur incompréhensible +++ (une histoire de module introuvable malgré installation correcte). Je passe maintenant par les libs Windows.

Discussions similaires

  1. Créer la bibliothèque libzip pour windows
    Par troumad dans le forum Windows
    Réponses: 4
    Dernier message: 22/12/2015, 07h12
  2. Réponses: 3
    Dernier message: 12/03/2008, 22h37
  3. Réponses: 6
    Dernier message: 07/08/2007, 21h00
  4. Librairie Bluetooth pour Windows
    Par Janitrix dans le forum Windows
    Réponses: 2
    Dernier message: 03/07/2007, 12h04
  5. Format d'un exe pour DOS et pour Windows
    Par Alfhiger dans le forum Assembleur
    Réponses: 4
    Dernier message: 12/06/2002, 11h57

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