一:整体框架


如上图所示: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. vue构建项目步骤

    1.node版本请更新到6.9.X版本以上,不然npm依赖会出问题 2.命令行里运行npm install --global vue-cli 3.npm install --global webpac ...

  2. ZXing Blazor 扫码组件 , ssr/wasm通用

    项目介绍 本项目是利用 ZXing 进行封装的 Blazor 组件库 直接调用手机或者桌面电脑摄像头进行扫码 项目截图              项目地址 https://github.com/den ...

  3. 爬虫---scrapy分布式和增量式

    分布式 概念: 需要搭建一个分布式的机群, 然后在每一台电脑中执行同一组程序, 让其对某一网站的数据进行联合分布爬取. 原生的scrapy框架不能实现分布式的原因 调度器不能被共享, 管道也不能被共享 ...

  4. MongoDB 集群-主从复制(一主二从)

    MongoDB 集群-主从复制(一主二从) 官方文档 https://docs.mongodb.com/manual/tutorial/deploy-replica-set/ https://docs ...

  5. python向上取整以50为界

    import math def getNum(limit_num,num): if num%limit_num==0: print(num) else: num=math.ceil(num/limit ...

  6. xpath 获取meta里的keywords及description的方法

    html中的head的meta元素中的keywords与description标签如下: <meta name="keywords" content="xxxx&q ...

  7. 6.Jenkins进阶之流水线pipeline语法入门学习(1)

    目录一览: 0x00 前言简述 Pipeline 介绍 Pipeline 基础知识 Pipeline 扩展共享库 BlueOcean 介绍 0x01 Pipeline Syntax (0) Groov ...

  8. 迷惑小错 之 :requests.exceptions.ProxyError

    缘由 当打开代理或者抓包工具时 pycharm运行发包请求报错: requests.exceptions.ProxyError.关掉代理后又能正常的请求,这样对于我们日常操作很不方便吗.四处查找资料无 ...

  9. js 改变页面元素的内容

    改变页面标签里的内容 (方法) innerText innerHTML (常用)   代码示例 <div></div> <p> 我是文字 <span>1 ...

  10. HTTP:聊一聊HTTPS

    一.什么是https https是http的升级,因为http是明文传输的,所以非常不安全,https在http的基础上进行了数据加密. 二.https的加密方式 1.对称加密 服务端会给客户端发送一 ...