翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
データモデルコードジェネレーター
データモデルにコードジェネレーターを使用する方法について説明します。生成されたコードを使用して、クラウドとデバイスの間で交換されるデータモデルをシリアル化および逆シリアル化できます。
プロジェクトリポジトリには、C コードデータモデルハンドラーを作成するためのコード生成ツールが含まれています。以下のトピックでは、コードジェネレーターとワークフローについて説明します。
コード生成プロセス
コードジェネレーターは、3 つの主要な入力から C ソースファイルを作成します。 AWS Zigbee クラスターライブラリ (ZCL) アドバンストプラットフォームからの Matter Data Model (.matter ファイル) の実装、前処理を処理する Python プラグイン、およびコード構造を定義する Jinja2 テンプレートです。生成中、Python プラグインはグローバル型定義を追加し、依存関係に基づいてデータ型を整理し、テンプレートレンダリングの情報をフォーマットすることで、.matter ファイルを処理します。
次の図は、C ソースファイルを作成するコードジェネレーターを示しています。

End device SDK には、 connectedhomeip
以下のサブトピックでは、これらのファイルについて説明します。
Python プラグイン
コードジェネレーター はcodegen.py
、.matter ファイルを解析し、その情報を Python オブジェクトとしてプラグインに送信します。プラグインファイルは、このデータを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 Data Model を拡張できます。カスタムスキーマは、デバイスdevice-to-cloud通信のデバイス機能を記述するのに役立ちます。
形式、構造、要件など、マネージド統合データモデルの詳細については、「」を参照してくださいマネージド統合データモデル。
codegen.py
ツールを使用して、次のようにカスタムスキーマの C ソースファイルを生成します。
注記
各カスタムクラスターには、次の 3 つのファイルに対して同じクラスター 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
。
カスタムマネージド統合データモデルをコード生成ワークフローに統合する方法の詳細については、「」を参照してくださいデバイスのコードを生成する。