コンテンツへスキップ

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

KDDIから日本初 一般向けのFirefox OS端末「fx0」が昨年末より発売されましたが、新たに契約する気もないので…
未だに手元のFirefox OS機はZTE Open Cです。(あとOpen Web Boardか)

ZTE OPEN C FirefoxOS(B2G)をビルドしてアップデートする1
ZTE OPEN C FirefoxOS(B2G)をビルドしてアップデートする2

以前、ZTE Open C用にFirefox OSのビルドの記事(上記)を書きましたが、良さげな非公式ビルドが公開されてました。
(Mozilla公式のサイトでは無いようです)

Community Builds for the ZTE Open C: http://builds.firefoxos.mozfr.org/doc/en/devices/zte-open-c

現在、v2.1(Beta), 2.2(Aurora), 3.0(Nightly) のアップデートファイルが公開されています。
例のOpen C Upgrade Tool でroot化済みであれば、リカバリモードで update.zip を突っ込めば終わりです。

手順も丁寧に書かれてありますし、手軽にアップデートできそうですね。

最近はいわゆるスマホVRのハコスコGoogle Cardboardで3DCGを見ようとプログラム書いてたんですが、Open Cは deviceorientation イベントが動かないっぽい?
各バージョン試してみましたが、動かんようです…

2

それでは本題のビルド作業になります。
Firefox OSのmsterブランチからNightlyビルド及び日本語化・日本語IMEの導入が目標です。
現時点では、Firefox OS 2.2になります。


ビルド環境の構築

 まず、ビルド環境ですが、現在64bit版LinuxかMac OS Xで動作するとのことです。
私はFedora 20 (64bit版)で行いました。

MDN: Firefox OS ビルドの必要条件

基本的には上記ページを参照して進めていきます。環境に合わせて各種準備を行ってください。

まずは必要なパッケージをインストール

$ sudo yum install autoconf213 bison bzip2 ccache curl flex gawk gcc-c++ git glibc-devel glibc-static libstdc++-static libX11-devel make mesa-libGL-devel ncurses-devel patch zlib-devel ncurses-devel.i686 readline-devel.i686 zlib-devel.i686 libX11-devel.i686 mesa-libGL-devel.i686 glibc-devel.i686 libstdc++.i686 libXrandr.i686 zip perl-Digest-SHA wget

また、Fedora 20のgccはデフォルトで4.8ですが、ビルドには4.6が推奨されるとのことなので、ダウンロードしておきます。

$ curl -O http://people.mozilla.org/~gsvelto/gcc-4.6.4-fc19.tar.xz
$ sudo tar -x -a -C /opt -f gcc-4.6.4-fc19.tar.xz

[追記] Fedora 21の場合はMake 4.0がデフォルトなので、ビルドに必要な3.82をインストール必要があります。(=>MDN Fedora21)

$ curl -O http://people.mozilla.org/~gsvelto/make-3.82-fc21.tar.xz
$ sudo tar Jxv -a -C /opt -f make-3.82-fc21.tar.xz
$ PATH=/opt/make-3.82/bin:$PATH

adbもインストールしてなければ、

sudo yum install android-tools

ccacheもサイズ大き目に一応設定しておきます。

ccache --max-size 10GB

端末のudevルールを設定します。ZTE OPEN Cじゃない場合はUSBベンダーIDが違うので注意。

$ sudo vim /etc/udev/rules.d/android.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="19d2", MODE="0666", GROUP="plugdev"
$ sudo systemctl restart systemd-udevd.service

端末のリモートデバッグを有効にするには、

[Settings]-[Device information]-[More information]-☑Remote debugging

システムパーティションのバックアップは、ビルドを行うbuild.shでやってくれるので、まあやらなくても。 ... "ZTE OPEN C FirefoxOS(B2G)をビルドしてアップデートする2" を続けて読む

Firefox OSをビルドして、最新の2.1 prereleaseまでアップデートしてみました。

MDN: Firefox OSのビルドの概要
     ZTE OPEN C マニュアルアップデート

基本はこちらの流れなのですが、途中で躓いた点がいくつかありました。
取りあえず今日はビルド、フラッシュの試行錯誤で疲れたのでまた後ほど書きます。


ZTEが公式に公開している最新のアップデートは以下よりダウンロードできます。
端末が起動できなくなった場合などの復旧にも必要となるなので、ダウンロードしておきます。
現在、FFOS_EU_EBAY_OPENCV1.0.0B06が最新みたいですね。

ZTE: OPEN C(European Standard) SD card upgrading instruction & software package

ダウンロードしたZIPを展開すると、手順書のPDFとupdate.zipがあるかと思います。
SDカードにupdate.zipをぶち込んで、電源ボタン+ボリュームボタン上を押しながら起動させると以下のようなリカバリモードで起動できます。
ボリュームボタンで[apply update from sdcard]を選択して、電源ボタンで決定。
次にupdate.zipを選択すると、アップデートが開始されます。

リカバリモード ... "ZTE OPEN C FirefoxOS(B2G)をビルドしてアップデートする1" を続けて読む

先日、開発者向けFirefox OSリファレンス端末「Flame」を触らせてもらってアプリ開発をぼちぼちやってみたのだけど、なかなか面白くて自分も開発用に手元に端末が欲しくなりました。
Flameの国内向け販売はOSSストアであったのだけど、買いそびれてしまいました。
今後の販売予定も未定とのことで、他を探そうということに。

MDN: Firefox OS 端末とその仕様

こちらを見ると、「Geeksphone Revolution」ってのと「ZTE Open C」が候補に挙がる。
Geeksphoneの方が性能も良さそうなんだけど、本体€123にVATと送料で結構高くつくのね。
ZTE OPEN Cはちょっとスペックが低くてメモリ512MBなのが気になるけど、リンク先のebay UKだと£38.99で安い。
けど日本に発送できません。セカイモンとかでも手数料だの送料が馬鹿にならなそうなので、
いつものAliExpressで探してみると$100弱であったので購入しました。
深圳からDHL配送だったので、6日ほどで届きました。 ... "Firefox OS端末 「ZTE OPEN C」" を続けて読む