阈值效果debug
距离传感器调试基本没有太多工作量,主要根据整机来调整阈值,选择最合适的 P-Sensor 感应效果。高通平台sensor代码主要在modem侧,阈值设置是在AP侧,对应配置文件一般是:
vendor/qcom/proprietary/sensors-see/registry/config/device/bengal_epl_0.json
".ps":{
"owner": "sns_epl",
".fac_cal":{
"owner": "sns_epl",
"near_threshold":{ "type": "flt", "ver": "2",
"data": "1600.0"
},
"far_threshold":{ "type": "flt", "ver": "2",
"data": "1300.0"
},
"ctir_config":{ "type": "flt", "ver": "0",
"data": "0.0"
}
},
near_threshold 值表示靠近阈值,far_threshold 表示远离阈值。遮挡物距离 P-sensor 越近,则数值越大。一般 far_threshold 和 near_threshold 需要预留一定间隔,避免遮挡物处于临界距离时,P-sensor 频繁的在遮挡(0)和无遮挡(5)两种状态切换。
Debug时候需要注意:修改后可以手动push到设备,但需要手动清空旧文件,然后进行同步,步骤如下。
adb wait-for-device root
adb wait-for-device remount
adb shell rm /vendor/etc/sensors/config/bengal_epl*
adb push bengal_epl_0.json /vendor/etc/sensors/config/
adb shell chmod 644 /vendor/etc/sensors/config/bengal_epl_0.json
adb shell rm /mnt/vendor/persist/sensors/registry/registry/*
adb shell sync
adb reboot
注:Debug 完成后,正式提交时,需要更新下 near_threshold/far_threshold 中ver值,进行 +1,否则由于这个配置值是被初始化保存在 persist 分区,而 persist 分区组装时是不更新的,不会重新初始化。如果文件版本号也不修改的情形下,系统不会重新加载配置,无法生效。
异常时抓取 Sensor log
由于sensor主要代码都在BP侧,抓取kernel log意义不大,需要抓取QXDM log进行分析。QXDM 状态栏中选择 Tools - CFG File Generator 。只选择 SNS 过滤其他log。
在过滤后的log中,搜索 epl_sensor 字段,找与PS相关日志进行分析。
SENSOR EXT/Error [sns_epl_sensor_instance_island.c 77] Received invalid event id=1025
SENSOR EXT/Low [sns_epl_sensor_instance_island.c 69] IRQ event!
SENSOR EXT/High [sns_epl_hal_island.c 2070] [epl_get_data_dri]: xxxxxxxxxxxxxxxxx
SENSOR EXT/High [sns_epl_hal_island.c 2071] [epl_get_data_dri]: enable_pflag=1, enable_lflag=0
SENSOR EXT/High [sns_epl_hal_island.c 1466] ps: ~~~~ PS ~~~~~
SENSOR EXT/High [sns_epl_hal_island.c 1467] ps: i2c_read_data = 0xf
SENSOR EXT/High [sns_epl_hal_island.c 1470] ps: sat = 0x0
SENSOR EXT/High [sns_epl_hal_island.c 1471] ps: cmp h = 0x0, l = 0x8
SENSOR EXT/High [sns_epl_hal_island.c 1472] ps: int_flag = 0x4
SENSOR EXT/High [sns_epl_hal_island.c 1473] ps: cmp_rstn = 0x2, lock = 1
SENSOR EXT/High [sns_epl_hal_island.c 1474] [epl_sensor_read_ps]: data = 0
SENSOR EXT/High [sns_epl_hal_island.c 1475] [epl_sensor_read_ps]: ir data = 3351
SENSOR EXT/High [sns_epl_hal_island.c 1139] [set_psensor_intr_threshold] - rc=0, low_thd = 1200, high_thd = 1500
SENSOR EXT/High [sns_epl_hal_island.c 1704] [epl_sensor_ps_report]: ------------------- ps_status=1
上面的log中。set_psensor_intr_threshold 表示bengal_epl_0中设置的阈值。epl_sensor_read_ps 中data值是当前实际传感器感应值,为0表示无遮挡物;ir data是红外灯的值,一般是一个固定范围值,如果偏差大,那可能是ir灯有问题。