更新时间:2021-07-08 GMT+08:00
分享

开发指导

使用场景

Huawei LiteOS传感框架非常灵活方便,可以运用在多种终端设备中,例如穿戴设备、智能家居设备、家用医疗设备等。

功能

Sensor Manager提供以下功能。

表1 Sensor Manager的功能接口

功能分类

接口名

描述

传感器管理初始化

SensorManagerInit

创建Sensor Manager任务、队列、信号量等传感器管理所需资源

传感器注册

SensorRegister

注册对应标签传感器对象

传感器配置

SensorConfigNotify

通知Sensor Manager配置传感器参数

传感器采样

SensorSample

传感器数据采样

获取传感器列表

SensorTableGet

获取传感器列表

传感器应用

SensorItemInit

初始化对应标签传感器应用,注册应用数据更新回调

SensorItemEnable

打开传感器应用

SensorItemDisable

关闭传感器应用

传感器消息

SensorMessageProcess

处理从外部模块发来的传感器消息

SensorCommuSend

发送传感器消息到外部模块,由实际应用实现相关代码

数据结构

SensorType结构体

typedef struct {
    struct LOS_DL_LIST      list;
    struct LOS_DL_LIST      slist;         // 相同类别标签的应用会挂在该链表下面
    struct LOS_DL_LIST      attachedApp;
    struct DeviceType       *attachDevice;
    struct LOS_DL_LIST      slaveList;
    struct SensorOperation  *sensorOp;     // Init、Open、Close、IoCtl等操作
    OpenParam               openParam;
    CloseParam              closeParam;
    VOID                    *sensorData;   // 采样数据指针
    UINT32                  slaveAddr;
    UINT32                  interval;      // 软件定时器间隔,单位是tick
    INT32                   count;
    UINT32                  sensorMuxLock; // 多个应用操作时需获取sensor锁,避免冲突
    VOID                    *priv;         // 私有变量指针
    PrivResponse            privResp;
    SensorItem              commuItem;
    UINT8                   sensorDataLen; // 采样数据长度
    UINT8                   tag;           // 类别标签
    UINT8                   cmd;
    UINT8                   sensorStat;
} SensorType;

SensorItem结构体

typedef struct {
    struct LOS_DL_LIST list;
    OpenParam          openParam;   // 打开参数
    CloseParam         closeParam;  // 关闭参数
    RespFunc           respFunc;    // 应答回调
    UpdateFunc         updateFunc;  // 数据更新回调
    UINT32             updateArg;   // 数据更新回调入参
    UINT32             updateTime;  // 数据更新时间,即应用采集周期
    UINT32             updateCnt;
    ObjTag             tag;
    SensorItemState    state;       // 应用状态
    UINT16             id;          // 应用Id
    UINT8              resp;        // 0 不回复, 1 回复
    UINT8              reserverd;
} SensorItem;

开发流程

使用Sensor Manager管理某一类别传感器典型流程如下:

  1. 通过make menuconfig配置传感框架,菜单路径为:Components ---> Sensorhub。

    配置项

    含义

    取值范围

    默认值

    依赖

    LOSCFG_COMPONENTS_SENSORHUB

    传感框架的裁剪开关

    YES/NO

    NO

  2. 创建任务、队列、信号量等资源SensorManagerInit。
  1. 初始化SensorType结构体变量,并注册传感器SensorRegister。
  1. 通过SensorTableGet获取传感器列表,执行已注册传感器的初始化动作。
  2. 根据需要配置传感器参数SensorConfigNotify。
  3. 初始化相同类别标签的传感器应用SensorItemInit,并提供应用Id和数据更新回调函数。
  4. 打开传感器应用SensorItemEnable,并提供应用采样周期,传感器驱动会根据打开参数的时间间隔创建软件定时器并启动,定时时间到达后则调用SensorSample通知Sensor Manager 读取数据,同时根据采样周期设置推送数据到该应用注册的回调函数。
  5. 关闭传感器应用SensorItemDisable,停止推送数据到该应用。

传感器消息处理、发送根据具体业务需求增加。

相关文档