如何在ARM Linux下使用多点触摸屏

如何在ARM Linux下使用多点触摸屏,第1张

我在3.2内核下做的,配合Xorg 1.2.4,Xinput2,Qt5.2.1。

首先,驱动程序probe的时候要声明成多点触摸的:

input_set_abs_params(input, ABS_X, 0, pdata->x_res - 1, 0, 0)

input_set_abs_params(input, ABS_Y, 0, pdata->y_res - 1, 0, 0)

input_set_abs_params(input, ABS_MT_POSITION_X,

0, pdata->x_res - 1, 0, 0)

input_set_abs_params(input, ABS_MT_POSITION_Y,

0, pdata->y_res - 1, 0, 0)

error = input_mt_init_slots(input, MAX_SUPPORT_POINTS)

pdata是board-[mach].c里面定义的platform data,如果是3.8以上的内核,你可以用device tree。

其次,提交触摸数据的时候,要提交成多点的:

for (i = 0i <MAX_SUPPORT_POINTSi++)

{

type = posdata.touch[i].xh >>6

if (type == TOUCH_EVENT_RESERVED)

continue

x = ((posdata.touch[i].xh <<8) | (posdata.touch[i].xl)) &0x0fff

y = ((posdata.touch[i].yh <<8) | (posdata.touch[i].yl)) &0x0fff

id = (posdata.touch[i].yh >>4) &0x0f

down = (type != TOUCH_EVENT_UP)

input_mt_slot(tsdata->input, id)

input_mt_report_slot_state(tsdata->input, MT_TOOL_FINGER, down)

if (!down)

continue

input_report_abs(tsdata->input, ABS_MT_POSITION_X, x)

input_report_abs(tsdata->input, ABS_MT_POSITION_Y, y)

}

input_mt_report_pointer_emulation(tsdata->input, true)

input_sync(tsdata->input)

然后,Buildroot做根文件系统的时候要选上Target packages >Libraries >Hardware handling >mtdev和Target packages >Graphic libraries and applications (graphic/text) >X.org X Window System >X11R7 Drivers >xf86-input-evdev,网上有很多文章说如何让X支持多点触摸的,那都是过去式了,现在的X和xf86-input-evdev都支持多点触摸。

最后,编译Qt开发包的时候要加上-xinput2选项,在qtbase/examples/touch里能找到触摸屏的样例代码。

你只有一个显卡,那么你就只能使用 扩展模式和克隆模式

这下面是显示了需要改动的地方,你仔细看看。

桌面扩展是用“Xinerama”扩展来实现的,这个扩展不需要单独安装,是xorg自带的一个模块

在xorg.conf的man里面,没有提到Clone模式,但是,你以把第二个显示器的像素值和第一个显示器的像素值设置得一样,这样就可以达到Clone的效果。 

查询命令 看看《Linux就该这么学》 里面有个专栏是 Linux命令大全(手册

可能是linux中仅仅对触摸屏进行使用而没有对触摸屏进行初始化,当你用了对触摸屏初始化过的uboot时你的linux就能够识别触摸屏,当你用的uboot没有对触摸屏初始化你的linux就不能够识别触摸屏。这个和串口类似,linux仅仅负责用,uboot负责初始化的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7231662.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存