利用tslib为MiniGui提供触摸屏的IAL引擎(2)---tslib 的 API 接口介绍

 

tslib API 接口

      作者的想法是通过 tslib 来构建 MiniGUI 的输入引擎。tslib 是一个用于触摸屏设备的函数库。通过这样一个函数库,可以将编程者从繁琐的数据处理中解脱出来。为什么会出现这样的情况呢?因为触摸屏的坐标和液晶显示屏 之间的坐标并不是一一对应的, 所以,要让从触摸屏上得到的坐标正确转换为液晶显示屏上的坐标,需要经过一个转换过程。除此之外,tslib 还以插件的形式提供了一些附加的功能,比如去除点击触摸屏时的抖动等。
     
下面就先来看看 tslib 都提供了哪些接口。首先,tslib 中定义了两个结构体:
struct tsdev {
      int fd;
      struct tslib_module_info *list;
     };
struct ts_sample {
      int       x;
      int       y;
      unsigned int      pressure;
      struct timeval tv;
};
      struct tsdev
表示的是触摸屏设备,其中,fd 是打开的触摸屏设备的文件描述符,list 是一个链表,在这个链表中依次存放着指向 tslib 的插件的指针。
      struct ts_sample
用于存放按键消息,x y 表示按键的坐标位置,注意这两个坐标都是以液晶屏幕的坐标系为基准的,pressure 表示的是按键的轻重程度,tv 是一个 struct timeval类型的变量,表示按键发生的时间。
     
在基于 tslib 的程序中,所要用到的数据结构就只有上面这样两个。下面再看看 tslib 的函数,这里只列举后面将会用到的几个函数:
struct tsdev *ts_open(const char *dev_name, int nonblock);
int ts_config(struct tsdev *);
int ts_close(struct tsdev *);
int ts_fd(struct tsdev *);
int ts_read(struct tsdev *, struct ts_sample *, int);
      ts_open()
函数打开触摸屏设备, 第一个参数 dev_name 是要打开的触摸屏设备的文件名,第二个参数 nonblock 指明以何种方式读写触摸屏设备,如果 nonblock 0,则以非阻塞方式访问,如果 nonblock 0,则以阻塞方式访问。如果 ts_open()打开触摸屏设备成功,则返回一个 struct tsdev 类型的指针,否则返回 NULL
      ts_config()
函数的作用是读取触摸屏配置文件,并决定是否加载相关的插件。在作者所用的平台上,触摸屏配置文件为/etc/ts.conf,其内容如下:
module variance xlimit=50 ylimit=50 pthreshold=1
module dejitter xdelta=10 ydelta=10 pthreshold=1
module linear
     
上述内容表明 tslib 要加载三个插件模块,其作用分别是限定点击力度的方差、去除点击抖动、将触摸屏上的点击坐标转换成液晶屏幕上的坐标。variance 模块会采集四个采样点, 只有当这四个采样点在 x 轴和 y 轴方向上的方差都小于或等于模块参数 xlimit并计算其方差,和 ylimit 限定的范围时,这几个采样点才会被接受,否则 variance 模块将重新采集四个采样点计算。直到有符合要求的采样点才会将其递交给应用程序。dejitter 模块的作用是去抖动,其参数的含义用当前的采样点的坐标与前一个采样点的坐标求差值,    只有当差值小于或者等于 xdelta ydelta 限定的范围时,采样点的坐标值才有效。
     
如果正确加载了插值模块,ts_config()返回 0,否则返回-1
      ts_close()
的作用是释放触摸屏设备以及相关的资源。
      ts_fd()
返回打开的触摸屏设备的文件描述符。
      ts_read()
的作用是从触摸屏设备中读取采样点的坐标。第一个参数指向一个已经打开的触摸屏设备,第二个参数是一个 struct ts_sample 指针,从触摸屏设备读取到的值将填充到该指针指向的空间中,第三个参数指定了要读取多少个采样点。 有两个文件是与 tslib 密切相关的, ts.conf 指出了 MiniGUI、应该加载哪些插件模块。 这两个文件的位置是由当前环境变量指定的,详细请见下文中的有关Tslib的环境变量、配置文件等进行简要的介绍 文章,需要注意的是这里的配置文件的路径必须放置正确,否则程序运行时将会报错。另一个文件是 pointercal,在这个文件中包含了触摸屏的校准数据(calibration   ,正是由于该文件的存在,tslib 才能正确地在触摸屏坐标和液晶屏幕的坐标之间进行转换。在 tslib 的源代码中包含了工具 ts_calibrate,如果没有 pointercal 文件,那么可以用这个工具来产生 pointercal 文件中的校准数据。(首先运行它在目标板上产生pointercal文件);

转载注明出处:http://hi.baidu.com/luv%5Fresplendent/modify/blog/eb8f5d032f64878ed43f7cfe

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值