1 硬件工作原理
1.1 G-sensor主要管脚定义
上图是LIS3DHTR在TD_100中的原理图
l 电压:VDD:sensor的供电电源。
VDD_IO:sensor的IO电源。
l 中断:ACCEL_INT1
ACCEL_INT2:sensor的中断pin脚
l I2C:I2C_SCL
I2C_SDA:sensor和处理器通过I2C总线用I2C协议通信。
硬件上的正确连接才能确保sensor的正常工作。
具体详细的定义见原理图和datasheet。
1.2 Gsensor的工作原理
芯片会把感知的重力加速度分解在XYZ三个方向,经过模数转换通过I2C总线和处理器通信。
1.3 datasheet中Gsensor的重要寄存器
主要的是一些配置寄存器,需要通过他们来实现sensor在不同模式下的转换和一些功能设置。Gsensor的寄存器不是太多,可以参考datasheet。
2 软件目录结构
2.1 java层
Java层sensor的状态控制有SesnorService来负责, 它的java代码和JNI代码分别位于
l frameworks/base/services/java/com/android/server/SensorService.java
l frameworks/base/services/jni/com_android_server_SensorService.cpp
这两者文件sensorservice.java与com_android_server_SensorService.cpp相互对应。
在java层Sensor的数据控制有SensorManager来负责,它的java代码和JNI代码分别位于:
l frameworks/base/core/java/android/hardware/SensorManager.java
l frameworks/base/core/jni/android_hardware_SensorManager.cpp
同理
2.2 hardware层
Android对于Sensor的API定义在hardware/libhardware/include/hardware/sensor.h中,要求在sensor.so提供8个API函数(在第四部分会详细说明)
2.3 HAL层
l Vendor/marvell/dkb/libsensor目录下有lib_sensor.c和Android.mk
l vendor/marvell/generic/sensors-hal目录下有marvell sensors HAL层的实现
这一层的实现代码最后会在编译的过程中生成一个sensor.default.so.放在system/lib/hw下。
2.4 内核驱动层