Skip to content

Commit

Permalink
Added RS485 option
Browse files Browse the repository at this point in the history
  • Loading branch information
retrodaredevil committed Jun 18, 2021
1 parent 76e6836 commit cc13e29
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 19 deletions.
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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() {
Expand Down Expand Up @@ -69,7 +69,7 @@ public SerialConfigBuilder setRTS(boolean b){
this.rts = b;
return this;
}

@Override
public boolean isDTR() {
return dtr;
Expand All @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit cc13e29

Please sign in to comment.