USB错误2:Windows 7上的参数无效,不在Ubuntu上

时间:2014-07-04 11:02:06

标签: java windows-7 libusb ubuntu-14.04 usb4java

我正在使用Java的半跨平台USB控制库来定制USB收发器。 大多数工作都是在Ubuntu中完成的,并且在一段时间内,控件库(以及我为测试它而构建的表单)工作得很好(除了表单因某种原因不会关闭)。然后,我改变了一些东西。我不记得它是什么,但显然它完全打破了一半的功能(我仍然可以从收发器读取的部分,但我不能写它)。

这是MADDENING。

无论如何,编写器组件的代码在这里:

/*
 * 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

我真的不知道还能做些什么来完成这项工作。错误消息不是很有用,我希望也许有其他人碰到这个并且可以帮助我。

0 个答案:

没有答案