Android sensor 框架

一、框架图

1.应用层

App:这个是给手机软件来使用的。

2. framework层    

(1)SensorManager: 

作用:
    初始化并连接SensorService;
    对应用层提供接口,获取sensor类型和sensor数据;
    处理sensor传感器数据,转化成android可以识别的数据格式; 

(2)SensorService:

作用:
    根据平台动态加载hal层的库,初始化hal库;
    抓取底层数据根据需要向上转发sensor数据;

3.hal层

    是一套标准的接口,sensorHal是一个动态库,每当启动sensorService时,就会动态的加载sensorHal库,也就是sensorlib.so,根据不同的平台load不同的动态库。 这样就能根据不同平台的硬件设置来把这些库添加到系统中,让sensorSevice自动的匹配hal层,hal层又连接着底层驱动,也就是真正的sensor实体。

作用:
    封装底层接口,向上提供统一接口;
    打开sensor设备,提供相关操作函数接口;   

4.kernal层

    这些实体sensor在dev/input/目录生成一系列的设备节点,这些设备节点就是传感器设备节点,真正和硬件打交道的就是kernal。打交道的方式就是I2C,SPI加一些时钟以及一些IO的控制,这样就能拿到所有传感器的信息。

二、数据流程

       当应用层需要获取一个传感器的数据的时候,首先会拿到sensorManager,然后向sensorManager注册一个监听sensor的接口,这样sensorManager就会和sensorService建立通信。sensorService把收到的信息发送给sensorManager, 然后sensorManager通过一系列的回调接口通知上层应用,这样上层应用就能拿到具体的数值,这些数值是经过android系统处理过的数值。

       sensorService初始化的时候就挂接上所有的传感器设备,传感器发出来的值是自启的值,需要经过android系统进行转化才能被系统识别,拿到识别后的数据就会根据上层监听的个数来向监听接口发送消息,也就是发送数据,这样每一个sensor应用就会获取到数据。

猜你喜欢

转载自blog.csdn.net/weixin_41734758/article/details/129817080