输入设备配置文件(.idc 文件)包含特定设备的配置属性,这些属性会影响输入设备的行为。
输入设备配置文件通常并非标准外围设备(例如HID键盘和鼠标)所必需的,因为默认的系统行为通常可确保它们开箱即用。另一方面,内置的嵌入式设备(尤其是触摸屏)几乎总是需要输入设备配置文件来指定其行为。
基本原理:
根据关联的Linux内核输入设备驱动程序报告的事件类型和属性,Android会自动检测和配置大多数输入设备功能。
例如,如果输入设备支持EV_REL事件类型、代码REL_X和REL_Y以及EV_KEY事件类型和BTN_MOUSE,则Android会将输入设备归类为鼠标。鼠标的默认行为是在屏幕上显示光标,光标跟踪鼠标的移动并在鼠标被点击时模拟触摸操作。虽然可以通过不同的方式配置鼠标,但是默认行为通常足以用于标准的鼠标外围设备。
某些类别的输入设备更加模糊。例如,多点触摸屏和触摸板都至少支持EV_ABS事件类型以及代码ABS_MT_POSITION_X和ABS_MT_POSITION_Y。不过,这些设备的主要用途千差万别,无法总能自动确定。此外,还需要其他信息才能了解触摸设备报告的压力和大小信息。因此,触摸设备(尤其是内置触摸屏)通常都需要IDC文件。
位置:
输入设备配置文件由USB供应商、产品ID或输入设备名称定位。
按顺序查阅以下路径:
/system/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc/system/usr/idc/Vendor_XXXX_Product_XXXX.idc/system/usr/idc/DEVICE_NAME.idc/data/system/devices/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc/data/system/devices/idc/Vendor_XXXX_Product_XXXX.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 = touchScreentouch.orientationAware = 1# Additional calibration properties...# etc...
通用属性:
以下属性在所有输入设备类之间通用。
如需了解每个类所使用的特殊属性,请参阅各个输入设备类的文档。
device.internal
定义:device.internal = 0 | 1
指定输入设备属于内置组件,还是外部连接(很可能可拆卸)的外围设备。
如果值为 0,则该设备为外部设备。
如果值为 1,则该设备为内部设备。
如果该值未指定,则USB (BUS_USB)或蓝牙(BUS_BLUETOOTH)总线上的所有设备的默认值均为0,否则,值为1。
该属性决定有关唤醒事件的默认策略决定。
内部输入设备一般不从休眠状态中唤醒显示屏,除非关键布局文件或硬编码的策略规则中明确进行了相应配置。这种区别可防止按键和触摸意外唤醒您口袋中的手机。通常只定义几个唤醒键。
相反,外部输入设备通常会更主动地唤醒设备,因为它们在传输过程中被假定为关闭或未插入。例如,按下外部键盘上的任何一个键就能很好地说明用户希望唤醒设备并得到响应。
务必确保所有内部输入设备device.internal属性的值都得到正确设置。
验证:
确保使用验证按键映射工具验证您的输入设备配置文件。