eventhub

http://blog.csdn.net/myarrow/article/details/7091061

frameworks/base/services/input/EventHub.cpp

4.1)创建InputReader对象

4.1.1)把EventHub、readerPolicy<实质为NativeInputManager对象>和创建的InputDispatcher对象作为参数创建InputReader对象:mReader = new InputReader(eventHub, readerPolicy, mDispatcher);

4.1.2)在创建InputReader时, 保存EventHub对象到mEventHub中,并创建QueuedInputListener对象并保存在mQueuedListener中

4.2)创建InputDispatcher对象

4.2.1)把传入的参数dispatcherPolicy<实质为NativeInputManager对象>作为参数创建InputDispatcher对象:mDispatcher = new InputDispatcher(dispatcherPolicy);

4.2.1)在创建InputDispatcher时,创建了一个looper对象:mLooper = new Looper(false);

如何获取输入子系统事件:

EventHub::EventHub(void) 

mEpollFd = epoll_create(EPOLL_SIZE_HINT);创建epoll集合

EventHub::EventHub(void) 

epoll_ctl(mEpollFd, EPOLL_CTL_ADD, mINotifyFd, &eventItem);监测/dev/input目录文件下的删除与创建;

epoll_ctl(mEpollFd, EPOLL_CTL_ADD, mWakeReadPipeFd, &eventItem);监控读写管道中的读管道;

status_t openDeviceLocked(const char *devicePath) 

epoll_ctl(mEpollFd, EPOLL_CTL_ADD, fd, &eventItem);监控输入子系统

void EventHub::closeDeviceLocked(Device* device) 

epoll_ctl(mEpollFd, EPOLL_CTL_DEL, device->fd, NULL)删除监控文件 

size_t EventHub::getEvents(int timeoutMillis, RawEvent* buffer, size_t bufferSize) 

int pollResult = epoll_wait(mEpollFd, mPendingEventItems, EPOLL_MAX_EVENTS, timeoutMillis); 阻塞等待输入事件


EventHub->getEvents

InputReader::processEventsLocked分类处理输入子系统事件和新增、删除设备事件

processEventsForDeviceLocked 处理输入子系统事件

device->process(rawEvents, count);相应的设备处理输入子系统事件

mapper->process(rawEvent);

addDeviceLocked(rawEvent->when, rawEvent->deviceId);增加设备

InputDevice* device = createDeviceLocked(deviceId, identifier, classes);创建Mapper


InputListenerInterface* InputReader::ContextImpl::getListener() {
    return mReader->mQueuedListener.get();
}

status_t EventHub::openDeviceLocked(const char *devicePath)

InputDeviceIdentifier identifier;记录打开设备信息

mExcludedDevices记录打开的设备

Device* device = new Device(fd, deviceId, String8(devicePath), identifier);创建新设备

查看设备类型;

epoll_ctl(mEpollFd, EPOLL_CTL_ADD, fd, &eventItem);加入轮询设备集

addDeviceLocked(device);增加设备到设备链表

size_t EventHub::getEvents(int timeoutMillis, RawEvent* buffer, size_t bufferSize)获取所有Event

eventItem.events & EPOLLIN

1.关闭设备Event

2.打开设备Event

status_t EventHub::readNotifyLocked() 

openDeviceLocked(devname);

closeDeviceByPathLocked(devname);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
鸿蒙EventHub是华为鸿蒙OS的一个重要组成部分,用于处理和管理设备间的消息通信和事件传递。它的主要目标是提供一种高效可靠的机制,使得设备可以方便地相互协作和通信。 鸿蒙EventHub采用了发布-订阅的模型,设备可以作为消息发布者将事件发布到EventHub,同时其他设备可以作为订阅者订阅相关事件。EventHub负责将发布者和订阅者之间的消息进行中转和传输,确保消息的可靠性和时效性。 鸿蒙EventHub具有以下特点和优势: 1. 高效可靠:EventHub采用高效的消息传递机制,能够实时传输设备间的消息和事件。同时,EventHub还具备消息持久化和重发的功能,确保消息的可靠传递。 2. 灵活扩展:EventHub支持多种消息协议,包括MQTT、CoAP等,可以灵活适配不同类型的设备和网络环境。同时,EventHub还支持消息的过滤和路由功能,可以根据需求对消息进行筛选和转发。 3. 安全保障:EventHub提供了严格的安全机制,包括身份验证、消息加密和访问控制等,确保设备间的通信和数据传输的安全性。 4. 统一管理:鸿蒙EventHub可以集中管理多个设备之间的消息通信,可以实时监控消息的传输情况和设备的状态,为开发者提供便捷的管理和调试工具。 总之,鸿蒙EventHub是一款强大的设备间通信和事件传递的工具,它为鸿蒙OS提供了高效可靠的消息中转和传输机制,为设备间的协作和通信提供了良好的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值