1

MonoDroid API を使用して Android 4.1 デバイスと通信しようとしている USB デバイスがあり、適切な接続をセットアップする際に問題が発生しました。まず、私が「考える」ことに到達するためにとられた手順が問題になる可能性があります。

  1. AndroidManifest ファイルのインテント フィルターを使用して、ベンダーと製品 ID でデバイスをフィルター処理します。これはうまく機能します。デバイスを接続すると、アプリがデフォルトで起動するように要求されるため、アクセス許可が修正されるはずです。
  2. 上記のデバイスを検出した後、インテント フィルターがプログラムを送信するアクティビティから USB デバイスを取得します。UsbDevice device = (UsbDevice)this.Intent.GetParcelableExtra(UsbManager.ExtraDevice);
  3. インターフェイスが 1 つだけ存在することを確認した後、次のコマンドを実行して関連するインターフェイスを取得します。UsbInterface intf = device.GetInterface(0);
  4. エンドポイントの数を確認し、それらを取得します。これは入出力デバイスであるため、2 つあります。 UsbEndpoint endpoint_IN = intf.GetEndpoint(0); UsbEndpoint endpoint_OUT = intf.GetEndpoint(1);
  5. UsbManager を使用してデバイスへの接続を取得します。UsbDeviceConnection connection = device_manager.OpenDevice(device);

ただし、インターフェイスのインデックス 0 のエンドポイント (上記の endpoint_IN) には、UsbAddressing 列挙型 "DirMask" があり、endpoint_OUT の型は "Out" であることに気付きました。endpoint_IN は "In" であると予想されますが、そうではありません。「DirMask」とは?インライン ドキュメントには「このセクションのドキュメントはまだ入力されていません」と記載されており、オンライン ドキュメントにも同じ内容が反映されています

これは私の問題でしょうか?よくわかりません。残りの通信手順を実装しようとしましたが、結果が得られませんでした。たとえば、次のコードは、読み取り値を 1 つ受け取るコマンドを入力する必要があります。

Byte[] sys_command = Encoding.ASCII.GetBytes("!001:SYS?\r");
Java.Nio.ByteBuffer sys_command_buffer = Java.Nio.ByteBuffer.Wrap(sys_command);

Java.Nio.ByteBuffer output_buffer = Java.Nio.ByteBuffer.Allocate(4);

UsbRequest request_out = new UsbRequest();
request_out.Initialize(connection, endpoint_OUT);

connection.ClaimInterface(intf, forceClaim);

request_out.Queue(output_buffer, 4);
connection.BulkTransfer(endpoint_IN, sys_command, sys_command.Length, TIMEOUT);

if (connection.RequestWait() == request_out)
    readings.Text = output_buffer.GetFloat(0).ToString();

洞察はありますか?

4

2 に答える 2

0

他の誰かがこれにつまずいた場合、DirMask タイプは、Type 属性ではなく、エンドポイントの Direction 属性を調べることを意味します。Type が DirMask の場合、Direction は UsbAddressing.In または Out になります。

そして、インの方向はアウトのエンドポイントであり、その逆も同様です(これが、それらを逆にした理由だと思います)。

于 2015-06-19T17:58:37.467 に答える
0

すべてのことを考慮して、インターフェイスのエンドポイントを逆にしました。つまり、間違ったインターフェイスに読み書きしようとしていました。

于 2013-01-15T20:45:43.237 に答える