- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
android_G_ALS_PS_sensor_上层到底层流程
Sensor包括 G –sensor P-sensor AL-sensor等所有手机使用的传感器,都是由sensormanager 来管理,APP 通过registerlistener 与unregisterlistener 来注册监听与去监听来使用相应的sensor.通过sensor Event 来读取sensor 的数据。从而控制所需要的功能。代码位置在/framework/base/core/java/android/hardware/SensorManager.javaunregisterListener(Object listener);registerListener(SensorEventListener listener, Sensor sensor, int rate, Handler handler);传递的SensorEventListener 来接收底层传来的数据变化。在注册监听的函数里面会调用将sensor enable 函数,如下 private boolean enableSensorLocked(Sensor sensor, int delay) { boolean result = false; for (ListenerDelegate i : sListeners) { if (i.hasSensor(sensor)) { String name = sensor.getName(); int handle = sensor.getHandle(); result = sensors_enable_sensor(sQueue, name, handle, delay);//JNI 调用接口 break; } } return result;在JNI 层,代码位置为/framework /base/core/jni/ android_hardware_SensorManager.cpp代码中。APP 通过 sensors_data_poll 函数来读取event中的数据,对数据进行处理,形成相应的功能。在 SensorManager中会打开一个线程一直在调用此函数,查询sensor数据或者状态是否有改变。代码中调用的read waitForeEvent 方法都是在SensorEventQueue 中实现的。从JNI调用的打开关闭函数,从代码中可以看到时SensorEventQueue 类中的enable Disable 方法。再接着往下调用时ISensorEventConnection.cpp中的方法,代码位置在/framework/base/libs/gui/.以上都是client端的层层调用。在android中程序架构使用C-S 即客户端(client)—服务端(service)。2者通过BINDER 相互连接。在enableDisabLe函数中的 remote()-transcact 函数就是通过binder 将数据传送到service端,这样做的好做,降低程序的低耦合性,使用上层界面更加流程,而不受调用底层功能相关接口的束缚。SensorService.cpp代码位置为:/framewore/base/services/sensorservice/其中的sensor-activate(connection.get(), true)函数是调用流程通往底层的接口。代码位置为/framework/base/services/sensorservices/SensorInterface.cpp代码位置/framework/base/services/sensorservices/SensorDevice.cpp在SensorDevice层,在activate函数中会调用到 HAL层的sensor 的activate函数。 Info info( mActivationCount.editValueFor(handle) );int32_t count(info.count);上面的count是上层不同sensor对应的enable 的count,相当于做了保护的功能。记录了上层sensor 的打开次数。每个Sensor都有自己的COUNT值,彼此不冲突。C=android_atomic_inc(count)C=android_atomic_dec (count)返回之前的后,再将count加1 或减1 操作。以上2个函数是原子操作,对共享内存的操作加的同步措施。
您可能关注的文档
最近下载
- 学堂在线网课《生活英语读写》课后作业单元考核答案.docx VIP
- 2025年第42届全国中学生物理竞赛预赛试题(学生版+解析版) .pdf VIP
- 安全牛:API安全技术应用指南(2024版).pdf VIP
- 《NB 35074-2015 水电工程劳动安全与工业卫生设计规范》.pdf
- 2024年浙江省中考统考科学试卷试题真题(含答案解析).pdf VIP
- 《吴门验方》学习笔记.docx VIP
- 新目标大学英语-《综合教学教程》第四册(WELearn答案解析).DOC VIP
- 几何画板在小学数学教学中的应用.pdf VIP
- The Crucible《激情年代(1996)》完整中英文对照剧本.docx VIP
- 2025年河南省高考物理试卷(含答案解析).docx
文档评论(0)