Ecrire des données à USB HID en utilisant Javascript, HTML5 ou toute langue multiplate-forme (prend en charge Android)

J'ai écrit une interface utilisateur dans HTML5 et JavaScript. J'ai choisi cette implémentation afin que je puisse partager le même code entre Android Chrome et Windows 8 RT.

Maintenant, mon prochain objectif est d'écrire des données sur un USB HID. L'appareil avec lequel je communique est traité comme un HID. Je mentionne cette partie s'il existe un moyen d'écrire sur un périphérique HID plutôt que sur un périphérique USB RAW.

J'ai fait beaucoup de recherches sur la question. Mais, les spécifications HTML5 changent si souvent que peut-être j'ai manqué quelque chose.

Quoi qu'il en soit, quelqu'un peut-il suggérer une langue ou une implémentation que je peux utiliser pour partager un code commun pour accéder à un périphérique USB sur Android et Windows 8 RT? S'il n'y a pas moyen de partager entre les deux, que diriez-vous d'une suggestion pour obtenir une communication USB uniquement sur Android?


Voici mes recherches avec conclusions:

  • Silverlight: UNSUPPORTED. En termes de plugin Web, pas pris en charge sur Windows 8 RT ou Android

  • Flash: option possible. Pris en charge dans les deux systèmes d'exploitation, bien qu'ils aient supprimé le support pour Android avec la sortie de Jelly Bean

  • HTML5: NON SUPPORT

    • J'ai regardé l'API GamePad, mais cela ne supporte que la lecture d'un gamepad
    • J'ai regardé l'étiquette du périphérique, mais cette balise n'existe plus dans le brouillon actuel. J'ai lu que l'objet "navigateur" le remplace en Javascript, mais il semble complètement différent. En outre, le périphérique vise uniquement l'acquisition de vidéos et d'audio
  • JavaScript: UNSUPPORTED. D'après ce que je comprends, c'est parce que ce serait un risque pour la sécurité.

  • Application paquetage Chrome: non surveillée. Incertain sur le support dans Windows 8 RT. Mais, il n'est pas compatible avec Android Chrome, non plus.

    • Une API USB existe qui accomplit exactement ce dont j'ai besoin, mais l'API n'est disponible que pour une application emballée
  • Applet Java: UNSUPPORTED. Incertain sur le support dans Windows 8 RT. Mais, il n'est pas compatible avec Android Chrome, non plus.

    • De nombreuses ressources disponibles sur la façon de communiquer avec les périphériques USB. Cependant, comme les applets java ne sont pas pris en charge sur les smartphones, cela finit par ne pas être pris en charge.
  • Quelques publications utiles

    • Comment envoyer et recevoir des données sur un port série ou un port USB dans asp.net?
    • Est-ce que l'accès à l'USB à partir d'une application Web pour un navigateur croisé est-il possible?
    • Est-il possible de fournir l'API javascript pour contrôler les périphériques USB, LPT, COM?

J'ai réellement pensé à comment faire des choses semblables à celles-ci …

Voici un mode de façon sûre de le faire si vous avez le contrôle sur l'ordinateur qui a le périphérique usb attaché:

Demandez à l'ordinateur doté du périphérique USB d'exécuter un serveur Web tel que apache / php. N'a-t-il qu'à écouter l'hôte local.

Ensuite, dans la page html en cours de visualisation, exécutez une publication ajax dans localhost / somescript.php (ou cgi ou cfm ou autre).

Dans le script php / cgi, communiquez avec le périphérique USB, puis renvoyez une chaîne json au navigateur en disant que quelque chose s'est passé.


METTRE À JOUR:


Une autre approche consiste à utiliser des protocoles d'URL personnalisés. Vous créez un exécutable et l'installez sur l'ordinateur client avec votre protocole d'url personnalisé.

Ensuite, vous pouvez appeler l'exécutable à partir du navigateur en utilisant votre protocole d'url personnalisé.

Il existe une autre Socket Web alternative. Créez un serveur de socket Web qui accède au périphérique USB dans le système local.

Connectez votre serveur Web à l'aide de Web Socket à partir de Web Application.Web Socket a standard Api

Vous pouvez faire quelque chose comme ça

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

Vous pouvez créer votre serveur web sokcet à l'aide de RFC 6455

Pour un navigateur plus ancien, vous pouvez également penser au serveur http.

Regardez JSFS. Cela fonctionne comme l'approche de Chris_vr et est déjà une solution de travail.

https://github.com/jsfsproject/jsfs . C'est gratuit et sous licence GPL.

Si le périphérique usb que vous souhaitez contrôler est une imprimante code barre, vous pouvez utiliser jZebra

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

Il s'agit d'une applet qui communique directement aux imprimantes connectées localement.

Que dis-tu de ça?

Ecriture sur un port série:

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

Plus à http://developer.chrome.com/apps/app_hardware.html