野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20515|回复: 2

[其它] goodix-ts 0-005d: Invalid touch state: 0x82

[复制链接]
发表于 2020-3-2 09:59:38 | 显示全部楼层 |阅读模式
请问各位大神,这是啥意思?怎么解决?


20200302095810.jpg
回复

使用道具 举报

发表于 2021-2-10 21:09:08 | 显示全部楼层
请问题目解决了吗?求教
回复 支持 反对

使用道具 举报

发表于 2021-2-12 11:48:07 | 显示全部楼层
像是汇顶固件配置最大触摸点个数(max_touch_num)为1,但多指触摸的时候上报的触摸点个数按照实际个数来,看gtp_get_points函数。

u8 gtp_get_points(struct goodix_ts_data *ts, struct goodix_point_t *points,
          u8 *key_value)
{
    int ret;
    int i;
    u8 *coor_data = NULL;
    u8 finger_state = 0;
    u8 touch_num = 0;
    u8 end_cmd[3] = { GTP_READ_COOR_ADDR >> 8,
              GTP_READ_COOR_ADDR & 0xFF, 0 };
    u8 point_data[2 + 1 + 8 * GTP_MAX_TOUCH_ID + 1] = {
            GTP_READ_COOR_ADDR >> 8, GTP_READ_COOR_ADDR & 0xFF };

    ret = gtp_i2c_read(ts->client, point_data, 12);
    if (ret < 0) {
        dev_err(&ts->client->dev,
            "I2C transfer error. errno:%d\n ", ret);
        return 0;
    }

    finger_state = point_data[GTP_ADDR_LENGTH];
    if (finger_state == 0x00)
        return 0;

    touch_num = finger_state & 0x0f;
    if ((finger_state & MASK_BIT_8) == 0 ||
        touch_num > ts->pdata->max_touch_id) {
        dev_err(&ts->client->dev,
            "Invalid touch state: 0x%x", finger_state);
        finger_state = 0;
        goto exit_get_point;
    }
。。。

}







static void goodix_read_config(struct goodix_ts_data *ts)
{
    u8 config[GOODIX_CONFIG_MAX_LENGTH];
    int error;

    error = goodix_i2c_read(ts->client, GOODIX_REG_CONFIG_DATA,
                  config,
               GOODIX_CONFIG_MAX_LENGTH);
    if (error) {
        dev_warn(&ts->client->dev,
             "Error reading config (%d), using defaults\n",
             error);
        ts->abs_x_max = GOODIX_MAX_WIDTH;
        ts->abs_y_max = GOODIX_MAX_HEIGHT;
        ts->int_trigger_type = GOODIX_INT_TRIGGER;
        ts->max_touch_num = GOODIX_MAX_CONTACTS;
        return;
    }

    ts->abs_x_max = get_unaligned_le16(&config[RESOLUTION_LOC]);
    ts->abs_y_max = get_unaligned_le16(&config[RESOLUTION_LOC + 2]);
    ts->int_trigger_type = config[TRIGGER_LOC] & 0x03;
    ts->max_touch_num = config[MAX_CONTACTS_LOC] & 0x0f;
    if (!ts->abs_x_max || !ts->abs_y_max || !ts->max_touch_num) {
        dev_err(&ts->client->dev,
            "Invalid config, using defaults\n");
        ts->abs_x_max = GOODIX_MAX_WIDTH;
        ts->abs_y_max = GOODIX_MAX_HEIGHT;
        ts->max_touch_num = GOODIX_MAX_CONTACTS;
    }
}




回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-21 23:56 , Processed in 0.042917 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表