__set_bit(EV_KEY, mxckbd_ir_dev->evbit);//比如按键,应该对哪些键值的按键进行处理(对于其它按键不予理睬)
for (i = 0; i < IR_KEY_NUM; i++)
{
scan=mxckpd_ir_keycodes[i];
__set_bit(mxckpd_keycodes[scan], mxckbd_ir_dev->keybit);
}
input_set_capability(mxckbd_ir_dev, EV_MSC, MSC_SCAN);//记录本设备对于哪些事件感兴趣(对其进行处理)
__clear_bit(KEY_RESERVED, mxckbd_ir_dev->keybit);
err2:
input_free_device(mxckbd_ir_dev);
return retval;
}
在串口驱动的rx里通过这函数获取串口里的信息,进行上报。
static void report_key(char ch)
{
int i;
unsigned char new_ir_val=ch;
unsigned short new_key_val;
unsigned short old_key_val;
new_key_val=mxckpd_keycodes[ch];
//printk("\nnew_key_val is %d \n",new_key_val);
input_event(mxckbd_ir_dev, EV_MSC, MSC_SCAN, new_ir_val);//上报事件
if (new_key_val != KEY_RESERVED) {
//printk("\nreport DOWN key is %d\n",new_key_val);
input_report_key(mxckbd_ir_dev, new_key_val, 1);
old_key_val=new_key_val;
}
if (old_key_val != KEY_RESERVED)
{
// printk("\nreport UP key is %d\n",old_key_val);
input_report_key(mxckbd_ir_dev, old_key_val, 0);