android sensor hal 2.1初始化流程分析

一、SENSOR HAL 2.1

Sensors HAL 2.0 适用于搭载 Android 10 及更高版本的新设备和升级设备。Sensors HAL 2.0 基于Sensors HAL 1.0构建

但与 1.0 版有几个关键的区别,这使得它无法向后兼容。Sensors HAL 2.0 使用快速消息队列(FMQ)将传感器事件从 HAL 发送到 Android 传感器框架。

Sensors HAL 2.1 适用于搭载 Android 11 及更高版本的新设备和升级设备。Sensors HAL 2.1 是 Sensors HAL 2.0 的迭代升级版本,公开了HINGE_ANGLE传感器类型,并更新了各种方法来接受 HINGE_ANGLE 类型。

先梳理一下整体流程
在这里插入图片描述

二、HAL接口

我是做BSP部分,对上层不感兴趣,就直接从HAL层开始了,Sensors HAL 2.1 文档的主要来源位于 HAL 定义内,该定义位于:hardware/interfaces/sensors/2.1/ISensors.hal

1、初始化

Sensors HAL 必须先由 Android sensor framework初始化,然后才能调用。

frameworks/native/services/sensorservice/SensorDevice.cpp

从native层调用connectHidlService()连接service,再调用initializeSensorList();进行初始化

上代码:

SensorDevice::SensorDevice()
        : mHidlTransportErrors(20),
          mRestartWaiter(new HidlServiceRegistrationWaiter()),
          mEventQueueFlag(nullptr),
          mWakeLockQueueFlag(nullptr),
          mReconnecting(false) {
    if (!connectHidlService()) {
        return;
    }

    initializeSensorList();

    mIsDirectReportSupported =
            (checkReturnAndGetStatus(mSensors->unregisterDirectChannel(-1)) != INVALID_OPERATION);
}

connectHidlService中,会分别先去加载sensorhal2.1,失败后再去加载2.0,然后才是1.0。

初始化调用流程如下

SensorDevice::SensorDevice()

–>connectHidlService()

------>connectHidlServiceV2_1()

--------->V2_1::ISensors::getService()

----hidl—>hardware/interfaces/sensors/2.1/multihal/service.cpp ->new HalProxyV2_1();

---------------->HalProxy::HalProxy()

--------------------->getHandleForSubHalSharedObject() // 读取hals.comfig文件,并打开对应的so库。

--------------------->dlsym(handle, “sensorsHalGetSubHal_2_1”) // 返回sensorsHalGetSubHal_2_1函数指针,该函数功能:获取so版本,并返回sensor hal的实现的静态变量

--------->initializeHidlServiceV2_1()

–>initializeSensorList();

--------->mSensors->getSensorsList() //获取sensor list

--------->mSensors->activate() //激活sensor

注:在getService中,一般会在sensorhal2.1的目录中找到两个service,分别是default和multihal,multihal就是支持多个hal,default就只支持一个,所以一般都是走multihal这个,通过.mk文件中添加multihal的库用于编译,在getservice时,就会走multihal链路

数据流程上报流程后续有时间再分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值