当前位置: 首页 > 知识库问答 >
问题:

GATT写入特性后的内部误差

丰飞龙
2023-03-14

我一直在尝试通过葡萄糖服务从一个可编程设备读取葡萄糖测量记录。我能够成功地连接到设备并读取新记录,但当我请求以前记录的列表时,我会收到状态为129的回调(“GATT_INTERNAL_ERROR”)。之后不会发生其他回调,最终传输超时。

据我所知,要检索记录,我需要向记录访问控制点特性写入请求。收到请求后,设备应通过吐出请求的记录来响应。

我的请求代码如下:

private void requestRecords() {
    byte[] requestValue = new byte[] {0x01, 0x01};
    racpCharacteristic.setValue(requestValue);
    bluetoothGatt.writeCharacteristic(racpCharacteristic);
}

其中{0x01,0x01}枚举对应于{"请求存储记录"、"所有记录"}。

setValue()和writeCharacteristic()操作都返回true,表示成功。然后,我的BluetoothGattCallback会收到一个针对RACP特性的onCharacteristicWrite()回调。但是,回调返回的状态是129(内部错误),而不是预期的0(成功)。

我认为我还需要启用RACP特性指示(和/或测量特性通知)以接收记录。但启用过程似乎工作正常,无论我使用哪种通知/指示组合(如果有),我都会收到相同的错误。因此,我认为错误与此无关,但为了完整起见,这里是通知/指示代码,它在记录请求代码之前运行:

private static final String DESCRIPTOR_UUID = "00002902-0000-1000-8000-00805f9b34fb";

...

private void enableNotifications(BluetoothGattCharacteristic char) {
    bluetoothGatt.setCharacteristicNotification(char, true);

    UUID uuid = UUID.fromString(DESCRIPTOR_UUID);
    BluetoothGattDescriptor descriptor = char.getDescriptor(uuid);

    boolean usesIndications = characteristicUsesIndications(char);
    descriptor.setValue(usesIndications ?
            BluetoothGattDescriptor.ENABLE_INDICATION_VALUE :
            BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);

    bluetoothGatt.writeDescriptor(descriptor);
}

我确保在执行后续操作之前等待相应的onExplptorWrite()回调。例如enableNoti的通知

有人能帮我找出哪里出了问题吗?我不相信是这个设备,因为我的iOS对手能够成功地检索记录。我知道有些手机不能很好地与BLE配合使用,所以我正在测试三星Galaxy S5。如前所述,它能够从BLE设备接收新记录,因此希望错误与设备无关。

共有1个答案

邹博明
2023-03-14

在为适应症配置RACP之前,必须为葡萄糖测量和葡萄糖测量上下文启用通知。一些血糖仪只允许启用RACP指示,但作为一般做法,在写入记录访问控制点之前,应启用(2)测量通知和(1)RACP指示。

 类似资料:
  • 我试图读取一个特点后,关贸总协定连接和服务发现成功。但接收错误15(0x0f,GATT_INSUFFICIENT_ENCRYPTION),然后137(0x0089)在gatt回调。在此错误之后,gatt立即断开连接。 我的设备是三星S4,4.4.2。

  • 我试图在我的应用程序中读取一些蓝牙特性。现在我有一个问题,在我的Gatt服务器特性改变后该怎么办。起初,我试图使用一个线程来重新触发读取特性,一次又一次,就像这样: 但问题是,数据似乎在某一点上被破坏(就像我总是从我的MCU端将相同的数据写入特征)。 允许读取像这样的可读取数据吗?有没有什么建议的方法可以一直读取可读取的数据?还是在我的应用程序端更新? 如果你需要任何额外的代码,请告诉我。

  • 在我的设备配置中,gatt。在xml中,我添加了一个带有自定义UUID的自定义GATT特性,并启用了读写属性。配对后使用windows Bluetooth API,当我尝试读取GATT特性时,它工作正常,但写入GATT特性不起作用。我一直被拒绝访问,只有一个例外。下面我添加了gatt样本。xml、bgs和C#代码。我使用的是Bluegiga v1。3.1_API。当前的设置可以与USB加密狗配合使

  • 我试图从蓝牙LE设备(心率手镯)读取GATT特征值。其规格如下: 服务 特点 我还没有弄明白如何“阅读”规范并将其“翻译”成代码。 我需要在我的应用程序上显示设备检测到的心跳。如何解读关贸总协定的价值观?请提供一个代码示例:) 遵循我的实际源代码。 设置BLUETOOT连接 发现BLE设备并与心率监测器连接

  • 我想在main函数中打印Tweet数据类型的实例,但摘要特征不实现调试特征。有没有办法在特征或任何工作上实现特征。取消注释第二行并注释第一行将工作,因为字符串类型实现了显示特征。 error[E0277]: 未实现 -- 错误:由于以前的错误而中止 有关此错误的更多信息,请尝试。错误:无法编译。 要了解更多信息,请使用--verbose再次运行该命令。

  • 问题内容: 在Swift中,定义公共模式的常规方式是什么,在该模式中,属性是外部只读的,但可以由拥有该属性的类(和子类)在内部进行修改。 在Objective-C中,有以下选项: 在接口中将该属性声明为只读,并使用类扩展名在内部访问该属性。这是基于消息的访问,因此可以很好地与KVO,原子性等配合使用。 在接口中将该属性声明为只读,但在内部访问后备ivar。由于对ivar的默认访问受到保护,因此在类