5

我试图从 Wii Fit(平衡板)获取输出。我可以通过 C++ 蓝牙枚举器找到该设备,但尝试通过 Windows 套接字连接失败。

我想知道是否有人在这样的方向上取得了成功(C++,Windows)我很想听听你是怎么做到的。

4

3 回答 3

5

Wii 平衡板是一款 HID 设备。要了解与平衡板的通信,您需要对蓝牙 HID 有所了解。WiiBrew 上有很多关于WiimoteWii 平衡板的信息。

我认为您不能使用 Windows 套接字连接到 HID 设备。Windows Socket 蓝牙接口只允许您连接到基于 RFCOMM 的服务。HID 基于 L2CAP,它位于蓝牙协议栈的下方。MSDN上有一些关于该限制的信息。

如果您只是想尝试一下,可以试试Bluecove for Java。您可以使用另一个堆栈(例如,Widcomm)来做某事。如果您被锁定在 Windows 和 C++ 中,您可能需要考虑为平衡板编写自定义 HID 驱动程序。

于 2011-03-05T17:52:19.220 回答
1

正如 pwc 所说,MS 蓝牙 API 存在限制,因此使用套接字除了 RFCOMM 之外,您不能拥有其他东西,但这并不意味着您不能在 L2CAP 层下降。您要做的是实现客户端配置文件驱动程序,您可以使用 MSDN 中的一篇文章作为起点:创建与远程设备的 L2CAP 客户端连接,反之亦然:在蓝牙配置文件驱动程序中接受 L2CAP 连接

接下来当然正如 pwc 所说,您必须研究蓝牙 HID 和 WiiBrew 的通信协议。

另一个值得阅读的好文档是蓝牙无线技术常见问题解答 - 2010,其中明确指出可以与 Microsoft 蓝牙堆栈驱动程序建立 L2CAP 连接。当然不是插座。

于 2011-03-08T14:37:39.563 回答
1

在蓝牙设备上使用 HID 时,通常不需要直接创建 L2CAP 连接。Win32 上的所有(???)蓝牙堆栈都支持蓝牙 HID,并通过本机 Windows HID API 提供对 HID 流/控制的访问。不需要(直接)L2CAP!:-)

在 WinCE 上也有对蓝牙 HID 的内置支持,但我不确定是否有访问 HID API 的方法。

这就是 Brian Peek 的 wiimore 库的工作方式——它使用 HID API。这样做的好处是可以通过这种方式获得对所有(?)蓝牙堆栈的支持——它们每个都通过 Windows HID API 支持 HID 设备,而要直接使用 L2CAP,则必须支持每个堆栈的 API。 ..(如果他们有的话!据我所知,BlueSoleil 没有 L2CAP API)。

因此,在 Win32 上,只需与设备配对并检查其蓝牙服务控制面板选项卡上的 HID 复选框是否已选中(无论正在使用哪个蓝牙堆栈)。在我的 32feet.NET 库中,可以发现设备,然后确保为它启用 HID:

BluetoothDeviceInfo[] list = btCli.DiscoveryDevices();
var deviceInfo = list[n]; // Select the correct device
deviceInfo.SetServiceState(BluetoothService.HumanInterfaceDevice, true);

(这应该适用于 MSFT 和 BlueSoleil;在 Widcomm AFAIK 上没有 API ——尽管配对时它可能会自动启用)。

一种可能的例外情况是,显然某些设备不完全符合蓝牙/HID 规范,我听说 PS3 蓝光控制器就是这样。然后有人可能想直接尝试 L2CAP 连接——但是堆栈对 HID 的支持很可能会干扰试图提供相同服务的第三方应用程序......

于 2011-03-09T19:47:40.693 回答