我是USB和
Android的新手,所以请原谅我,如果我不清楚自己的解释.
我有一个USB HID设备,我可以在Windows中进行通信.我正在尝试使用运行Android 3.1的Acer Iconia A500平板电脑进行通信.
我可以找到设备,枚举它,获得它唯一可用的接口,获得唯一可用的端点(0),并确定它是什么类型的端点(传输中断从设备到主机).
我对USB规范的理解是,所有HID设备在munimum需要具有控制端点(端点0)和中断IN端点.但是似乎这里的端点0是中断在端点,而不是控制端点.
然而,为了使设备枚举,它必须成功地通过控制端点传送其描述符数据.我推断控制端点因此必须被发现(和使用),因为主机其实是枚举设备.
就我所述,只要我能够继续执行,在应用程序级别提供给我的唯一接口/端点是从设备到主机的中断类型.我的应用程序从主机到设备,中断或控制没有端点.因此,设备会等待被告知要做什么,并且主机等待在设备中发生的事情.不是很刺激
请记住,当连接到Windows时,此设备会正确响应,例如我可以发送包含13个字节的数据的报告,使设备点亮一个LED.所以似乎符合USB HID规范.作为绝望行为,我已经尝试将这个端点用作控制端点和中断OUT端点,使用controltransfer()和UsbRequest()将数据提交到设备,在任一情况下都不会有任何响应.
所以我的问题是:“控制传输端点是(?)用于设置设备,为什么我找不到和使用它?
感谢任何见解,下面是相关的代码,如果需要,我可以全部包括其余的内容:
private UsbManager mUsbManager;
private UsbDevice mDevice;
private UsbDeviceConnection mConnectionRead;
private UsbDeviceConnection mConnectionWrite;
private UsbEndpoint mEndpointRead;
private UsbEndpoint mEndpointWrite;
// check for existing devices
for (UsbDevice device : mUsbManager.getDeviceList().values())
{
//Need to filter for my device when other HIDs are also connected, but for now...
String devName = device.getDeviceName();
if (DEBUG == 1){
Toast.makeText(UsbHidDeviceTesterActivity.this, "My device got connected: " + devName, Toast.LENGTH_LONG).show();
}
//mDevice = device;
setHIDDevice(device);
}
private boolean setHIDDevice(UsbDevice device)
{
UsbInterface usbInterfaceRead = null;
UsbInterface usbInterfaceWrite = null;
UsbEndpoint ep1 = null;
UsbEndpoint ep2 = null;
boolean UsingSingleInterface = true;
mDevice = device;
//This HID device is using a single interface
if (UsingSingleInterface)
{
//usbInterfaceRead = device.getInterface(0x00);//only 1 EP on this i