BLE 如何获取主机地址

  • 概述

今天就跟大家分析一下在 BLE 中开发时遇到的一个功能实现过程:获取主机端的蓝牙地址。相信我们在使用鼠标键盘时,都会注意到一个功能:就是在能够通过按键实现设备切换到不同电脑端使用。在这个功能的实验中就需要获取主机的地址用于进行切换了。废话不多说,现在我们就来介绍两个方法给大家以供参考。

  • 流程分析

按照惯例,这个时候我们第一件事就是先抓包,我们先看一下 BLE 在连接过程中在哪一个阶段进行地址交换

可以在数据抓包中看到,在主机建立连接时 Connect_IND 的数据包中就已经有一个参数 Initiator Address 了,这就是就连接发起者即主机的地址。这个就是我们需要的地址了。好了,我们知道了主机在发起连接时就已经会将自己的地址发过来时,这个时候我就看一下代码层面是怎么实现的。

  • 流程分析

现在我们就以 QN9080 平台为基础来介绍两种方法用来获取主机的地址。

第一种就是我们在鼠标键盘中常用到的方法,直接通过内部 SDK 中给出的 API 用来获取,如下图所示:


这个函数在我们获取已经绑定的设备的信息,其中的 aOutIdentityAddresses 中就有相关的数据,这个数据类型展开如下:


其中地址就是在 identityAddress 里面,如下图所示


这个方法主要是获取已经绑定好的设备的地址,但是有时候在一些 BLE 开发中是不会进行设备绑定的操作,这个时候我们可以使用下面第二种方法了

在 SDK 中,我们可以看在 BLE 连接的回连事件函数中找到一个参数,如下所示


我们展开这个参数的数据类型,如下所示


其中在连接成功时,union 中的数据类型为 connectedEvent 的参数了,我们继续追下去看一下,


果然,在里面我们可以看到一个熟悉的参数 peerAddress,这个就是我们想要获取的主机地址。


所以在不进行绑定时,我们可以在连接时就记录主机的地址。



  • 总结

在上述中,我们主要介绍了两种方法来获取主机端的蓝牙地址,以便大家在 BLE 开发过程中更好更快的实现自己想要的功能。

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论