Ошибка USB 2: недопустимый параметр в Windows 7, не в Ubuntu

#java #windows-7 #libusb #ubuntu-14.04 #usb4java

#java #windows-7 #libusb #ubuntu-14.04 #usb4java

Вопрос:

Я работаю над полукроссплатформенной библиотекой управления USB на Java для пользовательского USB-трансивера. Большая часть работы была выполнена в Ubuntu, и некоторое время библиотека управления (и форма, которую я создал для ее тестирования) работала просто отлично (за исключением того, что форма по какой-то причине не закрывалась).). Затем я кое-что изменил. Я не помню, что это было, но, очевидно, что бы это ни было, полностью нарушило половину функциональности (ту часть, где я все еще могу читать с трансивера, но я не могу записать на него).

Это сводит с ума.

В любом случае, код для компонента writer находится здесь:

 /*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package JR3Controller;

import java.nio.ByteBuffer;
import org.usb4java.DeviceHandle;
import org.usb4java.LibUsb;
import org.usb4java.LibUsbException;
import org.usb4java.Transfer;
/**
 *
 * @author Will
 */
public class JR3Writer {

    private final DeviceHandle devH;
    public JR3Writer(DeviceHandle devH){
        this.devH = devH;
    }

    private void sendData(byte[] barrData) throws LibUsbException {
        ByteBuffer cXferSetup = ByteBuffer.allocateDirect(13);
        Transfer xFer = LibUsb.allocTransfer();
        LibUsb.fillControlSetup(
                cXferSetup, (byte)0x21, (byte)0x9,
                (byte)0x200, (byte)0x0, (byte)0x5
        );
        cXferSetup.put(barrData);
        LibUsb.fillControlTransfer(xFer, devH, cXferSetup, null, xFer, 0);
        this.errCheck(
            "Unable to communicate with remote",
            LibUsb.submitTransfer(xFer)
        );
    }

    public void allLightsOn(){
        this.sendData(new byte[]{
            (byte)0x63, (byte)0x6D, (byte)0x64, (byte)0xC9, (byte)0x00
        });
    }

    public void allLightsOut(){
        this.sendData(new byte[]{
                    (byte)0x63, (byte)0x6D, (byte)0x64, (byte)0xCB, (byte)0x00
        });
    }

    public void on(int Player){
        this.sendData(new byte[]{
           (byte)0x63, (byte)0x6D, (byte)0x64, (byte)(0x29   Player), (byte)0x00
        });
    }

    public void onFive(int Player){
        this.sendData(new byte[]{
           (byte)0x63, (byte)0x6D, (byte)0x64, (byte)(0x1   Player), (byte)0x00
        });
    }

    public void flash(int Player){
        this.sendData(new byte[]{
           (byte)0x63, (byte)0x6D, (byte)0x64, (byte)(0x51   Player), (byte)0x00
        });
    }

    public void off(int Player){
        this.sendData(new byte[]{
           (byte)0x63, (byte)0x6D, (byte)0x64, (byte)(0x79   Player), (byte)0x00
        });
    }

    private void errCheck(String msg, int r) throws LibUsbException{
        if (r < 0) throw new LibUsbException(msg, r);
    }
}
  

Почему это отлично работает в Ubuntu и с треском проваливается в Windows? Я работал в предположении, что Java была кроссплатформенной, предназначенной для нормальной работы без каких-либо изменений с одной ОС на другую.

Кроме того, я прочитал передачу управления с USB-анализатора (я могу только предположить, что это происходит при записи на устройство). Настройка пакета была такой: 0x21 0x9 0x0 0x2 0x0 0x0 0x5 0x0

Я действительно не знаю, что еще сделать, чтобы это заработало. Сообщение об ошибке было не очень полезным, и я надеюсь, что, возможно, кто-то еще сталкивался с этим и, возможно, сможет мне помочь.