如何解决触摸屏绝对轴范围
我需要获得触摸屏的绝对MAX轴值。我查看 xinput_calibrator 源,并执行以下功能:
void Xget_absoluteMax (XDeviceInfoPtr devInfo,int * absMAX)
{
XAnyClassPtr any = (XAnyClassPtr) (devInfo->inputclassinfo);
for (int j=0; j<devInfo->num_classes; j++)
{
if (any->class == ValuatorClass)
{
XValuatorInfoPtr V = (XValuatorInfoPtr) any;
XAxisInfoPtr ax = (XAxisInfoPtr) V->axes;
if (V->mode != Absolute) {
printf("DEBUG: Skipping device '%s' id=%i,does not report Absolute events.\n",devInfo->name,(int)devInfo->id);
} else if (V->num_axes < 2 ||
(ax[0].min_value == -1 && ax[0].max_value == -1) ||
(ax[1].min_value == -1 && ax[1].max_value == -1)) {
printf("DEBUG: Skipping device '%s' id=%i,does not have two calibratable axes.\n",(int)devInfo->id);
} else {
absMAX[ABS_MAX_X] = ax[0].max_value;
absMAX[ABS_MAX_Y] = ax[1].max_value;
printf("DEBUG: Setup ABS_MAX X Y: %d %d\r\n",ax[0].max_value,ax[1].max_value);
}
}
/*
* Increment 'any' to point to the next item in the linked
* list. The length is in bytes,so 'any' must be cast to
* a character pointer before being incremented.
*/
any = (XAnyClassPtr) ((char *) any + any->length);
}
}
它可以在Ubuntu 16上很好地工作,给我2047x2047,这是真实值
但是在Ubuntu 20中,它给了我一些假值65535x65535
所以,我开始挖掘并发现一些东西...
在Ubuntu 20上, evtest 给我真正的价值
evtest /dev/input/event8
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0xeef product 0x1 version 0x100
Input device name: "eGalax Inc."
Supported events:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 330 (BTN_TOUCH)
Event type 3 (EV_ABS)
Event code 0 (ABS_X)
Value 0
Min 0
Max 2047
Event code 1 (ABS_Y)
Value 0
Min 0
Max 2047
Properties:
Testing ... (interrupt to exit)
然后我发现错误的价值观存在何处...
xinput list --long 9
eGalax Inc. id=9 [slave pointer (2)]
Reporting 6 classes:
Class originated from: 9. Type: XIButtonClass
Buttons supported: 7
Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right"
Button state:
Class originated from: 9. Type: XIValuatorClass
Detail for Valuator 0:
Label: Abs MT Position X
Range: 0.000000 - 65535.000000
Resolution: 0 units/m
Mode: absolute
Current value: 0.000000
Class originated from: 9. Type: XIValuatorClass
Detail for Valuator 1:
Label: Abs MT Position Y
Range: 0.000000 - 65535.000000
Resolution: 0 units/m
Mode: absolute
Current value: 0.000000
Class originated from: 9. Type: XIValuatorClass
Detail for Valuator 2:
Label: Rel Horiz Scroll
Range: -1.000000 - -1.000000
Resolution: 0 units/m
Mode: relative
Class originated from: 9. Type: XIValuatorClass
Detail for Valuator 3:
Label: Rel Vert Scroll
Range: -1.000000 - -1.000000
Resolution: 0 units/m
Mode: relative
Class originated from: 9. Type: XITouchClass
Touch mode: direct
Max number of touches: 1
那么如何使用 Xorg 东西获得真实的范围值?
P.S。我已经有了计划B。使用 evtest 代码...但是它需要在/ dev / input / event *设备上打开和ioctl,这意味着我需要root权限。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。