Skip to content

CliMap

Registra handlers de comandos e despacha comandos wire parseados para eles. Inclui um wire::Protocol<MessageSize> interno, repassado a cada handler para respostas.

cli::CliMap<256> cli(pushMessage);
ConstanteValor
cli::kMaxRegisteredCommands32
Alias de tipoDefinição
Protocolwire::Protocol<MessageSize>
HandlerFnbool (*)(const wire::Command&, wire::WireView, Protocol&)
PushMessageFnProtocol::PushMessageFn

Constrói o mapa com a função de enfileiramento Bluetooth compartilhada pelo emissor de protocolo interno.

explicit CliMap(PushMessageFn pushMessage)
static void pushMessage(const char* msg) { bleEnqueue(msg); }
cli::CliMap<256> cli(pushMessage);

O(1).


Retorna uma referência ao emissor wire::Protocol interno (sobrecargas mutável e const).

Protocol& protocol()
const Protocol& protocol() const
cli.protocol().emitSingleResponse("status", {"ok"});

O(1).


Registra ou substitui um handler para name. O nome é normalizado para minúsculas (chaves case-insensitive).

bool registerCommand(const char* name, HandlerFn handler)

Retorna false se:

  • name ou handler for nulo
  • o nome normalizado estiver vazio ou for ≥ wire::kNameCap
  • kMaxRegisteredCommands (32) já tiver sido atingido

Se o comando já existir, seu handler é atualizado e a função retorna true.

static bool onHelp(const wire::Command& cmd, wire::WireView view,
wire::Protocol<256>& proto) {
return proto.emitSingleResponse("help", {"ok"});
}
cli.registerCommand("help", onHelp);
cli.registerCommand("HELP", onHelp); // atualiza a mesma entrada

O(n) no número de comandos registrados.


Remove um comando do mapa. A correspondência de nome é case-insensitive.

bool unregisterCommand(const char* name)

Retorna false se name for nulo ou o comando não estiver registrado.

cli.unregisterCommand("help");

O(n) no número de comandos registrados.


Busca o handler registrado para name (case-insensitive).

HandlerFn findHandler(const char* name) const

Retorna nullptr se não encontrado ou se name for nulo.

O(n).


Despacha um Command já parseado para o handler registrado.

bool dispatch(const wire::Command& cmd)

Constrói um WireView a partir de cmd e chama o handler com o protocolo interno. Retorna false se não houver handler registrado para cmd.name.

wire::Command cmd;
wire::parseSegment("help(s,r)", 9, cmd);
cli.dispatch(cmd);

O(n) para a busca do handler, mais o tempo de execução do handler.


Faz parse de uma mensagem BLE completa e despacha cada segmento de comando.

Aceita vários comandos separados por ; (ex.: "help(s,r);param_list(s,r);").

bool processMessage(const char* message)
Valor de retornoSignificado
falseParse falhou, ou nenhum handler retornou true
truePelo menos um comando foi despachado e seu handler retornou true
// Notificação BLE recebida:
cli.processMessage("help(s,r);unknown(s,r);");
// onHelp é executado; unknown é ignorado; retorna true se onHelp teve sucesso

O(|message| + k × n), em que k é a quantidade de comandos e n é o número de comandos registrados por busca.


Retorna quantos comandos estão registrados no momento (0 … kMaxRegisteredCommands).

int registeredCount() const

O(1).