Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android HID USB如何使用bulkTransfer或controlTransfer发送十六进制数据?_Java_Android_Usb_Hid - Fatal编程技术网

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

Java Android HID USB如何使用bulkTransfer或controlTransfer发送十六进制数据?,java,android,usb,hid,Java,Android,Usb,Hid,我试图从我的Nexus7向连接的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[] b

我试图从我的Nexus7向连接的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)
像这样: ,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;
}
private void sendData(){
//字节b=(字节)129;/(字节)0x81也起作用
int status=connection.bulkTransfer(endPointWrite,toByte(129),1250);
}
专用静态字节toByte(int c){

返回(字节)(c这取决于
消息的目标是什么

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

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);
controlTransfer(USB_DIR_OUT, VENDOR_DEFINED_REQUEST, VENDOR_DEFINED_VALUE, USB_INTERFACE_INDEX, message, message.length, 1000);
控制请求通常针对USB设备本身的某些功能,由供应商定义。如果需要将缓冲区作为控制请求发送,则应按如下方式发送:

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

谢谢,但是你的和这段代码不起作用:byte message[]=new byte[]{3100128256};byte in Java:byte数据类型是一个8位带符号的2的补码整数。它的最小值为-128,最大值为127(包括)。这段代码起作用:message=new byte[]{(byte)0x80};但我试图从带有Byte.parseByte(str[I])或Byte.decode(str[I])的字符串转换数据,当我使用大于127的数据时,我有NFE。另外,新的Byte[]{(Byte)128};很好。我刚刚修改了我的答案,并在你的问题中添加了缺少的信息,即十进制值源自字符串。很抱歉,原来这是C,修改后的答案包含java代码。