Linux, Java и USB
Вроде продолжения этого вопроса, я смог:
Найдите устройство, с которым я работаю, отключите его от ядра и получите (единственный) интерфейс.,, и это примерно, насколько я могу получить.
Когда я пытаюсь записать на устройство (которое является собственным беспроводным приемопередатчиком, а не моим собственным дизайном), я получаю (при использовании LibUsb.bulkTransfer с конечной точкой 0x00):
LibUsb.bulkTransfer(handle, (byte)0x00, bb, transfered, 5000);
ошибка ввода / вывода и (при использовании LibUsb.bulkTransfer с конечной точкой 0x81):
LibUsb.bulkTransfer(handle, (byte)0x81, bb, transfered, 5000);
ошибка TimeOut.
Я почти уверен, что не имею абсолютно никакого представления о том, что я делаю здесь (что не помогает моей позиции), и это намного глубже, чем я привык заходить так далеко, как общение с устройствами на более низком уровне (наиболее Я сделал это взаимодействие с.Net).
Я видел команду lsusb, выполнил ее и получил... много вещей, и я могу узнать некоторые из них, но большую часть я потерял и надеялся, что кто-то будет держать меня за руку, или укажи мне на какое-то... руководство по USB для чайников, которое поможет мне понять, что мне нужно делать.
Конечным результатом (в идеале) будет пакет Java, который позволяет осуществлять кросс-платформенную связь с устройством без каких-либо манипуляций от имени конечного пользователя (а под кроссплатформенностью я имею в виду windows, linux и mac, поэтому Я использую java4usb библиотеку Java).
Я сейчас, используя вывод команды lsusb, надеюсь, что смогу отправлять команды от трансивера на внешнее устройство, с которым он связывается. (в основном он посылает команды устройству, подключенному к светодиоду, который может включать и выключать светодиод и мигать, а также может получать команды от этого устройства и соответственно реагировать на них, но это происходит с ребенком).
Вывод lsusb, который вы можете найти здесь (он довольно многословен, и я не хотел наводнить вопрос более чем необходимым). Любая помощь или направление будет очень цениться.
РЕДАКТИРОВАТЬ: немного больше исследований показывает (из вывода lsusb), что конечная точка 0x81 является типом прерывания. Соединение 2 и 2 привело меня к выводу, что я не хотел ни массовой передачи, ни передачи управления, а передачи прерываний:
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0002 1x 2 bytes
bInterval
LibUsb.interruptTransfer(handle, (byte)0x81, bb, transfered, 1000);
К сожалению, я все еще получаю ошибку тайм-аута.
РЕДАКТИРОВАТЬ: Нужна дополнительная информация:
Для синхронного управления было предложено использовать метод controlTransfer usb4java.LibUsb, что хорошо, но есть несколько параметров, которые нужно заполнить, и я не знаю, для Синхронного управления (это нормально для половины того, что мне нужно сделать). чем они должны быть заполнены:
public static int controlTransfer(DeviceHandle handle, //I know this.
byte bmRequestType, //<--- What goes here?
byte bRequest, //<--- What goes here?
short wValue, //<--- What goes here?
short wIndex, //<--- What goes here?
ByteBuffer data, //<--- What goes here?
long timeout) //<--- What goes here?
Любое направление к ответу на то, чем мне нужно заполнить эти поля, было бы очень полезно и высоко ценится.