

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Gerador de código de modelo de dados
<a name="managedintegrations-sdk-device-codegen"></a>

Saiba como usar o gerador de código para o modelo de dados. O código gerado pode ser usado para serializar e desserializar os modelos de dados que são trocados entre a nuvem e o dispositivo.

O repositório do projeto contém uma ferramenta de geração de código para criar manipuladores de modelos de dados de código C. Os tópicos a seguir descrevem o gerador de código e o fluxo de trabalho.

**Topics**
+ [Processo de geração de código](#managedintegrations-sdk-codegen-intro)
+ [Configuração do ambiente](managedintegrations-sdk-codegen-env.md)
+ [Gere código para dispositivos](managedintegrations-sdk-codegen-generate.md)

## Processo de geração de código
<a name="managedintegrations-sdk-codegen-intro"></a>

O gerador de código cria arquivos de origem C a partir de três entradas principais: AWS'implementação do Matter Data Model (arquivo.matter) da plataforma avançada Zigbee Cluster Library (ZCL), um plug-in Python que manipula o pré-processamento e modelos Jinja2 que definem a estrutura do código. Durante a geração, o plug-in Python processa seus arquivos.matter adicionando definições de tipo globais, organizando tipos de dados com base em suas dependências e formatando as informações para renderização de modelos.

A imagem a seguir descreve o gerador de código que cria os arquivos de origem C.

![O gerador de código do SDK do dispositivo final e como ele funciona.](http://docs.aws.amazon.com/pt_br/iot-mi/latest/devguide/images/iot-managedintegrations-sdk-codegen.png)


O SDK do dispositivo final inclui plug-ins Python e modelos Jinja2 que funcionam no projeto. [https://github.com/project-chip/connectedhomeip/blob/master/scripts/codegen.py](https://github.com/project-chip/connectedhomeip/blob/master/scripts/codegen.py) Essa combinação gera vários arquivos C para cada cluster com base na entrada do arquivo.matter.

**Topics**
+ [Plug-in Python](#managedintegrations-sdk-codegen-plugin)
+ [Modelos Jinja2](#managedintegrations-sdk-codegen-jinja)
+ [(Opcional) Esquema personalizado](#managedintegrations-sdk-codegen-schema)

### Plug-in Python
<a name="managedintegrations-sdk-codegen-plugin"></a>

O gerador de código,`codegen.py`, analisa os arquivos.matter e envia as informações como objetos Python para o plug-in. O arquivo do plug-in `iotmi_data_model.py` pré-processa esses dados e renderiza fontes com os modelos fornecidos. O pré-processamento inclui:

1. Adicionar informações não disponíveis em`codegen.py`, como tipos globais

1. Executando classificação topológica em tipos de dados para estabelecer a ordem de definição correta
**nota**  
A classificação topológica garante que os tipos dependentes sejam definidos após suas dependências, independentemente da ordem original.

### Modelos Jinja2
<a name="managedintegrations-sdk-codegen-jinja"></a>

O SDK do dispositivo final fornece modelos Jinja2 personalizados para manipuladores de modelos de dados e funções C de baixo nível.


**Modelos Jinja2**  

| Modelo | Fonte gerada | Observações | 
| --- | --- | --- | 
| cluster.h.jinja | iotmi\_device\_<cluster>.h | Cria arquivos de cabeçalho de função C de baixo nível. | 
| cluster.c.jinja | iotmi\_device\_<cluster>.c | Implemente e registre ponteiros de função de retorno de chamada com o Data Model Handler. | 
| cluster\_type\_helpers.h.jinja | iotmi\_device\_type\_helpers\_<cluster>.h | Define protótipos de funções para tipos de dados. | 
| cluster\_type\_helpers.c.jinja | iotmi\_device\_type\_helpers\_<cluster>.c | Gera protótipos de funções de tipo de dados para enumerações, bitmaps, listas e estruturas específicas do cluster. | 
| iot\_device\_dm\_types.h.jinja | iotmi\_device\_dm\_types.h | Define os tipos de dados C para tipos de dados globais. | 
| iot\_device\_type\_helpers\_global.h.jinja | iotmi\_device\_type\_helpers\_global.h | Define os tipos de dados C para operações globais. | 
| iot\_device\_type\_helpers\_global.c.jinja | iotmi\_device\_type\_helpers\_global.c | Declara tipos de dados padrão, incluindo booleanos, inteiros, ponto flutuante, cadeias de caracteres, bitmaps, listas e estruturas. | 

### (Opcional) Esquema personalizado
<a name="managedintegrations-sdk-codegen-schema"></a>

 O SDK do dispositivo final combina o processo padronizado de geração de código com o esquema personalizado. Isso permite a extensão do Matter Data Model para seus dispositivos e software de dispositivos. Esquemas personalizados podem ajudar a descrever os recursos de device-to-cloud comunicação do dispositivo. 

 Para obter informações detalhadas sobre modelos de dados de integrações gerenciadas, incluindo formato, estrutura e requisitos, consulte[Modelo de dados de integrações gerenciadas](managedintegrations-data-model.md). 

 Use a `codegen.py` ferramenta para gerar arquivos de origem C para o esquema personalizado, da seguinte forma: 

**nota**  
 Cada cluster personalizado exige o mesmo **ID de cluster** para os três arquivos a seguir. 
+  Crie um esquema personalizado em um `JSON` formato que forneça uma representação de clusters para geração de relatórios de recursos para criar novos clusters personalizados na nuvem. Um arquivo de amostra está localizado em`codegen/custom_schemas/custom.SimpleLighting@1.0`. 
+  Crie o arquivo de definição ZCL (Zigbee Cluster Library) em `XML` formato que contenha as mesmas informações do esquema personalizado. Use a ferramenta ZAP para gerar seus arquivos Matter IDL a partir do ZCL XML. Um arquivo de amostra está localizado em`codegen/zcl/custom.SimpleLighting.xml`. 
+  A saída da ferramenta ZAP é `Matter IDL File (.matter)` e ela define os clusters Matter correspondentes ao seu esquema personalizado. Essa é a entrada da `codegen.py` ferramenta para gerar arquivos de origem C para o SDK do dispositivo final. Um arquivo de amostra está localizado em`codegen/matter_files/custom-light.matter`. 

 Para obter instruções detalhadas sobre como integrar modelos de dados de integrações gerenciadas personalizadas em seu fluxo de trabalho de geração de código, consulte[Gere código para dispositivos](managedintegrations-sdk-codegen-generate.md). 