2016-01-07 1 views
1

Я делаю небольшое приложение, которое будет принимать входные данные с устройства 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

ответ

-1

Попробуйте записать десятичные эквиваленты VendorID и ProductID из mychromeapp.js в вашем файле манифеста

+0

Вряд ли так вам поможет, так как устройство обнаружено и подключено. – Xan

0

. В вашей функции обратного вызова в приемнике отсутствует параметр. Проверьте его на странице chrome.hid, и вы заметите, что необходимо указать параметр reportId вместе с данными. Это помогло мне после исправления. Моя проблема, однако, становится новой данные для каждого нового опроса.Это произойдет только в том случае, если я подключу его снова, даже если он уже подключен.Эта проблема только для Mac и Ubuntu. В окнах мое работает отлично.

 Смежные вопросы

  • Нет связанных вопросов^_^