Comment déboguer le décalage en utilisant une souris connectée Bluetooth et un casque A2DP?

13

Je possède une souris Logitech M555b à utiliser avec mon ordinateur portable HP Elitebook 8570w exécutant Kubuntu 12.04. Fonctionne correctement juste après la connexion à l'aide du module de contrôle Bluetooth KDE.

Cependant, après un certain temps (apparemment aléatoire), il commence à prendre du retard. Les mouvements sont retardés d'environ 500 ms pendant une courte période. Habituellement, il se rétablit également après un certain temps, mais cela peut prendre quelques minutes. Toutes les actions sont retardées: mouvements, clics, parchemins. De plus, les mouvements peuvent être saccadés pendant ces périodes.

Une solution de contournement qui fonctionne toujours pendant la même courte période de temps consiste à déconnecter et à reconnecter la souris. Cela peut être fait en utilisant le même module de contrôle Bluetooth KDE.

Qu'est-ce que j'ai déjà essayé?

  • Exécuter ceci au démarrage:

    echo on > `readlink -f /sys/class/bluetooth/hci0`/../../../power/level
    

    Pour désactiver toutes les fonctions d'économie d'énergie sur le hci0périphérique Bluetooth .

  • Vérifiez les piles de la souris (elles n'ont qu'une semaine, d'autres piles neuves: même résultat)

  • Vérification des journaux et des messages du noyau sur les entrées liées à Bluetooth: aucun à part les messages attendus sur le temps de connexion.
  • J'utilise le noyau 3.5.0-13-generictel que fourni dans le PPA xorg-edgers . Le démarrage du noyau 3.2 Precise normal entraîne le même comportement.

Quelques autres informations qui peuvent vous aider:

  • Cela se produit lorsqu'aucune autre connexion Bluetooth n'est active sur la machine.
  • Des symptômes similaires se produisent également sur mon casque Bluetooth stéréo (A2DP), mais il s'agit d'un retard et d'un saut audio. L'échange de profils Bluetooth comme décrit ici aide alors. Conclusion: ce n'est pas la souris qui est défectueuse.
  • Le casque a toujours bien fonctionné en utilisant mon Thinkpad T61p maintenant mort avec Bluetooth intégré.
  • Le module Bluetooth de mon ordinateur portable est connecté via USB et apparaît comme

    0a5c:21e1 Broadcom Corp. 
    
  • Désactiver l'adaptateur Bluetooth intégré et en utiliser un autre fonctionne très bien, sans décalage.

    0a5c:2046 Broadcom Corp. Bluetooth Device
    

Je suis mobile et plusieurs personnes autour de moi utilisent Bluetooth au travail (A2DP principalement). Cela se produit également à la maison, où mes voisins utilisent probablement Bluetooth également. Cela pourrait simplement être une interférence radio, mais je pense que les connexions Bluetooth devraient simplement sauter vers un autre canal. Et, en outre, il fonctionne correctement instantanément lors de la reconnexion.

Par conséquent, je pense que c'est un problème de pilote logiciel et j'aimerais le déboguer. Existe-t-il un moyen d'obtenir une journalisation plus détaillée sur les modules Bluetooth (-hid)?

gertvdijk
la source
Jusqu'à ce que je remplace par la carte mère, j'avais un mauvais port USB sur mon ordinateur. Avez-vous essayé d'utiliser un autre pour brancher votre module Bluetooth? Vous pouvez également essayer de prendre votre ordinateur pour un voyage à la campagne, d'éteindre votre voiture et votre téléphone portable et de voir s'il s'agit toujours d'un problème en l'absence d'interférences RF.
John S Gruber,
J'ai trouvé un ancien dongle USB Bluetooth 2.0 et celui-ci fonctionne comme un charme. Cela ressemble à un 0a5c:21e1 Broadcom Corp.problème spécifique sous Linux.
gertvdijk
Une autre mise à jour sur le problème d'origine. Depuis que je suis sur le noyau Linux 3.7.x, cela semble également avoir disparu sur l'adaptateur interne - tout fonctionne très bien. Probablement atteint un bug ici maintenant corrigé. Une fois que j'aurai le temps de trouver plus de détails, je signalerai cela comme un bug.
gertvdijk

Réponses:

6

Vous pouvez essayer d'utiliser l' hcidumputilitaire du package bluez-hcidumppour surveiller vos appareils Bluetooth et obtenir des informations détaillées:

sudo apt-get install bluez-hcidump

Dans la description du package, il est noté que:

L'utilitaire hcidump permet de surveiller l'activité Bluetooth. Il fournit un désassemblage du trafic Bluetooth et peut afficher des paquets provenant de protocoles de niveau supérieur tels que RFCOMM, SDP et BNEP.

Vous pouvez utiliser l'utilitaire pour enregistrer la sortie de votre appareil sur l'écran ou le fichier; où hciXest votre propre périphérique bluetooth (hci0 est la valeur par défaut et utilisé si vous ne spécifiez rien avec -i), vous pouvez exécuter:

sudo hcidump -x -i hciX

Vous pouvez enregistrer le vidage dans un fichier en ajoutant à la commande -w ~/output, et si vous souhaitez spécifiquement connaître les données audio, vous pouvez utiliser le -Acommutateur et ainsi extraire les données audio SCO, bien que dans ce cas, vous devez toujours spécifier un fichier de sortie:

sudo hcidump -x -A -i hciX -w ~/output

Vous pouvez afficher un fichier de vidage enregistré à l'aide de

sudo hcidump -r ~/output

Il existe des options beaucoup plus spécifiques que vous voudrez peut-être étudier; vous pouvez filtrer par type de paquet si vous le souhaitez, car par défaut, tous les paquets sont vidés. Veuillez consulter man hcidumpou les pages de manuel Ubuntu en ligne pour plus d'informations.

La seule autre option est d'installer wiresharket de voir s'il peut détecter vos appareils; s'il le peut, il sera en mesure d'analyser le trafic USB et Bluetooth, comme indiqué ici , mais hcidumpdevrait donner de meilleurs résultats.


la source
Merci! Ce qui est particulier, c'est que lors de l'exécution hcidumpdu problème, le problème n'apparaît pas. De plus, dès que je commence à l'exécuter, le problème disparaît immédiatement. Cette sonde de débogage semble rendre irreproductible.
gertvdijk
2

J'ai eu de la chance en utilisant le traçage USB pour résoudre d'étranges problèmes audio. Parfois, vous pouvez déterminer quelque chose à partir du contenu ou du moment des paquets. Dans mon cas, il s'agissait d'un changement occasionnel de la longueur du paquet correspondant au bruit que j'entendais.

Voici une page de Wireshark qui fournit des informations.

Vous pouvez obtenir une trace simplement en procédant comme suit:

  1. sudo modprobe usmon
  2. cd / sys / kernel / debug / usb / usbmon
  3. chat sudo 0u | tee ~ / myusbtrace> / dev / null
  4. faites votre test
  5. tuer le processus de l'étape 3

Voici des informations du projet Linux à ce sujet, y compris comment affiner ce que vous tracez.

La deuxième colonne semble contenir l'heure, vous devez donc surveiller attentivement son incrémentation. S'il commence en douceur et devient plus agité plus tard, le problème peut être dans la section Bluetooth.

Si la trace montre des paquets irréguliers quand il y a un problème qui pourrait être USB ou Bluetooth, mais la direction des paquets irréguliers peut indiquer s'il s'agit du noyau ou du pilote plutôt que quelque chose de l'autre côté du bus USB.

John S Gruber
la source
Très utile, merci. Aurait offert une petite prime si cela était possible. :)
gertvdijk