- 论坛徽章:
- 0
|
屏幕移植好了,中文显示也没问题了,最后一步,输入设备键盘的移植,这个移植没有前面这些这么容易,因为涉及到两层驱动的开发,第一步就是键盘的LINUX驱动的开发,这个是常规的驱动开发和MINIGUI没啥关系,也相对比较容易,能写驱动的基本都知道怎么写的。
第二步是关键,MINIGUI弄了一个抽象层出来叫引擎,可以连接MINIGUI和特定设备之间的纽带。道理很简单就看怎么实现了。 对于怎么加一个新引擎进入MINIGUI呢?其实这种东西很死板,MINIGUI的开发公司都提供一套他们的流程,以后版本的改变都可能发生改变,所以要一个个掌握太花时间了,没必要,还是用自己喜欢的老一套,“借壳上市”,哈哈!SRC的/ial目录下早就有现成的键盘,触摸屏的引擎了,所以套一个,直接修改,哈哈!这样可以省去很多麻烦的事情和出错的机会!我用smdk2410这个引擎来做我的壳!修改里面的代码就可以直接上我的键盘了。
代码参考px255b.c
几个关键函数
static int mouse_update(void)
static void mouse_getxy(int *x, int* y)
static int mouse_getbutton(void)
触摸屏或者鼠标的函数,这三个函数负责取得鼠标的参数,是一些回调函数,同样角色的函数在键盘里也一样出现了
keyboard_update; 根据驱动读得的按键值来更新返回到MINIGUI的键盘数组,同时进行键盘键值的转换。
keyboard_getstate; 返回键盘数组
最关键的函数出来了:
static int wait_event (int which, fd_set *in, fd_set *out, fd_set *except,
struct timeval *timeout)
是一个定时被调用的轮询函数,用它来实现对键盘的扫描,也是从这里得到键盘的键值,这样keyboard_update 和keyboard_getstate才能把键盘的值送给MINIGUI,MINIGUI再把这些值转成消息,这个函数的返回值IAL_KEYEVENT 表示有键盘输入事件发生,如果没读到键值就不要返回这个值了,不然会引起MINIGUI去调用keyboard_update,keyboard_getstate这两个函数。
BOOL Init2410Input (INPUT* input, const char* mdev, const char* mtype)
void Term2410Input (void)
打开和关闭键盘驱动的函数,还有input的初始化这个就比较简单了,看一下应该就明白了。
BOOL Init2410Input (INPUT* input, const char* mdev, const char* mtype)
{
kb_fd = open ("/dev/miniport", O_RDONLY);
if (kb_fd
fprintf (stderr, "SMDK2410: Can not open key board!\n");
return FALSE;
}
input->update_mouse = mouse_update;
input->get_mouse_xy = mouse_getxy;
input->set_mouse_xy = NULL;
input->get_mouse_button = mouse_getbutton;
input->set_mouse_range = NULL;
input->update_keyboard = keyboard_update;
input->get_keyboard_state = keyboard_getstate;
input->set_leds = NULL;
input->wait_event = wait_event;
return TRUE;
}
void Term2410Input (void)
{
if (kb_fd >= 0)
close(kb_fd);
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/72877/showart_1354348.html |
|