Запись данных на USB HID с использованием Javascript, HTML5 или любого кросс-платформенного языка (поддерживает Android)

Я написал пользовательский интерфейс в HTML5 и JavaScript. Я выбрал эту реализацию, чтобы я мог использовать один и тот же код между Android Chrome и Windows 8 RT.

Теперь моя следующая задача - записать данные в USB HID. Устройство, с которым я общаюсь, рассматривается как СПРЯТАННЫЙ. Я упоминаю эту часть в случае, если есть способ записи на устройство HID, а не на устройство USB RAW.

Я провел много исследований по этому вопросу. Но спецификации HTML5 меняются так часто, что, возможно, я что-то пропустил.

В любом случае, может кто-нибудь предложить язык или реализацию, которые я могу использовать для совместного использования общего кода для доступа к USB-устройству на Android и Windows 8 RT? Если между ними нет возможности поделиться ими, как насчет предложения по подключению USB только на Android?


Ниже приведены мои исследования и выводы:

  • Silverlight: UNSUPPORTED. С точки зрения веб-плагина, не поддерживаемого в Windows 8 RT или Android

  • Flash: Возможная опция. Поддерживаемые в обеих операционных системах, хотя они удалили поддержку Android с выпуском Jelly Bean

  • HTML5: UNSUPPORTED

    • Посмотрел API GamePad, но, похоже, он поддерживает только чтение с геймпада.
    • Посмотрел тег устройства, но этот тег больше не существует в текущем черновике. Я прочитал, что объект "навигатор" заменяет его в Javascript, но он кажется совершенно другим. Кроме того, устройство предназначено только для приобретения видео и аудио
  • JavaScript: UNSUPPORTED. По моему мнению, это потому, что это будет угроза безопасности.

  • Chrome Packaged App: UNSUPPORTED. Не уверен в поддержке Windows 8 RT. Но он также не поддерживается в Android Chrome.

    • API USB существует, что точно соответствует мне, но API доступен только для упакованного приложения
  • Java-апплет: UNSUPPORTED. Не уверен в поддержке Windows 8 RT. Но он также не поддерживается в Android Chrome.

    • Доступны многие ресурсы, касающиеся связи с USB-устройствами. Однако, поскольку java-апплеты не поддерживаются на смартфонах, это становится неподдерживаемым.
  • Несколько полезных сообщений

Ответ 1

Я действительно думал о том, как делать что-то похожее на это....

Вот один из способов сделать это, если у вас есть контроль над компьютером, на котором установлено устройство USB:

Попросите компьютер с USB-устройством запустить веб-сервер, такой как apache/php. Попросите его только слушать localhost.

Затем на просматриваемой странице html выполните ajax-сообщение в localhost/somescript.php(или cgi или cfm или что-то еще).

В php/cgi script сообщается на USB-устройство, а затем возвращает строку json в браузер, говоря, что что-то произошло.


ОБНОВЛЕНИЕ:


Другой подход заключается в использовании пользовательских протоколов URL. Вы создаете исполняемый файл и устанавливаете его на клиентском компьютере вместе с вашим пользовательским протоколом url.

Затем вы можете вызывать исполняемый файл из браузера, используя свой собственный протокол url.

Ответ 2

Существует еще один альтернативный веб-узел Socket.Create сервер веб-сокета, который будет обращаться к устройству USB в локальной системе.

Подключите веб-сервер с помощью Web Socket из Web Application.Web Socket имеет стандартный Api

Вы можете сделать что-то вроде этого

  var host = "wss://localhost:25000/test";

  Websokcet ws = new WebSocket(host);

Вы можете создать свой веб-сервер sokcet с помощью RFC 6455

для более старого браузера вы также можете думать о http-сервере.

Ответ 3

Пожалуйста, посмотрите JSFS. Он работает аналогично подходу Chris_vr и уже является рабочим решением.

https://github.com/jsfsproject/jsfs. Он бесплатный и лицензирован под лицензией GPL.

Ответ 4

Если USB-устройство, которым вы хотите управлять, является принтером штрих-кода, вы можете использовать jZebra

https://code.google.com/p/jzebra/

Это апплет, который напрямую связывается с локально подключенными принтерами.

Ответ 5

Как насчет этого?

Запись на последовательный порт:

var writeSerial=function(str) {
  chrome.serial.write(connectionId, str2ab(str), onWrite);
}
// Convert string to ArrayBuffer
var str2ab=function(str) {
  var buf=new ArrayBuffer(str.length);
  var bufView=new Uint8Array(buf);
  for (var i=0; i<str.length; i++) {
    bufView[i]=str.charCodeAt(i);
  }
  return buf;
}

далее http://developer.chrome.com/apps/app_hardware.html