您的位置:首页 > 其它

嵌入式系统多功能按键底层驱动设计

2012-05-15 16:44 519 查看
一.Linux原有驱动分析:
1、 Linux 现有按键驱动运行机制:



图1 linux按键驱动运行机制图

2、 Repeat 函数工作机制:



图2 按键repeat工作机制图

3、 说明:
这种驱动检测了按键的整个过程,包括按键的按下、抬起。但是没有实现比这更多的功能,比如单击键、双击键、延时键等。其实这类键完全可以由linux 现有驱动的这种按键事件(按下、抬起)组合而成,鼠标的双击就是这样实现的,而这部工作一般不在驱动层来做,这就好比AD转换一样,驱动只完成AD转换,而这个转换来的数据到底是什么电压值,准确不准确,那是上层的事了。

二、新按键驱动设计与分析:
1、设计思路:
主要采用了一键多码的设计思路,也就是说,物理按键只有一个,但是向上层提交code的时候,会根据按键效果提交不同的键码。

2、具体实现方案如下:



图3 新按键驱动方案图
整个过程需要一个timer 和 一个超时检测work队列,主要用于区分单击和双击、检测增量键。
这个timer一定会在 1 处打开,并设置为检测增量键的时间(4.5s),也一定会在2 处关闭。

3、 工作流程:

在1处,打开timer ,设置4.5s .
If(timer=open && time >= 4.5s)
{
上报 增量键按下
}
在2处,关闭timer ,开启超时work(200ms)。
If(X>t2 – t1>X)延时键按下、抬起。
If(不是 延时键)上报 增量键 抬起。
200ms 后Work
If (t2-t1<X&& key = 1)上报单击按下,抬起。
If (t2-t1<X&& key = 0)上报双击按下,抬起。设置标志,在second间断不报单击和延时。

4、 缺点:
单击键反应会有延迟。
单击、双击、延时不在区分按键按下和抬起。
驱动负担会加重。
5、 优点:
简化上层设计。上层不用再设计按键功能,直接检测按键code码,辨别多功能按键。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: