苹果的描述文件中指出iOS设备使用的是resolvable private address,我将iPhone与我的基于CC2541的BLE设备配对后再连接连不上。所以提出以下两个问题,希望有做过iOS蓝牙外设的可以帮帮忙。
1、iPhone作为主机时,使用的是resolvable private address(random address的一种)与外设通信。那么这种地址,需要怎样进行配对与绑定呢?
基于simpleBLEPeripheral的工程中,以iPhone进行配对,发现外设解析地址类型仍为ADDRTYPE_PUBLIC,(应为ADDRTYPE_PRIVATE_RESOLVE)在GAPBondMgr_ResolveAddr();函数中,这个函数中addrType是消息中传过来的,但是那里释放的消息,我就不清楚了。
2、使用resolvable private address的主机,与BLE外设绑定完成后,理论上外设可以通过IRK解析地址,从而识别主机。那么这个时候,主机在我从设备的白名单中吗?
Yan:
丁鹭,
很好,欢迎来这里多问问。
再来一遍:
首先请注意:iPhone的地址是一直在变化的,每隔15分钟变一次,连着或者没连着外设,都会变。
请参考:
1. 所以iPhone 默认是不配对和绑定的。iPhone不会发起配对和绑定请求,除非外设发起。
外设发起配对情况下,是通过在外设端,是通过IRK解析随机地址来完成绑定的,具体你可以看到gapbondmgr.c中, 有GAPBondMgr_ResolveAddr(),gapBondMgrResolvePrivateAddr() 等等。
2. 不在白名单。就像我电话说的,对iPhone来说,白名单不起作用。白名单里面记录的是连接上时候的那个随机地址,你放进去通过IRK解析过的真实地址没用。
dachun zhao:
回复 Yan:
我的实验中,配对请求是master发起的,iphone作为master应该会发起配对请求的吧?而且我的设备和iphone配对了的,只是第一次配对成功后,再次重新连接时,会连接不上~
dachun zhao:
回复 dachun zhao:
不好意思,你说的是对的。我这边是外设发起了安全请求,这个安全请求会让master那边去选择是否发起配对或认证,所以造成了是iphone发起配对的假象
Ray Huang1:
回复 dachun zhao:
能够说说最后怎么解决么?谢谢。