线上购物网站建设的可行性,哪家公司做网站便宜,成都网站设计网站制作公司,深度网络科技是干嘛的摘要#xff1a; AliOS Things从1.2.0版本开始支持蓝牙协议栈(BLE)#xff0c;及基于蓝牙协议栈的应用层开发框架。本文分为三部分对蓝牙组件进行介绍#xff1a;蓝牙组件#xff0c;蓝牙协议栈介绍及接口说明#xff0c;和应用开发框架介绍及示例说明。AliOS Things v1.2…摘要 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设备的handlehandle可以用于标识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设备对应的handledata指定需要指示的数据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蓝牙协议栈