2

我正在尝试使用带有 X (1.14.7) 的 EETI EXC7200 触摸屏。识别触摸屏并处理事件。TS 发送绝对坐标并使用 evdev 驱动程序(绝对模式)。但是,当我移动到屏幕边缘(并且 X 或 Y 达到 0)时,指针会捕捉到窗口的中心。之后任何运动都有一个偏移量(取决于实际位置和角点之间的差异)。

为了测试这一点,我使用 XQueryPointer 的坐标在屏幕上绘制指针。

这是 evtest 的输出:

    ~# evtest /dev/input/event0
    输入驱动版本为1.0.1
    输入设备 ID:总线 0x18 供应商 0x0 产品 0x0 版本 0x0
    输入设备名称:“EETI EXC7200触摸屏”
    支持的事件:
      事件类型 0 (EV_SYN)
      事件类型 1 (EV_KEY)
        事件代码 330 (BTN_TOUCH)
      事件类型 3 (EV_ABS)
        事件代码 0 (ABS_X)
          价值 1928
          最小 0
          最大 2047
        事件代码 1 (ABS_Y)
          价值 1825
          最小 0
          最大 2047
        事件代码 47 (ABS_MT_SLOT)
          值 0
          最小 0
          最大 1
        事件代码 53 (ABS_MT_POSITION_X)
          值 0
          最小 0
          最大 2047
        事件代码 54 (ABS_MT_POSITION_Y)
          值 0
          最小 0
          最大 2047
        事件代码 57 (ABS_MT_TRACKING_ID)
          值 0
          最小 0
          最大 65535
    特性:
    测试...(中断退出)
    事件:时间 6435.172526,类型 3 (EV_ABS),代码 57 (ABS_MT_TRACKING_ID),值 39
    事件:时间 6435.172535,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 75
    事件:时间 6435.172537,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 775
    事件:时间6435.172542,类型1(EV_KEY),代码330(BTN_TOUCH),值1
    事件:时间 6435.172546,类型 3 (EV_ABS),代码 0 (ABS_X),值 75
    事件:时间 6435.172548,类型 3 (EV_ABS),代码 1 (ABS_Y),值 775
    事件:时间 6435.172550, -------------- EV_SYN ------------
    事件:时间 6435.236468,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 77
    事件:时间 6435.236472,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 776
    事件:时间 6435.236477,类型 3 (EV_ABS),代码 0 (ABS_X),值 77
    事件:时间 6435.236479,类型 3 (EV_ABS),代码 1 (ABS_Y),值 776
    事件:时间 6435.236481, -------------- EV_SYN ------------
    事件:时间 6435.290502,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 79
    事件:时间 6435.290510,类型 3 (EV_ABS),代码 0 (ABS_X),值 79
    事件:时间 6435.290513, -------------- EV_SYN ------------
    事件:时间 6435.354553,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 778
    事件:时间 6435.354571,类型 3 (EV_ABS),代码 1 (ABS_Y),值 778
    事件:时间 6435.354573, -------------- EV_SYN ------------
    事件:时间 6435.376630,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 78
    事件:时间 6435.376637,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 781
    事件:时间 6435.376644,类型 3 (EV_ABS),代码 0 (ABS_X),值 78
    事件:时间 6435.376646,类型 3 (EV_ABS),代码 1 (ABS_Y),值 781
    事件:时间 6435.376648, -------------- EV_SYN ------------
    事件:时间 6435.397552,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 76
    事件:时间 6435.397556,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 783
    事件:时间 6435.397561,类型 3 (EV_ABS),代码 0 (ABS_X),值 76
    事件:时间 6435.397563,类型 3 (EV_ABS),代码 1 (ABS_Y),值 783
    事件:时间 6435.397565, -------------- EV_SYN ------------
    事件:时间 6435.408593,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 74
    事件:时间 6435.408599,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 784
    事件:时间 6435.408606,类型 3 (EV_ABS),代码 0 (ABS_X),值 74
    事件:时间 6435.408608,类型 3 (EV_ABS),代码 1 (ABS_Y),值 784
    事件:时间 6435.408610, -------------- EV_SYN ------------
    事件:时间 6435.419598,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 70
    事件:时间 6435.419603,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 785
    事件:时间 6435.419609,类型 3 (EV_ABS),代码 0 (ABS_X),值 70
    事件:时间 6435.419611,类型 3 (EV_ABS),代码 1 (ABS_Y),值 785
    事件:时间 6435.419613, -------------- EV_SYN ------------
    事件:时间 6435.429599,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 64
    事件:时间 6435.429602,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 786
    事件:时间 6435.429608,类型 3 (EV_ABS),代码 0 (ABS_X),值 64
    事件:时间 6435.429610,类型 3 (EV_ABS),代码 1 (ABS_Y),值 786
    事件:时间 6435.429612, -------------- EV_SYN ------------
    事件:时间 6435.440599,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 54
    事件:时间 6435.440604,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 787
    事件:时间 6435.440610,类型 3 (EV_ABS),代码 0 (ABS_X),值 54
    事件:时间 6435.440611,类型 3 (EV_ABS),代码 1 (ABS_Y),值 787
    事件:时间 6435.440613, -------------- EV_SYN ------------
    事件:时间 6435.451595,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 43
    事件:时间 6435.451602,类型 3 (EV_ABS),代码 0 (ABS_X),值 43
    事件:时间 6435.451605, -------------- EV_SYN ------------
    事件:时间 6435.462619,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 32
    事件:时间 6435.462623,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 786
    事件:时间 6435.462629,类型 3 (EV_ABS),代码 0 (ABS_X),值 32
    事件:时间 6435.462631,类型 3 (EV_ABS),代码 1 (ABS_Y),值 786
    事件:时间 6435.462633, -------------- EV_SYN ------------
    事件:时间 6435.472642,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 22
    事件:时间 6435.472648,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 785
    事件:时间 6435.472654,类型 3 (EV_ABS),代码 0 (ABS_X),值 22
    事件:时间 6435.472656,类型 3 (EV_ABS),代码 1 (ABS_Y),值 785
    事件:时间 6435.472658, -------------- EV_SYN ------------
    事件:时间 6435.483646,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 14
    事件:时间 6435.483651,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 783
    事件:时间 6435.483657,类型 3 (EV_ABS),代码 0 (ABS_X),值 14
    事件:时间 6435.483658,类型 3 (EV_ABS),代码 1 (ABS_Y),值 783
    事件:时间 6435.483660, -------------- EV_SYN ------------
    事件:时间 6435.494684,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 8
    事件:时间 6435.494689,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 782
    事件:时间 6435.494697,类型 3 (EV_ABS),代码 0 (ABS_X),值 8
    事件:时间 6435.494699,类型 3 (EV_ABS),代码 1 (ABS_Y),值 782
    事件:时间 6435.494701, -------------- EV_SYN ------------
    事件:时间 6435.504820,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 4
    事件:时间 6435.504829,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 781
    事件:时间 6435.504837,类型 3 (EV_ABS),代码 0 (ABS_X),值 4
    事件:时间 6435.504839,类型 3 (EV_ABS),代码 1 (ABS_Y),值 781
    事件:时间 6435.504841, -------------- EV_SYN ------------
    事件:时间 6435.515636,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 2
    事件:时间 6435.515640,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 780
    事件:时间 6435.515646,类型 3 (EV_ABS),代码 0 (ABS_X),值 2
    事件:时间 6435.515648,类型 3 (EV_ABS),代码 1 (ABS_Y),值 780
    事件:时间 6435.515650, -------------- EV_SYN ------------
    事件:时间 6435.537672,类型 3 (EV_ABS),代码 53 (ABS_MT_POSITION_X),值 0
    事件:时间 6435.537683,类型 3 (EV_ABS),代码 0 (ABS_X),值 0
    事件:时间 6435.537686, -------------- EV_SYN ------------
    事件:时间 6435.600755,类型 3 (EV_ABS),代码 54 (ABS_MT_POSITION_Y),值 777
    事件:时间 6435.600766,类型 3 (EV_ABS),代码 1 (ABS_Y),值 777
    事件:时间 6435.600768, -------------- EV_SYN ------------
    事件:时间 6435.601836,类型 3 (EV_ABS),代码 57 (ABS_MT_TRACKING_ID),值 -1
    事件:时间6435.601844,类型1(EV_KEY),代码330(BTN_TOUCH),值0
    事件:时间 6435.601847, -------------- EV_SYN ------------

并且(同时)通过 xinput 翻译输出:

    ~# xinput 测试 6
    运动 a[0]=75 a[1]=775
    按钮按下 1 a[0]=75 a[1]=775
    运动 a[0]=77 a[1]=776
    运动 a[0]=79 a[1]=776
    运动 a[0]=79 a[1]=778
    运动 a[0]=78 a[1]=781
    运动 a[0]=76 a[1]=783
    运动 a[0]=74 a[1]=784
    运动 a[0]=70 a[1]=785
    运动 a[0]=64 a[1]=786
    运动 a[0]=54 a[1]=787
    运动 a[0]=43 a[1]=787
    运动 a[0]=32 a[1]=786
    运动 a[0]=22 a[1]=785
    运动 a[0]=14 a[1]=783
    运动 a[0]=1024 a[1]=1024
    运动 a[0]=8 a[1]=782
    运动 a[0]=1024 a[1]=1024
    运动 a[0]=4 a[1]=781
    运动 a[0]=1024 a[1]=1024
    运动 a[0]=2 a[1]=780
    运动 a[0]=1024 a[1]=1024
    运动 a[0]=0 a[1]=780
    运动 a[0]=1024 a[1]=1024
    运动 a[0]=0 a[1]=777
    按钮释放 1 a[0]=0 a[1]=777
    运动 a[0]=1024 a[1]=1024

xinput 正在输出位于中心的额外运动事件。但只有当我靠近触摸屏边缘时。

我究竟做错了什么?我应该看什么?感谢您的任何帮助或提示。

4

1 回答 1

0

原因在同时使用的 SDL 1.2.15 中。默认情况下,它对鼠标/触摸事件使用相对模式,并且显然会发送自己的 X11 鼠标事件以进行更正(“参见动作 a[0]=1024 a[1]=1024”)。

设置环境变量SDL_MOUSE_RELATIVE=0 可修复此行为。

于 2015-09-25T12:07:28.833 回答