输入设备配置文件(.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 或输入设备名称进行定位。
将按以下顺序查阅路径。
/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
属性的值。
验证
请务必使用验证按键映射工具来验证您的输入设备配置文件。