输入设备配置文件

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

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

原理

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

例如,如果输入设备支持 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) 或 Bluetooth (BUS_BLUETOOTH) 总线上的所有设备的默认值为 0,否则为 1

此属性决定有关唤醒事件的默认策略决策。

除非在按键布局文件或硬编码的策略规则中明确配置为这样做,否则内部输入设备通常不会将显示屏从睡眠状态唤醒。这种区分可以防止手机放在口袋中时,按键和触摸误唤醒手机。通常只定义了少数几个唤醒键。

相反,外部输入设备通常会更积极地唤醒设备,因为假定它们在运输过程中已关闭或未插入。例如,按下外部键盘上的任何键都很好地表明用户希望设备唤醒并响应。

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

验证

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