Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Sensor詳解(2)如何portingADSP中的sensor

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

編輯:關於Android編程

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
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved