利用tslib为MiniGui提供触摸屏的IAL引擎(1)---MiniGUI IAL简介

 

利用tslib为MiniGui提供触摸屏的IAL引擎简介:

     GALGraphic Abstract Layer,图形抽象层)和 IALInput Abstract Layer,输入抽象层)是 MiniGUI 的两个基础设施,MiniGUI 的高度可移植性在很大程度上也是由于这两个接口提供了独立于硬件的抽象能力。但是 GAL IAL 并不是生来就存在的,它们也需要通过底层代码来实现,通常把实现这两个接口的底层代码称之为图形引擎输入引擎GAL IAL MiniGUI 的关系,就好比驱动程序与操作系统的关系一样。那么,为什么本文只提 IAL 引擎的实现而不提 GAL 引擎的实现呢?原因是这样的:Linux 系统提供了一种基础设施——FrameBuffer,通过这个设施,Linux 下的图形输出有了统一的接口。FrameBuffer既在桌面系统中存在,也大量的存在于基于 Linux 的嵌入式系统中。由于 MiniGUI 可以通过 FrameBuffer 获得统一的图形引擎接口,因此其适应性大大提高,也就很少需要再为MiniGUI 编写 GAL 驱动层了。但是对于输入而言,由于 Linux 没有提供统一的接口,因此常常为MiniGUI 编写 IAL 驱动层。

MiniGUI IAL 接口定义

首先来看看 MiniGUI 中的 IAL 接口是如何定义的(见 libminigui-1.3.3/src/include/ial.h)

typedef struct tagINPUT
{
     char* id;
     // Initialization and termination
     BOOL (*init_input) (struct tagINPUT *input, const char* mdev, const char* mtype);
     void (*term_input) (void);
     // Mouse operations
     int (*update_mouse) (void);
     void (*get_mouse_xy) (int* x, int* y);
     void (*set_mouse_xy) (int x, int y);
     int (*get_mouse_button) (void);
     void (*set_mouse_range) (int minx, int miny, int maxx, int maxy);
     void (*suspend_mouse) (void);
     int (*resume_mouse) (void);
     // Keyboard operations
     int (*update_keyboard) (void);
     const char* (*get_keyboard_state) (void);
     void (*suspend_keyboard) (void);
     int (*resume_keyboard) (void);
     void (*set_leds) (unsigned int leds);
     // Event
#ifdef _LITE_VERSION
     int (*wait_event) (int which, int maxfd, fd_set *in, fd_set *out, fd_set *except,
                 struct timeval *timeout);
#else
     int (*wait_event) (int which, fd_set *in, fd_set *out, fd_set *except,
                 struct timeval *timeout);
#endif
     char mdev [MAX_PATH + 1];
}INPUT;
MiniGUI
通过一个 INPUT 结构体来表示一个输入引擎。下面简要介绍一下后面将会用到的 INPUT 结构体的各个成员。

       id              
输入引擎的名称;
       init_input      
输入引擎的初始化函数;
       term_input      
输入引擎的终止函数;
       update_mouse    
更新鼠标位置;
       get_mouse_button
获取鼠标按键值;
          wait_event  
等待输入事件到来,可以是键盘,也可以是鼠标。
   
指针 cur_input 是一个全局变量,用来指向 MiniGUI 所用的输入引擎。所有获取键盘消息或者鼠标按键消息的操作都是通过该指针来完成的。另外,在 INPUT 结构体中定义的实际上都是一些函数指针,在 MiniGUI 启动的时候,MiniGUI 将会自动根据配置文件MiniGUI.cfg 中的配置信息来决定应该将哪些函数的入口地址赋给这些指针。也就是说,将函数指针指向具体函数的工作是在 init_input()函数中完成的。
   
由于本章只用到触摸屏输入,而不会用到键盘,因此,只需为鼠标相关的函数指针赋值即可。通常的做法都是在 init_input()中打开鼠标设备(比如/dev/mouse),然后为 INPUT 结构中的某些函数指针赋予相应的函数入口地址。此后,当 MiniGUI 要获取鼠标或者键盘消息时,实际上是通过 INPUT 结构体中的函数指针调用相应的函数。

参考文献:

全文还参考了其他网络上的tslib编译方法,在此就不一一列出。

        此文本应该一次全部列出的(我用word都排好版了),不过限于Baidu空间过于垃圾。老是限制字数,排版也存在问题,只能分成了几个小的片段,希望不要吓到你,虽然写了这么多,其实也没多少。耐心点,慢慢来就ok

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值