一:整体框架


如上图所示: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. MVVM模式-数据的双向绑定

  2. phpstorm配置xdebug 3.0最新教程!!!配置不成功的快看!

    前言 之前2月份就开始配置xdebug,始终没有成功. 今天看到一篇写得挺详细的文章,心血来潮又折腾了下,可惜没成功. 验证始终说我配置错误 后面去阅读官方的文档,修改了些配置,居然搞成功了!! ni ...

  3. python---选择排序的实现

    选择排序 思想 ​ 一趟遍历记录最小的数, 放到第一个位置 ​ 再一趟遍历记录剩余列表中最小的数, 继续放置 关键点: ​ 无序区: 第i趟, 无序区为 i~n-1 ​ 最小数的位置 import r ...

  4. k8s pod故障分类与排查

    一.Pod故障状态基本有几种Pod状态 处于PendingPod状态 处于WaitingPod状态 处于ContainerCreatingPod状态 ImagePullBackOffPod状态 Cra ...

  5. python中字符串、列表访问

    一.列表 列表由一系列按特定顺序排列的多个元素或空元素组成,包含字母表中所有字母.数字0~9或所有家庭成员姓名的列表:列表中各元素间可以没有任何关系:实际使用过程中,通常给列表指定一个表示复数的名称, ...

  6. 群晖下虚拟机编译部署WOW服务端TrinityCore

    前言 前几天突然想玩WOW了,但是我是一个特别轻度的玩家,以前点卡的时候,我就是上去一个人做做任务,跑跑地图,不怎么玩副本和PVP,现在让我花钱充月卡,不太现实,没那个时间玩,所以,就考虑玩个私服,但 ...

  7. 解构华为云HE2E项目中的容器技术应用

    摘要:本文从容器技术应用的角度解构了HE2E项目的代码仓库配置.镜像构建.及docker-compose的部署方式.希望通过本篇文章分享可以使更多的开发者了解容器技术和华为云. 本文分享自华为云社区& ...

  8. Promise的then和catch如何影响状态的变化

    记住两句话: 1.then正常返回resolved,里面有报错返回reject 1 const p1 = Promise.resolve().then(()=>{ 2 console.log(1 ...

  9. 企业级 Web 开发的挑战

    本文翻译自土牛Halil ibrahim Kalkan的<Mastering ABP Framework>,是系列翻译的起头,适合ABP开发人员或者想对ABP框架进行深入演进的准架构师. ...

  10. Day 002:PAT练习--1021 个位数统计 (15 分)

      话不多说,看题目:   显而易见,这道题用map实现非常的方便,(才不是,其实还有更简单的办法,但是我觉得写那种代码实在没什么意义,再加上正好借此练习一下map)我的代码如下: #include& ...