Chinaunix首页 | 论坛 | 博客
  • 博客访问: 271376
  • 博文数量: 46
  • 博客积分: 4125
  • 博客等级: 上校
  • 技术积分: 575
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-25 16:40
文章分类

全部博文(46)

文章存档

2011年(1)

2010年(4)

2009年(38)

2008年(3)

我的朋友

分类: LINUX

2009-08-03 00:39:33

一直要用TSLIB进行校准~ 但是加载TSLIB这么麻烦~

突然想到何不写一个TSLIB的模块呢?~

经过数天的努力~ 终于将TSLIB用EVENT模块进行了改造~

成果在下面这个包中
 
文件: ztslib.rar
大小: 414KB
下载: 下载


里面有3个部分~


1:
ztslib.c是模块文件~  添加到内核的/driver/input目录下后,在该目录下的Makefile中增加一条 obj-$(CONFIG_INPUT_EVDEV)  += ztslib.o
这样选中evdev模块后就同时加载了TSLIB模块  也可以自己在Kconfig中写一个条目来控制

TSLIB模块所使用的字符设备为ztslib%d 在/dev下 , 现在还不清楚为什么不跟随event在/dev/input目录下
TSLIB模块所返回的结构如下
struct ztslib_event {
      int x;
      int y;
      unsigned int pressure;
};
模块最大支持10个设备  可以并发读取~  
模块的线性校准参数默认为我的触摸屏的校准参数~  需要使用write来写入~  
如果大家知道自己触摸屏的校准参数 , 可以直接更改tslib_linear结构中的值 , 就不用再写入参数了~
写入格式为"参数1 参数2 参数3 参数4 参数5 参数6 参数7 " 每个参数后均需要一个空格  例如 "1 -2 3 4 -5 6 -7 "

编译后不能动态选择校准模块,只能在编译前通过宏来选择

在文件头部有下面3个宏,注释宏则不会编译对应的模块

#define PTHRES
#define VARIANCE
#define DEJTTER

LINEAR模块是默认加载的~   
现在VARIANCE模块还没调试成功~ 所以用#if 0注释掉了~

2:
write_ztslib.c 是我写的一个应用程序,用于自动加载/etc/pointercal中的参数~
arm-linux-gcc -o test -c write_ztslib.c 编译即可
值得注意的是其中的printf语句不能注释掉,注释之后wtire操作会在合并两个字符串之前进行
从而导致最后一个参数写入失败 变成0  现在还不清楚为什么........

3:
tslib目录是我稍微改写了一下的源代码~ 由于之前一直编译不出SO动态库~ 一怒就改成了静态链接的 = 3=
直接make就行~  使用arm-linux-gcc编译器~
make完成之后有3个可执行文件~
ts_calibrate和ts_test和以前的一样

ztslib_test是用于测试TSLIB模块的~  基本和ts_test差不多 不过并没有使用任何的校准模块~  默认以/dev/ztslib0为设备

PS: 之前是想做成动态模块进行加载的~ 但是发现很多函数没有export出来~  所以只能静态编译进内核
PS2:/etc/pointercal 校准参数依然要使用ts_calibrate进行生成

= 3= 务必请大家提出修改意见~   让该模块做得更好~
阅读(1246) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

klutercoco2009-08-11 12:21:10

这个是个好东西,我下午研究一下。