Java 4 USb LibUsb.controlTransfer返回-9
对低级usb编程不熟悉,但我尝试将两个字节写入一个usb端口,并写入一个名为EASYDAQ交换机的设备(本质上是一个串行到并行板),其他一切都正常,即找到一个设备句柄等,但当我尝试传输时,结果得到-9。我不知道怎么继续。这是代码,它是从usb4java复制的,我也不完全理解所有命令行参数都在做什么,如果有人能告诉我,我将非常感激,非常感谢Java 4 USb LibUsb.controlTransfer返回-9,java,libusb,Java,Libusb,对低级usb编程不熟悉,但我尝试将两个字节写入一个usb端口,并写入一个名为EASYDAQ交换机的设备(本质上是一个串行到并行板),其他一切都正常,即找到一个设备句柄等,但当我尝试传输时,结果得到-9。我不知道怎么继续。这是代码,它是从usb4java复制的,我也不完全理解所有命令行参数都在做什么,如果有人能告诉我,我将非常感激,非常感谢 public static void sendMessage(DeviceHandle handle, byte[] message) {
public static void sendMessage(DeviceHandle handle, byte[] message)
{
ByteBuffer buffer = ByteBuffer.allocateDirect(message.length);
buffer.put(message);
// buffer.rewind();
int transfered = LibUsb.controlTransfer(handle,
(byte) (LibUsb.REQUEST_TYPE_CLASS | LibUsb.RECIPIENT_INTERFACE),
(byte) 0x09, (short) 2, (short) 1, buffer, TIMEOUT);
if (transfered < 0)
throw new LibUsbException("Control transfer failed", transfered);
if (transfered != message.length)
throw new RuntimeException("Not all data was sent to device");
}
公共静态无效发送消息(DeviceHandle句柄,字节[]消息)
{
ByteBuffer buffer=ByteBuffer.allocateDirect(message.length);
buffer.put(消息);
//buffer.rewind();
int transferd=LibUsb.controlTransfer(句柄,
(字节)(LibUsb.REQUEST_TYPE_CLASS | LibUsb.RECIPIENT_接口),
(字节)0x09,(短)2,(短)1,缓冲区,超时);
如果(传输<0)
抛出新的libusbeexception(“控制传输失败”,已传输);
if(已传输!=消息长度)
抛出新的RuntimeException(“并非所有数据都已发送到设备”);
}
还有最后一件事,一旦我发送此消息并得到失败的响应,我必须关闭我试图与之通信的设备的电源,否则我会收到一条消息,它找不到我的设备