Android 自定义hid设备,使用Android与USB HID设备进行通信

本文介绍了作者在尝试使用Android 3.1平板与USB HID设备通信时遇到的问题。作者能成功枚举设备并获取中断IN端点,但无法找到控制端点进行数据传输。在尝试将中断端点作为控制端点使用时未收到响应。代码示例展示了设备枚举和端点查找的过程。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值