私は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)という。 C++からJava UsbDeviceConnection.getFileDescriptorメソッドを呼び出すためのJNIラッパーです。メソッドが異なる場合があります。 )UsbDeviceConnection.setInterface(:
これは、後に実行する必要がどのようなAPI 19および21
に私のために働きました。私はstatの既存のconnection.bulkTransfer()を読み込んでいますが、それは読み込めません。 "エラー応答が来ている"。 – Parth
私はそれがデバイス固有であると考えています。 私の問題は、UsbDeviceConnection.setInterface()がAPIレベル21+のみであったことです。これは上のNDK Cコードで解決したものです。 – jensk