没有合适的资源?快使用搜索试试~ 我知道了~
首页android平台sensor从底层到上层流程介绍.doc
非常详细的sensor流程整理总结,图文结合。值得从事android hal层开发的人一看。 从这个图来看Sensor的架构还是非常的清淅, 黄色部分表示硬件,它要挂在I2C总线上 红色部分表示驱动,把驱动注册到Kernel的Input Subsystem上,然后通过Event Device把Sensor数据传到HAL层,准确说是HAL从Event读 绿色部分表示动态库,它封装了整个Sensor的IPC机制,如SensorManager是客户端,SensorService是服务端,而HAL部分是封装了服务端对Kernel的直接访问 蓝色部分就是我们的Framework和Application了,JNI负责访问Sensor的客户端,而Application就是具体的应用程序,用来接收Sensor返回的数据,并处理实现对应的UI效果,如屏幕旋转,打电话时灭屏,自动调接背光(这三个功能的具体实现会在以后分析)
资源详情
资源评论
资源推荐

在这个系列的文章我们只是为了讲清楚 Sensor 框架的设计和工作原理基于
4.0,4.0 以下的代码有所区别,尤其是 2.2 以下根本就没有 Binder 架构,不
讲驱动,也不讲具体的某一个应用该怎么处理 Sensor 的数据。
一、整体的架构:
从这个图来看 Sensor 的架构还是非常的清淅,
黄色部分表示硬件,它要挂在 I2C 总线上
红色部分表示驱动,把驱动注册到 Kernel 的 Input Subsystem 上,然后通过
Event Device 把 Sensor 数据传到 HAL 层,准确说是 HAL 从 Event 读
绿 色 部 分 表 示 动 态 库 , 它 封 装 了 整 个 Sensor 的 IPC 机 制 , 如
SensorManager 是客户端,SensorService 是服务端,而 HAL 部分是封装
了服务端对 Kernel 的直接访问
蓝色部分就是我们的 Framework 和 Application 了,JNI 负责访问 Sensor 的
客户端,而 Application 就是具体的应用程序,用来接收 Sensor 返回的数据,
并处理实现对应的 UI 效果,如屏幕旋转,打电话时灭屏,自动调接背光(这三
个功能的具体实现会在以后分析)

相关代码:
从 HAL 到 Framework:
Framework 部分:
frameworks/base/core/java/android/hardware/SensorManager.java
frameworks/base/core/jni/android_hardware_sensorManager.cpp
下 面 的 代 码 会 生 成 到 : libgui.soframeworks/base/libs/gui/
SensorManager.cpp
frameworks/base/libs/gui/SensorEventQueue.cpp
frameworks/base/libs/gui/SensorChannel.cpp
frameworks/base/libs/gui/Sensor.cpp
下面的代码会生成:libsensorservice.so
frameworks/base/services/sensorservice/SensorService.cpp
frameworks/base/services/sensorservice/SensorDevice.cpp
HAL 部分:这部分代码最终会生成 sensor.default.so 到/system/lib/hw/
hardware/libhardware/include/hardware/Sensors.h
device/qcom/msm7627a/libsensors/Sensors.cpp
device/qcom/msm7627a/libsensors/SensorBase.h
device/qcom/msm7627a/libsensors/AccSensor.cpp
device/qcom/msm7627a/libsensors/ProximitySensor.cpp
device/qcom/msm7627a/libsensors/LightSensor.cpp
device/qcom/msm7627a/libsensors/TmdSensor.cpp
device/qcom/msm7627a/libsensors/MagnetoSensor.cpp
device/qcom/msm7627a/libsensors/GyroSensor.cpp
device/qcom/msm7627a/libsensors/InputEventRead.h
device/qcom/msm7627a/libsensors/InputEventRead.cpp
Drivers:
P-Sensor:
device/qcom/msm7627a/libsensors/Tmd2771.h
kernel/drivers/misc/Tmd2771.c

(从这个代码路径大家可以看出我用来分析的代码是高通 7627a 平台的,
和 Google 原生代码没什么差别,而 MTK 的代码差别就大了,从 HAL 层开始
完全不一样。)
我们还是列一下 Android 一般有哪些 Sensor 吧!
AccelerometerSensor
MagneticSensor
OrientationSensor
ProximitySensor
LightSensor
Gyro
这是我们最常见手机上有的 Sensor,不过一般低端手机是没有 Gyro 的,而 A
Sensor 用的并不是三轴的而是两轴。
二、应用举例:
[java]view plain copy print ?
1 SensorManager sensorManager =
(SensorManager)getSystemService(Context.SENSOR_SERVICE);
2 Sensor accSensor =
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER)
;
3 sensorManager.registerListener(this, accSensor,
SensorManager.SENSOR_DELAY_NORMAL);
4 sensorManager.unregisterListener(this, accSensor);
5 //然后在当前 Activity 中实现以下的两个函数
6 public void onSensorChanged(SensorEvent event)
7 public void onAccuracyChanged(Sensor sensor, int accuracy)
三、SensorService
服务程序启动,它是由 SystemManager 启动起来的:
frameworks/base/cmds/system_server/library/system_init.cpp

[cpp]view plain copy print ?
8 property_get("system_init.startsensorservice", propBuf, "1");
9 if (strcmp(propBuf, "1") == 0) {
10 // Start the sensor service
11 SensorService::instantiate();
12 }
整个 C/S 通信的架构图:
剩余17页未读,继续阅读















weixin_40899941
- 粉丝: 3
- 资源: 6
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制

评论0