一种基于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驱动开发等请参考其他相关的文档。

目录
相关文章
|
传感器 消息中间件 物联网
HCIA物联网初级考试-第五章物联网操作系统及感知层开发介绍
HCIA物联网初级考试-第五章物联网操作系统及感知层开发介绍
HCIA物联网初级考试-第五章物联网操作系统及感知层开发介绍
|
算法 AliOS-Things 物联网
HaaS100开发调试系列 之 定位AliOS Things内存及Crash问题
本文主要说开发调试过程中经常遇到的内存问题。
347 15
HaaS100开发调试系列 之 定位AliOS Things内存及Crash问题
|
AliOS-Things 物联网 编译器
使用HaaS Studio开发AliOS Things C/C++应用
本文章将介绍使用HaaS Studio 进行AliOS-Things C/C++应用开发。
使用HaaS Studio开发AliOS Things C/C++应用
|
NoSQL 物联网
使用线上的开发板做开发调试 |《AliOS Things快速开发指南》
当您手上没有现成可用的开发板时,也可以使用线上的开发板来调试验证您的程序。本文主要介绍线上开发板的使用流程。
使用线上的开发板做开发调试 |《AliOS Things快速开发指南》
|
监控 AliOS-Things 物联网
使用线下开发板进行开发调试 |《AliOS Things快速开发指南》
本文主要介绍如何使用VSCode进行项目编译、固件烧录及串口监控。
使用线下开发板进行开发调试 |《AliOS Things快速开发指南》
|
域名解析 JSON AliOS-Things
AliOS Things 开发:让你的开发板支持 AliOS Studio 烧录
本文主要为大家讲解如何进行 AliOS Studio 烧录。
1117 0
AliOS Things 开发:让你的开发板支持 AliOS Studio 烧录
|
物联网 NoSQL Windows
AliOS Things开发:让你的开发板支持AliOS Studio调试
在AliOS-Things 2.1版本之后,AliOS Studio提供了一套简单易懂的接口可以让开发者很容易适配开发板支持调试功能。
AliOS Things开发:让你的开发板支持AliOS Studio调试
|
NoSQL 物联网 AliOS-Things
AliOS Things开发:让你的开发板支持AliOS Studio调试
简介 在AliOS-Things 2.1版本之后,AliOS Studio提供了一套简单易懂的接口可以让开发者很容易适配开发板支持调试功能。可以支持大部分的调试接口,比如ST-Link、JLink、CMSIS-DAP等。
3390 0
|
传感器 自然语言处理 监控
快速开发一个带APP的红外体温枪(基于AliOS Things Inside的Wi-Fi模组)
非接触红外测温在医疗,环境监测、个人健康等领域得到越来越广泛的应用。本文将向大家介绍如何通过AliOS-Things inside的WiFi模组,快速完成体温检测,流程涵盖从传感器数据采集,到阿里云IoT智能生活平台接入,以及快速构建App完成监控。
|
物联网 AliOS-Things 数据格式
AliOS Things开发:让你的开发板支持AliOS Studio烧录
本文简单介绍一下如何让aos upload指令支持你的开发板下载,从而在AliOS-Studio中点击upload按钮即可立即下载AliOS-Things编译好的binary
13882 0