文章详情

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

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

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

6、红外信号映射为X事件

         如果我们希望使用遥控器远程遥控进行视频、音频等播放操作,则需要将上面解码后的红外信号映射为X事件(当然指的是针对基于X的图形应用时)。这个过程主要涉及到下面几个函数:

l         KeyCode XKeysymToKeycode(Display *display, KeySym keysym)

将KeySym转换为KeyCode。Display指定连接的X server。KeySym表示键盘按键的字符编码,如XK_Up、XK_Down等,定义的KeySym列表在X11/keysymdef.h文件里,多数应用通常只包括X11/keysym.h文件。KeyCode代表了物理按键。如果指定的KeySym没有对应任何KeyCode,则返回0。

l         XTestFakeKeyEvent(display, keycode, True, 0);

使用XTEST扩展发送按键事件的接口。第三个参数表示按键被按下或释放,如果按下,则发送KeyPress事件,否则发送KeyRelease。使用这个函数时,不能够指定事件发送的目的地,它将按照真实键盘按键的事件传送机制来传送。

l         XSync(Display *display, Bool discard)

flush输出缓冲,并等待所有的请求已经被X server接收和处理。对于X server接收到的每个协议错误,XSync将调用客户端应用的错误处理函数。server生成的都依次添加在xlib的事件队列里。如果设置discard为False,则XSync不丢弃这个事件队列里的事件,否则,丢弃所有队列里的事件。

在前面示例里添加下面的定义:

static struct KeyMapEntry {

    char *config;

    KeySym keysym;

} keymap[] = {

    {"Escape",     XK_Escape},

    {"Backspace",   XK_BackSpace},

    {"1",      XK_1},

    {"2",      XK_2},

    {"3",      XK_3},

    {"4",      XK_4},

    {"5",      XK_5},

    {"6",      XK_6},

    {"7",      XK_7},

    {"8",      XK_8},

    {"9",      XK_9},

    {"0",      XK_0},

    {"Up",            XK_Up},

    {"Down",       XK_Down},

    {"Left",          XK_Left},

    {"Right",        XK_Right},

};

 

void

dispatchEvent(char *msg)

{

    struct KeyMapEntry entry;

    KeyCode   keycode;

    int i;

 

    for ( i = 0; keymap[i].config; i++) {

        entry = keymap[i];

        if (strcmp(entry.config, msg) == 0) {

            keycode = XKeysymToKeycode(display, entry.keysym);

            XTestFakeKeyEvent(display, keycode, True, 0);

            XTestFakeKeyEvent(display, keycode, False, 0);

            XSync(display, False);

 

            break;

        }

    }

    if (!keymap[i].config)

        print("<WARNING> Unknown config string: %s\n", msg);

}

然后将lirc_code2char循环里的语句

system(c);

         替换为

dispatchEvent(c);

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

步行僵尸2无限金币版

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

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

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

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

体育竞技 下载