IMS:键盘鼠标事件

IMS:键盘鼠标事件

android11-release
IMS:键盘鼠标接入判断
在这里插入图片描述


键盘鼠标接入EventHub

可查看IMS:EventHub 设备添加和InputDevice转化IMS:键盘鼠标接入判断
在这里插入图片描述

  • 鼠标名称:MI Mouse BT3.0
  • 分配的DeviceId:11
  • 分配的设备节点:/dev/input/event8
  • classes=0x80000008、sources=0x00002002
  • INPUT_DEVICE_CLASS_CURSOR:经 EventHub、InputDevice 处理后,添加 CursorInputMapper

CursorInputMapper事件处理

frameworks\native\services\inputflinger\reader\mapper\CursorInputMapper.cpp
  • mEventHub->getEvents获取设备节点/dev/input/event8事件
/*
 * A raw event as retrieved from the EventHub.
 */
struct RawEvent {
    nsecs_t when;
    int32_t deviceId;
    int32_t type;
    int32_t code;
    int32_t value;
};
  • InputReader::processEventsForDeviceLocked -> InputDevice::process -> CursorInputMapper::process
    在这里插入图片描述

鼠标按键事件

frameworks\native\services\inputflinger\reader\mapper\accumulator\CursorButtonAccumulator.cpp
external\kernel-headers\original\uapi\linux\input-event-codes.h

在这里插入图片描述 在这里插入图片描述

  • 日志输出:鼠标左键BTN_LEFT 0x110、鼠标右键BTN_RIGHT 0x111、鼠标中键BTN_MIDDLE 0x112
    在这里插入图片描述

鼠标按键前后添加AKEY_EVENT_ACTION_DOWN、AKEY_EVENT_ACTION_UP事件

void CursorInputMapper::sync(nsecs_t when) {
    int32_t lastButtonState = mButtonState;
    int32_t currentButtonState = mCursorButtonAccumulator.getButtonState();
    mButtonState = currentButtonState;
    // ... ... ... ...
    // Synthesize key down from buttons if needed.
    synthesizeButtonKeys(getContext(), AKEY_EVENT_ACTION_DOWN, when, getDeviceId(), mSource,
                         displayId, policyFlags, lastButtonState, currentButtonState);

    // ... ... ... ..
    // Synthesize key up from buttons if needed.
    synthesizeButtonKeys(getContext(), AKEY_EVENT_ACTION_UP, when, getDeviceId(), mSource,
                         displayId, policyFlags, lastButtonState, currentButtonState);
    // ... ... ... ...
}
  • synthesizeButtonKeys 只有在AMOTION_EVENT_BUTTON_BACK\AMOTION_EVENT_BUTTON_FORWARD(即BTN_BACK 0x116\BTN_FORWARD 0x115)添加
    在这里插入图片描述

鼠标悬停、滑动事件

在这里插入图片描述

  • 鼠标悬停 AMOTION_EVENT_ACTION_HOVER_MOVE:motionEventAction == AMOTION_EVENT_ACTION_UP && (mSource == AINPUT_SOURCE_MOUS
  • 鼠标滑动 AMOTION_EVENT_ACTION_SCROLL:bool scrolled = vscroll != 0 || hscroll != 0;
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

CursorInputMapper最终添加NotifyMotionArgs

CursorInputMapper::sync添加的NotifyMotionArgs,最总socket发送connection->inputPublisher.publishMotionEvent
( 除了BTN_BACK 0x116\BTN_FORWARD 0x115 )
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • connection->inputPublisher.publishMotionEvent发送

    frameworks\native\libs\input\InputTransport.cpp
    在这里插入图片描述

时序图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xhBruce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值