Android TP方向调试

一、问题描述

        拿到一款新TP,适配好驱动后,触摸屏幕发现触摸点位置和Android报点位置不一致,如上滑变成下滑或者左滑右滑等

二、问题分析

1.加载TP驱动,且驱动能正确上报数据

2.使用命令打开触摸报点

settings put system show_touches 1
settings put system pointer_location 1

3.触摸屏幕 

        出现这种问题可能是由于TP IC里的配置,或者TP贴片方向和屏幕方向不一致等情况导致的,这种情况下,我们需要对TP做一个方向的适配

三、解决办法

1.dts配置

dts中的方向配置如下:

ctp {
        compatible = "allwinner,goodix";
        reg = <0x5d>;
        device_type = "ctp";
        ctp_screen_max_x = <0x4B0>;
        ctp_screen_max_y = <0x780>;
        ctp_revert_x_flag = <0x1>;
        ctp_revert_y_flag = <0x1>;
        ctp_exchange_x_y_flag = <0x0>;
};

其中

  • ctp_screen_max_x:TP上报最大X值
  • ctp_screen_max_y:TP上报最大Y值
  • ctp_revert_x_flag:是否需要翻转x,使x=-x
  • ctp_revert_y_flag:是否需要翻转y,使y=-y
  • ctp_exchange_x_y_flag:是否需要交换xy,主要这个会同步的交换max_x和max_y

2.在代码中获取配置并做逻辑操作

1.获取dts配置的参考方法

ret = of_property_read_u32(np, "ctp_screen_max_x", &data->screen_max_x);
ret = of_property_read_u32(np, "ctp_screen_max_y", &data->screen_max_y);
ret = of_property_read_u32(np, "ctp_revert_x_flag", &data->revert_x_flag);
ret = of_property_read_u32(np, "ctp_revert_y_flag", &data->revert_y_flag);
ret = of_property_read_u32(np, "ctp_exchange_x_y_flag", &data->exchange_x_y_flag);

其中,of_property_read_u32是内核标准函数,np是设备节点,data是存放dts数据的结构体

2.使用配置
(1)使用变量保存配置,congfig_info为刚才获取的dts配置信息

static int screen_max_x;
static int screen_max_y;
static int revert_x_flag;
static int revert_y_flag;
static int exchange_x_y_flag;

screen_max_x = config_info.screen_max_x;
screen_max_y = config_info.screen_max_y;
revert_x_flag = config_info.revert_x_flag;
revert_y_flag = config_info.revert_y_flag;
exchange_x_y_flag = config_info.exchange_x_y_flag;

if(exchange_x_y_flag == 1)
        swap(screen_max_x, screen_max_y);

(2)使用配置
在上报xy报点的位置前,参考使用如下命令

if (exchange_x_y_flag == 1)
        swap(x, y);

if (revert_x_flag == 1)
        x = screen_max_x - x;

if (revert_y_flag == 1)
        y = screen_max_y - y;
		

3.进行方向适配

1、进行方向适配前,首先要明确xy分别对应哪条边,通常而言,x为屏幕0度角方向的边,通过该命令获取0度角方向。
旋转屏幕,同时输入如下命令,当获取到mCurrentOrientation=0时,则说明该方向对应的底边为x,另一边为y

dumpsys display | grep mCurrentOrientation

2、以800x1280的屏幕为例,先设置max_x和max_y都为1280;并将revert_x,revert_y和exchange_xy设置为0

3、观察屏幕触摸方向,对TP进行左右滑动,和上下滑动,看是否跟手滑动的方向一致

适配步骤:

(1)如左滑变成了上下滑,那说明需要交换xy,设置exchange_xy为1,继续观察
(2)如左滑变成了右滑,则说明可能需要revert_x,设置revert_x为1,继续观察
(3)如上滑变成了下滑,则说明可能需要revert_y,设置revert_y为1,继续观察
(4)部分情况下,23可能需要互换,即左滑变右滑需要设置revert_y,这种灵活变通即可
(5)通过1-4步骤后,可得到对应的xy配置,此时触摸滑动时,应该跟手滑动的方向一致,再来调试max_x和max_y
(6)尝试设置max_x=1280和max_y=800,观察,如果不行,则交换一下xy的值,此时一般来说,触摸基本就可以调试完成了

总结:先调试exchange_xy,再调试revert值,最后再来调试max值。

你可能感兴趣的:(Android,android)