在蓝牙 rfcomm 设备上读取时数据丢失

Data lost while reading on Bluetooth rfcomm device

我有一个蓝牙设备通过蓝牙 SPP 配置文件连接到 Android 智能手机。

连接成功后,设备打开rfcomm设备

handle = open("/dev/rfcomm0", O_RDWR | O_NOCTTY | O_SYNC);

连接成功后,智能手机向设备发送数据。 它向设备发送 3 个连续的几个字节的消息。这是在查看蓝牙设备的snoop log后验证的

然而,蓝牙设备端的阻塞读取永远无法读取最初的 2 条消息,之后它会读取所有其他消息。

同样的实验是通过编写一个独立的脚本来尝试的,该脚本在 SPP 连接成功后立即开始读取 rfcomm 设备上的数据,但这里的结果也是一样的。

请指点一下哪里有问题。

或多或少是时间问题。

设备上的应用请求蓝牙堆栈与 Android phone 创建 SPP 连接。 SPP 连接成功后 /dev/rfcomm0 设备由蓝牙堆栈创建。

一旦创建了 rfcomm 通道,Android phone 就会向设备发送数据,但此时设备上的应用程序还没有随着 rfcomm 设备的创建而更新。由于没有 rfcomm 的读取器,蓝牙堆栈刷新它从 Android phone.

接收到的所有数据

多次执行此实验,一次成功。