Wiiリモコンで操作できるプレゼン・マシンの製作(2) ―― Wiiリモコンを動作させるためのミドルウェアを組み込む
tag: 組み込み ディジタル・デザイン
技術解説 2009年10月27日
●ソース・ファイルの動的生成対応
wminputでは,action_enum.cというソース・ファイルをaction_enum.txtとawkスクリプト・ファイルaction_enum.awkから生成しています(図3). Androidのビルド・システムでは,Android.mkのLOCAL_SRC_FILESに全てのソース・ファイルを指定しなければならないため,通常は動的にソース・ファイルを生成することができませんが,あるテクニックを使うとこれが可能となります.
まず,ダミーのソース・ファイルを新規で用意し,動的に生成するソース・ファイルを「インクルード」指定します(図3の①).Android.mkのLOCAL_SRC_FLESにはダミーのソース・ファイルを指定します(図3の②).さらにAndroid.mkには動的にソース・ファイルを生成する処理を記述します(図3の③).これと同じような対処がWebkitなどで行われています.
図3 ソース・ファイルの動的生成対応の概要
この修正はwminputのaction_enum.c,およびAndroid.mkで行っています.詳細はパッチ・ファイルを参照してください.
●config.hの準備
Androidのビルド・システムはautoconf未対応のため,あらかじめconfig.hを用意する必要があります.以下にconfig.hを示します.
●wminputサービスの登録と起動処理追加
Androidでは,プロセスやデーモンをサービスとして登録する必要があります.これに対応するため,以下のようにinit.rcにwminputサービスの登録処理と起動処理を追加します.
●inputデバイスのパーミッション変更
wminptが生成する仮想inputデバイスは所有者のUID(Ubiquitous ID;個体識別情報)がrootとなるため,UIDがsystemであるEventHubからはアクセスすることができません.これに対応するため,inputデバイスが生成されるディレクトリのパーミッションをEventHubからもアクセス可能な値に変更します.
●ビルドとSDカードへのコピー
変更を反映させるため,ビルド・ツリーのトップへ移動し,再ビルドします.
$ cd ~/mydroid
$ make -j2
変更が加えられた個所のみがbuildされるので,"Install"と出力されたものだけを前回準備したSDカードにコピーすればよいのですが,念のため全てをコピーし直しておきましょう.
$ cd ~/mydroid/out/target/product/generic
$ sudo cp -a root/* /media/LABEL2/
$ sudo cp -a system/* /media/LABEL2/system/
$ sudo cp -a data/* /media/LABEL2/data/
$ sudo chown -R root.root /media/LABEL2/
$ sudo chmod -R 777 /media/LABEL2/
●Androidの起動とペアリング
wminputサービスを動作させる条件として,Androidのbluetooth機能が有効になっている必要があります.まず,前回記載した方法でAndroidを起動し,以下の手順でbluetoothを有効にしておきましょう.
- アプリケーション・ランチャから"Settings"を起動する
- Settingsメニューから"Wireless controls"の項目を選択する
- Wireless controlsメニューから"Bluetooth"の項目を選択し,チェックを付ける
Wiiリモコンとペアリングするには,Android起動後にWiiリモコンの"1"ボタンと"2"ボタンを同時に押します(四つあるLEDが一つも光らなければ,電池を交換する).しばらくするとペアリングが完了し,Wiiリモコンでマウス・カーソルが操作できるようになります.マウス・カーソルはacc_ptr(3軸加速度センサ)を使用しての操作となるので,うまく動かすにはコツが必要かもしれません.十字キーやボタンについては,以下のとおりに割り当てました(写真2).
写真2 Wiiリモコンのキーの割り当て