我是USB和Android的新手,所以如果我不清楚自己解释,请原谅我.
我有一个USB HID设备,我可以在Windows中与之通信.我正在尝试使用运行Android 3.1的Acer Iconia A500平板电脑建立通信.
我能够找到设备,枚举它,获得它唯一可用的接口,获得唯一可用的端点(0),并确定它是什么类型的端点(从设备到主机传输中断).
我对USB规范的理解是,所有HID设备都需要具有控制端点(端点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); …
Run Code Online (Sandbox Code Playgroud)