BakeoutController-Basic  0.1
A Controller for the Omicron vacuum chamber
RXTXPortDriver.java
1 package kernel.serial_ports;
2 
3 import gnu.io.CommPortIdentifier;
5 import org.slf4j.Logger;
6 import org.slf4j.LoggerFactory;
7 
8 import java.util.ArrayList;
9 import java.util.Enumeration;
10 import java.util.List;
11 import java.util.Vector;
12 
16 public class RXTXPortDriver implements PortDriver {
17  private static Logger log = LoggerFactory.getLogger(RXTXPortDriver.class);
18 
23  private final String applicationName;
24 
29  private final PortIdentifierGetter portWrapper;
30 
36  String applicationName, PortIdentifierGetter portWrapper
37  ){
38  this.applicationName = applicationName;
39  this.portWrapper = portWrapper;
40  }
41 
45  @Override public String getApplicationName(){
46  return this.applicationName;
47  }
48 
52  @Override public List<String> getSerialPortNames(){
53  Enumeration portIdentifiers = this.portWrapper.getPortIdentifiers();
54  List<CommPortIdentifier> identifierList = castPortIdentifiersToList(
55  portIdentifiers
56  );
57  List<CommPortIdentifier> serialPortList = filterForSerialPorts(
58  identifierList
59  );
60  return getPortNamesForList(serialPortList);
61  }
62 
69  @Override public SerialPort getPortByName(String portName) {
70  return new RXTXPortWrapper(portName);
71  }
72 
84  private static List<CommPortIdentifier> castPortIdentifiersToList(
85  Enumeration commPortIdentifiers
86  ){
87  List<CommPortIdentifier> portIdentifierList = new Vector<>();
88  CommPortIdentifier portIdentifier;
89 
90  while(commPortIdentifiers.hasMoreElements()){
91  portIdentifier = castToPortIdentifier(
92  commPortIdentifiers.nextElement()
93  );
94  portIdentifierList.add(portIdentifier);
95  }
96 
97  return portIdentifierList;
98  }
99 
106  private static CommPortIdentifier castToPortIdentifier(
107  Object portIdentifier){
108  return (CommPortIdentifier)(portIdentifier);
109  }
110 
119  private List<CommPortIdentifier> filterForSerialPorts(
120  List<CommPortIdentifier> identifierList){
121 
122  List<CommPortIdentifier> serialPorts = new ArrayList<>(
123  identifierList.size()
124  );
125 
126  for(CommPortIdentifier identifier: identifierList){
127  if(identifier.getPortType() == CommPortIdentifier.PORT_SERIAL){
128  writeLogEntryForSerialPort(identifier);
129  serialPorts.add(identifier);
130  }
131  }
132 
133  return serialPorts;
134  }
135 
141  private static List<String> getPortNamesForList(
142  List<CommPortIdentifier> portIdentifiers
143  ){
144  List<String> portNames = new ArrayList<>(portIdentifiers.size());
145 
146  for(CommPortIdentifier identifier: portIdentifiers){
147  portNames.add(identifier.getName());
148  }
149 
150  return portNames;
151  }
152 
160  private void writeLogEntryForSerialPort(CommPortIdentifier identifier){
161  log.info(
162  "Port identifier {} has been detected as a serial port",
163  identifier
164  );
165  }
166 }
SerialPort getPortByName(String portName)
RXTXPortDriver(String applicationName, PortIdentifierGetter portWrapper)
Git Repo