Escribir datos en USB HID usando Javascript, HTML5 o cualquier lenguaje de plataforma cruzada (compatible con Android)

He escrito una interfaz de usuario en HTML5 y JavaScript. Elegí esta implementación para compartir el mismo código entre Android Chrome y Windows 8 RT.

Ahora, mi siguiente objetivo es escribir datos en un USB HID. El dispositivo con el que estoy comunicando es tratado como un HID. Estoy mencionando esta parte en caso de que hay una manera de escribir en un dispositivo HID en lugar de un dispositivo USB RAW.

He hecho muchas investigaciones al respecto. Pero, las especificaciones HTML5 están cambiando tan a menudo que tal vez me perdí algo.

De todos modos, ¿alguien puede sugerir un lenguaje o implementación que pueda utilizar para compartir código común para acceder a un dispositivo USB en Android y Windows 8 RT? Si no hay una forma de compartir entre los dos, ¿qué tal una sugerencia para obtener la comunicación USB sólo en Android?


A continuación se muestra mi investigación junto con las conclusiones:

  • Silverlight: NO SOPORTADO. En términos de plugin web, no es compatible con Windows 8 RT o Android

  • Flash: Posible opción. Soportado en ambos sistemas operativos, aunque eliminaron el soporte para Android con el lanzamiento de Jelly Bean

  • HTML5: NO SUSPENDIDO

    • Mirado a la API de GamePad, pero parece apoyar solamente la lectura de un gamepad
    • Observó Etiqueta de dispositivo, pero esta etiqueta ya no existe en el borrador actual. He leído que el "navegador" objeto lo sustituye en Javascript, pero parece completamente diferente. Además, el dispositivo sólo tiene como objetivo la adquisición de vídeo y audio
  • JavaScript: NO SUSPENDIDO. Desde mi entendimiento, esto es porque sería un riesgo de seguridad.

  • Aplicación empaquetada de Chrome: UNSUPPORTED. No está seguro sobre el soporte en Windows 8 RT. Pero, no es compatible con Android Chrome, tampoco.

    • Existe una API USB que logra exactamente lo que necesito, pero la API solo está disponible para una aplicación empaquetada
  • Java Applet: UNSUPPORTED. No está seguro sobre el soporte en Windows 8 RT. Pero, no es compatible con Android Chrome, tampoco.

    • Muchos recursos disponibles sobre cómo comunicarse con dispositivos USB. Sin embargo, dado que los applets java no son compatibles con smartphones, esto no es compatible.
  • Un par de puestos útiles

    • Cómo enviar y recibir datos a puerto serie o puerto USB en asp.net?
    • ¿Es posible acceder al USB desde la aplicación web para cruzar los navegadores cruzados?
    • ¿Es posible proporcionar javascript API para controlar USB, LPT, dispositivos COM?

Realmente he pensado en cómo hacer cosas similares a esta ….

Aquí está es una manera segura de hacerlo si tiene control sobre la computadora que tiene el dispositivo USB conectado:

Haga que la computadora con el dispositivo USB ejecute un servidor web como apache / php. Haga que sólo escuche localhost.

A continuación, en la página html que se está viendo, ejecute una publicación ajax en localhost / somescript.php (o cgi o cfm o lo que sea).

En php / cgi script se comunica con el dispositivo USB y luego devuelve una cadena json al navegador diciendo que algo sucedió.


ACTUALIZAR:


Otro enfoque consiste en utilizar protocolos de URL personalizados. Crea un ejecutable y "lo instala" en el equipo cliente junto con su protocolo de url personalizado.

A continuación, puede invocar el archivo ejecutable desde el navegador mediante su protocolo de url personalizado.

Hay una alternativa más Web Socket.Create un servidor de socket web que tendrá acceso al dispositivo usb en el sistema local.

Conecte su servidor web utilizando Web Socket de Web Application.Web Socket tiene estándar Api

Puedes hacer algo como esto

var host = "wss://localhost:25000/test"; Websokcet ws = new WebSocket(host); 

Puede crear su servidor web sokcet utilizando RFC 6455

Para el navegador más antiguo que se puede pensar en el servidor http también.

Por favor, eche un vistazo a JSFS. Funciona de manera similar al enfoque de Chris_vr y ya es una solución de trabajo.

https://github.com/jsfsproject/jsfs . Es gratis y tiene licencia bajo GPL.

Si el dispositivo USB que desea controlar es una impresora de código de barras, puede utilizar jZebra

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

Este es un applet que se comunica directamente con las impresoras conectadas localmente.

¿Qué tal esto?

Escribir en un puerto serie:

 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; } 

Más en http://developer.chrome.com/apps/app_hardware.html

  • Qué es SingleAdbInterface, CompositeAdbInterface y SingleBootLoaderInterface en android_winusb.inf
  • ARC con acceso USB?
  • Aplicaciones de Android, comunicación con un dispositivo conectado al puerto USB
  • No se puede configurar los controladores de usb para depurar en Galaxy Nexus
  • Opciones de cámara externa de Android: superposición en la parte superior de la secuencia de vídeo, sin servidor intermediario / enrutador
  • Modo de Android Host Depuración USB
  • ¿Alguien sabe la verdad sobre el conector USB a RJ45 en dispositivos Android?
  • ¿Por qué este dispositivo específico no puede enumerarse por UsbManager.getDevicesList ()?
  • Modificar libusb para aceptar descriptor de archivo
  • NullPointerException de UsbManager
  • Interfaces perdidas de Android 5.0 Lollipop UsbDevice
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.