AndroidのUSBアクセサリAPIを実装して、携帯電話をLinuxのラップトップに接続できるようにして、電話機をUSBアクセサリモードにします。アクセサリーにアクセスしてそれを開いて、それに書き込むことができます。私のコードは、the documentationの例とほとんど同じです。主な違いは、私は別々の読み書きメソッドを使用しており、ネイティブコードからJNI経由でそれらにアクセスしていることです。Android USBアクセサリから読むと、ENODEV IOExceptionがスローされる
ここで興味深いところです。 2〜2回の読み取り/書き込みが正常に終了すると、ラップトップからのバルク転送書き込みによってタイムアウトエラーが発生し、AndroidのUSBアクセサリへの読み込み呼び出しで、ENODEVエラーコードでIOExceptionがスローされます。これはまだケーブルが接続されているため、UsbManagerにはまだアクセサリが一覧表示されていますが、まだアクセス権があります。
私が読んだループに100msのスリープを入れると、問題は基本的に消えてしまうことが分かりました(ただし、それはまだ起こりますが)。そこに眠るのは恐ろしいクルーだけではありませんが、それは私のアプリに耐え難い待ち時間をもたらします。睡眠時間が短いほど、睡眠時間が10msのところで効果がない場所へのハックの効果は小さくなります。
バルク転送を使用してリアルタイムデータを約20〜30kbpsで転送しますが(バルク転送ではそれほどリアルタイムではありません)、転送サイズは約20で50〜800バイトです-30Hz。それはUSBの限界かもしれませんか?私はそれに多くの経験がないので、基本的にはネットワークソケットと同じように扱っています。小さなメッセージをキューに入れて、あまり頻繁ではないが大きな転送で一緒に送信すべきですか?小さい、高い周波数のバルク転送に問題はありますか?私はこれを見ていきますが、私は基本的にここでストローを握っています。
ハードウェア:
- ラップトップは、Ubuntuの10.04を実行しているとのlibusb 1.0.0を使用しています。
- 携帯電話はGalaxy Nexus Sの実行中Android 4.1.2です。