結論: chrome.usb は使えない
直近の Mac OS X Mavericks アップデートの直後あたりから (これが直接の原因かはわからないけど)、例え HID デバイスではなくても chrome.usb を単体で動かすことができなくなった。
今まではデバイス接続後に Chrome 全体を再起動することで openDevice が成功するという挙動だったのだが、今ではデバイス接続後に他の libusb を使ったプログラムを走らせて一旦 device を OS に認識させ、そのプログラムを終了し Chrome を起動する、という手順が必要になった。
つまり単体で再起動を繰替えしたりしてなんとか動かすということが不可能になり外部プログラムへ依存が必要になった。Chrome はどのようなコンテキストでも外部プログラムを実行することはできないので、打つ手はなくなった。
chromium のイシュートラッカーを usb 関係で検索してみると
- https://code.google.com/p/chromium/issues/detail?id=148836
- https://code.google.com/p/chromium/issues/detail?id=388239
あたりが関係していそう。 Canary を入れたくないので 35.0.1916.153 でしか試してない。stable で動かないものは「ない」と同じ。
このほか以下のようなバグがありそう
- コントロール転送で8バイト未満をデバイスから返すと、データが化ける (こちらから送ったリクエストのバイナリ列になってしまう。謎)
- インタラプト転送でずっとレスポンスしないでいると、デバイスにアクセスできなくなる。定期的に必ずなにか返答しないとだめ。
それとバグではないが、コントロール転送を out する場合、何も data を送りたくなくても、data : new ArrayBuffer(0) を渡さないと実行されない。罠。
このエントリを参照するエントリ
関連エントリー
- Chrome App で USB デバイス (AVR V-USB) にアクセスする Chrome App は、chrome.usb という API を通じて低レベルなUSBデバイスドライバをJavaScriptで書くことが可...
- Raspberry Pi で Chromium (Google Chrome) を Kiosk モードで起動する まず sudo raspi-config で desktop がデフォルトで起動するようにしておく Chromium などをパッケージからイ...
- root化しなくても Wi-Fi 経由での adb はできる Android Debug Bridge (adb) | Android Developers に従うだけ。 一旦 USB で接続して、...
- Raspberry Pi で Chromium を起動してリモート操作 Chromium (Chrome の OSS版) を Raspberry Pi で Kiosk モード (全画面単一アプリケーションモード)...
- Android と USB 接続したとき、どうあがいても一部のファイルを転送できない 症状としては ファイル転送 / Android Auto モードで USB 接続し Windows Explorer からコピーしたいデバイ...