Skip to content

Latest commit

 

History

History
129 lines (102 loc) · 5.06 KB

File metadata and controls

129 lines (102 loc) · 5.06 KB

Protocolo da barra de luz Robobloq

Documentação obtida por engenharia reversa do aplicativo oficial SyncLight 2.19.1, que é um Electron e portanto carrega o protocolo em JavaScript legível. Nenhuma captura de tráfego USB foi necessária.

Como o protocolo foi extraído

SyncLight-2.19.1.exe            instalador NSIS
  └─ $PLUGINSDIR/app-64.7z      arquivo interno
      └─ resources/app.asar     empacotamento do Electron
          └─ .webpack/main/index.js

Depois de desminificar o bundle, os módulos relevantes são:

Módulo Papel
51800 Constantes de identificação (LIGHT_VID, LIGHT_PID, …)
5786 Transporte HID, sobre node-hid
60895 Protocolo da barra por cabo (o que este projeto implementa)
62564 Protocolo da variante Bluetooth, com endereçamento por MAC
82553 Protocolo de teclado e mouse RGB, com cabeçalho SC e CRC16
51545 Classe de dispositivo que junta transporte e protocolo
72299 Contador sequencial de id de pacote

Identificação

Campo Valor
Vendor ID 0x1A86 (QinHeng)
Product ID 0xFE07
Fabricante ROBOBLOQ
Interface 0 HID genérico, endpoints de 64 bytes — canal de controle
Interface 1 HID teclado — botões de toque da barra

A interface 1 aparece como um segundo nó hidraw e ignora os comandos de cor. Escolher o nó errado dá silêncio, não erro; por isso o projeto localiza a interface pelo sysfs em vez de assumir um número de hidraw.

Quadro

┌─────┬─────┬─────────┬──────┬───────┬──────────┬──────────┐
│ 'R' │ 'B' │ tamanho │  id  │ ação  │ payload  │ checksum │
└─────┴─────┴─────────┴──────┴───────┴──────────┴──────────┘
  0     1       2        3      4      5..n-2      n-1
  • tamanho: total do quadro em bytes, incluindo cabeçalho e checksum. Como é um único byte, um quadro não passa de 255 bytes.
  • id: contador que começa em 2, incrementa a cada quadro e volta a 1 ao chegar em 255. Serve para casar a resposta com a pergunta.
  • checksum: soma de todos os bytes anteriores, módulo 256.

Na escrita HID, cada relatório leva um byte 0x00 na frente (report ID). Quadros maiores que 64 bytes são fatiados, e cada fatia leva o seu próprio report ID.

Ações

Código Nome Payload
128 setSyncScreen usa cabeçalho SC e tamanho de 16 bits
129 writeDeviceInfo —
130 readDeviceInfo nenhum
131 readDeviceUUID nenhum
133 setLedEffect tipo, índice
134 setSectionLED grupos de 5 bytes
135 setBrightness 0..100
137 setAutoOff ativo, minutos
138 setDynamicSpeed 5..100
139 setSoundSensitivity 5..100
145 setExternalAudio 16 bits
147 setOpenUrl 1 byte
149 setLampsAmount número de LEDs
150 setWhiteBright modo, valor
151 turnOffLight nenhum
152 setComputerRhythm tipo, valor

Cor — ação 134

O payload é uma sequência de grupos de 5 bytes:

[ led_inicial, R, G, B, led_final ]

Os LEDs são numerados a partir de 1. O valor 254 significa "até o fim da fita", independentemente da quantidade real de LEDs — é por isso que apagar tudo é [1, 0, 0, 0, 254].

Vários grupos cabem no mesmo quadro, o que permite desenhar um degradê inteiro com uma única escrita. Respeitado o limite de 255 bytes do campo de tamanho, cabem até 49 trechos por quadro.

Resposta de readDeviceInfo

Offset Conteúdo
5–7 id do dispositivo
8 tamanho de tela configurado
11 número de LEDs
12–19 uuid
21–23 versão da firmware (maior, menor, correção)

Efeitos — ação 133

A interface oficial expõe dois tipos, com sete efeitos cada:

  • tipo 2 — efeitos dinâmicos, índices 0 a 6
  • tipo 3 — reação a som, índices 0 a 6

No tipo 3, o aplicativo distingue ritmo do computador (ele captura o áudio do PC e envia cores quadro a quadro) de ritmo do controlador (a barra usa o próprio microfone). Enviar a ação 133 diretamente ativa o segundo, que funciona sem software nenhum rodando.

Detalhes que só aparecem lendo o aplicativo

  • O controle de velocidade da interface é invertido: o aplicativo envia setDynamicSpeed(100 - valor_do_slider).
  • Firmwares anteriores à 1.8.0 não têm a ação 151; o aplicativo apaga pintando tudo de preto. Este projeto faz as duas coisas, o que dispensa checar versão.
  • Ao desligar, o aplicativo repete o comando quatro vezes com 20 ms de intervalo — indício de que a barra ocasionalmente perde escritas.
  • Existe um verify com HMAC-SHA256 e chave embutida, mas ele só é usado para teclado e mouse RGB. A barra não exige autenticação.