入力デバイス構成ファイル

入力デバイス構成ファイル(.idc ファイル)には、入力デバイスの動作に影響するデバイス固有の構成プロパティが含まれています。

通常、HID キーボードやマウスなどの標準周辺機器では入力デバイス構成ファイルは必要ありません。デフォルトのシステム動作により、直ちに使用を開始できるためです。一方、タッチ スクリーンなどの内蔵型組み込みデバイスでは、ほとんどの場合、入力デバイス構成ファイルで動作を指定する必要があります。

背景

Android では、関連する Linux カーネル入力デバイス ドライバによってレポートされたイベントタイプとプロパティに基づいて、ほとんどの入力デバイス機能を自動的に検出して構成します。

たとえば、入力デバイスが EV_REL イベントタイプとコード REL_X および REL_Y に加えて EV_KEY イベントタイプとコード BTN_MOUSE をサポートしている場合、Android は入力デバイスをマウスとして分類します。マウスのデフォルト動作では、マウスの動きに合わせて画面上のカーソルが表示され、マウスがクリックされたときのタッチ動作がシミュレーションされます。別の動作を構成することもできますが、通常、標準的なマウスではデフォルトの動作で十分です。

入力デバイスによっては、設定が明確になっていないものもあります。たとえば、マルチタッチ式のタッチ スクリーンとタッチパッドであれば、少なくとも EV_ABS イベントタイプとコード ABS_MT_POSITION_X および ABS_MT_POSITION_Y がサポートされています。ただし、これらのデバイスは用途が非常に幅広いことから、自動的に設定が定められない場合もあります。また、タッチデバイスからレポートされる圧力とサイズの情報を解釈するには、追加の情報が必要です。そのため、組み込みタッチ スクリーンなどのタッチデバイスにおいては、通常は IDC ファイルが必要になります。

位置情報

入力デバイス構成ファイルは、USB ベンダー ID とプロダクト ID(必要に応じてバージョン ID)、または入力デバイス名で指定します。

次のパスが順に参照されます。

  • /product/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
  • /system_ext/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
  • /odm/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
  • /vendor/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
  • /system/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
  • /data/system/devices/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc
  • /product/usr/idc/Vendor_XXXX_Product_XXXX.idc
  • /system_ext/usr/idc/Vendor_XXXX_Product_XXXX.idc
  • /odm/usr/idc/Vendor_XXXX_Product_XXXX.idc
  • /vendor/usr/idc/Vendor_XXXX_Product_XXXX.idc
  • /system/usr/idc/Vendor_XXXX_Product_XXXX.idc
  • /data/system/devices/idc/Vendor_XXXX_Product_XXXX.idc
  • /product/usr/idc/device-name.idc
  • /system_ext/usr/idc/device-name.idc
  • /odm/usr/idc/device-name.idc
  • /vendor/usr/idc/device-name.idc
  • /system/usr/idc/device-name.idc
  • /data/system/devices/idc/device-name.idc

デバイス名を含むファイルパスを作成する場合、デバイス名の「0」~「9」、「a」~「z」、「A」~「Z」、「-」、「_」以外のすべての文字は「_」に置き換えられます。

構文

入力デバイス構成ファイルは、プロパティの割り当てとコメントから構成される書式なしテキスト ファイルです。

プロパティ

プロパティの割り当ては、それぞれプロパティ名、=、プロパティ値、改行で構成されます。例:

property = value

プロパティ名は、空白でないリテラル テキスト識別子です。空白を含めることはできません。入力システムの各コンポーネントで、その関数の構成に使用される一連のプロパティを定義します。

プロパティ値は、空でない文字列リテラル、整数、または浮動小数点数です。空白や予約文字(\ または ")を含めることはできません。

プロパティ名と値では、大文字と小文字が区別されます。

コメント

コメント行は「#」で始まり、行末まで続きます。例:

# A comment!

空白行は無視されます。

# This is an example of an input device configuration file.
# It might be used to describe the characteristics of a built-in touch screen.

# This is an internal device, not an external peripheral attached to the USB
# or Bluetooth bus.
device.internal = 1

# The device should behave as a touch screen, which uses the same orientation
# as the built-in display.
touch.deviceType = touchScreen
touch.orientationAware = 1

# Additional calibration properties...
# etc...

共通のプロパティ

次のプロパティは、すべての入力デバイスクラスに共通です。

各クラスで使用する特別なプロパティについては、各入力デバイスクラスのドキュメントを参照してください。

device.internal

定義: device.internal = 0 | 1

入力デバイスが内部組み込みコンポーネントであるか、外部接続周辺機器(通常は取り外し可能)であるかを指定します。

  • 値が 0 の場合、デバイスは外部機器です。

  • 値が 1 の場合、デバイスは内部コンポーネントです。

  • 値が指定されていない場合、USB(BUS_USB)バスまたは Bluetooth(BUS_BLUETOOTH)バス上のすべてのデバイスは、デフォルトで 0 になります。それ以外の場合は 1 になります。

このプロパティにより、復帰イベントに関するデフォルト ポリシーの内容が決定されます。

キーレイアウト ファイルまたはハードコーディングされたポリシールールで明示的に構成しない限り、内部入力デバイスは通常、ディスプレイのスリープを解除しません。このように定めることで、スマートフォンがポケットに入っているときに、誤ってキーを押す、タッチするなどしてスマートフォンのスリープが解除されることを防ぎます。通常、復帰用のキーはあまり多く定義されません。

逆に、外部入力デバイスは、移動中に電源がオフになっているか接続されていないと想定されることが多いため、比較的すぐにスリープ解除が行われます。たとえば、外付けキーボードをスリープから復帰する場合は、キーボードのいずれかのキーを押すとすぐにスリープが解除されます。

device.internal プロパティがすべての内部入力デバイスに対して正しく設定されていることを確認することが重要です。

検証

キーマップを検証するのツールを使用して、入力デバイス構成ファイルを検証してください。