ワコムデジタイザ向けAndroidフレームワーク

LINEで送る

内蔵EMRセンサーからUSB接続およびBluetooth接続のタブレットまで、ワコムのハードウェアを使用するAndroidデバイスは増え続けています。かつてAndroidは基本的なスタイラスデータを報告することしかできませんでしたが、最近のリリースではペン操作のエクスペリエンスを豊かにするための数々の工夫が加えられました。

本書は、Android内に存在してペン入力をサポートするフレームワークの概要を説明し、Androidデバイスの製造業者および開発者向けの指針となることを目指しています。

INDEX

詳細

1 カーネルデバイス

LinuxカーネルはAndroid OSの基礎を提供します。デジタイザ自体のサポートは専門のワコムドライバが行います。ドライバはデジタイザをセットアップし、そのプロパティをAndroidフレームワークで使用するためにsysfsにエクスポートします。
他のLinuxシステムと同様に、ユーザー空間のデーモンがdevfsを管理します。Androidの場合、このデーモンはueventdです。新しいハードウェアが接続されると、/dev/inputディレクトリにデバイスノードが作成されます。このディレクトリは、タッチスクリーンや加速度計など、すべての入力デバイスのホームとなります。

2 Android入力サービス

rawカーネルevdevデバイスは、Androidの入力サービスによって管理されます。このサービスはユーザー空間入力ドライバとして機能し、イベントをAndroid APIで定義された形態に変換します。このサービスはInputManagerクラスのインスタンスによって動作し、パイプライン化された2つのイベントポンプを起動します。1つ目のポンプはrawカーネルイベントを処理し、各入力パケットをスナップショットにパッケージ化します。2つ目のポンプは、複数のスナップショットを単一のイベントにまとめ、効率的にアプリに配信します。

2.1 InputReaderポンプ

1つ目のポンプはInputReaderです。これは、EventHubを利用して、既知の全入力デバイスの現在の状態を更新します。このイベントハブは「イベントの中心地」を自称しています。接続されたデバイスを追跡し、すべてのデバイスから発生した入力イベントの最新のリストをポーリングできます。
各ループで、入力リーダーはイベントハブに新しいイベントすべてのリストを要求します。イベントごとに関連付けられた発生元InputDeviceを特定し、追加処理を実行させます。次に、これらは一連の「入力マッパー」によって、デバイスタイプに固有の形態でイベントを処理します(例:タッチスクリーンは位置データをTouchInputMapperで処理します。一方、マウスは同じデータをCursorInputMapperで処理します)。

一般的に、カーネルから受信したデータは未処理の状態で残ります。通常、入力マッパーは値を直接保存します。もしくは、「累算器」に提供する場合もあります(例:相対値から絶対値への変換)。ただし、より大規模な処理が必要になる場合もあります(例:入力デバイス設定ファイルで指定されたパラメータを調整する場合)。

カーネルから完全なイベントパケットを受信したことを入力マッパーが気づくと、処理するInputDispatcherポンプのキューの最後に公開状態を追加します。

2.2 InputDispatcherポンプ

InputDispatcherポンプは定期的に実行され、累積したイベントをInputReaderからアプリケーションにフラッシュします。カーネルパケットをアプリに通知する処理にはオーバーヘッドが伴うため、ディスパッチャは短期間に連続する複数のイベントを一括して配信することができます。これによって、画面を更新するたびに複数回の通知を行わなくても中間状態を保存できます。

InputDispatcherは、イベントをハードウェアから中継するだけではなく、イベント投入やANR警告なども処理します。

3 フレームワークの機能

3.1 設定

Androidには、カーネルデバイスイベントの解釈方法を調整するための「入力デバイス設定」ファイルがあります。例えば、報告されたタッチサイズを一定の倍率で調整するようにAndroidに通知することができます。これらのファイルを使用すると、Androidのデバイス処理方法を全体的に調整することもできます(例:Androidが誤検知した「deviceType」を特定のタイプに変更する)。詳細については、IDCファイルプロパティのリストを参照してください。

IDCファイルを使用してタッチスクリーンまたはEMRセンサーの校正を指定することはできないことに注意してください。これを行うための機能はAndroidにはまだありません。ただし、過去にはtslibなどのサードパーティツールおよび校正パラメータを適用するInputReaderのパッチが回避策として使用されました。

3.2 デバッグ

Androidには、フレームワークレベルで入力デバイスの動作をデバッグできるプログラムがいくつか付属しています。

dmesg

dmesgコマンドを使用すると、カーネルがデジタイザを認識しているかどうかを判定できます。ログの「input」から始まる行には、入力デバイスの名前とsysfsパスの両方が含まれています。ワコムドライバは「Wacom」から始まる独自のメッセージを生成する場合があります。

getevent

Androidには、カーネルデバイスのデバッグを行うためのgeteventツールがあります。このツールを使用すると、既知のすべてのカーネル入力デバイスのリストを取得したり、プロパティを表示したり、イベントストリームをリアルタイムで監視したりすることができます。
カーネルの入力イベントインターフェースのドキュメントはオンラインで参照できます。特に、イベントコードマルチタッチプロトコルのドキュメントを参照してください。

dumpsys

dumpsysツール(参照)を使用すると、Androidサービスに関する情報をダンプすることができます。特に、入力サービスとウィンドウサービスには、Android自身の入力ドライバの状態に関する情報が多く含まれています。

Wacom Technology Corp.
バージョン 1.0 2013年

Top