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:サポートされていません
JavaScript:サポートされていません。私の理解では、これはセキュリティリスクになるためです。
Chromeパッケージアプリ:サポートされていません。 Windows 8RTでのサポートについて不明です。ただし、Android Chromeでもサポートされていません。
Javaアプレット:サポートされていません。 Windows 8RTでのサポートについて不明です。ただし、Android Chromeでもサポートされていません。
いくつかの役立つ投稿
私は実際にこれと同じようなことをする方法を考えました....
USBデバイスが接続されているコンピューターを制御できる場合は、次の方法で確実に実行できます。
USBデバイスを搭載したコンピューターにApache/phpなどのWebサーバーを実行させます。ローカルホストのみをリッスンするようにします。
次に、表示されているhtmlページで、localhost/somescript.php(またはcgiやcfmなど)へのajax投稿を実行します。
Php/cgiスクリプトでUSBデバイスと通信し、何かが起こったことを示すjson文字列をブラウザに返します。
更新:
別のアプローチは、カスタムURLプロトコルを使用することです。実行可能ファイルを作成し、カスタムURLプロトコルとともにクライアントコンピューターに「インストール」します。
次に、カスタムURLプロトコルを使用してブラウザから実行可能ファイルを呼び出すことができます。
もう1つの代替Webソケットがあります。ローカルシステムのUSBデバイスにアクセスするWebソケットサーバーを作成します。
WebアプリケーションからWebSocketを使用してWebサーバーに接続します。WebSocketには標準のApiがあります。
あなたはこのようなことをすることができます
var Host = "wss://localhost:25000/test";
Websokcet ws = new WebSocket(Host);
RFCを使用してWebソフトウェアサーバーを作成できます 6455
古いブラウザの場合は、httpサーバーについても考えることができます。
JSFSをご覧ください。これはChris_vrのアプローチと同様に機能し、すでに機能するソリューションです。
https://github.com/jsfsproject/jsfs 。それは無料で、GPLの下でライセンスされています。
制御したいUSBデバイスがバーコードプリンターの場合は、jZebraを使用できます
https://code.google.com/p/jzebra/
これは、ローカルに接続されたプリンタと直接通信するアプレットです。
これはどう?
シリアルポートへの書き込み:
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;
}