使用JavaScript, HTML5或任何跨平台语言(支持Android)将数据写入USB HID



我用HTML5和JavaScript编写了一个UI。我选择这个实现,这样我就可以在Android Chrome和Windows 8 rt之间共享相同的代码。

现在,我的下一个目标是将数据写入USB HID。与我通信的设备被视为HID。我提到这部分,以防有一种方法可以写入一个HID设备,而不是USB RAW设备。

我对这件事做了很多研究。但是,HTML5规范变化如此频繁,也许我错过了一些东西。

**无论如何,是否有一种语言或实现,我可以使用共享通用代码访问Android和Windows 8 RT上的USB设备?

如果没有办法在两者之间共享,那么建议只在Android上获得USB通信如何?* *


下面是我的研究和结论:

    Silverlight
  • : 不支持的。在web插件方面,它不支持Windows 8 RT或Android

  • Flash:可能的选项。这两个操作系统都支持它,尽管他们在Android 4.1 (Jelly Bean)发布时取消了对Android的支持。

  • HTML5
  • : 支持

  • 我看了看GamePad API,但它似乎只支持从手柄读取。

  • 我查看了Device标签,但是这个标签在当前草案中不再存在。我读到"导航器"对象在JavaScript中取代了它,但看起来完全不同。此外,Device仅针对获取视频和音频

  • JavaScript: 不支持的。根据我的理解,这是因为这会有安全风险。

  • Chrome打包应用程序:不支持。我不确定Windows 8 rt是否支持,但是,Android Chrome也不支持。

  • 存在一个USB API,它可以完成我所需要的,但是这个API只能用于打包的应用程序。

  • Java applet: 不支持。我不确定Windows 8 rt是否支持,但是,Android Chrome也不支持。

  • 关于如何与USB设备通信有许多可用的资源。但是,由于智能手机不支持Java小程序,因此最终不支持。

  • 几个有用的帖子

  • 如何在ASP.NET中发送和接收数据到串口或USB端口?

  • 从跨浏览器跨操作系统的web应用程序访问USB是可能的吗?

  • 是否可以提供一个JavaScript API来控制USB, LPT和COM设备?

我实际上已经考虑过如何做类似的事情…

如果你能控制连接了USB设备的电脑,这里有一种方法可以做到这一点:

让带有USB设备的计算机运行web服务器,如Apache和PHP。让它只听localhost。

然后在正在查看的HTML页面中,执行Ajax post到localhost/somescript.php(或CGI或cfm或其他)。

在PHP/CGI脚本中,与USB设备通信,然后向浏览器返回一个JSON字符串,说明发生了什么。

另一种方法是使用自定义URL协议。创建一个可执行文件并"安装";它与您的自定义URL协议一起在客户端计算机上。

然后您可以使用自定义URL协议从浏览器调用可执行文件

还有一个可选的Web Socket。创建一个web套接字服务器,它将访问本地系统中的usb设备。

从web应用程序使用web套接字连接web服务器。Web Socket有标准Api

你可以这样做

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

你可以使用RFC 6455创建你的web套接字服务器

对于旧的浏览器,你也可以考虑HTTP服务器

请看一下jsf。它的工作原理类似于Chris_vr的方法,并且已经是一个可行的解决方案。

https://github.com/jsfsproject/jsfs。

如果要控制的USB设备是条码打印机,可以使用jZebra。

这是一个直接与本地连接的打印机通信的applet。

写入串口:

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

>

最新更新