GAT_BLEクライアントアプリを設計する。このクライアントは特定デバイス名でGAT_BLEサーバの検出と接続を行い、特定サービスUUID(GAT_serviceの0x1822)の Characteristic(SpO2とPulse)を指定周期で読み取るアプリである。
GAT_BLEデバイスが アドバタイズ を出して存在を知らせ、Central(Client)が Peripheral(server)へ接続し、接続後にClient が GATT を使ってデータを読みこむあるいは通知を受ける通信することになる。
GATT(汎用アトリビュートプロファイル) は、Bluetooth Low Energy(BLE)デバイス間のデータ交換を定義するプロファイル(仕組み)で共通ルールである。
< GATT サービス構造例 >
Service 1
- Characteristic A
- Characteristic B
※GATT(Generic Attribute Profile) でよく使われるサービス UUID のひとつ0x1822 は、Bluetooth SIG(標準団体)で定義された 16bit UUID のサービスで、「Pulse Oximeter Service(脈拍・血中酸素測定サービス)」を表す。
UUID:00001822-0000-1000-8000-00805F9B34FB
※0x1822のServiceの中に含まれるデータ要素として定義されているCharacteristicは、PLX Continuous Measurement Characteristic(UUID 0x2A5F)であり、継続的(Continuous)な血中酸素濃度(SpO₂)や心拍数等の測定値を送信するための値で、リアルタイム・ストリーミング型の計測データを提供するために用いられている。
UUID:00002A5F-0000-1000-8000-00805F9B34FB
※0x2A5F の値は以下のような 可変長の構造体(variable length structure) で、最初の Flags(フラグ)フィールド によって 後続フィールドの存在有無 が決まる。
[ Flags (uint8) ]
[ SpO2PR-Normal Field ]
[ (optional) SpO2PR-Fast Field ]
[ (optional) SpO2PR-Slow Field ]
[ (optional) Measurement Status Field ]
[ (optional) Device and Sensor Status Field ]
[ (optional) Pulse Amplitude Index Field ]
Flags を最初に読み、フラグの各bitでどのフィールドが含まれるか判断し、各値を順次読み進めることになる。設計したGAT_BLEクライアントアプリでは、[ SpO2PR-Normal Field ](正常モードの測定値を含む基礎フィールド)内の血中酸素飽和度(SpO₂)と脈拍(Pulse Rate)の測定値を読み込んでいる。SpO₂ や Pulse は SFLOAT(IEEE 11073)形式 などでエンコードされており、 16bit の float 形式の変換処理(Little Endian, SFLOAT → 数値へ変換)が必要となる。
