mirror of
https://github.com/mik3y/usb-serial-for-android
synced 2025-06-07 16:06:10 +00:00
Merge pull request #195 from kai-morich/ch340-parameter
CH34x: data bits, parity, stop bits
This commit is contained in:
commit
c89ca2c96a
@ -49,6 +49,17 @@ public class Ch34xSerialDriver implements UsbSerialDriver {
|
|||||||
private final UsbDevice mDevice;
|
private final UsbDevice mDevice;
|
||||||
private final UsbSerialPort mPort;
|
private final UsbSerialPort mPort;
|
||||||
|
|
||||||
|
private static final int LCR_ENABLE_RX = 0x80;
|
||||||
|
private static final int LCR_ENABLE_TX = 0x40;
|
||||||
|
private static final int LCR_MARK_SPACE = 0x20;
|
||||||
|
private static final int LCR_PAR_EVEN = 0x10;
|
||||||
|
private static final int LCR_ENABLE_PAR = 0x08;
|
||||||
|
private static final int LCR_STOP_BITS_2 = 0x04;
|
||||||
|
private static final int LCR_CS8 = 0x03;
|
||||||
|
private static final int LCR_CS7 = 0x02;
|
||||||
|
private static final int LCR_CS6 = 0x01;
|
||||||
|
private static final int LCR_CS5 = 0x00;
|
||||||
|
|
||||||
public Ch34xSerialDriver(UsbDevice device) {
|
public Ch34xSerialDriver(UsbDevice device) {
|
||||||
mDevice = device;
|
mDevice = device;
|
||||||
mPort = new Ch340SerialPort(mDevice, 0);
|
mPort = new Ch340SerialPort(mDevice, 0);
|
||||||
@ -288,7 +299,7 @@ public class Ch34xSerialDriver implements UsbSerialDriver {
|
|||||||
|
|
||||||
checkState("init #4", 0x95, 0x2518, new int[]{-1 /* 0x56, c3*/, 0x00});
|
checkState("init #4", 0x95, 0x2518, new int[]{-1 /* 0x56, c3*/, 0x00});
|
||||||
|
|
||||||
if (controlOut(0x9a, 0x2518, 0x0050) < 0) {
|
if (controlOut(0x9a, 0x2518, LCR_ENABLE_RX | LCR_ENABLE_TX | LCR_CS8) < 0) {
|
||||||
throw new IOException("init failed! #5");
|
throw new IOException("init failed! #5");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,7 +351,60 @@ public class Ch34xSerialDriver implements UsbSerialDriver {
|
|||||||
throws IOException {
|
throws IOException {
|
||||||
setBaudRate(baudRate);
|
setBaudRate(baudRate);
|
||||||
|
|
||||||
// TODO databit, stopbit and paraty set not implemented
|
int lcr = LCR_ENABLE_RX | LCR_ENABLE_TX;
|
||||||
|
|
||||||
|
switch (dataBits) {
|
||||||
|
case DATABITS_5:
|
||||||
|
lcr |= LCR_CS5;
|
||||||
|
break;
|
||||||
|
case DATABITS_6:
|
||||||
|
lcr |= LCR_CS6;
|
||||||
|
break;
|
||||||
|
case DATABITS_7:
|
||||||
|
lcr |= LCR_CS7;
|
||||||
|
break;
|
||||||
|
case DATABITS_8:
|
||||||
|
lcr |= LCR_CS8;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Unknown dataBits value: " + dataBits);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (parity) {
|
||||||
|
case PARITY_NONE:
|
||||||
|
break;
|
||||||
|
case PARITY_ODD:
|
||||||
|
lcr |= LCR_ENABLE_PAR;
|
||||||
|
break;
|
||||||
|
case PARITY_EVEN:
|
||||||
|
lcr |= LCR_ENABLE_PAR | LCR_PAR_EVEN;
|
||||||
|
break;
|
||||||
|
case PARITY_MARK:
|
||||||
|
lcr |= LCR_ENABLE_PAR | LCR_MARK_SPACE;
|
||||||
|
break;
|
||||||
|
case PARITY_SPACE:
|
||||||
|
lcr |= LCR_ENABLE_PAR | LCR_MARK_SPACE | LCR_PAR_EVEN;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Unknown parity value: " + parity);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (stopBits) {
|
||||||
|
case STOPBITS_1:
|
||||||
|
break;
|
||||||
|
case STOPBITS_1_5:
|
||||||
|
throw new IllegalArgumentException("Unsupported stopBits value: 1.5");
|
||||||
|
case STOPBITS_2:
|
||||||
|
lcr |= LCR_STOP_BITS_2;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Unknown stopBits value: " + stopBits);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ret = controlOut(0x9a, 0x2518, lcr);
|
||||||
|
if (ret < 0) {
|
||||||
|
throw new IOException("Error setting control byte");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -264,26 +264,38 @@ public class Cp21xxSerialDriver implements UsbSerialDriver {
|
|||||||
configDataBits |= 0x0800;
|
configDataBits |= 0x0800;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
configDataBits |= 0x0800;
|
throw new IllegalArgumentException("Unknown dataBits value: " + dataBits);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (parity) {
|
switch (parity) {
|
||||||
|
case PARITY_NONE:
|
||||||
|
break;
|
||||||
case PARITY_ODD:
|
case PARITY_ODD:
|
||||||
configDataBits |= 0x0010;
|
configDataBits |= 0x0010;
|
||||||
break;
|
break;
|
||||||
case PARITY_EVEN:
|
case PARITY_EVEN:
|
||||||
configDataBits |= 0x0020;
|
configDataBits |= 0x0020;
|
||||||
break;
|
break;
|
||||||
|
case PARITY_MARK:
|
||||||
|
configDataBits |= 0x0030;
|
||||||
|
break;
|
||||||
|
case PARITY_SPACE:
|
||||||
|
configDataBits |= 0x0040;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Unknown parity value: " + parity);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (stopBits) {
|
switch (stopBits) {
|
||||||
case STOPBITS_1:
|
case STOPBITS_1:
|
||||||
configDataBits |= 0;
|
|
||||||
break;
|
break;
|
||||||
|
case STOPBITS_1_5:
|
||||||
|
throw new IllegalArgumentException("Unsupported stopBits value: 1.5");
|
||||||
case STOPBITS_2:
|
case STOPBITS_2:
|
||||||
configDataBits |= 2;
|
configDataBits |= 2;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Unknown stopBits value: " + stopBits);
|
||||||
}
|
}
|
||||||
setConfigSingle(SILABSER_SET_LINE_CTL_REQUEST_CODE, configDataBits);
|
setConfigSingle(SILABSER_SET_LINE_CTL_REQUEST_CODE, configDataBits);
|
||||||
}
|
}
|
||||||
|
@ -378,7 +378,18 @@ public class FtdiSerialDriver implements UsbSerialDriver {
|
|||||||
throws IOException {
|
throws IOException {
|
||||||
setBaudRate(baudRate);
|
setBaudRate(baudRate);
|
||||||
|
|
||||||
int config = dataBits;
|
int config = 0;
|
||||||
|
switch (dataBits) {
|
||||||
|
case DATABITS_5:
|
||||||
|
case DATABITS_6:
|
||||||
|
throw new IllegalArgumentException("Unsupported dataBits value: " + dataBits);
|
||||||
|
case DATABITS_7:
|
||||||
|
case DATABITS_8:
|
||||||
|
config |= dataBits;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Unknown dataBits value: " + dataBits);
|
||||||
|
}
|
||||||
|
|
||||||
switch (parity) {
|
switch (parity) {
|
||||||
case PARITY_NONE:
|
case PARITY_NONE:
|
||||||
@ -405,8 +416,7 @@ public class FtdiSerialDriver implements UsbSerialDriver {
|
|||||||
config |= (0x00 << 11);
|
config |= (0x00 << 11);
|
||||||
break;
|
break;
|
||||||
case STOPBITS_1_5:
|
case STOPBITS_1_5:
|
||||||
config |= (0x01 << 11);
|
throw new IllegalArgumentException("Unsupported stopBits value: 1.5");
|
||||||
break;
|
|
||||||
case STOPBITS_2:
|
case STOPBITS_2:
|
||||||
config |= (0x02 << 11);
|
config |= (0x02 << 11);
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user