Python 已禁用蓝牙缓存。但应用程序仍然获取错误的数据?

Python 已禁用蓝牙缓存。但应用程序仍然获取错误的数据?,python,bluetooth,bluetooth-lowenergy,gatt,Python,Bluetooth,Bluetooth Lowenergy,Gatt,以前我们有一个问题:如果我们的固件的新版本中的特性发生了变化,那么应用程序将获得错误的数据。通过表示已更改的特征,它可以是添加或删除的特征,也可以是向现有特征添加通知。为了保留配对信息,将“/var/lib/bluetooth”文件夹复制到新构建的分区中。我们意识到没有“服务变更指示”。应用程序无法处理更改的服务。因此,我们通过在“/etc/bluetooth/main.conf”中设置此选项来禁用蓝牙缓存: 但是最近,即使蓝牙缓存被禁用,我们也再次看到了这个问题:在版本101中,一个特性被删除

以前我们有一个问题:如果我们的固件的新版本中的特性发生了变化,那么应用程序将获得错误的数据。通过表示已更改的特征,它可以是添加或删除的特征,也可以是向现有特征添加通知。为了保留配对信息,将“/var/lib/bluetooth”文件夹复制到新构建的分区中。我们意识到没有“服务变更指示”。应用程序无法处理更改的服务。因此,我们通过在“/etc/bluetooth/main.conf”中设置此选项来禁用蓝牙缓存:

但是最近,即使蓝牙缓存被禁用,我们也再次看到了这个问题:在版本101中,一个特性被删除。但是,当我们将构建从100升级到101时,应用程序会得到错误的数据。我们看了看日志。当应用程序尝试使用温度UUID读取温度时,不知何故,我们创建的蓝牙服务收到了读取“设备名称”(设备名称UUID)的请求。因此,“设备名称”作为温度返回应用程序。这看起来与未禁用蓝牙缓存的行为相同。我查看了“/var/lib/bluetooth/[BT_MAC]/cache”文件夹。文件夹中的文件中没有“[Attributes]”节。这意味着禁用的缓存似乎正在工作

解决此问题的唯一方法是强制退出应用程序,并在iOS中“忘记此设备”,或在Android中“取消配对”

我看了看btmon日志。对于工作btmon日志,“ACL数据发送”下有“属性组列表:XX个条目”。但是在有问题的btmon日志中的“ACL Data TX”下没有“Attribute group list:XX entries”

问题:

  • 即使蓝牙缓存被禁用,这怎么可能仍然发生
  • 这是运行GATT服务器的Linux端的问题还是移动端的问题
  • 还有什么我们需要调查的吗
  • 我们很快就要发布我们的产品了。这对我们来说是一个关键问题。如果你有任何建议,请帮忙


    谢谢

    这无疑是移动端的一个问题。iOS确实会缓存每个可扩展设备,除非它实现了服务更改特性。如果android设备缓存了BLE设备,它需要接收服务更改指示。我们希望在GATT服务器端支持“服务更改指示”,但不知道如何做。我们的GATT服务器基于。有人提到“如果您正在向Bluetooth注册服务,那么它应该生成服务更改”。这是否意味着我们需要调用RegisterApplication()?是的。但我们从未见过“[ServiceChanged]”secion()。您知道如何在GATT服务器端添加“服务变更指示”吗?
    [GATT]
    Cache = no