我正在尝试模仿将 USB 命令发送到设备的软件。但是在向设备发送控制命令时出现错误。
public static void main(String[] args) throws UsbException {
UsbController usb = new UsbController();
UsbDevice device = usb.findDevice(UsbHostManager.getUsbServices().getRootUsbHub(), hexToShort("046d"), hexToShort("c31c"));
UsbConfiguration configuration = device.getUsbConfiguration((byte) 1);
UsbInterface iface = configuration.getUsbInterface((byte) 0);
iface.claim(usbInterface -> true);
byte bmRequestType = (byte) 0xb6;
byte bRequest = (byte) 0x01;
short wValue = twoBytesToShort((byte) 0x02, (byte) 0x00);
UsbControlIrp irp = device.createUsbControlIrp (
bmRequestType,
bRequest,
wValue,
(short) 0
);
irp.setData(new byte[1]);
device.syncSubmit(irp);
}
private static short hexToShort(String hex) {
int decimal = Integer.parseInt(hex, 16);
return new Integer(decimal).shortValue();
}
private static short twoBytesToShort(byte firstByte, byte secondByte) {
ByteBuffer bb = ByteBuffer.allocate(2);
bb.order(ByteOrder.BIG_ENDIAN);
bb.put(firstByte);
bb.put(secondByte);
return bb.getShort(0);
}
当我尝试向我的 USB 键盘发送命令时,我失去了对键盘的控制,所以我猜想声称接口有效,但命令部分无效。我使用 USBCap 来捕获控制命令,看起来很相似 - 最后是 b6 01 02 00。
对我来说似乎很好,那么错误的原因可能是什么?