小编Das*_*oos的帖子

使用Android与USB HID设备通信

我是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)

usb android hid

16
推荐指数
3
解决办法
3万
查看次数

标签 统计

android ×1

hid ×1

usb ×1