# SENSOR - [概述](##概述) - [功能简介](###功能简介) - [基本概念](###基本概念) - [运作机制](###运作机制) - [开发指导](##开发指导) - [场景介绍](###场景介绍) - [接口说明](#section188213414114) - [开发步骤](#section7893102915819) - [开发实例](#section257750691) - [调测验证](#section106021256121219) ## 概述 ### 功能简介 Sensor驱动模型屏蔽硬件器件差异,为上层Sensor服务系统提供稳定的Sensor基础能力接口,包括Sensor列表查询、Sensor启停、Sensor订阅及取消订阅,Sensor参数配置等功能;Sensor设备驱动的开发是基于HDF驱动框架基础上,结合操作系统适配层(OSAL)和平台驱动接口(比如I2C/SPI/UART总线等平台资源)能力,屏蔽不同操作系统和平台总线资源差异,实现Sensor驱动“一次开发,多系统部署”的目标。Sensor驱动模型如[图1](#fig10451455446)所示: **图 1** Sensor驱动模型图 ![Sensor驱动模型图](figures/Sensor驱动模型图.png) ### 基本概念 目前根据sensorId将Sensor分为医学类Sensor、传统类Sensor两种。 - 医学类Sensor:已订阅的sensorId枚举值在128-160范围的为医学类Sensor。 - 传统类Sensor:已订阅的sensorId枚举值不在128-160范围的为传统类Sensor。 ### 运作机制 通过介绍Sensor驱动模型的加载以及运行流程,对模型内部关键组件以及关联组件之间的关系进行了划分,整体加载流程如[图2](#Sensor驱动运行图)所示: **图 2** Sensor驱动运行图 ![Sensor驱动运行图](figures/Sensor驱动运行图.png) Sensor驱动模型以标准系统Hi3516DV300产品中的加速度传感器驱动为例,介绍整个驱动加载及运行流程: 1. 从device info HCS 的Sensor Host读取Sensor设备管理配置信息。 2. HDF配置框架从HCB数据库解析Sensor设备管理配置信息,并关联对应设备驱动。 3. 加载并初始化Sensor设备管理驱动。 4. Sensor设备管理驱动向HDI发布Sensor基础能力接口。 5. 从device info HCS 的Sensor Host读取加速度传感器驱动配置信息。 6. 加载加速度传感器抽象驱动,调用初始化接口,完成Sensor器件驱动资源分配和数据处理队列创建。 7. 从accel_xxx_config HCS读取加速度传感器差异化驱动配置和私有化配置信息。 8. 加速度传感器差异化驱动,调用通用配置解析接口,完成器件属性信息解析,器件寄存器解析。 9. 加速度传感器差异化驱动完成器件探测,并分配加速度传感器配置资源,完成加速度传感器差异化接口注册。 10. 加速度传感器探测成功之后,加速度传感器差异化驱动通知加速度传感器抽象驱动,注册加速度传感器设备到Sensor设备管理中。 ## 开发指导 ### 场景介绍 - 通过重力和陀螺仪传感器数据,能感知设备倾斜和旋转量,提高用户在游戏场景中的体验。 - 通过接近光传感器数据,感知距离遮挡物的距离,使设备能够自动亮灭屏,达到防误触目的。例如:通话时,当靠近手机时,关闭屏幕,达到降低功耗的作用。 - 通过气压计传感器数据,可以准确的判断设备当前所处的海拔。 - 通过环境光传感器数据,设备能够实现背光自动调节。 - 通过霍尔传感器数据,设备可以实现皮套功能,皮套合上,手机上开一个小窗口,可降低功耗。 ### 接口说明 Sensor驱动模型对外开放的API接口能力如下: - 提供Sensor HDI(Hardware Driver Interface)能力接口,简化服务开发。 - 提供Sensor驱动模型能力接口: - 依赖HDF驱动框架实现Sensor器件驱动的注册,加载,去注册,器件探测等能力。 - 提供同一类型Sensor器件驱动归一接口, 寄存器配置解析操作接口,总线访问抽象接口,平台抽象接口。 - 提供开发者实现的能力接口:依赖HDF驱动框架的HCS(HDF Configuration Source)配置管理,根据同类型Sensor差异化配置,实现Sensor器件参数序列化配置和器件部分操作接口,简化Sensor器件驱动开发。 Sensor驱动模型对外开放的API接口能力的具体实现参考[表1](#table203963834718): **表 1** Sensor驱动模型对外API接口功能介绍
int32_t SetBatch(int64_t samplingInterval, int64_t reportInterval) |
||