2

如何发送 28 字节的外设名称密钥广告数据并由中央接收?

通常,使用 UUID,外设名称键广告数据中只有 8 个字符的空间。

但是有一个 TRICK:
我发现如果我的 name 键有 28 个字符,则中心广告数据为空,但所有 28 个字符都出现在中心的 didDiscoverPeripheral 的 peripherl.name 变量中一次。但是下一次中央扫描同一设备时,它会得到“iPad”的 GATT 值(因为我的中央和外围设备在两个 iPad mini 上。)

苹果文档。说它通常发送 GATT,但我观察到它总是发送一次 28 个字符的名称。

背景:我想将标识数据放在外设的广告数据中,以避免读取值交换。原因是设备之间的通信交换时间最短,以节省时间和电池。

我试过关闭扫描然后重新打开,然后停止并重新开始广告。同样的问题。

4

2 回答 2

1

不幸的是,这是行不通的。连接后,CoreBluetooth 会读取设备名称特征,稍后将其用作外围设备的名称。您设置的名称将始终出现的唯一位置是广告数据:

(lldb)po advertisementData

{
    kCBAdvDataChannel = 37;
    kCBAdvDataIsConnectable = 1;
    kCBAdvDataLocalName = MyPeripheral;
    kCBAdvDataServiceUUIDs =     (
        "Unknown (<e20a39f4 73f54bc4 a12f17d1 ad07a961>)"
    );
}

无法以任何方式在 iOS 设备中访问设备名称特征。

于 2013-09-23T20:46:41.833 回答
0

可能是蓝牙 LE 控制器有一个参数集来过滤重复项。如果您没有对 HCI“设置扫描启用”命令的 API 调用,您可能需要 HCI 层访问权限来更改此设置。请参阅蓝牙核心规范 v4.0 第 2 部分 E 部分 7.8.11

于 2013-09-19T13:26:00.607 回答