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.
- Android Studio no detecta dispositivo Android en Windows 10
- ¿Cómo controlar un dispositivo serie en Android?
- Envía datos a través de USB desde la aplicación de Android a la PC
- Android USB Host - bulkTransfer () está perdiendo datos
- Registrar la aplicación para iniciar cuando el elemento USB está conectado a la PC
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?
- Iniciando mi aplicación Android automáticamente después de conectar el cable USB.
- Envío de datos a la impresora térmica desde el dispositivo Android a través de USB
- Android Development Usb Transferencia
- Compila y enlaza contra libusb para android
- Comunicación USB de Android
- Máximo amperaje de salida de los Smartphones USB
- Comunicación con el host USB de Android
- getDeviceList devuelve dispositivos que ya no están conectados
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; }
- La instalación de las herramientas SDK de Android en Docker falla
- Mostrar el botón de arriba en la barra de acción en las preferencias de la pantalla principal