

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 資料模型程式碼產生器
<a name="managedintegrations-sdk-device-codegen"></a>

了解如何將程式碼產生器用於資料模型。產生的程式碼可用來序列化和還原序列化雲端和裝置之間交換的資料模型。

專案儲存庫包含用於建立 C 程式碼資料模型處理常式的程式碼產生工具。下列主題說明程式碼產生器和工作流程。

**Topics**
+ [程式碼產生程序](#managedintegrations-sdk-codegen-intro)
+ [環境設定](managedintegrations-sdk-codegen-env.md)
+ [產生裝置的程式碼](managedintegrations-sdk-codegen-generate.md)

## 程式碼產生程序
<a name="managedintegrations-sdk-codegen-intro"></a>

程式碼產生器會從三個主要輸入建立 C 來源檔案：Zigbee Cluster Library (ZCL) 進階平台的事項資料模型 (.matter 檔案） AWS實作、處理預先處理的 Python 外掛程式，以及定義程式碼結構的 Jinja2 範本。在產生期間，Python 外掛程式會透過新增全域類型定義、根據其相依性組織資料類型，以及格式化範本轉譯的資訊，來處理您的 .matter 檔案。

下圖說明建立 C 來源檔案的程式碼產生器。

![結束裝置 SDK 程式碼產生器及其運作方式。](http://docs.aws.amazon.com/zh_tw/iot-mi/latest/devguide/images/iot-managedintegrations-sdk-codegen.png)


終端裝置 SDK 包含可在[https://github.com/project-chip/connectedhomeip/tree/master](https://github.com/project-chip/connectedhomeip/tree/master)專案[https://github.com/project-chip/connectedhomeip/blob/master/scripts/codegen.py](https://github.com/project-chip/connectedhomeip/blob/master/scripts/codegen.py)中使用 的 Python 外掛程式和 Jinja2 範本。此組合會根據您的 .matter 檔案輸入，為每個叢集產生多個 C 檔案。

**Topics**
+ [Python 外掛程式](#managedintegrations-sdk-codegen-plugin)
+ [Jinja2 範本](#managedintegrations-sdk-codegen-jinja)
+ [（選用） 自訂結構描述](#managedintegrations-sdk-codegen-schema)

### Python 外掛程式
<a name="managedintegrations-sdk-codegen-plugin"></a>

程式碼產生器 會`codegen.py`剖析 .matter 檔案，並將資訊做為 Python 物件傳送至外掛程式。外掛程式檔案會`iotmi_data_model.py`預先處理此資料，並使用提供的範本轉譯來源。預先處理包括：

1. 新增無法從 取得的資訊`codegen.py`，例如全域類型

1. 對資料類型執行拓撲排序，以建立正確的定義順序
**注意**  
拓撲排序可確保相依類型在其相依性之後定義，無論其原始順序為何。

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

終端裝置 SDK 提供專為資料模型處理常式和低階 C-Functions 量身打造的 Jinja2 範本。


**Jinja2 範本**  

| 範本 | 產生的來源 | 備註 | 
| --- | --- | --- | 
| cluster.h.jinja | iotmi\_device\_<cluster>.h | 建立低階 C 函數標頭檔案。 | 
| cluster.c.jinja | iotmi\_device\_<cluster>.c | 使用資料模型處理常式實作和註冊回呼函數指標。 | 
| cluster\_type\_helpers.h.jinja | iotmi\_device\_type\_helpers\_<cluster>.h | 定義資料類型的函數原型。 | 
| cluster\_type\_helpers.c.jinja | iotmi\_device\_type\_helpers\_<cluster>.c | 產生叢集特定列舉、點陣圖、清單和結構的資料類型函數原型。 | 
| iot\_device\_dm\_types.h.jinja | iotmi\_device\_dm\_types.h | 定義全域資料類型的 C 資料類型。 | 
| iot\_device\_type\_helpers\_global.h.jinja | iotmi\_device\_type\_helpers\_global.h | 定義全域操作的 C 資料類型。 | 
| iot\_device\_type\_helpers\_global.c.jinja | iotmi\_device\_type\_helpers\_global.c | 宣告標準資料類型，包括布林值、整數、浮點數、字串、點陣圖、清單和結構。 | 

### （選用） 自訂結構描述
<a name="managedintegrations-sdk-codegen-schema"></a>

 終端裝置 SDK 結合了標準化程式碼產生程序與自訂結構描述。這可讓您的裝置和裝置軟體延伸事項資料模型。自訂結構描述可協助描述裝置device-to-cloud功能。

 如需受管整合資料模型的詳細資訊，包括格式、結構和需求，請參閱 [受管整合資料模型](managedintegrations-data-model.md)。

 使用 `codegen.py`工具產生自訂結構描述的 C 來源檔案，如下所示：

**注意**  
 每個自訂叢集需要下列三個檔案的相同**叢集 ID**。
+  建立`JSON`格式為 的自訂結構描述，提供叢集的表示，以供功能報告在雲端中建立新的自訂叢集。範例檔案位於 `codegen/custom_schemas/custom.SimpleLighting@1.0`。
+  以包含與自訂結構描述相同資訊的`XML`格式建立 ZCL (Zigbee 叢集程式庫） 定義檔案。使用 ZAP 工具從 ZCL XML 產生您的事項 IDL 檔案。範例檔案位於 `codegen/zcl/custom.SimpleLighting.xml`。
+  ZAP 工具的輸出為 ，`Matter IDL File (.matter)`並定義與您的自訂結構描述對應的事項叢集。這是`codegen.py`工具為終端裝置 SDK 產生 C 來源檔案的輸入。範例檔案位於 `codegen/matter_files/custom-light.matter`。

 如需如何將自訂受管整合資料模型整合至程式碼產生工作流程的詳細說明，請參閱 [產生裝置的程式碼](managedintegrations-sdk-codegen-generate.md)。