将一台蓝牙设备连接为多台设备

Posted

技术标签:

【中文标题】将一台蓝牙设备连接为多台设备【英文标题】:Connect one bluetooth device as multiple devices 【发布时间】:2015-07-13 07:09:45 【问题描述】:

我意识到一个主设备可以连接多个蓝牙设备。

我的问题很简单:具有单个 MAC 地址的单个蓝牙芯片可以连接到另一个蓝牙设备作为多个客户端吗?

编辑: 基本上可以接受具有相同MAC地址的多个蓝牙客户端,如果不能,客户端计算机可以使用不同的假地址连接吗?

例如,我正在为 Wii/WiiU 编写模拟 wiimote 的软件。我希望使用单个蓝牙 USB 加密狗模拟多个 wiimote。

如果需要 hack,则首选 C 或 C++ 代码。 如果平台相关,最好用于 Windows。 请在任何答案中进行描述。

【问题讨论】:

【参考方案1】:

蓝牙 HID 规范 v1.0

4.4 每个主机多个设备/每个设备多个主机

蓝牙 HID 不得对每台主机的设备数量设置任何限制(每个微微网最多允许七个同时活动的设备)。如果主机愿意,所有受信任的设备(已经过身份验证或不需要安全程序的设备)都应被允许同时连接到主机。例如,允许使用多个蓝牙鼠标和键盘。这种情况下的行为应与 USB 情况相同;即,允许来自所有设备的输入,并且数据流在逻辑上是“或”在一起的。

同样,单个蓝牙 HID 可能已建立绑定或其地址为多个主机所知。但是,如果它已声明自己已通过虚拟电缆连接,则设备必须一次仅支持单个主机连接,并且一次仅支持到该主机的一个控制和一个中断 L2CAP 通道(请参阅 SDP 属性 HIDVirtualCable)。如果设备尚未声明自己已虚拟连接,仍建议设备一次仅支持单个主机连接,即一次最多可以打开一个 SDP、控制和中断通道。实现虚拟电缆功能的蓝牙 HID 应有足够的资源来记住至少两台主机,建议使用四台主机,以便以后无需输入密钥即可更轻松地重新连接。

【讨论】:

单个主机和单个客户端之间的多个 SPP 服务连接确实有效。但是,未知 HID 是否也允许这样做。看起来蓝牙规范不建议这样做,这向我表明 BT 堆栈可能有不同的津贴。根据经验,HID 主机似乎覆盖了某些蓝牙安全设置,可能违反了标准。所以,似乎唯一能确定答案的方法就是尝试一下。【参考方案2】:

我不确定您要的是什么,但是:

一个蓝牙网络称为 piconet,一个 piconet 必须至少有 2 个设备,最多 8 个设备(7 个从设备和 1 个主设备)。一个设备可以是一个或多个微微网的成员,但他只能是其中一个的主设备,这个设备被称为桥接器,因为他在一个分散网中混合了更多的微微网。

因此,您可以将具有单个 MAC 地址的单个蓝牙芯片连接到更多蓝牙设备,但我认为您不能将同一设备 A 与多个客户端连接到同一个 Master M,因为当 Master M 启动时查询阶段 A 只会用他的 MAC 地址和他的时钟偏移量响应一次,稍后在寻呼阶段 M 和 A 将建立一个连接。

【讨论】:

以上是关于将一台蓝牙设备连接为多台设备的主要内容,如果未能解决你的问题,请参考以下文章

flutter 蓝牙ble(blue tooth),同时连接多台/多个设备

BluetoothLE-Multi-Library 一个能够连接多台蓝牙设备的库,它可以作为client端,也可以为server端。支持主机/从机,外围设备连接。

如何检测我通过蓝牙连接从一台设备发送到另一台设备的消息

如何获取蓝牙配对设备的设备名称?

Flutter 如何检查我的设备是不是通过蓝牙连接到另一台设备

排队蓝牙连接请求并同时接受