Breeze SDK是阿里巴巴IoT提供的基于低功耗藍牙協議棧上層提供的一套安全接入的解決方案,并可通過藍牙通道支持WiFi輔助配網功能,本文對Breeze SDK的HAL接口進行說明,廠商對接時可以參考本文檔。
HAL接口說明
Breeze SDK的HAL接口分為協議棧、OS、安全三個部分,這些接口的定義在$(SDK Src)/framework/bluetooth/breeze/hal
目錄下。
- breeze_hal_ble.h
定義了藍牙配網SDK對接到不同廠商藍牙協議棧的接口,參考實現見
breeze_hal_ble.c
文件。 - breeze_hal_os.h
定義了藍牙配網SDK對接到不同OS系統的接口,基于AliOS Things的參考實現見
breeze_hal_os.c
,用戶如果使用AliOS Things時,該部分接口不需要對接。 - breeze_hal_sec.h
定義了藍牙配網SDK對接到不同安全算法實現的接口,基于mbedtls的參考實現見
breeze_hal_security.c
文件,用戶使用AliOS Things時,該部分接口不需要對接。
藍牙協議棧HAL列表
- ble_stack_init
該接口完成對BLE協議棧的初始化。
參數
名稱 類型 描述 ais_init ais_bt_init_t 指定了藍牙service和characteristics,以及其權限屬性等相關設置,包括以下內容。 - uuid_svc:AIS服務的uuid(type、value)信息
- rc/wc/ic/nc/ wwnrc:AIS服務的characteristic的屬性信息
- on_connected:藍牙連接時間的回調函數
- on_disconnected:藍牙斷開連接事件的回調函數
init_done stack_init_done_t 協議棧初始化完成回調函數,需要在藍牙協議棧完成之后主動調用傳入成功參數 AIS_ERR_SUCCESS(0)
返回值
該函數成功時返回
AIS_ERR_SUCCESS
,錯誤發生時在breeze_hal_ble.h中返回對應的錯誤編碼。 - ble_stack_deinit
該接口負責協議棧停止和資源銷毀等工作。
參數
無
返回值
該函數成功時返回
AIS_ERR_SUCCESS
,錯誤發生時在breeze_hal_ble.h中返回對應的錯誤編碼。 - ble_send_notification
該接口通過notify方式發送數據。
參數
名稱 類型 描述 p_data uint8_t* 發送數據的buffer地址 length uint16_t 數據長度 返回值
該函數成功時返回
AIS_ERR_SUCCESS
,錯誤發生時在breeze_hal_ble.h中返回對應的錯誤編碼。 - ble_send_indication
該接口通過indicate方式發送數據。
參數
名稱 類型 描述 p_data uint8_t* 發送數據的buffer地址 length uint16_t 數據長度 txdone callback 回調處理函數,由HAL實現代碼在發送indication數據完畢后調用 返回值
該函數成功時返回
AIS_ERR_SUCCESS
,錯誤發生時在breeze_hal_ble.h中返回對應的錯誤編碼。 - ble_disconnect
該接口斷開已有的藍牙連接。與
ble_stack_deinit
的區別是,后續還可以進行連接。參數
名稱 類型 描述 reason uint8_t SDK斷開藍牙連接原因,注意非藍牙spec規定的斷開原因,如Remote User Terminated Connect(0x13)、Connection Accept Timeout Exceeded(0x10)等,需要在實現中對接做一次映射。例如SDK傳入 AIS_BT_REASON_REMOTE_USER_TERM_CONN(0x00)
,在實現的時候映射成BT_HCI_ERR_REMOTE_USER_TERM_CONN(0x13)
返回值
無
- ble_advertising_start
該接口開啟藍牙廣播。
參數
名稱 類型 描述 adv ais_adv_init_t* 輸入參數adv指定了所需的廣播信息,包括flag、設備名、廠商數據段內容 返回值
該函數成功時返回
AIS_ERR_SUCCESS
,錯誤發生時在breeze_hal_ble.h中返回對應的錯誤編碼。 - ble_advertising_stop
該接口停止藍牙廣播。
參數
無
返回值
該函數成功時返回
AIS_ERR_SUCCESS
,錯誤發生時在breeze_hal_ble.h中返回對應的錯誤編碼。 - ble_get_mac
該接口用于獲取藍牙設備的MAC地址。
參數
名稱 類型 描述 mac uint8_t* 用于存儲獲取到的藍牙MAC地址,6字節二進制格式:0xAA,0xBB,0xCC,0xDD,0xEE,0xFF(對應MAC地址“AA:BB:CC:DD:EE:FF”) 返回值
該函數成功時返回
AIS_ERR_SUCCESS
,錯誤發生時返回Breeze錯誤編碼。
OS HAL列表
OS HAL接口提供以下功能:
- 定時器支持
- 系統重啟接口
- 系統時間戳獲取和睡眠接口
- Key-Value鍵值讀取接口
- os_timer_new
該接口用于創建定時器。
參數
名稱 類型 描述 timer os_timer_t* 定時器指針 cb os_timer_cb_t 定時器超時回調處理函數 arg void** 回調函數參數 ms int* 超時時間 返回值
成功返回0,否則返回非0值。
- os_timer_start
該接口用于啟動定時器。
參數
名稱 類型 描述 timer os_timer_t* 定時器指針 返回值
成功返回0,否則返回非0值
- os_timer_stop
該接口用于停止定時器。
參數
名稱 類型 描述 timer os_timer_t* 定時器指針。 返回值
成功返回0,否則返回非0值
- os_timer_free
該接口用于銷毀定時器資源。
參數
名稱 類型 描述 timer os_timer_t* 定時器指針 返回值
成功返回0,否則返回非0值
- os_msleep
該接口觸發系統/進程進行睡眠。
參數
名稱 類型 描述 ms int 休眠時長,單位為ms。 返回值
無
- os_reboot
該接口用于重啟OS。
參數
無
返回值
無
- os_now_ms
該接口用于獲取系統當前時間戳(從系統啟動開始計數)。
參數
無
返回值
系統時間戳,單位為ms。
- os_kv_get
該接口用于讀取永久存儲Key-Value鍵值。
參數
名稱 類型 描述 key const char* 鍵名(字符串) buffer void* 鍵值(任意值) buffer_len int* 鍵值長度指針 返回值
成功返回0,否則返回非0值
- os_kv_del
該接口用于刪除永久存儲Key-Value鍵值。
參數
名稱 類型 描述 key const char* 鍵名(字符串)。 返回值
成功返回0,否則返回非0值
- os_rand
該接口用于產生一個整型的隨機值。
參數
無
返回值
隨機有符號整型值。
安全相關的HAL
- ais_aes128_init
該接口對AES128加解密算法context進行初始化。
參數
名稱 類型 描述 key const uint8_t* AES128算法要求的key輸入。 iv const uint8_t* AES128 CBC算法要求輸入的iv值。 返回值
void
指針,指向初始化后的context,后續加解密流程中使用該返回值 - ais_aes128_destroy
銷毀AES128加解密算法context,釋放相關資源。
參數
名稱 類型 描述 aes void* 接口初始化之后返回的context。 返回值
成功返回0,否則返回-1
- ais_aes128_cbc_encrypt
調用該接口進行AES128 CBC加密計算。
參數
名稱 類型 描述 aes void* 接口初始化之后返回的context。 src const void* 指針指向需要加密的數據。 block_num size_t 需要加密的數據塊數(16字節為一塊,不足16字節按一塊計算)。 dst void* 解密后數據的存儲地址。 返回值
成功返回0,否則返回-1
- ais_aes128_cbc_decrypt
調用該接口進行AES128 CBC解密計算。
參數
名稱 類型 描述 aes void* 接口初始化之后返回的context。 src const void* 指針指向需要加密的數據。 block_num size_t 需要加密的數據塊數(16字節為一塊,不足16字節按一塊計算)。 dst void* 解密后數據的存儲地址。 返回值
成功返回0,否則返回-1