红外遥控相关知识
来源:互联网 发布:知乎精华 mobi 编辑:程序博客网 时间:2024/04/29 10:52
最近在整个遥控问题,原因是按了遥控上面的按键后没有反应,开始 以为是没有将按键对应起来,查了一下后发现是驱动里面根本没有捕获到相应的键值,所以也就不能够 发送相应的键值到上层来。
这里来看一下红外遥控接收端的驱动实现
首先来看一下驱动的module_init(IR_ModeInit);
static HI_S32 __init IR_ModeInit(HI_VOID){int retval; CMPI_PROC_ITEM_S *pProcItem; hiir_dbg("lijj IR_Keypad_Init IR_S2 -->\n"); retval = platform_device_register(&ir_keypad_dev);if (retval){printk("platform_device_register fail\n");goto fail;}retval = platform_driver_register(&irevent_driver);if (retval){printk("platform_driver_register fail\n");goto fail;} sprintf(g_IrRegisterData.devfs_name, UMAP_DEVNAME_IR); g_IrRegisterData.minor = UMAP_MIN_MINOR_IR;g_IrRegisterData.owner = THIS_MODULE; g_IrRegisterData.fops = &IR_FOPS; g_IrRegisterData.drvops = &ir_baseOps; if (CMPI_RegisterDevice(&g_IrRegisterData) < 0) { HI_FATAL_IR("register IR failed.\n"); return HI_FAILURE; } pProcItem = CMPI_PROC_AddModule(HI_MOD_IR, HI_NULL, HI_NULL); if (!pProcItem) { HI_FATAL_IR("add IR proc failed.\n"); CMPI_UnRegisterDevice(&g_IrRegisterData); return HI_FAILURE; } pProcItem->read = IR_ProcRead; pProcItem->write = IR_ProcWrite; printk("Load hi_irs2.ko success. \t(%s)\n", VERSION_STRING); return 0;fail:platform_device_unregister(&ir_keypad_dev);return -1;}
在IR_ModeInit函数中注册一个设备,它的名字是Hi3716_keypad,还注册了一个设备的驱动,它的名字也是Hi3716_keypad,这样在注册这个驱动的时候就会调用它的probe函数,即IR_Keypad_Events_Probe
static int IR_Keypad_Events_Probe(struct platform_device *pdev){ hi_event_dev *edev; int i;#ifdef DEBUG_ON printk("Enter IR_Keypad_Events_Probe.\n");#endif /* 1. alloc input device resource*/ edev = kzalloc(sizeof(hi_event_dev), GFP_KERNEL); if (!edev) { printk("events edev or hi_keypad_ input_dev alloc fail!\n"); goto fail; } edev->irq = IR_IRQ_NO; edev->name = NAME; edev->input = input_allocate_device(); edev->addr = IR_REG_BASE; /* 2. indicate that we generate key events */ set_bit(EV_KEY, edev->input->evbit); set_bit(EV_REL, edev->input->evbit); for (i=1; i<= 0x1ff; i++) { set_bit(i, edev->input->keybit); } set_bit(EV_SYN, edev->input->relbit); set_bit(EV_KEY, edev->input->relbit); /* 3. set input date and register device*/ platform_set_drvdata(pdev, edev); edev->input->name = edev->name; edev->input->id.bustype = BUS_HOST; edev->input->id.vendor = 0x0001; edev->input->id.product = 0x0001; edev->input->id.version = 0x0100; if (input_register_device(edev->input)) { printk("input_register_device fail!\n"); goto fail; } /* 4. install edev */ g_irkeypad_edev = edev; return 0;fail: kfree(edev); input_free_device(edev->input); return -EINVAL;}
- 红外遥控相关知识
- 红外遥控相关总结
- 漫谈红外遥控
- .单片机红外遥控
- 红外遥控智能小车
- NEC 红外遥控协议
- NEC红外遥控解码
- 红外遥控协议
- NEC 红外遥控协议
- 红外遥控原理
- 红外遥控接收
- 23.红外遥控实验
- 红外遥控编码
- 树莓派的红外遥控
- 红外遥控基本知识
- 红外遥控转帖
- 51单片机红外遥控
- 红外遥控数码管
- Code Sign error: a valid provisioning profile matching the application's Identifier 'com.yourcompany
- 乘客忆新疆劫机事件:歹徒点燃爆炸物被踢掉
- Windows API 写文件尾部
- qt绘制背景图加速方法
- 肌无力怎么治疗最好呢
- 红外遥控相关知识
- 数据结构1-简单单链表的创建
- 帝国cms自定义页面模板是指自定义页面(单页)使用的模板
- 谷歌“平板电脑”对市场的冲击
- oracle实例囚笼(Instance Caging)
- hdu 2045 DP
- GPS 入门 1 —— 基础知识
- linux系统快速启动十大秘诀
- 2012年7月4日 题:创建一个 10节点 内容随机但不重复的 链表