Android idc输入设备配置文件

1. idc说明

idc 是Input Device Configuration的缩写,输入设备配置文件(.idc 文件)包含特定设备的配置属性,这些属性会影响输入设备的行为。
Android是基于输入设备驱动上报的事件类型和属性来检测和配置大部分输入设备。通常情况下标准外围设备(例如 HID 键盘和鼠标)是不需要额外配置idc,因为默认的系统行为通常可确保它们即插即用。但是,有部分外设的分类不够明确,如多点触摸屏和触摸板都支持EV_ABS事件类型(触摸屏),但是他们的使用是不同的,所以需要额外配置idc来指示设备的上报类型。通常情况下触摸设备(尤其是内置触摸屏)都是需要输入设备配置文件来指定其行为。

2. idc的命名规则及遍历顺序

命名规则

字符映射文件的命名规则有两种:

  • 使用 设备的 供应商(Vendor)、产品(Product)和版本(Version) ID,其中Version为可选
  • 输入设备名称
    如下所示

Vendor_XXXX_Product_XXXX_Version_XXXX.idc
Vendor_XXXX_Product_XXXX.idc
DEVICE_NAME.idc
注:

  1. 当以DEVICE_NAME来命名时,设备名称中除“0-9”、“a-z”、“A-Z”、“-”或“_”之外的所有字符都会被替换为“_”.

  2. 如果三种命名规则的文件都存在,则系统查阅kcm顺序为由上至下。

  3. 如果查找不到对应的kcm文件,则使用默认的Generic.kcm(此按键字符映射旨在支持各种标准外部键盘)。

  4. Android获取input设备的相关信息(VID、PID等)

查阅顺序

按键字符映射文件可以通过USB供应商、产品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

3. idc语法及示例

语法:

输入设备配置文件是由属性分配和注释组成的纯文本文件。

  • 属性
    属性分配均由属性名称、=、属性值和新行组成。例如:

    property = value

    属性名称为非空的文字文本标识符,不能包含空格。输入系统的每个组件都定义一组用于配置其功能的属性。

    属性值为非空字符串文字、整数或浮点数。不能包含空格或保留字符 \ 或 "。

    属性名称和值区分大小写。

  • 注释
    注释行以“#”开头,并持续到这一行的结束。示例如下:

    /# A comment!

    空白行会被忽略。

示例:

#0 外部设备,1 内部设备
#如果没有配置, 对于USB (BUS_USB)设备 或 Bluetooth (BUS_BLUETOOTH) 设备默认为0, 其他设备默认为1.
device.internal = 0
#指定与输入设备关联的键布局文件的名称,不包括.kl扩展名。 如果找不到此文件,输入系统将使用默认键布局
keyboard.layout = qwerty
指定与输入设备关联的字符映射文件的名称,不包括.kcm扩展名。 如果找不到此文件,输入系统将使用
keyboard.characterMap = qwerty
#指定键盘是否应对显示方向更改做出反应,默认值为0。
#如果值为1,则在关联的显示方向改变时旋转方向键盘键。
#如果值为0,则键盘不受显示方向更改的影响。
#如全键盘手机由横屏旋转90变为竖屏,键盘中的方向键DPAD_LEFT根据屏幕方向变为指向上部,所以要重新映射为DPAD_UP
keyboard.orientationAware = 1
#1 内置键盘, 0外部设备
#如果设备名称以-keypad结尾,则默认值为1,否则为0。
keyboard.builtIn = 1

#只有navigation合法值
#若设置其他则设备是与显示屏相关联的关联的输入设备,不显示光标
cursor.mode = navigation
cursor.orientationAware = 1

#touchScreen:触摸屏,触摸设备是与显示屏相关联的触摸板。
#touchPad:触摸板,则触摸设备是不与显示屏相关联的触摸板,需要在显示屏上显示一个光标以便定位。
#pointer:和touchPad类似,但是多一些手势功能
#default:由系统根据某些算法来确定类型。
touch.deviceType = touchScreen
#指定触摸设备是否应对显示屏的方向更改做出响应。
如果值为 1,则只要显示屏的方向更改了,触摸设备报告的触摸位置就会旋转。
如果值为 0,则触摸设备报告的触摸位置将不受显示屏方向更改的影响。
touch.orientationAware = 1

4. 验证按键映射工具

Android 框架有一个名为 validatekeymaps 的小工具,用于验证输入设备配置文件、按键布局文件、按键字符映射文件和虚拟按键定义文件的语法。

编译

mmm frameworks/base/tools/validatekeymaps

该命令应该会将一个名为 validatekeymaps 的主机工具编译到 out/host//bin 目录中。

使用

如果您通过运行 envsetup.sh 设置了开发环境(需要lunch对应的PRODUCT),那么 validatekeymaps 工具应当已经位于您的路径中。您可以通过运行 validatekeymaps 进行验证。

android10.0$ validatekeymaps
Usage:
validatekeymaps [-q] [.kl] [.kcm] [.idc] [virtualkeys.] […]
Validates the specified key layouts, key character maps,
input device configurations, or virtual key definitions.
-q Quiet; do not write anything to standard out.

示例:

android10.0$ validatekeymaps frameworks/base/data/keyboards/AVRCP.idc
Validating file ‘frameworks/base/data/keyboards/AVRCP.idc’…
No errors.

Success.

不过经过测试,这个工具对于idc文件能排查处语法错误的问题,对于实际的字段和值有效性并没有进行校验.

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值