【发布时间】:2016-09-12 15:42:42
【问题描述】:
我想使用 Usb4Java 的低级 API 将单个包发送到 USB 设备(Arduino 控制器),但收到以下错误:
org.usb4java.LibUsbException: USB error 9: Pipe error
这里是关键部分的代码:
ByteBuffer buffer = ByteBuffer.allocateDirect(8);
buffer.put(new byte[] {'a', 'b', 'c'});
int transfered = LibUsb.controlTransfer(handle,
(byte) (LibUsb.REQUEST_TYPE_CLASS | LibUsb.RECIPIENT_INTERFACE),
(byte) 0x09,
(short) 256,
(short) 0,
buffer,
1000);
System.out.println(transfered);
if (transfered < 0){
throw new LibUsbException("Control transfer failed", transfered);
我觉得可能和驱动有关或者和LibUsb.controlTransfer(...);的参数有关
或许值得一提:源机运行的是Windows 7。
【问题讨论】:
-
你使用哪个驱动后端?
-
我使用Zadig 2.2修改驱动。
-
好的,这应该可以正常工作。你确定你发送的控制传输是正确的吗? libusb API 说明如下:“如果设备不支持控制请求,则为 LIBUSB_ERROR_PIPE”。您尝试发送的控制传输似乎不受支持。
-
能否请您给我一些关于如何解决问题或如何确定设备支持哪些控制传输的建议?
-
抱歉,但这取决于设备,我对这些设备了解不多。您必须考虑这些是 USB 串行转换器。我可以告诉你,他们中的大多数都是在低水平工作时下半身疼痛。而且由于 arduino 是用很多不同的(甚至是中国 10 美分硬件)构建的,这取决于你在 Arduino 上花了多少钱,老实说,我个人会避免它。你想通过 Arduino 使用 libusb 来完成什么?
标签: java arduino libusb usb4java