Android 源码分析 - 传感器 - Native层

libgui

        源代码位于:frameworks/native/libs/gui。

        头文件位于:frameworks/native/include/gui。

        在显示部分涉及到libgui,其中与传感器相关的功能之前没有提及,主要涉及以下几个类:

 

        Sensor描述一个传感器设备。

        ISensorServer定义传感器服务接口。

        ISensorEventConnection定义与ISensorServer的连接,传感器事件通过BitTube传递。

        SensorEventQueue封装ISensorEventConnection,从BitTube读取事件。

        SensorManager封装ISensorServer,ISensorServer由Binder服务“sensorservice”实现。

libsensorservice

        源代码位于:frameworks/native/services/sensorservice。

         SensorDevice封装HAL传感器模块,其嵌套类Info保存了各个用户对一个传感器设备设置的batch参数(BatchParams),实际设置到HAL层的参数是其中的最小值。用户disable设备实际就是删除Info中batchParams的一项。

        SensorInterface代表一个传感器,定义了对传感器设备的操作虚接口。HardwareSensor派生实现了SensorInterface接口,内部保存Sensor结构体(使用其句柄),通过SensorDevice的接口实现其功能。

        SensorService实现ISensorServer接口,管理Sensor列表,用户连接SensorEventConnection。

成员

类型

说明

mSensorList

Vector<Sensor>

所有传感器,包括虚拟传感器

mUserSensorList

Vector<Sensor>

用户可见的传感器,包括部分虚拟传感器

mSensorMap

DefaultKeyedVector<int, SensorInterface*>

所有传感器的实现对象

mVirtualSensorList

Vector<SensorInterface *>

所有虚拟传感器

mActiveSensors

DefaultKeyedVector<int, SensorRecord*>

活动的传感器,以传感器句柄为索引,与该传感器所有活动连接

mActiveVirtualSensors

DefaultKeyedVector<int, SensorInterface*>

活动的虚拟传感器

mActiveConnections

SortedVector< wp<SensorEventConnection> >

所有活动(至少active一个传感器)的连接

mLastEventSeen

KeyedVector<int32_t, sensors_event_t>

以传感器句柄为索引,其最后一个事件

        SensorService继承Thread,通过内部线程调用SensorDevice的poll方法。

        SensorService保存每个传感器的最后一个事件,当有新的连接使用没有传感器,并且该传感器不属于连续事件类型时,将立即发送最后一个事件。

        SensorService::SensorEventConnection实现ISensorEventConnection接口,保存用户UID,维护一个BitTube管道,用于发送传感器事件给用户。

         Fusion使用角速度、加速度、磁场计算旋转矩阵。

        SensorFusion使用Fusion计算旋转矩阵,需要角速度传感器(陀螺仪,GYROSCOPE)、加速度传感器(ACCELEROMETER)、磁场传感器(MAGNETIC_FIELD)。SensorFusion使用mClients保存用户列表,在需要时激活。

        GravitySensor模拟重力加速度传感器。通过旋转矩阵的z列(第3列)乘以地球引力常量(GRAVITY_EARTH)计算。

        LinearAccelerationSensor模拟线加速度传感器。线加速度等于加速度减去重力加速度。

        RotationVectorSensor模拟旋转矢量传感器,旋转矢量即Fusion的Attribute。

        OrientationSensor模拟姿态传感器,通过旋转矩阵计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting Horse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值