メモ

調べたり思いついたりしたことをメモします

Open Web Board の BLE

11/15に大阪でハッカソンがあり、Open Web Board というものをもらってきました。

f:id:uenoshin:20141206002353j:plain

右上の小さいUSBが給電用で、左のHDMIでモニタに接続して画面出力できるようになっています。 メモリ1G、ストレージ8G、Bluetooth4.0対応、WiFi802.11b/g/n対応、など盛りだくさんです。Androidスティック並みの小さいサイズなのにがんばってますね。発熱するらしいので専用ケース付きでした。 OSは FirefoxOS v1.4 だそうで、ちょっとだけ古いです。最新に入れ替えてみたくてうずうずします。

HDMIで画面につながるのですがタッチパネルでないのでマウス必須です。写真右下のUSBのクチはマウス専用になりそうですがBluetoothマウスを使ってもいいかもしれません。 RaspberryPi や Flame とは何が違うだろうかという点が気になりますが、やはりこのボードはBLEがポイントになるように思ったのでBLEをどう実装しているのかちょっとだけ調べてみました。

BLEデモというアプリが予め入っているので adb pull でこれを吸い出して中身を展開します。 bleclient.gaiamobile.org という名前で入っていました。 デモという名前だけあってかなり軽量でシンプルなアプリでした。

使っている主なオブジェクトは3つあります。

  1. navigator.mozBluetooth

  2. navigator.mozSettings

  3. navigator.mozBle

1,2は普通に既存実装されている BluetoothManager と SettingManager です。 3つめの mozBle だけは mozilla-central や mozilla-aurora にも見当たりませんので、おそらく独自拡張かと思えます。 この mozBle にどんな機能があるか気になるところですが Gecko 側の webidl や C++ソースもありませんし、当然MDNにも乗っていないので現状はこのデモアプリのJavaScriptソースから読み解くしかなさそうです。

ble_demo.js上で使われているメソッドは次の通りでした。

registerClient()
unRegisterClient()
connectBle()
disconnectBle()
searchService()
getIncludeService()
readRemoteRssi()
executeWrite()
scanLEDevice()
registerForNotification()
getCharacteristic()
readCharacteristic()
writeCharacteristic()
getDescriptor()
readDescriptor()
writeDescriptor()

メソッドの名前からおおよそ推測するしかありませんが、Gattプロファイルに準じたR/Wができるようです。

Bluetooth GATT | Specifications | Bluetooth Development Portal

また、この mozBle はなぜかイベントハンドラを持ってないようです。 代わりに BluetoothAdapter に対してMDNに記載のないハンドラを登録している処理があったので、BluetoothAdapter に対しても拡張が加えられているのかもしれません。 BluetoothAdapter - Web API Interfaces | MDN

今日現在ではAPIが公開されていない(少なくとも私は発見できていない・・)ようなので実際にBLEを使った作品を作ってみるにはデモアプリを解析しながらやるしかないようです。といっても割と分かりやすいデモアプリだと思いますのでそれほどハードルは高くないでしょうけど。 年末年始の休みにはなにか作ってみたいのでそれまでに公開があることを期待したいと思います。