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 HAL接口如下。
  • 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