Skip to content

Protocolo wire

O protocolo wire é o idioma de texto trocado entre o PC e o firmware. Não é JSON — são comandos no estilo de chamadas de função em C++.

Uma mensagem pode conter vários comandos separados por ;:

help(s,r);param_list(s,r);

O separador ; é ignorado dentro de parênteses e dentro de strings "...".

Cada comando segue:

nome(modo, req_ou_resp, ...argumentos);
PosiçãoCampoValores
1º após nome(modos = single, h = header de lista, b = body de lista
req_ou_respr = requisição (PC → dispositivo), s = resposta (dispositivo → PC)

Um único pedido ou resposta:

help(s,r);
battery_get(s,r);
param_get(s,r,"temperature");
param_get(s,s,"23.5");
  • (s,r) — você pede algo ao dispositivo
  • (s,s) — dispositivo responde (você verá isso nas linhas recebidas)

Listas longas (parâmetros, help, mapa) são divididas em header + bodies:

param_list(h,s,5,1,1,0);
param_list(b,s,1,"param_get","ref","read a parameter");
CampoSignificado
TTotal de linhas na lista
CQuantas linhas de body vêm nesta mensagem BLE
BTotal de mensagens BLE que compõem a lista
jÍndice desta mensagem (0B-1)

Cada linha da lista, com índice e argumentos daquela entrada.

Valores que não são inteiros nem identificadores simples precisam de aspas:

param_get(s,r,"meu parametro");

Dentro de strings, use \" e \\ para escapar.

Você digitaCLI envia
helphelp(s,r);
help()help(s,r);
echo(a,b)echo(s,r,a,b);
help(s,r);help(s,r); (inalterado)

O atalho só funciona para comandos registrados na CLI. Para comandos só do firmware, use wire completo.

Cada mensagem BLE costuma ter limite de ~256 bytes (NUS). Listas grandes chegam em várias mensagens, cada uma com um header h e um ou mais bodies b.

A CLI monta e coleta essas partes automaticamente em comandos como help, param_list e map_edit.

Se enviar uma linha que não segue o protocolo e não é comando registrado, a CLI pode perguntar se deseja enviar como está ao dispositivo. Use apenas quando o firmware esperar texto fora do formato wire.