分类: LINUX
2010-05-06 15:03:10
linux2.6输入子系统
1.头文件
#include
#include
#include
#include
#include
#include
2.定义一个个输入子系统指针
static struct input_dev *omap_7279key;
static int omap3evm_keymap[] = {
KEY(3, 3, KEY_KBDILLUMDOWN),
KEY(1, 2, KEY_RIGHT),
KEY(2, 0, KEY_LEFT),
KEY(3, 1, KEY_UP),
KEY(0, 2, KEY_DOWN),
KEY(1, 0, KEY_HOME),
KEY(2, 1, KEY_BACK),
KEY(1, 3, KEY_ENTER),
KEY(2, 2, KEY_VOLUMEUP),
KEY(1, 1, KEY_VOLUMEDOWN),
KEY(0, 0, KEY_END),
0
};
3.初始化和注册输入子系统
omap_7279key = input_allocate_device();
if (!omap_7279key) {
kfree(omap_7279key);
return -ENOMEM;
} /*这里是给输入子系统分配内存*/
/* setup input device */
omap_7279->name = "Ds7279 keyboard";//输入子系统名字
set_bit(EV_KEY, omap_7279key->evbit);//设置输入子系统支持按键事件。
// set_bit(KEY(1, 0, KEY_HOME)& KEYNUM_MASK,omap_7279key->keybit);
for(i=0;i<10;i++)
set_bit(omap3evm_keymap[i]& KEYNUM_MASK,omap_7279key->keybit);
/*初始化键盘定义,这里keybit是由若干个long型变量组成的数组*/
input_register_device(omap_7279key);
/*注册input设备*/
4.在中断或者需要发中事件报告加放报告函数
input_report_key(omap_7279key,omap3evm_keymap[2]& (KEYNUM_MASK | KEY_PERSISTENT),1);//发送报告
udelay(10);
input_report_key(omap_7279key,omap3evm_keymap[2]& (KEYNUM_MASK | KEY_PERSISTENT),0);//KEY(3, 1, KEY_UP)
input_sync(omap_7279key);//同步,表示一个报告完成
5.注销输入设备.
input_unregister_device(omap_7279key);
kfree(omap_7279key);