

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Generador de códigos de modelos de datos
<a name="managedintegrations-sdk-device-codegen"></a>

Aprenda a usar el generador de código para el modelo de datos. El código generado se puede utilizar para serializar y deserializar los modelos de datos que se intercambian entre la nube y el dispositivo.

El repositorio del proyecto contiene una herramienta de generación de código para crear controladores de modelos de datos de código C. En los temas siguientes se describe el generador de código y el flujo de trabajo.

**Topics**
+ [Proceso de generación de código](#managedintegrations-sdk-codegen-intro)
+ [Configuración del entorno](managedintegrations-sdk-codegen-env.md)
+ [Generar código para dispositivos](managedintegrations-sdk-codegen-generate.md)

## Proceso de generación de código
<a name="managedintegrations-sdk-codegen-intro"></a>

El generador de código crea archivos fuente en C a partir de tres entradas principales: AWS la implementación del Matter Data Model (archivo.matter) de la plataforma avanzada Zigbee Cluster Library (ZCL), un complemento de Python que gestiona el preprocesamiento y las plantillas Jinja2 que definen la estructura del código. Durante la generación, el complemento de Python procesa los archivos.matter añadiendo definiciones de tipos globales, organizando los tipos de datos en función de sus dependencias y formateando la información para la representación de plantillas.

La siguiente imagen describe el generador de código que crea los archivos fuente en C.

![El generador de código del SDK para dispositivos finales y su funcionamiento.](https://docs.aws.amazon.com/es_es/iot-mi/latest/devguide/images/iot-managedintegrations-sdk-codegen.png)


El SDK para dispositivos finales incluye complementos de Python y plantillas de Jinja2 que funcionan [codegen.py](https://github.com/project-chip/connectedhomeip/blob/master/scripts/codegen.py)en el [connectedhomeip](https://github.com/project-chip/connectedhomeip/tree/master)proyecto. Esta combinación genera varios archivos C para cada clúster en función de la entrada del archivo.matter.

**Topics**
+ [Complemento de Python](#managedintegrations-sdk-codegen-plugin)
+ [Plantillas Jinja2](#managedintegrations-sdk-codegen-jinja)
+ [(Opcional) Esquema personalizado](#managedintegrations-sdk-codegen-schema)

### Complemento de Python
<a name="managedintegrations-sdk-codegen-plugin"></a>

El generador de código analiza los archivos.matter y envía la información como objetos de Python al complemento. `codegen.py` El archivo del complemento `iotmi_data_model.py` preprocesa estos datos y representa las fuentes con las plantillas proporcionadas. El preprocesamiento incluye:

1. Agregar información que no está disponible en`codegen.py`, como los tipos globales

1. Realizar una ordenación topológica de los tipos de datos para establecer el orden de definición correcto
**nota**  
La ordenación topológica garantiza que los tipos dependientes se definan después de sus dependencias, independientemente de su orden original.

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

El SDK para dispositivos finales proporciona plantillas Jinja2 diseñadas para gestores de modelos de datos y de bajo nivel. C-Functions


**Plantillas Jinja2**  

| Plantilla | Fuente generada | Observaciones | 
| --- | --- | --- | 
| cluster.h.jinja | iotmi\_device\_<cluster>.h | Crea archivos de encabezado de funciones C de bajo nivel. | 
| cluster.c.jinja | iotmi\_device\_<cluster>.c | Implemente y registre los punteros de las funciones de devolución de llamada con el controlador del modelo de datos. | 
| cluster\_type\_helpers.h.jinja | iotmi\_device\_type\_helpers\_<cluster>.h | Define prototipos de funciones para los tipos de datos. | 
| cluster\_type\_helpers.c.jinja | iotmi\_device\_type\_helpers\_<cluster>.c | Genera prototipos de funciones de tipos de datos para enumeraciones, mapas de bits, listas y estructuras específicas de clústeres. | 
| iot\_device\_dm\_types.h.jinja | iotmi\_device\_dm\_types.h | Define los tipos de datos C para los tipos de datos globales. | 
| iot\_device\_type\_helpers\_global.h.jinja | iotmi\_device\_type\_helpers\_global.h | Define los tipos de datos C para las operaciones globales. | 
| iot\_device\_type\_helpers\_global.c.jinja | iotmi\_device\_type\_helpers\_global.c | Declara los tipos de datos estándar, incluidos los booleanos, los enteros, los puntos flotantes, las cadenas, los mapas de bits, las listas y las estructuras. | 

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

 El SDK para dispositivos finales combina el proceso de generación de código estandarizado con un esquema personalizado. Esto permite extender el modelo de datos de materia a sus dispositivos y al software de sus dispositivos. Los esquemas personalizados pueden ayudar a describir las capacidades del dispositivo para la comunicación entre el dispositivo y la nube. 

 Para obtener información detallada sobre los modelos de datos de integraciones gestionadas, incluidos el formato, la estructura y los requisitos, consulte. [Modelo de datos de integraciones gestionadas](managedintegrations-data-model.md) 

 Utilice la `codegen.py` herramienta para generar archivos fuente en C para un esquema personalizado, de la siguiente manera: 

**nota**  
 Cada clúster personalizado requiere el mismo **ID de clúster** para los tres archivos siguientes. 
+  Cree un esquema personalizado en un `JSON` formato que proporcione una representación de los clústeres para generar informes de capacidad a fin de crear nuevos clústeres personalizados en la nube. Encontrará un archivo de muestra en`codegen/custom_schemas/custom.SimpleLighting@1.0`. 
+  Cree un archivo de definición de ZCL (biblioteca de clústeres de Zigbee) en un `XML` formato que contenga la misma información que el esquema personalizado. Utilice la herramienta ZAP para generar sus archivos Matter IDL a partir de ZCL XML. Encontrará un archivo de muestra en. `codegen/zcl/custom.SimpleLighting.xml` 
+  El resultado de la herramienta ZAP es `Matter IDL File (.matter)` y define los clústeres de materias correspondientes a su esquema personalizado. Esta es la entrada de la `codegen.py` herramienta para generar archivos fuente en C para el SDK de dispositivos finales. Encontrará un archivo de muestra en`codegen/matter_files/custom-light.matter`. 

 Para obtener instrucciones detalladas sobre cómo integrar modelos de datos de integraciones gestionadas personalizadas en su flujo de trabajo de generación de código, consulte[Generar código para dispositivos](managedintegrations-sdk-codegen-generate.md). 