我是靠谱客的博主 精明小蝴蝶,最近开发中收集的这篇文章主要介绍android_高通_sensor框架_bug分析_经验总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

原理:

   public:

            1.  寄存器写封装函数:sns_scp_register_rw()指定vector数组的地址和该数组的元素的个数  就可以一次读/写多个寄存器

            2. sensor属性发布过程:通过sns_publish_attribute将attribute_id如SNS_STD_SENSOR_ATTRID_RATES publish到attribute service

             3. framwork init sensor 之后,sensor driver 发送suid request 所有sensor包括物理和虚拟sensor都会通过该种方式发送request的,并通过callback来解析event)

                    发送完suid request后,通过.notify_event来对返回的suid event进行解码

            4.初始化流程:

                   ODC传感器小组 > sensor原理与log分析思路 


4.Activation:lsm6dso_set_client_request函数,用来设置来自client的request。并创建sensor instanc

             5.sns_sensor_instance_api中发送的request,会在sns_sensor_instance_api.notify_event中处理,同样sns_sensor_api中发送的request会在sns_sensor_api.notify_event中处理。

             6.所有的sensor使用interrupts时必须通过interrupt sensror创建一个data stream,并通过该data stream发送request

             7.下面我们用一张关系图,总结整个Activation的过程

在这里插入图片描述
8.notify_event处理的是流事件 如fw_stream CTS_stream prox_stream smart_prox_stream

               oem2_get_XXX_config处理的是请求事件 如new_request  和 exit_request的内容的配置

          9.sensor模块  sensor_instance模块都有notify_event  和oem2_inst_set_client_config  分别代表模块外来流事件的处理  和  客户请求信息的解析

          10.sensor_instance中的实现是直接调用hal_island的接口直接操作硬件  完成输出输入的任务
   prox:

           1 实体红外(屏下红外):proximity_a   触屏红外:algo-prox

           2  触屏红外

                       实际是通过一个电容实现的  通过对姿势和动作的判断来决定通话时候的灭屏动作  处于工作状态的是触屏红外

           3 实体红外

                        亮屏的时候  实体红外是处于睡眠状态的  当触屏红外事件导致灭屏后  实体红外开始工作  检测远离状态  然后亮屏

        问题分析原理

              1.   确定上下层交接的数据   来确定责任归属

              2.   红外的原理  有点类似于测量工具   测量工具在测量之前首先要确保测量工具是经过校准的    

       1 . BPlog   

            1   prox

                  1)   通话红外下  ps_cofficient_level标志  sns_oem2_sensor.h中定义   

                   2) 通话靠近没有实时校准   只有远离有实时校准  可能会导致通话靠近base值不对  导致状态误报

                   3)通话过程的ps_cofficient_level顺序  9 (拨电话)→ 5(靠近) → 6(对应5)→  10(挂电话)

      2. APlog

            1    prox

                  1) 查找关键字:sensors-hal 和 sensorservice就分析上层的红外状态:0  靠近    5 远离

                   2)通话过程中 ,亮屏时使用 ap侧 algo-prox 触屏红外,灭屏时才使用 bp侧 proximity_a 屏下红外

                   触屏红外事件检测作为灭屏的依据   屏下红外事件作为灭屏后亮屏的依据

                   3)高低档切换:p1=201  p2 =1

als: 参考:代码逻辑相

    1、als gain 值理解 :

         1)强光环境切换到正常环境或者正常环境切换到强光环境 会切gain
         2)gain相当于增益,会导致满量程的lux值发生变化,比如高gain的量程一般没法达到20000lux
         3)为了使亮屏时的gain是正确的,会在prox polling 中提前切gain
         4)切gain后要等一个周期才会生效 。 由于器件的特性 ,虽然新的gain值已经写进去了,但是在一个als_ps_wait转换周期内,lux还是根据前一gain值来生成的。

         我的理解:

             0.   lux = als_data * factor

                 0.1  rgb > als_max  为强光  rgb < als_med为弱光

             1.   1838为例:gain1=0x31为弱光强量程增益系数   gain2=0x21位强光强量程增益系数  显然弱光强增益应该大一些   量程应该更大  

             2.    gain和factor都是对应的   例如gain(强光)对应factor(强光)  这就引发一个问题  那就是gain用新的还是用旧的去计算Lux

                     引用:http://plm.vivo.xyz/Windchill/netmarkets/ext/inner-index.html?docType=vivoIssue&pboid=VR:wt.doc.WTDocument:831497100&copyedUrl=true

                          2.1  为什么需要等待一个转换周期   因为rgb数据需要转为als数据   然后根据gain确定的factor一起  得到lux值   那么如果在转换周期期间   gain值发生了变化  那么这个时候就有一个问题   

                                 是使用新的gain还是旧的gain  换句话说就是用新的factor还是用旧的factor

   2. 案例分析:5f655b62ab3bcc895e44a5d9efae43bad1165d00

   3. 代码实现:

          1. 增益改变时候会用一个变量去记录增益改变的时间点   等接着的数据转换周期进行的时候  判断增益改变时间点和数据转换开始时间点之间的距离来判断是否gain生效

          2. 从代码的时间点的大小关系  知道这是时序关系代码  涉及到器件工作时间/周期的问题  宏观表征为快慢问题

指纹问题

   1. 屏幕指纹的工作原理

     A       屏幕指纹的点亮由运动检测vivomotion  sensor和红外sensor配合实现的

     B       当遮住红外的时候,即使有运动,指纹也是不亮的

   2. 运动检测的原理:

     A       手机硬件来说有一个加速度传感器

     B       手机软件来说通过加速度传感器的数据可以实现一个虚拟的sensor,叫做重力sensor

     C      

lsm6dsm模块问题:

   1. lsm6dso_acc_publish_attributes  几乎所有的硬件的属性都是这里发布

    2.dae又称Data Acquisition Engine

最后

以上就是精明小蝴蝶为你收集整理的android_高通_sensor框架_bug分析_经验总结的全部内容,希望文章能够帮你解决android_高通_sensor框架_bug分析_经验总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部