谈一个按键驱动
谈一个按键驱动
提示:::本人英语不好.忽略命名单词~~~谢谢合作...
联系方式:97164811@qq.com
可能这一篇好像没跟上我之前的其他文章,不过没事,回头我再慢慢补上那些帖子吧.今天主要谈谈按键驱动吧...一来是为自己总结,二则希望得到网友们的指点,写的不好的地方,还望指正..谢谢~~~~
首先来看看按键的硬件结构.
由图可知,按键按下keyint1会变成接地,也就是低电平..否则能,就会被上拉电阻拉高到高电平....这个地方有什么不明白的,咱们可以私聊~~
我相信大部分人这里都是小case...
下面进入正题..我是这么设想的,一个按键有3种基本的按键消息叫做 KEY_U, KEY_HOLD,KEY_DOWN.还有一些其他属性,比如按键去抖,按键检测时间,按键按住了多久..等等..其他比如双击之类的,可以根据按键间隔来判断.
根据这些,我先给出我的结构体代码:
unsigned int key_poll(struct file *filp, struct poll_table_struct *wait){unsigned int mask = 0;struct device_dev *devp = filp->private_data;down(&devp->sem);poll_wait(filp,&devp->r_wait,wait);if(!queue_isEmpty(&devp->queue_head)) {/*可读*/mask |= POLLIN/* | POLLRDNORM*/;}up(&devp->sem);return mask;}
Ok..完事....整个按键驱动的代码都完成了...我也测试过了..木有问题..不过你们用的时候有啥问题,得告诉我...我得及时修正..谢谢.....
好了不多说了...11.18 Pm了..睡觉了~~~
一会我把源码打包上传,之后发链接在这边,免资源分下载..哈哈