Ga naar inhoud

RGB-data isoleren in USB-opnames

Deze tutorial laat zien hoe u USB-data decodeert voor het implementeren van apparaten in SignalRGB.

Voordat we de USB-data-opname kunnen interpreteren, willen we deze sorteren om specifieke pakketten te vinden.

In Wireshark:

  1. Open de USB-data-opname
  2. Klik op de kolomkop ‘Info’ om op pakkettype te sorteren
  3. Scroll totdat u een URB_INTERRUPT OUT of SET_REPORT Request-type vindt

Als u geen van de bovenstaande opdrachten vindt, werkt u mogelijk met een RAWUSB-apparaat, of heeft u de opname niet correct uitgevoerd. Als u een RAWUSB-apparaat heeft, ziet u URB_BULK_OUT of URB_CONTROL OUT-opdrachten. Als u een RAWUSB-apparaat heeft, doe dan mee aan deze Discord-server voor ontwikkelaarshulp.

De pakketten die we als eerste zoeken zijn de pakketten die de RGB-waarden bevatten die we hebben ingesteld bij het maken van onze USB-pakketopnames.

Opmerking: We gaan initialisatiepakketten van het apparaat voorlopig bewust negeren. Deze kunnen later wel nodig zijn.

De data die in elk pakket wordt verzonden, staat na alle USB-protocolheaderinformatie. Om dit te zien, moeten we de sectie Data Fragment vinden.

  1. Selecteer een pakket
  2. Selecteer het veld HID Data of vouw de sectie Setup Data uit en selecteer het veld Data Fragment
  3. Door op het veld te klikken, wordt de datasectie ook blauw gemarkeerd onderaan Wireshark
  4. Het geselecteerde veld toont ook de verzonden data zonder spaties. Elke 2 tekens is één byte in deze weergave.

Opmerking: De waarden die we bekijken zijn in HEX (grondtal 16), een dataformaat dat 0 tot 255 in decimaal weergeeft als waarden van 0x00 tot 0xFF.

Omdat we rood, groen en blauw op hun maximale waarden hebben ingesteld in onze gids USB-data vastleggen, zoeken we naar waarden van 0xFF in onze pakketopname. Als u andere kleuren heeft gebruikt, moet u de specifieke HEX-kleur kennen of opnieuw vastleggen met bekende kleuren.

Traditioneel bevatten verlichtingspakketten voor een apparaat een header die aangeeft voor welke opdracht het pakket bedoeld is en welke verlichtingszone van een apparaat we aanspreken, gevolgd door de RGB-data en zelden wat voettekstdata zoals een CRC-controlesom.

De RGB-data volgt doorgaans een van de volgende formaten, die we kunnen controleren door de kleuren te zoeken die we in onze opname hebben ingesteld:

  • R, G, B, R, G, B, R, G, B (Rood → Groen → Blauw → Herhaal)
  • RRR, GGG, BBB (Meerdere Rood → Meerdere Groen → Meerdere Blauw → Herhaal)
  • Br, R, G, B (Helderheid → Rood → Groen → Blauw → Herhaal)

Opmerking: Sommige apparaten gebruiken een andere kleurvolgorde. Hoewel de meeste RGB gebruiken, kan uw apparaat GBR, BGR of een andere combinatie gebruiken.

In ons geval zijn de waarden waarnaar we zoeken:

  • 0xff, 0x00, 0x00 | 0x00, 0xff, 0x00 | 0x00, 0x00, 0xff (als het apparaat de R,G,B-pakketvolgorde gebruikt).
  • 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 (als het apparaat de RRR,GGG,BBB-pakketvolgorde gebruikt).
  • 0xff, 0xff, 0x00, 0x00 | 0xff, 0x00, 0xff, 0x00 | 0xff, 0x00, 0x00, 0xff (als het apparaat de Br,R,G,B-pakketvolgorde gebruikt)

Opmerking: De bovenstaande voorbeelden zijn slechts enkele veelvoorkomende pakketstructuren voor apparaten en zijn niet altijd van toepassing. U moet vergelijken en overeenkomsten zoeken.

Als we door de pakketten scrollen, zien we dat pakket 271 in onze opname bytes bevat die lijken op de R,G,B-pakketstructuur.

Opmerking: Sommige apparaten gebruiken mogelijk meerdere pakketten om de kleuren op het hele apparaat in te stellen. Zorg ervoor dat u de volgende pakketten bekijkt en ontdekt waar het initiële pakket herhaalt.

We gaan dit pakket markeren met de functie MARK/UNMARK Packet in Wireshark, wat kan worden gedaan door tegelijkertijd CTRL + M in te drukken of door rechts te klikken op het pakket en MARK/UNMARK Packet te selecteren.

Om te bevestigen dat dit pakket inderdaad een van onze kleurpakketten is, scrollen we verder naar beneden om meer pakketten te zoeken die passen bij onze R,G,B-structuur. We controleren ook of deze pakketten de volgorde volgen die we in de originele software hebben ingesteld. Dit is ook een goed moment om de headers van de pakketten te bekijken en te zien of ze veranderen. Als ze in een patroon veranderen, is het zeer waarschijnlijk dat meerdere pakketten nodig zijn om alle LED’s op het apparaat in te stellen.

Als we pakket 271, pakket 273 en pakket 275 naast elkaar bekijken, zien we dat de RGB-data op pakket 271 alleen Rood (0xFF, 0x00, 0x00), op pakket 273 alleen Groen (0x00, 0xFF, 0x00) en op pakket 275 alleen Blauw (0x00, 0x00, 0xFF) lijkt te zijn. Als we naar de headerdata boven de RGB-sectie kijken, zien we dat deze data niet verandert tussen de drie pakketten. Dit betekent hoogstwaarschijnlijk dat we dezelfde kleurzones in deze pakketten wijzigen.

  • Ook te vermelden: we kunnen de kleurpakketten gebruiken om te bepalen hoeveel zones een apparaat bevat. We kunnen dit ontdekken door te controleren hoe vaak onze bekende waarden voorkomen in de RGB-datapakketten. In het onderstaande voorbeeld zien we dat het apparaat 4 zones heeft die we kunnen aanspreken.

We blijven door de pakketten scrollen totdat we alle pakketten met kleurdata hebben gevonden en gemarkeerd. Daarna gaan we verder met het aanmaken van ons pluginbestand.