雨中徒步八英里 2018-11-18 00:04 采纳率: 0%
浏览 2825
已采纳

linux系统下读取触摸坐标值相反

问题描述:
迅为4412itop精英版10.1寸电容屏。
分辨率是1024*600。
最小linux系统下想通过读取/dev/input/event2事件
获取触摸坐标值,已经顺利的读出值。
1.但是手指在0-1023像素点间移动时,读取到的却是2-597范围。
2.在0-599像素点间移动时,读取到的却是7-1016范围。

内核部分源码如下
下面对input_x和Input_y的赋值应该怎样修改……
#endif
if (pre_touch || touch_num)
{
s32 pos = 0;
u16 touch_index = 0;
u8 report_num = 0;
coor_data = &point_data[3];

    if(touch_num)
    {
        id = coor_data[pos] & 0x0F;

    #if GTP_WITH_PEN
        id = coor_data[pos];  //input_set_abs_params
        if ((id & 0x80))  
        {
            GTP_DEBUG("Pen touch DOWN(Slot)!");
            input_x  = coor_data[pos + 1] | (coor_data[pos + 2] << 8);
            input_y  = coor_data[pos + 3] | (coor_data[pos + 4] << 8);
            input_w  = coor_data[pos + 5] | (coor_data[pos + 6] << 8);

            gtp_pen_down(input_x, input_y, input_w, 0);
            pre_pen = 1;
            pre_touch = 0;
            pen_active = 1;
        }    
    #endif

        touch_index |= (0x01<<id);
    }

    GTP_DEBUG("id = %d,touch_index = 0x%x, pre_touch = 0x%x\n",id, touch_index,pre_touch);
    for (i = 0; i < GTP_MAX_TOUCH; i++)
    {
    #if GTP_WITH_PEN
        if (pre_pen == 1)
        {
            break;
        }
    #endif

        if ((touch_index & (0x01<<i)))
        {
            input_x  = coor_data[pos + 1] | (coor_data[pos + 2] << 8);
            input_y  = coor_data[pos + 3] | (coor_data[pos + 4] << 8);
            input_w  = coor_data[pos + 5] | (coor_data[pos + 6] << 8);

            gtp_touch_down(ts, id, input_x, input_y, input_w);
            pre_touch |= 0x01 << i;

            report_num++;
            if (report_num < touch_num)
            {
                pos += 8;
                id = coor_data[pos] & 0x0F;
                touch_index |= (0x01<<id);
            }
        }
        else
        {
            gtp_touch_up(ts, i);
            pre_touch &= ~(0x01 << i);
        }
    }
}

#else

if (touch_num)
{
    for (i = 0; i < touch_num; i++)
    {
        coor_data = &point_data[i * 8 + 3];

        id = coor_data[0] & 0x0F;
        input_x  = coor_data[1] | (coor_data[2] << 8);
        input_y  = coor_data[3] | (coor_data[4] << 8);
        input_w  = coor_data[5] | (coor_data[6] << 8);

    #if GTP_WITH_PEN
        id = coor_data[0];
        if (id & 0x80)
        {
            GTP_DEBUG("Pen touch DOWN!");
            gtp_pen_down(input_x, input_y, input_w, 0);
            pre_pen = 1;
            pen_active = 1;
            break;
        }
        else
    #endif
        {
            gtp_touch_down(ts, id, input_x, input_y, input_w);
        }
    }
}
else if (pre_touch)
{
#if GTP_WITH_PEN
    if (pre_pen == 1)
    {
        GTP_DEBUG("Pen touch UP!");
        gtp_pen_up(0);
        pre_pen = 0;
        pen_active = 1;
    }
    else
#endif
    {
        GTP_DEBUG("Touch Release!");
        gtp_touch_up(ts, 0);
    }
}

pre_touch = touch_num;

#endif

展开全部

  • 写回答

2条回答 默认 最新

  • 雨中徒步八英里 2019-04-01 09:55
    关注

    自己写了个触摸屏校准程序,解决了.......

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥30 给出MySQL数据库workbench代码
  • ¥15 文本挖掘法衡量保险公司数字化转型
  • ¥15 Direct2D,一个图像如何绘制到不同窗体?
  • ¥15 putimage函数输出了不属于指定路径的图片
  • ¥15 ros2运行代码出现问题
  • ¥15 关于#c++#的问题,请各位专家解答!
  • ¥15 Linux系统虚拟机连不上网络
  • ¥15 Qt控件QCombobox样式设计之后箭头不见了
  • ¥15 8阶光立方求驱动层和应用层代码(原理图已给出)
  • ¥15 如何在不联网的时候使用下面导入的库
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部