我有一个usb设备,我正试图用monodroid api与我的android 4.1设备通信,我在设置正确的连接时遇到了一些问题。首先,为达成我“认为”的目标而采取的步骤可能是一个问题:
使用androidmanifest文件中的意图过滤器按供应商和产品id筛选我的设备。这工作得很好,当我插入我的设备时,默认情况下我的应用程序请求启动,所以权限应该正确。
在发现所述设备后,从my intent filter发送程序的活动中获取我的usb设备: UsbDevice device = (UsbDevice)this.Intent.GetParcelableExtra(UsbManager.ExtraDevice);
在检查只有一个接口存在之后,我通过发出: UsbInterface intf = device.GetInterface(0);
检查端点的数量并获取它们。有两个,因为这是一个输入和输出设备:
UsbEndpoint endpoint_IN = intf.GetEndpoint(0); UsbEndpoint endpoint_OUT = intf.GetEndpoint(1);
使用usbmanager获取到设备的连接: UsbDeviceConnection connection = device_manager.OpenDevice(device);
但是,我注意到接口的索引0处的端点(上面的端点\u)的枚举类型为“dirmask”,其中端点\u out的类型为“out”;我想你应该是“在”,但事实并非如此。什么是“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条答案
按热度按时间5ssjco0h1#
从各个方面考虑,我将接口端点向后放置。也就是说,我试图读/写错误的接口。
sd2nnvve2#
如果其他人发现了这一点,dirmask类型意味着查看端点的direction属性,而不是type属性。如果类型是dirmask,则方向可以是usbadstoring.in或out。
输入的方向是输出的端点,反之亦然(我猜这就是为什么你把它们倒过来)。