diff --git a/core/src/main/java/me/retrodaredevil/io/serial/ImmutableSerialConfig.java b/core/src/main/java/me/retrodaredevil/io/serial/ImmutableSerialConfig.java index 5142292..4487676 100644 --- a/core/src/main/java/me/retrodaredevil/io/serial/ImmutableSerialConfig.java +++ b/core/src/main/java/me/retrodaredevil/io/serial/ImmutableSerialConfig.java @@ -1,49 +1,55 @@ package me.retrodaredevil.io.serial; public final class ImmutableSerialConfig implements SerialConfig { - + private final int baudRate; private final int dataBits; private final StopBits stopBits; private final Parity parity; - private final boolean rts, dtr; - - public ImmutableSerialConfig(int baudRate, int dataBits, StopBits stopBits, Parity parity, boolean rts, boolean dtr) { + private final boolean rts, dtr, rs485; + + public ImmutableSerialConfig(int baudRate, int dataBits, StopBits stopBits, Parity parity, boolean rts, boolean dtr, boolean rs485) { this.baudRate = baudRate; this.dataBits = dataBits; this.stopBits = stopBits; this.parity = parity; this.rts = rts; this.dtr = dtr; + this.rs485 = rs485; } - + @Override public int getBaudRateValue() { return baudRate; } - + @Override public Parity getParity() { return parity; } - + @Override public int getDataBitsValue() { return dataBits; } - + @Override public StopBits getStopBits() { return stopBits; } - + @Override public boolean isRTS() { return rts; } - + @Override public boolean isDTR() { return dtr; } + + @Override + public boolean isRS485() { + return rs485; + } } diff --git a/core/src/main/java/me/retrodaredevil/io/serial/SerialConfig.java b/core/src/main/java/me/retrodaredevil/io/serial/SerialConfig.java index 2722aca..a3f06a6 100644 --- a/core/src/main/java/me/retrodaredevil/io/serial/SerialConfig.java +++ b/core/src/main/java/me/retrodaredevil/io/serial/SerialConfig.java @@ -7,9 +7,10 @@ public interface SerialConfig { StopBits getStopBits(); boolean isRTS(); boolean isDTR(); - + boolean isRS485(); + // TODO implement flow control - + enum Baud { B1200(1200), B2400(2400), B4800(4800), B9600(9600), B19200(19200), B38400(38400), B56000(56000), B115200(115200), B128000(128000), B256000(256000) diff --git a/core/src/main/java/me/retrodaredevil/io/serial/SerialConfigBuilder.java b/core/src/main/java/me/retrodaredevil/io/serial/SerialConfigBuilder.java index 2f98ac4..d1831c6 100644 --- a/core/src/main/java/me/retrodaredevil/io/serial/SerialConfigBuilder.java +++ b/core/src/main/java/me/retrodaredevil/io/serial/SerialConfigBuilder.java @@ -3,13 +3,13 @@ import static java.util.Objects.requireNonNull; public class SerialConfigBuilder implements SerialConfig { - + private int baudRate; private int dataBits = 8; private StopBits stopBits = StopBits.ONE; private Parity parity = Parity.NONE; - private boolean rts = false, dtr = false; - + private boolean rts = false, dtr = false, rs485 = false; + public SerialConfigBuilder(SerialConfig serialConfig){ baudRate = serialConfig.getBaudRateValue(); dataBits = serialConfig.getDataBitsValue(); @@ -21,9 +21,9 @@ public SerialConfigBuilder(SerialConfig serialConfig){ public SerialConfigBuilder(int baudRate){ this.baudRate = baudRate; } - + public SerialConfig build(){ - return new ImmutableSerialConfig(baudRate, dataBits, stopBits, parity, rts, dtr); + return new ImmutableSerialConfig(baudRate, dataBits, stopBits, parity, rts, dtr, rs485); } @Override public int getBaudRateValue() { @@ -69,7 +69,7 @@ public SerialConfigBuilder setRTS(boolean b){ this.rts = b; return this; } - + @Override public boolean isDTR() { return dtr; @@ -78,4 +78,13 @@ public SerialConfigBuilder setDTR(boolean b){ this.dtr = b; return this; } + + @Override + public boolean isRS485() { + return rs485; + } + public SerialConfigBuilder setRS485(boolean isRS485) { + this.rs485 = isRS485; + return this; + } } diff --git a/jSerialComm/src/main/java/me/retrodaredevil/io/serial/JSerialIOBundle.java b/jSerialComm/src/main/java/me/retrodaredevil/io/serial/JSerialIOBundle.java index f4ff42c..14939ff 100644 --- a/jSerialComm/src/main/java/me/retrodaredevil/io/serial/JSerialIOBundle.java +++ b/jSerialComm/src/main/java/me/retrodaredevil/io/serial/JSerialIOBundle.java @@ -48,6 +48,10 @@ public JSerialIOBundle(SerialPort serialPort, SerialConfig serialConfig, Config } else { serialPort.clearDTR(); } + if (serialConfig.isRS485()) { + // note that it is necessary to call this after calling setComPortParameters + serialPort.setRs485ModeParameters(true, true, 10, 10); + } inputStream = requireNonNull(serialPort.getInputStream()); outputStream = requireNonNull(serialPort.getOutputStream()); } diff --git a/purejavacomm/src/main/java/me/retrodaredevil/io/serial/PureJavaCommIOBundle.java b/purejavacomm/src/main/java/me/retrodaredevil/io/serial/PureJavaCommIOBundle.java index f497482..0c07534 100644 --- a/purejavacomm/src/main/java/me/retrodaredevil/io/serial/PureJavaCommIOBundle.java +++ b/purejavacomm/src/main/java/me/retrodaredevil/io/serial/PureJavaCommIOBundle.java @@ -45,8 +45,11 @@ public static PureJavaCommIOBundle create(String port, SerialConfig serialConfig if (serialConfig.isDTR()) { serialPort.setDTR(true); } + if (serialConfig.isRS485()) { + throw new PureJavaIllegalStateException("RS485 not supported"); + } } catch (PureJavaIllegalStateException e) { - throw new SerialPortException("It's likely that RTS or DTR is not supported", e); + throw new SerialPortException("It's likely that RTS or DTR or RS485 is not supported", e); } try { return new PureJavaCommIOBundle(serialPort);