Android Sensor 代码流程简介
如今的传感器被越来越多用到设备开发当中,今天我们就来讲解下Qualcomm DragonBoard 410c的sensor架构,本篇主要基于Android5.1.1 来介绍sensor的Framework ,JNI,HAL以及lib,基于mma7660.c驱动的源码分析。
一:Framework分析
我们先来分析SystemSensorManager源码。
1.SystemSensorManager构造函数
public SystemSensorManager(Context context,Looper mainLooper) {
mMainLooper = mainLooper;
mTargetSdkLevel =context.getApplicationInfo().targetSdkVersion;
synchronized(sSensorModuleLock) {
if (!sSensorModuleInitialized) {
sSensorModuleInitialized =true;
nativeClassInit();
// initialize the sensor list
final ArrayList<Sensor>fullList = sFullSensorsList;
int i = 0;
do {
Sensor sensor = newSensor();
i = nativeGetNextSensor(sensor,i);
if (i>=0) {
//Log.d(TAG,"found sensor: " + sensor.getName() +
// ", handle=" +sensor.getHandle());
fullList.add(sensor);
sHandleToSensor.append(sensor.getHandle(),sensor);
}
} while (i>0);
}
}
}
构造函数接收Context和looper参数。理解这两个参数很重要,后面在讲到传感器数据读取时就是利用主线程的looper来读取数据(这和Android5.0之前创建线程读取数据不同)。
构造函数先保留Con