Android 6.0 Guimauve BLE : les Paramètres de Connexion

Le Bluetooth Low Energy paramètres de connexion de gestion semble avoir changé dans Android 6.

J'ai un BLE périphérique qui a besoin d'utiliser certains paramètres de connexion (notamment, l'intervalle de connexion), et je veux utiliser le minimum de l'intervalle de connexion autorisé par le BLE spécification (c'est à dire 7,5 ms).

Le SDK Android ne permet pas de choisir à partir de la MESURE de l'ÉCART du centre (le smartphone) de côté, de sorte que la bonne façon de le faire est de faire de mon FOSSÉ périphérique envoyer un L2CAP Connection Parameter Update Request après l'ÉCART de la connexion est faite.

Les paramètres que je demande sont:

  • conn intervalle min : 7,5 ms
  • conn intervalle max : 7,5 ms
  • esclave de latence : 0
  • surveillance timeout : 2000ms

Cela a fonctionné comme prévu avec tous les appareils Android que j'ai testé, de 4,3 à 5.x : après l'envoi de la L2CAP Connection Parameter Update Request, mon appareil reçoit un L2CAP Connection Parameter Update Response avec 0x0000 (accepté), suivie par une LE Connection Update Complete event où je peux voir que la connexion demandée paramètres ont bien été pris en compte.

Maintenant, avec une Nexus 9 tablette ou avec 2 Nexus 5 appareils, tous ayant Android 6.0.1, je peux voir que le L2CAP Connection Parameter Update Request est toujours rejeté (je reçois un L2CAP Connection Parameter Update Response avec 0x0001 (rejeté)). Puis-je recevoir un LE Connection Update Complete event où je peux voir que les paramètres de connexion n'ont PAS été prises en compte.

J'ai essayé avec 2 différentes implémentations sur le Périphérique de côté (une avec ST Microelectronics' BlueNRG, l'un avec Nordic Semiconductor nRF52), avec exactement le même résultat.

Puis, après plus de tests : j'ai essayé différents jeux de paramètres, la modification de la conn intervalle de max (j'ai gardé les autres paramètres). Voici ce que j'ai trouvé :

  • avec conn intervalle max = 18.75 ms, demande de mise à jour a été acceptée avec l'intervalle réglé à 18,75 ms
  • avec conn intervalle max = 17.50 ms, demande de mise à jour a été acceptée avec l'intervalle réglé à 15.00 ms
  • avec conn intervalle max = 15.00 ms, demande de mise à jour a été acceptée avec l'intervalle réglé à 15.00 ms
  • avec conn intervalle max = 13.75 ms, demande de mise à jour a été acceptée avec l'intervalle réglé à 11,25 ms
  • avec conn intervalle max = 11.25 ms, demande de mise à jour a été acceptée avec l'intervalle réglé à 11,25 ms
  • avec toute autre conn intervalle de valeur max au-dessous de 11,25 ms, je me rejeter.

Ainsi, l'observation, c'est que quelque chose a clairement changé avec la façon dont Android 6 BLE pile gère les paramètres de connexion. Mais il ne semble pas être n'importe quel type d'information ou de documentation pour confirmer que.

Mes observations conduisent à une conclusion que le minimum de l'intervalle de connexion autorisée est maintenant 11.25 ms (ce qui correspond à mes besoins) au lieu de 7,5 ms dans les précédentes versions d'Android. Mais ayant trouvé empiriquement, je veux être sûr que je ne suis pas en manque quelques autres contraintes et les règles ou si ce minimum ne serait pas dynamique, en fonction par exemple sur le niveau de la batterie...

Ce qui serait bien serait d'avoir l'équivalent de Apple Bluetooth lignes Directrices de Conception (cf. §3.6) pour mettre les choses au clair sur la manière dont LE Périphérique devrait traiter ce sujet.

Est ce que quelqu'un ayant le même problème ou est au courant de certaines informations plus utiles de Google ?

InformationsquelleAutor veranith | 2016-01-05