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

maoerya · · 1110 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

摘要:   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层主要是负责应用服务管理、动态校准管理和对外模块接口等。 ![图片描述](http://img.blog.csdn.net/20180122105031876?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) **uData关键模块说明** uData,目前主要有三大模块支撑整个架构。其他模块均可以按照业务需求进行组件化配置或者增加新功能。 ![图片描述](http://img.blog.csdn.net/20180122105235213?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) **uData数据表** 当前uData的框架中分别有三张数据表,应用服务表、抽象数据表,物理传感器表。 ![图片描述](http://img.blog.csdn.net/20180122105357430?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) **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的认识。 ![图片描述](http://img.blog.csdn.net/20180122105609085?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) **uData开机流程** 在本章节中,涉及介绍uData的开机流程。主要是从系统开机,到内核初始化,sensor初始化,framework初始化再到uData的framework初始化。也可以从下图中可以清楚的了解到整个初始化过程。 ![图片描述](http://img.blog.csdn.net/20180122105638248?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) **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):基于传感器中断发起的方式。 一般业务,基本以轮询方式来读取数据都能满足业务需求,中断方式基本用于低功耗管理,系统唤醒等业务居多,比如基于加速度计的系统唤醒机制。 ![图片描述](http://img.blog.csdn.net/20180122105758583?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 根据上面的各模块介绍,汇总了下图来描述了对整个uData框架的整体实现和通讯机制的理解和认识。 ![图片描述](http://img.blog.csdn.net/20180122105832400?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) **uData框架小结** 本文主要是从uData的软件设计实现方面来实现。关于uData移植,sensor驱动开发等请参考其他相关的文档。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1110 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传