public String openPort(String portName, String appName) { // open the port, check ability to set moderators try { // get and open the primary port CommPortIdentifier portID = CommPortIdentifier.getPortIdentifier(portName); try { activeSerialPort = (SerialPort) portID.open(appName, 2000); // name of program, msec to wait } catch (PortInUseException p) { return handlePortBusy(p, portName, log); } // try to set it for communication via SerialDriver try { activeSerialPort.setSerialPortParams( 9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (gnu.io.UnsupportedCommOperationException e) { log.error("Cannot set serial parameters on port " + portName + ": " + e.getMessage()); return "Cannot set serial parameters on port " + portName + ": " + e.getMessage(); } // set RTS high, DTR high activeSerialPort.setRTS(true); // not connected in some serial ports and adapters activeSerialPort.setDTR(true); // pin 1 in DIN8; on main connector, this is DTR // disable flow control; hardware lines used for signaling, XON/XOFF might appear in data activeSerialPort.setFlowControlMode(0); activeSerialPort.enableReceiveTimeout(50); // 50 mSec timeout before sending chars // set timeout // activeSerialPort.enableReceiveTimeout(1000); log.debug( "Serial timeout was observed as: " + activeSerialPort.getReceiveTimeout() + " " + activeSerialPort.isReceiveTimeoutEnabled()); // get and save stream serialStream = activeSerialPort.getInputStream(); // purge contents, if any purgeStream(serialStream); // report status if (log.isInfoEnabled()) { log.info( "Wangrow " + portName + " port opened at " + activeSerialPort.getBaudRate() + " baud"); } opened = true; } catch (gnu.io.NoSuchPortException p) { return handlePortNotFound(p, portName, log); } catch (Exception ex) { log.error("Unexpected exception while opening port " + portName + " trace follows: " + ex); ex.printStackTrace(); return "Unexpected error while opening port " + portName + ": " + ex; } return null; // indicates OK return }
public synchronized String openPort(String portName, String appName) { // open the port, check ability to set moderators try { // get and open the primary port CommPortIdentifier portID = CommPortIdentifier.getPortIdentifier(portName); try { activeSerialPort = (SerialPort) portID.open(appName, 2000); // name of program, msec to wait } catch (PortInUseException p) { handlePortBusy(p, portName); return "Port " + p + " in use already"; } // try to set it for communication via SerialDriver try { // Doc says 7 bits, but 8 seems needed activeSerialPort.setSerialPortParams( 38400, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); } catch (gnu.io.UnsupportedCommOperationException e) { log.error("Cannot set serial parameters on port " + portName + ": " + e.getMessage()); return "Cannot set serial parameters on port " + portName + ": " + e.getMessage(); } // set RTS high, DTR high activeSerialPort.setRTS(true); // not connected in some serial ports and adapters activeSerialPort.setDTR(true); // pin 1 in DIN8; on main connector, this is DTR // disable flow control; hardware lines used for signaling, XON/XOFF might appear in data activeSerialPort.setFlowControlMode(0); // set timeout log.debug( "Serial timeout was observed as: " + activeSerialPort.getReceiveTimeout() + " " + activeSerialPort.isReceiveTimeoutEnabled()); // get and save stream serialStream = new DataInputStream(activeSerialPort.getInputStream()); ostream = activeSerialPort.getOutputStream(); // make less verbose sendBytes(new byte[] {(byte) 'L', (byte) '-', 10, 13}); // purge contents, if any int count = serialStream.available(); log.debug("input stream shows " + count + " bytes available"); while (count > 0) { serialStream.skip(count); count = serialStream.available(); } // report status? if (log.isInfoEnabled()) { log.info( portName + " port opened at " + activeSerialPort.getBaudRate() + " baud, sees " + " DTR: " + activeSerialPort.isDTR() + " RTS: " + activeSerialPort.isRTS() + " DSR: " + activeSerialPort.isDSR() + " CTS: " + activeSerialPort.isCTS() + " CD: " + activeSerialPort.isCD()); } } catch (java.io.IOException ex) { log.error("IO error while opening port " + portName, ex); return "IO error while opening port " + portName + ": " + ex; } catch (gnu.io.UnsupportedCommOperationException ex) { log.error("Unsupported communications operation while opening port " + portName, ex); return "Unsupported communications operation while opening port " + portName + ": " + ex; } catch (gnu.io.NoSuchPortException ex) { log.error("No such port: " + portName, ex); return "No such port: " + portName + ": " + ex; } return null; // indicates OK return }