Isolando Dados RGB em Capturas USB
Este tutorial mostrará como decodificar dados USB para implementar dispositivos no SignalRGB.
Ordenando os Dados
Seção intitulada “Ordenando os Dados”Antes de tentar interpretar a captura de dados USB, queremos ordená-la para encontrar pacotes específicos.
No Wireshark:
- Abra a captura de dados USB
- Clique no cabeçalho ‘Info’ para ordenar por tipo de pacote
- Role até encontrar um tipo URB_INTERRUPT OUT ou SET_REPORT Request
Se você não encontrar nenhum dos comandos acima, pode estar trabalhando com um dispositivo RAWUSB ou pode não ter feito a captura corretamente. Se você tiver um dispositivo RAWUSB, verá comandos URB_BULK_OUT ou URB_CONTROL OUT. Se tiver um dispositivo RAWUSB, entre no servidor Discord para ajuda com desenvolvimento.
Encontrando Pacotes RGB
Seção intitulada “Encontrando Pacotes RGB”Os primeiros pacotes que procuraremos são aqueles que contêm os valores RGB que definimos ao fazer nossas capturas de pacotes USB.
Nota: Vamos ignorar propositalmente os pacotes de inicialização do dispositivo por enquanto. Eles podem ser necessários mais tarde.
Os dados enviados em cada pacote vêm após todas as informações do cabeçalho do protocolo USB. Para ver isso, precisamos encontrar a seção Data Fragment.
- Selecione um pacote
- Selecione o campo HID Data ou expanda a seção Setup Data e selecione o campo Data Fragment
- Clicar no campo também deve destacar a seção de dados em azul na parte inferior do Wireshark
- O campo selecionado também mostrará os dados enviados sem espaçamento. Cada 2 caracteres é um único byte nesta visualização.

Nota: Os valores que estamos observando estarão em HEX (base 16), que é um formato de dados que representa 0 a 255 em decimal como valores de 0x00 a 0xFF.
Estrutura de Pacotes
Seção intitulada “Estrutura de Pacotes”Como definimos vermelho, verde e azul em seus valores máximos em nosso guia de Captura de Dados USB, procuraremos valores de 0xFF em nossa captura. Se você usou cores diferentes na captura, precisará saber a cor HEX específica usada ou refazer a captura com cores conhecidas.
Tradicionalmente, os pacotes de iluminação de um dispositivo contêm um cabeçalho que indica qual comando o pacote representa e qual zona de iluminação do dispositivo estamos endereçando, seguido pelos dados RGB e raramente algum dado de rodapé como um checksum CRC.
Os dados RGB geralmente seguem alguns formatos que podemos verificar procurando as cores que definimos em nossa captura:
- R, G, B, R, G, B, R, G, B (Vermelho → Verde → Azul → Repetir)
- RRR, GGG, BBB (Vários Vermelho → Vários Verde → Vários Azul → Repetir)
- Br, R, G, B (Brilho → Vermelho → Verde → Azul → Repetir)
Nota: Alguns dispositivos usam uma ordem de cores diferente. Embora a maioria use RGB, você pode descobrir que seu dispositivo usa GBR, BGR ou outra combinação.
No nosso caso, os valores que procuramos serão:
- 0xff, 0x00, 0x00 | 0x00, 0xff, 0x00 | 0x00, 0x00, 0xff (se o dispositivo usar a ordem de pacotes R,G,B).
- 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 (se o dispositivo usar a ordem de pacotes RRR,GGG,BBB).
- 0xff, 0xff, 0x00, 0x00 | 0xff, 0x00, 0xff, 0x00 | 0xff, 0x00, 0x00, 0xff (se o dispositivo usar a ordem de pacotes Br,R,G,B)
Nota: Os exemplos acima são apenas algumas estruturas de pacotes comuns para dispositivos e podem não se aplicar sempre. Você precisará comparar e procurar semelhanças.
Verificando Pacotes
Seção intitulada “Verificando Pacotes”Rolando pelos pacotes, encontramos que o pacote 271 em nossa captura contém bytes que se parecem com a estrutura de pacotes R,G,B.
Nota: Alguns dispositivos podem usar múltiplos pacotes para definir as cores em todo o dispositivo. Certifique-se de olhar para os próximos pacotes e encontrar onde o pacote inicial se repete.

Vamos marcar este pacote usando a função MARK/UNMARK Packet no Wireshark, que pode ser feita pressionando as teclas CTRL + M simultaneamente ou clicando com o botão direito no pacote e clicando em MARK/UNMARK Packet.
Para confirmar que este pacote é realmente um de nossos pacotes de dados de cor, continuaremos rolando para baixo para procurar mais pacotes que se encaixem em nossa estrutura R,G,B. Também verificaremos se esses pacotes seguem a ordem em que definimos as cores no software original. Este é um bom momento para olhar os cabeçalhos dos pacotes e ver se eles mudam. Se estiverem mudando em um padrão, é muito provável que você precise de múltiplos pacotes para definir todos os LEDs no dispositivo.
Observando o pacote 271, o pacote 273 e o pacote 275 lado a lado, podemos ver que os dados RGB parecem ser apenas Vermelho no pacote 271 (0xFF, 0x00, 0x00), apenas Verde no pacote 273 (0x00, 0xFF, 0x00) e apenas Azul no pacote 275 (0x00, 0x00, 0xFF). Observando os dados do cabeçalho acima da seção RGB, podemos ver que esses dados não mudam entre os três pacotes. Isso provavelmente significa que estamos alterando as mesmas zonas de cor nesses pacotes.
- Também vale notar que podemos usar os pacotes de cor para determinar quantas zonas um dispositivo contém. Podemos fazer isso verificando quantas vezes nossos valores conhecidos ocorrem nos pacotes de dados RGB. No exemplo abaixo, vemos que o dispositivo tem 4 zonas que podemos definitivamente endereçar.


Continuaremos descendo pelos pacotes até encontrar todos os pacotes que contêm dados de cor e tê-los marcado. Depois disso, passaremos para a criação do arquivo de plugin.