android sensor 框架分析---sensor native分析

6,sensor native分析

获取sensor数据除了android上层进行开发之外,还可以直接进行native开发。

6.1 开发说明

初始化,

sensorManager = ASensorManager_getInstance(); //获取AsensorManager对象
 //设置加速度的值
accelerometer = ASensorManager_getDefaultSensor(sensorManager, ASENSOR_TYPE_ACCELEROMETER);
  //获取Alooper对象
looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);
// 获取AsensorEventQueue对象
accelerometerEventQueue = ASensorManager_createEventQueue(sensorManager, looper,
            LOOPER_ID_USER, NULL, NULL);
auto status = ASensorEventQueue_enableSensor(accelerometerEventQueue, accelerometer);
//设置sensor的频率, SENSOR_REFRESH_PERIOD_US为 int值,单位为us。
status = ASensorEventQueue_setEventRate(accelerometerEventQueue, accelerometer,
        SENSOR_REFRESH_PERIOD_US);

获取一组sensor的值,sensor组的大小和频率有关。

ASensorEvent event;
        float a = SENSOR_FILTER_ALPHA;
        float x = (float)sensorDataFilter.x;
        float y = (float)sensorDataFilter.y;
        float z = (float)sensorDataFilter.z;
        while (ASensorEventQueue_getEvents(accelerometerEventQueue, &event, 1) > 0) {
            sensorDataFilter.x = a * event.acceleration.x + (1.0f - a) * sensorDataFilter.x;
            sensorDataFilter.y = a * event.acceleration.y + (1.0f - a) * sensorDataFilter.y;
            sensorDataFilter.z = a * event.acceleration.z + (1.0f - a) * sensorDataFilter.z;
            LOGI("JNIresume update");
        }

6.2 分析

代码路径如下,

/frameworks/base/native/android/

主要论述下设置sensor的参数值,例如设置频率, ASensorEventQueue_setEventRate的流程图,然后论述下获取数据的

ASensorEventQueue_getEvents详细流程。

6.2.1setEventRate分析

调用流程图如下,

android sensor 框架分析---sensor native分析_第1张图片

6.2.2 getEvents分析

sensor.cpp的ASensorEventQueue_getEvents方法如下,

ssize_t ASensorEventQueue_getEvents(ASensorEventQueue* queue,
                ASensorEvent* events, size_t count)
{
    ssize_t actual = static_cast(queue)->read(events, count);
    if (actual > 0) {
        static_cast(queue)->sendAck(events, actual);
     }
    return actual;
}

直接调用SensorEventQueue的read方法读取管道中的数据,具体的流程和5.3小节完全一样。

你可能感兴趣的:(---【sensor框架分析】)