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蓝牙组件总体结构如下图所示。
ble2

蓝牙协议栈及接口

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及蓝牙组件信息,请戳https://github.com/alibaba/AliOS-Things

目录
相关文章
|
物联网 开发工具 C++
AliOS Things 的 ESP32 应用开发流程
本文介绍 Windows 下基于 AliOS Things 的 ESP32 应用开发流程,包括环境搭建、程序编译、固件烧写。
10067 5
|
人工智能 物联网 芯片
这个土味视频告诉你, AliOS Things 蓝牙Mesh配网有多快!
若问如今最热门的IoT连接技术是啥? 那一定是蓝牙Mesh ! AliOS Things蓝牙Mesh 全新升级后配网速度能有多快? 让这个土味视频告诉你
447 12
这个土味视频告诉你, AliOS Things 蓝牙Mesh配网有多快!
|
物联网 开发框架
AliOS Things 3.0 应用开发指南
AliOS Things 3.0 于不久前刚刚发布,在新版本中带来了全新的应用开发框架,帮助用户快速构建自己的应用,使用户可以更专注于自身应用的开发。本文将为大家详细介绍 AliOS Things 3.0 版本的下载及使用方法。
1375 0
|
传感器 消息中间件 物联网
HCIA物联网初级考试-第五章物联网操作系统及感知层开发介绍
HCIA物联网初级考试-第五章物联网操作系统及感知层开发介绍
HCIA物联网初级考试-第五章物联网操作系统及感知层开发介绍
|
AliOS-Things 物联网 编译器
使用HaaS Studio开发AliOS Things C/C++应用
本文章将介绍使用HaaS Studio 进行AliOS-Things C/C++应用开发。
使用HaaS Studio开发AliOS Things C/C++应用
|
算法 AliOS-Things 物联网
HaaS100开发调试系列 之 定位AliOS Things内存及Crash问题
本文主要说开发调试过程中经常遇到的内存问题。
HaaS100开发调试系列 之 定位AliOS Things内存及Crash问题
|
NoSQL 物联网
使用线上的开发板做开发调试 |《AliOS Things快速开发指南》
当您手上没有现成可用的开发板时,也可以使用线上的开发板来调试验证您的程序。本文主要介绍线上开发板的使用流程。
使用线上的开发板做开发调试 |《AliOS Things快速开发指南》
|
监控 AliOS-Things 物联网
使用线下开发板进行开发调试 |《AliOS Things快速开发指南》
本文主要介绍如何使用VSCode进行项目编译、固件烧录及串口监控。
使用线下开发板进行开发调试 |《AliOS Things快速开发指南》
|
域名解析 JSON AliOS-Things
AliOS Things 开发:让你的开发板支持 AliOS Studio 烧录
本文主要为大家讲解如何进行 AliOS Studio 烧录。
1111 0
AliOS Things 开发:让你的开发板支持 AliOS Studio 烧录
|
物联网 NoSQL Windows
AliOS Things开发:让你的开发板支持AliOS Studio调试
在AliOS-Things 2.1版本之后,AliOS Studio提供了一套简单易懂的接口可以让开发者很容易适配开发板支持调试功能。
AliOS Things开发:让你的开发板支持AliOS Studio调试
下一篇
无影云桌面