Плохой адрес на IOCTL
Привет,
У меня есть проблема с Usb Ioctl через Jna на Linux Mint 19. На платформе Android Ioctl может быть отправлен, но на Linux я получаю плохую ошибку адреса. Код программы показан ниже.
Есть еще несколько ioctls, вызываемых на usb-устройстве. Первые 2 работают без ошибки msg:
rc = libc.ioctl(fileDescriptor, USBDEVFS_SETINTERFACE, p.getPointer());
и
int rc = libc.ioctl(fileDescriptor, USBDEVFS_SUBMITURB, urbAddr);
Светодиод устройства usb - камеры начинает светиться.
Следующий ioctl теперь терпит неудачу на моем linux-ПК. Он должен отправить команду ReapUrbNDelay в камеру, чтобы собрать кадры камеры.
rc = libc.ioctl(fileDescriptor, func, urbPointer);
Код заголовка C для ioctl выглядит следующим образом: (usbdevice_fs.h)
#define USBDEVFS_REAPURBNDELAY _IOW('U', 13, void *)
Если вам нужна дополнительная информация из заголовочных файлов linux mint 19, пожалуйста, сообщите об этом.
Вопрос в том, от какой из 3 переменных исходит ошибка плохого адреса?
Может быть, это переменная PointerByReference, но почему она работает на android-устройстве с теми же параметрами и кодом для отправки ioctl?
Спасибо,
Питер
Что я уже пробовал:
Вот код для функции ioctl.
private static final int USBDEVFS_REAPURBNDELAY = (1 << 30) | (указатель.Размер << 16) | (0x55 << 8) | 13;
--> метод reapRequest вызывается с параметром true
публичный запрос reapRequest(boolean wait) вызывает исключение IOException {
PointerByReference urbPointer = новый PointerByReference();
int func = ждать ? USBDEVFS_REAPURB : USBDEVFS_REAPURBNDELAY;
int rc;
пробовать {
rc = libc.ioctl(fileDescriptor, func, urbPointer);
} е (е LastErrorException) {
если (электронная.getErrorCode() == или &&усилителя; !ждать) {
возвращать null;
}
бросить е;
}}
Если вам нужны более подробные сведения, пожалуйста, сообщите...