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

时序图

IMS:键盘鼠标事件相关推荐

  1. [转载]C#模拟键盘鼠标事件-SendKeys

    C#模拟键盘鼠标事件-SendKeys 2007-09-18 15:138596人阅读评论(1)收藏举报 1.模拟键盘事件 System.Windows.Forms.SendKeys以下是   Sen ...

  2. 模拟键盘鼠标事件有两种方法

    实现一个鼠标或者键盘模拟器,可以完成很多功能,比如做一个简单的游戏外挂^_^.通常,模拟键盘鼠标事件有两种方法: 1.keybd_event, mouse_event 2.SendMessage, P ...

  3. Python ctypes 调用API函数模拟键盘鼠标事件

    在Python编程中, 有时需要模拟键盘或鼠标事件, 自动操作计算机, 比如玩游戏等. 本文介绍使用ctypes模块调用API函数, 模拟键盘鼠标事件的方法. 目录 1.导入ctypes模块 2.通过 ...

  4. pynput 键盘鼠标事件抑制(拦截输出)

    pynput 键盘鼠标事件抑制 前言 最近想用pynput做一个键盘映射,但是遇到的了一些问题,键盘映射有时需要抑制原输出.本人在CSDN找了很久,但是发现没有相关的文章.在查找了官方文档,并做了一些 ...

  5. win32键盘输入python_windows下python捕捉键盘鼠标事件 pywin32 | 学步园

    最近学习python中, 需要调用gui的wincom组件,网上搜罗了很多相关资料.但是大部分资料都有问题.也许跟python的开源和版本问题有关. 下面我就把网上罗列出来最多的捕捉键盘鼠标事件的代码 ...

  6. python鼠标事件 详解_Python selenium键盘鼠标事件实现过程详解

    引言 ----在实际的web测试工作中,需要配合键盘按键来操作,webdriver的 keys()类提供键盘上所有按键的操作,还可以模拟组合键Ctrl+a,Ctrl+v等. 举例: #cording= ...

  7. 7、osg中响应键盘鼠标事件以及鼠标和键盘编码表

    1.首先定义一个类,该类继承与osgGA::GUIEventHandler,在此类中存在一个handle函数,所有的事件都在此函数中进行处理,如下类的代码: //声明类UseEventHandler, ...

  8. 曲鸟全栈UI自动化教学(五):Selenium的键盘鼠标事件详解

    一.前言 在之前的教学中对于页面的操作只涉及到了两个:点击.输入:其实Selenium的键盘鼠标操作还有很多,现在就为你一一讲解. [Python测试交流群:8140 78962] 文章目录 一.前言 ...

  9. selenium使用篇_键盘鼠标事件

    大家好,我是bug郭,一名双非科班的在校大学生.对C/JAVA.数据结构.Spring系列框架.测试开发.Linux及MySql.算法等领域感兴趣,喜欢将所学知识写成博客记录下来. 希望该文章对你有所 ...

最新文章

  1. Qt5.7 + VS2015 环境搭建
  2. Windows Server 2008 R2 搭建DNS服务器(转)
  3. 2.27 18种定位方法总结
  4. pythonuiautomator2教程_UIAutomator2 + Python 入门使用总结
  5. mfc如何将一个数组中的字节数据用串口发送出去_RS232串口多机通信
  6. 协作机器人 ai算法_如果我们希望人工智能为我们服务而不是不利于我们,我们需要协作设计...
  7. textarea如何在文字后面_FLASH如何制作风吹文字的效果
  8. 接口使用jwt返回token_Java中使用JWT生成Token进行接口鉴权实现方法
  9. 使用Python实现电子邮件群发功能
  10. “ ModuleNotFoundError: No module named ‘tkinter‘ “的解决方法
  11. 【渝粤教育】国家开放大学2019年春季 45烹饪原料学(1) 参考试题
  12. 前端ajax token,jQury Ajax使用Token验证身份实例代码_白江_前端开发者
  13. 今日制造怎么安装solidworks插件_PS插件安装后出现了登陆界面,无法使用怎么解决?保证一招搞定...
  14. 服务器时间和系统时间不同步,电脑时间不同步怎么办 电脑时间同步不了的解决方法【详解】...
  15. 【整理】1、C网和G网双模手机是否可同时支持C网和G网上网?2、上网的同时是否可以打电话?3、呼叫等待和呼叫保持的概念与“双通”手机
  16. 微信小程序实现多页面
  17. 基于图像算法的透明容器液面液位识别算法
  18. Recurrent Filter Learning for Visual Tracking(RFL)论文笔记
  19. 苹果电脑如何设置开启远程控制?
  20. 使用 MEAN 进行全栈开发基础篇——4、接着前面玩儿添加

热门文章

  1. SpringBoot @Validated原理解析
  2. html中的bom和dom,Javascript基础五(BOM和DOM)
  3. 业务连续性(BCM)小百科系列(四)
  4. 价值迭代算法求解MDP实现 value iteration algorithm (MDP之二)
  5. JS获取URL参数的4种方法总结
  6. js导航定位指定位置
  7. 高德地图通过点连成区域
  8. 除非雨落之后仍是雨(转)
  9. VMware workstation 14 安装 iOS虚拟机
  10. 前端利用jsencrypt.js进行RSA加密