客户要定制一款usb无线遥控器(其实走的键盘流程),要添加一个特殊键,遥控器厂商让我们确定键值。
getevent指令用于获取 input 输入事件,比如获取按键上报信息、获取触摸屏上报信息等。
通过getevent -l查看分别按红外遥控器和无线遥控器的方向上键的事件信息如下:

event0是红外遥控器,红外遥控器的键值可以通过android_ir_user查看

event3是usb无线遥控器,可以看到都发送了KEY_UP的事件,通过getevent可以查看KEY_UP的具体键值:

到这里,我们知道了不管红外遥控器上键(红外键值0x35ca4cb3)还是无线遥控器按上键(HID码0x00070052)都是转换成了Linux键值(0x67)。接下来看看在Linux内核中是如何将遥控器键值转换为Linux通用键值的。
红外遥控器
- 定义原始硬件码值和对应linux层通用键名:
/device/hisilicon/bigfish/system/ir_user/key_pars/key.xml
1 | <key value="0x35ca4cb3" name="KEY_UP" /> <!--key up--> |
- 定义linux层通用键名和linux层键值的对应关系:
/device/hisilicon/bigfish/system/ir_user/key_pars/linux_key.h
1 | const linux_keycode_ary Linux_KeyCode_Ary[512]= |
无线遥控器(外接键盘)
- Linux内核中usb键盘的驱动程序是
./device/hisilicon/bigfish/sdk/source/kernel/linux-3.18.y/drivers/hid/hid-input.c

找到数组的第82(0x52)个元素,就是键值103。
了解过这个情况后,以后在定制键盘时,告知给键盘设计厂商的应该是HID原始键值码。
HID原始键值码是由《USB HID to PS/2 Scan Code Translation Table》HID协议中规定的。