J'essaie d'implémenter une Android pour recevoir des données d'un appareil médical mais je ne peux pas passer le processus de découverte et obtenir le téléphone et le appareil couplé ou connecté les uns aux autres.
Description du dispositif médical: Le dispositif utilise le protocole SDP (Service Discovery Protocol) et le profil de port série (SPP). Il démarre une procédure d'enquête pour découvrir (jusqu'à 10) points d'accès environnants avec le filtre COD et le nom de service correspondants. Ensuite, il établit séquentiellement une connexion (à l'aide de la procédure de page) avec le point d'accès en vérifiant le code PIN. Une fois le PIN apparié, les données sont téléchargées. Lors du téléchargement des données, l'appareil attend un accusé de réception. Le choix est le maître et initie la communication.
Je n'ai aucun contrôle sur le dispositif médical. Tout ce que je peux faire est de le démarrer et d'attendre la procédure décrite ci-dessus (après une mesure).
L'application Android: J'ai commencé à partir de Bluetooth Chat Example sur le pages de développeur. Jusqu'à présent, j'ai remplacé l'UUID par le 00001101-0000-1000-8000-00805f9b34fb
pour utiliser SPP et définir le nom du service sur le nom approprié. Je peux confirmer que cela semble correct en inspectant le service à partir d'un ordinateur. périphérique est celui qui interroge et initie la communication mon service utilise une méthode BluetoothServerSocket
et accept()
pour commencer à l'écouter.
Dans les pages de développeur, j'ai lu que l'UUID doit correspondre entre les applications qui tentent de communiquer. Comme je ne peux pas définir d'UUID pour le dispositif médical, je me demande si cela va être un problème ou s'il suffit que le dispositif médical utilise le profil SP?
Si le nom du service et l'UUID sont corrects et que le dispositif médical essaie réellement de se connecter à mon service Bluetooth qui écoute les connexions, le système Android Android m'inviterait-il à saisir le PIN manuellement pour pouvoir coupler les appareils (puisque l'appareil médical a un code PIN prédéfini)?
Je n'ai rien trouvé dans le Android SDK API qui me permet de définir un PIN pour mon service Bluetooth (au cas où cela échouerait), est c'est possible?
J'ai lu que normalement le PIN est généré par le système de nos jours et une confirmation de l'utilisateur est la seule chose nécessaire. Je suppose que non dans mon système, car l'appareil est un peu plus ancien.
Je serais reconnaissant si vous souhaitez partager des connaissances, des conseils, des suppositions sur tout ce qui concerne ce que j'ai décrit ci-dessus!
Merci d'avance, Fredrik
ÉDITER:
Maintenant, j'ai l'appareil associé à une boîte bluegiga et ils communiquent correctement. Maintenant, je cherche les critères à remplir pour que le tensiomètre se connecte à mon téléphone. Je peux inspecter, à partir d'un ordinateur Linux (sdptool search SP
Dans un terminal), le service Bluetooth fourni par le bluegiga et le comparer au service Bluetooth que je fournis sur Android. Ces valeurs sont ce que j'obtiens:
~ $ sdptool search SP
Enquérant ...
Recherche de SP sur 8C: 71: F8: E5: XX: XX...
Nom du service: 1808130054
RecHandle de service: 0x10003
Liste des ID de classe de service:
UUID 128: 00001101-0000-1000-8000-00805f9b34fb
Liste des descripteurs de protocole:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Chaîne: 13
´
Recherche de SP le 00: 07: 80: 88: XX: XX...
Nom du service: 1808130054
Description du service: 1808130054
RecHandle de service: 0x10005
Liste des ID de classe de service:
"Port série" (0x1101)
Liste des descripteurs de protocole:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Canal: 12
Liste Attr de base linguistique:
code_ISO639: 0x656e
entrant: 0x6a
décalage_base: 0x100
Le premier appareil trouvé est le téléphone (mac = 8C: 71 ... Google Nexus S) et le second (mac = 00: 07 ...) est le bluegiga. Je remarque qu'il n'y a pas de description de service sur l'appareil Android. Je pense que la différence la plus importante se trouve dans la liste des ID de classe de service. UUID 128 sur le Android mais un format totalement différent décrivant cela sur le bluegiga.
Est-il possible d'implémenter en utilisant des ID de classe de service avec un autre format que UUID sur Android?
Pouvez-vous manipuler l'enregistrement de service enregistré dans la base de données de découverte de service?
Serait-il possible d'implémenter directement vers le BlueZ, en utilisant le développement natif c/c ++?
/ Fredrik
Si vous pouvez fournir le nom/lien vers le dispositif médical (s'il s'agit d'un dispositif commercial), il pourrait être utile de lire son guide pour deviner plus sur ce qui pourrait se passer. Voici quelques suggestions :
En plus de l'UUID du port série, chaque service via le SPP peut avoir un UUID spécifique personnalisé - par exemple, le dispositif médical peut rechercher le service avec lequel il est compatible à l'aide de cet UUID personnalisé.
Si le dispositif médical se connecte actuellement à un PC ou à un autre point d'accès avec succès et transfère des données, vous pouvez essayer de lire l'enregistrement SDP de ce périphérique et déterminer quel UUID spécifique en plus du SPP UUID est utilisé si tout, et utilisez-le également dans votre application.
Si le dispositif médical n'est pas en mesure de trouver votre téléphone/application, cela peut être dû au fait qu'il n'est pas détectable. Android par défaut n'est pas détectable même lorsque vous êtes un serveur, il sera uniquement connectable et non détectable, vous pouvez essayer de le rendre détectable par programme ou via les paramètres et voir si le dispositif médical peut trouver votre appareil. Voir ici - Activer la découvrabilité dans Android
Pour l'appariement PIN, l'appareil Android devrait démarrer le processus d'appariement lorsqu'un appareil non apparié essaie de s'y connecter, vous pouvez l'essayer après avoir suivi les recommandations) (1) et (2), PIN est utilisé si l'un des appareils est antérieur à la version Bluetooth 2.1, même avec les appareils plus récents, une clé d'accès à 6 chiffres avec une intervention/confirmation de l'utilisateur sera requis au téléphone pour permettre le couplage (c'est juste une bonne politique de sécurité pour ne pas permettre que cela se produise automatiquement sans intervention de l'utilisateur), espérons que le couplage ne sera nécessaire que la première fois qu'une connexion se produira, plus tard, il ne nécessitera aucun utilisateur intervention pour les connexions ultérieures.