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?

Любое направление к ответу на то, чем мне нужно заполнить эти поля, было бы очень полезно и высоко ценится.

0 ответов

Другие вопросы по тегам