Emissor de protocolo
📡 wire::Protocol<MessageSize>
Section titled “📡 wire::Protocol<MessageSize>”Emite mensagens wire por meio de um callback pushMessage injetado. O transporte Bluetooth não é tratado pela biblioteca — apenas strings formatadas são entregues à sua fila.
wire::Protocol<256> proto(pushMessage);| Alias de tipo | Definição |
|---|---|
PushMessageFn | void (*)(const char* msg) |
ListRow | std::vector<const char*> — campos de payload de uma linha de lista |
🏗️ Construtor
Section titled “🏗️ Construtor”Constrói o emissor com a função que enfileira cada mensagem wire concluída.
📝 Sintaxe
Section titled “📝 Sintaxe”explicit Protocol(PushMessageFn pushMessage)🔮 Exemplo
Section titled “🔮 Exemplo”static void pushMessage(const char* msg) { bleEnqueue(msg); }wire::Protocol<256> proto(pushMessage);⏱ Complexidade
Section titled “⏱ Complexidade”O(1).
📤 emitSingle
Section titled “📤 emitSingle”Emite um comando single nome(s,role,...); e chama pushMessage.
📝 Sintaxe
Section titled “📝 Sintaxe”bool emitSingle(char role, const char* cmdName, const std::vector<const char*>& parts) const| Parâmetro | Significado |
|---|---|
role | 'r' requisição ou 's' resposta |
cmdName | Nome do comando |
parts | Argumentos de payload após modo e role |
Retorna false se a mensagem exceder MessageSize.
🔮 Exemplo
Section titled “🔮 Exemplo”proto.emitSingle('s', "help", {"ok", "ready"});// envia: help(s,s,ok,ready);⏱ Complexidade
Section titled “⏱ Complexidade”O(comprimento total dos argumentos).
📤 emitSingleRequest
Section titled “📤 emitSingleRequest”Atalho para emitSingle('r', cmdName, parts).
📝 Sintaxe
Section titled “📝 Sintaxe”bool emitSingleRequest(const char* cmdName, const std::vector<const char*>& parts = {}) const🔮 Exemplo
Section titled “🔮 Exemplo”proto.emitSingleRequest("param_get", {"temperature"});// envia: param_get(s,r,temperature);⏱ Complexidade
Section titled “⏱ Complexidade”O(comprimento total dos argumentos).
📤 emitSingleResponse
Section titled “📤 emitSingleResponse”Atalho para emitSingle('s', cmdName, parts).
📝 Sintaxe
Section titled “📝 Sintaxe”bool emitSingleResponse(const char* cmdName, const std::vector<const char*>& parts) const🔮 Exemplo
Section titled “🔮 Exemplo”proto.emitSingleResponse("param_get", {"42"});// envia: param_get(s,s,42);⏱ Complexidade
Section titled “⏱ Complexidade”O(comprimento total dos argumentos).
↩️ respondSingle
Section titled “↩️ respondSingle”Responde a uma requisição single recebida (mode == 's', role == 'r') usando o mesmo nome de comando.
📝 Sintaxe
Section titled “📝 Sintaxe”bool respondSingle(const Command& req, const std::vector<const char*>& parts) constRetorna false se req não for uma requisição single válida.
🔮 Exemplo
Section titled “🔮 Exemplo”// req parseado de param_get(s,r,temperature);proto.respondSingle(req, {"23.5"});// envia: param_get(s,s,23.5);⏱ Complexidade
Section titled “⏱ Complexidade”O(comprimento total dos argumentos).
✅ emitBatchAck
Section titled “✅ emitBatchAck”Envia um ACK de lote para coleta de listas no host.
Formato: nome(s,s,<messageIndex>,<messageIndex>,ok);
📝 Sintaxe
Section titled “📝 Sintaxe”void emitBatchAck(const char* cmdName, int messageIndex) const🔮 Exemplo
Section titled “🔮 Exemplo”proto.emitBatchAck("param_list", 0);// envia: param_list(s,s,0,0,ok);⏱ Complexidade
Section titled “⏱ Complexidade”O(1).
📝 formatListBody
Section titled “📝 formatListBody”Formata um body de lista em buf sem chamar pushMessage.
📝 Sintaxe
Section titled “📝 Sintaxe”bool formatListBody(char* buf, size_t cap, const char* cmdName, char role, int idx, const std::vector<const char*>& fields) const⏱ Complexidade
Section titled “⏱ Complexidade”O(comprimento total dos campos).
📝 makeListBodySegment
Section titled “📝 makeListBodySegment”Monta um segmento de body completo nome(b,role,idx,...); como std::string. Retorna string vazia em caso de estouro de buffer.
📝 Sintaxe
Section titled “📝 Sintaxe”std::string makeListBodySegment(const char* cmdName, char role, int idx, const std::vector<const char*>& fields) const🔮 Exemplo
Section titled “🔮 Exemplo”auto seg = proto.makeListBodySegment("param_list", 's', 0, {"a", "1"});// seg == "param_list(b,s,0,a,1);"⏱ Complexidade
Section titled “⏱ Complexidade”O(comprimento total dos campos).
📦 emitListFromBodySegments
Section titled “📦 emitListFromBodySegments”Empacota segmentos de body já formatados em uma ou mais mensagens. Cada mensagem tem a forma:
nome(h,role,T,C,B,j);body1;body2;...Listas longas são divididas usando kPackBudget. Cada mensagem final é passada a pushMessage.
📝 Sintaxe
Section titled “📝 Sintaxe”void emitListFromBodySegments(const char* cmdName, char role, const std::vector<std::string>& bodies) const🔮 Exemplo
Section titled “🔮 Exemplo”std::vector<std::string> bodies = { "param_list(b,s,0,a,1);", "param_list(b,s,1,b,2);",};proto.emitListFromBodySegments("param_list", 's', bodies);⏱ Complexidade
Section titled “⏱ Complexidade”O(total de bytes dos bodies).
📦 emitListResponse
Section titled “📦 emitListResponse”Emite uma lista com role == 's'. Wrapper em torno de emitListFromBodySegments.
📝 Sintaxe
Section titled “📝 Sintaxe”bool emitListResponse(const char* cmdName, const std::vector<std::string>& bodies) constSempre retorna true (erros de tamanho são silenciosos dentro do flush de chunks).
⏱ Complexidade
Section titled “⏱ Complexidade”O(total de bytes dos bodies).
📦 emitListRequest
Section titled “📦 emitListRequest”Emite uma lista com role == 'r'. Wrapper em torno de emitListFromBodySegments.
📝 Sintaxe
Section titled “📝 Sintaxe”bool emitListRequest(const char* cmdName, const std::vector<std::string>& bodies) const⏱ Complexidade
Section titled “⏱ Complexidade”O(total de bytes dos bodies).
📋 emitListFromRows
Section titled “📋 emitListFromRows”Monta segmentos de body a partir de linhas de payload, atribui índices 0, 1, 2, … automaticamente, empacota headers e envia.
📝 Sintaxe
Section titled “📝 Sintaxe”bool emitListFromRows(const char* cmdName, char role, const std::vector<ListRow>& rows) constRetorna false se alguma linha não couber em MessageSize.
🔮 Exemplo
Section titled “🔮 Exemplo”std::vector<wire::Protocol<256>::ListRow> rows = { {"param_a", "read", "10"}, {"param_b", "write", "0"},};proto.emitListFromRows("param_list", 's', rows);⏱ Complexidade
Section titled “⏱ Complexidade”O(total de bytes das linhas).
📋 emitListResponseRows
Section titled “📋 emitListResponseRows”Atalho para emitListFromRows com role == 's'.
📝 Sintaxe
Section titled “📝 Sintaxe”bool emitListResponseRows(const char* cmdName, const std::vector<ListRow>& rows) const⏱ Complexidade
Section titled “⏱ Complexidade”O(total de bytes das linhas).
📋 emitListRequestRows
Section titled “📋 emitListRequestRows”Atalho para emitListFromRows com role == 'r'.
📝 Sintaxe
Section titled “📝 Sintaxe”bool emitListRequestRows(const char* cmdName, const std::vector<ListRow>& rows) const⏱ Complexidade
Section titled “⏱ Complexidade”O(total de bytes das linhas).
↩️ respondList
Section titled “↩️ respondList”Responde a uma requisição de header de lista (mode == 'h', role == 'r') com segmentos de body formatados.
📝 Sintaxe
Section titled “📝 Sintaxe”bool respondList(const Command& reqHeader, const std::vector<std::string>& bodies) constRetorna false se reqHeader não for um header de requisição de lista válido.
⏱ Complexidade
Section titled “⏱ Complexidade”O(total de bytes dos bodies).