举例:添加一个"屏幕旋转键(rotate key)"
1,linux内核定义一个按键扫描码
在按键的配置文件中设置扫描码,比如dts中
rotate-key {
linux,code = <760>;
label = "rotate";
rockchip,adc_value = <355>;
};
其中“linux,code”就是按键扫描码,其定义在kernel\arch\arm64\boot\dts\include\dt-bindings\input\linux-event-codes.h中,最大值为767(0x2ff)
#define KEY_MAX 0x2ff
2,修改键值映射表rk29-keypad.kl
在device\rockchip\common\rk29-keypad.kl中添加
key 760 ROTATE
注意,这里的ROTATE要与下面InputEventLabels.h中定义的DEFINE_KEYCODE(ROTATE)中的ROTATE名字保持一致。
3,定义android键值
./frameworks/native/include/input/InputEventLabels.h中添加
DEFINE_KEYCODE(ROTATE),
4,
./frameworks/native/include/android/keycodes.h中添加
AKEYCODE_ROTATE = 300
5,
./frameworks/base/core/res/res/values/attrs.xml添加
<enum name="KEYCODE_ROTATE" value="300" />
6,
./frameworks/base/core/java/android/view/KeyEvent.java添加
public static final int KEYCODE_ROTATE = 300;
7,
./frameworks/base/api/system-current.txt添加
field public static final int KEYCODE_ROTATE = 300;
./frameworks/base/api/current.txt添加
field public static final int KEYCODE_ROTATE = 300;
8,处理按键消息
./frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java中interceptKeyBeforeDispatching函数中添加
if (keyCode == KeyEvent.KEYCODE_ROTATE) {
//do nothing
}