我正在尝试从Wii Fit (平衡板)获取输出。我可以通过C++蓝牙枚举器找到该设备,但尝试通过windows套接字连接失败。
我想知道是否有人在这样的方向(C++,windows)取得了成功,我很想听听你是如何做到的。
发布于 2011-03-06 01:52:19
Wii平衡板是HID设备。要了解与平衡板的通信,您需要了解一点蓝牙HID。WiiBrew上有很多关于Wiimote和Wii Balance Board的好信息。
我不认为您可以使用Windows Sockets连接到HID设备。Windows套接字蓝牙接口只允许您连接到基于RFCOMM的服务。HID基于蓝牙协议栈中更靠下的L2CAP。at MSDN上有一些关于这个限制的信息。
如果你只是想解决这个问题,你可以试试Bluecove for Java。您可以使用另一个堆栈(例如,Widcomm)执行某些操作。如果你被锁定在Windows和C++上,你可能不得不考虑为Balance Board编写一个自定义的HID驱动程序。
发布于 2011-03-08 22:37:40
正如普华永道所说,在MS Bluetooth API中有一个限制,所以对于套接字,除了RFCOMM之外,你不能拥有其他东西,但这并不意味着你不能在L2CAP层。您需要做的是实现一个客户端配置文件驱动程序,您可以使用MSDN:Creating a L2CAP Client Connection to a Remote Device中的文章作为起点,反之亦然:Accepting L2CAP Connections in a Bluetooth Profile Driver
当然,接下来,正如普华永道所说,你必须研究蓝牙、HID和WiiBrew的通信协议。
Bluetooth Wireless Technology FAQ - 2010也是一个值得阅读的好文档,它清楚地说明了可以与微软蓝牙堆栈驱动程序进行L2CAP连接。当然不是使用套接字。
发布于 2011-03-10 03:47:41
在蓝牙设备上使用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接口)。
因此,在Win32上,应该只与设备配对,并检查是否选中了蓝牙服务控制面板选项卡上的HID复选框(无论使用的是哪个蓝牙堆栈)。在我的32feet.NET库中,用户可以发现设备,然后使用以下命令确保为其启用了HID:
BluetoothDeviceInfo[] list = btCli.DiscoveryDevices();
var deviceInfo = list[n]; // Select the correct device
deviceInfo.SetServiceState(BluetoothService.HumanInterfaceDevice, true);(这应该可以在微软和BlueSoleil上工作;Widcomm AFAIK上没有这方面的API --尽管当配对时,它可能无论如何都会自动启用)。
一个可能的例外情况是,显然一些设备并不完全符合蓝牙/HID规范,我被告知PS3蓝光控制器就是这样的。然后,您可能想要直接尝试L2CAP连接--但是,堆栈对HID的支持可能会干扰试图提供相同服务的第三方应用程序……
https://stackoverflow.com/questions/5200384
复制相似问题