frameworks/base/libs/ui/EventHub.cpp
按电源键后,系统把scanCode写入对应的设备接点,frameworks/base/libs/ui/EventHub.cpp去读这个设备结点,并把scanCode通过.kl文件对应成keyCode发送到上层
framework/base/services/java/com/android/server/KeyInputQueue.java通过jni调用framework/base/services/jni/com_android_server_KeyInputQueue.cpp调用EventHub.cpp里的文件。
KeyInputQueue.java进入死循环先执行readEvent,调用EventHub.cpp中的getEvent等待输入。
EventHub.cpp中的getEvent进入死循环,执行pollres = poll(mFDs, mFDCount, -1)等待设备结点处有数据写入(也就是有键按下),当有数据写入时执行下面的for循环,找出是那个fd中有内容写入,并读出写入的数据res = read(mFDs[i].fd, &iev, sizeof(iev))。这里只读出了TYPE和Scancode(),而不会有Keycode,硬件层只能向设备文件写入Scancode,而Keycode是上层要用的,由map得到。接下来接用err = mDevices[i]->layoutMap->map(iev.code, outKeycode, outFlags)map出Scancode对应的Keycode和Flags。mpa是在中实现的,是在m_keys中根据scanCode找到这两个值。而m_keys是在KeyLayoutMap.cpp这个文件中load时,读取kl(一般在手机的/system/usr/keylayo
android中上层是如何接收按键事件的
最新推荐文章于 2023-05-12 13:42:05 发布