【发布时间】:2019-04-26 12:04:27
【问题描述】:
我有一个在使用 bluez d-bus api 的 Raspberry Pi 上运行的 c++ 应用程序。它支持来自不同供应商的多个传感器,但在大多数情况下,一旦我开始使用第一个传感器,添加新传感器就相当简单了。连接后,我并没有真正使用任何太奇特的东西,只是“StartNotify”、“StopNotify”、“ReadValue”和“WriteValue”。无论如何,最近我在添加几个新传感器时遇到了问题。两者都使用更大的数据包大小,因此使用数据包嗅探器我可以看到传感器协商更大的 MTU。无论出于何种原因,尽管在谈判之后我可以读取更大的价值特征,但无法启用通知(或无论如何接收)。使用 bluetoothctl 尝试不同的方法我发现使用“acquire-notify”似乎可以解决问题。我还注意到新的“获取”命令返回 MTU,所以可能与它有关。回到我已经支持的传感器,我还发现用“AcquireNotify”替换“StartNotify”似乎也适用于它们。所以我的决定是是否对所有传感器使用“AcquireNotify”(让我的代码更干净)或者只是给我一个问题的新传感器。
不幸的是,我还没有真正找到有关新“获取”接口的任何深入文档。对于没有太多 bluez 历史的人来说,根本不清楚使用它们与原始界面的后果是什么。所以我的问题是双重的 -
- 有什么理由不使用“AcquireNotify”/“ReleaseNotify” 所有传感器(甚至是使用旧/更低 MTU 的旧传感器)?
- 使用“AcquireNotify”时是否使用 其他特征上的“ReadValue”/“WriteValue”,或者我应该是 使用“AcquireRead”/“AcquireWrite”?
非常感谢任何信息,谢谢!
【问题讨论】:
标签: linux raspberry-pi bluetooth-lowenergy dbus bluez