Jak to działa
Pokazuje, co urządzenie USB deklaruje o sobie zaraz po podłączeniu. Deskryptor urządzenia zawiera Vendor ID przydzielony przez USB-IF, Product ID wybrany przez producenta, wersję specyfikacji USB, którą deklaruje spełniać, wersję samego produktu oraz — jeśli urządzenie je udostępnia — teksty producenta, produktu i numeru seryjnego.
Poniżej pojawia się pełne drzewo: każda konfiguracja ze swoimi interfejsami, każdy interfejs ze swoją trójką klasy, podklasy i protokołu przetłumaczoną na oficjalną nazwę USB-IF oraz każdy punkt końcowy ze swoim adresem, kierunkiem, typem transferu i maksymalnym rozmiarem pakietu. Interfejsy z kilkoma ustawieniami alternatywnymi —typowe w kamerach i kartach dźwiękowych— są wypisane osobno.
Narzędzie tylko odczytuje deskryptory: nigdy nie otwiera sesji z urządzeniem, nigdy nie rezerwuje interfejsu i nigdy nie wysyła mu ani jednego bajtu, więc nie przeszkadza sterownikowi, który z niego korzysta. Całe drzewo można wyeksportować do JSON, aby dołączyć je do raportu albo porównać z drzewem z innego komputera.
Przykłady
046D:C52B0x00 / 0x00 / 0x00 → 3 × HID (0x03)Bezprzewodowy odbiornik klawiatury i myszy deklaruje na poziomie urządzenia klasę 0x00, więc rzeczywisty typ określa się interfejs po interfejsie: tutaj trzy interfejsy HID, każdy z jednym wejściowym punktem końcowym typu przerwaniowego.0x08 / 0x06 / 0x50Mass Storage · SCSI transparent command set · Bulk-Only TransportTypowa trójka pendrive'a lub dysku zewnętrznego: dwa masowe punkty końcowe, jeden wejściowy i jeden wyjściowy, którymi podróżują polecenia SCSI.0x02 / 0x02 / 0x01Communications and CDC Control · Abstract Control Model · AT Commands (ITU-T V.250)To wirtualny port szeregowy płytki rozwojowej albo modemu: interfejs sterujący z jednym przerwaniowym punktem końcowym i interfejs CDC-Data z dwoma masowymi punktami końcowymi, które przenoszą dane.Przypadki użycia
- Ustalić dokładny Vendor ID i Product ID urządzenia, aby poszukać dla niego sterownika albo napisać regułę udev w Linuksie.
- Zobaczyć numer seryjny pendrive'a, czytnika albo adaptera, gdy system operacyjny nie pokazuje go od razu.
- Potwierdzić podczas pracy nad firmware'em, że urządzenie publikuje oczekiwane interfejsy, alternatywy i punkty końcowe z właściwymi klasami.
- Odkryć, przez który punkt końcowy i jakim typem transferu trzeba rozmawiać z urządzeniem, zanim zacznie się dla niego programować.
- Odróżnić dwa pozornie identyczne urządzenia, porównując ich wersję, interfejsy i rozmiary pakietów.
- Udokumentować konfigurację USB komputera, eksportując całe drzewo do JSON.
Najczęstsze pytania
Dlaczego nie działa na moim iPhonie ani w Firefoksie?
API WebUSB jest zaimplementowane w przeglądarkach opartych na Chromium —Chrome, Edge i Opera— dla Windows, macOS, Linux, ChromeOS i Android. Firefox i Safari go nie implementują, a w iOS wszystkie przeglądarki korzystają z silnika systemu, więc tam również nie jest dostępne. Potrzebne są też HTTPS i to, żeby strona nie była osadzona w innej witrynie.
Urządzenie jest podłączone, ale nie pojawia się w oknie wyboru.
Wybrany filtr może być zbyt wąski: spróbuj opcji, która oferuje wszystkie urządzenia. Jeśli nadal się nie pojawia, prawdopodobnie znajduje się na liście blokad przeglądarki, która ze względów bezpieczeństwa wyklucza pewne produkty —w tym klucze bezpieczeństwa FIDO— żeby żadna strona internetowa nie mogła ich dotknąć. W Linuksie może też brakować systemowych uprawnień do węzła urządzenia.
Dlaczego urządzenie podaje klasę 0x00?
Klasa 0x00 w deskryptorze urządzenia oznacza «zajrzyj do interfejsów». Używają jej niemal wszystkie urządzenia złożone, łączące różne funkcje w jednym kablu: klawiatura z wbudowanym koncentratorem, kamera udostępniająca także mikrofon albo drukarka wielofunkcyjna. W takich przypadkach rzeczywisty typ każdej funkcji znajduje się w klasie każdego interfejsu, a nie w klasie urządzenia.
Czym jest punkt końcowy i co oznacza adres taki jak 0x81?
Punkt końcowy to każda ze skrzynek, przez które dane wchodzą do interfejsu lub z niego wychodzą. Siedem młodszych bitów adresu to numer punktu końcowego, a najstarszy bit wskazuje kierunek, więc 0x81 to wejściowy punkt końcowy 1 —z urządzenia do komputera— a 0x01 byłby wyjściowym punktem końcowym 1. Typ transferu określa sposób obsługi: masowy dla dużych ilości danych bez terminu, przerwaniowy dla małych i częstych zdarzeń, takich jak naciśnięcie klawisza, oraz izochroniczny dla dźwięku i wideo, które wolą zgubić pakiet niż dotrzeć za późno.
Czy narzędzie może coś zmienić albo zepsuć w urządzeniu?
Nie. Odczytuje tylko deskryptory, które przeglądarka uzyskała już przy wykrywaniu urządzenia; nigdy nie otwiera sesji, nigdy nie rezerwuje interfejsu i nigdy nie zapisuje. Dlatego możesz sprawdzić nawet klawiaturę albo pendrive'a, z którego system operacyjny właśnie korzysta, mimo że strona internetowa nie ma prawa się z nimi komunikować.
Dlaczego producent albo produkt są puste?
Te teksty to deskryptory opcjonalne: wiele tanich urządzeń po prostu ich nie zapisuje, a niektóre systemy operacyjne nie przekazują ich przeglądarce. W takich przypadkach narzędzie szuka Vendor ID i Product ID w katalogu usb.ids projektu Linux USB, który rejestruje oficjalną nazwę producenta, a często również nazwę produktu.
Czy dane urządzenia opuszczają mój komputer?
Deskryptory są odczytywane w Twojej przeglądarce i nie są wysyłane na żaden serwer. Jedynym wyjątkiem jest wyszukiwanie w katalogu usb.ids, które sprawdza Vendor ID i Product ID —dwie liczby identyfikujące model, a nie Twój komputer ani Twój egzemplarz— i które możesz wyłączyć przed wyborem urządzenia. Numer seryjny nigdy nie jest wysyłany.
Czym są ustawienia alternatywne interfejsu?
Ten sam interfejs może zadeklarować kilka zestawów punktów końcowych i utrzymywać aktywny tylko jeden. Kamery i karty dźwiękowe używają ich, aby oferować różne kombinacje rozdzielczości lub jakości: każda alternatywa rezerwuje inną przepustowość na magistrali, a system operacyjny wybiera odpowiednią w chwili rozpoczęcia transmisji. Alternatywa 0 pozostaje aktywna, dopóki urządzenie jest bezczynne.