AML方案遥控适配:
一、红外适配
使用"getevent -l"可以查看该机顶盒上适配的遥控器及对应的event,然后再随便按个按键,串口输出如下:
使用"dumpsys input"可以查看每套遥控器对应的kl文件,串口输出如下:
根据上面input得知input/event1来自aml_keypad。其下面对于的 KeyLayoutFile: /vendor/usr/keylayout/Vendor_0001_Product_0001.kl即为相应kl文件,若无,则采用规则Vendor__(Identifier中的vendor值)_Product(Identifier中的produce值).kl规则
二、蓝牙适配
3.1 蓝牙键值
不同芯片平台对蓝牙键值的适配方式是一样的,有差异的是hid-input.c文件的位置,具体如下:
1>海思:device/hisilicon/bigfish/sdk/source/kernel/linux-3.18.y.patch/drivers/hid/hid-input.c
2>Amlogic:common/drivers/hid/hid-input.c
3>Mstar:vendor/mstar/kernel/drivers/hid/hid-input.c
先看一张蓝牙遥控器的码值表,如下:
上面的键值表中第二列表示物理键值,第三列表示蓝牙键,第四列代表上层Android键值。该表中不涉及按键的Linux键值,也就是说明某个按键的Linux键值是可以任意定义的(虽然可以任意定义,但不建议这样做,接下来会详细说明)。
上表的第三列中蓝牙键值有不同的备注,"07"代表的普通蓝牙键值,"0c"代表多媒体键值,这两种类型键值的适配方式也不同,具体如下:
static const unsigned char hid_keyboard[256] = {0, 0, 0, 0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38,50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 2, 3,4, 5, 6, 7, 8, 9, 10, 11, 28, 1, 14, 15, 57, 12, 13, 26,27, 43, 43, 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64,65, 66, 67, 68, 87, 88, 99, 70,119,110,102,104,111,107,109,106,105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71,72, 73, 82, 83, 86,127,116,117,183,184,185,186,187,188,189,190,191,192,193,194,134,138,130,132,128,129,131,137,133,135,136,113,115,114,unk,unk,unk,121,unk, 89, 93,124, 92, 94, 95,unk,unk,unk,122,123, 90, 91, 85,unk,unk,unk,unk,unk,unk,unk,111,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,179,180,unk,unk,unk,unk,240,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,250,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,unk,111,unk,unk,unk,unk,unk,unk,unk,29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113,150,158,159,128,136,177,178,176,142,152,173,140,unk,unk,unk,unk };
如果某个"0c"类型键值在适配过程中,发现kl文件与hid_keyboard数组中的值不对应,建议修改kl文件。"0c"类型键值的适配,以设置为例,在HID_UP_CONSUMER中对应的代码为:
case后面的值为为对应的蓝牙键值,map_key_clear内的值为对应的按键名称。
3.2 kl
要明确蓝牙键值对应哪个kl文件,仍可用上面提及的"dumpsys input",如frameworks/base/data/keyboards/Vendor_0416_Product_0300.kl。kl文件中的配置,与红外适配时相同,不再赘述。
3.3 Android键值
映射到上层Android键值的部分,也与红外就键值适配时相同,涉及以下几个文件:
frameworks/base/core/java/android/view/KeyEvent.java
frameworks/base/core/res/res/values/attrs.xml
frameworks/native/include/android/keycodes.h
frameworks/native/include/input/KeycodeLabels.h
至此,Android TV上适配遥控器键值已全部完成。
案例:
修改映射文件common/drivers/hid/hid-input.c,参考hid-input.diff