摘要: uData 框架设计之初的思想是基于传统 sensorhub 概念基础之上的,结合 IoT 的业务场景和 AliOS Things 物联网操作系统的特点设计而成的一个面对 IoT 的感知设备处理框架.
http://click.aliyun.com/m/40592/
uData 诞生背景
uData 框架设计之初的思想是基于传统 sensorhub 概念基础之上的,结合 IoT 的业务场景和 AliOS Things 物联网操作系统的特点设计而成的一个面对 IoT 的感知设备处理框架.uData 的主要目的是为了解决 IoT 端侧设备传感器开发的周期长,应用算法缺少和无云端数据一体化等痛点问题.
uData 概要介绍
uData 设计之初是遵循分层解耦的模块化设计原则,其目的是为了让 uData 根据客户的不同业务和需求组件化做移植适配.下图是当前架构模块图,主要分 kernel 和 framework 两层,kernel 层主要是负责传感器驱动,硬件端口配置和相关的静态校准,包括轴向校准等;framework 层主要是负责应用服务管理,动态校准管理和对外模块接口等.
uData 关键模块说明
uData,目前主要有三大模块支撑整个架构.其他模块均可以按照业务需求进行组件化配置或者增加新功能.
uData 数据表
当前 uData 的框架中分别有三张数据表,应用服务表,抽象数据表,物理传感器表.
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 的认识.
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 的通讯机制.
数据读取方式
轮询方式(POLLING) :基于定时器发起的方式.
中断方式(PUSH/INT):基于传感器中断发起的方式.
一般业务,基本以轮询方式来读取数据都能满足业务需求,中断方式基本用于低功耗管理,系统唤醒等业务居多,比如基于加速度计的系统唤醒机制.
根据上面的各模块介绍,汇总了下图来描述了对整个 uData 框架的整体实现和通讯机制的理解和认识.
uData 框架小结
本文主要是从 uData 的软件设计实现方面来实现.关于 uData 移植,sensor 驱动开发等请参考其他相关的文档.
来源: http://geek.csdn.net/news/detail/252411