高通平台G-sensor校准流程

高通平台G-sensor校准流程

最新推荐文章于 2024-07-14 16:14:14 发布

原创

最新推荐文章于 2024-07-14 16:14:14 发布

·

4.9k 阅读

·

3

·

29

·

CC 4.0 BY-SA版权

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

Android

专栏收录该内容

12 篇文章

订阅专栏

本文详细介绍了高通平台G-sensor的校准流程,从app层的runSensorTest开始,深入到hal层的libSensor1接口,再到adsp驱动层的校准模式与bias计算,最后解析了校准数据如何反馈并应用到app层。

高通平台G-sensor校准流程

1.app层 runSensorTest

jni接口

2.hal层的接口

jni中调用libSensor1的接口sensor1_open

3.adsp驱动中的流程

调用到对应驱动文件中的run_test,以bma2x2为例:

run_test 函数中由多种校准模式其中SNS_DDF_TEST_OEM模式会计算当前机器的数据bias,并存储下来。

除了SNS_DDF_TEST_OEM还有SNS_DDF_TEST_SELF_SW和SNS_DDF_TEST_SELF_HW等。

sns_dd_inertial_test_handle_timer完成3个任务

1.sns_dd_inertial_test_get_data 获取校准数据

2.cal_update,更新bias以及motion_state

3.根据state->algo_output.motion_state判断校准是否成功。

这里说明一下为什么会z轴数据+9.8,因为adsp中默认校准时水平放置在桌面,X,Y轴数据为0,Z轴的数据为-9.8,所以这边加上9.8之后,就变成X,Y,Z三个轴都是0,0,0了。

继续看

回到sns_dd_inertial_test_handle_timer函数,通过cal_update获取到对应的bias值后,判断是否超出门限值,bias值是否可用。

校准成功调用 sns_dd_inertial_test_complete(state, SNS_DD_ITEST_SUCCESS);

校准数据返回到bma2x2驱动文件中根据返回值err不通不同,走不同的路径。

(status == SNS_DDF_SUCCESS) || (err == SNS_DD_ITEST_ZERO_VARIANCE)都判定校准成功,上报SNS_DDF_EVENT_BIAS_READY event。

将对应的bias值存放到指定sns.reg路径下

SNS_REG_ITEM_ACC_X_BIAS_V02

SNS_REG_ITEM_ACC_Y_BIAS_V02

SNS_REG_ITEM_ACC_Z_BIAS_V02

sns.reg中的校准后校准参数存放位置。

sns_dd_acc_bma2x2_get_data中上报数据时+对应的bias,从而使得上报数据变成校准后的数据上报给app。