Peter____ Ответов: 1

Метод Linux для метода android: getfiledescriptor()


Привет,

Я ищу метод в linux java, чтобы получить собственный файловый дескриптор usb-устройства. В Android Java я могу использовать этот метод:
int
getFileDescriptor()
Возвращает собственный файловый дескриптор для устройства или -1, если устройство не открыто.



Спасибо,

Питер

Что я уже пробовал:

В Linux я использую Usb4Java для связи с устройством. Я хочу отправить ioctl на устройство, и там мне нужен родной FileDescriptor.

1 Ответов

Рейтинг:
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++ (кроме реализации этого в исходных текстах и создания собственной версии).