入力デバイス設定ファイル

入力デバイス設定ファイル(.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)、または入力デバイス名で指定します。

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

  • /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
  • /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
  • /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 プロパティがすべての内部入力デバイスに対して正しく設定されているか確認することが重要です。

検証

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