ソフトウェア

Open Web Board のBLE Notification のバグ修正

2015/3/21

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

ZTE Open Cのコミュニティビルド

2015/3/12

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 イベントが動かないっぽい?
各バージョン試してみましたが、動かんようです…

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

2014/9/7

それでは本題のビルド作業になります。
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でやってくれるので、まあやらなくても。 Read more…

Windows 8 アップグレード版 駆け込み購入

2013/1/30

少し話題になっている(?)、Windows 8の発売記念優待版が今月いっぱいで終わってしまいます。
優待版のMicrosoftの参考価格は5,800円ですが、2月1日以降はなんと通常版価格25,800円と4倍以上になってしまいます。
まあ、そしたらDSP版のほうが安いので、わざわざUPG版は買わないと思いますけど。

と、そんな訳で今のところインストールするPCは無いけど、買っとけ!ってことで。
Amazonでは4,980円
ですが、
Amazonクーポンコードを使用すれば1,000円引きで3,980円

そうすると、ダウンロード購入の3,300円との値段差が680円ですので、パッケージで買ったほうが特かなぁと。

どうしようか迷っている方はお急ぎ下さい。
Microsoft、いい商売してますね・・・

[1/31追記]
先ほど確認したところ、残念ながらAmazonからの出品が終わってしまいました。
恐らく注文が殺到し在庫が尽きたようですね。う~ん、もう一本買っとくべきだったか・・・
今後は通常版での販売で、今のところ2万円くらいで販売されていますね。

そうしたらわざわざアップグレード版ではなく、DSP版を買わない理由はないでしょう。
上記のようにProのDSP版は1万円程度。無印であれば8千円弱といったところですね。
Windows 7 と比較すれば安いですね~。

不具合にイライラ -ChromeとEMETの競合-

2012/11/26

普段良く使うソフトウェアの不具合にはイライラしてしまうもの。


ウェブブラウザの「Google Chrome」
まずはAdobe Flash Player関連。
検索してみると音が出ないなど、多くの方々から不具合の報告が寄せられているようだ。
私の環境の場合、Papper Plugin API(PPAPI)版のFlash Playerを有効にしておくと、プラグインが読み込みさえされないのだ。
Chrome v23 Flash不具合
仕方なく、NPAPI版のFlash Playerを有効にしてしのごうか。

ところがまだ不具合がある。
それは特定サイトでクラッシュしてしまようになったことだ。もちろん今回のアップデート後で。
頻繁に利用するサイトの中では「VirusTotal」で発生する。
まず、 ファイルを選択し「Scan it!」ボタンをクリックし、ハッシュ計算中途の表示がされた直後以下のようなエラー表示になる。
Chrome v23 Crash 
なお、Chromium系のブラウザであるSRWare Iron v.23ではこの症状は発生しない。

うーむ、どうもおかしい。原因が気になる。。。
ここで以前記事に書いたDRM関係の問題を思い出したのだが、またEMET(Enhanced Mitigation Evaluation Toolkit)v3.0が原因ではないのか・・・?
確かにEMETにはChromeは保護対象に設定されているし、PPAPIの仕組み的にも何らかの干渉を起こしていてもおかしくない。
試しに無効にする・・・と、案の定、これらの問題が解消されたのだ!
以前のバージョンでもEMETとChromeと 競合した問題があり、修正されたはずだったのだが・・・

The Chromium Blog: Compatibility Issues With EMET

ChromeはEMETと同等のセキュリティ機構が実装されているとのことで、EMETは無効にしても良いかもしれない。
ただ、今回はSEHOP(Structured Exception Handling Overwrite Protection)が干渉しているようなので、これを無効にすれば良いようだ。

 EMET chrome.exe

無事解決してよかったが、もしMicrosoftがこの問題を認識しているならば、同梱されているProfile(All.xml)の設定を修正して欲しい。
EMET Notifierも何も通知しないしイベントログにも何も残らないし、また原因の特定に手こずったなぁ。