SerialPortOperaion.java 2.89 KB
package com.hdx.lib.serial;

import android.os.Handler;
import android.os.Message;
import android_serialport_api.SerialPort;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class SerialPortOperaion
{
  public static final int SERIAL_RECEIVED_DATA_MSG = 1;
  private static final String TAG = "SerialPortOperaion";
  private Handler mHandler;
  private SerialParam mSerialParam;
  private SerialPort mSerialPort;
  private OutputStream mOutputStream = null;
  private InputStream mInputStream = null;
  private ReadThread mReadThread;

  public SerialPortOperaion(Handler callback, SerialParam param)
  {
    this.mHandler = callback;
    this.mSerialParam = param;
  }

  public void StartSerial() throws IOException
  {
    this.mSerialPort = new SerialPort(this.mSerialParam.device, this.mSerialParam.baudrate, this.mSerialParam.openFlag);
    this.mOutputStream = this.mSerialPort.getOutputStream();
    this.mInputStream = this.mSerialPort.getInputStream();
    this.mReadThread = new ReadThread();
    this.mReadThread.start();
  }

  public void StopSerial() {
    try {
      if(this.mInputStream!=null){
    	  this.mInputStream.close();
      }
      if(this.mOutputStream!=null){
    	  this.mOutputStream.close();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    this.mInputStream = null;
    this.mOutputStream = null;
    this.mSerialPort.close();
    try {
      this.mReadThread.join(5000L);
    } catch (InterruptedException localInterruptedException) {
    }
  }

  public void WriteData(int[] data) {
    try {
      for (int i = 0; i < data.length; i++)
        this.mOutputStream.write(data[i]);
    }
    catch (IOException e) {
      e.printStackTrace();
    }
  }

  public void WriteData(byte[] data) {
    try {
      this.mOutputStream.write(data);
    }
    catch (IOException e) {
      e.printStackTrace();
    }
  }
  class ReadThread extends Thread {
    ReadThread() {
    }

    public void run() { super.run();
      while (!isInterrupted())
        try
        {
          byte[] buffer = new byte[1024];
          if (SerialPortOperaion.this.mInputStream == null) return;
          int size = SerialPortOperaion.this.mInputStream.read(buffer);
          if ((size > 0) && (SerialPortOperaion.this.mHandler != null))
          {
            Message msg = SerialPortOperaion.this.mHandler.obtainMessage(1, new SerialReadData(SerialPortOperaion.this, buffer, size));
            SerialPortOperaion.this.mHandler.sendMessage(msg);
          }
        } catch (IOException e) {
          e.printStackTrace();
          return;
        } }
  }

  public class SerialReadData
  {
    public byte[] data;
    public int size;

    SerialReadData(byte[] buf, int n) {
      this.data = buf;
      this.size = n;
    }
   
    SerialReadData(SerialPortOperaion paramSerialPortOperaion, byte[] buf, int n)
    {
      this.data = buf;
      this.size = n;
    }
  }
}