Android Sensor详解(2)如何portingADSP中的sensor

ADSP sensor overview

在初略介绍sensor的时候,就有讲到sensor的架构,在此继续将其具体化,来看看高通的sensor架构。

我们可以通过下图看具体sensor是如何进行运作的。

该图我们可以非常明显地看到Sensor通过I2C或者是SPI将数据发到Sensor Driver中,drivers通过device driver framework将数据包装后发给Sensor Manager,然后通过共享内存的方式发给上层。作为一个BSP,当然我所做的是具体来分析adsp这部分的问题了。

how to porting new sensor driver

基本缩写

SSC: Snapdragon Sensors Core

QMI: Qualcomm Messaging Interface

IDL: Interface description language

CTS: Compatibility Test Suite

SAM: Sensors Algorithm Manager

openSSC: SSC Vendor Ecosystem

SSI: sensor single image

如何集成一个新的sensor driver

在这里我提供我手上高通提供的文档,该文档详细描述了如何进行porting的重要信息。
下面我将通过这个文档来详细描述如何进行Porting。

声明驱动程序的入口函数

在fwcode中qcom_firmware\ADSP.8953.2.8.2\adsp_proc\Sensors\dd\qcom\inc目录下找到sns_dd.h,添加声明。

extern sns_ddf_driver_if_s sns_dd_mpu6515_if;
向fwcode添加源码

在fwcode中qcom_firmware\ADSP.8953.2.8.2\adsp_proc\Sensors\dd\qcom\src添加厂商给的code。并更新qcom_firmware\ADSP.8953.2.8.2\adsp_proc\Sensors\dd\qcom\build\dd_qcom.scons

如:

在src中添加sns_dd_mpu6515.c、sns_dd_mpu6515_ext.c、 sns_dd_mpu6515_selftest.c,需要在dd_qcom.sconsDD_SOURCES中添加

     "${BUILDPATH}/sns_dd_mpu6515.c",
     "${BUILDPATH}/sns_dd_mpu6515_ext.c",
     "${BUILDPATH}/sns_dd_mpu6515_selftest.c",

同时要配置编译档案进行匹配声明。

qcom_firmware\ADSP.8953.2.8.2\adsp_proc\Sensors\build\Sensors.scons申明config名称。

env.Append(CPPDEFINES = ["CONFIG_SUPPORT_MPU6515"])
生成UUID等待匹配

那么如何生成UUID呢?UUID在线生成器拿去不谢。生成后如何使用呢?

请在qcom_firmware\ADSP.8953.2.8.2\adsp_proc\Sensors\common\inc\sns_reg_common.h

#define SNS_REG_UUID_MPU6515 \
  {0xa3,0x87,0x37,0xc5,0x50,0x03,0x43,0xe9,0x84,0x9c,0x6c,0xfb,0xc1,0xaa,0x37,0xe4}

此时adsp已经基本正常porting完成了。

openSSC层更新config档

vender\qcom\proptery\sensors\dsps\reg_defaults中更新sensor_def_qcomdev.conf档是至关重要的。

在文档中有一张表详细藐视了config档的所代表的意思。

此时UUID就要用上了。

2000 1 0x00010001
2001 2 0x00010001
#  SSI SMGR Cfg 0: MPU6881 ACCEL INT {0x68,0x81,0x46,0x7b,0x75,0x75,0x45,0xcc,0xad,0x20,0x48,0x52,0x42,0xae,0x68,0x81}
2002 0xcc4575757b468168 0x00010001 #UUID
2003 0x8168ae42524820ad 0x00010001 #UUID
2004 10000 0x00010001               #off_to_idle
2005 10000 0x00010001                  #idle_to_ready
2006 45    0x00010001                 #gpio1
2007 1000  0x00010001               #reg_group_id
2008 0 	   0x00010001                  #cal_grp_id
2009 4     0x00010001                  #i2c_bus
2010 0x68  0x00010001               #i2c_address
2011 1     0x00010001                  #sens_default
2012 0x80  0x00010001               #flags

如何生效

adb root
adb remount
adb shell rm /system/etc/sensors/sensor_def_qcomdev.conf
adb push sensor_def_qcomdev.conf /system/etc/sensors/sensor_def_qcomdev.conf
adb shell chmod 644 /system/etc/sensors/sensor_def_qcomdev.conf
adb shell rm /persist/sensor/sns.reg
adb shell sync
adb reboot
  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
AndroidSensor驱动框架是用于管理和处理各种传感器数据的软件框架。它的主要功能是提供一种标准化的接口,使应用程序可以轻松地访问和使用各种传感器。 AndroidSensor驱动框架由以下两个主要组件组成: 1. Sensor HAL(硬件抽象层):这是Android操作系统与各种硬件传感器之间的接口。它定义了一组标准API,使Android可以与各种不同类型的传感器交互。 2. Sensor Manager:这是一个Android系统服务,它提供了一组API,使应用程序可以轻松地获取和使用各种传感器数据。它还负责管理各种传感器的注册和注销,以及传感器数据的传递和处理。 在Android,可以使用以下几种传感器: 1. 加速度计(Accelerometer):用于测量设备的加速度。 2. 陀螺仪(Gyroscope):用于测量设备的旋转速度和方向。 3. 磁力计(Magnetometer):用于测量设备的磁场。 4. 温度传感器(Temperature Sensor):用于测量设备的温度。 5. 光传感器(Light Sensor):用于测量设备的光线强度。 6. 压力传感器(Pressure Sensor):用于测量环境的气压。 7. 重力传感器(Gravity Sensor):用于测量设备的重力加速度。 8. 线性加速度计(Linear Acceleration Sensor):用于测量设备在三个轴向上的线性加速度。 9. 旋转矢量传感器(Rotation Vector Sensor):用于测量设备的旋转矢量。 以上是Android常用的传感器类型,每种传感器都有其特定的用途和应用场景。在开发Android应用程序时,可以根据需要选择合适的传感器来获取所需的数据,并使用Sensor驱动框架来管理和处理这些数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值