Usb4Java - Отправка больших команд

У меня проблемы с отправкой больших команд с использованием Usb4Java.

Если я отправляю все данные за один раз, как и для команд меньшего размера, устройство не отвечает, и я предполагаю, что это из-за слишком большого количества данных одновременно.

Затем я попытался разделить команду на 5 или 6 отдельных команд, и проблема в том, что она выполняет только первую команду и, кажется, игнорирует остальные...

Если кто-то, имеющий опыт в этом вопросе, сможет пролить свет на то, что я должен делать, я был бы очень благодарен за это. Есть ли способ потоковой передачи данных по частям до тех пор, пока все они не будут отправлены, а затем устройство выполнит их?

Ниже приведены все методы, которые я использую.

Обычный метод sendCommand(), который отлично работает для небольших команд.

public static void sendCommand(String command){
    final TransferCallback callback = (Transfer transfer) -> {
        LibUsb.freeTransfer(transfer);
    };

    write(handle, command, callback);
}

Это моя попытка отправки нескольких команд (но по какой-то причине устройство выполняет только первую).

public static void sendMultipleCommands(String COMMAND_ONE, String COMMAND_TWO, String COMMAND_THREE, String COMMAND_FOUR, String COMMAND_FIVE, String COMMAND_SIX){
    // This callback is called after all commands have been sent
    // The asynchronous transfer chain ends here.
    final TransferCallback seven = (Transfer transfer) -> {
        System.out.println("Cut complete.");
        LibUsb.freeTransfer(transfer);
    };
    // This callback is called after command 6 is sent
    final TransferCallback six = (Transfer transfer) -> {
        System.out.println("Sending command: 6");
        write(handle, COMMAND_SIX, seven);
        LibUsb.freeTransfer(transfer);
    };
    // This callback is called after command 5 is sent
    final TransferCallback five = (Transfer transfer) -> {
        System.out.println("Sending command: 5");
        write(handle, COMMAND_FIVE, six);
        LibUsb.freeTransfer(transfer);
    };
    // This callback is called after command 4 is sent
    final TransferCallback four = (Transfer transfer) -> {
        System.out.println("Sending command: 4");
        write(handle, COMMAND_FOUR, five);
        LibUsb.freeTransfer(transfer);
    };
    // This callback is called after command 3 is sent
    final TransferCallback three = (Transfer transfer) -> {
        System.out.println("Sending command: 3");
        write(handle, COMMAND_THREE, four);
        LibUsb.freeTransfer(transfer);
    };
    // This callback is called after command 2 is sent
    final TransferCallback two = (Transfer transfer) -> {
        System.out.println("Sending command: 2");
        write(handle, COMMAND_TWO, three);
        LibUsb.freeTransfer(transfer);
    };

    // Sending commands asynchronously.
    // The rest of the communication is handled by the callbacks defined above.
    System.out.println("\nSending command: 1");
    write(handle, COMMAND_ONE, two);
}

И, наконец, это метод write(), на который опираются и используют оба вышеупомянутых метода.

/**
 * Asynchronously writes some data to the device.
 * 
 * @param handle
 *            The device handle.
 * @param data
 *            The data to send to the device.
 * @param callback
 *            The callback to execute when data has been transfered.
 */
public static void write(DeviceHandle handle, String data, TransferCallback callback){
    ByteBuffer buffer = BufferUtils.allocateByteBuffer(data.getBytes().length);
    buffer.put(data.getBytes());
    Transfer transfer = LibUsb.allocTransfer();
    LibUsb.fillBulkTransfer(transfer, handle, OUT_ENDPOINT, buffer, callback, null, TIMEOUT);
    // System.out.println("Sending " + data.length + " bytes to device\n");
    result = LibUsb.submitTransfer(transfer);
    if (result != LibUsb.SUCCESS){
        throw new LibUsbException("Unable to submit transfer\n", result);
    }
}

Этот пример с официальной страницы Usb4Java GitHub помог мне создать большую часть кода выше.

0 ответов

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