我正在从 Android 设备向 Arduino Nano 发送信息。bulkTransfer
返回正确的值(传输的数据长度),但 Arduino 接收到奇怪的值。我认为这是因为Arduino(9600)的波特率与Android正在传输的波特率不同,但我找不到知道这个值的方法。
所以我试图调用controlTransfer
来设置Android的波特率,但controlTransfer总是返回-1。我不明白为什么bulkTransfer
有效但controlTransfer
失败了。
我正在使用这段代码:
public int sendData(byte[] nbyte) throws IOException, NullPointerException {
if(nbyte == null) throw new NullPointerException("nbyte cannot be null");
int result = this.usbDeviceConnection.controlTransfer(0x40, 0, 0, 0, null, 0, 0);// reset
result = this.usbDeviceConnection.controlTransfer(0x40, 0, 1, 0, null, 0, 0);// clear Rx
result = this.usbDeviceConnection.controlTransfer(0x40, 0, 2, 0, null, 0, 0);// clear Tx
result = this.usbDeviceConnection.controlTransfer(0x40, 0x03, 0x4138, 0, null, 0, 0);
int len = this.usbDeviceConnection.bulkTransfer(this.usbEndpoint, nbyte, nbyte.length, 5000);
if(len == -1) throw new IOException("Bulktransfer failed");
return len;
}