2017-03-10 2 views
0

J'ai un service/caractéristique caché sur un périphérique BLE, qui ne devient visible que si vous envoyez la commande "right" à une autre caractéristique. Cependant, si je reste connecté, et que j'appelle simplement "discoverServices: nil" ou "discoverServices: service-i-care-about", il ne le trouvera pas une fois activé. J'ai changé mon firmware pour que l'appareil ne cache pas le service lors de la déconnexion (ce que je voudrais), mais pour rester, et je sais que le service est activé, parce que je peux me reconnecter au périphérique, et le le service apparaît. Je ne veux pas faire cela, parce que le but de cacher le service est d'envoyer la bonne commande pour activer le service (pour l'enregistrement, c'est un service de mise à jour du firmware fourni par un fournisseur MCU, donc je ne peux pas changer le service pour être un de "mien" ou mettre n'importe quelle sécurité autour du service lui-même)Redécouverte des services dans les appareils connectés?

Est-ce le comportement bluetooth prévu? Ou est-ce que iOS cache peut-être quelque chose et que je dois faire quelque chose pour ne pas avoir les valeurs en cache?

+0

Envoyez-vous l'indication de caractéristique "service modifié" après avoir changé le gatt db? – Emil

Répondre

0

iOS met en cache tout périphérique détecté et les services et caractéristiques correspondants pour des raisons de performances. Si vous avez besoin de changer la table du GATT de votre périphérique à un moment donné, vous avez deux options pour dire les centrales:

  1. dire la centrale par les services Changed caractéristique
  2. changer l'adresse MAC de votre périphérique (non recommandé, mais certains fabricants de chipset utilisent cette solution de contournement, par exemple, NordicSemi dans le bootloader BLE)

nous avons rencontré ce problème aussi bien parce que nous devons cacher le service de mise à jour du firmware de notre appareil embarqué jusqu'à ce que nous sautons au bootloader.