Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2707832
  • 博文数量: 505
  • 博客积分: 1552
  • 博客等级: 上尉
  • 技术积分: 2514
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-23 18:24
文章分类

全部博文(505)

文章存档

2019年(12)

2018年(15)

2017年(1)

2016年(17)

2015年(14)

2014年(93)

2013年(233)

2012年(108)

2011年(1)

2009年(11)

分类: LINUX

2014-01-23 13:15:33

一、基于LIRC的红外遥控接收端

(一)驱动选择
    下载lirc驱动源码,。这里用的是lirc-0.8.2版本。内有多种驱动包括 serial,sir,gpio……等等。从它驱动里选择和自己硬件最符合的一种,serial是最通用的一种,但它需要有载波判断的DCD信号输入,由 于连线原因,选择了SIR的驱动有移植。
(二)驱动移植
(三)编译安装
    1、运行 ./configure --host=mipsel-linux --build=i486-pc-linux-gnu --with-driver=sir --with-kerneldir=/root/linux-2.6.22.8/trunk/
    这里--with-driver=serial是选择的串口红外方式/driver/lirc_sir/下的驱动。--with-kerneldir=/root/linux-2.6.22.8/trunk/为内核源码所在路径。
    2、运行 make
    3、运行 make install DESTDIR=/tmp
    这里DESTDIR=/tmp为安装到文件系统路径,安装内容除了驱动模块外还有一些应用程序。
    4、注意:
    这里要安装完成后,模块是否在内核指定的地目录下。这和内核版本有关,也是为了适应原有的内核依赖关系。如:LIRC把模块安装在/lib /modules/2.6.22-14-generic/misc/下,把其移动到/lib/modules/2.6.22.8/misc/下。
(四)测试
    1、系统启动后加载驱动模块,运行modprobe lirc_sir(如有IOPORT/IOMMAP冲突,需停掉原有空间上已有设备,如:运行#setserial /dev/ttyS1 uart none)。
    2、运行#mode2应用程序,然后按遥控器,如果出现类以下字样,说明驱动可用。
    space 1666
    pulse 564
    space 40786
    pulse 9007
    space 2216
    pulse 564
   
    问题:
    1、如果按键后无反应。
        A、查看设备和中断是否注册上。
            cat /proc/devices
            cat /proc/interrupts
        B、如果注册都没问题,查看驱动程序中寄存器初始是否有问题。
    2、按键后,一直打印,无法操作。
        A、可能1:中断处理函数内部的循环无法跳出,此时检查循环条件。
        B、可能2:反复运行中断处理函数,查看IIR中对应中断类型的中断清空条件(clear condition)如:把buffer读到小于指定位。然后在中断处理函数中做这样的处理。
(五)使用
    (加载驱动模块后)
    1、记录所用遥控器按键编码。
    运行irrecord -f lircd.conf
    按提示操作。
    一般打两次回车键。
    将遥控器对准盒子的前面板,随便按下一些建,按下后保留1秒种左右,屏幕上会出现一些小数点,不断按,直到屏幕上出现另外的信息。
    再次随意按下一些键,这时发现每次按下一个键,屏幕上显示一个小数点。停止按键,等待10秒钟,屏幕上出现提示信息。
    Please enter the name for the next button (press to finish recording)
    这时才开始一一记录每个按键的键值。
    最后会生成一个lircd.conf文件在当前目录.

    2、把irrecord生成lircd.conf目录拷到/etc/lircd.conf
    运行lircd (本服务默认加载/etc/lircd.conf配置文件)
    然后运行irw后,按遥控器键可检验之前录入的键值是否可用.如果可用会打印出之前记录的名字.
   
    3、按键对应命令的执行。
    创建文件/etc/lircrc
    写入对应命令的项,格式如下:
    --------------------------------------------
    begin
    prog = irexec
    remote = *
    button = power
    repeat = 0
    config = echo "shutdown now!";halt;
    end

    begin
    prog = irexec
    remote = lirc.conf
    button = mute
    repeat = 0
    config = echo "now mute"
    end
    --------------------------------------------
    begin~end表示一个独立的配置块。
    prog域的值表示使用该配置块的程序名称。
    remote的值表示使用的遥控器名称(参见lircd.conf中的定义)。只有一个遥控时也可为*
    button 的值表示遥控器按键名称(参见lircd.conf中的定义)。
    repeat 的值表示按键的重复次数。
    config 的值表示该按键对应的字符串,该字符串可以被prog定义的应用程序获得。

    然后运行irexec命令。
阅读(2530) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~