otg ケーブルを介してキー (scsi デバイス) と通信するために、galaxy tab p7300 でアプリを作成します。最初は bulkTransfer() でデータを読み取ることができますが、次回はできません。次に、Ellisys Visual USB を使用してデータを盗聴すると、キーが実際に 13 バイトのデータを返すことがわかりました。しかし、Android クライアント (GT-P7300) では、bulkTransfer が返す -1 を受け取ります。私は自分の考えを使い果たしました。手がかりを教えてくれる人に感謝します。
2 に答える
USBバルク転送を利用する場合、トランザクション失敗時の確認事項一覧はこちら
a) bulkTransfer 関数を渡したエンドポイントの方向を確認します
b)受信データを格納するのに十分な長さのバッファがあることを確認します
c)長さフィールドはおそらく最も重要です。応答の正確なサイズがわかっている場合は、それを使用してください。
d)タイムアウト パラメータ。デバイスにクエリを送信し、応答をリッスンするときに十分なタイムアウトを提供しない場合、bulkTransfer は -1 を返す可能性があります。
タイムアウトがケースの動作に影響しているようです。私の提案は、各応答の長さフィールドに正確なバイト数を使用し、より長いタイムアウト (1000 など) を使用して、一括要求が完了するのに十分な時間を与えることです。
解決策を投稿するには遅すぎますが、将来誰かがそれについて助けを必要とする場合は、ここから回答を得ることができます.
私は同じ問題に直面しました。USBホストデバイスとしてAndroid(Samsung galaxy s3)を使用していました。USB BulkTransfer を使用してデータを転送しない読み取りエンドポイントと書き込みエンドポイントについて理解しました。ホストモードの場合のエンドポイントを切り替えようとしましたが、認識され、データの書き込み/読み取りに成功しました。
mReadEndpoint = mDataInterface.getEndpoint(0);// tweaking endpoints // 1 was for read and 0 was for write
mWriteEndpoint = mDataInterface.getEndpoint(1);
PS「USBデバイス情報」という名前のAndroid用のアプリケーションがあります。USB デバイスのインターフェイスとエンドポイントを理解するのに大いに役立ちました。