概要
このドキュメントは OpenBlink システムの Bluetooth Low Energy(BLE)通信仕様を説明します。サービスと特性の UUID、プロトコルの詳細、データ構造、通信フローが含まれています。
サービスと特性
- サービス UUID:
227da52c-e13a-412b-befb-ba2256bb7fbe
- 説明: OpenBlink デバイス通信のためのプライマリサービス
特性
| 特性 | UUID | プロパティ | 説明 |
|---|
| プログラム | ad9fdd56-1135-4a84-923c-ce5a244385e7 | 書き込み、応答なし書き込み | バイトコード転送と実行に使用 |
| コンソール | a015b3de-185a-4252-aa04-7a87d38ce148 | 通知 | デバッグ出力と通知に使用 |
| ステータス | ca141151-3113-448b-b21a-6a6203d253ff | 読み取り | デバイスステータス情報を提供 |
プロトコル
- バージョン: 0x01
- 説明: OpenBlink デバイスでバイトコードを転送および実行するためのプロトコル
コマンドタイプ
| コマンド | コード | 説明 |
|---|
| データ | 'D' | バイトコードのチャンクを転送 |
| プログラム | 'P' | 転送されたバイトコードを実行 |
| リセット | 'R' | デバイスをリセット |
| リロード | 'L' | バイトコードをリロード |
データ構造
- サイズ: 2 バイト
- 説明: すべての Blink プロトコルコマンドの共通ヘッダー
| フィールド | 型 | サイズ | 説明 |
|---|
| version | uint8_t | 1 バイト | Blink プロトコルバージョン(0x01) |
| command | uint8_t | 1 バイト | コマンドタイプ('D'、'P'、'R'、または'L') |
- サイズ: 6 バイト + データ
- 説明: データチャンク転送のための構造体
| フィールド | 型 | サイズ | 説明 |
|---|
| header | BLINK_CHUNK_HEADER | 2 バイト | 共通ヘッダー |
| offset | uint16_t | 2 バイト | バイトコードバッファ内のオフセット |
| size | uint16_t | 2 バイト | データチャンクのサイズ |
| data | uint8_t[] | 可変 | 実際のバイトコードデータ |
- サイズ: 8 バイト
- 説明: プログラム実行コマンドのための構造体
| フィールド | 型 | サイズ | 説明 |
|---|
| header | BLINK_CHUNK_HEADER | 2 バイト | 共通ヘッダー |
| length | uint16_t | 2 バイト | バイトコードの総長 |
| crc | uint16_t | 2 バイト | CRC16 チェックサム |
| slot | uint8_t | 1 バイト | バイトコードのターゲットスロット |
| reserved | uint8_t | 1 バイト | 将来の使用のために予約 |
通信フロー
バイトコード転送と実行
クライアント OpenBlinkデバイス
| |
|--- OpenBlinkサービスの発見 ------------------>|
|<-- サービスと特性の発見 ----------------------|
| |
|--- データチャンク1をプログラム特性に書き込み ->|
|--- データチャンク2をプログラム特性に書き込み ->|
|--- データチャンクnをプログラム特性に書き込み ->|
| |
|--- プログラムコマンドをプログラム特性に書き込み >|
| (CRCチェック) |
| |
|--- リセット/リロードコマンドの書き込み ------->|
| |
| イベント | 説明 |
|---|
| BLE_EVENT_INITIALIZED | BLE スタックが初期化された |
| BLE_EVENT_CONNECTED | BLE 接続が確立された |
| BLE_EVENT_DISCONNECTED | BLE 接続が終了した |
| BLE_EVENT_RECEIVED | BLE 経由でデータを受信した |
| BLE_EVENT_SENT | BLE 経由でデータを送信した |
| BLE_EVENT_BLINK | Blink バイトコードを受信した |
| BLE_EVENT_STATUS | ステータス情報が要求された |
| BLE_EVENT_REBOOT | 再起動要求を受信した |
| BLE_EVENT_RELOAD | リロード要求を受信した |
エラー処理
エラー通知
バイトコード転送または実行中のエラーは、コンソール特性を通じて通知されます。通知にはエラーメッセージ文字列が含まれます。
一般的なエラー
| エラー | 説明 |
|---|
| "ERROR: Blink version mismatch" | プロトコルバージョンがサポートされていない |
| "ERROR: Blink data size error" | データチャンクサイズが予想サイズと一致しない |
| "ERROR: Size exceeds buffer limits" | バイトコードサイズが許容最大サイズを超えている |
| "ERROR: CRC mismatch" | CRC チェックサム検証に失敗した |
| "ERROR: Blink program error" | バイトコード実行中のエラー |
| "ERROR: Blink unknown type" | 不明なコマンドタイプを受信した |
実装に関する注意
最大バイトコードサイズ
最大バイトコードサイズは実装内でBLINK_MAX_BYTECODE_SIZEとして定義されています。
CRC16 チェックサムは以下のパラメータを使用してcrc16_reflect関数で計算されます:
- 初期値:0xFFFF
- 多項式:0xd175(データ長 32751 ビットまでのハミング距離 4 保護を提供)
- 入力:バイトコードバッファ
- 長さ:バイトコード長
参考文献: https://users.ece.cmu.edu/~koopman/crc/index.html