Créer un serveur du Gatt?

j'ai une question plus large ici, donc si quelqu'un pouvait me montrer un doc ou un article qui pourrait expliquer cela, cela suffirait. Inutile de dire qu'une journée de recherche sur Google ne m'a mené nulle part, et j'aurais besoin d'un coup de main.

je me connecte à une BeagleBoard avec BlueZ 5.9, et mon intention est de:

  1. Créer une Gatt de serveur,
  2. chargez-le avec quelques attributs d'écriture, et
  3. annonce ce serveur pour se connecter à un appareil android.

j'ai créé L'application Android qui va se connecter et fonctionner comme le central, rendant 3 essentiellement complète. Je ne sais pas comment les commandes - les choses littérales à taper - pour lancer un serveur du Gatt / créer des attributs sur le BeagleBoard. Je suis connu pour écrire gros, il est donc possible que j'ai juste ma terminologie complètement incorrecte - cela dit, toute aide serait un apprécié dans l'achèvement 1 et 2, même si c'est juste un pousser dans la bonne direction. Merci!

21
demandé sur allprog 2013-10-23 22:26:35

3 réponses

votre terminologie est principalement correcte.

typiquement, une base de données du GATT a les services 0x1800 (accès Générique) et 0x1801 (attribut Générique) au moins. Le service D'accès Générique comporte deux caractéristiques obligatoires: nom de L'appareil et apparence . Le service D'attributs génériques doit être vide.

par conséquent, le GATT minimal la base de données ressemble à ceci:

Handle  Description
 0000   Service: Generic Access (1800)
 0001   Characteristic: Device Name (2A00, readable)
 0002   Characteristic Value (string)
 0003   Characteristic: Appearance (2A01, readable)
 0004   Characteristic Value (16bit enum)
 0005   Service: Generic Attribute (1801) 

Après ces deux services, vous pouvez ajouter vos propres services. Dans votre cas, vous ne semblez pas cibler un service bien connu, donc vous allez en créer un propre.

tout d'abord, créez un UUID de 128 bits, par exemple en utilisant l'outil uuidgen sur la ligne de commande de votre Mac

$ uuidgen
DCDF2725-56C8-4235-A4BC-F7951D5C3762

Ce sera votre UUID de service

 0006   Service: Custom defined Service (DCDF2725-56C8-4235-A4BC-F7951D5C3762)

Alors, vous avez mentionné que vous souhaitez plusieurs inscriptible caractéristiques. Donc, créons un autre UUID pour celui-là.

$ uuidgen
4C06C6F4-C90D-4C58-8E31-20C8C74FF832

et ajouter une caractéristique au service

 0007   Characteristic: Custom Characteristic (4C06C...FF832, writeable)
 0008   Characteristic Value (hex, 20 bytes)

votre valeur caractéristique ne doit pas dépasser 20 octets, et vous devez sélectionner" Write Request " pour vous assurer que les accusés de réception des Écritures sont envoyés au central. Si vous choisissez "Write Command", les Écritures peuvent être écartées par la pile de votre téléphone ou par le périphérique.

après avoir de cette caractéristique, vous êtes prêt à commencer à coder.

Je ne connais pas le SDK BeagleBoard, mais typiquement, vous commencez par initialiser la bibliothèque du GATT et les modules supplémentaires (par exemple, pour prendre en charge les Écritures, vous devez initialiser une deuxième partie de la bibliothèque).

après cette initialisation, vous enregistrez votre base de données GATT. Si vous n'avez pas un bel outil pour générer les données binaires, vous pourriez avoir à les écrire vous-mêmes. C'est expliqué dans la spécification Bluetooth Core V4.0 . Espérons que vous pouvez trouver une API qui fait la transformation pour vous: -)

lorsque l'inscription est réussie, vous devrez définir les paramètres de publicité et pouvez commencer la publicité (consultez la documentation de votre SDK et des échantillons pour cela, encore une fois).

Ce qui se passe maintenant, c'est qu'à un certain moment, vous obtiendrez un rappel qu'une connexion a été établie, et plus tard, vous obtiendrez un attribut demande pour une poignée donnée. Ensuite, vous avez juste à traiter la demande en regardant la poignée, la valeur fournie et le type de l'opération (lire / écrire). N'oubliez pas de toujours renvoyer une valeur de succès ou un code d'erreur en réponse à la demande, sinon, vous bloquerez les communications Bluetooth.

normalement, ces puces Bluetooth fonctionnent toujours avec des opérations asynchrones. Vous enverrez une demande, et vous devrez attendre jusqu'à ce que la demande soit terminée avant l'envoi de la prochaine. Rappelez-vous que lors de la programmation, vous gagnez du temps: -).

si vous voulez essayer sur Android en premier parce que c'est plus familier pour vous, vous pouvez essayer le Galaxy S 4 avec Android 4.2. Il a également un mode périphérique LE - je n'ai pas testé sa fiabilité, cependant. La pile de smartphones la plus fiable à l'heure actuelle pour agir comme périphérique le est actuellement dans iOS 7 - Il peut donc être intéressant de ramasser une touche iPod si elle est abordable pour jouer avec elle.

15
répondu Etan 2013-10-26 12:22:04

Checkout bleno , c'est une bibliothèque de pile périphérique que j'ai créée pour le noeud.js récemment. Il supporte actuellement Linux (testé avec BlueZ 4.101) et OS X 10.9.

Il y a des exemples de comment l'utiliser ici et ici .

5
répondu sandeepmistry 2013-11-12 16:51:35

la clé pour personnaliser le service du gatt est le programme démon bluetoothd de bluez.

j'ai décrit comment personnaliser un service du gatt dans mon blogueur , s'il vous plaît vérifier.

2
répondu Gaiger Chen 2015-01-11 18:33:33