2016-03-02 21 views
0

我试图通过蓝牙SPP配置文件将我的目标连接到移动设备。 蓝牙连接启动后,会发出创建rfcomm通道进行通信的请求。无法读取/ dev/rfcomm

output of 
ls -all /dev/rfcomm0 
crw-rw-rw- 1 root  dialout 216, 0 Jan 1 00:02 /dev/rfcomm0 

一旦创建RFCOMM设备,在我的代码,我打开该文件,并写入数据到它。

fd = open('/dev/rfcomm0', O_RDWR | O_NOCTTY | O_SYNC); 
write(write(fd, &sendBuffer[0], sendBuffer.size()) 

写入成功。 如果我尝试通过rfcomm读取数据,则代码不会继续。

read(fd, recvbuf, recvbuflen) 

由于读取无效,我尝试关闭文件描述符并再次打开它。

这次无法打开/ dev/rfcomm0。它返回-1。

请指导我缺乏的地方。

此外,我是新手,所以如果有任何使用C++的蓝牙SPP文件。

+0

您是否正在尝试阅读刚写的内容?如果是这样,它不会那样工作。您只能读取远程设备在SPP连接末尾写入的内容。 – kaylum

+0

@kaylum不,我不读相同的数据。从目标 - >移动我发送握手缓冲区 从移动应用程序 - >目标我发送坐标。 – Daemon

回答

0

找到了解决方案,我尝试连接的移动应用程序使用不同的UUID进行通信。如果我使用应用程序定义的UUID启动连接,则可以正确读取和写入数据。

但是我仍然有一个查询,蓝牙规范为其配置文件定义了UUID。

For SPP it is 0x0003. 

在我的使用情况下,导航设备使用SPP配置文件的Android应用程序通信,但使用比为0x0003其他UUID。

那么这是否意味着android应用程序可以选择任何随机的唯一UUID,而不是通过规范提到的通过SPP进行通信?

+0

@kaylum可以对此发表评论。 – Daemon