从Wii平衡板读取数据

时间:2011-03-04 23:24:16

标签: c++ windows bluetooth hid wii-balanceboard

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

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

3 个答案:

答案 0 :(得分:5)

Wii Balance Board是一款HID设备。要了解与Balance Board的通信,您需要了解一点蓝牙HID。 WiiBrew有关于WiimoteWii Balance Board的详细信息。

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

如果您只是想破解它,可以尝试使用Bluecove来获取Java。您可以使用其他堆栈(例如,Widcomm)执行某些操作。如果您已锁定Windows和C ++,则可能需要考虑为Balance Board编写自定义HID驱动程序。

答案 1 :(得分:1)

正如pwc所说,MS蓝牙API存在限制,所以使用套接字除了RFCOMM之外你不能拥有其他东西,但这并不意味着你不能在L2CAP层下载。您需要做的是实现客户端配置文件驱动程序,您可以使用MSDN中的文章作为起点:Creating a L2CAP Client Connection to a Remote Device反之亦然:Accepting L2CAP Connections in a Bluetooth Profile Driver

接下来当然pwc说你必须研究蓝牙HID和WiiBrew用于通信协议。

另一个好的文档是Bluetooth Wireless Technology FAQ - 2010,它表明可以与Microsoft蓝牙堆栈驱动程序建立L2CAP连接。当然不是插座。

答案 2 :(得分:1)

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

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

这就是Brian Peek的wiimore库的工作方式 - 它使用了HID API。这样做的好处是可以通过Windows 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的支持可能会干扰尝试提供相同服务的第三方应用程序......