web-dev-qa-db-fra.com

Comment déboguer un lag avec une souris connectée Bluetooth et un casque A2DP?

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

Cependant, après un certain temps (apparemment aléatoire), il commence à traîner. Les mouvements sont retardés d'environ 500 ms pour 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, clic, défilement. De plus, les mouvements peuvent être agités pendant ces périodes.

Une solution de contournement qui fonctionne toujours pendant une même courte période consiste à déconnecter une nouvelle connexion de 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é?

  • En cours d'exécution au démarrage:

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

    Pour désactiver les fonctions d'économie d'énergie sur le périphérique Bluetooth hci0.

  • Vérifiez les piles de la souris (c'est juste une semaine, d'autres piles neuves: même résultat)

  • Vérification des journaux et des messages du noyau concernant les entrées liées à Bluetooth: aucune en dehors des messages attendus au moment de la connexion.
  • J'utilise le noyau 3.5.0-13-generic comme prévu dans le xorg-edgers PPA . Le démarrage du noyau normal 3.2 précis donne le même comportement.

Quelques autres informations qui peuvent 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 le son est alors en retard et en retard. 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é avec mon Thinkpad T61p, désormais mort, avec Bluetooth intégré.
  • Le module Bluetooth de mon ordinateur portable est connecté via USB et s’affiche comme suit:

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

    0a5c:2046 Broadcom Corp. Bluetooth Device
    

Je suis mobile et plusieurs personnes autour de moi utilisent Bluetooth au travail (principalement A2DP). Cela se produit également à la maison, où mes voisins utilisent probablement également Bluetooth. Cela pourrait peut-être simplement une interférence radio, mais je pense que les connexions Bluetooth devraient simplement passer à un autre canal. Et, de plus, cela fonctionne correctement instantanément lorsque vous vous reconnectez.

Par conséquent, je pense que c'est un problème de pilote de 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)?

13
gertvdijk

Vous pouvez essayer d'utiliser l'utilitaire hcidump du package bluez-hcidump pour surveiller vos périphériques Bluetooth et obtenir des informations détaillées:

Sudo apt-get install bluez-hcidump

Dans la description du paquet, 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 de protocoles de niveau supérieur tels que RFCOMM, SDP et BNEP.

Vous pouvez utiliser cet utilitaire pour consigner la sortie de votre appareil dans un écran ou un fichier. où hciX est votre propre périphérique Bluetooth (hci0 est le paramètre 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 la copie dans un fichier en ajoutant à la commande -w ~/output, et si vous souhaitez en savoir plus sur les données audio, vous pouvez utiliser le commutateur -A et ainsi extraire SCO audio. données, 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 sauvegarde enregistré à l'aide de

Sudo hcidump -r ~/output

Il y a beaucoup d'options plus spécifiques que vous pourriez vouloir é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 hcidump ou le pages de manuel Ubuntu en ligne pour plus d'informations.

La seule autre option consiste à installer wireshark et à voir s'il peut détecter vos périphériques. s'il le peut, il sera capable d'analyser le trafic USB et Bluetooth, comme indiqué ici , mais hcidump devrait donner de meilleurs résultats.

6
user76204

J'ai eu un peu de chance en utilisant le traçage USB pour résoudre des problèmes audio étranges. Parfois, vous pouvez déterminer quelque chose à partir du contenu ou du minutage des paquets. Dans mon cas, il y avait un changement occasionnel dans 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. Sudo chat 0u | tee ~/myusbtrace>/dev/null
  4. lancez votre test
  5. tuer le processus de l'étape 3

Here contient des informations sur le projet Linux, y compris sur la manière de réduire ce que vous tracez.

La seconde colonne semble contenir l'heure, vous devez donc surveiller de près son incrémentation. Si tout commence bien et que plus tard, le problème se situe peut-être dans la section Bluetooth.

Si la trace présente des paquets irréguliers alors qu'il y a un problème pouvant être lié à l'USB ou au Bluetooth, la direction des paquets irréguliers peut indiquer s'il s'agit du noyau ou du pilote plutôt que de quelque chose de l'autre côté du bus USB.

2
John S Gruber