zoukankan      html  css  js  c++  java
  • tslib 入门学习

     
     
    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 
    用于存放按键消息, 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文件)
  • 相关阅读:
    pymysql
    表查询
    元类
    外键约束
    Mysql知识
    C# windows服务的创建与调试
    JQuery随笔
    jQuery插件开发
    http post和put区别
    NPOI
  • 原文地址:https://www.cnblogs.com/onesea/p/15542955.html
Copyright © 2011-2022 走看看