Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java USB通信,Monodroid/Android中的端点_Java_Android_Usb_Xamarin.android - Fatal编程技术网

Java USB通信,Monodroid/Android中的端点

Java USB通信,Monodroid/Android中的端点,java,android,usb,xamarin.android,Java,Android,Usb,Xamarin.android,我有一个USB设备,我正试图使用MonoDroid API与我的Android 4.1设备通信,我在设置正确的连接时遇到了一些问题。首先,为达成我的“想法”所采取的步骤可能是一个问题: 按供应商和产品ID筛选我的设备,并在 我的AndroidManifest文件。这工作得很好,就像我插上电源一样 默认情况下,设备我的应用程序请求启动,因此权限应为 对 在发现所述设备后,从my intent筛选器发送程序的活动中获取我的USB设备:UsbDevice device=(UsbDevice)this.

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

  • 按供应商和产品ID筛选我的设备,并在 我的AndroidManifest文件。这工作得很好,就像我插上电源一样 默认情况下,设备我的应用程序请求启动,因此权限应为 对
  • 在发现所述设备后,从my intent筛选器发送程序的活动中获取我的USB设备:
    UsbDevice device=(UsbDevice)this.intent.GetParcelableExtra(UsbManager.ExtraDevice)
  • 在检查只有一个接口存在之后,我通过发出:
    UsbInterface intf=device.GetInterface(0)获取关联的接口
  • 检查端点的数量并抓取它们。有2个,因为这是一个输入和输出设备:
    UsbEndpoint endpoint_IN=intf.GetEndpoint(0)
    
    UsbEndpoint endpoint_OUT=intf.GetEndpoint(1)
  • 使用UsbManager获取到设备的连接:
    UsbDeviceConnection=device\u manager.OpenDevice(设备)
  • 但是,我注意到接口索引0处的端点(上面的端点_)具有枚举类型“DirMask”,其中端点_OUT具有类型“OUT”;我希望你是“在”,但事实并非如此。什么是“DirMask?”内联文档说明“本节的文档尚未输入”,在线文档反映了相同的内容:

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

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

    有什么见解吗?

    考虑到所有因素,我将接口端点向后放置。也就是说,我试图读取/写入错误的接口。

    如果其他人无意中发现,DirMask类型意味着查看端点的Direction属性,而不是type属性。如果类型为DirMask,则方向可以是usBadDrain.In或Out

    输入的方向是输出端点,反之亦然(我猜这就是为什么它们是反向的)