/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

  1. /**
  2. *
  3. */
  4. package fishlamp.application.rs232;
  5. import java.io.IOException;
  6. import java.io.InputStream;
  7. import java.io.OutputStream;
  8. import java.util.HashSet;
  9. import java.util.Set;
  10. import java.util.TooManyListenersException;
  11. import fishlamp.application.protocol.IFrame;
  12. import fishlamp.application.protocol.IFrameListener;
  13. import fishlamp.application.protocol.IFrameParser;
  14. import fishlamp.application.protocol.IFrameParserFactory;
  15. import fishlamp.application.protocol.InputStreamParser;
  16. import gnu.io.CommPort;
  17. import gnu.io.CommPortIdentifier;
  18. import gnu.io.NoSuchPortException;
  19. import gnu.io.PortInUseException;
  20. import gnu.io.SerialPort;
  21. import gnu.io.UnsupportedCommOperationException;
  22. /**
  23. * @author balage
  24. *
  25. */
  26. public class FishlampComm implements IFrameParserFactory{
  27. private OutputStream out;
  28. private final Set<IFrameListener> listeners = new HashSet<IFrameListener>();
  29. public void addListener(IFrameListener listener){
  30. listeners.add(listener);
  31. }
  32. public FishlampComm(String port) throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException, IOException, TooManyListenersException {
  33. CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(port);
  34. CommPort commPort = portIdentifier.open(this.getClass().getName(),2000);
  35. if ( commPort instanceof SerialPort )
  36. {
  37. SerialPort serialPort = (SerialPort) commPort;
  38. serialPort.setSerialPortParams(
  39. 9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
  40. final InputStream in = serialPort.getInputStream();
  41. out = serialPort.getOutputStream();
  42. InputStreamParser parser = new InputStreamParser(this, in);
  43. parser.addListener(new IFrameListener() {
  44. @Override
  45. public void frameArrived(Object frame) {
  46. //System.out.println("Frame: "+frame);
  47. for(IFrameListener fl : listeners){
  48. fl.frameArrived(frame);
  49. }
  50. }
  51. });
  52. Thread t = new Thread(parser);
  53. t.setDaemon(true);
  54. t.start();
  55. }
  56. else
  57. {
  58. }
  59. }
  60. public synchronized void sendFrame(IFrame frame) throws IOException{
  61. short[] data = frame.toBytes();
  62. for(short d : data){
  63. out.write(d);
  64. }
  65. }
  66. @Override
  67. public IFrameParser<?> startParsing(short firstbyte) {
  68. switch(firstbyte){
  69. case 0xFF: return new TimeFrameParser();
  70. }
  71. return null;
  72. }
  73. }