一种基于AliOS Things的uData感知设备软件框架
摘要: ??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驅動開發等請參考其他相關的文檔。
總結
以上是生活随笔為你收集整理的一种基于AliOS Things的uData感知设备软件框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7类合作伙伴,190条沟通路径,高德汽车
- 下一篇: 阿里云DDoS高防 - 访问与攻击日志实