Android Input Framework(二)---EventHub


1 EventHub获取输入设备数据

EventHub可以看成是输入消息的集散地,因为android支持多种输入设备,而各种设备的消息类型可能不一样,为了统一管理这些输入消息,Android提出了EventHub的概念,所有的输入事件都会通过EventHub收集,并通过EventHub传递给InputReader,这样对上层来说,就不需要关注底层设备的多样性,减少了上层使用的复杂性。EventHub同时还负责扫描和加载所有的输入设备,InputReader在第一次读取数据的时候会扫描所有的输入设备,并保存每个设备的配置信息。

1.1 打开设备

EventHub::getEvents中,当mNeedToScanDevicestrue(当创建EventHub对象时,它就为true),即当InputReader第一次调用getEvents的时候需要打开设备,它将从/dev/input目录下查找所有设备,并进行打开,获取其相关属性,最后加入mDevices列表中。

Android <wbr>Input <wbr>Framework(二)---EventHub

    openDeviceLocked()方法中,首先调用open()打开设备, ioctl()获取设备名字,识别打开设备是哪个classs的,即按键、单点触摸屏、多点触摸屏等等。如果设备是认为是合法的,创建了设备,然后向epoll注册该设备,并添加到mDevices列表中:

// Register withepoll.

   struct epoll_event eventItem;

   memset(&eventItem, 0,sizeof(eventItem));

   eventItem.events = EPOLLIN;

   eventItem.data.u32 = deviceId;

    if (epoll_ctl(mEpollFd,EPOLL_CTL_ADD, fd, &eventItem)) {

       ALOGE("Could not add device fd to epoll instance. errno=%d", errno);

       delete device;

       return -1;

}

addDeviceLocked(device);

1.2 读取输入事件

     要说EventHub::getEvents如何获取输入事件,不得不先说说它的几个相关的成员变量:

n        mPendingEventCount:调用epoll_wait时的返回值,当然如果没有事件,则其值为0

n        mPendingEventIndex:当前需要处理的事件索引

n

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值