1 Star 0 Fork 972

zhao_haipeng / drivers_peripheral_2

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README_zh.md 11.03 KB
一键复制 编辑 原始数据 按行查看 历史
NickYang 提交于 2022-03-09 14:44 . inner source review issues fix

sensor

简介

Sensor驱动模型主要包含Sensor(传感器)相关HDI接口与实现,提供Sensor HDI(Hardware Driver Interface)能力接口,主要包括所有Sensor信息查询、Sensor启停、Sensor订阅/去订阅、Sensor参数配置等稳定的接口,简化服务开发。

图 1 Sensor驱动模块架构图

目录

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"

/* 创建回调函数 */
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.创建传感器接口实例 */
    struct SensorInterface *sensorDev = NewSensorInterfaceInstance();
    if (sensorDev == NULL) {
        return;
    }
    /* 2.订阅者注册传感器数据回调处理函数 */
    ret = sensorDev->Register(0, SensorDataCallback);
    if (ret != 0) {
        return;
    }
    /* 3.获取设备支持的Sensor列表 */
    ret = GetAllSensors(&sensorInfo, &count);
    if (ret != 0) {
        return;
    }
    /* 4.设置传感器采样率 */
    ret = SetBatch(SENSOR_TYPE_ACCELEROMETER, sensorInterval, 0);
    if (ret != 0) {
        return;
    }
    /* 5.使能传感器 */
    ret = Enable(SENSOR_TYPE_ACCELEROMETER);
    if (ret != 0) {
        return;
    }
    /* 6.去使能传感器 */
    ret = Disable(SENSOR_TYPE_ACCELEROMETER);
    if (ret != 0) {
        return;
    }
    /* 7.取消传感器数据订阅函数 */
    ret = Unregister(0);
    if (ret != 0) {
        return;
    }
    /* 8.释放传感器接口实例 */
    ret = FreeSensorInterfaceInstance();
    if (ret != 0) {
        return;
    }
}

相关仓

驱动子系统

drivers_framework

drivers_adapter

drivers_adapter_khdf_linux

drivers_peripheral

1
https://gitee.com/zhao_haipeng/drivers_peripheral_2.git
git@gitee.com:zhao_haipeng/drivers_peripheral_2.git
zhao_haipeng
drivers_peripheral_2
drivers_peripheral_2
master

搜索帮助