gpt4 book ai didi

usb4java - 我尝试从 USB 设备读取我收到 USB 错误 5 : Unable to read data: Entity not found can someone help me?

转载 作者:行者123 更新时间:2023-12-01 06:06:48 25 4
gpt4 key购买 nike

我尝试通过 usb4java api 从 USB 设备读取,但出现错误:
USB 错误 5:无法读取数据:找不到实体
有谁能够帮助我?
必须注意的是,endpoint_in 我从 LibUsb.ENDPOINT_IN 获取它并将其传递给读取功能找到的设备已被声明,但我无法继续从设备中读取。

My code is given below:




import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.IntBuffer;

import javax.swing.JOptionPane;

import org.usb4java.BufferUtils;
import org.usb4java.Context;
import org.usb4java.Device;
import org.usb4java.DeviceDescriptor;
import org.usb4java.DeviceHandle;
import org.usb4java.DeviceList;
import org.usb4java.LibUsb;
import org.usb4java.LibUsbException;

public class Test {
private static byte endpoint;
// private static final byte IN_ENDPOINT = 0;
private static Device device;
private static Context context = new Context();
private static DeviceHandle handle;

public static void main(String[] args) {

// Create the libusb context
LibUsb.init(null);
findDevice(context, (short) (0x046D), (short) (0xC016));
// Deinitialize the libusb context
LibUsb.exit(context);

}

public static void findDevice(Context context, short vendorId, short productId) {

// Initialize the libusb context
int result = LibUsb.init(context);
if (result < 0) {
throw new LibUsbException("Unable to initialize libusb", result);
}

// Read the USB device list
DeviceList list = new DeviceList();
result = LibUsb.getDeviceList(context, list);
if (result < 0) {
throw new LibUsbException("Unable to get device list", result);
}

try {
// Iterate over all devices and list them
for (Device device : list) {

int address = LibUsb.getDeviceAddress(device);
int busNumber = LibUsb.getBusNumber(device);
DeviceDescriptor descriptor = new DeviceDescriptor();
result = LibUsb.getDeviceDescriptor(device, descriptor);

if (result < 0) {
throw new LibUsbException(
"Unable to read device descriptor", result);
}
System.out.format(
"Bus %03d, Device %03d: Vendor %04x, Product %04x%n",
busNumber, address, descriptor.idVendor(),
descriptor.idProduct());

if (result != LibUsb.SUCCESS) {
throw new LibUsbException("Unable to read device descriptor", result);
}
if (descriptor.idVendor() == vendorId && descriptor.idProduct() == productId) {

System.out.println("Device Found");
getDeviceHandle(device);
LibUsb.claimInterface(handle, 0);
}

}
} finally {
// Ensure the allocated device list is freed
LibUsb.freeDeviceList(list, true);
}
}

public static void getDeviceHandle(Device device) {
endpoint = (byte)LibUsb.getDeviceAddress(device);
handle = new DeviceHandle();
JOptionPane.showMessageDialog(null, "endpoint="+endpoint);

int result = LibUsb.open(device, handle);


if (result != LibUsb.SUCCESS) {
throw new LibUsbException("Unable to open USB device", result);
}

try {
// Use device handle here
claimDevice(handle, 0);


} finally {
LibUsb.close(handle);
}
}

public static void claimDevice(DeviceHandle handle, int interfaceNumber) {


int result = LibUsb.claimInterface(handle, interfaceNumber);

if (result != LibUsb.SUCCESS) {
throw new LibUsbException("Unable to claim interface", result);
}
try {

System.out.println("Device Claimed");
//sendData(handle);
// read(handle,1000);
JOptionPane.showMessageDialog(null, "interface="+interfaceNumber);
read(handle, 2048);






} finally {
result = LibUsb.releaseInterface(handle, interfaceNumber);
if (result != LibUsb.SUCCESS) {
throw new LibUsbException("Unable to release interface", result);
}
}
}

@SuppressWarnings("unused")







public static void sendData(DeviceHandle handle) {

char[] initEP = new char[]{0x1b, '@'};
char[] cutPaper = new char[]{0x1d, 'V', 1};

String initStr = new String(initEP);
String cutStr = new String(cutPaper);
String text = "blabla \n\n\n";

ByteBuffer buffer = ByteBuffer.allocateDirect(8);
buffer.put(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 });
// SEND INIT BYTE
int transfered = LibUsb.controlTransfer(handle,
(byte) (LibUsb.REQUEST_TYPE_CLASS | LibUsb.RECIPIENT_INTERFACE),
(byte) 0x01, (short) 2, (short) 1, buffer, 5000);

if (transfered < 0) {
throw new LibUsbException("Control transfer failed", transfered);
}

// SENDT TEXT
buffer = ByteBuffer.wrap(text.getBytes());

transfered = LibUsb.controlTransfer(handle,
(byte) (LibUsb.REQUEST_TYPE_CLASS | LibUsb.RECIPIENT_INTERFACE),
(byte) 0x01, (short) 2, (short) 1, buffer, 5000);

if (transfered < 0) {
throw new LibUsbException("Control transfer failed", transfered);
}

/* // SENDT CUT BYTE
buffer = ByteBuffer.wrap(text.getBytes());

transfered = LibUsb.controlTransfer(handle,
(byte) (LibUsb.REQUEST_TYPE_CLASS | LibUsb.RECIPIENT_INTERFACE),
(byte) 0x09, (short) 2, (short) 1, buffer, 5000);

if (transfered < 0) {
throw new LibUsbException("Control transfer failed", transfered);
} */
System.out.println(transfered + " bytes sent");
}

public static ByteBuffer read(DeviceHandle handle, int size)
{


ByteBuffer buffer = BufferUtils.allocateByteBuffer(size).order(ByteOrder.LITTLE_ENDIAN);
IntBuffer transferred = BufferUtils.allocateIntBuffer();

// IntBuffer transferred = BufferUtils.allocateIntBuffer();
long TIMEOUT = 5000;


JOptionPane.showMessageDialog(null, "endpoint_in="+ LibUsb.ENDPOINT_IN);
JOptionPane.showMessageDialog(null, "endpoint_out="+ LibUsb.ENDPOINT_OUT);
JOptionPane.showMessageDialog(null, "handle="+handle);

int result = LibUsb.bulkTransfer(handle, (byte)-128, buffer,
transferred, TIMEOUT);

JOptionPane.showMessageDialog(null, result);

if (result != LibUsb.SUCCESS)
{
throw new LibUsbException("Unable to read data", result);
}
else{System.out.println(transferred.get() + " bytes read from device");

}


return buffer;
}

}

该设备是一个usb鼠标是什么问题?
In order to write i use this code (the write function that I call in my main function):

公共(public)静态 ByteBuffer 写入(DeviceHandle 句柄,int 大小)
{ ByteBuffer 缓冲区 = ByteBuffer.allocateDirect(8);
buffer.put(新字节[] {'p'});
    String text="p";

//ByteBuffer buffer = ByteBuffer.wrap(text.getBytes());

IntBuffer transferred = BufferUtils.allocateIntBuffer();
long TIMEOUT = 5000;
int result = LibUsb.bulkTransfer(handle, (byte) 0x01, buffer,
transferred, TIMEOUT);


if (result != LibUsb.SUCCESS)
{
throw new LibUsbException("Unable to write data", result);
}
else{System.out.println(transferred.get() + " bytes written to the device");

}



return buffer;


}

但我收到 USB 错误 5:无法写入数据:找不到实体
Why the entity is not found since I use endpoint 0x01...

最佳答案

  • 从以下 URL 下载 libusbK。
  • 删除 Zadig 驱动程序。
  • 安装 libusbK 驱动程序。

  • 网址: https://sourceforge.net/projects/libusbk/

    关于usb4java - 我尝试从 USB 设备读取我收到 USB 错误 5 : Unable to read data: Entity not found can someone help me?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37674969/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com