Skip to content

Primeiros passos

Esta página descreve o padrão de integração mínima mostrado nos headers da biblioteca.

A E/S Bluetooth (ou UART) é sua responsabilidade. A biblioteca apenas chama pushMessage com strings wire já formatadas:

static void pushMessage(const char* msg) {
bleEnqueue(msg); // sua fila de transporte
}

Os handlers recebem o comando parseado, uma vista do payload e o emissor de protocolo:

#include "cli_map.hpp"
static bool onHelp(const wire::Command& cmd, wire::WireView view,
wire::Protocol<256>& proto) {
return proto.emitSingleResponse("help", {"ok"});
}

Retorne true quando o comando for tratado com sucesso.

cli::CliMap<256> cli(pushMessage);
cli.registerCommand("help", onHelp);
cli.registerCommand("param_list", onParamList);
// Chamado quando uma notificação BLE chega:
cli.processMessage("help(s,r);");

processMessage faz parse da string completa, despacha cada segmento para seu handler e retorna true se pelo menos um comando foi tratado.

Dentro de um handler, leia argumentos por meio de WireView:

static bool onParamGet(const wire::Command& cmd, wire::WireView view,
wire::Protocol<256>& proto) {
const char* name = view.arg(0);
int value = 0;
// ... ler parâmetro ...
char buf[16];
snprintf(buf, sizeof(buf), "%d", value);
return proto.respondSingle(cmd, {buf});
}

Para respostas em lista, monte as linhas e deixe a biblioteca empacotar headers e bodies:

std::vector<wire::Protocol<256>::ListRow> rows = {
{"param_a", "1", "42"},
{"param_b", "0", "hello"},
};
return proto.emitListResponseRows("param_list", rows);
ConstanteValorSignificado
cli::kMaxRegisteredCommands32Máximo de handlers no CliMap
wire::kMaxArgs24Máximo de tokens por comando
wire::kArgCap160Máximo de bytes por argumento
wire::kNameCap64Tamanho máximo do nome do comando
wire::kPackBudget240Orçamento de bytes ao empacotar mensagens de lista

Os nomes de comando são comparados de forma case-insensitive após o registro.