板子:s3c2440,
内核:linux-3.0.54,
交叉编译器:buildroot-2012.08,
屏幕尺寸:4.3
前面我们进行了LCD驱动移植,现在我们来移植触摸屏
触摸屏离不开AD转换,由我们产生的x,y方向的模拟信号进入到AD转换器,然后再出发相应的中断进行处理,在中断处理程序中上报数据。过多的原理这里不赘述,直接进入移植:
首先还是得修改文件:
添加头文件:
添加ADC和TS:
添加上面对应的结构体信息:
接下来修改下一个文件:
vim drivers/input/touchscreen/s3c2410_ts.c
这个的内核配置一般都配置好了,因此现在可以直接编译。并将编译以后的内核烧进开发板。
内核打印:
还有我们的event0设备文件:
我们的触摸屏已经移植成功,现在我们也可以写一个小程序测试测试:
#include <stdio.h>
#include <linux/input.h>
static int event0_fd = -1;
struct input_event ev0[64];
static int handle_event0()
{
int button = 0, realx=0, realy=0, i, rd;
rd = read(event0_fd, ev0, sizeof(struct input_event)* 64);
if(rd < sizeof(struct input_event)) return 0;
for(i=0;i<rd/sizeof(struct input_event); i++)
{
if(EV_ABS == ev0[i].type)
{
if(ev0[i].code == 0) {
realx = ev0[i].value;
} else if(ev0[i].code == 1) {
realy = ev0[i].value;
}
}
printf("event(%d):type:%d; code:%3d; value:%3d; realx:%3d; realy:%3d\n",i,ev0[i].type,ev0[i].
code,ev0[i].value,realx,realy);
}
return 1;
}
int main(void)
{
int done = 1;
event0_fd = open("/dev/event0",02);
if(event0_fd <0) {
printf("open input device error\n");
return -1;
}
while (done)
{
printf("begin handle_event0...\n");
done = handle_event0();
printf("end handle_event0...\n");
}
if(event0_fd > 0)
{
close(event0_fd);
event0_fd = -1;
}
return 0;
}
经交叉编译器编译以后烧进开发板,执行后触摸屏幕,看屏幕现象。