Bluetooth Low Energy Paramètres de Connexion pour Android, iOS et Win8
J'ai été à la recherche partout pour le bluetooth, les paramètres de connexion qui va travailler pour tous les trois de ces plates-formes d'exploitation. Je suis à l'aide de la HOGP (Bluetooth sur HID GATT) de profil pour ce projet.
Mon projet est un système embarqué écrit par moi-même avec un c? BLE module que j'ai le contrôle sur les paramètres suivants pour la connexion.
- Intervalle De Connexion Min
- Intervalle De Connexion Max
- Esclave De Latence
- Surveillance Timeout
- Publicité Intervalle Min
- Publicité Intervalle Max
Ma cible dispositifs de connexion sera pour satisfaire connnections avec Android >= 4.3, iOS7, et >= Win 8.1.
Apple a eu la gentillesse de donner un document avec les paramètres appropriés à la page 22 dans le lien ci-dessous. Je n'ai pas été en mesure de trouver toute l'information sur Android et Win 8.
https://developer.apple.com/hardwaredrivers/bluetoothdesignguidelines.pdf
Mon travail actuel des paramètres pour iOS7 entièrement testée avec bidirection communication avec le freeware lightBlue est comme suit. Mon code embarqué et logiciel hôte pour iOS7 œuvres.
- Intervalle de connexion Min 30ms
- Intervalle de connexion Max 56.25 ms
- Esclave De Latence De 3
- Surveillance Timeout 5000ms
J'ai trouvé à partir d'un autre débordement de pile page android prétendument de travaux sur de 7,5 ms Intervalle de Connexion à partir des liens suivants.
- Android BLE de Connexion intervalle de temps
- http://processors.wiki.ti.com/index.php/Bluetooth_SensorTag?DCMP=lprf-stdroid&HQS=lprf-stdroid-pr-wiki1#Supported_Android_devices
Malheureusement la seconde exigence d'apple iOS spec, c'est que "l'Intervalle Min ≥ 20 ms".
Je ne suis pas à la compréhension de ces plages ou la façon dont ils sont interprétés? Si j'ai mis l'Intervalle min à 7,5 ms pour Android ne serait-ce pas vide pommes exigences? Comment puis-je satisfaire à la fois les systèmes de Win8 si possible?
Ma compréhension est que l'esclave de l'appareil vous suggère un réglage entre le min et le max et le maître (smartphone) avertit l'utilisateur de la réelle valeur sélectionnée dans cette gamme.
J'ai apprécié l'aide de ce problème et espère que ce post pourrait profiter à d'autres compte tenu de la relativement nouvelle et incomplète de la base de connaissances pour le BLE.
Merci d'avance!
partie de la question semble être de savoir comment assurer la compatibilité avec le conflit détails de la plates-formes.
Il pourrait être intéressant de vérifier si 7.5 ms serait compatible avec quelque chose dans l'attente de 15 ou 22.5 ms
Correct. Je dois m'assurer que les mêmes valeurs de travail de tous les systèmes. Si je baisse le délai minimal de 7,5 ms et de garder les autres valeurs du même, le iOS7 ne fonctionne pas. Je n'ai pas une application android prêt à tester encore, mais avec l'iOS7 application ne fonctionne pas par le changement, c'est sans importance.
Il me semble vous avez besoin d'Android 4.4 non seulement 4,3 pour HOGP.
OriginalL'auteur bassplayer142 | 2014-03-19
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, l'intervalle de connexion définit une fenêtre de temps pendant laquelle les deux appareils utilisent la même fréquence pour le transfert de données. Il y a 37 canaux de données au total, et les périphériques connectés hop à travers eux, à chaque Intervalle de Connexion.
Ainsi, les deux appareils est de s'entendre sur des valeurs précises de ces paramètres dès le début afin d'être en phase, c'est à dire, connecté.
Deuxième, lorsque la connexion est établie, le maître (ou Central) envoie les paramètres de connexion, il prend en charge. L'autre appareil (ou périphérique) juste à l'aveuglette. iOS par défaut définit la connexion de l'intervalle de 30 ms. Une fois la connexion établie, le périphérique peut demander les paramètres de la connexion de mise à jour, en définissant les valeurs min et max, selon les lignes directrices apple a vous fournir. La réception de la partie, lire iOS dans ce cas, va chercher ce qu'il trouver le meilleur pour elle entre [min;max], et renverra une réponse avec des valeurs exactes, il a pris de la. Il peut aussi rejeter la demande, si les valeurs ne sont pas conformes aux lignes directrices.
Enfin, 7.5 ms est la longueur minimale de l'intervalle de connexion défini par la spécification Bluetooth. La valeur maximale est de 4 s. Plus il est faible, plus la bande passante, mais à plus grande consommation d'énergie. Et, à l'opposé des valeurs plus élevées. La meilleure valeur dépend de l'application spécifique. Considérant que vous travaillez avec le profil HID je suppose que le temps de latence est important pour vous.
iOS dit qu'il prend en charge la connexion des intervalles de bas de 20ms (bien que je l'ai trouvé dur pour atteindre cet objectif, quelques fois), mais dans votre cas (HID). elles permettent également de 11,25 ms.
Espère que ça aide.
OriginalL'auteur ildarM
Pour modifier les paramètres d'Android (demande du centre de Périphérique) vous pouvez faire quelque chose comme ceci:
Je dois dire cependant que cela n'a pas fonctionné pour moi, en utilisant Android 5 appareils à la fois en tant que périphérique et central, parce que les Génériques d'Accès de Service (0x1800) ne propose pas dans mon appareil Caractéristique 0x2a04 Privilégié pour les Paramètres de Connexion. C'est seulement d'offrir des 0x2a00 (nom du périphérique) et 0x2a01 (apparence).
Références:
http://www.cumulations.com/blogs/7/Doing-firmware-upgrade-over-BLE-in-Android
https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.gap.peripheral_preferred_connection_parameters.xml
https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.generic_access.xml
https://farwestab.wordpress.com/2011/02/05/some-tips-on-android-and-bluetooth/
Je ne pense pas que l'écriture à la preferrered paramètres de connexion en fait change les paramètres de connexion. (Je suis d'accord c'est stupide.) La seule façon vous pouvez le faire sur Android est avec
requestConnectionPriority()
, ou de le faire à partir du périphérique (par exemple, sur nRF51 utiliser lessd_ble_gap_conn_param_update()
OriginalL'auteur bingen
Je crois que cette caractéristique est uniquement destiné à fournir des informations à la Centrale de l'appareil. C'est pourquoi il est généralement en lecture seule (pour moi, et cxphong). Bingen la réponse n'est pas universellement travail, et je ne suis pas certain qu'il est destiné à travailler de cette façon. Personne n'a réellement réussi à le faire fonctionner sur un appareil spécifique?
Il semble que Android et iOS n'est pas possible de consulter les informations contenues dans ce champ en lecture seule caractéristique, et donc je ne suis pas certain qu'il soit très utile.
Ce qui fonctionne pour moi est décrit ci-dessous, de Cyprès et périphérique Android central. Une approche similaire devrait travailler avec d'autres appareils.
Sur le plan central, il n'y a rien à faire. Après, il reçoit la demande, il va lancer le paramètre de mise à jour un peu plus tard.
Acclamations,
David
OriginalL'auteur davhoo