# sensor - [简介](#section11660541593) - [目录](#section161941989596) - [说明](#section45490312053) - [接口说明](#section14840627279) - [使用说明](#section460510231888) - [相关仓](#section12495154795416) ## 简介 Sensor驱动模型主要包含Sensor(传感器)相关HDI接口与实现,提供Sensor HDI(**H**ardware **D**river **I**nterface)能力接口,主要包括所有Sensor信息查询、Sensor启停、Sensor订阅/去订阅、Sensor参数配置等稳定的接口,简化服务开发。 **图 1** Sensor驱动模块架构图 ![](figures/sensor-driver-module-architecture_zh.png "sensor-driver-module-architecture_zh") ## 目录 Sensor驱动下源代码目录结构如下所示: ``` /drivers/peripheral/sensor ├── hal # sensor模块hal层代码 │ └── include # sensor模块hal层内部头文件 │ └── src # sensor模块hal层代码的实现 ├── interfaces # sensor模块对上层服务提供的驱动能力接口 │ └── include # sensor模块对外提供的接口定义 ├── test # sensor模块测试代码 │ └── unittest # sensor模块单元测试代码 ``` ## 说明 本节以订阅加速度传感器数据为例进行介绍。 ### 接口说明 Sensor驱动HAL模块提供给Sensor服务可直接调用的能力接口,主要功能有:查询,配置,数据订阅等操作。Sensor驱动模型对HDI开放的API接口功能如表1: **表 1** Sensor HDI 接口列表

功能分类

接口名

功能描述

查询操作

int32_t GetAllSensors(struct SensorInformation **sensorInfo, int32_t *count)

获取系统中注册的所有传感器信息,一种类型传感器信息包括传感器名字、设备厂商、固件版本号、硬件版本号、传感器类型编号、传感器标识、最大量程、精度、功耗。

配置操作

int32_t Enable(int32_t sensorId)

使能一种传感器设备,只有数据订阅者使能传感器后,才能获取订阅的传感器数据。

int32_t Disable(int32_t sensorId)

去使能一种传感器设备。

int32_t SetBatch(iint32_t sensorId, int64_t samplingInterval, int64_t reportInterval)

设置一种传感器的数据采样间隔和数据上报间隔。

int32_t SetMode(int32_t sensorTypeId, SensorUser *user, int32_t mode)

设置一种传感器的工作模式,不同的工作模式,上报数据方式不同。

int32_t SetOption(int32_t sensorId, uint32_t option)

设置一种传感器量程,精度等可选配置。

数据订阅操作

int32_t Register(RecordDataCallback cb)

订阅者注册传感器数据回调函数,系统会将获取到的传感器数据上报给订阅者。

int32_t Unregister(void)

订阅者去注册传感器数据回调函数。

接口实例

const struct SensorInterface *NewSensorInterfaceInstance(void)

创建传感器接口实例。

int32_t FreeSensorInterfaceInstance(void)

释放传感器接口实例。

### 使用说明 代码示例 ``` #include "sensor_if.h" #include "sensor_type.h" /* 创建回调函数 */ void SensorDataCallback(struct SensorEvents *event) { if(event == NULL){ return; } float *sensorData=(float *)event->data; printf("sensor data[%f]", *sensorData); } void SensorSample(void) { int ret; struct SensorInformation *sensorInfo = NULL; int32_t count = 0; int32_t sensorInterval = 200000000; /* 数据采样率设置200毫秒,单位纳秒 */ /* 1.创建传感器接口实例 */ const struct SensorInterface *sensorDev = NewSensorInterfaceInstance(); if (sensorDev == NULL) { return; } /* 2.订阅者注册传感器数据回调处理函数 */ ret = sensorDev->Register(0, SensorDataCallback); if (ret != 0) { return; } /* 3.获取设备支持的Sensor列表 */ ret = sensorDev->GetAllSensors(&sensorInfo, &count); if (ret != 0) { return; } /* 4.设置传感器采样率 */ ret = sensorDev->SetBatch(SENSOR_TYPE_ACCELEROMETER, sensorInterval, 0); if (ret != 0) { return; } /* 5.使能传感器 */ ret = sensorDev->Enable(SENSOR_TYPE_ACCELEROMETER); if (ret != 0) { return; } /* 6.去使能传感器 */ ret = sensorDev->Disable(SENSOR_TYPE_ACCELEROMETER); if (ret != 0) { return; } /* 7.取消传感器数据订阅函数 */ ret = sensorDev->Unregister(0); if (ret != 0) { return; } /* 8.释放传感器接口实例 */ ret = FreeSensorInterfaceInstance(); if (ret != 0) { return; } } ``` ## 相关仓 [驱动子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E9%A9%B1%E5%8A%A8%E5%AD%90%E7%B3%BB%E7%BB%9F.md) [drivers\_framework](https://gitee.com/openharmony/drivers_framework/blob/master/README_zh.md) [drivers\_adapter](https://gitee.com/openharmony/drivers_adapter/blob/master/README_zh.md) [drivers\_adapter\_khdf\_linux](https://gitee.com/openharmony/drivers_adapter_khdf_linux/blob/master/README_zh.md) [drivers\_peripheral](https://gitee.com/openharmony/drivers_peripheral)