首先,驱动程序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里能找到触摸屏的样例代码。
linux触摸屏复位命令是Linuxreset。inuxreset命令和tset是一同个命令,用途是设定终端机的状态。这个命令会自动的从环境变数、命令列或是别的组态档决定目前终端机的型态。是linux触摸屏的复位命令。一些显示和触摸代码(linux on arm 平台)linux on arm 平台的一些显示和触摸功能
一、版本和平台:
代码版本:1.1
平台:linux arm开发板LCD: 800x480(宽x高),32位色深,带电容触摸屏
二、LCD 显示的过程:
定义一个数组 unsigned int virtual_lcd[480][800] 作为虚拟显存
每次显示内容,先将内容画在虚拟显存上(调用draw_xxx函数)
要显示什么就画什么,要显示几个就画几个(两次画在同一位置,新的会覆盖旧的)
全部画完之后,把虚拟显存上的东西显示出来(调用show_lcd_now函数)
三.功能
使用1.1版本可以实现如下功能:
1、 触屏返回坐标
2、划屏返回坐标和划过的距离
3、在LCD上显示文本:
语言:中文,英文
字体:仿宋,楷体,黑体,微软雅黑, 只能显示默认字体,没有粗体,斜体等
字号:支持6个字号:16 ,24, 32 ,40, 48, 56;16号既为16*16个像素点,中文是这样,英文和标点宽度可能减半,使用时请注意
4、 在LCD上显示色块(block)
5、 显示带框线的方框(box)
6、 显示带文本的按钮(button)
7、 显示bmp图(24bit, 底到上型DIB(bottom-up),应该是最常见的24bit bmp格式)
8、 按按钮时按钮反显(按下时显示另一种颜色),并触发事件(调用一个回调函数)
各功能对应的函数:
struct touch_screen_data touch_screen(void)//触屏
struct cross_screen_data cross_screen(void)//划屏
int draw_block(lcd_block * block)//画色块
int draw_box(lcd_box * box)//画方框
int draw_text(lcd_text * text )//画文本
int draw_button(lcd_button * button)//画按钮(只能画矩形按钮)
int draw_bmp(int x,int y,const char *filename)//画bmp图
int show_lcd_now(void)//将画的内容显示出来
int press_button(int num_of_button,...)//按按钮函数,可以配置按下可以配置按下按钮要做的事
四、例程
main.c中是上述函数使用方法的例程,有详述细注释。
源码lcd.c,lcd.h中也有详细注释。
测试效果:
开发板返回信息:
LCD显示效果:
五、注意
1、字库路径
使用显示文本功能,必须要把字库文件放到开发板上,
本demo默认需要将【fontlibrary文件及里面的字库文件】整体放到开发板/目录(根目录)下,
如果要放到别的路径,请到lcd.c文件中找到这句话:sprintf(filename,"/fontlibrary/%c%d.bin",text->type,text->size)去修改字库文件的路径
2、 使用时在你的工程中包含lcd.c,font.c,lcd.h,font.h 这四个文件,并一同编译
3、 本demo使用的测试图片103x100.bmp要和本demo的可执行文件放在同一个目录下
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)