本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
数据模型代码生成器
学习如何使用数据模型的代码生成器。生成的代码可用于序列化和反序列化在云端和设备之间交换的数据模型。
项目存储库包含用于创建 C 代码数据模型处理程序的代码生成工具。以下主题描述了代码生成器和工作流程。
代码生成过程
代码生成器根据三个主要输入创建 C 源文件: AWS“来自 Zigbee 集群库 (ZCL) 高级平台的物质数据模型(.matter 文件)的实现、处理预处理的 Python 插件和定义代码结构的 Jinja2 模板。在生成过程中,Python 插件通过添加全局类型定义、根据数据类型的依赖关系组织数据类型以及格式化模板渲染信息来处理您的.matter 文件。
下图描述了创建 C 源文件的代码生成器。

终端设备 SDK 包括可在项目codegen.py
Python 插件
代码生成器解析.matter 文件,并将这些信息作为 Python 对象发送到插件。codegen.py
插件文件会对这些数据iotmi_data_model.py
进行预处理,并使用提供的模板呈现源文件。预处理包括:
-
添加不可用的信息
codegen.py
,例如全局类型 -
对数据类型执行拓扑排序以建立正确的定义顺序
注意
拓扑排序可确保依赖类型在依赖关系之后定义,无论其原始顺序如何。
Jinja2 模板
终端设备 SDK 提供专为数据模型处理程序和低级 C 函数量身定制的 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 |
声明标准数据类型,包括布尔值、整数、浮点数、字符串、位图、列表和结构。 |
(可选)自定义架构
终端设备 SDK 将标准化代码生成过程与自定义架构相结合。这可以为您的设备和设备软件扩展 Matter 数据模型。自定义架构可以帮助描述设备的 device-to-cloud通信能力。
有关托管集成数据模型的详细信息,包括格式、结构和要求,请参阅托管集成数据模型。
使用codegen.py
工具为自定义架构生成 C 源文件,如下所示:
注意
对于以下三个文件,每个自定义集群都需要相同的集群 ID。
-
创建自定义架构,其
JSON
格式应为能力报告提供集群的表示形式,以便在云中创建新的自定义集群。示例文件位于codegen/custom_schemas/custom.SimpleLighting@1.0
。 -
以包含与自定义架构相同信息的
XML
格式创建 ZCL(Zigbee 集群库)定义文件。使用 ZAP 工具从 ZCL XML 生成你的 Matter IDL 文件。示例文件位于codegen/zcl/custom.SimpleLighting.xml
。 -
ZAP 工具的输出是,它定义了
Matter IDL File (.matter)
与您的自定义架构相对应的 Matter 集群。这是为终端设备 SDK 生成 C 源文件的codegen.py
工具的输入。示例文件位于codegen/matter_files/custom-light.matter
。
有关如何将自定义托管集成数据模型集成到代码生成工作流程中的详细说明,请参阅为设备生成代码。