2017-10-20 24 views
1

J'apprécierais que quelqu'un puisse expliquer un problème que je rencontre avec Raspberry Pi 3 modèle B agissant comme un périphérique central sur une connexion BLE avec un PériphériqueRaspberry Pi3 BLE en tant que périphérique central recevant un seul paquet par intervalle de connexion - gatttool/hcitool

Tout d'abord, je successsfully connecter les deux appareils et activer les notifications sur l'appareil central en utilisant les folllowing commandes hcitool/gatttool:

sudo hciconfig hci0 up 
sudo gatttool --adapter=hci0 --device=XX:XX:XX:XX:XX:XX --adr_type=random --mtu=23 -I 
[][LE]> connect 
[][LE]> char-write-req 0x000c 0100 

Après cela, je commencé à recevoir des notifications sur le modèle de framboise Pi3 B, et en utilisant un BLE sniffer, je vérifie qu'il reçoit 5 paquets BLE avec des valeurs notifiées par intervalle de connexion (c'est OK), ce qui est établi par défaut à 54 (67,5ms). Cependant, une fois que les deux appareils sont connectés, mettre à jour les paramètres de connexion, afin de modifier l'intervalle de raccordement, soit 24 (30 ms) à l'aide de la commande hcitool suivante:

sudo hcitool lecup --handle=XX --min=24 --max=24 

et la question i trouvé est que, une fois le les paramètres de connexion sont mis à jour, j'ai vérifié que le Raspberry Pi3 modèle B commence à recevoir seulement 1 paquet BLE par intervalle de connexion (ce n'est pas OK). Le même comportement est observé en mettant à jour les paramètres de conection à des valeurs plus élevées d'intervalle de connexion, c'est-à-dire 800 (1s).

Quelqu'un pourrait-il me donner une explication de ce problème? En outre, quelqu'un pourrait-il essayer de reproduire cette procédure et vérifier si le même problème est observé?

Merci

Répondre

1

hcitool Lecup utilise hci_le_conn_update (http://elixir.free-electrons.com/linux/latest/source/net/bluetooth/hci_conn.c#L321) qui fixe les min_ce_len et max_ce_len à 0, ce qui signifie qu'il fait allusion au contrôleur que la durée de l'événement de connexion doit être 0 * 0,625 ms. Tu ne veux pas ça. Vous voulez qu'il soit aussi long que votre intervalle de connexion si vous souhaitez continuer à envoyer des paquets pendant tout l'intervalle.

Pour tester pour régler la longueur de la CE, utiliser une commande brute à la place:

sudo hcitool cmd 0x08 0x13 0x40 0x00 0x18 0 0x18 0 0 0 0x60 0 0x30 0 0x30 0 

Cette émet une requête de mise à jour de paramètres de connexion pour la poignée 0x0040, avec un intervalle de connexion min/max = 24 * 1,25 ms, temps de latence esclave = 0, timeout = 960 ms, intervalle CE min/max = 48 * 0,625 ms.

+0

Salut @Emil, merci beaucoup pour votre réponse ... alors où les valeurs max et min par défaut pour la longueur de l'événement de connexion sont définies? ... il semble clair que ces paramètres ne sont pas initialement mis à 0 ... Thaaanks! –

+0

Salut. Cela a-t-il mieux fonctionné avec ma commande? Si vous voyez mon fichier référencé, vous voyez qu'ils sont mis à zéro à \t cp.min_ce_len \t \t = cpu_to_le16 (0x0000); \t cp.max_ce_len \t \t = cpu_to_le16 (0x0000); – Emil

+0

Salut @Emil, OUI, ça a marché ok !. désolé de ne pas le commenter. J'ai vu sur le fichier hci.c de Bluez 5.47 (la distribution que je cours sur mon RPi 3 modèle B pour supporter BLE) que la fonction hci_le_conn_update met les valeurs min_ce_len et max_ce_len à 1. cependant, du comportement initial de l'expérience rapportée , dans lequel j'ai reçu 5 paquets par intervalle de connexion (réglé à 67,5 ms), il semble évident que la longueur max/min de l'événement de connexion n'est pas initialement définie sur ces valeurs. alors où les valeurs max et min par défaut pour l'événement de connexion sont définies? Merci –