# 通常パケット JVMAモジュール通信における【通常パケット】の具体的な構成と、その内容の見方について詳しく説明します。 --- ## 全体の構造 通常パケットは以下の順序で構成されています。 STX → テキスト種別 → データ長 → ブロック番号(必要に応じて) → レコード部 → ETB/ETX → BCC ### 図解(例) ![通常バケット](../../media/normal_packet.png) --- ## 各フィールドの詳細と見方 ### スタートキャラクタ(STX) - **内容**:`0x02` です - **役割**:パケットの開始を示すシグナルです - **見方**:パケットの最初に常に現れる 1 バイトです --- ### テキスト種別 - **内容**:1 バイト文字コードです - `'S'(0x53)`(通信規格選択) - `'P'(0x50)`(パスワード) - `'C'(0x43)`(コマンド) - `'D'(0x44)`(設定データ・取得データ) - `'V'(0x56)`(バージョン) - `'T'(0x54)`(テストモード) - **役割**:通信内容の種類を識別します - **見方**:1 バイトの文字コードです。例:`'P'` はパスワード関連です --- ### データ長 - **内容**:2 バイト BCD です - **例**:`0x05 0x12` → 0x0512(512 バイト) - **役割**:レコード部のバイト数を示します - **見方**:最大 1024 バイトまで対応しています。重要な値です **補足**: レコード部は AsReader と自動販売機で中継伝送されるデータの本体です。 先頭 1 バイトは **ブロック番号** となり、その後にレコードが続きます。 詳細については JVMA の仕様を参照してください。 --- ### ブロック番号(任意) - **内容**:1 バイト BCD(`0x00`〜`0x99`)です - **役割**:分割送信時の順序管理に使用します - **例**:`0x00` は最初のブロックです --- ### レコード部 - **内容**:実データです - **役割**:通信のメイン情報です - **見方**:複数レコードが含まれる場合があります --- ### 終了キャラクタ(ETB/ETX) - **内容**: - ETB:`0x17`(中間ブロック終端) - ETX:`0x03`(最後のブロック終端) - **役割**:データの区切り/終了を示します - **見方**:必ずパケットの末尾に存在します --- ### BCC(Block Check Character) - **内容**:1 バイトのチェック値です - **役割**:パケット整合性の検証に使用します - **算出方法**:STX〜ETB/ETX までの全バイトの XOR 結果です --- ## 実際のパケット例 ``` 02 50 00 05 00 41 42 43 44 45 46 17 1A ``` - `02`:STX です - `50`:テキスト種別 `'P'`(パスワード)です - `00 05`:データ長(5 バイト)です - `00`:ブロック番号です - `41 42 43 44 45`:レコード部(ASCII `"ABCDE"`) です - `17`:ETB です - `1A`:BCC です この例では、パスワード関連データの送信を示しています。 --- ## まとめ - 通常パケットは STX と ETB/ETX により明確に区切られます - 各フィールドを正しく解釈することが解析の基本です - **特に「データ長」と「BCC」は要確認です** --- # 肯定応答パケット(ACK) ![肯定応答バケット](../../media/ack.png) ## 構成 ```{list-table} :align: left :class: list-table * - フィールド - サイズ - 内容 - 役割 * - ACK - 1byte - `0x06` - 肯定応答識別子です * - ステータス - 1byte - `0x00`〜`0x99` - 応答ステータスです ``` ## 内容例 - `06 00` → 正常応答です - `06 01` → 通信開始ステータスです - `06 02` → 通信確立です - `06 03` → コマンド認証成功です 詳細は[ACKステータス](../../api/JvmaACKData_property.md#jvmaackstatus)を参照してください --- # 否定応答パケット(NAK) ![否定応答バケット](../../media/nak.png) ## 構成 ```{list-table} :align: left :class: list-table * - フィールド - サイズ - 内容 - 役割 * - NAK - 1byte - `0x15` - 否定応答識別子です * - ステータス - 1byte - `0x00`〜`0x99` - 否定理由コードです ``` ## 内容例 - `15 01` → JVMAモジュールがビジー状態です - `15 04` → BCCエラーなど通信エラーです 詳細は[NAKステータス](../../api/JvmaNAKData_property.md#jvmanakstatus)を参照してください --- # 解析のポイント - **ACKが来れば正常、NAKが来れば失敗です** - NAKステータスコードを確認して原因を特定してください