Android 发送简单的USB数据传输并接收响应
我正在尝试通过USB从一组秤上获取重量值。应该很简单,根据他们的文档,我需要发送两个字节,字母“W”和回车字节。然后,它以16字节的数据响应,这些数据表示设备上的当前重量 该设备有1个接口、2个端点,最大数据包大小为64。我相信我必须使用Android 发送简单的USB数据传输并接收响应,android,usb,android-usb,Android,Usb,Android Usb,我正在尝试通过USB从一组秤上获取重量值。应该很简单,根据他们的文档,我需要发送两个字节,字母“W”和回车字节。然后,它以16字节的数据响应,这些数据表示设备上的当前重量 该设备有1个接口、2个端点,最大数据包大小为64。我相信我必须使用bulkTransfer函数,因为端点类型是USB\u endpoint\u XFER\u BULK 以下是文档图形: 我应该如何发送此请求并接收响应?下面是我的尝试,响应只是一个符号,然后是一个反引号符号“`”和一堆零。我曾尝试在轮询循环或单个请求上运行代
bulkTransfer
函数,因为端点类型是USB\u endpoint\u XFER\u BULK
以下是文档图形:
我应该如何发送此请求并接收响应?下面是我的尝试,响应只是一个符号,然后是一个反引号符号“`”和一堆零。我曾尝试在轮询循环或单个请求上运行代码,但得到了相同的结果
val connection = usbManager.openDevice(scales)
val intf: UsbInterface = scales.getInterface(0)
connection.claimInterface(intf, true)
val endpointReadIn = intf.getEndpoint(0)
val endpointWriteOut = intf.getEndpoint(1)
val bytes = byteArrayOf(0x57.toByte(), 0x0D.toByte())
thread {
val request = connection.bulkTransfer(endpointWriteOut, bytes, bytes.size, 0)
Log.d(TAG, "Was request to write successful? $request")
val buffer = ByteArray(16)
val response = connection.bulkTransfer(endpointReadIn, buffer, buffer.size, 0)
Log.d(TAG, "Was response from read successful? $response")
val responseString = StringBuilder()
for (i in 0..15) {
responseString.append(buffer[i])
}
Log.d(TAG, "Response: $responseString")
val hex = toHexString(buffer)
Log.d(TAG, "Hex: $hex")
connection.close()
}
fun fromHexString(hexString: String): ByteArray {
val len = hexString.length / 2
val bytes = ByteArray(len)
for (i in 0 until len) bytes[i] = hexString.substring(2 * i, 2 * i + 2).toInt(16).toByte()
return bytes
}
输出:
Was request to write successful? 2
Was response from read successful? 2
Response: 19600000000000000
Hex: 01 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00
这里少了几块。我认为最大的问题不是指定波特率、数据位、停止位和奇偶校验,这些都是通过
controlTransfer
功能实现的
最后,尽管在设置这些参数时获得了成功的响应,但我自己无法让它工作。然后我发现它与RS232设备兼容,并且工作良好。我只需要指定vid/pid,就可以使用FtdiSerialDriver
类获取自定义驱动程序