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