12.1.2 按键驱动中的数据结构
设备驱动中主要要设计的数据结构是设备结构体,按键的设备结构体中应包含一个缓冲区,因为多次按键可能无法被及时处理,可以用该缓冲区缓存按键。此外,在按键设备结构体中,还包含按键状态标志和一个实现过程中要借助的等待队列、cdev结构体。为了实现软件延时,定时器也是必要的,但可以不包含在设备结构体中。代码清单12.1给出了按键设备结构体及定时器。
代码清单12.1 按键驱动的设备结构体、定时器
1 #define MAX_KEY_BUF 16 //按键缓冲区大小
2 typedef unsigned char KEY_RET;
3 //设备结构体:
4 typedef struct
5 {
6 unsigned int keyStatus[KEY_NUM]; //4个按键的按键状态
7 KEY_RET buf[MAX_KEY_BUF]; //按键缓冲区
8 unsigned int head, tail; //按键缓冲区头和尾
9 wait_queue_head_t wq; //等待队列
10 struct cdev cdev; //cdev结构体
10 } KEY_DEV;
11 static struct timer_list key_timer[KEY_NUM];//4个按键去抖定时器
|
在按键设备驱动中,可用一个结构体记录每个按键所对应的中断/GPIO引脚及键值,如代码清单12.2所示。
代码清单12.2 按键硬件资源、键值信息结构体
1 static struct key_info
2 {
3 int irq_no; //中断号
4 unsigned int gpio_port; //GPIO端口
5 int key_no; //键值
6 } key_info_tab[4] =
7 {
8 /*按键所使用的CPU资源*/
9 {
10 IRQ_EINT10, GPIO_G2, 1
11 }
12 ,
13 {
14 IRQ_EINT13, GPIO_G5, 2
15 }
16 ,
17 {
18 IRQ_EINT14, GPIO_G6, 3
19 }
20 ,
21 {
22 IRQ_EINT15, GPIO_G7, 4
23 }
24 ,
25 };
|
按键设备驱动的文件操作结构体如代码清单12.3所示,主要实现了打开、释放和读函数,因为按键只是一个输入设备,所以不存在写函数。
代码清单12.3 按键设备驱动文件操作结构体
1 static struct file_operations s3c2410_key_fops =
2 {
3 owner: THIS_MODULE,
4 open: s3c2410_key_open, //启动设备
5 release: s3c2410_key_release, //关闭设备
6 read: s3c2410_key_read, //读取按键的键值
7 };
|
| 回书目 上一节 下一节 |
|
||||
| · 国际文档格式标准开战 · 华为员工自杀频频拷问.. · CISSP认证成长之路 · 珊瑚虫QQ作者侵权案开庭 · 微软出价446亿美元收购.. · Windows Server 2008专.. · 隐私保护技术探讨 · 贝恩资本携手华为22亿.. |
· 802.11n:下一代的无线.. · 体验Visual Studio 200.. · 运营商封堵非法ADSL共享 · ADSL应用面面俱到 · 龙芯要做中国的“奔腾” · 华为七千人主动辞职规.. · 华为路由器配置 · 2007盘点专题:有多少.. |
|||
|
||||
| · VPN技术 · SQL Server 2008/2005.. · SOA 面向服务架构 · 子网掩码教程 · SQL Server 2008/2005.. · 中间件应用技术专题 · 深入了解PGP加密技术 · MySQL数据库备份 |
· 病毒查杀专题 · VPN技术 · Solaris 10 配置管理 · Linux 基础 · SSL VPN详细知识 · Linux防火墙 · Linux 集群技术专题 · 打造安全服务器 |
|||
|
||||
| · VPN技术 · SQL Server 2008/2005.. · 中间件应用技术专题 · SQL Server 2008/2005.. · SOA 面向服务架构 · 子网掩码教程 · MySQL数据库备份 · 身份认证技术 |
· 病毒查杀专题 · 清除流氓软件——51CTO.. · SSL VPN详细知识 · Sniffer安全技术从入门.. · Linux 集群技术专题 · VPN技术 · Linux 基础 · SOA 面向服务架构 |
|||