1.usb想要通信就必须要claim 到通信的节点上.
mUsbDeviceConnection.claimInterface(intf, forceClaim);
2.调用的是本地方法在 android_hardware_UsbDeviceConnection.cpp
static jboolean
android_hardware_UsbDeviceConnection_claim_interface(JNIEnv *env, jobject thiz,
int interfaceID, jboolean force)
{
struct usb_device* device = get_device_from_object(env, thiz);
if (!device) {
ALOGE("device is closed in native_claim_interface");
return -1;
}
//这个是使用usbhost.c 里面的方法来获取节点的
int ret = usb_device_claim_interface(device, interfaceID);
//个人认为force 应该true 因为这样的好处你可以在一个应用不用close,在另一个就可以open.个人就是在使用系统usb函数连接使用时,然后这时你再去用libusb库发现连接不上,但是在libusb库添加下面这个机制就可以了.
if (ret && force && errno == EBUSY) {
// disconnect kernel driver and try again
usb_device_connect_kernel_driver(device, interfaceID, false);
ret = usb_device_claim_interface(device, interfaceID);
}
re