我有一个需要与之通信的USB设备,我使用NDK代码使用对USB主机API的JNI调用。
但是它涉及对DeviceConnection.setInterface()的调用,这是一个API 21+调用。如果我离开那个呼叫,control-和bulkTransfers就会失败。
如何在API 21之前设置配置?默认情况下为DeviceConnection选择哪个UsbInterface?我确实称之为claimInterface,但它仍然无法正常工作。
有没有办法只使用API 19调用,或者我可以直接使用libusb执行此操作?
答案 0 :(得分:0)
我最终使用本机代码调用UsbDeviceConnection.setInterface()所执行的相同usbfs代码:
#include <linux/ioctl.h>
#include <sys/ioctl.h>
// Struct and ioctl define stolen from linux_usbfs.h
struct usbfs_setinterface {
/* keep in sync with usbdevice_fs.h:usbdevfs_setinterface */
unsigned int interface;
unsigned int altsetting;
};
#define IOCTL_USBFS_SETINTF _IOR('U', 4, struct usbfs_setinterface)
// Basically the same as linux_usbfs.c
int fd = gUsbDeviceConnection.getFileDescriptor(env);
struct usbfs_setinterface setintf;
setintf.interface = CIMAX_INTERFACE;
setintf.altsetting = alternate;
int r = ioctl(fd, IOCTL_USBFS_SETINTF, &setintf);
注意gUsbDeviceConnection.getFileDescriptor(env); line是我用于从C ++调用Java UsbDeviceConnection.getFileDescriptor方法的JNI包装器 - 您的方法可能会有所不同。
这适用于API 19和21。