Przejdź do głównej zawartości

Izolowanie danych RGB w nagraniach USB

Ten samouczek pokazuje, jak dekodować dane USB do implementacji urządzeń w SignalRGB.

Zanim będziemy mogli interpretować nagranie danych USB, chcemy je posortować, aby znaleźć konkretne pakiety.

W Wireshark:

  1. Otwórz nagranie danych USB
  2. Kliknij nagłówek kolumny ‘Info’, aby posortować według typu pakietu
  3. Przewijaj, aż znajdziesz typ URB_INTERRUPT OUT lub SET_REPORT Request

Jeśli nie znajdziesz żadnego z powyższych poleceń, możesz mieć urządzenie RAWUSB lub nagranie nie zostało wykonane poprawnie. Jeśli masz urządzenie RAWUSB, zobaczysz polecenia URB_BULK_OUT lub URB_CONTROL OUT. Jeśli masz urządzenie RAWUSB, dołącz do tego serwera Discord po pomoc dla deweloperów.

Pakiety, których szukamy jako pierwsze, to pakiety zawierające wartości RGB, które ustawiliśmy podczas tworzenia nagrań pakietów USB.

Uwaga: Celowo pomijamy na razie pakiety inicjalizacyjne urządzenia. Mogą być potrzebne później.

Dane wysyłane w każdym pakiecie znajdują się po wszystkich informacjach nagłówka protokołu USB. Aby to zobaczyć, musimy znaleźć sekcję Data Fragment.

  1. Wybierz pakiet
  2. Wybierz pole HID Data lub rozwiń sekcję Setup Data i wybierz pole Data Fragment
  3. Kliknięcie na pole podświetla również sekcję danych na niebiesko u dołu Wireshark
  4. Wybrane pole pokazuje również wysyłane dane bez spacji. Każde 2 znaki to jeden bajt w tym widoku.

Uwaga: Wartości, które oglądamy, są w HEX (podstawa 16), formacie danych reprezentującym 0 do 255 w systemie dziesiętnym jako wartości od 0x00 do 0xFF.

Ponieważ ustawiliśmy czerwony, zielony i niebieski na ich maksymalne wartości w naszym przewodniku przechwytywania danych USB, szukamy wartości 0xFF w naszym nagraniu pakietów. Jeśli użyłeś innych kolorów, musisz znać konkretny kolor HEX lub ponownie nagrać ze znanych kolorów.

Tradycyjnie pakiety oświetlenia dla urządzenia zawierają nagłówek wskazujący, do jakiego polecenia jest pakiet i do której strefy oświetlenia urządzenia się odwołujemy, po których następują dane RGB i rzadko dane stopki takie jak suma kontrolna CRC.

Dane RGB zazwyczaj mają jeden z następujących formatów, które możemy sprawdzić szukając kolorów ustawionych w naszym nagraniu:

  • R, G, B, R, G, B, R, G, B (Czerwony → Zielony → Niebieski → Powtórz)
  • RRR, GGG, BBB (Wiele Czerwonych → Wiele Zielonych → Wiele Niebieskich → Powtórz)
  • Br, R, G, B (Jasność → Czerwony → Zielony → Niebieski → Powtórz)

Uwaga: Niektóre urządzenia używają innej kolejności kolorów. Chociaż większość używa RGB, twoje urządzenie może używać GBR, BGR lub innej kombinacji.

W naszym przypadku wartości, których szukamy, to:

  • 0xff, 0x00, 0x00 | 0x00, 0xff, 0x00 | 0x00, 0x00, 0xff (jeśli urządzenie używa kolejności pakietu R,G,B).
  • 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 (jeśli urządzenie używa kolejności pakietu RRR,GGG,BBB).
  • 0xff, 0xff, 0x00, 0x00 | 0xff, 0x00, 0xff, 0x00 | 0xff, 0x00, 0x00, 0xff (jeśli urządzenie używa kolejności pakietu Br,R,G,B)

Uwaga: Powyższe przykłady to tylko kilka popularnych struktur pakietów dla urządzeń i nie zawsze mają zastosowanie. Musisz porównywać i szukać dopasowań.

Gdy przewijamy pakiety, widzimy, że pakiet 271 w naszym nagraniu zawiera bajty przypominające strukturę pakietu R,G,B.

Uwaga: Niektóre urządzenia mogą używać wielu pakietów do ustawienia kolorów na całym urządzeniu. Upewnij się, że sprawdzasz kolejne pakiety i odkryjesz, gdzie powtarza się pakiet początkowy.

Oznaczymy ten pakiet funkcją MARK/UNMARK Packet w Wireshark, co można zrobić wciskając jednocześnie CTRL + M lub klikając prawym przyciskiem myszy na pakiet i wybierając MARK/UNMARK Packet.

Aby potwierdzić, że ten pakiet jest rzeczywiście jednym z naszych pakietów kolorów, przewijamy dalej w dół, aby znaleźć więcej pakietów pasujących do naszej struktury R,G,B. Sprawdzamy też, czy te pakiety podążają za kolejnością, którą ustawiliśmy w oryginalnym oprogramowaniu. To również dobry moment, aby przyjrzeć się nagłówkom pakietów i zobaczyć, czy się zmieniają. Jeśli zmieniają się w pewnym wzorcu, bardzo prawdopodobne jest, że do ustawienia wszystkich LED-ów na urządzeniu potrzeba wielu pakietów.

Gdy patrzymy na pakiet 271, pakiet 273 i pakiet 275 obok siebie, widzimy, że dane RGB na pakiecie 271 to tylko Czerwony (0xFF, 0x00, 0x00), na pakiecie 273 tylko Zielony (0x00, 0xFF, 0x00), a na pakiecie 275 tylko Niebieski (0x00, 0x00, 0xFF). Patrząc na dane nagłówka powyżej sekcji RGB, widzimy, że te dane nie zmieniają się między trzema pakietami. Oznacza to najprawdopodobniej, że w tych pakietach zmieniamy te same strefy kolorów.

  • Warto też wspomnieć: możemy używać pakietów kolorów, aby określić, ile stref ma urządzenie. Możemy to odkryć sprawdzając, ile razy nasze znane wartości występują w pakietach danych RGB. W poniższym przykładzie widzimy, że urządzenie ma 4 strefy, do których możemy się odwołać.

Kontynuujemy przewijanie pakietów, aż znajdziemy i oznaczymy wszystkie pakiety z danymi kolorów. Następnie przejdziemy do tworzenia naszego pliku wtyczki.