0

在继续尝试为 CSR1010 开发套件编写一些固件之前,我正在使用 ANCS 来尝试了解它的工作原理。

我一直在目标 C 中编写一个命令行应用程序,它充当中心,然后询问 ANCS 服务。我可以毫无问题地接收通知源并使用正确的详细信息写回控制点以拉回我想要的属性。

我现在遇到的问题是我不确定数据源特征何时完成传输。我拥有的 MTU 大小为 20 字节,因此我返回的数据会拼接成必要的数据包并正常发送。当传输结束时,我无法清醒过来,据我所见,消息标签没有结束或任何谎言或任何验证所有数据已到达的方式,以便我可以将它们重新缝合在一起.

苹果在 ANCS 上的文档

如果对 Get App Attributes 命令的响应大于协商的 GATT 最大传输单元 (MTU),则 NP 将其拆分为多个片段。NC 必须通过拼接每个片段来重构响应。当接收到每个请求属性的完整元组时,响应就完成了。

您如何知道“何时收到每个请求属性的完整元组。”?

谢谢 //56k

4

1 回答 1

0

ANCS 规范(https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleNotificationCenterServiceSpecification/Specification/Specification.html#//apple_ref/doc/uid/TP40013460-CH1-SW7)指出:

如果响应大于协商的 GATT 最大传输单元 (MTU),则 NP 将其拆分为多个片段。NC 必须通过拼接每个片段来重构响应。当接收到每个请求属性的完整元组时,响应就完成了。

当您发送 GetNotificationAttributes 请求时,您需要存储您请求的属性列表(或至少您请求的属性列表)。然后,在解析响应时,您需要继续等待更多拆分的数据包,直到收到您请求的所有属性。这基本上意味着相信 ANCS 总是能完全回答,这应该是这样的;但是,为了安全起见,我会在您的代码中添加超时。这样,如果 ANCS 以某种方式卡住了,你就不会在它的混乱中跟随它 =)

马泰奥

于 2014-10-20T17:34:14.193 回答