• 正文
  • 相关推荐
申请入驻 产业图谱

BLE主机实战:主机如何断开与从机的BLE连接

09/02 08:55
232
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

一、前言

本篇将编写代码让主机主动断开与从机的BLE连接。

二、阅读说明

1、泰凌微芯片开发学习者。2、芯科芯片开发学习者。3、蓝牙 spec学习者。

三、正文

1、使用的demo

泰凌芯片:ble_master_kma_dongle

芯科芯片:Bluetooth - SoC Blinky

2、断开API函数介绍

/** * @brief      for user to start disconnection process in master role . * @param[in]  handle - connect handle * @param[in]  reason - terminate reason * @return     status, 0x00:  succeed *                     other: failed */ble_sts_t   blm_ll_disconnect (u16 handle, u8 reason);

齐总handle是句柄,单连接的handle是固定的值为BLM_CONN_HANDLE,reason为断开的原因,其中断开原因为枚举类型,大家可以参考“tc_ble_single_sdkstackbleble_common.h”中的ble_sts_t。

平时我们主动断开可以填写HCI_ERR_REMOTE_USER_TERM_CONN,如下是该值所对应的数值。

3、断开连接回调函数

如上图所示,在blm_disconnect_event_handle()函数中增加如下打印代码。

printf("nlink disconnect sucess,reason = %02xn",pDisConn->reason );

在断开之后会打印出相关的log。

4、编写主动断开的函数

void mater_send_disconnect_cmd(){    static u32 time_count = 0;    static u8 flg = 0;    if(blc_ll_getCurrentState() == BLS_LINK_STATE_CONN)    {        if(flg == 0)         {            time_count = clock_time();            flg = 1;        }        if((flg == 1) && (clock_time_exceed(time_count, 5000000)))        {            flg = 2;            blm_ll_disconnect (BLM_CONN_HANDLE, HCI_ERR_REMOTE_USER_TERM_CONN);            printf("nsend disconnect cmd successn");        }    }}

上述代码的作用为,当连接成功之后,延时5s,发送断开指令。

备注:该函数需要放在主循环里面。

5、串口打印结果

send disconnect cmd success

link disconnect sucess,reason = 16

上述是打印出来的结果,这里发现一个问题,打印出来的数值为0x16,和我们人为给的数值0x13不符合,本篇先不进行讲解,留到下篇再进行讲解。

四、结尾

本篇的讲解了主机主动断开的API函数。

相关推荐

专注BLE实战开发,也分享物联网、嵌入式等相关技术

微信公众号