触摸屏上报触摸坐标错误的原因分析

触摸屏的坐标分布:

常规情况下 产品正常摆放视角下,TP左上角为原点位,如果不确定需要拿到工程结构图纸,按照图纸标注设定。

特殊情况下:

有些产品的显示屏因为显示驱动的影响,产品正常摆放时LCM的原点位不在左上角,这个需要和方案确认。

以上两种情况注意即可,无论如何,TP的原点位要和LCM的原点位重合。

在此项目中,工程图纸如下

LCM的原点位在左下角,因此需要将TP的原点位调整到左下角。同时XY需要互换,也就是XY Swap开启(默认会将长边作为X轴)。

TW3106 TW3118 需要添加如下两个参数

TP VA区长宽Len X/Len Y,LCM分辨率 ResX/ResY,这两个参数可以在工程结构图纸中获取,需要与方案确认。

LCM分辨率设置之后,就限制了该TP的最大触摸报点坐标(X_Resolution,Y_Resolution),

IC 将触摸产生的坐标数据上传到系统驱动中进行处理。

驱动文件中有几个关于调整触摸屏方向的宏定义,一般默认不开启。

此项目中在触摸时,系统层在LCM上绘制的坐标点,超出了最大坐标值。也就是触摸上报(1920,1200)这个位置的坐标时,在系统开启开发者模式中的触摸指针及显示后顶栏上的坐标,超出了(1920,1200),没有办法放坐标错误的视频,有相关项目经验的人应该知道。

驱动处理的坐标数据也不会超出设定的最大坐标,在/dev/input/event8 可以看到触摸屏输出的原始数据,与设备驱动层无关。

建议方案排查事件处理层

输入子系统常见事件类型为:按键事件(如键盘)、相对坐标事件(如鼠标)、绝对坐标事件(如触摸屏)。

上报数据到事件处理层

//上报按键事件键值,如键盘

inline void input_report_key(struct input_dev *dev, unsigned int code, int value);

//上报相对事件坐标值,如鼠标

inline void input_report_rel(struct input_dev *dev, unsigned int code, int value);

//上报绝对事件坐标值,如触摸屏

inline void input_report_abs(struct input_dev *dev, unsigned int code, int value);

形参:dev --input_dev结构体

    code --事件数据值,若按键事件,则保证按键键值;若坐标信息,则表明为x,y

    value --标志值,若按键,则表示按下还是松开;若坐标,则表示位具体的坐标值

这几个函数完成数据上报内部靠input_event函数实现。

触摸屏上报的是绝对事件坐标值,

设置上报的值的范围input_set_abs_params
-----input_set_abs_params函数用于设置上报的数值的取值范围。

void input_set_abs_params(struct input_dev *dev, unsigned int axis, int min, int max, int fuzz, int flat)

形参: dev --input_dev结构体

   axis --上报的数值

   min --最小值

   max --最大值

    fuzz --数据偏差值

    flat --平滑位置

设置触摸屏x坐标范围:

 input_set_abs_params(touch_dev,ABS_X,0,2880,0,0);//设置x坐标范围

设置触摸屏x坐标范围:

 input_set_abs_params(touch_dev,ABS_PRESSURE,0,1,0,0);//设置压力值范围

最后检查到这里才发现是代码迁移过程中没有按照项目修正,导致显示层显示触摸指针坐标异常。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值