Ошибка USB 9: невозможно отправить управляющее сообщение: ошибка канала - PullRequest
1 голос
/ 29 февраля 2020

Я пытаюсь имитировать c программное обеспечение, которое отправляет команды usb на устройство. Но я получаю сообщение об ошибке при отправке управляющей команды на устройство.

public static void main(String[] args) throws UsbException {
    UsbController usb = new UsbController();
    UsbDevice device = usb.findDevice(UsbHostManager.getUsbServices().getRootUsbHub(), hexToShort("046d"), hexToShort("c31c"));

    UsbConfiguration configuration = device.getUsbConfiguration((byte) 1);
    UsbInterface iface = configuration.getUsbInterface((byte) 0);
    iface.claim(usbInterface -> true);

    byte bmRequestType = (byte) 0xb6;
    byte bRequest = (byte) 0x01;
    short wValue = twoBytesToShort((byte) 0x02, (byte) 0x00);

    UsbControlIrp irp = device.createUsbControlIrp (
        bmRequestType,
        bRequest,
        wValue,
        (short) 0
    );

    irp.setData(new byte[1]);
    device.syncSubmit(irp);
}

private static short hexToShort(String hex) {
    int decimal = Integer.parseInt(hex, 16);
    return new Integer(decimal).shortValue();
}

private static short twoBytesToShort(byte firstByte, byte secondByte) {
    ByteBuffer bb = ByteBuffer.allocate(2);
    bb.order(ByteOrder.BIG_ENDIAN);
    bb.put(firstByte);
    bb.put(secondByte);
    return bb.getShort(0);
}

Когда я пытаюсь отправить команду на клавиатуру USB, я теряю контроль над своей клавиатурой, поэтому утверждается, что интерфейс работает Я думаю, но не командная часть. Я использовал USBCap для захвата управляющей команды, и она кажется похожей - b6 01 02 00 в конце.

enter image description here

Мне кажется, это нормально, поэтому в чем может быть причина ошибки?

...