文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>linux红外远程控制驱动(二)

linux红外远程控制驱动(二)

时间:2007-04-18  来源:ilttv.cn

5、编写LIRC的客户端应用

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

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

         <code> < repeat count > <button name> <remote control name>

code是IR信号的64位编码。repeat count表示用户按下按键的时间,每当接收到一个新的IR信号时,它将增加1。button name和remote control name在lircd的配置文件里定义。

         如果你仅仅希望使自己的应用接收IR命令,可以使用lirc_client库,通常是/usr/lib/liblirc_client.a。可以使用它编写LIRC的客户端应用,要记得包含lirc/lirc_client.h文件。lirc_client库比较重要的函数有:

l         int lirc_init(char *prog,int verbose)
库的初始化,它连接lircd后台做一些内部的初始化。prog与.lircrc中的prog项对应,verbose表示是否打印错误信息到stderr,0表示不打印,1表示打印。返回值为连接到lircd的socket描述符,有错误发生时返回-1。

l         int lirc_readconfig(char *file,struct lirc_config **config,int (check)(char *s))
读取配置文件。file表示配置文件名称,NULL表示使用默认的.lircrc,也可以进行多次调用加载多个配置文件。config表示配置文件数据结构(struct config)的指针,将在函数内部填充,lirc_code2char函数将需要它。check函数指针指向一个对file进行解析的用户自定义函数。

l         int lirc_nextcode(char **code)
阻塞直到socket上有数据可用。可以在程序的主循环里使用。如果有错误发生返回-1,否则返回0和指向数据流里下一个字符串的指针code,注意code必须使用free函数释放。此函数使得code中获得prog对应的配置信息,若无按键信息则阻塞进程。

l         int lirc_code2char(struct lirc_config *config,char *code,char **string)
获得配置文件里与按键对应的配置字符串。config和code分别由是前面两个函数填充的,string中将被.lircrc中的config域值填充。

l         void lirc_freeconfig(struct lirc_config *config)
释放config结构。

l         int lirc_deinit()
lirc销毁函数。

下面是LIRC项目主页上的一个简单示例

/*   $Id: technical.html,v 1.26 2005/12/10 22:12:02 lirc Exp $      */

 

/****************************************************************************

 ** irexec.c ****************************************************************

 ****************************************************************************

 *

 * irexec  - execute programs according to the pressed remote control buttons

 *

 * Copyright (C) 1998 Trent Piepho <[email protected]>

 * Copyright (C) 1998 Christoph Bartelmus <[email protected]>

 */

 

#ifdef HAVE_CONFIG_H

# include <config.h>

#endif

 

#include <errno.h>

#include <unistd.h>

#include <stdarg.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include "lirc_client.h"

 

char *progname;

 

int main(int argc, char *argv[])

{

         struct lirc_config *config;

 

         progname=argv[0];

         if(argc>2)

         {

                   fprintf(stderr,"Usage: %s <config file>\n",progname);

                   exit(EXIT_FAILURE);

         }

         if(lirc_init("irexec",1)==-1) exit(EXIT_FAILURE);

 

         if(lirc_readconfig(argc==2 ? argv[1]:NULL,&config,NULL)==0)

         {

                   char *code;

                   char *c;

                   int ret;

 

                   while(lirc_nextcode(&code)==0)

                   {

                            if(code==NULL) continue;

                            while((ret=lirc_code2char(config,code,&c))==0 &&

                                  c!=NULL)

                            {

#ifdef DEBUG

                                     printf("Execing command \"%s\"\n",c);

#endif

                                     system(c);

                            }

                            free(code);

                            if(ret==-1) break;

                   }

                   lirc_freeconfig(config);

         }

 

         lirc_deinit();

         exit(EXIT_SUCCESS);

}

排行榜 更多 +
步行僵尸2无限金币版

步行僵尸2无限金币版

体育竞技 下载
狐狸一号特殊任务无限金币版

狐狸一号特殊任务无限金币版

体育竞技 下载
忍者之雷复仇无限金币钻石版

忍者之雷复仇无限金币钻石版

体育竞技 下载