深入浅出 - Android系统移植与平台开发(十四) - Sensor HAL框架分析之四
来源:互联网 发布:淘宝怎么抢秒杀 编辑:程序博客网 时间:2024/05/21 11:10
Sensor本地封装类SensorDevice
SensorDevice是在本地代码中SensorService对Sensor设备的抽象类型封装,它封装了传感器硬件的硬件操作,该类继承了Singleton类,通过getInstance方法获得单例模式设备操作对象:
@frameworks/base/services/sensorservice/SensorDevice.h
通过SensorDevice类的定义可看到它包含的属性和方法:
属性:
mSensorDevice:Sensor设备HAL层操作接口封装结构
mSensorModule:Sensor设备HAL硬件模块封装结构
mActivationCount:保存激活Sensor设备向量表
方法:
SensorDevice:构造方法
getSensorList:获得Sensor设备列表方法
poll:Sensor设备多路监听方法
activate:设备激活方法
setDelay:设备Sensor设备延迟方法
由前面分析可知,SensorDevice是单例模型,其构造方法仅会调用一次:
@frameworks/base/services/sensorservice/SensorDevice.cpp
在SensorDevice构造方法里调用HAL架构的hw_get_module来获得Sensor设备模块,之后调用sensors_open这个工具函数,打开Sensor设备模块(调用其methods->open函数指针),返回Sensor设备的操作接口(这些接口在HAL层实现),保存在mSensorDevice中,调用Sensor模块的get_sensors_list方法获得传感器列表,然后依次激活这些设备并且添加到mActivationCount设备信息向量中。
Sensor HAL模块代码及打开模块工具函数sensors_open:
@hardware/libhardware/include/hardware/sensors.hSensorDevice其它几个方法比较简单:
由这几个SensorDevice的方法可知,其具体的实现全部由mSensorDevice 封装的设备操作接口函数实现,这些设备操作接口在HAL层实现,其实SensorDevice只是SensorService的设备操作对象,封装了设备的操作,而这些操作实际“干活的”的是HAL层代码。
一路分析过来,已经到了HAL层了,我们回顾下前面所学的东西。
让我们从Java应用层到框架层再到本地代码来总结下:
1. Android的应用程序调用getSystemService方法获得SensorManager对象,该方法实现在ContextImpl.java中,它是Activity的抽象父类Context的实现类。
2. 在应用程序(Activity)初始化时调用registerService创建并注册SensorManager
3. 创建SensorManager
4. 在SensorManager的构造方法中,调用了本地方法:nativeClassInit(),它用来初始化了Java对象Sensor在本地的引用,方便本地代码对Java对象操作。
5. 在SensorManager的构造方法中,调用sensors_module_init()来创建SensorManager本地对象。
8. 调用sensors_module_get_next_sensor()方法,通过nativeClassInit中初始化的Sensor引用填充Sensor设备列表,返回给Java框架层。
12. 将sensors_module_get_next_sensor()获得的设备列表保存在sFullSensorsList中。
13. 创建SensorThread线程准备监听Sensor硬件事件变化。
14. 应用程序通过getDefaultSensor来获得指定类型传感器的对象
16. 通过registerListener注册Sensor监听器。- 深入浅出 - Android系统移植与平台开发(十四) - Sensor HAL框架分析之四
- 深入浅出 - Android系统移植与平台开发(十四) - Sensor HAL框架分析之四
- 深入浅出 - Android系统移植与平台开发(十四) - Sensor HAL框架分析之四
- 深入浅出 - Android系统移植与平台开发(十四) - Sensor HAL框架分析之四
- 深入浅出 - Android系统移植与平台开发(十四) - Sensor HAL框架分析之四
- 深入浅出 - Android系统移植与平台开发(十二) - Sensor HAL框架分析之二
- 深入浅出 - Android系统移植与平台开发(十三) - Sensor HAL框架分析之三
- 深入浅出 - Android系统移植与平台开发(十二) - Sensor HAL框架分析之二
- 深入浅出 - Android系统移植与平台开发(十三) - Sensor HAL框架分析之三
- 深入浅出 - Android系统移植与平台开发(十二) - Sensor HAL框架分析之二
- 深入浅出 - Android系统移植与平台开发(十三) - Sensor HAL框架分析之三
- 深入浅出 - Android系统移植与平台开发(十二) - Sensor HAL框架分析之二
- 深入浅出 - Android系统移植与平台开发(十二) - Sensor HAL框架分析之二
- 深入浅出 - Android系统移植与平台开发(十三) - Sensor HAL框架分析之三
- 深入浅出 - Android系统移植与平台开发(十三) - Sensor HAL框架分析之三
- 深入浅出 - Android系统移植与平台开发(十三) - Sensor HAL框架分析之三
- 深入浅出 - Android系统移植与平台开发(十二) - Sensor HAL框架分析之二
- 深入浅出 - Android系统移植与平台开发(十二) - Sensor HAL框架分析之二
- s3c24xx中断号(非向量中断)浅析
- pod安装失败,Operation not permitted - /usr/bin/pod
- 新安装的Centos 7找不到hgfs
- Android 性能优化 二 TraceView工具的使用
- Android自定义弹出框开发-生成Window容器
- 深入浅出 - Android系统移植与平台开发(十四) - Sensor HAL框架分析之四
- 【Linux学习笔记】获取文件属性 — stat()、fstat()、lstat()小结
- Spring MVC整理系列(05)————Spring MVC配置解析及整合SpriSpring MVC之@ModelAttribute、@SessionAttributes以及Model的使用介绍
- Android ViewDragHelper完全解析 自定义ViewGroup神器
- 程序、任务、进程和线程的联系与区别
- CornerStone上传静态库(.a文件)
- file_get_contents 无法请求微信https接口的问题
- Hadoop家族系列文章
- mybatis框架(分页的实现)