并感谢您花时间阅读本文。
概念
使用默认的 HID 驱动程序和服务将 wiimote 连接到 windows(或 mac)(因为 chrome.bluetoothSocket 尚不支持 BT L2CAP)。我不想从设备发送和接收数据;按钮、陀螺仪、红外摄像头等......
我的设置(相关部分)
- Macbook pro(已安装优胜美地)
- Chrome Canary(版本 41.0.2246.0 canary(64 位)),以详细日志记录模式运行
- Windows 7 通过训练营
- Wiimote(任天堂 RVL-CNT-01)
将数据发送到设备的代码
var _wiimote = this;
var bytes = new Uint8Array(21);
var reportId = 0x11;
bytes[0] = 0x10;
chrome.hid.send(_wiimote.connectionId, reportId, bytes.buffer, function() {
if (chrome.runtime.lastError) {
console.log(chrome.runtime.lastError.message);
console.log(chrome.runtime.lastError);
}
console.log("Wiimote send data");
chrome.hid.receive(_wiimote.connectionId, function(reportId, data) {
if (chrome.runtime.lastError) {
console.log(chrome.runtime.lastError.message);
console.log(chrome.runtime.lastError);
return;
}
console.log("done receiving.");
console.log("received:" + data.byteLength);
});
});
预期的行为?
点亮第一个 LED 并停止在连接但未配对设备时开始闪烁。
实际行为?
控制台显示“Wiimote 发送数据”,但 LED 对发送的报告没有反应。
所以这段代码没有做太多,但根据wiibrew上的文档(见下面的资源)。它应该发送到 wiimote 以点亮第一个 LED。这适用于我发送到设备的任何输出报告。当我使用错误的 reportIds 或不同的字节长度时,它会做出反应,然后它会失败。
接下来是接收部分,如果我要向 wiimote 上的 reportId 0x15 发送任何内容(实际上是任何数据),它应该向我发送信息报告。我试过轮询这样的消息:
从设备接收数据的代码
var _wiimote = this;
var pollForInput = function() {
chrome.hid.receive(_wiimote.connectionId, function(reportId, data) {
console.log("receiving something",reportId);
if (_wiimote.pollReceive) {
setTimeout(pollForInput, 0);
}
});
};
预期的行为?
将 0x00 发送到 reportId 0x15 后,我应该会收到来自 wiimote 设备的信息报告。
实际行为?
我从未在控制台输出中收到任何指示来自设备的通信的信息。
使用的资源