Рейтинг:
6
Jochen Arndt
IOCTL обрабатывается не устройством, а конкретным драйвером устройства. Но libusb это библиотека для общего доступа к USB-устройствам в обход любых драйверов конкретных устройств.
libusb использует файловые дескрипторы внутренне, но они не доступны через какую-либо публичную функцию.
Таким образом, вы должны либо открыть USB-устройство "нормальным" способом для использования специфичных для устройства IOCTLs, либо попытаться выполнить требуемую операцию с помощью libusb функции.
Для первого варианта используйте libusb при необходимости (например, для идентификации устройства) закройте крышку libusb ручка и откройте устройство для использования IOCTLs. После закрытия этой ручки вы можете снова открыть ее с помощью libusb.
Для второго варианта проверьте, если IOCTL уже выполняется libusb (например, когда задан определенный параметр) или если он используется при вызове функции. Для этого необходимо посмотреть на libusb источники.
Peter____
Привет Йохен,
есть ли лучшие решения, чем Usb4Java, чтобы получить FileDescriptors от UsbDevices?
Возможно, высокоуровневый Api: Javax-Usb.
К решению № 1: Знаете ли вы какие-нибудь примеры открытия usb-устройства обычным способом, на которые я могу взглянуть, чтобы найти способ заставить ioctl работать?
Цель состоит в том, чтобы начать изохронную передачу на устройство камеры через java. Используемый исходный класс-UsbIso ( http://www.source-code.biz/snippets/java/UsbIso/ ), для чего мне нужен родной FileDescriptor.
Спасибо,
Питер
Jochen Arndt
Извините, у меня нет примеров.
У меня также есть больше знаний о C/C++. Там вы можете открыть устройство, используя его имя, и получить файловый дескриптор. Должно быть что-то подобное с Java, когда у вас есть дескриптор устройства Java.
Java-это не язык, ищите такой низкий уровень.
Peter____
Спасибо за ответ.
В Java вы можете использовать JNA для получения доступа к собственным библиотекам.
Затем вы можете вызвать библиотеку Linux_C_lib_DirectMapping C и получить FileDescriptor с открытым(путь, разрешение).
Пример Последовательного Порта:
http://www.source-code.biz/snippets/java/SerialPortChannel/SerialPortChannel.java
Jochen Arndt
Тогда используй это. Нет никакого способа получить FD, используемый внутри libusb, даже для программ на C/C++ (кроме реализации этого в исходных текстах и создания собственной версии).