前面的博文中,我们已经接触并分析了Sensors HAL Library,sensor1 remoting layer(libsensor1)以及SensorDaemon的相关流程,这里先串一下各个部分的主要功能。
Sensor HAL Library: android的通用HAL接口,高通实现了自己的部分,相关文件为sensors_hal.cpp
sensor1 remoting layer(libsensor1): 这是一个通信库,通过该库函数提供的API可以允许客户端向SensorDaemon服务端请求消息或者接收来自服务端的消息。
SensorDaemon:用户空间的一个后台守护进程,用于监听sensor客户端的请求以及通过共享内存与DSPS通信。
这三部分的代码结构如下:
那么DSPS是什么呢? 今天我们主要了解下DSPS架构和重要组成部分,有些知识点会涉及QMI的相关技术QCCI以及QCSI,之前的博客我们也讲解了相关的接口定义,请点击复习:
Qualcomm messaging Interface(QMI)消息定义概述
Dedicated Sensors Processor Subsystem(DSPS)
如标题所述,DSPS即Dedicated Sensors Processor Subsystem,专用传感器处理器子系统。
下面这张图完整的展示了整个Sensor模块DSPS相关的架构图,包括我们的DSPS部分。
我们重点从图中标注的6部分来看,各个部分主要功能是什么。
Device Driver Framework(DDF)
首先第一部分即Device Driver Framework板块。
这部分即高通的设备驱动框架,而sensor相关的代码则在adsp_proc/Sensors/ddf/下,而驱动代码则在dd路径下,DDF的主要功能如下:
1 完成所有的环境配置
2 支持一个驱动控制多个设备
3 支持同一设备或类似设备的同一驱动程序的多个实例
4同步异步数据检索
5 支持NV参数设定
6 驱动属性的运行时配置,如分辨率,范围及功率状态
7 访问系统时间以便对于延时代码的执行
8 抽象的通信接口以便于扩展
9 memhandler,内存管理对象,用于分配释放内存
在DDF中有一个非常重要的接口我们已经在之前的相关文章中见过,即sns_ddf_driver_if_s:typedef struct
{
/**
* 初始化驱动并且开启sensor设备
* 主要工作: 1. 分配一个驱动实例句柄 2. 打开相关设备的通信端口
* 3. 配置驱动和设备,将设备设到默认的电源状态
*/
sns_ddf_status_e (*init)(
sns_ddf_handle_t* dd_handle_pt