本文主要是介绍touch的双击唤醒如何实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
现在很多手机具有双击唤醒屏幕功能,那么这个功能是如何实现的呢,在ft5x06这款touchscreen上的实现方式如下
首先在touch的driver里会针对屏幕关闭时做特殊处理
在static irqreturn_t ftxxxx_ts_interrupt(int irq, void *dev_id)
{
u8 state;
i2c_smbus_read_i2c_block_data(ftxxxx_ts->client, 0xd0, 1, &state);
if (state == 1) {
fts_read_Gestruedata(ftxxxx_ts);
/*continue;*/
}
return IRQ_HANDLED;
}
首先从d0这个register中读取state,这个d0代表gesture mode,1是enable,0是disable
所以读取ftxxxx_ts上报的数据
接下来看static int fts_read_Gestruedata(struct ftxxxx_ts_data *data)
{
unsigned char buf[FTS_GESTRUE_POINTS * 3] = { 0 };
ret = ftxxxx_i2c_Read(data->client, buf, 1, buf, FTS_GESTRUE_POINTS_HEADER);
gestrue_id = buf[0];
check_gesture(data, gestrue_id);
}
然后看static void check_gesture(struct ftxxxx_ts_data *data, int gesture_id)
{
bool Ps_status = false;
if (!Ps_status) {
switch (gesture_id) {
/* ++++ touch gesture mode support part in ZE500CL ++++ */
case GESTURE_DOUBLECLICK:
if(dclick_flags==true)
{
input_report_key(data->input_dev, KEY_GESTURE_U, 1);
input_sync(data->input_dev);
input_report_key(data->input_dev, KEY_GESTURE_U, 0);
input_sync(data->input_dev);
printk(KERN_EMERG "[Focal][Touch] double click\n");
dclick_flags=false;
}
break;
}
#define KEY_GESTURE_U KEY_POWER
所以总的来说就是模拟KEY_POWER的动作唤醒了屏幕
这篇关于touch的双击唤醒如何实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!