概述
原理:
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©edUrl=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分析_经验总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复