CH573蓝牙定向广播和重新广播问题

请见谅,帖子编辑之后,代码片段总是乱码,只能使用图片贴代码了。

问题1:

a) CH573作为从机,使用蓝牙定向广播,与电脑配对后,可以正常的使用定向广播快速再次连接上,此时定向广播MAC类型为ADDRTYPE_PUBLIC。

b)当主机为华为手机时,手机的蓝牙MAC地址类型为ADDRTYPE_PRIVATE_RESOLVE? 0x03,对应CH573将定向广播的地址类型也修改为ADDRTYPE_PRIVATE_RESOLVE,但还是无法再次与手机进行连接;

请问:如何配置,才可以在主机地址为0x03时,依旧可以让CH573使用定向广播快速的和手机进行连接;

image.png

问题2:

a)CH573蓝牙连接之后,如何让CH573强制断开现有连接,然后进行广播。我使用以下代码,出现两种情况:

情况1:在CH573没有连接的情况下,调用函数GAPRole_TerminateLink(hidEmuConnHandle),再让CH573从定向广播切换到非定向广播时,可以正常的被连接;

情况2:在CH573已经和主机连接时,调用函数GAPRole_TerminateLink(hidEmuConnHandle)断开现有连接,再让CH573从定向广播到非定向广播时,抓包发现CH573的广播事件类型是“不可连接的广播”Non-Connectable,导致无法连接。

切换广播的代码如下(对应定向广播代码如问题1里面所示):


获取hidEmuConnHandle

image.png


切换为非定向广播

image.png


1,定向广播, 一般手机绑定后, 拿到的是 对方设备的public address , 你GAPROLE_ADV_DIRECT_TYPE设置为ADDRTYPE_PUBLIC

2, 断开wch的蓝牙api 通常都是异步的,这意味着, 调用后,要等对应的事件产生, 然后在对应的事件里在执行新的api,

比如你这里调用了断开连接, 要等断开连接的事件产生后,再调用广播API.


@TECH46

感谢您的解答,关于问题1我可能描述的有遗漏,补充如下:


1、实际就是发现使用(GAPROLE_ADV_DIRECT_TYPE设置为ADDRTYPE_PUBLIC),不能和华为手机进行定向广播快速连接。

2、使用下面代码查看的主机是地址类型,发现为ADDRTYPE_PRIVATE_RESOLVE  0x03。查看主机地址类型代码(下图底色为蓝色部分):

image.png

3、将GAPROLE_ADV_DIRECT_TYPE依次修改为ADDRTYPE_PUBLIC、ADDRTYPE_STATIC、ADDRTYPE_PRIVATE_NONRESOLVE、ADDRTYPE_PRIVATE_RESOLVE,每种都不行。


4、到此就不知道原因了,尝试过extern uint8 GAPBondMgr_ResolveAddr( uint8 addrType, uint8 *pDevAddr, uint8 *pResolvedAddr );函数,不知道是使用方法不对,还是其它原因,解析出来地址全是0。(并且我理解怎么可能只有一个地址类型和可解析的地址,就可以解析出主机的真实地址呢?那不是失去了这个随机地址的意义)


请帮忙看一下,给个方向。因为不知道主机的public address,白名单也是无法使用。


只有登录才能回复,可以选择微信账号登录