2016-06-29 12 views
0

私は通信する必要があるUSBデバイスがあり、USBホストAPIへのJNI呼び出しを使用してNDKコードを使用してコードを実行しています。APIレベル21より前のAndroid USBホストDeviceConnection.setInterface

ただし、API 21+呼び出しであるDeviceConnection.setInterface()を呼び出します。私がその呼び出しを放置すると、制御転送とバルク転送が失敗します。

API 21より前の設定はどのように設定されていますか?デフォルトでDeviceConnectionにはどのUsbInterfaceが選択されていますか?私はclaimInterfaceを呼び出しますが、それでも動作しません。

API 19の呼び出しのみでこれを行う方法はありますか、あるいはlibusbを使って直接行うことはできますか?

答えて

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)という。 C++からJava UsbDeviceConnection.getFileDescriptorメソッドを呼び出すためのJNIラッパーです。メソッドが異なる場合があります。 )UsbDeviceConnection.setInterface(:

これは、後に実行する必要がどのようなAPI 19および21

+0

に私のために働きました。私はstatの既存のconnection.bulkTransfer()を読み込んでいますが、それは読み込めません。 "エラー応答が来ている"。 – Parth

+0

私はそれがデバイス固有であると考えています。 私の問題は、UsbDeviceConnection.setInterface()がAPIレベル21+のみであったことです。これは上のNDK Cコードで解決したものです。 – jensk

関連する問題