mirror of
https://github.com/mik3y/usb-serial-for-android
synced 2025-06-08 16:36:10 +00:00
restored UsbId.FTDI_FT231X
same ID for FT230X, FT231X, FT234XD tested with FT230X
This commit is contained in:
parent
f36756dc86
commit
698f590d58
@ -5,6 +5,7 @@
|
|||||||
<usb-device vendor-id="1027" product-id="24592" /> <!-- 0x6010: FT2232H -->
|
<usb-device vendor-id="1027" product-id="24592" /> <!-- 0x6010: FT2232H -->
|
||||||
<usb-device vendor-id="1027" product-id="24593" /> <!-- 0x6011: FT4232H -->
|
<usb-device vendor-id="1027" product-id="24593" /> <!-- 0x6011: FT4232H -->
|
||||||
<usb-device vendor-id="1027" product-id="24596" /> <!-- 0x6014: FT232H -->
|
<usb-device vendor-id="1027" product-id="24596" /> <!-- 0x6014: FT232H -->
|
||||||
|
<usb-device vendor-id="1027" product-id="24597" /> <!-- 0x6015: FT230X, FT231X, FT234XD -->
|
||||||
|
|
||||||
<!-- 0x10C4 / 0xEA??: Silabs CP210x -->
|
<!-- 0x10C4 / 0xEA??: Silabs CP210x -->
|
||||||
<usb-device vendor-id="4292" product-id="60000" /> <!-- 0xea60: CP2102 -->
|
<usb-device vendor-id="4292" product-id="60000" /> <!-- 0xea60: CP2102 -->
|
||||||
|
@ -25,6 +25,7 @@ import com.hoho.android.usbserial.driver.Cp21xxSerialDriver;
|
|||||||
import com.hoho.android.usbserial.driver.FtdiSerialDriver;
|
import com.hoho.android.usbserial.driver.FtdiSerialDriver;
|
||||||
import com.hoho.android.usbserial.driver.ProbeTable;
|
import com.hoho.android.usbserial.driver.ProbeTable;
|
||||||
import com.hoho.android.usbserial.driver.ProlificSerialDriver;
|
import com.hoho.android.usbserial.driver.ProlificSerialDriver;
|
||||||
|
import com.hoho.android.usbserial.driver.UsbId;
|
||||||
import com.hoho.android.usbserial.driver.UsbSerialDriver;
|
import com.hoho.android.usbserial.driver.UsbSerialDriver;
|
||||||
import com.hoho.android.usbserial.driver.UsbSerialPort;
|
import com.hoho.android.usbserial.driver.UsbSerialPort;
|
||||||
import com.hoho.android.usbserial.driver.UsbSerialProber;
|
import com.hoho.android.usbserial.driver.UsbSerialProber;
|
||||||
@ -1284,6 +1285,7 @@ public class DeviceTest {
|
|||||||
RTS -> CTS
|
RTS -> CTS
|
||||||
DTR -> DTS/DSR
|
DTR -> DTS/DSR
|
||||||
both -> CD
|
both -> CD
|
||||||
|
for onlyRtsCts devices these two lines are connected directly
|
||||||
*/
|
*/
|
||||||
public void controlLines() throws Exception {
|
public void controlLines() throws Exception {
|
||||||
byte[] data;
|
byte[] data;
|
||||||
@ -1293,18 +1295,26 @@ public class DeviceTest {
|
|||||||
// input lines are supported by all drivers except CDC
|
// input lines are supported by all drivers except CDC
|
||||||
boolean inputLinesSupported = false;
|
boolean inputLinesSupported = false;
|
||||||
boolean inputLinesConnected = false;
|
boolean inputLinesConnected = false;
|
||||||
|
boolean onlyRtsCts = false;
|
||||||
if (usb.serialDriver instanceof FtdiSerialDriver) {
|
if (usb.serialDriver instanceof FtdiSerialDriver) {
|
||||||
inputLinesSupported = true;
|
inputLinesSupported = true;
|
||||||
inputLinesConnected = usb.serialDriver.getPorts().size() == 2; // I only have 74LS138 connected at FT2232
|
if(usb.serialDriver.getDevice().getProductId() == UsbId.FTDI_FT2232H)
|
||||||
|
inputLinesConnected = true; // I only have 74LS138 connected at FT2232, not at FT232
|
||||||
|
if(usb.serialDriver.getDevice().getProductId() == UsbId.FTDI_FT231X) {
|
||||||
|
inputLinesConnected = true;
|
||||||
|
onlyRtsCts = true; // I only test with FT230X that has only these 2 control lines. DTR is silently ignored
|
||||||
|
}
|
||||||
} else if (usb.serialDriver instanceof Cp21xxSerialDriver) {
|
} else if (usb.serialDriver instanceof Cp21xxSerialDriver) {
|
||||||
inputLinesSupported = true;
|
inputLinesSupported = true;
|
||||||
inputLinesConnected = usb.serialDriver.getPorts().size()==1; // I only have 74LS138 connected at CP2102
|
if(usb.serialDriver.getPorts().size() == 1)
|
||||||
|
inputLinesConnected = true; // I only have 74LS138 connected at CP2102, not at CP2105
|
||||||
} else if (usb.serialDriver instanceof ProlificSerialDriver) {
|
} else if (usb.serialDriver instanceof ProlificSerialDriver) {
|
||||||
inputLinesSupported = true;
|
inputLinesSupported = true;
|
||||||
inputLinesConnected = true;
|
inputLinesConnected = true;
|
||||||
} else if (usb.serialDriver instanceof Ch34xSerialDriver) {
|
} else if (usb.serialDriver instanceof Ch34xSerialDriver) {
|
||||||
inputLinesSupported = true;
|
inputLinesSupported = true;
|
||||||
inputLinesConnected = true;
|
if(usb.serialDriver.getDevice().getProductId() == UsbId.QINHENG_CH340)
|
||||||
|
inputLinesConnected = true; // I only have 74LS138 connected at CH230, not connected at CH341A
|
||||||
}
|
}
|
||||||
Boolean inputLineFalse = inputLinesSupported ? Boolean.FALSE : null;
|
Boolean inputLineFalse = inputLinesSupported ? Boolean.FALSE : null;
|
||||||
Boolean inputLineTrue = inputLinesConnected ? Boolean.TRUE : inputLineFalse;
|
Boolean inputLineTrue = inputLinesConnected ? Boolean.TRUE : inputLineFalse;
|
||||||
@ -1337,7 +1347,7 @@ public class DeviceTest {
|
|||||||
|
|
||||||
// control lines reset on initial open
|
// control lines reset on initial open
|
||||||
data = "none".getBytes();
|
data = "none".getBytes();
|
||||||
assertEquals(inputLinesConnected
|
assertEquals(inputLinesConnected && !onlyRtsCts
|
||||||
? EnumSet.of(UsbSerialPort.ControlLine.RI)
|
? EnumSet.of(UsbSerialPort.ControlLine.RI)
|
||||||
: EnumSet.noneOf(UsbSerialPort.ControlLine.class),
|
: EnumSet.noneOf(UsbSerialPort.ControlLine.class),
|
||||||
usb.serialPort.getControlLines());
|
usb.serialPort.getControlLines());
|
||||||
@ -1346,7 +1356,7 @@ public class DeviceTest {
|
|||||||
assertThat(usb.getControlLine(usb.serialPort::getDTR), equalTo(Boolean.FALSE));
|
assertThat(usb.getControlLine(usb.serialPort::getDTR), equalTo(Boolean.FALSE));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getDSR), equalTo(inputLineFalse));
|
assertThat(usb.getControlLine(usb.serialPort::getDSR), equalTo(inputLineFalse));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getCD), equalTo(inputLineFalse));
|
assertThat(usb.getControlLine(usb.serialPort::getCD), equalTo(inputLineFalse));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getRI), equalTo(inputLineTrue));
|
assertThat(usb.getControlLine(usb.serialPort::getRI), equalTo(onlyRtsCts ? Boolean.FALSE : inputLineTrue));
|
||||||
telnet.write(data);
|
telnet.write(data);
|
||||||
if(usb.serialDriver instanceof CdcAcmSerialDriver)
|
if(usb.serialDriver instanceof CdcAcmSerialDriver)
|
||||||
// arduino: control line feedback as serial_state notification is not implemented.
|
// arduino: control line feedback as serial_state notification is not implemented.
|
||||||
@ -1378,15 +1388,17 @@ public class DeviceTest {
|
|||||||
data = "both".getBytes();
|
data = "both".getBytes();
|
||||||
usb.serialPort.setDTR(true);
|
usb.serialPort.setDTR(true);
|
||||||
Thread.sleep(sleep);
|
Thread.sleep(sleep);
|
||||||
assertEquals(inputLinesConnected
|
assertEquals(onlyRtsCts
|
||||||
? EnumSet.of(UsbSerialPort.ControlLine.RTS, UsbSerialPort.ControlLine.DTR, UsbSerialPort.ControlLine.CD)
|
? EnumSet.of(UsbSerialPort.ControlLine.RTS, UsbSerialPort.ControlLine.DTR, UsbSerialPort.ControlLine.CTS)
|
||||||
: EnumSet.of(UsbSerialPort.ControlLine.RTS, UsbSerialPort.ControlLine.DTR),
|
: inputLinesConnected
|
||||||
|
? EnumSet.of(UsbSerialPort.ControlLine.RTS, UsbSerialPort.ControlLine.DTR, UsbSerialPort.ControlLine.CD)
|
||||||
|
: EnumSet.of(UsbSerialPort.ControlLine.RTS, UsbSerialPort.ControlLine.DTR),
|
||||||
usb.serialPort.getControlLines());
|
usb.serialPort.getControlLines());
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getRTS), equalTo(Boolean.TRUE));
|
assertThat(usb.getControlLine(usb.serialPort::getRTS), equalTo(Boolean.TRUE));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getCTS), equalTo(inputLineFalse));
|
assertThat(usb.getControlLine(usb.serialPort::getCTS), equalTo(onlyRtsCts ? Boolean.TRUE : inputLineFalse));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getDTR), equalTo(Boolean.TRUE));
|
assertThat(usb.getControlLine(usb.serialPort::getDTR), equalTo(Boolean.TRUE));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getDSR), equalTo(inputLineFalse));
|
assertThat(usb.getControlLine(usb.serialPort::getDSR), equalTo(inputLineFalse));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getCD), equalTo(inputLineTrue));
|
assertThat(usb.getControlLine(usb.serialPort::getCD), equalTo(onlyRtsCts ? Boolean.FALSE : inputLineTrue));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getRI), equalTo(inputLineFalse));
|
assertThat(usb.getControlLine(usb.serialPort::getRI), equalTo(inputLineFalse));
|
||||||
telnet.write(data);
|
telnet.write(data);
|
||||||
assertThat(Arrays.toString(data), usb.read(4), equalTo(data));
|
assertThat(Arrays.toString(data), usb.read(4), equalTo(data));
|
||||||
@ -1396,14 +1408,14 @@ public class DeviceTest {
|
|||||||
data = "dtr ".getBytes();
|
data = "dtr ".getBytes();
|
||||||
usb.serialPort.setRTS(false);
|
usb.serialPort.setRTS(false);
|
||||||
Thread.sleep(sleep);
|
Thread.sleep(sleep);
|
||||||
assertEquals(inputLinesConnected
|
assertEquals(inputLinesConnected && !onlyRtsCts
|
||||||
? EnumSet.of(UsbSerialPort.ControlLine.DTR, UsbSerialPort.ControlLine.DSR)
|
? EnumSet.of(UsbSerialPort.ControlLine.DTR, UsbSerialPort.ControlLine.DSR)
|
||||||
: EnumSet.of(UsbSerialPort.ControlLine.DTR),
|
: EnumSet.of(UsbSerialPort.ControlLine.DTR),
|
||||||
usb.serialPort.getControlLines());
|
usb.serialPort.getControlLines());
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getRTS), equalTo(Boolean.FALSE));
|
assertThat(usb.getControlLine(usb.serialPort::getRTS), equalTo(Boolean.FALSE));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getCTS), equalTo(inputLineFalse));
|
assertThat(usb.getControlLine(usb.serialPort::getCTS), equalTo(inputLineFalse));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getDTR), equalTo(Boolean.TRUE));
|
assertThat(usb.getControlLine(usb.serialPort::getDTR), equalTo(Boolean.TRUE));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getDSR), equalTo(inputLineTrue));
|
assertThat(usb.getControlLine(usb.serialPort::getDSR), equalTo(onlyRtsCts ? Boolean.FALSE : inputLineTrue));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getCD), equalTo(inputLineFalse));
|
assertThat(usb.getControlLine(usb.serialPort::getCD), equalTo(inputLineFalse));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getRI), equalTo(inputLineFalse));
|
assertThat(usb.getControlLine(usb.serialPort::getRI), equalTo(inputLineFalse));
|
||||||
telnet.write(data);
|
telnet.write(data);
|
||||||
@ -1414,18 +1426,20 @@ public class DeviceTest {
|
|||||||
// control lines retained over close+open
|
// control lines retained over close+open
|
||||||
boolean inputRetained = inputLinesConnected;
|
boolean inputRetained = inputLinesConnected;
|
||||||
boolean outputRetained = true;
|
boolean outputRetained = true;
|
||||||
|
usb.serialPort.setRTS(true);
|
||||||
|
usb.serialPort.setDTR(false);
|
||||||
usb.close(EnumSet.of(UsbWrapper.OpenCloseFlags.NO_CONTROL_LINE_INIT));
|
usb.close(EnumSet.of(UsbWrapper.OpenCloseFlags.NO_CONTROL_LINE_INIT));
|
||||||
usb.open(EnumSet.of(UsbWrapper.OpenCloseFlags.NO_CONTROL_LINE_INIT, UsbWrapper.OpenCloseFlags.NO_IOMANAGER_THREAD));
|
usb.open(EnumSet.of(UsbWrapper.OpenCloseFlags.NO_CONTROL_LINE_INIT, UsbWrapper.OpenCloseFlags.NO_IOMANAGER_THREAD));
|
||||||
usb.setParameters(19200, 8, 1, UsbSerialPort.PARITY_NONE);
|
usb.setParameters(19200, 8, 1, UsbSerialPort.PARITY_NONE);
|
||||||
|
|
||||||
EnumSet<UsbSerialPort.ControlLine> retainedControlLines = EnumSet.noneOf(UsbSerialPort.ControlLine.class);
|
EnumSet<UsbSerialPort.ControlLine> retainedControlLines = EnumSet.noneOf(UsbSerialPort.ControlLine.class);
|
||||||
if(outputRetained) retainedControlLines.add(UsbSerialPort.ControlLine.DTR);
|
if(outputRetained) retainedControlLines.add(UsbSerialPort.ControlLine.RTS);
|
||||||
if(inputRetained) retainedControlLines.add(UsbSerialPort.ControlLine.DSR);
|
if(inputRetained) retainedControlLines.add(UsbSerialPort.ControlLine.CTS);
|
||||||
assertEquals(retainedControlLines, usb.serialPort.getControlLines());
|
assertEquals(retainedControlLines, usb.serialPort.getControlLines());
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getRTS), equalTo(Boolean.FALSE));
|
assertThat(usb.getControlLine(usb.serialPort::getRTS), equalTo(outputRetained));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getCTS), equalTo(inputLineFalse));
|
assertThat(usb.getControlLine(usb.serialPort::getCTS), equalTo(inputRetained ? inputLineTrue : inputLineFalse));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getDTR), equalTo(outputRetained));
|
assertThat(usb.getControlLine(usb.serialPort::getDTR), equalTo(Boolean.FALSE));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getDSR), equalTo(inputRetained ? inputLineTrue : inputLineFalse));
|
assertThat(usb.getControlLine(usb.serialPort::getDSR), equalTo(inputLineFalse));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getCD), equalTo(inputLineFalse));
|
assertThat(usb.getControlLine(usb.serialPort::getCD), equalTo(inputLineFalse));
|
||||||
assertThat(usb.getControlLine(usb.serialPort::getRI), equalTo(inputLineFalse));
|
assertThat(usb.getControlLine(usb.serialPort::getRI), equalTo(inputLineFalse));
|
||||||
|
|
||||||
|
@ -383,6 +383,7 @@ public class FtdiSerialDriver implements UsbSerialDriver {
|
|||||||
UsbId.FTDI_FT232H,
|
UsbId.FTDI_FT232H,
|
||||||
UsbId.FTDI_FT2232H,
|
UsbId.FTDI_FT2232H,
|
||||||
UsbId.FTDI_FT4232H,
|
UsbId.FTDI_FT4232H,
|
||||||
|
UsbId.FTDI_FT231X, // same ID for FT230X, FT231X, FT234XD
|
||||||
});
|
});
|
||||||
return supportedDevices;
|
return supportedDevices;
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ public final class UsbId {
|
|||||||
public static final int FTDI_FT2232H = 0x6010;
|
public static final int FTDI_FT2232H = 0x6010;
|
||||||
public static final int FTDI_FT4232H = 0x6011;
|
public static final int FTDI_FT4232H = 0x6011;
|
||||||
public static final int FTDI_FT232H = 0x6014;
|
public static final int FTDI_FT232H = 0x6014;
|
||||||
|
public static final int FTDI_FT231X = 0x6015; // same ID for FT230X, FT231X, FT234XD
|
||||||
|
|
||||||
public static final int VENDOR_ATMEL = 0x03EB;
|
public static final int VENDOR_ATMEL = 0x03EB;
|
||||||
public static final int ATMEL_LUFA_CDC_DEMO_APP = 0x2044;
|
public static final int ATMEL_LUFA_CDC_DEMO_APP = 0x2044;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user