[英]Android HID USB how to send hexadecimal data with bulkTransfer or controlTransfer?
我正在尝试从我的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;
}
这取决于message
缓冲区的目标是什么。
由于您从String中获取十进制值,因此可以使用基数为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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.