一种基于AliOS Things的uData感知设备软件框架

简介:   uData框架设计之初的思想是基于传统sensorhub概念基础之上的,结合IoT的业务场景和AliOS Things物联网操作系统的特点设计而成的一个面对IoT的感知设备处理框架。

uData诞生背景

  uData框架设计之初的思想是基于传统sensorhub概念基础之上的,结合IoT的业务场景和AliOS Things物联网操作系统的特点设计而成的一个面对IoT的感知设备处理框架。uData的主要目的是为了解决IoT端侧设备传感器开发的周期长、应用算法缺少和无云端数据一体化等痛点问题。

uData概要介绍

  uData设计之初是遵循分层解耦的模块化设计原则,其目的是为了让uData根据客户的不同业务和需求组件化做移植适配。下图是当前架构模块图,主要分kernel和framework两层,kernel层主要是负责传感器驱动,硬件端口配置和相关的静态校准,包括轴向校准等;framework层主要是负责应用服务管理、动态校准管理和对外模块接口等。

  • uData关键模块说明
    uData,目前主要有三大模块支撑整个架构。其他模块均可以按照业务需求进行组件化配置或者增加新功能。
模块名 所在模块路径 具体描述
应用服务管理模块 framworkservice mgr 1.管理基于传感器的应用算法数据服务,如注册等
2.支撑整个uData框架的事件调度机制
3.管理对外组件的业务需求,如订阅等
抽象数据管理模块 framworkabs data model 1.对物理传感器的抽象化管理
2.和实际物理传感器分离,并做1:1映射
3.以vfs方式和kernel层sensor进行通信
传感器抽象层模块 devicesensorhal 1.提供物理传感器驱动的驱动接口,如注册,创建驱动对象等
2.提供静态校准的配置接口,如轴向等
3.提供硬件配置接口,比如I2C,SPI配置相关配置
  • uData数据表
    当前uData的框架中分别有三张数据表,应用服务表、抽象数据表,物理传感器表。
数据表 所在模块 对应数据业务 具体描述
应用服务表 framworkservice mgr 管理基于传感器的应用算法数据表 g_service_db[]
抽象数据表 framworkabs data model 管理对物理传感器抽象的数据表 g_abs_data_db[]
物理传感器表 devicesensorhal 管理系统可用的物理传感器数据表 g_sensor_obj[]
  • uData数据类型
    uData主要分两种类型的数据,一种是uData的应用算法数据类型,开发者和外部模块也只和这类型的数据进行通信和交互;另外一种是物理传感器数据类别,存在于kernel的sensor驱动层,并和uData framework层进行通信和交互,暂不对外。一般情况下,每一个应用算法服务数据会订阅一个物理传感器数据,也可能一个应用算法数据基于多个物理传感器数据。
/* uData应用算法数据类型 */
typedef enum 
{
 UDATA_SERVICE_ACC = 0,     /* Accelerometer */ 
 UDATA_SERVICE_MAG,         /* Magnetometer */
 UDATA_SERVICE_GYRO,        /* Gyroscope */
 UDATA_SERVICE_ALS,         /* Ambient light sensor */
 UDATA_SERVICE_PS,          /* Proximity */
 UDATA_SERVICE_BARO,        /* Barometer */
 UDATA_SERVICE_TEMP,        /* Temperature  */
 UDATA_SERVICE_UV,          /* Ultraviolet */
 UDATA_SERVICE_HUMI,        /* Humidity */
 UDATA_SERVICE_HALL,        /* HALL sensor */
 UDATA_SERVICE_HR,          /* Heart Rate sensor */
 UDATA_SERVICE_PEDOMETER,   
 UDATA_SERVICE_PDR,     
 UDATA_SERVICE_VDR,
 
 UDATA_MAX_CNT, 
}udata_type_e; 
/* uData物理传感器数据类型 */
typedef enum{
    TAG_DEV_ACC = 0,   /* Accelerometer */
    TAG_DEV_MAG,        /* Magnetometer */
    TAG_DEV_GYRO,      /* Gyroscope */
    TAG_DEV_ALS,        /* Ambient light sensor */
    TAG_DEV_PS,         /* Proximity */
    TAG_DEV_BARO,       /* Barometer */
    TAG_DEV_TEMP,       /* Temperature  */
    TAG_DEV_UV,         /* Ultraviolet */
    TAG_DEV_HUMI,       /* Humidity */
    TAG_DEV_HALL,       /* HALL */
    TAG_DEV_HR,         /* Heart Rate */
    TAG_DEV_SENSOR_NUM_MAX,    
} sensor_tag_e;
  • 物理传感器介绍
    当前uData所支持的都是基于MEMS传感器(微机电系统,Microelectro Mechanical System)来设计实现的,下表是对现有的传感器做一个简单的介绍,可以增加对整个文档的理解和uData的认识。
传感器列表 传感器类型 功能简介
光感器 环境类传感器 感知周围的光亮强度
温度计 环境类传感器 感知周围的环境温度
湿度计 环境类传感器 感知周围的环境湿度
气压计 环境类传感器 感知所在区域的气压值
紫外线 环境类传感器 感知所在区域的紫外线强度
PM2.5 环境类传感器 感知所在区域的PM2.5值
VOC 环境类传感器 感知所在区域的有害气体值
加速度计 运动类传感器 测算对象当时的加速度值
陀螺仪 运动类传感器 测算对象当时的角速度值
磁力计 位置类传感器 测算对象周围的磁场强度
接近光 位置类传感器 感知物体接近的距离
心率计 健康类传感器 测算对象当时的心率值
血压计 健康类传感器 测算对象当时的血压值

uData开机流程

在本章节中,涉及介绍uData的开机流程。主要是从系统开机,到内核初始化,sensor初始化,framework初始化再到uData的framework初始化。也可以从下图中可以清楚的了解到整个初始化过程。

uData模块间通信模式

当前的uData模块间通信是基于AliOS Things的yloop异步处理机制的。当前uData所支持的异步事件按如下所示,也可以在includeaosyloop.h中查阅相关信息:

/** uData event */
#define EV_UDATA                           0x0004
#define CODE_UDATA_DEV_READ                1
#define CODE_UDATA_DEV_IOCTL               2
#define CODE_UDATA_DEV_OPEN                3
#define CODE_UDATA_DEV_CLOSE               4
#define CODE_UDATA_DEV_ENABLE              5
#define CODE_UDATA_DEV_DISABLE             6
#define CODE_UDATA_SERVICE_SUBSRIBE        7  /* 目前用于外部组件的订阅,如数据上云业务 */
#define CODE_UDATA_SERVICE_UNSUBSRIBE      8  /* 目前用于外部组件的退阅,如数据上云业务 */
#define CODE_UDATA_SERVICE_PROCESS         9
#define CODE_UDATA_SERVICE_IOCTL           10
#define CODE_UDATA_REPORT_PUBLISH          11 /* 当uData数据准备好之后,会广播事件通知相关的外部模块 */

在uData框架的framework层,目前设计了一个任务调度器(uData_service_dispatcher)和一个定时器(g_abs_data_timer)来实现整个uData的通讯机制。

  • 数据读取方式
  1. 轮询方式(POLLING) :基于定时器发起的方式。
  2. 中断方式(PUSH/INT):基于传感器中断发起的方式。
    一般业务,基本以轮询方式来读取数据都能满足业务需求,中断方式基本用于低功耗管理,系统唤醒等业务居多,比如基于加速度计的系统唤醒机制。

根据上面的各模块介绍,汇总了下图来描述了对整个uData框架的整体实现和通讯机制的理解和认识。

uData框架小结

本文主要是从uData的软件设计实现方面来实现。关于uData移植,sensor驱动开发等请参考其他相关的文档。

目录
相关文章
|
7月前
|
传感器 消息中间件 物联网
AliOS Things 系统架构介绍(二)
AliOS Things 系统架构介绍(二)
213 0
|
安全 网络协议 物联网
AliOS Things开发前准备 |《AliOS Things快速开发指南》
在运行AliOS Things系统之前,您需要做好一系列准备工作,包括搭建环境、安装驱动设备、下载AliOS Things系统源码、安装开发工具AliOS Studio等。本文详细介绍如何完成这些准备工作。
AliOS Things开发前准备 |《AliOS Things快速开发指南》
|
7月前
|
存储 传感器 人工智能
AliOS Things 系统架构介绍(一)
AliOS Things 系统架构介绍(一)
190 0
|
7月前
|
传感器 数据采集 安全
AliOS Things组件功能介绍(二)
AliOS Things组件功能介绍(二)
135 0
|
7月前
|
安全 物联网 API
AliOS Things组件功能介绍(三)
AliOS Things组件功能介绍(三)
131 0
|
7月前
|
存储 网络协议 物联网
AliOS Things组件功能介绍(一)
AliOS Things组件功能介绍(一)
163 0
|
物联网
|
开发框架 安全 AliOS-Things
AliOS-Things 构建系统的介绍|学习笔记
快速学习 AliOS-Things 构建系统的介绍。
362 0
AliOS-Things 构建系统的介绍|学习笔记
|
监控 物联网 Linux
端侧系统 AliOS Things 介绍|学习笔记
快速学习端侧系统 AliOS Things 介绍
122 0
|
监控 安全 网络协议
AliOS Things 3.3新功能介绍
AliOS Things发布于2017年杭州云栖大会, 是 AliOS 家族旗下的、面向IoT领域的、高可伸缩的物联网操作系统,于2017年10月20号宣布在github上开源,当前最新的版本是 AliOS Things 3.3。
AliOS Things 3.3新功能介绍