if (event->au16_x[i] < 540 && event->au16_y[i] < 960)
//LCD view area
{
input_report_abs(data->input_dev, ABS_MT_POSITION_X, event->au16_x[i]);
input_report_abs(data->input_dev, ABS_MT_POSITION_Y, event->au16_y[i]);
input_report_abs(data->input_dev, ABS_MT_WIDTH_MAJOR, 1);
input_report_abs(data->input_dev, ABS_MT_TRACKING_ID, event->au8_finger_id[i]);
input_report_abs(data->input_dev, ABS_MT_PRESSURE, 100);
if (event->au8_touch_event[i]== 0 || event->au8_touch_event[i] == 2)
{
input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, event->pressure);
}
else
{
input_report_abs(data->input_dev, ABS_MT_TOUCH_MAJOR, 0);
}
}
tp大小 480*800
引用网上的一段说法:
tpd_button_setting()函数根据定义在tpd_custom_XXX.h文件中的配置信息将虚拟按键的坐标信息写在/sys/board_properties /virtualkeys.mtk-tpd中。工作时,tp driver将按下的点的坐标进行上报,Android上层会读取sys中的按键配置信息,再判断上报的坐标是否属于某个按键的坐标范围,以此将坐标信息转化为具体的按键键值。
应该以报点方式传递虚拟按键的坐标值
另外在board-msm7627a-io.c中需要添加一段代码,主要是为了创建这个文件virtualkeys.ft5x06_ts:
static ssize_t
ft5306_virtual_keys_register(struct kobject *kobj,
struct kobj_attribute *attr,
char *buf)
{
return snprintf(buf, 200,
__stringify(EV_KEY) ":" __stringify(KEY_MENU) ":50:830:105:80"
":" __stringify(EV_KEY) ":" __stringify(KEY_HOME) ":195:830:105:80"
":" __stringify(EV_KEY) ":" __stringify(KEY_BACK) ":355:830:105:80"
//":" __stringify(EV_KEY) ":" __stringify(KEY_BACK) ":280:510:80:60"
"\n");
}
static struct kobj_attribute ft5306_virtual_keys_attr = {
.attr = {
.name = "virtualkeys.ft5x06_ts",
.mode = S_IRUGO,
},
.show = &ft5306_virtual_keys_register,
};
static struct attribute *ft5306_virtual_key_properties_attrs[] = {
&ft5306_virtual_keys_attr.attr,
NULL,
};
static struct attribute_group ft5306_virtual_key_properties_attr_group = {
.attrs = ft5306_virtual_key_properties_attrs,
};
struct kobject *ft5306_virtual_key_properties_kobj;
static void __init ft5306_touchpad_setup(void)
{
int rc;
rc = gpio_tlmm_config(GPIO_CFG(48, 0,
GPIO_CFG_INPUT, GPIO_CFG_PULL_UP,
GPIO_CFG_8MA), GPIO_CFG_ENABLE);
if (rc)
pr_err("%s: gpio_tlmm_config for %d failed--erji.liu\n",
__func__, ft5306_ts_data[0].irq);
rc = gpio_tlmm_config(GPIO_CFG(ft5306_ts_data[0].reset, 0,
GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN,
GPIO_CFG_8MA), GPIO_CFG_ENABLE);
if (rc)
pr_err("%s: gpio_tlmm_config for %d failed--jremmliu\n",
__func__, ft5306_ts_data[0].reset);
ft5306_virtual_key_properties_kobj =
kobject_create_and_add("board_properties", NULL);
if (ft5306_virtual_key_properties_kobj)
rc = sysfs_create_group(ft5306_virtual_key_properties_kobj,
&ft5306_virtual_key_properties_attr_group);
if (!ft5306_virtual_key_properties_kobj || rc)
pr_err("%s: failed to create board_properties\n", __func__);
}
/*end */