情况:
我正在为一些具有 BlueGiga WT12 蓝牙调制解调器的硬件开发一个 android 应用程序。硬件设备以大约 240hz 的频率发送 56 字节的数据包。我正在三星 S5 和 S8 上进行测试。已经为 IOS 和 PC 创建了一个功能齐全的应用程序,因此我们知道硬件设备可以正常工作。
我使用一个单独的线程来读取数据,然后将其分派到主线程。
问题:
我遇到的问题是当我向设备发送命令告诉它开始流式传输时,它开始流式传输,但在我开始以非常慢的 10-60hz 速率接收数据包后不久。
经过一番检查,我意识到设备正在经历缓冲区溢出。
在与我们的硬件人员交谈后,他说唯一可能导致这种情况的原因是手机端的读取速度不够快,导致硬件设备不想发送更多数据包,因为它认为手机不能再接收了硬件设备上的缓冲区溢出。
WT12 启用了流控制,因此这可能是 Android 未向 WT12 发出明确发送信号的问题。但据我所知,我们无法访问所有流控制的东西。
我试过的:
我的第一行攻击是简单地删除任何我认为会减慢读取速度但似乎没有效果的代码。
我还尝试了几乎所有可以使用的蓝牙串行终端应用程序,结果都一样。
因此,我质疑这是否是与硬件设备有关的一些奇怪问题,但是在使用基于 pc 的(蓝牙)串行终端之后,我在 pc 上完全没有问题。
硬件设备也可以通过 USB 而不是蓝牙运行,所以我尝试从它读取数据,与使用蓝牙连接但通过 USB 完全相同。使用 USB 串行连接我完全没有问题。
我的想法:
所以这让我相信问题一定出在手机端的蓝牙调制解调器上。我在想这可能是一个流量控制问题,因为我们在 WT12 上启用了流量控制。也许android没有发送明确的接收信号?
问题是据我所知,流量控制是在蓝牙堆栈中实现的,如果我没记错的话,我们作为开发人员无法控制它?
除了流量控制之外,我真的不知道是什么导致硬件设备不想向我发送数据。