Запись данных на 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