Open Web Board のBLE Notification のバグ修正

KDDIが発表したFirefox OSを搭載した開発ボード「Open Web Board
イメージファイルやソースコードも公開されました。

au Firefox OS 関連技術情報: http://opensource.kddi.com/owb/#download

以前、とあるイベントでOpen Web BoardとBLEデバイスを使ったアプリ開発をしていたのですが、その際にOpen Web BoardのGeckoに独自実装されているBLE GATTのNotificationの値が取れないというバグを発見しました。
現時点(2015.1.23公開)のソースコードでも未修正のようなので、まとめておきます。


ソースコードの取得についてはKDDIのサイトに書いてある通りです。

イメージファイル作成方法: http://opensource.kddi.com/owb/owbsource.html

ビルド環境についてはMDNを参照のこと。私が以前書いた記事も参考になるかもです。
(=>ZTE OPEN C FirefoxOS(B2G)をビルドしてアップデートする2

また、ビルドすると以下のようなエラーで止まってしまうので、Makefileの修正が必要です。

device/rockchip/rksdk/BoardConfig.mk:57: *** 空の変数名. 中止.

コロンとイコールの間にスペースが入ってしまっているだけです。

--- device/rockchip/rksdk/BoardConfig.mk.orig   2015-01-07 14:47:22.000000000 +0900
+++ device/rockchip/rksdk/BoardConfig.mk        2015-03-21 01:20:09.295321600 +0900
@@ -54,7 +54,7 @@
 include device/rockchip/rksdk/wifi_bt_common.mk

 #Bluetooth
-BOARD_HAVE_BLUETOOTH : = true
+BOARD_HAVE_BLUETOOTH := true
 BOARD_HAVE_BLUETOOTH_BCM := true

 #xuxy add

本題のBLEの修正は以下のようになります。(Gist)

--- ./gecko/dom/bluetooth/bluedroid/BluetoothGatt.cpp.orig      2015-03-19 02:05:19.361468298 +0900
+++ ./gecko/dom/bluetooth/bluedroid/BluetoothGatt.cpp   2015-03-19 02:50:24.378295237 +0900
@@ -2922,7 +2922,9 @@
     data_conn_id.AppendInt(mNotifyConnCommPara.connId);

     nsString data_value;
-//    data_value.APpendInt(mNotifyParaData);
+    char strValue[MAX_HEX_VAL_STR_LEN];
+    array2str(mNotifyParaData.value, mNotifyParaData.len, strValue, sizeof(strValue));
+    data_value = NS_ConvertUTF8toUTF16(strValue);

     nsString data_bdAddr;
     BdAddressTypeToString(&mNotifyParaData.bda, data_bdAddr);

以下のAPI仕様によると、Notification のデータは void onnotify(BluetoothGattEvent gattEvent) のパラメータ**gattEvent.value **で DOMString として取得できます。
ソースコードを見ても分かるように、データのバイト配列を16進数文字列に変換しています。
アプリ側でデータを使うにしても、割と泥臭い処理を書く必要がありますね…

Open Web Board / BLEマニュアル API仕様: http://opensource.kddi.com/owb/owbble.html#api

ちなみに、早い段階でOpen Web Boardを入手された方への注意点があります。
BLE APIの名前が navigator.mozBle から navigator.owbBle へ変更されているので、以前のバージョンのサンプルプログラム等を参照されている場合は変更が必要です。
まだ独自実装の段階なので、ベンダープレフィックスがmozからowbへ変更されたのでしょう。

そういえば、以下との兼ね合いはどういう感じなんでしょうかね?

mozilla wiki: B2G/Bluetooth/WebBluetooth-v2

comments powered by Disqus