开发指导
使用场景
Huawei LiteOS传感框架非常灵活方便,可以运用在多种终端设备中,例如穿戴设备、智能家居设备、家用医疗设备等。
功能
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管理某一类别传感器典型流程如下:
- 通过make menuconfig配置传感框架,菜单路径为:Components ---> Sensorhub。
配置项
含义
取值范围
默认值
依赖
LOSCFG_COMPONENTS_SENSORHUB
传感框架的裁剪开关
YES/NO
NO
无
- 创建任务、队列、信号量等资源SensorManagerInit。
- 初始化SensorType结构体变量,并注册传感器SensorRegister。
- 通过SensorTableGet获取传感器列表,执行已注册传感器的初始化动作。
- 根据需要配置传感器参数SensorConfigNotify。
- 初始化相同类别标签的传感器应用SensorItemInit,并提供应用Id和数据更新回调函数。
- 打开传感器应用SensorItemEnable,并提供应用采样周期,传感器驱动会根据打开参数的时间间隔创建软件定时器并启动,定时时间到达后则调用SensorSample通知Sensor Manager 读取数据,同时根据采样周期设置推送数据到该应用注册的回调函数。
- 关闭传感器应用SensorItemDisable,停止推送数据到该应用。
传感器消息处理、发送根据具体业务需求增加。