CoderTools

Codec Matter Protocol

Decodificar e codificar dados TLV Matter para desenvolvimento de casa inteligente

🔒 100% Processamento localOs dados inseridos são processados inteiramente em seu navegador. Nenhum dado é enviado para qualquer servidor.

Cole dados TLV capturados de dispositivos Matter ou analisadores de protocolo

Clique para carregar exemplo

Resultado da decodificação

Insira dados TLV e clique em Decodificar

Tipos de elementos TLV

Nome do tipo Código do tipo Tamanho do valor
Inteiro com sinal0x00-0x031, 2, 4, 8 bytes
Inteiro sem sinal0x04-0x071, 2, 4, 8 bytes
Booleano0x08-0x090 bytes
Float0x0A4 bytes
Double0x0B8 bytes
String UTF-80x0C-0x0F1/2/4/8-byte length + data
String de bytes0x10-0x131/2/4/8-byte length + data
Null0x140 bytes
Estrutura0x15End-of-Container (0x18)
Array0x16End-of-Container (0x18)
Lista0x17End-of-Container (0x18)
Fim do contêiner0x180 bytes

Referência técnica Matter Protocol

Guia de uso do esquema C Struct

O modo de esquema C Struct permite definir estruturas de dados usando a sintaxe familiar de C/C++. O analisador extrai nomes de campos, tipos e tags TLV das suas definições de estrutura, e então gera um formulário visual para entrada de dados e codificação TLV.

Sintaxe suportada

// Supported syntax forms:
typedef struct { ... } StructName;
typedef struct Tag { ... } StructName;
struct StructName { ... };

Tipos de dados suportados

Categoria Tipos C/C++ Tipo TLV
Inteiro com sinal int8_t, int16_t, int32_t, int64_t, char, short, int, long int (1-8B)
Inteiro sem sinal uint8_t, uint16_t, uint32_t, uint64_t, unsigned char/short/int/long, size_t uint (1-8B)
Booleano bool, _Bool bool
Ponto flutuante float, double float/double
String char[], char[N], char* UTF-8 string
Array de bytes uint8_t[], uint8_t[N], uint8_t* byte string

Métodos de anotação de tags

Use comentários para especificar tags de contexto TLV para cada campo. Se nenhuma tag for especificada, as tags serão atribuídas automaticamente a partir de 0.

uint8_t field1;     // tag 0
uint16_t field2;    // tag: 1
uint32_t field3;    /* tag 2 */
@tag(3) uint64_t field4;

Suporte a arrays

Arrays de tamanho fixo (ex: uint32_t data[4]) e arrays de tamanho variável (ex: uint8_t data[]) são suportados. O formulário fornecerá um botão «Adicionar item» para gerenciamento dinâmico de elementos do array.

uint32_t subjects[4];  // Fixed-size array (max 4 items)
uint8_t data[];        // Variable-size array

Limitações atuais

  • Diretivas de pré-processador (#define, #ifdef) não são suportadas
  • Aliases typedef (ex: typedef uint8_t BYTE) não são suportados
  • Enums, unions e campos de bits não são suportados
  • A edição de estruturas aninhadas é limitada a um nível
  • Estruturas anônimas não são suportadas

O que é Matter

Matter é um padrão de conectividade unificado para dispositivos de casa inteligente, desenvolvido pela Connectivity Standards Alliance (CSA) sob o nome original Project CHIP. O padrão permite interoperabilidade entre ecossistemas como Apple HomeKit, Google Home, Amazon Alexa e Samsung SmartThings. Os dispositivos Matter comunicam via Wi-Fi, Thread e Ethernet usando protocolos de transporte baseados em IPv6. Matter 1.0 foi lançado em outubro de 2022.

Formato de codificação TLV Matter

Matter utiliza um esquema de codificação binária TLV (Tag-Length-Value) compacto para serializar dados estruturados. O formato é usado extensivamente na pilha de protocolo, incluindo mensagens do modelo de interação, dados de atestação de dispositivos e payloads de comissionamento.

Estrutura do byte de controle

O byte de controle é o primeiro byte de cada elemento TLV. Os 5 bits inferiores especificam o tipo de elemento e os 3 bits superiores indicam a forma do tag.

Campo de bits Descrição
Bits [4:0]Tipo de elemento (inteiro com/sem sinal, booleano, ponto flutuante, string UTF-8, string de bytes, null, estrutura, array, lista, fim de contêiner)
Bits [7:5]Forma do tag: 000=Anônimo, 001=Específico de contexto (tag 1 byte), 010-110=Tags de perfil, 111=Totalmente qualificado

Tipos de elementos TLV

O campo de tipo de elemento determina como a parte do valor é codificada. Tipos inteiros usam 1, 2, 4 ou 8 bytes. Valores booleanos são codificados diretamente no campo de tipo. Strings e arrays de bytes carregam um prefixo de comprimento seguido dos dados.

Formato do payload de integração

Ao comissionar um dispositivo Matter, as informações de configuração são codificadas em um payload compacto incorporado em um QR code ou expresso como código de emparelhamento manual numérico. O payload QR code começa com o prefixo "MT:" seguido de uma string binária codificada em Base38.

Codificação Base38

Os payloads QR code Matter usam um conjunto de caracteres Base38 (0-9, A-Z, -.) para representação alfanumérica eficiente. Cada grupo de 3 bytes é codificado em 5 caracteres Base38.

Código de emparelhamento manual

O código de emparelhamento manual de 11 dígitos fornece um método alternativo quando a leitura do QR não está disponível. Codifica o discriminador, o código de configuração e um dígito de verificação Verhoeff. A versão de 21 dígitos inclui adicionalmente o ID do fabricante e o ID do produto.

Dígito de verificação Verhoeff

O código de emparelhamento manual utiliza o algoritmo Verhoeff para detecção de erros. Este algoritmo detecta todos os erros de um dígito e a maioria dos erros de transposição adjacente.

Casos de uso em desenvolvimento

  • Depuração de payloads TLV Matter capturados de interações de dispositivos
  • Inspeção de mensagens de solicitação e resposta do modelo de interação
  • Verificação de payloads de comissionamento incorporados em QR codes
  • Validação de estruturas TLV de certificados de atestação
  • Construção de payloads de teste para testes de conformidade Matter

Referências de especificação

A especificação Matter é mantida pela Connectivity Standards Alliance (CSA). O formato de codificação TLV é definido no Apêndice A da especificação principal. A codificação de payload de integração é coberta na Seção 5.1.

Menu Rápido

Nenhuma ferramenta recente