Chinaunix首页 | 论坛 | 博客
  • 博客访问: 659072
  • 博文数量: 205
  • 博客积分: 7891
  • 博客等级: 少将
  • 技术积分: 2168
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-29 13:16
文章分类

全部博文(205)

文章存档

2015年(4)

2014年(5)

2013年(1)

2012年(4)

2011年(51)

2010年(86)

2009年(45)

2008年(9)

分类: 嵌入式

2010-05-21 11:56:42

1、红外通信协议

红外通信是传统的线缆通信方式的替代,被用来进行设备之间点对点的数据传输。目前作为一种广泛使用的无线连接技术,被众多的硬件和软件平台支 持。它具有小角度、短距离、传输速率高等特点。

红外通信技术发展的早期,存在有几种不同的通信标准,不同标准之间的通信设备并不能进行红外通信,为了统一红外通信标准,于1993年,一些厂商成立了IrDA(红外数据协会)。IrDA是目前红外无线通信的工业标准,你可以使用它 与打印机、传真机、modem、其它计算机进行通信。按照速率IrDA红外通信可以分为下面四种:

l         SIR2.4 kbit/s 115.2 kbit/s,最基本的红外标准。串口连接时必定使用的是SIR

l         MIR576 kbit/s 1152 kbit/s

l         FIR4 Mbit/s

l         VFIR16 Mbit/s

2、红外通信装置

         为了进行红外通信,我们需要有发送和接收红外 信号的装置,笔记本一般都带有IrDA的红外接口,而台式机一般需要购买专门的红外适配器。目前市场上的红外适配器主要有串口红外适配器、USB红外适配器、主板接口红外适配器等。

         利用我们的计算机进行红外通信的方式主要有:

l         利用IrDA接口与其它具有红外通信接口的设备,如打印 机、传真机、计算机等通信。

l         使用专用的红外遥控器和接收器。

l         使用红外接收器再加上普通的电视、DVD等的遥控器。还需要专门的控制软件。

第一种主要是不同设备之间的红外数据传输,后两种是对计算机的红外遥控。Linux针对这两种使用方式有不同的驱动和软件包。

3、  Linux红外支持

Linux/IrDA  project1997年开始,因为与IrDA协会的名称产生冲突,项目名称更改为Linux/IR,并从1999年开始成为IrDA的官方成员之一。相关的软件包主要有IrDA-Utils

LIRC projectLinux Infrared Remote Control)的主要目标是通过红外红外信号进行计算机的远程控制。LIRC包支持解码并发送最普通的IR远程控制信号。早期版本只支持串口和并口接口 的硬件,但是现在已经能够支持很多不同的硬件。LIRC包包括了针对不同接口硬件的设备驱动,不过最重要的还是 lircd 后台程序,它负责解码设备驱动接收到的IR信号并将解码后的信息通过 socket 进行发送,另外还有一个 lircmd 后台程序,负责连接 lircd 并将解码后的IR信号转换为鼠标移动信息。此外LIRC还包括了一些用户空间的应用程序,为我们使用IR来控制计算机提供方便。因为这里讨论的是红外 远程控制驱动,所以LIRC将是下面阐述的重点。的有关LIRC project的详细信息可以浏览它的项目主页

4LIRC结构

下图是LIRC包的驱动模型(Driver Model

 

 

主要涉及了三个devfs接口,/dev/lirc/dev/lircd/dev/lircmd

l         /dev/lirc

依赖于使用的ioctl

LIRC_MODE_MODE2 输出的packet包括了描述IR信号的整型值。这个整型值的位0-23表示pulse/space的长度;位240时表示space,为1时表示pulse;所有剩余的位没有意义。

LIRC_MODE_CODE outputs chars (8 bits)

LIRC_MODE_LIRCCODE outputs codes of configurable length in big endian byte order

可参考文件drivers/lirc_serial/lirc_serial.cdrivers/lirc_parallel/lirc_parallel.ctools/mode2.cmode工具,将这个驱动的输出显示在终端上)。

l         /dev/lircd

输出包括了所有remotepressed button信息的字符串。

l         /dev/lircm

鼠标后台。支持三种鼠标协议:MouseSystems, IntelliMouse IMPS/2。可参考文件daemons/lircmd.c

4LIRC配置

         LIRC的配置主要涉及到三个配置文件,lircd.conflircmd.conf.lircrc

l         lircd.conf

lircd.conflircd后台程序的配置文件。LIRC项目主页上已经有很多针对不同牌子遥控器的配 置文件,如果在上面找不到匹配自己遥控器的lircd.conf文件,则需要使用irrecord工具进行手工配置。配置过程在另一篇文章“Linux下 遥控器的配置与使用”里已经有所阐述,下面的示例是一个典型的配置文件,其中定 义了1~9,上、下、左、右和开关键的矩形脉冲信息。

begin remote

  name  test

  bits           16

  flags SPACE_ENC|CONST_LENGTH

  eps            30

  aeps          100

  header       9092  4460

  one           632  1628

  zero          632   496

  ptrail        630

  repeat       9118  2181

  pre_data_bits   16

  pre_data       0xFF

  gap          108483

  toggle_bit      0

 

      begin codes

          1                        0x906F

          2                        0xB847

          3                        0xF807

          4                        0x9867

          5                        0xD827

          6                        0x8877

          7                        0xE817

          8                        0x48B7

          9                        0x9A65

          up                     0x609F

          down                0x22DD

          left                    0xE21D

          right                  0x02FD

          power                0x28D7

          mute                  0x08F7

      end codes

end remote

l         lircmd.conf

lircmd后台程序的配置文件,主要配置了遥控按键与鼠标消息的对应关系。

l         .lircrc

LIRC的客户端应用使用的配置文件,应该位于你的用户目录下面。也可以命名为为/etc/lircrc,此时它为所有应用所共用。

begin

    prog = lirckeyd

    remote = new.conf

    button = power

    repeat = 0

    config = power

end

begin~end表示一个独立的配置块。

prog域的值表示使用该配置块的程序名称。

Remote的值表示使用的遥控器名称(参见中的定义)。

Button 的值表示遥控器按键名称(参见中的定义)。

Repeat 的值表示按键的重复次数。

Config 的值表示该按键对应的字符串,该字符串可以被prog定义的应用程序获得。

5、编写LIRC的客户端应用

         有两种类型的LIRC应用,一种为发送IR命令的应用,比如xrcirsend等,另一种为接收IR命令的应用,比如irexec, irxevent irpty等。它们都将通过位于/dev/lircdsocket连接到lircd后台,通信的数据为普通的可读格式。

         无论什么时候lircd接收到一个IR信号,它将广播下面的字符串到每个客户端(client):

         < repeat count >

阅读(3916) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~