2016-06-29 2 views
0

У меня есть устройство USB, с которым мне нужно общаться, и у меня есть код, работающий с использованием кода NDK с использованием JNI-вызовов на интерфейсах хоста USB.Android-хост USB DeviceConnection.setInterface до уровня API 21

Однако это связано с вызовом DeviceConnection.setInterface(), который является вызовом API 21+. Если я оставлю этот вызов, контрольные и bulkTransfers потерпят неудачу.

Как установить конфигурацию перед API 21? Какой UsbInterface выбран для DeviceConnection по умолчанию? Я вызываю requestInterface, но он все равно не работает.

Есть ли способ сделать это, используя только API 19, или же я могу сделать это напрямую с помощью libusb?

ответ

0

Я закончил тем, прибегая к машинному коду, чтобы вызвать тот же самый код, который usbfs UsbDeviceConnection.setInterface() делает:

#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 (окр); line - моя оболочка JNI для вызова метода Java UsbDeviceConnection.getFileDescriptor из C++ - ваш метод может отличаться.

Это работает для меня на API 19 и 21.

+0

Что нужно сделать после того, как: UsbDeviceConnection.setInterface(). Я прочитал форму чтения существующего соединения .bulkTransfer(), но в этом я не умею читать. «реакция на ошибку приближается». – Parth

+0

Я предполагаю, что он специфичен для устройства. Моя проблема заключалась в том, что UsbDeviceConnection.setInterface() был только API уровня 21+, что я и решил с помощью кода NDK C выше. – jensk

Смежные вопросы