微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 手机设计讨论 > MTK手机平台交流 > msg2133触摸屏模拟距离传感器问题!

msg2133触摸屏模拟距离传感器问题!

时间:10-02 整理:3721RD 点击:
请问有人在mtk上做过用msg2133的触摸屏做距离传感器没,在应用层是怎么调用驱动中的函数的么?用做成IOTcl的接口么?

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top