USB通信,Monodroid / Android中的端点

时间:2012-08-24 14:32:19

标签: java android usb xamarin.android

我有一个USB设备,我试图使用MonoDroid API与我的Android 4.1设备进行通信,我遇到了一些设置正确连接的问题。首先,为达到我“思考”的目标所采取的步骤可能是一个问题:

  1. 按照供应商和产品ID使用意图过滤器过滤我的设备 我的AndroidManifest文件。这很好用,就像我插入我的 设备我的应用程序默认请求启动,因此权限应该 正确的。
  2. 从发现所述设备后我的意图过滤器发送程序的活动中抓取我的USB设备:UsbDevice device = (UsbDevice)this.Intent.GetParcelableExtra(UsbManager.ExtraDevice);
  3. 在检查只有一个接口存在后,我通过发出以下命令获取相关接口: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);
  6. 然而,我注意到接口的索引0处的端点(endpoint_IN上面)具有UsbAddressing枚举类型“DirMask”,其中endpoint_OUT具有类型“Out”;我希望endpoint_IN为“In”,但实际情况并非如此。什么是“DirMask?”内联文档说明“尚未输入此部分的文档”,在线文档反映相同:http://api.xamarin.com/?link=T%3aAndroid.Hardware.Usb.UsbAddressing

    这可能是我的问题吗?我只是不太确定。我试图实现其余的通信程序,但未能产生任何结果。例如,以下代码应输入命令以接收一个读数:

    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();
    

    有什么见解?

2 个答案:

答案 0 :(得分:0)

我将接口端点向后,所有事情都考虑在内。也就是说,我试图读/写错误的接口。

答案 1 :(得分:0)

如果其他人偶然发现,DirMask类型意味着查看端点的Direction属性而不是Type属性。如果Type是DirMask,则Direction可以是UsbAddressing.In或Out。

In的方向是out端点,反之亦然(我猜测是你为什么倒退)。