2014年1月19日

BluetoothLowEnergy(BLE)の勉強 - その2 - Linux+BlueZでBLE通信内容確認(1)

前回のエントリで、BlueZのgatttoolを使ってBluetooth Low Energy(BLEデバイス)との通信を試みました。今回はその出力の詳細を確認していきます。

primaryの出力
BLEデバイスに対してgatttoolの"primary"コマンドで以下の出力が得られました。
  [CON][44:13:19:02:F8:A9][LE]> primary
  [CON][44:13:19:02:F8:A9][LE]>
  attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-0000-1000-8000-00805f9b34fb
  attr handle: 0x0008, end grp handle: 0x000a uuid: 00001803-0000-1000-8000-00805f9b34fb
  attr handle: 0x000b, end grp handle: 0x000d uuid: 00001802-0000-1000-8000-00805f9b34fb
  attr handle: 0x000e, end grp handle: 0x0010 uuid: 00001804-0000-1000-8000-00805f9b34fb
  attr handle: 0x0011, end grp handle: 0xffff uuid: 0000180f-0000-1000-8000-00805f9b34fb
まずはこれについて見ていきます。

そもそも、"primary"とは何か?というところからです。これはBLEの肝となっているGATT/ATTに関わる内容になります。GATTは"Generic Attribute Profile"、ATTは"Attribute Protocol"です。(私もまだ勉強中ですが)BLEは基本的にAttributeの読み出し・書き込みを行うことで実現される技術であり、『Attributeにアクセスするための通信プロトコルがATT』『ATT上でどのようなAttributeを構成するかを規定したプロファイルがGATT』という位置付けになります。
Attributeには複数の種別があり、各AttributeにはUUIDが割り当てられています。上記出力では、BLEデバイス(ぶるタグ)が保持するAttributeの内、"Primary Service"のAttributeを取得・ダンプした結果になります。
# ATT/GATTを含めBluetooth規格はBluetooth SIGのサイトで仕様書を確認できます

では、実際の出力結果からもう少し詳細を見ていきます。

primaryの1エントリ(uuid: 00001800-0000-1000-8000-00805f9b34fb)
primaryの出力結果が複数行(エントリ)ありましたが、最初のエントリについて細かく見ていきます。
  attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-0000-1000-8000-00805f9b34fb
最初に注目するのはuuidです。"00001800-0000-1000-8000-00805f9b34fb"となっています。この値はBluetooth SIGによる"Generic Access"のサービス用に規定されたUUIDです。
# Bluetooth SIGのサイトで、採択番号を参照することができます(リンク

少し話がそれますが、上記リンク先では "Generic Access"サービスのUUIDとして "0x1800" と記述されていますが、対応関係について簡単に記載おきます。UUIDは128ビットの値ですが、Bluetoothの基幹IDとして "0000XXXX-0000-1000-8000-00805F9B34FB" が設定されており、XXXXの16ビット部分のみで128ビットのUUIDを表すようになっています。

primaryの残りの部分ですが、attr handleとend grp handleはAttributeに対するハンドルのグループを指定してます。この例では、0x0001自体がこのPrimary Service(Generic Accessサービス)のハンドルで、0x0007までがこのサービスのハンドルということを示しています。

では、primaryの出力結果を眺めてみる
最初のエントリを含め、全体のエントリの出力結果を見てみると以下のようになります。
各UUIDに対応するサービスを出すと、BLEデバイスが提供するサービスが見えてきました。
  handle 0x0001 - 0x0007 : Generic Access Service (0x1800)
  handle 0x0008 - 0x000a : Link Loss Service (0x1803)
  handle 0x000b - 0x000d : Immediate Alert Service (0x1802)
  handle 0x000e - 0x0010 : Tx Power Service (0x1804)
  handle 0x0011 - 0xffff : Battery Service (0x180f)

今日はここまで。
次回は、Characteristicsに関しても見ていきたいと思います。


1 件のコメント:

匿名 さんのコメント...

勉強中です、次を楽しみにしています。