一種基於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層主要是負責應用服務管理、動態校準管理和對外模塊接口等。
圖片描述oop

uData關鍵模塊說明組件化

uData,目前主要有三大模塊支撐整個架構。其餘模塊都可以按照業務需求進行組件化配置或者增長新功能。spa

圖片描述
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驅動開發等請參考其餘相關的文檔。

相關文章
相關標籤/搜索