Ошибка USB 2: неверный параметр в Windows 7, а не в Ubuntu
Я работаю над библиотекой USB Control на кроссплатформенной платформе для собственного USB-трансивера. Большая часть работы была сделана в Ubuntu, и некоторое время управляющая библиотека (и форма, которую я создал для ее тестирования) работала просто отлично (за исключением того, что форма по какой-то причине не закрывалась). Затем я что-то изменил. Я не помню, что это было, но, очевидно, что бы это ни было, оно сломало половину функциональности (часть, где я все еще могу читать с трансивера, но я не могу писать на него).
Это УХОД.
Во всяком случае, код для компонента записи здесь:
/*
* 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 Sniffer (что я могу предположить, только когда устройство записывается на). Настройка пакета была такой: 0x21 0x9 0x0 0x2 0x0 0x0 0x5 0x0
Я действительно не знаю, что еще сделать, чтобы сделать эту работу. Сообщение об ошибке не было очень полезным, и я надеюсь, что кто-то еще столкнулся с этим и, возможно, сможет мне помочь.