没有合适的资源?快使用搜索试试~ 我知道了~
首页G-Sensor工作流程
G-Sensor工作流程
需积分: 50 11 下载量 106 浏览量
更新于2023-03-16
评论
收藏 151KB DOCX 举报
G-Sensor工作流程,主要是讲上下层接口的关系,SensorService主要功能如下: 1) SensorService::instantiate创建实例对象,并增加到ServiceManager中,且创建并启动线程,并执行threadLoop 2) threadLoop从sensor驱动获取原始数据,然后通过SensorEventConnection把事件发送给客户端 3) BnSensorServer的成员函数负责让客户端获取sensor列表和创建SensorEventConnection
资源详情
资源评论
资源推荐
Android4.2 G-Sensor
工作流程
1. 简介
在了解 Sensor 工作流程以前,一直以为其事件是通过 Event Hub 来进行输送的,可是研究完 Android4.0 代
码之后,才发现自己错了。
其主要框架如下图所示:
2.功能模块
2.1 SensorManager.java
与下层接口功能:
1) 在 SensorManager 函数中
(1) 调用 native sensors_module_init 初始化 sensor list,即实例化 native 中的 SensorManager
(2) 创建 SensorThread 线程
2) 在类 SensorThread 中
(1) 调用 native sensors_create_queue 创建队列
(2) 在线程中 dead loop 地调用 native sensors_data_poll 以从队列 sQueue 中获取事件(float[] values = new
float[3];)
(3) 收到事件之后,报告 sensor event 给所有注册且关心此事件的 listener
与上层的接口功能:
1) 在 onPause 时取消 listener 注册
2) 在 onResume 时注册 listener
3) 把收到的事件报告给注册的 listener
2.2 android_hardware_SensorManager.cpp
实现 SensorManager.Java
中的 native 函数,它主要调用 SenrsorManager.cpp 和 SensorEventQueue.cpp
中的类来完成相关的工作。
2.3 SensorManager.cpp
[cpp]view plaincopy
1. classSensorManager:
2. publicASensorManager,
3. publicSingleton<SensorManager>
4. {
5. public:
6. SensorManager();//调用 assertStateLocked
7. ~SensorManager();
8. //调用 assertStateLocked,并返回 mSensorList
9. ssize_tgetSensorList(Sensorconst*const**list)const;
10.
11. //返回 mSensorList 中第一个类型与 type 一致的 sensor
12. Sensorconst*getDefaultSensor(inttype);
13.
14. //调用 mSensorServer->createSensorEventConnection 创建一个连接(ISensorEventConnection)
15. //并用此连接做为参数创建一个 SensorEventQueue 对象并返回rr
16. sp<SensorEventQueue>createEventQueue();
17.
18. private:
19. //DeathRecipientinterface
20. voidsensorManagerDied();
21. //调用 getService 获取 SensorService 客户端并保存在 mSensorServer 中rr
22. //调用 mSensorServer->getSensorList 获取 sensor 列表,并保存在 mSensors 和 mSensorList 中rr
23. status_tassertStateLocked()const;
24.
25. private:
26. mutableMutexmLock;
27. mutablesp<ISensorServer>mSensorServer;//SensorService 客户端rr
28. mutableSensorconst**mSensorList;//sensor 列表rr
29. mutableVector<Sensor>mSensors;//sensor 列表rr
30. mutablesp<IBinder::DeathRecipient>mDeathObserver;
31. }
[cpp]view plaincopy
1. classISensorEventConnection:publicIInterface
2. {
3. public:
4. DECLARE_META_INTERFACE(SensorEventConnection);
5.
6. virtualsp<SensorChannel>getSensorChannel()const=0;
7. virtualstatus_tenableDisable(inthandle,boolenabled)=0;
8. virtualstatus_tsetEventRate(inthandle,nsecs_tns)=0;
9. };
2.4 SensorService.cpp
SensorService 作为一个轻量级的 system service,它运行于 SystemServer 内,即在
system_init<system_init.cpp>调用 SensorService::instantiate();
SensorService 主要功能如下:
1) SensorService::instantiate 创建实例对象,并增加到 ServiceManager 中,且创建并启动线程,并执行
threadLoop
2) threadLoop 从 sensor 驱动获取原始数据,然后通过 SensorEventConnection 把事件发送给客户端
3) BnSensorServer 的成员函数负责让客户端获取 sensor 列表和创建 SensorEventConnection
SensorService 与客户端的接口定义如下:
[cpp]view plaincopy
1. classISensorServer:publicIInterface
2. {
3. public:
4. DECLARE_META_INTERFACE(SensorServer);
5.
6. virtualVector<Sensor>getSensorList()=0;
7. virtualsp<ISensorEventConnection>createSensorEventConnection()=0;
8. };
SensorService 定义如下:
[cpp]view plaincopy
1. classSensorService:
2. publicBinderService<SensorService>,//创建 SensorService 对象,并增加到 ServiceManager 中rr
3. publicBnSensorServer,//申明了 SensorService 与客户端(SensorManager)间的 binder 接口rr
4. protectedThread//线程辅助类,调用 run 创建并启动线程,然后在线程主函数内回调 threadLoop 函数,
5. //所以在使用它时,做一个派生,并根据需要重写 threadLoop 即可rr
6.
7. {
8. friendclassBinderService<SensorService>;
9.
10. staticconstnsecs_tMINIMUM_EVENTS_PERIOD=1000000;//1000Hz
11.
12. SensorService();
13. virtual~SensorService();
14.
15. /*
16. 在 addService 时,第一次构建 sp 强引用对象时,会调用 onFirstRef 函数r
17. 实现功能如下:r
18. 1)获取 SensorDevice 实例r
19. 2)调用 SensorDevice.getSensorList 获取 sensor_t 列表r
20. 3)根据硬件 sensor_t 创建 HardwareSensor,然后加入 mSensorList(Sensor)
21. 和 mSensorMap(HardwareSensor)中r
22. 4)根据硬件 sensor_t 创建对应的 senosr(如 GravitySensor),
23. 然后加入 mVirtualSensorList 和 mSensorList 中r
24. 5)mUserSensorList=mSensorList;
25. 6)run("SensorService",PRIORITY_URGENT_DISPLAY);运行线程,并执行 threadLoop
26. */
27. virtualvoidonFirstRef();
28.
29. //Threadinterface
30. /*
31. 1)调用 SensorDevice.poll 获取 sensors_event_t 事件r
32. 2)获取已经激活的 sensor 列表 mActiveVirtualSensors
33. 3)对每一个事件,执行 SensorFusion.process
34. 4)对每一个事件,执行 HardwareSensor.process(事件无变化,直接 copy)
35. 5)调用 SensorService::SensorEventConnection::sendEvents,把事件发r
36. 送给所有的 listener
37. */
38. virtualboolthreadLoop();
39.
40. //ISensorServerinterface
41. //返回 mUserSensorList
42. virtualVector<Sensor>getSensorList();
剩余25页未读,继续阅读
yunhai1008
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 2022年中国足球球迷营销价值报告.pdf
- 房地产培训 -营销总每天在干嘛.pptx
- 黄色简约实用介绍_汇报PPT模板.pptx
- 嵌入式系统原理及应用:第三章 ARM编程简介_3.pdf
- 多媒体应用系统.pptx
- 黄灰配色简约设计精美大气商务汇报PPT模板.pptx
- 用matlab绘制差分方程Z变换-反变换-zplane-residuez-tf2zp-zp2tf-tf2sos-sos2tf-幅相频谱等等.docx
- 网络营销策略-网络营销团队的建立.docx
- 电子商务示范企业申请报告.doc
- 淡雅灰低面风背景完整框架创业商业计划书PPT模板.pptx
- 计算模型与算法技术:10-Iterative Improvement.ppt
- 计算模型与算法技术:9-Greedy Technique.ppt
- 计算模型与算法技术:6-Transform-and-Conquer.ppt
- 云服务安全风险分析研究.pdf
- 软件工程笔记(完整版).doc
- 电子商务网项目实例规划书.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0