请选择 进入手机版 | 继续访问电脑版

[经验分享] 【源文件说明】MSDP子系统文件说明 原创

诚迈_雨哥 显示全部楼层 发表于 2024-6-3 16:51:18

前言

我在阅读MSDP子系统时,详细整理了其目录下主要文件功能,期望对同学有所帮助。该子系统包含了拖拽模块、穿越模块和设备静止翻转感知模块。源文件目录在'base\msdp\device_status',文件基于2023年中的主线版本。

个别没有注释的文件将在之后补齐,请留言或者关注我!

序号 文件名称 文件功能描述
1 .\frameworks\js\napi\interaction\cooperate\src\js_cooperate_context.cpp 解析参数,当前异步接口分为AsyncCallback和promise
2 .\frameworks\js\napi\interaction\cooperate\src\js_cooperate_manager.cpp 创建回调信息,CallbackInfo。调用CreateCallbackInfo,当调用者传入的js fuction为nullpter时,创建创建promise对象,将deferred保存在CallbackInfo中。不为nullpter,创建一个napi引用并保存在CallbackInfo,以便后续在C++异步线程中能够回调该js fuction。
3 .\frameworks\js\napi\interaction\cooperate\src\js_event_cooperate_target.cpp napi数据返回js侧处理流程
4 .\frameworks\js\napi\interaction\cooperate\src\js_util_cooperate.cpp 封装napi数据转换的方法
5 .\frameworks\js\napi\interaction\cooperate\src\native_register_module.cpp 注册模块,app模块描述
6 .\frameworks\js\napi\interaction\coordination\src\js_coordination_context.cpp None
7 .\frameworks\js\napi\interaction\coordination\src\js_coordination_manager.cpp None
8 .\frameworks\js\napi\interaction\coordination\src\js_event_target.cpp None
9 .\frameworks\js\napi\interaction\coordination\src\js_util.cpp None
10 .\frameworks\js\napi\interaction\coordination\src\native_register_module.cpp None
11 .\frameworks\js\napi\interaction\drag\src\js_drag_context.cpp 1. 用户调用的js接口;<br>2. 下一步调用 js_drag_manager.cpp;
12 .\frameworks\js\napi\interaction\drag\src\js_drag_manager.cpp 1. 下一步调用 InteractionManager 类;<br>2. 实现了异步拖拽状态接收;
13 .\frameworks\js\napi\interaction\drag\src\native_register_module.cpp 注册 Drag js 模块;
14 .\frameworks\js\napi\src\devicestatus_event.cpp None
15 .\frameworks\js\napi\src\devicestatus_napi.cpp None
16 .\frameworks\js\napi\src\devicestatus_napi_error.cpp None
17 .\frameworks\native\interaction\src\coordination_manager_impl.cpp interaction_manager_impl.cpp->coordination_manager_impl.cpp-><br>devicestatus_client.cpp->devicestatus_srv_proxy.cpp-> <br>写参数,userData,服务端到客户端的,数据传递,通信
18 .\frameworks\native\interaction\src\drag_manager_impl.cpp 1. UI均会调用到此类,再调用 DeviceStatusClient 客户端接口;<br>2. 维护了三个监听器用于接收服务端上报的事件,注册和删除在此类完成。 <br>3. dragListener拖拽状态监听器组,拖拽状态改变时会被调用,通过 AddDraglistener() 添加进来,RemoveDraglistener()删除; <br>4. startDragListener 开始拖拽监听器在拖拽开始时传入,有拖拽结果或者图标隐藏时调用此监听器; <br>5. subscriptListener_ 拖拽光标样式改变监听器组,当拖拽光标样式改变会被调用;
19 .\frameworks\native\interaction\src\interaction_manager.cpp c侧接口
20 .\frameworks\native\interaction\src\interaction_manager_impl.cpp None
21 .\frameworks\native\interaction\test\unittest\src\interaction_drag_drawing_test.cpp None
22 .\frameworks\native\interaction\test\unittest\src\interaction_manager_test.cpp None
23 .\frameworks\native\src\bytrace_adapter.cpp None
24 .\frameworks\native\src\client.cpp None
25 .\frameworks\native\src\client.cpp 1. Socket 客户端,实现连接,重连,断开,注册取消连接;<br>2. 启、停,信息收、发; <br>3. 依赖 EventHandler 实现Fd监听、取消等操作; <br>4. 线程收到的信息会在 OnMsgHandler() 处理; <br>5. 和 socket_client.cpp 功能类似;
26 .\frameworks\native\src\devicestatus_agent.cpp None
27 .\frameworks\native\src\devicestatus_callback_proxy.cpp None
28 .\frameworks\native\src\devicestatus_callback_stub.cpp None
29 .\frameworks\native\src\devicestatus_client.cpp None
30 .\frameworks\native\src\fd_listener.cpp 和 socket_connection.cpp 功能类似;
31 .\frameworks\native\src\stationary_manager.cpp None
32 .\libs\src\algorithm\algo_absolute_still.cpp 1. 判断绝对静止的算法;<br>2. 只要位移在(7,11)区间判定为静止; <br>3. 上报状态发生ENTER和消失EXIT的状态;
33 .\libs\src\algorithm\algo_base.cpp 1. 三种状态算法从这个类继承;<br>2. 管理了注册、取消注册的回调函数以及采样数据、状态的打印;
34 .\libs\src\algorithm\algo_horizontal.cpp 1. 判断左右翻转的算法;<br>2. 只要倾斜角度在(80,110)区间判定为左右翻转; <br>3. 上报状态发生ENTER和消失EXIT的状态;
35 .\libs\src\algorithm\algo_vertical.cpp 1. 判断前后翻转的算法;<br>2. 只要倾斜角度在(160,180)区间判定为前后翻转; <br>3. 上报状态发生ENTER和消失EXIT的状态;
36 .\libs\src\datahub\sensor_data_callback.cpp 1. 向 Sensors模块注册上报回调接口SensorDataCallbackImpl(),有数据上报时在线程中给上层通知;<br>2. 上层订阅的Sensor事件(静止、翻转)的容器algoMap_,对回调进行管理,和事件发生时的通知; <br>3. 调用 Sensors模块的类之一;
37 .\libs\src\devicestatus_algorithm_manager.cpp 1. 加载、卸载真实Sensor库;<br>2. 调用 SensorDataCallback类的Sensor事件订阅; <br>3. 分别调用三个状态算法类; <br>4. 调用 Sensors模块类之一,例如获取传感器个数 GetAllSensors(); <br>5. 三个状态都是基于加速度计实现的;
38 .\libs\src\devicestatus_data_parse.cpp 1. 内部创建一个 device_status_data.json文件,虚拟Sensor上报的数据;<br>2. 如果已经存在时,解析这个json文件;
39 .\libs\src\devicestatus_msdp_mock.cpp 1. 作用等同于 AlgoMgr类,实现了一个虚拟传感器上报类;<br>2. Sensor数据从json文件中读取,开启一个线程,等间隔时间进行上报;
40 .\libs\test\unittest\src\device_status_algorithm_test.cpp 基于真实Sensor传感器数据的测试;
41 .\libs\test\unittest\src\device_status_datahub_test.cpp 参照AlgMgr测试 SensorDataCallback类功能;
42 .\libs\test\unittest\src\device_status_mock_test.cpp 基于虚拟Sensor传感器数据的测试;
43 .\services\communication\client\src\devicestatus_srv_proxy.cpp 拖拽、穿越和移动设备状态感知共用的proxy端
44 .\services\communication\service\src\devicestatus_srv_stub.cpp IsSystemServiceCalling():获取tid<br>CheckCooperatePermission(): ohos.permission.COOPERATE_MANAGER权限名效验 <br>读参数
45 .\services\delegate_task\src\delegate_tasks.cpp 1. 任务的同步、异步调度实现,包含几个重要参数: fds[2], TaskData, callback, promise,任务队列 tasks;<br>2. 对调度任务的管理; <br>3. 和 task_scheduler.cpp 功能类似;
46 .\services\device_manager\src\device.cpp None
47 .\services\device_manager\src\device_manager.cpp 服务端设备管理器,用于处理上下线键盘,鼠标设备的管理
48 .\services\device_manager\src\enumerator.cpp None
49 .\services\device_manager\src\monitor.cpp None
50 .\services\interaction\coordination\include\coordination_hotarea.h 1. 通过鼠标坐标判断处在哪个热区边缘(上、下、左、右),和哪个热区类型(左、右、上、下);<br>2. 热区范围 width 100,margin 200的窗口四周; <br>3. 判断完成后给热区监听者发消息;
51 .\services\interaction\coordination\src\coordination.cpp 1. 通过 CreateICoordination 创建协同类和上下文;<br>2. 激活、取消激活,获取状态时先构建事件,然后添加到协同事件管理器,最后调用SM对应接口; <br>3. 注册监听到协同事件管理器; <br>4.将服务端传入的参数存放在EventInfo;
52 .\services\interaction\coordination\src\coordination_device_manager.cpp 设备信息,设备而插拔初始化
53 .\services\interaction\coordination\src\coordination_event_handler.cpp 协同事件处理器,派发任务和根据名称删除任务,数据从服务端发往客户端
54 .\services\interaction\coordination\src\coordination_event_manager.cpp 1. 添加、删除协同事件到remoteCoordinationCallbacks_回调map容器中,下标对应 LISTENER, ENABLE, START, STOP, STATE;<br>2. 当对应的事件发生后向另一端发消息、状态; <br>3. 同过对比sess,将EventInfo中的数据添加到remoteCoordinationCallbacks_中
55 .\services\interaction\coordination\src\coordination_hisysevent.cpp 用HiSysEventWrite()将穿越每步操作和状态写入;
56 .\services\interaction\coordination\src\coordination_sm.cpp Init():键鼠穿越初始化<br>PrepareCooperate():添加多模监听,将键鼠穿越开关状态置为true <br>ActivateCooperate(): 打开软总线会话通道,保存remoteNetworkId。穿越开始前调->cooperate_state_free.cpp
57 .\services\interaction\coordination\src\coordination_softbus_adapter.cpp 跨设备通讯,阮总先适配器
58 .\services\interaction\coordination\src\coordination_state_free.cpp ActivateCooperate():本端设备通过软总线接口向对端设备发送消息->i_cooperate_state.cpp
59 .\services\interaction\coordination\src\coordination_state_in.cpp 跨设备穿越时穿入状态
60 .\services\interaction\coordination\src\coordination_state_out.cpp 跨设备穿越时穿出状态
61 .\services\interaction\coordination\src\coordination_util.cpp 通过包名 ohos.msdp.fusioninteraction 获取本端网络 ID,并将其作为字符串返回;
62 .\services\interaction\coordination\src\device_profile_adapter.cpp 1. 调用DeviceProfile 子系统,通过网络ID监听开关状态及Profile;<br>2. 主要完成了注册和监听,交互数据采用json格式;
63 .\services\interaction\coordination\src\distributed_input_adapter.cpp None
64 .\services\interaction\coordination\src\distributed_input_adapter.cpp 1. 调用分布式硬件输入 DistributedInputKit 类,实现启、停,准备、取消准备,注册、取消注册Session通信回调;<br>2. 以开始远端输入为例,创建kit回调类cb→保存上一级回调函数callback→开启远端输入→失败将保存DFX日志;
65 .\services\interaction\coordination\src\i_coordination_state.cpp 通过remoteNetworkId和originNetworkId判断本端和远端是否是已经配对链接.<br>如果第一次连接,保存数据,调用回调方法返回连接状态.OnPrepareDistributedInput() <br>成功:调用StartRemoteInput(),失败清空preparedNetworkId_,通过软总线给对端发送失败信息。 <br>如果已经连接,调用StartRemoteInput()->OnStartFinish():判断分布式启动成功或是失败。 <br>失败:NotifyRemoteStartFail():通过软总线向对端发送失败消息ACTIVATE_FAIL。 <br>成功:NotifyRemoteStartSuccess():通过软总线向对端发送成功消ACTIVATE_SUCCESS。 <br>UpdateState():更新穿越状态从STATE_FREE变为STATE_OUT(如果当前是STATE_IN,变为STATE_FREE)。 <br>调用多模鼠标显隐接口,当穿越状态为STATE_OUT,鼠标光标隐藏,当状态为STATE_IN,鼠标光标显示。将本端鼠标坐标通过软总线发现送到对端的虚拟节点中,再由多模调用虚拟设备接口上报鼠标事件。
66 .\services\interaction\drag\src\drag_data_manager.cpp 是 DragData 的管理器,提供对外存取接口;
67 .\services\interaction\drag\src\drag_drawing.cpp 1. 完成拖拽过程中的图片、动画绘制,动画则调用Rosen和so接口实现;<br>2. 拖拽开始,初始化DragData,DrawingInfo,将拖拽附加内容传递个多模,添加多模按键、Pointer事件监听或者拦截,绘制拖拽图形动画OnStartDragExt(),最后通知客户端拖拽开始; <br>3. 拖拽停止,删除多模按键、Pointer事件监听或者拦截,根据拖拽结果绘制默认动画或者定制动画,将目标窗口升至顶层,通知客户端拖拽停止; <br>4. 更新拖拽光标样式,在拖拽开始后有效,通知客户端新光标样式。DragDrawing中加载图片摄者节点给Rosen发消息,调用OnDragStyleExt()绘制动画; <br>5. 更新阴影图,在拖拽开始后有效,调用DragDrawing设置阴影图边界、位置参数,如果多选节点则调用Rosen播放动画; <br>6. 默认情况下拖拽成功、失败直接调用DragDrawing中的Success、Fail接口,InitVSync→动画so接口→启动线程播放动画→StartVsync; <br>7. 设置拖拽窗口隐藏、显示; <br>8. 更新预览风格图单图(阴影图)和多选图,支持动画和非动画,非动画就修改单张阴影图和多选图前景色、透明度、圆角半径和缩放系数,动画则调用Rosen动画,先背景后多选图; <br>9. 进出编辑区操作,设置偏置坐标,然后播放动画;
68 .\services\interaction\drag\src\drag_hisysevent.cpp 调用HiSysEventWrite 将拖拽模块关键操作、状态、结果、光标类型、拖拽类型保存到文件
69 .\services\interaction\drag\src\drag_manager.cpp 1. 服务端多拽的核心业务逻辑在此实现;<br>2. 订阅了系统能力中的EventHub,用于获取亮屏、息屏、锁屏和低电等系统事件; <br>3. 和多模,DragData,DragDrawing进行密切交互;
70 .\services\interaction\drag\src\event_hub.cpp 1. 被 DragManager类调用,statusListener_在 Init()订阅了这种系统感知能力,事件hub存放了系统事件;<br>2. DragAbilityStatusChange 从 SystemAbilityStatusChangeStub继承; <br>3. DragAbilityStatusChange 将 DragAbilityStatusChange注册在通用事件订阅器中; <br>4. 系统感知的事件类型如:前端运行、亮屏、息屏、锁屏、低电等事件; <br>5. 系统发生了新事件将自动调用 OnReceiveEvent()函数;
71 .\services\interaction\drag\src\state_change_notify.cpp 1. 被 DragManager类调用,变量名称为 stateNotify;<br>2. 定义了一个 map 容器 msgInfos,将通知(拖拽状态和拖拽光标样式)保存其中; <br>3. 通知信息不重复地添加;
72 .\services\native\src\devicestatus_dumper.cpp 重要操作和状态dump,日志相关
73 .\services\native\src\devicestatus_hisysevent.cpp 事件埋点日志
74 .\services\native\src\devicestatus_manager.cpp 1. 调用 DeviceStatusMsdpClientImpl类;<br>2. 给DeviceStatusService服务端提供移动感知服务;
75 .\services\native\src\devicestatus_msdp_client_impl.cpp 1. 加载真实或者虚拟的两个库,实现两套方法,一类函数含有Algo,另一类含有Mock;<br>2.调用真实 AlgoMgr类和 虚拟 DeviceStatusMsdpMock类方法;
76 .\services\native\src\devicestatus_service.cpp 1. 实现服务端设备状态服务,包含了 epoll的相关功能;<br>2. 对 设备管理器 devMgr,时钟管理器 timerMgr,拖拽管理器 dragMgr, 插件管理器 pluginMgr, Socket会话管理器 socketSessionMgr,设备状态管理器 devicestatusManager, DS_DUMPER 进行管理和协同事件管理器 COOR_EVENTMGR; <br>3. 开启一个任务代理器delegateTasks 进行异步任务调用, 和epoll 紧密相关;
77 .\services\native\src\stream_server.cpp 1. 添加会话,建立Socket通信链接,向指定Fd单发、群发信息;<br>2. 析构或者主动关闭通信,清除所有会话; <br>3. 会话管理;
78 .\services\timer_manager\src\timer_manager.cpp 1. 实现了一个时钟管理器;<br>2. 会被以下场景调用:CooperateSM::Init(),DeviceStatusService::EnableDevMgr(),DistributedInputAdapter::AddTimer(),DragManager::Init(),DragManager::OnDragUp(); <br>3. 和 调度中 timer_manager.cpp 功能相似;
79 .\tools\vdev\src\v_input_device.cpp 虚拟设备
80 .\tools\vdev\src\vdevadm.cpp 虚拟设备、注入事件的shell
81 .\tools\vdev\src\virtual_device.cpp 虚拟设备
82 .\tools\vdev\src\virtual_device_builder.cpp 虚拟设备构造器
83 .\tools\vdev\src\virtual_keyboard.cpp 虚拟键盘
84 .\tools\vdev\src\virtual_keyboard_builder.cpp 虚拟键盘构造器
85 .\tools\vdev\src\virtual_mouse.cpp 虚拟鼠标
86 .\tools\vdev\src\virtual_mouse_builder.cpp 虚拟鼠标构造器
87 .\tools\vdev\src\virtual_touchscreen.cpp 虚拟触摸屏
88 .\tools\vdev\src\virtual_touchscreen_builder.cpp 虚拟触摸屏构造器
89 .\utils\common\src\devicestatus_permission.cpp 服务权限检查
90 .\utils\common\src\util.cpp 获取线程id、时间戳、匿名字符串、文件扩展名等公共方法
91 .\utils\common\src\util_napi.cpp 获取取值类型
92 .\utils\common\src\util_napi_error.cpp 获取api错误信息
93 .\utils\common\src\utility.cpp 获取文件大小、属性、分组、是否存在、删除空格、删除尾部字符等公共方法
94 .\utils\ipc\src\circle_stream_buffer.cpp 实现了循环写数据;
95 .\utils\ipc\src\net_packet.cpp 1. 信息通过MakeData写入StreamBuffer,然后发送这条信息;<br>2. 被SocketSession调用; <br>3. 打包在 SendMsg() 时被调用;
96 .\utils\ipc\src\stream_buffer.cpp 读写清空流buffer
97 .\utils\ipc\src\stream_client.cpp 实现发送消息流,同时更新连接状态
98 .\utils\ipc\src\stream_session.cpp 1. SendMsg()调用send(fd,...)发送信息;<br>2. 会话和 fd, pid_, tokenType 密切绑定;
99 .\utils\ipc\src\stream_socket.cpp 1. Epoll的创建、关闭、等待和组包回调基本操作;<br>2. 把接收到的数据打包circBuf,调用回调函数; <br>3. 维系两个重要变量 自身 epollFd_ 和 通信 fd;

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

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

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

返回顶部