我有一个通过蓝牙低功耗连接到CC2541的应用程序。我只想缓存每个设备的独特内容,以便用户只连接到“他们的”设备。我尝试过使用
- (NSArray *)retrievePeripheralsWithIdentifiers:(NSArray *)identifiers
甚至扫描和比较扫描外围设备的UUID,但我必须每隔几个应用程序启动时选择一个新生成的UUID。相同的代码在8.1上运行良好,我很少(如果有的话)必须选择一个新的UUID。
我已经在设备信息服务中讨论检查系统ID(2A23 uuid),但这需要连接来检查地址,所以我必须连接到每个附近的外围设备,获取并比较系统ID,然后要么保持联系,要么断开连接并检查下一个。
我正在运行的CC2541代码没有使用配对,我想保持这种方式。我很好奇是否有其他人找到了解决这种情况的方法。
答案 0 :(得分:0)
走上这条路,花费数周的时间来找到解决限制的方法,我发现的唯一方法就是你可以控制硬件并将自己的唯一标识符放在广告包中。虽然人们可以就这个问题做出各种各样的断言,但事实就是如此。
答案 1 :(得分:0)
我只想在这里发布一些可能在将来帮助其他人的代码。
把它放在函数之外的某个地方:
__xdata __no_init uint8 BT_MAC_ADDR[6] @ 0x780E;
将它放在您的advertData数组中:
7, //length of data
GAP_ADTYPE_MANUFACTURER_SPECIFIC, //Custom data
0,0,0,0,0,0, //Placeholder bytes
最后在调用GAPRole_SetParameter之前更新advertData。
uint8 advertSize = sizeof(advertData);
memcpy(&advertData[advertSize-6], BT_MAC_ADDR, 6);