TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2340R5: 如何在Address Mode为Public Address模式下及时更新advertising name?

Part Number:CC2340R5

Public Address模式下设置新的device name,重启设备,advertising name还是显示上一次设置的名字。

如何做到设备名字改变,立即刷新advertising name?

Yolande Wang:

可能是 App 的问题。

用 Lightblue 试一下,应该不会去拿 cache 过的设备;Simplelink Connect 可能把上一次的 device name 保存了,就没有主动拿新的 device name。

,

Xuefeng:

测试了Light blue,结果和Simplelink Connect是一样的。

这个没有办法在BLE的APP端去控制吗?

,

Yolande Wang:

首先确定下设备广播包里的名称修改成功。

可以用另一个人的手机(没有连接过的)来搜索试一下。

,

Xuefeng:

广播包名称修改成功了,新设备搜索可以看到新名字。

,

Yolande Wang:

在 iPhone 上增加一个步骤:忽略该设备。

有可能是 iOS 自己缓存了一次,而不是 App 自己缓存。

,

Xuefeng:

目前我的BLE还无法完成忽略设备这个操作,在iPhone的蓝牙列表里可以连接BLE,但是无法操作断开,连接后蓝牙名字后面没有符号

,

Yolande Wang:

我看了下这个函数:GAPBondMgr_FindAddr() 

它就是针对 random private resolvable address (RPA)类型的地址有效。

 

,

Xuefeng:

Yolande Wang 说:

我看了下这个函数:GAPBondMgr_FindAddr() 

它就是针对 random private resolvable address (RPA)类型的地址有效。

RPA模式下这个函数返回false所以快速刷新设备名吗?

,

Xuefeng:

在public address模式下,设置名字A,然后重启,设置名字B,当前搜索到的名字只有A,如果不做操作,很长时间内搜索到的名字都是A,但是如果反复连接再断开,几次之后搜索到的设备名变为B。所以是不是有什么操作可以让手机端快速刷新到新的名字B?

,

Yolande Wang:

正如上面说到的,手机缓存了之前的设备信息,解决办法可以是:

点击”忽略该设备“来清除之前的信息。
关闭并重新打开手机的蓝牙功能。
切换到飞行模式,再切回正常模式,可以清除缓存并强制刷新设备列表。

,

Xuefeng:

Yolande Wang 说:点击”忽略该设备“来清除之前的信息。
关闭并重新打开手机的蓝牙功能。
切换到飞行模式,再切回正常模式,可以清除缓存并强制刷新设备列表。

方法2和3试过了,甚至重启了手机,设备名字都没有更新。

对于方法1忽略该设备,这个是不是要对BLE做什么设置,目前我这里连接后没有办法去执行这个操作。

,

Yolande Wang:

Xuefeng 说:方法2和3试过了,甚至重启了手机,设备名字都没有更新。

等待一段时间或者尝试在不同的蓝牙扫描应用程序中进行扫描。

Xuefeng 说:对于方法1忽略该设备,这个是不是要对BLE做什么设置,目前我这里连接后没有办法去执行这个操作。

通常是不需要额外设置的。

方便手机截个图看下吗?

,

Xuefeng:

设备BLE_ABCDE已经连接,但是后面没有i图标。

,

Yolande Wang:

可以尝试断开并重新连接设备,或者检查手机蓝牙设置中的连接状态,以确保连接处于正常状态。

,

Xuefeng:

其他几个设备断开连接的按钮也是在点击图标i才能看到。目前只能关掉手机蓝牙,或者BLE断电。

,

Yolande Wang:

是的,关掉手机蓝牙再打开

,

Xuefeng:

试过了,包括重启手机。

也试过烧写示例中其他BLE程序,也是没有图标i,无法执行“断开连接”或者“忽略此设备”操作。

我猜测是需要给BLE设置什么属性,在设备列表中才会有这个图标i。

,

Yolande Wang:

CC2340 用于蓝牙低功耗(BLE)的应用,而不是经典蓝牙。

所以当手机通过蓝牙连接到设备时,实际上是建立了一种 BLE 连接,而不是经典蓝牙连接。

在 iOS 的蓝牙界面,通常不会提供忽略 BLE 设备的选项。

,

Xuefeng:

Yolande Wang 说:在 iOS 的蓝牙界面,通常不会提供忽略 BLE 设备的选项。

这个有相关链接查阅吗?

现在这种情况进入了死结,还得麻烦帮忙查找如何清空iOS设备存储的BLE信息,这个对我现在的开发影响很大。

,

Xuefeng:

测试了安卓的simplelink connect,public模式下可以及时更新广播名字。

广播包的数据一直都是最新的,iOS端Simplelink connect是否可以从广播包拿设备名字显示?

,

Yolande Wang:

请问一下,是基于什么样的场景需要在 OAD 前后要有不同的 device name

(即什么场合会需要在连接之后要特定地修改一次名字然后再广播出来)

,

Xuefeng:

OAD前后不修改设备名,但是设备名每次起机都可能会被修改。

,

Yolande Wang:

您的需求是设备端修改了 device name,在下一次设备上电时 device name可以自动更新。

现在安卓的 App 是正常的,只是 iOS 没有更新。

基于之前的测试, iOS 上的 Light Blue 或 Simplelink Connect 都没有自动更新 device name。 

给出的解决方案是:

1.关闭蓝牙,然后再次打开,看看是否能获取到更新后的 device name。

2.重启 iOS 设备可能会清除缓存并更新设备名称。

尝试上面的两种方案后,重新连接设备,名字会更新吗?

Xuefeng 说:广播包的数据一直都是最新的,iOS端Simplelink connect是否可以从广播包拿设备名字显示?

这个是可以的,但是需要修改应用程序。

,

Xuefeng:

Yolande Wang 说:

1.关闭蓝牙,然后再次打开,看看是否能获取到更新后的 device name。

2.重启 iOS 设备可能会清除缓存并更新设备名称。

尝试上面的两种方案后,重新连接设备,名字会更新吗?

这些方式都试过了,设备名字并没有更新。iOS设备连接间隔一天后再次连接,显示的还是旧名字。

如果我通过simplelink连接BLE,然后退出到蓝牙设备列表,再连接-退出,如此反复,一般两三次,设备名称就更新了。所以我猜测有什么消息会影响到iOS设备的名称更新。如果在广播包里加上这个消息,也可能会很快刷新名字。

,

Xuefeng:

Yolande Wang 说:这个是可以的,但是需要修改应用程序。

这个应用程序什么时候再次更新,并且是否采用这种方式是不是很难确定?

,

Yolande Wang:

Xuefeng 说:如果我通过simplelink连接BLE,然后退出到蓝牙设备列表,再连接-退出,如此反复,一般两三次,设备名称就更新了。所以我猜测有什么消息会影响到iOS设备的名称更新。如果在广播包里加上这个消息,也可能会很快刷新名字。

按照开发经验是这样的:广播包里加更新字段,有一个字段如果是通过接口获取的,长时间不动,会考虑缓存下来,方便下次快速读取;如果接口里面的字段数据发生了更改,那么接口的 header 里必须有一个更新的标识,这样就知道有更新,然后去重新获取。

可以看下广播包相关的文档,是不是有类似的实现机制。

赞(0)
未经允许不得转载:TI中文支持网 » CC2340R5: 如何在Address Mode为Public Address模式下及时更新advertising name?
分享到: 更多 (0)