Isolér RGB-data i USB-optagelser
Denne tutorial viser dig, hvordan du analyserer USB-data for at implementere enheder i SignalRGB.
Sortering af data
Sektion kaldt “Sortering af data”Inden vi forsøger at fortolke USB-dataoptagelsen, bør vi sortere den for at finde specifikke pakker.
I Wireshark:
- Åbn USB-dataoptagelsen
- Klik på “Info”-headeren for at sortere efter pakketype
- Rul gennem listen, indtil du finder enten typen URB_INTERRUPT OUT eller SET_REPORT Request
Hvis du ikke finder nogen af de ovennævnte kommandoer, arbejder du muligvis med en RAWUSB-enhed eller har ikke udført optagelsen korrekt. For RAWUSB-enheder vil du se URBBULK_OUT- eller URB_CONTROL OUT-kommandoer. Hvis du har en RAWUSB-enhed, deltag i denne Discord-server for udviklingshjælp.
Find RGB-pakker
Sektion kaldt “Find RGB-pakker”De pakker vi primært søger efter er dem der indeholder de RGB-værdier vi satte under optagelse af vores USB-pakker.
Bemærk: Vi vil bevidst ignorere enheds-initialiseringspakker for nu. Disse kan blive nødvendige senere.
De data der sendes i hver pakke følger efter alle USB-protokol-headeroplysninger. For at se disse skal vi finde sektionen “Data Fragment”.
- Vælg en pakke
- Vælg feltet HID Data, eller udvid sektionen Setup Data og vælg feltet Data Fragment
- Et klik på feltet bør også markere dataområdet nedenfor i Wireshark med blåt
- Det valgte felt viser de sendte data uden mellemrum. I denne visning svarer hvert 2 tegn til én enkelt byte.

Bemærk: De værdier vi ser er i HEX-format (base 16), et dataformat der repræsenterer decimalværdierne 0 til 255 som værdier fra 0x00 til 0xFF.
Pakkestruktur
Sektion kaldt “Pakkestruktur”Da vi i vores guide om USB-dataoptagelse satte Rød, Grøn og Blå til deres maksimumværdier, søger vi i vores pakkeoptagnelse efter værdier af 0xFF. Hvis du brugte andre farver i din optagelse, skal du kende den specifikke HEX-farve der blev brugt, eller gentage optagelsen med kendte farver.
Typisk indeholder en enheds belysningspakker en header der angiver hvilken kommando pakken er til og hvilken belysningszone af enheden der adresseres, efterfulgt af RGB-dataene og sjældent nogle foderdatabytes som en CRC-checksum.
RGB-dataene følger ofte nogle gængse formater, som vi kan kontrollere ved at søge efter de farver vi satte i vores optagelse:
- R, G, B, R, G, B, R, G, B (Rød -> Grøn -> Blå -> Gentag)
- RRR, GGG, BBB (Flere Rød -> Flere Grøn -> Flere Blå -> Gentag)
- Br, R, G, B (Lysstyrke -> Rød -> Grøn -> Blå -> Gentag)
Bemærk: Visse enheder bruger en anden farverækkefølge. Selvom de fleste bruger RGB, kan din enhed bruge GBR, BGR eller en anden kombination.
I vores tilfælde er de søgte værdier:
- 0xff, 0x00, 0x00 | 0x00, 0xff, 0x00 | 0x00, 0x00, 0xff (hvis enheden bruger pakkerækkefølgen R,G,B).
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 (hvis enheden bruger pakkerækkefølgen RRR,GGG,BBB).
- 0xff, 0xff, 0x00, 0x00 | 0xff, 0x00, 0xff, 0x00 | 0xff, 0x00, 0x00, 0xff (hvis enheden bruger pakkerækkefølgen Br,R,G,B)
Bemærk: Ovenstående eksempler er blot nogle gængse pakkestrukturer for enheder og gælder måske ikke altid. Du skal sammenligne og søge efter fællesstræk.
Kontrol af pakker
Sektion kaldt “Kontrol af pakker”Når vi ruller igennem pakkerne, opdager vi at pakke 271 i vores optagelse indeholder bytes der ligner R,G,B-pakkestrukturen.
Bemærk: Visse enheder bruger muligvis flere pakker til at sætte farverne for hele enheden. Husk at se på de efterfølgende pakker og sørg for at finde, hvor den første pakke gentager sig.

Vi markerer denne pakke med funktionen MARK/UNMARK Packet i Wireshark. Dette kan gøres ved at trykke CTRL + M samtidigt eller ved at højreklikke på pakken og klikke på MARK/UNMARK Packet.
For at bekræfte at denne pakke faktisk er en af vores farvedatapakker, ruller vi videre ned for at søge efter yderligere pakker der matcher vores R,G,B-struktur. Vi kontrollerer også om disse pakker følger den rækkefølge vi satte farverne i i originalsoftwaren. Dette er et godt tidspunkt at se på pakkernes headers og se om de ændres. Hvis de ændres i et mønster, er det meget sandsynligt at der kræves flere pakker for at sætte alle enhedens LED’er.
Når vi ser på pakke 271, pakke 273 og pakke 275 side om side, ser vi at RGB-dataene i pakke 271 kun indeholder Rød (0xFF, 0x00, 0x00), i pakke 273 kun Grøn (0x00, 0xFF, 0x00) og i pakke 275 kun Blå (0x00, 0x00, 0xFF). Når vi ser på header-dataene over RGB-sektionen, opdager vi at disse data ikke ændres mellem de tre pakker. Det betyder højst sandsynligt at vi ændrer de samme farvezoner i disse pakker.
- Det er også værd at bemærke at vi ud fra farvepakkerne kan bestemme, hvor mange zoner en enhed indeholder. For at gøre dette kontrollerer vi, hvor mange gange vores kendte værdier forekommer i RGB-datapakkerne. I det følgende eksempel ser vi at enheden har 4 zoner som vi med sikkerhed kan adressere.


Vi fortsætter igennem vores pakker, indtil vi har fundet og markeret alle pakker med farvedata. Derefter fortsætter vi med at oprette vores plugin-fil.