msg2133触摸屏模拟距离传感器问题!
msg2133触摸屏模拟距离传感器问题!
就用距离传感器那个机制
,就打电话的时候,tp判断到多点的时候你往上层传个东西。离开又传个东西就行了
判断接近和离开的已经在触摸屏里面做好了,在底层能判断,但是在应用层还不知道怎么去弄,要往上层传什么参数呢?
那怎么判断是用户自己的操作还是其它操作? 如何作距离传感器?
是在拨通电话的时候,在应用层发送一个指令打开tp距离感觉,tp会判断接近还是离开,再传值个驱动,现在直接在开机的时候打开,驱动里面也能判断,现在的问题是在应用层到驱动怎么现实调用问题!
之前没有搞过,小编提出来时临时去看了一下,我不太确定怎么弄,不如大家讨论一下。
我感觉这个方向应该是这样的:
hwmsen_dev.c这个文件里hwmsen_probe()函数hwm_obj->idev = input_allocate_device();注册了输入设备。
而mtk_tpd.c这个文件里 tpd_probe()这个函数里也有if((tpd->dev=input_allocate_device())==NULL) 这样的操作。
在linux里所有的输入设备其实应该是共用一套体系:在input.h头文件里定义了这一套系统所用到的参数,比如ABS_***这样的宏,不正是在TP里面用到的么,那么光感也要用到这些宏,那我们在TP的驱动里判断完状态之后,使用这些宏向上报告一下事件是不是就OK了呢?
比如TP的驱动里有这样的函数 static int tpd_up(int x, int y,int p) {
input_report_abs(tpd->dev, ABS_PRESSURE, 0);
input_report_key(tpd->dev, BTN_TOUCH, 0);
input_report_abs(tpd->dev, ABS_MT_TOUCH_MAJOR, 0);
input_report_abs(tpd->dev, ABS_MT_POSITION_X, x);
input_report_abs(tpd->dev, ABS_MT_POSITION_Y, y);
//printk("U[%4d %4d %4d] ", x, y, 0);
input_mt_sync(tpd->dev);
TPD_UP_DEBUG_TRACK(x,y);
return 1;
}
那我把这里面的宏换成光感相关的宏,是不是就可以了呢?现在,工作是不是就剩下光感相关的宏及意义了呢?
以上是我的思路。
大家讨论一下么
怎么没人讨论呢?
hwmsen_dev.c这个文件里面,hwmsen_work_func()这个函数,如下这段:
if((event_type&(1 << ID_PROXIMITY))&& SENSOR_INVALID_VALUE == obj_data.sensors_data[ID_PROXIMITY].values[0])
{
event_type &= ~(1 << ID_PROXIMITY);
HWM_LOG("remove ps event!\n");
}
if(event_type != 0)
{
input_report_rel(obj->idev, EVENT_TYPE_SENSOR, event_type);
//HWM_LOG("event type: %d\n", event_type);
}
把这段移植到TP里面去,小编,我觉得快差不多了,你觉得呢?
我还在看勒,但是这个tp接近功能只是在打电话的时候才去模拟的,也就是在拨电话或接电话时 ,在应用层还有给驱动发送一个消息的。
这个需要吗?当没有打电话时在应用层把这个处理屏蔽掉就可以了吧?
需要的,因为在tp开启判断时,tp是不能进入睡眠的,只是把背光关了,所以在挂断电话时,需要关闭tp接近的判断,以便使tp能进入睡眠模式
是不是这里:hwmsen_dev.c-->hwmsen_ioctl(); -->
case HWM_IO_ENABLE_SENSOR:
if(copy_from_user(&flag, argp, sizeof(flag)))
{
HWM_ERR("copy_from_user fail!\n");
return -EFAULT;
}
hwmsen_enable(hwm_obj, flag, 1);
break;
case HWM_IO_DISABLE_SENSOR:
if(copy_from_user(&flag, argp, sizeof(flag)))
{
HWM_ERR("copy_from_user fail!\n");
return -EFAULT;
}
hwmsen_enable(hwm_obj, flag, 0);
break;
将两次hwmsen_enable(hwm_obj, flag, 1);改成TP中此功能控制FLAG的开关
那要是按你这种做法的话,其实就是做sensor那套机制了,应该也可以实现,等下试试,我想是直接在tp驱动里面写两个接口给应用用,在拨打电话的时候,应用里面调用这两个接口函数去获取是否脸是否靠近来关屏,在其他应用就不能用。只要打电话的时候用就可以了,但我不知道该怎么实现这两个接口比较方便,对android整个系统通信不很熟。
你从下到上实现一个借口岂止是两句话的事,你去看看蒋工那篇关于从上到下实现一个驱动的文章,反正我看不懂。中间有HAL、JNI等层,都要实现。并不像以前功能机里面,你直接在MMI调用驱动层的函数都不会死机。
嗯,是比较麻烦,我先看看使用sensor那套机制试试吧,这个博客里面也有讲这么实现从下到上的通信方式,http://blog.csdn.net/luoshengyang/article/details/6567257