Я делаю небольшое приложение, которое будет принимать входные данные с устройства USB с помощью хром-упакованного приложения. Идея заключается в том, что когда я нажимаю кнопку на USB-устройстве, он будет принимать входящий трафик, анализировать его и реагировать в зависимости от ввода. Я пробовал несколько устройств и приемов из онлайн-уроков/кодов и встречал много проблем, но после их решения я, наконец, начал использовать плейеры sony playstation 3. Устройство подключено через скрыть, но это все, что я могу выполнить. Нажатие любой кнопки не делает входной вход, и до сих пор я понятия не имею, в чем причина этого. Stackoverflow, руководства Google и интернет, похоже, не имеют никаких ответов на это. Вот мой код:Не могу получить какие-либо входные данные из спрятанного устройства с chrome api
manifest.json:
{
"manifest_version": 2,
"name": "HID Input Analyzer",
"version": "1.0",
"app": {
"background": {
"scripts": [ "background.js" ],
"persistent": true
}
},
"permissions": ["hid", {
"usbDevices": [
{ "vendorId": 1356 , "productId": 616 }
]
}
]
}
background.js
chrome.app.runtime.onLaunched.addListener(function() {
chrome.app.window.create('mychromeapp.html', {
singleton: true,
id: "Input analyzer"
});
});
mychromeapp.html
<!DOCTYPE html>
<html>
<head>
<title>HID Input Analyzer</title>
</head>
<body>
<input type="text" id="mytext" />
<script src="mychromeapp.js"></script>
</body>
</html>
mychromeapp.js
var MY_HID_VENDOR_ID = 0x09da; // 4660 in hexadecimal!
var MY_HID_PRODUCT_ID = 0x8090;
var DEVICE_INFO = {"vendorId": MY_HID_VENDOR_ID, "productId": MY_HID_PRODUCT_ID };
var connectionId = null;
function arrayBufferToString(array) {
return String.fromCharCode.apply(null, new Uint8Array(array));
}
var myDevicePoll = function() {
var size = 64;
var i = 0;
if (chrome.runtime.lastError) {console.log(chrome.runtime.lastError);}
chrome.hid.receive(connectionId, function(data) {
console.log("::" + connectionId);
if (data != null) {
// Convert Byte into Ascii to follow the format of our device
myText.value = arrayBufferToString(data);
console.log('Data: ' + myText.value);
}
setTimeout(myDevicePoll, 0);
});
}
function initializeHid(pollHid) {
// brackets are empty for purpose because permissions are given in manifest.json
chrome.hid.getDevices({}, function(devices) {
if (!devices || !devices.length) {
console.log('device not found');
if (chrome.runtime.lastError) {console.log(chrome.runtime.lastError);}
return;
}
console.log('Found device with deviceId: ' + devices[0].deviceId);
myHidDevice = devices[0].deviceId;
// Connect to the HID device
chrome.hid.connect(myHidDevice, function(connection) {
console.log('Connected to the HID device with connectionId: ' + connection.connectionId);
connectionId = connection.connectionId;
// Poll the USB HID Interrupt pipe
pollHid();
});
});
}
initializeHid(myDevicePoll);
console.log("Trying to connect to HID USB ...");
var myText = document.getElementById("mytext");
myText.value = "Ready";
журнал
консоли выглядит следующим образом:
Попытка подключения к HID USB ...
Найдено устройство с DeviceId: 23
Подключено к HID устройство с ConnectionID: 31
После анализа моего кода (особенно последнего файла) я предполагаю, что chrome.hid.receive Функция не получает никаких данных с устройства, но я не знаю знаю, почему. К сожалению, руководства google сделаны очень плохими, а отсутствие хороших примеров затрудняет кодирование. Я надеюсь, что кто-то может мне помочь с решением - я сижу с этим с 3-х дней :(
Kalreg
Вряд ли так вам поможет, так как устройство обнаружено и подключено. – Xan