Closed GoogleCodeExporter closed 9 years ago
By default jSSC use TIOCEXCL for exclusive access to serial port resource, in
this case you can't open same port twice (except root, or you can disable
TIOCEXCL by setting JSSC_NO_TIOCEXCL JVM property). But it's really bad
practice, you can not get the same data from one serial port by using 2 new
SerialPort objects. If one object read data from serial port buffer readed data
is purged from buffer.
You should create some serial port provider for reading data, and providing it
to any ViewPart you need.
Original comment by scream3r.org@gmail.com
on 30 Aug 2013 at 4:49
Hi Alexey,
Thanks for confirming that. Below is the initial draft of the potential
provider that it might help others with similar case scenario.
Thanks again for such wonderful API!
----------------------------------
import java.util.ArrayList;
import java.util.List;
import jssc.SerialPort;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;
public class SerialConnectionProvider {
private static final SerialConnectionProvider INSTANCE = new SerialConnectionProvider();
private static List<SerialPortEventListener> consumerListeners;
private static SerialPort serialPort;
private SerialConnectionProvider() {
consumerListeners = new ArrayList<SerialPortEventListener>();
}
public static SerialConnectionProvider getInstance(String port, SerialPortEventListener consumerListener) throws SerialPortException {
if (serialPort == null) {
serialPort = new SerialPort(port);
serialPort.openPort();
serialPort.setParams(SerialPort.BAUDRATE_9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
serialPort.setEventsMask(SerialPort.MASK_RXCHAR);
serialPort.addEventListener(new SerialPortListener());
}
consumerListeners.add(consumerListener);
return SerialConnectionProvider.INSTANCE;
}
static class SerialPortListener implements SerialPortEventListener {
public void serialEvent(SerialPortEvent event) {
if (event.isRXCHAR() && event.getEventValue() > 10) {
for (SerialPortEventListener listener : consumerListeners) {
listener.serialEvent(event);
}
}
}
}
public synchronized boolean disconnect(SerialPortEventListener listener) throws SerialPortException {
boolean result = true;
if (serialPort.isOpened() && consumerListeners.size() == 1) {
result = serialPort.closePort();
}
consumerListeners.remove(listener);
return result;
}
public SerialPort getSerialPort() {
return serialPort;
}
}
Original comment by cagiva...@gmail.com
on 30 Aug 2013 at 5:18
Original comment by scream3r.org@gmail.com
on 12 Sep 2014 at 2:31
Original issue reported on code.google.com by
cagiva...@gmail.com
on 30 Aug 2013 at 1:20