cheezy
cheezy

Reputation: 456

Write data to USB HID using JavaScript, HTML5, or any cross platform language (supports Android)

I've written an UI in HTML5 and JavaScript. I chose this implementation so that I could share the same code between both Android Chrome and Windows 8 RT.

Now, my next objective is to write data to a USB HID. The device that I'm communicating with is treated as an HID. I'm mentioning this part in case there's a way to write to an HID device rather than a USB RAW device.

I've done a lot of research on the matter. But, the HTML5 specifications are changing so often that maybe I missed something.

**Anyway, is there a language or implementation that I can use to share common code to access a USB device on Android and Windows 8 RT?

If there isn't a way to share between the two, how about a suggestion to get USB communication only on Android?**


Below is my research along with conclusions:

Upvotes: 14

Views: 30972

Answers (5)

Joe Oliver
Joe Oliver

Reputation: 36

Writing to a serial port:

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

More is at http://developer.chrome.com/apps/app_hardware.html.

Upvotes: 1

Brian McGinity
Brian McGinity

Reputation: 5935

If the USB device you want to control is a barcode printer, you can use jZebra.

This is an applet which directly communicates to locally connected printers.

Upvotes: 2

Brian McGinity
Brian McGinity

Reputation: 5935

I've actually thought about how to do things similar to this...

Here's is one way sure way to do it if you have control over the computer which has the USB device attached:

Have the computer with the USB device run a web server such as Apache and PHP. Have it only listen to localhost.

Then in the HTML page being viewed, execute an Ajax post to localhost/somescript.php (or CGI or cfm or whatever).

In the PHP/CGI script, communicate to the USB device and then return a JSON string to the browser saying something happened.

Another approach is to use custom URL protocols. You create an executable and "install" it on the client computer along with your custom URL protocol.

Then you can invoke the executable from the browser using your custom URL protocol.

Upvotes: 8

wimix
wimix

Reputation: 584

Please have a look at JSFS. It works similar to Chris_vr's approach and is already a working solution.

https://github.com/jsfsproject/jsfs. It's free and licensed under GPL.

Upvotes: 2

Vikram Ranabhatt
Vikram Ranabhatt

Reputation: 7620

There is one more alternative Web Socket.Create a web socket server which will access the usb device in local system.

Connect your web server using Web Socket from Web Application.Web Socket has standard Api

You can do something like this

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

  Websokcet ws = new WebSocket(host);

You can create your web sokcet Server using RFC 6455

for older browser you can think of http server as well.

Upvotes: 2

Related Questions