gpt4 book ai didi

java - Android HID USB 如何使用 bulkTransfer 或 controlTransfer 发送十六进制数据?

转载 作者:太空宇宙 更新时间:2023-11-03 10:48:23 29 4
gpt4 key购买 nike

我正在尝试将十六进制数据从我的 Nexus 7 发送到连接的 USB HID 设备,但 Android SDK 方法只能使用 byte[] 缓冲区。

如何使用 bulkTransfer 或 controlTransfer 发送源自十进制字符串值的十六进制数据?

message[0]= 0;
message[1]= 166;
message[2]= 2;
message[3]= 252;
message[4]= 255;

SDK 方法:

bulkTransfer(UsbEndpoint endpoint, byte[] buffer, int length, int timeout)

controlTransfer(int requestType, int request, int value, int index, byte[] buffer, int length, int timeout)

像这样: http://pure-basic.narod.ru/article/pickit2.html , PC 应用程序与设备运行良好。

OutBuffer(0)=0
OutBuffer(1)=$A6 ; EXECUTE_SCRIPT
OutBuffer(2)=2
OutBuffer(3)=$FC ; _VDD_GND_OFF
OutBuffer(4)=$FF ; _VDD_ON

更新 - 回答

private void sendData() {
//byte b = (byte) 129; // (byte) 0x81 Also work
int status = connection.bulkTransfer(endPointWrite, toByte(129), 1, 250);
}

private static byte toByte(int c) {
return (byte) (c <= 0x7f ? c : ((c % 0x80) - 0x80));
}

// for received data from USB HID device
private static int toInt(byte b) {
return (int) b & 0xFF;
}

My application on Google play - USB HID TERMINAL

最佳答案

这取决于 message 缓冲区的目标是什么。

由于您是从字符串中获取十进制值,因此您可以使用基数为 10 的 Integer.parseInt 方法,然后转换为 byte:

byte message[] = new byte[] { (byte)java.lang.Integer.parseInt("0", 10),
(byte)java.lang.Integer.parseInt("166", 10),
(byte)java.lang.Integer.parseInt("2", 10),
(byte)java.lang.Integer.parseInt("252", 10),
(byte)java.lang.Integer.parseInt("255", 10)
};

如果您只是想通过批量管道发送数据,那么您可以按如下方式发送:

bulkTransfer(outEndpoint, message, message.length, 1000);

控制请求通常以 USB 设备本身的某些功能为目标,并且是供应商定义的。如果您需要将缓冲区作为控制请求发送,您可以按如下方式发送:

controlTransfer(USB_DIR_OUT, VENDOR_DEFINED_REQUEST, VENDOR_DEFINED_VALUE, USB_INTERFACE_INDEX, message, message.length, 1000);

关于java - Android HID USB 如何使用 bulkTransfer 或 controlTransfer 发送十六进制数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18229770/

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