CliMap
🗺️ cli::CliMap<MessageSize>
Section titled “🗺️ cli::CliMap<MessageSize>”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);| Constante | Valor |
|---|---|
cli::kMaxRegisteredCommands | 32 |
| Alias de tipo | Definição |
|---|---|
Protocol | wire::Protocol<MessageSize> |
HandlerFn | bool (*)(const wire::Command&, wire::WireView, Protocol&) |
PushMessageFn | Protocol::PushMessageFn |
🏗️ Construtor
Section titled “🏗️ Construtor”Constrói o mapa com a função de enfileiramento Bluetooth compartilhada pelo emissor de protocolo interno.
📝 Sintaxe
Section titled “📝 Sintaxe”explicit CliMap(PushMessageFn pushMessage)🔮 Exemplo
Section titled “🔮 Exemplo”static void pushMessage(const char* msg) { bleEnqueue(msg); }cli::CliMap<256> cli(pushMessage);⏱ Complexidade
Section titled “⏱ Complexidade”O(1).
🔌 protocol()
Section titled “🔌 protocol()”Retorna uma referência ao emissor wire::Protocol interno (sobrecargas mutável e const).
📝 Sintaxe
Section titled “📝 Sintaxe”Protocol& protocol()const Protocol& protocol() const🔮 Exemplo
Section titled “🔮 Exemplo”cli.protocol().emitSingleResponse("status", {"ok"});⏱ Complexidade
Section titled “⏱ Complexidade”O(1).
➕ registerCommand
Section titled “➕ registerCommand”Registra ou substitui um handler para name. O nome é normalizado para minúsculas (chaves case-insensitive).
📝 Sintaxe
Section titled “📝 Sintaxe”bool registerCommand(const char* name, HandlerFn handler)Retorna false se:
nameouhandlerfor 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.
🔮 Exemplo
Section titled “🔮 Exemplo”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⏱ Complexidade
Section titled “⏱ Complexidade”O(n) no número de comandos registrados.
➖ unregisterCommand
Section titled “➖ unregisterCommand”Remove um comando do mapa. A correspondência de nome é case-insensitive.
📝 Sintaxe
Section titled “📝 Sintaxe”bool unregisterCommand(const char* name)Retorna false se name for nulo ou o comando não estiver registrado.
🔮 Exemplo
Section titled “🔮 Exemplo”cli.unregisterCommand("help");⏱ Complexidade
Section titled “⏱ Complexidade”O(n) no número de comandos registrados.
🔍 findHandler
Section titled “🔍 findHandler”Busca o handler registrado para name (case-insensitive).
📝 Sintaxe
Section titled “📝 Sintaxe”HandlerFn findHandler(const char* name) constRetorna nullptr se não encontrado ou se name for nulo.
⏱ Complexidade
Section titled “⏱ Complexidade”O(n).
🚀 dispatch
Section titled “🚀 dispatch”Despacha um Command já parseado para o handler registrado.
📝 Sintaxe
Section titled “📝 Sintaxe”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.
🔮 Exemplo
Section titled “🔮 Exemplo”wire::Command cmd;wire::parseSegment("help(s,r)", 9, cmd);cli.dispatch(cmd);⏱ Complexidade
Section titled “⏱ Complexidade”O(n) para a busca do handler, mais o tempo de execução do handler.
📨 processMessage
Section titled “📨 processMessage”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);").
📝 Sintaxe
Section titled “📝 Sintaxe”bool processMessage(const char* message)| Valor de retorno | Significado |
|---|---|
false | Parse falhou, ou nenhum handler retornou true |
true | Pelo menos um comando foi despachado e seu handler retornou true |
🔮 Exemplo
Section titled “🔮 Exemplo”// Notificação BLE recebida:cli.processMessage("help(s,r);unknown(s,r);");// onHelp é executado; unknown é ignorado; retorna true se onHelp teve sucesso⏱ Complexidade
Section titled “⏱ Complexidade”O(|message| + k × n), em que k é a quantidade de comandos e n é o número de comandos registrados por busca.
📊 registeredCount
Section titled “📊 registeredCount”Retorna quantos comandos estão registrados no momento (0 … kMaxRegisteredCommands).
📝 Sintaxe
Section titled “📝 Sintaxe”int registeredCount() const⏱ Complexidade
Section titled “⏱ Complexidade”O(1).