前のエントリで kobo 用の開発環境を整えたので、簡単な kobo 用スタンドアロンアプリを作ってみます。
スタンドアロンアプリの他にも、プラグイン形式でアプリを作ることもできますが、nickel の仕様が公開されておらず、解析しながら実装することになるため、ここでは省きます。
スタンドアロンアプリのスタイルとして以下の2つがあります。
- nickel のQWSサーバを利用したスタンドアロンアプリ
- nickel なしの完全スタンドアロンアプリ
nickel とは kobo 標準のアプリのことです。
1. nickel の QWS サーバを利用
nickel プロセスの裏側でアプリを立ち上げる形式です。
Qt/Embedded は 1 つのプロセスを I/O 用サーバ(QWSサーバ)として起動させ、他のプロセスはQWSサーバに接続することで、複数のプロセスが Window を作成したりイベントを処理したりすることができるようになっています。
nickel の QWS サーバを利用することで、画面描画処理を nickel に任せることができるようになり、アプリの実装量が少なくなります。
本来なら画面タッチのイベントも QWS サーバがハンドリングしてクライアントに渡すはずなのですが、Kobo では mouse イベントが呼ばれないので、自前で /dev/input/event? を処理する必要があります。
また、後ろで nickel が動いているため、使用可能なメモリ量には限りがあります。
2. nickel なしの完全スタンドアロンアプリ
nickel を終了させ、自分自身が QWS サーバになる形式です。
I/O を行なってくれるサーバがいないので、画面描画、タッチやキー入力のイベントハンドリングも自前で行う必要があります。
具体的には、QScreen クラス, QWSMouseHandler クラスを実装する必要があります。
綺麗な作り方としては、QWS サーバに必要な機能は別の .so に分離しておくのですが、nickel ではこのへんの機能は全部 libnickel.so に詰め込んであるため、nickel の実装を流用することができません。
ただ、悪いことばかりではなく、自分で画面描画を制御できるため 2 値モードなども実装すれば使用可能です。
また、nickel がいないため、メモリも広く使うことができます。
■ Kobo 用スタンドアロンアプリの注意点
どちらのタイプにも共通の注意点を書いておきます。
まず、日本語フォントが使えません。
有名なモリサワフォントが入っているため、その流用防止のためと思われますが、フォントに暗号化がかかっており普通の Qt ライブラリ経由ではフォントが使用できません。そのため独自にフォントを入れる必要があります。
CFW を前提とするなら、KBMincho (お世話になってます!)が入っているので使用するとよいでしょう。
一部の英文フォントは暗号化されていないようです。
■ QWS利用スタンドアロンのサンプル
さて、能書きはこれくらいにしておいて、実際にサンプルアプリを試してみましょう。
Kobo 上でコマンドを実行する必要があるため telnet の環境が必要です。
また、日本語フォントを使うため、CFW 0.95 が入っている必要があります。
前回の環境構築で、作業ディレクトリ内に env.sh というファイルが作られていると思います。これを source します。
$ cd ~/kobo
$ source env.sh
または
$ . env.sh
次にサンプルソース(kobo-standalone-example.tar.gz)をダウンロードし、展開します。
$ wget https://petit-noise.net/system/files/kobo-standalone-example.tar.gz
$ tar xf kobo-standalone-example.tar.gz
$ cd kobo-standalone-example/
前回インストールした qt の qmake を実行し、make します。
$ /usr/local/Trolltech/QtEmbedded-4.8.0-arm/bin/qmake
$ make
standalone というファイルができていると思います。
これを kobo へコピーします。PC につないだ時に見える KOBOeReder ドライブのルートディレクトリへコピーしてください。
PC との接続を解除し、telnet で kobo にログインして、以下のコマンドを実行して環境変数を設定します。
# export QWS_MOUSE_PROTO="tslib_nocal:/dev/input/event1"
# export QWS_KEYBOARD=imx508kbd:/dev/input/event0
# export QWS_DISPLAY=Transformed:imx508:Rot90
# export NICKEL_HOME=/mnt/onboard/.kobo
# export LD_LIBRARY_PATH=/usr/local/Kobo:/mnt/onboard/app/
# export LANG=en_US.UTF-8
そして転送した standalone アプリを実行します。
# /mnt/onboard/standalone
以下のような画面が表示されれば成功です。
サンプルソースが非常に汚いですがご勘弁を・・・。