web-dev-qa-db-ja.com

Javascript、HTML5、または任意のクロスプラットフォーム言語(Androidをサポート)を使用してUSBHIDにデータを書き込む

HTML5とJavaScriptでUIを作成しました。 Android ChromeとWindows8 RTの両方で同じコードを共有できるように、この実装を選択しました。

さて、私の次の目的は、USBHIDにデータを書き込むことです。通信しているデバイスはHIDとして扱われます。 USB RAWデバイスではなくHIDデバイスに書き込む方法がある場合に備えて、この部分について説明します。

私はその問題について多くの研究をしました。しかし、HTML5の仕様は頻繁に変更されているため、何かを見逃した可能性があります。

とにかく、誰かがAndroidおよびWindows8 RTでUSBデバイスにアクセスするための共通コードを共有するために使用できる言語または実装を提案できますか?ない場合2つを共有する方法ではありませんが、AndroidでのみUSB通信を取得する提案はどうですか?


以下は私の研究と結論です。

  • Silverlight:サポートされていません。 Webプラグインに関しては、Windows 8 RTまたはAndroidではサポートされていません

  • フラッシュ:可能なオプション。両方のオペレーティングシステムでサポートされていますが、JellyBeanのリリースによりAndroid)のサポートが削除されました

  • HTML5:サポートされていません

    • GamePad APIを確認しましたが、ゲームパッドからの読み取りのみをサポートしているようです
    • デバイスタグを確認しましたが、このタグは現在のドラフトに存在しません。 「ナビゲーター」オブジェクトがJavascriptでそれを置き換えることを読みましたが、それは完全に異なっているようです。また、デバイスはビデオとオーディオの取得のみを対象としています
  • JavaScript:サポートされていません。私の理解では、これはセキュリティリスクになるためです。

  • Chromeパッケージアプリ:サポートされていません。 Windows 8RTでのサポートについて不明です。ただし、Android Chromeでもサポートされていません。

    • SB API 必要なことを正確に実行するものが存在しますが、APIはパッケージ化されたアプリでのみ使用できます
  • Javaアプレット:サポートされていません。 Windows 8RTでのサポートについて不明です。ただし、Android Chromeでもサポートされていません。

    • USBデバイスとの通信方法に関して利用可能な多くのリソース。ただし、Javaアプレットはスマートフォンではサポートされていないため、サポートされなくなります。
  • いくつかの役立つ投稿

13
cheezy

私は実際にこれと同じようなことをする方法を考えました....

USBデバイスが接続されているコンピューターを制御できる場合は、次の方法で確実に実行できます。

USBデバイスを搭載したコンピューターにApache/phpなどのWebサーバーを実行させます。ローカルホストのみをリッスンするようにします。

次に、表示されているhtmlページで、localhost/somescript.php(またはcgiやcfmなど)へのajax投稿を実行します。

Php/cgiスクリプトでUSBデバイスと通信し、何かが起こったことを示すjson文字列をブラウザに返します。


更新:


別のアプローチは、カスタムURLプロトコルを使用することです。実行可能ファイルを作成し、カスタムURLプロトコルとともにクライアントコンピューターに「インストール」します。

次に、カスタムURLプロトコルを使用してブラウザから実行可能ファイルを呼び出すことができます。

7
Brian McGinity

もう1つの代替Webソケットがあります。ローカルシステムのUSBデバイスにアクセスするWebソケットサーバーを作成します。

WebアプリケーションからWebSocketを使用してWebサーバーに接続します。WebSocketには標準のApiがあります。

あなたはこのようなことをすることができます

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

  Websokcet ws = new WebSocket(Host);

RFCを使用してWebソフトウェアサーバーを作成できます 6455

古いブラウザの場合は、httpサーバーについても考えることができます。

2
Chris_vr

JSFSをご覧ください。これはChris_vrのアプローチと同様に機能し、すでに機能するソリューションです。

https://github.com/jsfsproject/jsfs 。それは無料で、GPLの下でライセンスされています。

2
wimix

制御したいUSBデバイスがバーコードプリンターの場合は、jZebraを使用できます

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

これは、ローカルに接続されたプリンタと直接通信するアプレットです。

2
Brian McGinity

これはどう?

シリアルポートへの書き込み:

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

詳細は http://developer.chrome.com/apps/app_hardware.html

1
Joe Oliver