既然买了开发板,肯定有带的教程、例程什么的,多看看就了解了,嵌入式的学习注重积累,不可能一蹴而就,所以不要心急,多看书,多看教程
首先,驱动程序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里能找到触摸屏的样例代码。
我的理解,系统启动的时候,会加载各项外设,逻辑是,如果你没有键盘,初始化就不成功,触摸屏的驱动没有启动
有键盘,初始化成功,触摸屏驱动加载成功,拔下键盘也可以使用
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)