Package com.mattibal.meshnet

Source Code of com.mattibal.meshnet.SerialRXTXComm$SerialReceiver

package com.mattibal.meshnet;

import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.UnsupportedCommOperationException;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.TooManyListenersException;

/**
* This version of the TwoWaySerialComm example makes use of the
* SerialPortEventListener to avoid polling.
*
*/
public class SerialRXTXComm{
 
  public static final int TIME_OUT = 2000;
 
  protected InputStream inStream;
  protected OutputStream outStream;
 
  private byte[] readBuffer = new byte[1024];
 
  protected Layer2Serial layer2;
 
 
  public SerialRXTXComm(String portName, Layer3Base layer3) throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException, IOException, TooManyListenersException{
   
    CommPortIdentifier portIdentifier = CommPortIdentifier
        .getPortIdentifier(portName);
    if (portIdentifier.isCurrentlyOwned()) {
      throw new IOException("Port is currently in use");
    } else {
      CommPort commPort = portIdentifier.open(this.getClass().getName(),
          TIME_OUT);

      if (commPort instanceof SerialPort) {
        SerialPort serialPort = (SerialPort) commPort;
        serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8,
            SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);

        inStream = serialPort.getInputStream();
        outStream = serialPort.getOutputStream();

        new SerialReceiver().start();

        /*serialPort.addEventListener(this);
        serialPort.notifyOnDataAvailable(true);*/

      } else {
        throw new IOException("This is not a serial port!.");
      }
    }
   
    this.layer2 = new Layer2Serial(this, layer3);
  }

 
 
  public class SerialReceiver extends Thread {
    @Override
    public void run() {
      super.run();
      int len = -1;
      try{
        while((len=inStream.read(readBuffer))>-1){
          //System.out.println("rx: "+(new String(readBuffer, 0, len)));
          for(int i=0; i<len; i++){
            layer2.onSerialByteReceived(readBuffer[i]);
          }
        }
      }catch(IOException e){
        e.printStackTrace();
      }
    }
  }
 
 
  /**
   * Send via serial port the byte contained in the int parameter
   * @throws IOException
   */
  public void transmitByte(byte data) throws IOException{
    outStream.write(data);
    //System.out.print(" tx:"+(int)data);
  }
 

}
TOP

Related Classes of com.mattibal.meshnet.SerialRXTXComm$SerialReceiver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.