2

我有几个我试图在 Linux 中连接的蓝牙设备。除了一个之外,我对任何设备都没有问题。不同之处在于所有其他设备以(我假设的)标准方式处理它们的蓝牙连接,即它们等待主机设备(PC)启动连接。另一方面,另一台设备每隔几秒就会尝试启动连接,中间有大约一秒钟的睡眠时间。

对于其他设备,我一直是这样连接的:

rfcomm connect /dev/rfcommX <deviceMacAddress>

(其中 X 是任何未使用的 rfcomm 端口号)

在发出此命令之前,我使用所需的配对密钥运行蓝牙代理。这里的一切都很好。

对于有问题的设备,这在设备配对之前第一次效果很好。然而,在配对之后,rfcomm connect 命令很可能会失败。这是因为设备本身正在尝试初始化连接。当设备处于睡眠状态时,连接失败(“主机关闭”)。

相反,我发现,对于这个设备,下面的命令就像一个魅力:

rfcomm listen /dev/rfcommX

(我必须先通过 sdptool add SP 添加一个串口)

由于 PC 将坐在那里等待来自设备的传入连接,因此每次都有效。

但是,当我拥有多个设备时,问题就出现了。rfcomm listen 命令运行良好,但似乎没有办法控制哪个设备(由 Mac 地址标识)连接到哪个 rfcomm 端口;如果打开了多个设备,那么第一个尝试连接的设备将连接,无论如何。然而,在我们的应用程序中,我们希望用户知道他们正在连接哪个设备。

以前有没有人处理过这样的事情?我们正在考虑编写 bluez 蓝牙包的自定义版本,因此我们将不胜感激任何帮助:)

4

1 回答 1

0

要么编写一个 udev 规则,每次都创建一个具有相同名称的符号链接,要么按照适当的路径到达/sys设备。

于 2011-02-28T17:43:52.707 回答