Jak debugować opóźnienie za pomocą myszy Bluetooth i zestawu słuchawkowego A2DP?

13

Jestem właścicielem firmy Logitech M555b myszki do użytku z moim HP EliteBook 8570w laptopa z systemem Kubuntu 12.04. Działa dobrze zaraz po połączeniu za pomocą modułu sterującego KDE Bluetooth.

Jednak po pewnym czasie (pozornie losowym) zaczyna się opóźniać. Ruchy są opóźnione o około 500 ms na krótki okres czasu. Zwykle też odzyskuje po pewnym czasie, ale może to zająć minuty. Wszystkie działania są opóźnione: ruchy, klikanie, przewijanie. Ponadto ruchy mogą być w tym czasie niepewne.

Obejściem, które zawsze działa przez ten sam krótki czas, jest rozłączenie myszy ponownie. Można to zrobić za pomocą tego samego modułu sterującego KDE Bluetooth.

Czego już próbowałem?

  • Uruchamianie w czasie uruchamiania:

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

    Aby wyłączyć wszelkie funkcje oszczędzania energii w hci0urządzeniu Bluetooth .

  • Sprawdź baterie myszy (to tylko tydzień, inne nowe baterie: ten sam wynik)

  • Sprawdzanie dzienników i komunikatów jądra na temat wpisów związanych z Bluetooth: brak oprócz oczekiwanych komunikatów w czasie połączenia.
  • Używam jądra 3.5.0-13-genericzgodnie z PPA-edgerami . Uruchamianie zwykłego jądra 3.2 Precise powoduje takie samo zachowanie.

Niektóre inne informacje, które mogą pomóc:

  • Dzieje się tak, gdy żadne inne połączenia Bluetooth nie są aktywne w urządzeniu.
  • Podobne objawy występują również na moim stereofonicznym zestawie słuchawkowym Bluetooth (A2DP), ale wtedy jest to opóźnianie i pomijanie dźwięku. Zamiana profili Bluetooth zgodnie z opisem tutaj pomaga. Wniosek: to nie mysz jest wadliwa.
  • Zestaw słuchawkowy zawsze działał dobrze, używając mojego martwego Thinkpad T61p z wbudowanym Bluetooth.
  • Moduł bluetooth w moim laptopie jest podłączony przez USB i pokazuje się jako

    0a5c:21e1 Broadcom Corp. 
    
  • Wyłączenie wbudowanego adaptera Bluetooth i korzystanie z innego działa dobrze, bez opóźnień.

    0a5c:2046 Broadcom Corp. Bluetooth Device
    

Jestem mobilny i kilka osób wokół mnie korzysta z Bluetooth w pracy (głównie A2DP). Dzieje się tak również w domu, gdzie moi sąsiedzi prawdopodobnie również używają Bluetooth. To mógł być tylko zakłócenia, ale myślę, że połączenia Bluetooth należy po prostu wskoczyć na inny kanał. Co więcej, po ponownym połączeniu działa on poprawnie natychmiast.

Dlatego uważam, że jest to problem ze sterownikiem oprogramowania i chciałbym go debugować. Czy jest jakiś sposób, aby uzyskać bardziej szczegółowe logowanie do modułów Bluetooth (-hid)?

gertvdijk
źródło
Do czasu zastąpienia go płytą główną miałem zły port USB w komputerze. Czy próbowałeś użyć innego do podłączenia modułu Bluetooth? Możesz także zabrać komputer na przejażdżkę do kraju, wyłączyć samochód i telefon komórkowy i sprawdzić, czy nadal nie ma problemu z brakiem zakłóceń RF.
John S Gruber,
Znalazłem starszy klucz USB 2.0 Bluetooth i ten działa jak urok. Wydaje się to szczególnym 0a5c:21e1 Broadcom Corp.problemem w systemie Linux.
gertvdijk
Kolejna aktualizacja dotycząca pierwotnego problemu. Odkąd jestem w jądrze Linuksa 3.7.x, wydaje się, że zniknęło to również na wewnętrznym adapterze - wszystko działa bardzo dobrze. Prawdopodobnie został tutaj naprawiony błąd. Kiedy będę miał czas, aby dowiedzieć się więcej, zgłoś to jako błąd.
gertvdijk

Odpowiedzi:

6

Możesz spróbować użyć hcidumpnarzędzia z pakietu bluez-hcidumpdo monitorowania urządzeń Bluetooth i uzyskać szczegółowe informacje:

sudo apt-get install bluez-hcidump

W opisie opakowania zaznaczono, że:

Narzędzie hcidump umożliwia monitorowanie aktywności Bluetooth. Zapewnia dezasemblację ruchu Bluetooth i może wyświetlać pakiety z protokołów wyższego poziomu, takich jak RFCOMM, SDP i BNEP.

Za pomocą tego narzędzia można zarejestrować dane wyjściowe z urządzenia na ekranie lub w pliku; gdzie hciXjest twoje własne urządzenie bluetooth (hci0 jest domyślne i używane, jeśli nic nie określisz za pomocą -i), możesz uruchomić:

sudo hcidump -x -i hciX

Możesz zapisać zrzut do pliku, dołączając do polecenia -w ~/output, a jeśli chcesz wiedzieć o danych audio, możesz użyć -Aprzełącznika, a tym samym wyodrębnić dane audio SCO, chociaż w tym przypadku zawsze musisz określić plik wyjściowy:

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

Możesz wyświetlić zapisany plik zrzutu za pomocą

sudo hcidump -r ~/output

Istnieje o wiele bardziej szczegółowe opcje, które możesz chcieć zbadać; jeśli chcesz, możesz filtrować według typu pakietu, ponieważ domyślnie wszystkie pakiety są zrzucane. Więcej informacji można znaleźć man hcidumpna stronach internetowych Ubuntu .

Jedyną inną opcją jest instalacja wiresharki sprawdzenie, czy może wykryć twoje urządzenia; jeśli to możliwe, będzie mógł analizować ruch USB i Bluetooth, jak wspomniano tutaj , ale hcidumppowinien dać lepsze wyniki.


źródło
Dzięki! Osobliwe jest to, że podczas uruchamiania hcidumpproblemu nie pojawia się. Również w momencie, gdy zacznę go uruchamiać, problem znika natychmiast. Ta sonda debugująca wydaje się być niemożliwa do odtworzenia.
gertvdijk
2

Miałem trochę szczęścia w używaniu śledzenia USB do rozwiązywania dziwnych problemów z dźwiękiem. Czasami możesz określić coś na podstawie zawartości lub czasu pakietów. W moim przypadku była to sporadyczna zmiana długości pakietu odpowiadająca słyszanemu hałasowi.

Oto strona z Wireshark, która zawiera pewne informacje.

Możesz uzyskać ślad, wykonując następujące czynności:

  1. sudo modprobe usmon
  2. cd / sys / kernel / debug / usb / usbmon
  3. sudo cat 0u | tee ~ / myusbtrace> / dev / null
  4. uruchom swój test
  5. zabij proces od kroku 3

Oto informacje z projektu linux na ten temat, w tym jak zawęzić to, co śledzisz.

Wydaje się, że druga kolumna zawiera czas, dlatego należy uważnie obserwować, jak się zwiększa. Jeśli rozpocznie się płynnie, a później zacznie się skakać, problem może znajdować się w sekcji Bluetooth.

Jeśli ślad pokazuje nieregularne pakiety, gdy występuje problem, którym może być USB lub Bluetooth, ale kierunek nieregularnych pakietów może wskazywać, czy jest to jądro czy sterownik, a nie coś po drugiej stronie magistrali USB.

John S Gruber
źródło
Bardzo pomocny, dzięki. Gdyby to było możliwe, zaoferowałby małą nagrodę. :)
gertvdijk