[经验分享] 【源文件说明】(MMI)多模子系统文件说明 原创

诚迈_雨哥 显示全部楼层 发表于 2023-12-6 18:58:37
我在阅读多模子系统时,详细整理了其目录下每个文件功能,期望对同学有所帮助。m_i是指foundation\multimodalinput目录,文件基于2022年初的主线版本。因为受文字个数限制,仅展示前49个文件,完整列表请下载附件。  
路径
功能描述
1
foundation\multimodalinput\input
\etc\ability_launch_config.json
文件为空;
2
m_i\etc\ability_launch_config.json
定义了Shortkeys和sequences两个key,但是无值;
3
m_i\etc\multimodalinput.para.dac
input.pointer.device = input:input:0755
4
m_i\examples\mmi\src\
mmi_service_main.cpp
main(...)启动了一个连续睡眠日志,还有服务的启停和日志打印;
5
m_i\frameworks\napi\
input_consumer\src\js_register_module.cpp
1.注册多模输入之输入消费者模块,仅定义了按键事件和选项,无光标事件;
2.提供了on接口,先将环境变量env和回调信息 info整理成输入事件和按键参数KeyOption,设置订阅id并添加回调;
3.提供了off接口,先将环境变量env和回调信息 info整理成输入事件和按键参数KeyOption,取消订阅,移除回调接口;
6
m_i\frameworks\napi\
input_consumer\src\js_register_util.cpp
1.实现了一整套SetNameProperty(...)和GetNamePropertyxxx(...) 关于napi数据交换的接口;
2.添加删除回调接口;
3.由js_register_module.cpph中on启动订阅时,发送异步回调工作,构造一个work(按键监视work),启动一个异步回调工作队列;
7
m_i\frameworks\napi\
input_device\src\js_event_target.cpp
1.定义了 class JsEventTarget : public IInputDeviceListener,实现jsnapi 事件一系列操作;
2.操作包括了发送emit js设备、ids、支持的按键、键盘类型,注册取消监听、添加&移除回调,环境复位,向上发送信息OnCooperateMessage(...);
3.监听回调函数统一由InputManager接管;
4.发送emit每个对外函数都支持 promise和async工作方式;
8
m_i\frameworks\napi\input_device\
src\js_input_device_context.cpp
1.定义了一个输入设备上下文类 class JsInputDeviceContext;
2.实现了导出,开&关(对应监听注册、取消功能),获取设备ids、设备列表、设备信息、键盘类型和支持的按键等函数,调用JsInputDeviceManager类中对应的函数实现;
9
m_i\frameworks\napi\input_device\
src\js_input_device_manager.cpp
1.定义了Js输入设备管理类class JsInputDeviceManager : public JsEventTarget;
2..实现了监听注册、取消功能,获取设备ids、设备列表、设备信息、键盘类型和支持的按键等函数,调用InputManager类中对应的函数实现;
3.环境复位调用JsEventTarget类中的函数实现;
10
m_i\frameworks\napi\input_device\
src\js_util.cpp
1.定义了class JsUtil,对napi操作的二次封装;
2.包括使能,启停,发送消息;
3.定义了回调数据,回调信息和用户数据;
4.内部每个函数分为promise 和 async处理;
11
m_i\frameworks\napi\input_device\
src\native_register_module.cpp
注册了一个多模输入-设备模块到napi;
12
m_i\frameworks\napi\
input_device_cooperate\src\
js_event_target.cpp
1.定义了 JsEventTarget : public IInputDeviceCooperateListener,实现jsnapi 事件一系列操作;
2.操作包括了发送emit使能&启&停、状态获取操作,注册&取消监听回调,向上发送信息OnCooperateMessage(...),调用napi_resolve_deferred(...)等函数实现调用;
3.监听回调函数统一由InputManager接管;
13
m_i\frameworks\napi\
input_device_cooperate\src\
js_input_device_cooperate_context.cpp
1.定义了输入设备协同上下文类,class JsInputDeviceCooperateContext;
2.实现了使能&启&停、获取状态和注册&取消监听;
3.创建了该类上下文实例,导出了js接口和js数据;
4.构造时传入mgr_, 每个函数最终调用 JsInputDeviceCooperateManager类中对应的函数;
14
m_i\frameworks\napi\
input_device_cooperate\src\
js_input_device_cooperate_manager.cpp
1.定义了 js输入设备协同目标事件的管理类,class JsInputDeviceCooperateManager : public JsEventTarget;
2.实现了使能&启&停、获取状态、环境变量复位以及注册&取消监听;
3.每个函数调用了InputMgr(输入管理)类中对应的函数;
4.JsEventTarget中维护了一个监听管理列表;
15
m_i\frameworks\napi\
input_device_cooperate\src\js_util.cpp
1.定义了class JsUtil,对napi操作的二次封装;
2.包括使能&启&停,发送消息,获取状态;
3.定义了回调数据,回调信息和用户数据;
4.内部每个函数分为promise 和 async处理;
16
m_i\frameworks\napi\
input_device_cooperate\src\native_register_module.cpp
多模输入,输入设备协同模块注册,模块名为inputDeviceCooperate;
17
m_i\frameworks\napi\
input_event_client\src\js_register_module.cpp
1.注册多模输入-输入客户端napi模块;
2.申明了一个注入事件接口,获取名称属性值(GetNamedPropertyxxx(...)),构造按键项目,调用InputManager模拟输入按键事件;
18
m_i\frameworks\napi\
input_event_client\src\js_register_util.cpp
实现了一组 GetNamedPropertyxxx(...)函数;
19
m_i\frameworks\napi\input_monitor\
src\js_input_monitor.cpp
1.定义了输入事件消费监控类 class InputMonitor final : public IInputEventConsumer;
2.涵盖了启停,标记消费标志,设置监控id,设置回调函数,响应键盘、光标、轴向事件;
3.对应InputManager类中添加,移除,标记消费函数。
4.输入事件处理函数,根据光标源是触摸还是鼠标,在按下动作后标记消费状态为false;

1.定义了消费监控接口类class JsInputMonitor;
2.涵盖了启停,标记消费标志,接口是否匹配等函数;
3.调用InputMonitor进行启停标记监控;
4.启动一个线程处理事件队列,处理一个弹出一个;
5.键盘鼠标触摸事件调用js_input_monitor_util.cpph中的napi函数实现信息输出;
6.GetFuns(...)函数邦定了动作时间,窗口id,窗口大小,显示区大小,原始大小,设备id,显示区id;
20
m_i\frameworks\napi\input_monitor\
src\js_input_monitor_manager.cpp
1.定义了输入事件监控管理器类 class JsInputMonitorManager;
2.用JsInputMonitor列表管理,调用JsInputMonitor中对应函数实现添加&移除监控;
3.用napi_env map管理环境变量,实现添加&移除环境变量;
21
m_i\frameworks\napi\input_monitor\
src\js_input_monitor_module.cpp
1.注册多模输入之输入监控模块;
2.提供了on,off两个对外接口分别调用JsInputMonitorManager中添加,移除监控函数;
22
m_i\frameworks\napi\input_monitor\src\
js_input_monitor_util.cpp
实现了一整套SetNameProperty(...)和GetNamePropertyxxx(...) 关于napi数据交换的接口;
23
m_i\frameworks\napi\key_code\src\
js_key_code.cpp
1.导出336个keyCode键值接口,支持Export(...);
24
m_i\frameworks\napi\key_code\src\
native_register_module.cpp
多模输入,键盘keyCode模块注册;
25
m_i\frameworks\napi\key_event\
src\js_key_event.cpp
1.导出3个key Action动作接口(抬起,按下,取消),支持Export(...);
26
m_i\frameworks\napi\key_event\src\native_register_module.cpp
多模输入,键盘 keyEvent模块注册;
27
m_i\frameworks\napi\
mouse_event\src\js_mouse_event.cpp
1.定义了 class JsMouseEvent, 用于导出鼠标相关属性,类似linux属性树操作.
2.属性包括动作(取消,移动按下抬起开始轴向移动,结束轴向移动,更新轴向移动位置),按键(左,中,右,边,扩展,前,后,任务),轴(水平,竖直,捏合);
28
m_i\frameworks\napi\mouse_event\
src\native_register_module.cpp
注册native_register_module,模块名称为 多模输入鼠标事件;
29
m_i\frameworks\napi\pointer\
src\js_pointer_context.cpp
1.定义了 class JsPointerContext有关光标的上下文;
2.创建了上下文JsPointerContext以及实例napi_new_instance;
2.读写光标样式,速度,是否可见,函数实现调用了JsPointerManager中对应函数;
30
m_i\frameworks\napi\pointer\
src\js_pointer_manager.cpp
1.定义一个final 类class JsPointerManager ;
2.读写光标样式,速度,是否可见;
3.创建 struct AsyncContext 用于转换napi_env;
4.函数实现调用 InputManager;
31
m_i\frameworks\napi\pointer\
src\js_pointer_module.cpp
1.注册多模pointer模块 napi_module_register;
32
m_i\frameworks\napi\touch_event\src\js_touch_event.cpp
1.定义了class JsTouchEvent ,用于触摸事件的js导出;
2.包括动作(抬起,按下,移动,取消),触摸工具(关节,笔,刷子,喷笔,透镜等),触摸源(触摸屏,触摸板,笔等);
33
m_i\frameworks\napi\touch_event\
src\native_register_module.cpp
1.注册多模输入-触摸事件(touchEvent)napi模块;
34
m_i\frameworks\napi\touch_event\src\
native_register_module.cpp
多模输入的触摸事件 touchEvent注册,相关函数napi_module_register;
35
m_i\frameworks\proxy\event_handler\
include\input_handler_type.h
定义了处理器的常数,处理器类型(拦截,监控),事件类型(光标,按键);
36
m_i\frameworks\proxy\event_handler\
src\bytrace_adapter.cpp
1.定义了多模输入事件跟踪类class BytraceAdapter;
2.实现了多个StartBytrace(...),调用hitrace_meter.h中StartAsyncTrace(...),FinishAsyncTrace(...)的几个函数;
3.对按钮启停状态,事件启停启动状态和按键、点的拦截订阅运行启动状态进行跟踪;
37
m_i\frameworks\proxy\event_handler\src\client_msg_handler.cpp
1.定义了客户端消息处理器类 class ClientMsgHandler final : public MsgHandler<MmiMessageId, ClientMsgFun>;
2.键盘,触摸,订阅,拦截,监控,协同使用宏控编译对应事件处理,事件报告;协同是监听、状态和发送信息;
3.处理基本流程是解包,设置回调,调用InputXxxImpl中对应函数;
38
m_i\frameworks\proxy\event_handler\
src\input_device_cooperate_impl.cpp
1.定义了 输入设备协同实现类class InputDeviceCooperateImpl;
2.注册、取消协同监听,从监听列表添加和移除;
3.使能&启&停协同,获取协同状态和消息处理;
4.每个函数最终对应调用多模输入链接管理器MultimodalInputConnMgr的函数;
5.维护了一个协同事件map;
39
m_i\frameworks\proxy\event_handler\
src\input_device_impl.cpp
1.定义了 输入设备实现类class InputDeviceImpl;
2.注册、取消协同监听,从监听列表添加和移除;
3.获取输入设备的信息,id,按键,键盘类型处理;
4.每个函数最终对应调用多模输入链接管理器MultimodalInputConnMgr的函数;
40
m_i\frameworks\proxy\event_handler\
src\input_handler_manager.cpp
1.定义了输入处理器的管理类 class InputHandlerManager;
2.响应光标,按键事件,监控、拦截的链接,获取处理器的类型(拦截,监控),事件类型(光标,按键),优先级;
3.内部维护了一个处理器列表;
4.管理的都会调用 MultimodalInputConnectManager中的函数;
41
m_i\frameworks\proxy\event_handler\src\
input_interceptor_manager.cpp
1.定义了拦截管理器类class InputInterceptorManager final : public InputHandlerManager;
2.实现了增加拦截器和获取拦截器类型,直接调用基类InputHandlerManager中对应的函数;
42
m_i\frameworks\proxy\event_handler\
src\input_manager_impl.cpp
1.定义了 输入设备管理实现类class InputManagerImpl,内部会调用拦截监控过滤等其他管理器类,被InputManager调用;
2.注册、取消协同监听,在输入设备实现类InputDevImpl中从监听列表添加和移除;
3.添加事件过滤,消费监控,设置消费者和事件处理器,键盘事件的订阅取消,拦截和取消拦截,调用对应manager中的函数;
4.响应事件处理时,启动跟踪,事件改变时调度更高级别任务,没有改变时调用消费者对应函数;
5.每个功能函数最终对应调用多模输入链接管理器MultimodalInputConnMgr的函数;
6.如果调用模拟输入事件函数时,调用MultimodalEventHandler中的注入事件函数;
7.链接和取消anr观察者;

1.定义了struct MonitorEventConsumer : public IInputEventConsumer类,监控光标、按键、轴向三类事件;
43
m_i\frameworks\proxy\event_handler\
src\input_monitor_manager.cpp
1.定义了客户端内部监控管理器类class InputMonitorManager final : public InputHandlerManager ;;
2.直接调用基类InputHandlerManager 完成添加&移除监控;
3.调用多模输入连接器管理中事件消费标记函数;
44
m_i\frameworks\proxy\event_handler\
src\key_event_input_subscribe_manager.cpp
1.定义了按键事件订阅管理器类 class KeyEventInputSubscribeManager;
2.实现了订阅&取消,内部维护了一个订阅信息的集合;
3.链接功能是订阅信息存在时调用多模事件处理器的按键事件订阅函数;
45
m_i\frameworks\proxy\event_handler\
src\multimodal_event_handler.cpp
1.定义了一个多模事件处理器类 class MultimodalEventHandler;
2.宏控按键事件订阅&取消,注入事件;
3.宏控光标触摸事件的鼠标移动 ,光标事件注入;
4.调用多模输入链接管理器MultimodalInputConnMgr中对应函数;
5.初始化时订阅连接,监控连接,拦截连接;
46
m_i\frameworks\proxy\events\
include\event_log_helper.h
1.定义了多模输入事件打印类 class EventLogHelper;
2.实现了按键事件和光标事件的所有信息打印;
47
m_i\frameworks\proxy\
events\src\axis_event.cpp
1.定义了轴向事件类 class AxisEvent : public InputEvent;
2.定义了启停、更新、取消动作;
3.除过构造轴向事件函数意外,其他设置获取相应参数的函数都为空函数;
48
m_i\frameworks\proxy\
events\src\input_device.cpp
1.定义了输入设备类class InputDevice;
2.申明了键盘类型(字母键盘,数字键盘,手写笔键盘,远程键盘),输入设备类型(键盘,光标,触摸,平板工具,平板垫,手势,开&关,手柄);
3.关于事件id,名称,类型,总线,版本,产品,供应商,轴向信息,设备列表参数的操作;

1.内嵌了轴类信息类
class AxisInfo;
2.关于轴类型、最小值、最大值、分辨率,fuzz(噪声),flat(代替噪声值)参数的操作;
49
m_i\frameworks\proxy\events\
src\input_event.cpp
1.定义了输入事件类 class InputEvent ;
2.定义了事件类型(光标,轴向,按键),事件标志(拦截、监控);
3.关于事件类型id,事件,动作,显示id,窗口id,处理状态等的读写,另外支持了两个Parcel读写函数;

【源文件说明】(MMI)多模子系统文件说明.pdf

422.09 KB, 下载次数: 7

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论2

诚迈_雨哥

沙发 发表于 2023-12-8 17:54:06
提供了一个xlsx格式的文件,内容更加完善。

深开鸿_王石

发表于 2023-12-12 15:20  IP属地: - 中国江苏省 中国移动IDC

回复 wangyeyu01: 有没有对应具体哪个/dev/input的对照查看方式呢?

【1 条回复】

【源文件说明】(MMI)多模子系统文件说明.zip

34.52 KB, 下载次数: 6

多模子系统源文件说明

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部