android9.0 按键重新映射

本文档详细介绍了如何在Android系统中为触摸屏(TP)驱动添加对电源键的支持,通过修改TP上报数组、驱动代码以及系统层按键映射,实现了SCREENOFF键的功能。主要涉及的文件包括`input-event-codes.h`、`linux-event-codes.h`、`tpd_custom_gt9xx.h`、`gt9xx_driver.c`以及Android的`InputEventLabels.h`、`keycodes.h`、`Generic.kl`和`KeyEvent.java`。通过这些修改,上层应用可以识别并使用KEYCODE_SCREENOFF进行屏幕开关操作。

项目需要TP上支持power(映射成屏幕关闭按键)、音量+ 音量- HOME和back按键,TP的驱动需要重新调试,GT928驱动和固件支持按键直接报键值,所以不需要使用按键坐标

1、TP按键上报数组和开关配i的修改
kernel-4.9\include\uapi\linux\input-event-codes.h
#define KEY_MICMUTE 248 /* Mute / unmute the microphone /
#define KEY_SCREENOFF 249 //add by zhaojr for power off and on screen //添加这个按键值,后面我们需要映射到android系统中
kernel-4.9\arch\arm64\boot\dts\include\dt-bindings\input\linux-event-codes.h
#define KEY_MICMUTE 248 /
Mute / unmute the microphone */
#define KEY_SCREENOFF 249 //add by zhaojr for power off and on screen //添加这个按键值,后面我们需要映射到android系统中
kernel-4.9\drivers\input\touchscreen\mediatek\GT928\tpd_custom_gt9xx.h

#define TPD_KEY_COUNT   5   //5个按键
//HOME键不能使用成KEY_HOME,因为android上层将其屏蔽了,导致不起作用,所以使用成KEY_HOMEPAGE键
//KEY_SCREENOFF 这里的power键我们设置成SCREENOFF键,后面映射到android系统中
#define TPD_KEYS          {KEY_SCREENOFF,KEY_VOLUMEUP,KEY_VOLUMEDOWN, KEY_HOMEPAGE, KEY_BACK} 
 //这里不需要修改,没有使用坐标映射的方式上报 
#define TPD_KEYS_DIM    {
   
   {60, 850, 50, 30}, {180, 850, 50, 30}, {300, 850, 50, 30}, {420, 850, 50, 30} } 

#define GTP_HAVE_TOUCH_KEY    1   //打开这个开关
//替换TP厂家给的数组
//CTP_CFG_GROUP1 for new tp GT928 1024*600 para//cgx //improve semsiky//20101015
#define CTP_CFG_GROUP1 {\
0x00,0x00,0x04,0x58,0x02,0x0A,0x0C,0x01,0x01,0x08,\
0x28,0x05,0x50,0x32,0x03,0x05,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x30,0x99,\
0x2E,0x2A,0xD3,0x07,0x78,0x78,0x00,0x9A,0x03,0x24,\
0x00,0x00,0x00,0x00,0x78,0x00,0x64,0x32,0x00,0x00,\
0x00,0x1E,0x50,0x94,0xD0,0x02,0x07,0x00,0xF0,0x04,\
0x80,0x21,0x00,0x80,0x28,0x50,0x80,0x31,0x32,0x80,\
0x3B,0x28,0x80,0x48,0x00,0x80,0x10,0x30,0x48,0x68,\
0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x17,0x16,0x15,0x14,0x11,0x10,0x0F,0x0E,\
0x0D,0x0C,0x09,0x08,0x07,0x06,0x05,0x04,0x01,0x00,\
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x02,0x04,0x06,0x07,0x08,0x0A,0x0C,\
0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x19,0x1B,\
0x1C,0x1E,0x1F,0x20,0x21,0x22,0x23,0x24,0x25,0x26,\
0x27,0x28,0x29,0x2A,0x00,0x00,0x00,0x00,0x00,0x00,\
0x00,0x00,0x00,0x00,0xEB,0x01,\
}

#if GTP_HAVE_TOUCH_KEY
//#define GTP_KEY_TAB	 {KEY_POWER,KEY_VOLUMEUP,KEY_VOLUMEDOWN, KEY_HOMEPAGE, KEY_BACK}
//修改这个数组
#define GTP_KEY_TAB	 {KEY_SCREENOFF,KEY_VOLUMEUP,KEY_VOLUMEDOWN, KEY_HOMEPAGE, KEY_BACK} 
#endif

2、按键上报驱动的修改
kernel-4.9\drivers\input\touchscreen\mediatek\GT928\gt9xx_driver.c

#if GTP_HAVE_TOUCH_KEY
const u16 touch_key_array[] = TPD_KEYS;
#define GTP_MAX_KEY_NUM ( sizeof( touch_key_array )/sizeof( touch_key_array[0] ) )
/*
struct touch_vitual_key_map_t
{
   int point_x;
   int point_y;
};
static struct touch_vitual_key_map_t touch_key_point_maping_array[]=GTP_KEY_MAP_ARRAY;
*/
#endif

系统启动的初始化:

static s32 tpd_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
   
   
	s32 err = 0;
	s32 ret = 0;
	/*int i;*/
	u16 version_info;
	struct task_struct *thread = NULL;
#if GTP_HAVE_TOUCH_KEY				/* GTP_HAVE_TOUCH_KEY */
	s32 idx = 0;
#endif
........................................
if GTP_HAVE_TOUCH_KEY
/*	for (idx = 0; idx < TPD_KEY_COUNT; idx++)
		input_set_capability(tpd->dev, EV_KEY, touch_key_array[idx]);
*/
 for (idx = 0; idx < GTP_MAX_KEY_NUM; idx++)
	//for (idx = 0; idx < TPD_KEY_COUNT; idx++)
    {
   
   
        input_set_capability(tpd->dev, EV_KEY, touch_key_array[idx]);
    }
#endif
...........
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值