输入设备配置文件

输入设备配置文件(.idc 文件)包含设备专用配置属性,这些属性会影响输入设备的行为。

输入设备配置文件通常并非标准外围设备(例如 HID 键盘和鼠标)所必需的,因为默认的系统行为通常可确保它们开箱即用。另一方面,内置的嵌入式设备(尤其是触摸屏)几乎总是需要输入设备配置文件来指定其行为。

Rationale

根据关联的 Linux 内核输入设备驱动程序报告的事件类型和属性,Android 会自动检测和配置大多数输入设备功能。

例如,如果输入设备支持 EV_REL 事件类型、代码 REL_XREL_Y 以及 EV_KEY 事件类型和 BTN_MOUSE,那么 Android 会将输入设备归类为鼠标。鼠标的默认行为是在屏幕上显示光标,光标跟踪鼠标的移动并在鼠标被点击时模拟触摸操作。虽然可以通过不同的方式配置鼠标,但是默认行为通常足以用于标准的鼠标外围设备。

某些输入设备类的行为则更加不明确。例如,多点触摸屏和触摸板都至少支持 EV_ABS 事件类型以及代码 ABS_MT_POSITION_XABS_MT_POSITION_Y。不过,这些设备的预期用途千差万别,不能总是自动确定。此外,还需要其他信息才能了解触摸设备报告的压力和大小信息。因此,触摸设备(尤其是内置触摸屏)通常都需要 IDC 文件。

位置

输入设备配置文件由 USB 供应商、产品(和可选版本)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) 或蓝牙 (BUS_BLUETOOTH) 总线上的所有设备的默认值均为 0,否则,值为 1

该属性确定有关唤醒事件的默认政策决定。

内部输入设备一般不从休眠状态中唤醒显示屏,除非键盘布局文件或硬编码的策略规则中明确进行了相应配置。这种区别可防止按键和触摸意外唤醒您口袋中的手机。通常只定义几个唤醒键。

相反,外部输入设备通常会更主动地唤醒设备,因为它们在传输过程中被假定为关闭或未插入。例如,按下外部键盘上的任何一个键就能很好地说明用户希望唤醒设备并得到响应。

请务必确保所有内部输入设备的 device.internal 属性的值均已正确设置。

验证

务必使用验证按键映射工具验证您的输入设备配置文件。