日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AliOS Things蓝牙协议栈及应用开发框架介绍

發布時間:2024/8/23 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AliOS Things蓝牙协议栈及应用开发框架介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要: AliOS Things從1.2.0版本開始支持藍牙協議棧(BLE),及基于藍牙協議棧的應用層開發框架。本文分為三部分對藍牙組件進行介紹:藍牙組件,藍牙協議棧介紹及接口說明,和應用開發框架介紹及示例說明。AliOS Things v1.2.0支持藍牙4.2,提供完整的host端低功耗藍牙協議棧支持。

點擊查看原文

AliOS Things從1.2.0版本開始支持藍牙協議棧(BLE),及基于藍牙協議棧的應用層開發框架。本文分為三部分對藍牙組件進行介紹:

藍牙組件
藍牙協議棧介紹及接口說明
應用開發框架介紹及示例說明
藍牙組件

AliOS Things v1.2.0支持藍牙4.2,提供完整的host端低功耗藍牙協議棧支持。主要包括三部分內容:協議層API,藍牙協議棧,HCI (Host Controller Interface)驅動接口。當開發者拿到一個全新平臺的時候,需要完成HCI接口與AliOS Things提供的藍牙協議棧的對接。目前,AliOS Things已經完成在樂鑫ESP32上面藍牙協議棧部分的對接,開發者可以直接基于協議層API進行上層應用開發。

從應用開發者的角度,BLE應用開發過程中,經常會遇到的煩惱是藍牙協議棧概念及細節的理解。為了解決應用業務開發者的煩惱,AliOS-Things設計與開發了BLE應用開發框架。期望開發者在使用了我們的應用開發框架后,能夠極簡的進行業務邏輯開發,再也不用糾纏于BLE協議棧概念及細節。

綜上,AliOS Things藍牙組件總體結構如下圖所示。

藍牙協議棧及接口

AliOS Things v1.2.0支持低功耗藍牙主要包括以下功能:

Generic Access Profile (GAP)
Generic Attribute Profile (GATT)
清晰的HCI驅動層抽象
主要提供以下接口:

GAP
GATT
Logical Link Control and Adaptation Protocol (L2CAP)
HCI驅動
藍牙協議棧在快速迭代中,后續會開發更多功能及接口。

應用開發框架及接口

AliOS Things BLE應用開發框架主要針對GATT Server,即peripheral,主要完成以下功能:

維護開發者添加的屬性和特性
GATT (Generic Attribute Profile)相關讀,寫,通知,指示和連接
通過實現上述兩項功能,為開發者提供清晰簡單的應用開發接口,接口主要包括以下功能:

創建外設應用開發框架對象
創建和添加屬性到BLE協議棧,即GATT
廣播Attribute
回復和更新Central設備的請求和訂閱信息
我們已經在慶科mk3239上支持了創建外設應用框架對象接口,發布添加屬性接口,廣播接口。開發者可以在創建了外設應用開發框架對象后,借助于接口輕松添加屬性,完成服務的廣播,連接的建立和信息的更新。我們正在豐富上述接口功能并提供全部功能,并將已經在mk3239上支持的應用開發能力做到與平臺無關,讓使用其他藍牙芯片的開發者也能夠享受到極簡開發的快樂。

AliOS Things應用層規范接口的定義,可以在framework/bluetooth/ble_app_framework/ble_app_framework.h文件中找到。下面對應用層接口作一些說明:
ble_peripheral_init

接口定義:

peripheral_hdl_t ble_peripheral_init(peripheral_init_t *p,ble_peripheral_conn_cb_t c,ble_peripheral_disconn_cb_t disc,const uint8_t *gatt_db,int db_len);

接口說明:
該函數用于初始化peripheral設備服務,包括協議棧初始化、設備初始化、GATT屬性數據庫初始化。設備初始化相關的參數由參數p指定,GATT屬性數據庫由參數gatt_db和db_len指定。參數c和disc分別指定有客戶端設備連接時和斷開連接時的回調函數。該函數返回值是對應peripheral設備的handle,handle可以用于標識peripheral設備及其屬性。
ble_peripheral_deinit

接口定義:
void ble_peripheral_deinit(peripheral_hdl_t hdl);
接口說明:
該接口是接口ble_peripheral_init的反向操作,用于注銷peripheral設備初始化和協議棧初始化等操作。
ble_adv_start

接口定義:

void ble_adv_start(ble_adv_complete_cb_t adv_handler,const char *manufacture,peripheral_hdl_t hdl);

接口說明:
該接口用于啟動廣播。參數adv_handler指定廣播結束時的回調函數,參數manufacture指定設備的廠商名信息。廣播的信息(服務、屬性等)在初始化函數的GATT數據庫中設定。
ble_adv_stop

接口定義:

void ble_adv_stop();

接口說明:
該接口停止廣播。
ble_attr_add

接口定義:

ble_gatt_attr_t *ble_attr_add(uint16_t hdl,uint16_t val_len,const uint8_t *val);

接口說明:
該接口用于添加peripheral設備屬性值。參數hdl指定屬性句柄,val指定屬性值,val_len指定屬性值的長度(以字節為單位)。該函數返回值為一個ble_gatt_attr_t類型的結構體,用于后續對該屬性的操作。
ble_attr_indicate

接口定義:

void ble_attr_indicate(ble_gatt_attr_t *attr,peripheral_hdl_t hdl,uint16_t len,const uint8_t *data);

接口說明:
該接口用于向客戶端設備發送指示(indication)。參數attr表明指示對應的屬性,hdl表明peripheral設備對應的handle,data指定需要指示的數據,len指定數據長度。
ble_attr_notify

接口定義:

void ble_attr_notify(ble_gatt_attr_t *attr,peripheral_hdl_t hdl,uint16_t len,const uint8_t *data);

接口說明:
該函數功能與ble_attr_indicate類似,區別在于發送通知(notification)。
基于BLE應用框架的示例說明

AliOS Things目前提供了2個BLE示例sample,位于目錄example/bluetooth/目錄中。這2個sample均基于BLE應用框架和接口。下面對這2個sample作一些說明。

ble_advertisements

該示例sample展示了如何開發基于BLE應用框架和接口的應用。

第一步,初始化peripheral設備。

peripheral_init_t p = {BLE_DEVICE_NAME, 0, 1}; hdl = ble_peripheral_init(&p, connection_handler, disconnection_handler,adv_gatt_db, sizeof(adv_gatt_db));

peripheral_init_t中指定了設備名、最大連接數等信息。GATT數據庫在adv_gatt_db中指定,包含了GATT服務、GAP服務、設備信息服務及他們的屬性。

第二步,發布廣播。廣播的內容包括廠商名、第一步中指定的設備信息服務等。

ble_adv_start(adv_complete_cb, MANUFACURE_NAME, hdl);

ble_show_system_time

該示例程序是另外一個簡單的基于BLE應用框架和接口的sample。該示例在上一個示例的基礎上,增加了一個用戶自定義服務(TIME Service),并為該服務添加了一個屬性值,用于顯示系統啟動時長。

下面的代碼展示了該示例程序的主要流程:

static void indicate_handler(void *arg) {struct indicate_arg_s *ind = (struct indicate_arg_s *)arg;long long time = aos_now_ms();ble_attr_indicate(ind->attr, ind->hdl, sizeof(time), (uint8_t *)&time);aos_post_delayed_action(1000, indicate_handler, arg); }int application_start( void ) {peripheral_hdl_t hdl;ble_gatt_attr_t *attr;struct indicate_arg_s ind_arg;peripheral_init_t p = {BLE_DEVICE_NAME, 0, 1};hdl = ble_peripheral_init(&p, connection_handler, disconnection_handler,adv_gatt_db, sizeof(adv_gatt_db));ble_adv_start(adv_complete_cb, MANUFACURE_NAME, hdl);attr = ble_attr_add(HDLC_TIME_OUT_VALUE, 0, NULL);ind_arg.hdl = hdl;ind_arg.attr = attr;aos_post_delayed_action(1000, indicate_handler, &ind_arg);aos_loop_run();return 0; }

第一步,初始化peripheral設備。

第二步,啟動廣播。

第三步,添加時間屬性的值。

第四步,每隔1s發送一次指示,該指示包含系統啟動時長信息。

小結

目前,AliOS Things藍牙組件提供了一些最基礎的功能模塊,開發者可以基于現有功能直接基于AliOS Things進行藍牙開發。后續,我們會隨著AliOS Things快速迭代,持續更新,主要包括:

升級到藍牙5.0
支持更加豐富的應用開發示例和接口
支持SIG BLE mesh
AliOS Things uMesh支持藍牙
支持更多的平臺運行AliOS Things藍牙協議棧

總結

以上是生活随笔為你收集整理的AliOS Things蓝牙协议栈及应用开发框架介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。