/fishlamp.application/src/fishlamp/application/rs232/FishlampComm.java
http://github.com/gbalage/fishlamptimer · Java · 89 lines · 65 code · 16 blank · 8 comment · 3 complexity · 2061dd08414e163b50b9cd3350cfddc1 MD5 · raw file
- /**
- *
- */
- package fishlamp.application.rs232;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.util.HashSet;
- import java.util.Set;
- import java.util.TooManyListenersException;
- import fishlamp.application.protocol.IFrame;
- import fishlamp.application.protocol.IFrameListener;
- import fishlamp.application.protocol.IFrameParser;
- import fishlamp.application.protocol.IFrameParserFactory;
- import fishlamp.application.protocol.InputStreamParser;
- import gnu.io.CommPort;
- import gnu.io.CommPortIdentifier;
- import gnu.io.NoSuchPortException;
- import gnu.io.PortInUseException;
- import gnu.io.SerialPort;
- import gnu.io.UnsupportedCommOperationException;
- /**
- * @author balage
- *
- */
- public class FishlampComm implements IFrameParserFactory{
- private OutputStream out;
- private final Set<IFrameListener> listeners = new HashSet<IFrameListener>();
-
- public void addListener(IFrameListener listener){
- listeners.add(listener);
- }
-
- public FishlampComm(String port) throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException, IOException, TooManyListenersException {
- CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(port);
- CommPort commPort = portIdentifier.open(this.getClass().getName(),2000);
-
- if ( commPort instanceof SerialPort )
- {
- SerialPort serialPort = (SerialPort) commPort;
- serialPort.setSerialPortParams(
- 9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
-
- final InputStream in = serialPort.getInputStream();
- out = serialPort.getOutputStream();
-
- InputStreamParser parser = new InputStreamParser(this, in);
- parser.addListener(new IFrameListener() {
-
- @Override
- public void frameArrived(Object frame) {
- //System.out.println("Frame: "+frame);
- for(IFrameListener fl : listeners){
- fl.frameArrived(frame);
- }
- }
- });
- Thread t = new Thread(parser);
- t.setDaemon(true);
- t.start();
- }
- else
- {
-
- }
- }
- public synchronized void sendFrame(IFrame frame) throws IOException{
- short[] data = frame.toBytes();
- for(short d : data){
- out.write(d);
- }
- }
-
- @Override
- public IFrameParser<?> startParsing(short firstbyte) {
- switch(firstbyte){
- case 0xFF: return new TimeFrameParser();
- }
- return null;
- }
-
- }