我是靠谱客的博主 大意美女,最近开发中收集的这篇文章主要介绍MTK sensorServer层到HAL层、驱动层解析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


参考文章:Android硬件抽象层(HAL)概要介绍和学习计划  http://blog.csdn.net/luoshengyang/article/details/6567257

本人也是新手,不过看大牛写的例子感觉有点力不从心,本人还是通过Android源码来分析,在这里写这些东西一是给自己总结一下;二是自己也好记录一下自己的学习过程分享给大家。

我们这里首先从SensorServer.cpp开始分析:

(本人项目文件的路径:.frameworksnativeservicessensorserviceSensorServer.cpp)

1.enable()

在这里我们可以先去找enable()函数,在这里我们可以看出来其实就是调用了另外一个sensor全局量类型在封装层SensorDevice.cpp中

  if (actuateHardware) {
        ALOGD_IF(DEBUG_CONNECTIONS, "t>>> actuating h/w activate handle=%d enabled=%d", handle,
                 enabled);
        err = mSensorDevice->activate(
                reinterpret_cast
  
  
   
    (mSensorDevice), handle, enabled);
        ALOGE_IF(err, "Error %s sensor %d (%s)", enabled ? "activating" : "disabling", handle,
                 strerror(-err));

        if (err != NO_ERROR && enabled) {
            // Failure when enabling the sensor. Clean up on failure.
            info.removeBatchParamsForIdent(ident);
        }
    }

    // On older devices which do not support batch, call setDelay().
    if (getHalDeviceVersion() < SENSORS_DEVICE_API_VERSION_1_1 && info.numActiveClients() > 0) {
        ALOGD_IF(DEBUG_CONNECTIONS, "t>>> actuating h/w setDelay %d %" PRId64, handle,
                 info.bestBatchParams.batchDelay);
        mSensorDevice->setDelay(
                reinterpret_cast
   
   
    
    (mSensorDevice),
                handle, info.bestBatchParams.batchDelay);
    }
   
   
  
  

在进入sensorDevice.cpp中 我们可以看到这里对enable变量进行了判断并且如果是第一次的话,后面就可以省一些硬件操作,每个应用调用一次sensor都有有一个connetion(注解里面有相关说明的!)后面会对actuateHardware进行判断并进行对应操作。

现在到此,我们可以看出server层是用SensorDevice.cpp()进行的封装,然后我们开始进入HAL,在HAL一样和server层类似,先是在sensor.c中去调用封装层nusensor.cpp,在这里实现了HAL的具体调用device的API,在active()这里去调用poll_active(),这里代码就不去分析了,其实就是层层封装,到后面的具体实现就是那几个关键的函数!

在这server层到HAL层的封装中,我们可以看见函数的参数明显少了一个device类型参数,当然我们也是可以理解的,在server层是面向应用,一个device可能被好几个应用调用,所以必须得有device参数,而到HAL层中(就已经是有对应好了device),已经知道对应的device,也就不需要这个参数,所以我们也能越来越理解Google代码的设计思想了。



到这里我感觉其他的setDelay()其他什么的都是类似的原理,后面可以自己去理解,只不过是花的时间可能多一点,不过花时间去自己尝试就是最好的锻炼!相信你可以的!

今天收获最大的就是知道了整个流程的date和control的传递流程,和Google一层层的代码封装,



最后

以上就是大意美女为你收集整理的MTK sensorServer层到HAL层、驱动层解析的全部内容,希望文章能够帮你解决MTK sensorServer层到HAL层、驱动层解析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部