一:整体框架


如上图所示:MTK 的senor 架构从大框架上分为 AP侧 与SCP 侧AP 侧 由mtk-Hal 层和 kernel 组成,其主要思想在于实现了一个HfManager 完成了对多个sensor 的control 处理由一个.cpp 处理。这个也是arch 2 区别于arch 1 的一大改变, (注:arch 1 为每一个sensor 的实现由单独的cpp 在kernrl 有单独的.c)
SCP 侧可以理解为 qcom 平台的slpi侧:SCP(Tinysys)协处理器负责传感器和音频相关功能以及其他定制功能。MTK SCP选择FreeRTOS作为操作系统,CHRE是处理传感器相关操作的专门任务FreeRTOS。

二:具体流程简介

AP-HAL:

(1)init & control flow


init flow 函数调用图

  1. 路径:vendor/mediatek/proprietary/hardware/sensor
  2. 进入到2.0
    hal 层的最主要的实现就在 core 和 hal 两个folder 下
  3. 进入hal

    这一层就是MTK 的hal,入口就在:sensors.cpp

    native 通过sensors.cpp 提供的方法 调用如下:

    在context 中 对不同的sensor type 分成了如上三个通道:(对比arch 1 在context 这里 的下一步直接是每个不同的senor,为每一个sensor type 提供了一个cpp去实现)
    根据MTK hal层的这三个channel 划分规则我觉得不够明显,因为基本上项目囊括的大部分sensortype 都在OriginChannel ,基本思路就是如字面解释,mag 相关的fusion sensor 放在fusion channel,wakeup 的目前只有step_detector
    以任意channle 的active 流程继续追下去:

    这时候就可以看到mtk 在hal层封装的hfManager 我们进入相关文件中
  4. 进入core

    文件下的HfManager.cpp 主要是实现上层channel 的cmd,然后下发到kernel 对应的hfmanager
    而HfManagerWapper.cpp 主要是提供一个C 的api 接口供调用,这个接口就是我们sensor-cali 校准工具与MTK hal的重要接口

我们以前文的originchannel 的 active 为例子,梳理下:

  1. 在hfmanager 的构造函数中:

    我们可以看到hal层的hfmanager 通过打开 kernrl的hf_manager节点,保存fd
  2. active

    通过构造函数的的mfd ,使用cmd 为HF_MANAGER_SENSOR_DISABLE/HF_MANAGER_SENSOR_ENABLE 用IO control的方式将 上层的active 下发到kernel 对应节点

(2)data flow

与上面的control flow 一样可以参照这个这个图:

  1. sensors.cpp

    hal层入口提供的sensoes_module_methods 中的open 函数内实现了init_sensors
    可以看到将poll_poll的实现赋给了hw_device_t.poll

    其调用mSensorManager→pollEvent
  2. sensorsmanager.cpp

    紧接着调用 mSensorContext→pollEvent
  3. sensorcontext.cpp – originchannel.cpp

    到这里通过区分不同不同channel 调用readevent

    在这里我们可以看到一个对象Hflooper 这个就是hfmanager 为上报数据而封装的
  4. HfManager.cpp

    走到hal层的最后一步,可以看到这里通过read 节点的方式,从kernel 获取到event 进行处理

    处理流程首先根据不同的event_type 和sensortype 做区分,这里通过switch case 列出了所有的sensortype,比较长。
    最重要的是,在这个处理流程把从kernel read 的hf_manager_evet 数据转换填充到android 标准的data sensors_event_t

    control_flow&data_flow函数调用图
    至此 mtk 平台的hal层 sensor 流程结束

MTK 平台sensor arch 介绍-hal的更多相关文章

  1. MTK 平台sensor arch 介绍-scp

    架构介绍 路径:vendor/mediatek/proprietary/tinysys/scp 1.[build]编译相关 2.[driver]scp 的driver,I2C,power,eint 3 ...

  2. MTK 平台上查询当前使用的摄像头模组及所支持预览分辨率

    1,MTK 平台如何查询当前使用的是哪颗摄像头及相关的模组信息? 在该目录下可以查到当前平台及相关项目的配置文件 ProjectConfig.mk \ALPS.JB.MP.V1_W_20120919\ ...

  3. MTK平台Android项目APK预置方案

    项目开发中,通常需要向系统中预置一些APK,这里简单介绍一下MTK平台预置APK的方法. 需要预置的apk可以放置在目录:vendor/mediate/${Project}/artifacts/out ...

  4. andorid之摄像头驱动流程--MTK平台

    原文地址:andorid之摄像头驱动流程--MTK平台 作者:守候心田 camera成像原理: 景物通过镜头生产光学图像投射到sensor表面上,然后转为模拟电信号,经过数模变成数字图像信号,在经过D ...

  5. Android8.1 MTK平台 SystemUI源码分析之 网络信号栏显示刷新

    SystemUI系列文章 Android8.1 MTK平台 SystemUI源码分析之 Notification流程 Android8.1 MTK平台 SystemUI源码分析之 电池时钟刷新 And ...

  6. MTK 虚拟 sensor bring up (pick up) sensor2.0

    pick up bring up sensor2.0 1.SCP侧的配置 (1) 放置驱动pickup.c (2) 添加底层驱动文件编译开关 (3) 加入编译文件 (4) 增加数据上报方式 (5)修改 ...

  7. 关于MTK平台SIM-ME Lock的配置方案

    针对一些运营商的锁网需求,MTK平台已经对其有很好的支持.绝大多数的海外需求可以通过直接配置相关文件来完成.这里简单描述一下配置方法,不做原理分析. 相关数据结构分析: Modem中与SML锁网配置相 ...

  8. 关于MTK平台CC相关的Log查询

    关于MTK平台CC相关的Log查询 在外场问题中,经常会出现通话相关的故障.这里简单总结一下通话相关log的分析点: 主叫方:主叫方,是指主动发起通话的一方. 初步定位问题, 用户发起通话时,AP端的 ...

  9. SNF快速开发平台--规则引擎介绍和使用文档

    设计目标: a) 规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b) 能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c) 运算速度 ...

随机推荐

  1. Android:Unable to find explicit activity class报错

    错误:Unable to find explicit activity class 原因:没有给activity在AndroidManifest.xml中注册 解决办法: 在AndroidManife ...

  2. 华为交换机Stelnet ssh/rsa验证模式下16进制公钥生成方法

    1.生成秘钥 需要在你自己电脑上生成 执行下面命令,默认生成位置是~/.ssh ssh-keygen -t rsa -b 1024 -f yourkeyname -C "备注" 参 ...

  3. 基于PromiseA+规范实现一个promise

    实现如果下规范的promise Aplus规范 1,promise是一个类:有三个状态 pending/等待态 fulfilled/成功态 rejected/失败态 2,promise默认执行器立即执 ...

  4. 通过一段代码理解es6继承;

    class animal{ constructor(props){ this.name = 'xiaoniao' || props.name } eat(){ console.log(this.nam ...

  5. 如何得到个性化banner

    介绍 有时候用一些脚本工具,会有一些由其他字符组成的字符.(如下面这个我还在写的) 使用 kali自带了这个工具 -- figlet. figlet AuToIP 就可以得到上面的字符啦! 另外如果想 ...

  6. 2021年Java后端技术知识体系

    -----2021/1/22

  7. 在vue项目中配置webpack

    首先我们来看一下使用Vue-cli2与Vue-cli2之后的版本(这里以Vue-cli4版本为例)创建项目目录结构的不同: Vue-cli2(左图)与Vue-cli4(右图)创建项目的目录 从上图可以 ...

  8. Angular中directive——scope选项与绑定策略,这个也经常迷惑的。

    开门见山地说,scope:{}使指令与外界隔离开来,使其模板(template)处于non-inheriting(无继承)的状态,当然除非你在其中使用了transclude嵌入,这点之后的笔记会再详细 ...

  9. JavaScript の querySelector 使用说明

    本文记录,JavaScript 中 querySelector 的使用方法.小白贡献,语失莫怪. // 两种 query 的 method (方法) document.querySelector(se ...

  10. Java 线程池四种拒绝策略

    jdk1.5版本新增了 JUC 并发包,其中一个包含线程池. 四种拒绝策略: 拒绝策略类型 说明 1 ThreadPoolExecutor.AbortPolicy 默认拒绝策略,拒绝任务并抛出任务 2 ...