蓝牙数据更新通知未被解雇

时间:2017-06-22 14:37:47

标签: ios objective-c bluetooth core-bluetooth bluegiga

我在从蓝牙外设读取数据时遇到了一些问题。我们有一个带有以下gatt细节的蓝牙设备。

<service uuid="service id" advertise="true">
    <description>XXXX service</description>
    <characteristic uuid="characteristic id" id="xgatt_data">
        <description>Data</description>
        <properties write="true" indicate="true" />
        <value variable_length="true" length="20" type="user" />
    </characteristic>
</service>

我在做什么

  • 搜索具有“服务ID”的外围设备
  • 找到后连接到外围设备并对其进行强有力的参考。
  • 连接设置委托并搜索所有服务后 提供
  • 循环所有服务并在我们发现后扫描特征 服务
  • 在我找到所需的特征后,我正在启用通知
  • 在按钮上单击我将数据写入特征

我可以连接到设备。我也可以将命令(数据)发送到外设。一旦我们向设备发送任何命令,它将发送一些数据作为响应。我可以在设备上看到日志,它会在收到任何命令后发回一些数据。但是在我的iOS设备中,我无法通过使用通知或正常读取功能来读取数据。我在这里缺少什么?

2 个答案:

答案 0 :(得分:2)

通知和指示是两回事:如果启用指示,您将不会收到通知,如果启用指示,则发送指示的应用程序需要响应每个发送的指示(来自应用程序层)。

此外,您的权限似乎不太正确:xgatt_data特性不一定需要“写入”权限,除非您打算让客户更改其。如果您想要从通知中读取数据,则需要“读取”权限,而不是仅仅通知它已收到通知。

要启用通知,xgatt_data特性中需要客户端特征配置描述符(UUID 00002901- ..)。此CCCD需要“读取+写入”权限才能启用通知/指示(某些工作没有读取权限,有些则不行)。

最后确保您的设备永远不会同意属于通知大小的属性MTU,如果外围设备不适合单个程序包,则不会被外围设备接收。如果使用了数据长度扩展,则在协商DLE之前不要启用通知,或者将通知值大小保持在设备的原始最小属性MTU 之下。

答案 1 :(得分:0)

我发现了这个问题。实际问题是模拟器。现在我可以获得数据更新指示,并且能够仅使用&#34;读取&#34;将数据写入BLE。和&#34;表示&#34;属性。