我正在使用此library从Feather 32u4设备发送和接收数据。打开端口后,Feather会发送一些固定数据,然后回显发送给它的内容。
我在理解read
和write
方法在库中的工作方式时遇到问题。我敢肯定我正确地使用了write
,但是我不知道read
。使用read
时返回的长度始终为0,我使用的波特率正确。我不确定是否应该使用how。我仍在尝试找出事件驱动选项。
private void DoTheThing () {
String textMessage = "";
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
// Find available drivers for Feather board.
ProbeTable customTable = new ProbeTable();
customTable.addProduct(0x239a, 0x800c, CdcAcmSerialDriver.class);
UsbSerialProber prober = new UsbSerialProber(customTable);
List<UsbSerialDriver> drivers = prober.findAllDrivers(manager);
if (drivers.isEmpty()) {
textMessage += "Could not find any drivers.\n";
m_textView.setText(textMessage);
return;
}
textMessage += "Driver found\n";
m_textView.setText(textMessage);
UsbDeviceConnection connection = null;
UsbSerialDriver driver = drivers.get(0);
PendingIntent usbPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(INTENT_ACTION_GRANT_USB), 0);
manager.requestPermission(driver.getDevice(), usbPermissionIntent);
try {
connection = manager.openDevice(driver.getDevice());
} catch (Exception e) {
textMessage += e + "\n";
m_textView.setText(textMessage);
}
if (connection == null) {
// add UsbManager.requestPermission(driver.getDevice(), ..) handling here
textMessage += "Could not open device.\n";
m_textView.setText(textMessage);
return;
}
textMessage += "Device opened\n";
m_textView.setText(textMessage);
UsbSerialPort port = driver.getPorts().get(0);
// Most devices have just one port (port 0)
try {
port.open(connection);
port.setParameters(115200, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE);
} catch (IOException e) {
textMessage += e + "\n";
m_textView.setText(textMessage);
return;
}
textMessage += "Connection established\n";
m_textView.setText(textMessage);
// Get received data on connection.
int length = -2;
byte[] receivedData = new byte[64];
try {
length = port.read(receivedData, 2000);
} catch (Exception e) {
textMessage += "Oops: " + e + "\n";
m_textView.setText(textMessage);
}
String data = new String(receivedData);
textMessage += "Data recieved: " + length + " " + data + "\n";
m_textView.setText(textMessage);
// Send canned data.
length = -2;
try {
length = port.write("a".getBytes(), 2000);
} catch (Exception e) {
textMessage += "Oops: " + e + "\n";
m_textView.setText(textMessage);
}
textMessage += "Data sent " + length + "\n";
m_textView.setText(textMessage);
// Get received data.
length = -2;
receivedData = new byte[64];
try {
length = port.read(receivedData, 2000);
} catch (Exception e) {
textMessage += "Oops: " + e + "\n";
m_textView.setText(textMessage);
}
data = new String(receivedData);
textMessage += "Data recieved: " + length + " " + data;
m_textView.setText(textMessage);
}
长度为0,如果在2000毫秒的超时时间内未收到任何内容。
对于像32u4这样的CDC设备,通常必须按照here设置DTR线>