コマンドフレームの構造
コマンドフレームは MESH 独自に定義されたバイト列で、ヘッダ、データ、チェックサムの組で構成されます。1 フレームの最大長は 20 バイトです。本通信仕様の公開範囲では最大長を超えることはありません。バイトオーダーは全てリトルエンディアンです。
|
データ位置 |
内容 |
例 |
---|---|---|---|
ヘッダ |
0(4 ~ 7 bit) |
残りフレーム数 |
0x00(0) |
0(0 ~ 3 bit) |
|||
1 |
0x02 |
||
データ |
2 ~ n-2 |
0x01 |
|
チェックサム |
n-1(最終データ) |
0x03 |
データ位置は、コマンドフレーム内における相対位置(byte offset)です。
値の例は「0x」 から始まる 16 進数形式で記載しています。複数のバイトで 1 つの値を表現する場合の表記はリトルエンディアンです。
残りフレーム数
コマンドフレームが最大長に収まらない場合、複数のフレームに分割してやりとりすることが可能です。その場合に残りフレーム数をここで指定します。本通信仕様の公開範囲では使用せず、すべて0になるため、以降の説明では省略します。
Message Type ID
ブロック共通 / 各ブロックのどちらのメッセージタイプかを識別するIDです。
値 |
メッセージタイプ |
---|---|
0 |
ブロック共通機能 |
1 |
各ブロックの機能 |
Event Type ID
ブロックのどのイベントかを識別するIDです。値は各ブロックの通信仕様を確認してください。
ブロックインターフェース
ヘッダの一部とデータは、コマンドフレーム内でブロックの制御や応答指示に使用するコマンドであるブロックインターフェースに従って指定します。詳細は、各ブロックの通信仕様を参照してください。
チェックサム
ヘッダ、データの総和の下位 1 バイトの値をチェックサムとします。
例えば、初期接続後に行う「ブロック機能の有効化」の書き込みデータ「0x00020103」の場合、ヘッダ・データ部「0x000201」における各バイトの総和の下位1バイトの値「0x03」がチェックサムになります。
リトルエンディアンについて
バイトオーダーがリトルエンディアンの場合、複数のバイトからなるバイト列を下位バイトから上位バイトの順に扱います。バイト単位で分割した際の最下位バイトを「LSB」、最上位バイトを「MSB」と記載します。
各ブロックの機能の設定値が複数のバイトからなる場合、説明欄には LSB、MSB の順で記載します。
例えば、LED ブロックの機能「LED 点灯指示」における設定値「点灯サイクル」が 5000 ms の場合、16進数形式のバイト列 「0x1388」におけるLSBは 「0x88」 、MSBは「0x13」です。
10進数 |
5000 |
|
16進数 |
0x1388 |
|
LSB / MSB |
0x88(LSB) |
0x13(MSB) |
書き込み操作におけるエラー
書き込み操作において、次のような場合はエラーとして扱われます。 エラーの場合、書き込んだ内容は破棄されてブロックの動作に影響を与えません。エラーの種類によって書き込み時にブロックのステータスランプが点灯するかどうかが異なります。
-
コマンドフレームの長さが 3 バイト未満の場合
コマンドフレームの構成要素であるヘッダ、データ、チェックサムを満たしていないためコマンドは無視されます。ステータスランプは点灯しません。 -
チェックサムが正しくない場合
他に問題がない場合でもコマンドは無視されます。ステータスランプは点灯しません。 -
設定された Message Type ID、Event Type ID が存在しない場合
コマンドは無視されます。ステータスランプは点灯します。 -
データ部が異常なコマンド
数値の場合、可能であれば範囲内に丸めて扱います。値の範囲は各ブロックの通信仕様を参照してください。 また、丸めることができないものは無視されます。ステータスランプは点灯します。
この他にもエラーケースがある場合は、各ブロックの機能ごとに注意事項として記載します。