package android_serialport_api;
|
|
import com.doumee.keyCabinet.utils.usb.DevComm;
|
import java.io.File;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.io.OutputStream;
|
import java.security.InvalidParameterException;
|
|
|
public abstract class SerialHelper{
|
private SerialPort mSerialPort;
|
private OutputStream mOutputStream;
|
private InputStream mInputStream;
|
private ReadThread mReadThread;
|
private SendThread mSendThread;
|
private String sPort="/dev/s3c2410_serial0";
|
private int iBaudRate=9600;
|
private boolean _isOpen=false;
|
private byte[] _bLoopData=new byte[]{0x30};
|
private int iDelay=500;
|
//----------------------------------------------------
|
public SerialHelper(String sPort,int iBaudRate){
|
this.sPort = sPort;
|
this.iBaudRate=iBaudRate;
|
}
|
public SerialHelper(){
|
this("/dev/s3c2410_serial0",9600);
|
}
|
public SerialHelper(String sPort){
|
this(sPort,9600);
|
}
|
public SerialHelper(String sPort,String sBaudRate){
|
this(sPort,Integer.parseInt(sBaudRate));
|
}
|
//----------------------------------------------------
|
public void open() throws SecurityException, IOException,InvalidParameterException{
|
mSerialPort = new SerialPort(new File(sPort), iBaudRate, 0);
|
mOutputStream = mSerialPort.getOutputStream();
|
mInputStream = mSerialPort.getInputStream();
|
mReadThread = new ReadThread();
|
mReadThread.start();
|
mSendThread = new SendThread();
|
mSendThread.setSuspendFlag();
|
mSendThread.start();
|
_isOpen=true;
|
}
|
//----------------------------------------------------
|
public void close(){
|
if (mReadThread != null)
|
mReadThread.interrupt();
|
if (mSerialPort != null) {
|
mSerialPort.close();
|
mSerialPort = null;
|
}
|
_isOpen=false;
|
}
|
//----------------------------------------------------
|
public void send(byte[] bOutArray, int nSize){
|
try
|
{
|
mOutputStream.write(bOutArray, 0, nSize);
|
} catch (IOException e)
|
{
|
e.printStackTrace();
|
}
|
}
|
//----------------------------------------------------
|
public void sendTxt(String sTxt){
|
byte[] bOutArray =sTxt.getBytes();
|
send(bOutArray, sTxt.length());
|
}
|
//----------------------------------------------------
|
private class ReadThread extends Thread {
|
@Override
|
public void run() {
|
super.run();
|
while(!isInterrupted()) {
|
try
|
{
|
if (mInputStream == null) return;
|
byte[] buffer=new byte[DevComm.MAX_DATA_LEN];
|
int size = mInputStream.read(buffer);
|
if (size > 0){
|
ComBean ComRecData = new ComBean(sPort,buffer,size);
|
onDataReceived(ComRecData);
|
}
|
try
|
{
|
Thread.sleep(50);
|
} catch (InterruptedException e)
|
{
|
e.printStackTrace();
|
}
|
} catch (Throwable e)
|
{
|
e.printStackTrace();
|
return;
|
}
|
}
|
}
|
}
|
//----------------------------------------------------
|
private class SendThread extends Thread{
|
public boolean suspendFlag = true;
|
@Override
|
public void run() {
|
super.run();
|
while(!isInterrupted()) {
|
synchronized (this)
|
{
|
while (suspendFlag)
|
{
|
try
|
{
|
wait();
|
} catch (InterruptedException e)
|
{
|
e.printStackTrace();
|
}
|
}
|
}
|
send(getbLoopData(), 1);
|
try
|
{
|
Thread.sleep(iDelay);
|
} catch (InterruptedException e)
|
{
|
e.printStackTrace();
|
}
|
}
|
}
|
|
public void setSuspendFlag() {
|
this.suspendFlag = true;
|
}
|
|
public synchronized void setResume() {
|
this.suspendFlag = false;
|
notify();
|
}
|
}
|
//----------------------------------------------------
|
public int getBaudRate()
|
{
|
return iBaudRate;
|
}
|
public boolean setBaudRate(int iBaud)
|
{
|
if (_isOpen)
|
{
|
return false;
|
} else
|
{
|
iBaudRate = iBaud;
|
return true;
|
}
|
}
|
public boolean setBaudRate(String sBaud)
|
{
|
int iBaud = Integer.parseInt(sBaud);
|
return setBaudRate(iBaud);
|
}
|
//----------------------------------------------------
|
public String getPort()
|
{
|
return sPort;
|
}
|
public boolean setPort(String sPort)
|
{
|
if (_isOpen)
|
{
|
return false;
|
} else
|
{
|
this.sPort = sPort;
|
return true;
|
}
|
}
|
//----------------------------------------------------
|
public boolean isOpen()
|
{
|
return _isOpen;
|
}
|
//----------------------------------------------------
|
public byte[] getbLoopData()
|
{
|
return _bLoopData;
|
}
|
//----------------------------------------------------
|
public void setbLoopData(byte[] bLoopData)
|
{
|
this._bLoopData = bLoopData;
|
}
|
//----------------------------------------------------
|
public void setTxtLoopData(String sTxt){
|
this._bLoopData = sTxt.getBytes();
|
}
|
//----------------------------------------------------
|
public int getiDelay()
|
{
|
return iDelay;
|
}
|
//----------------------------------------------------
|
public void setiDelay(int iDelay)
|
{
|
this.iDelay = iDelay;
|
}
|
//----------------------------------------------------
|
public void startSend()
|
{
|
if (mSendThread != null)
|
{
|
mSendThread.setResume();
|
}
|
}
|
//----------------------------------------------------
|
public void stopSend()
|
{
|
if (mSendThread != null)
|
{
|
mSendThread.setSuspendFlag();
|
}
|
}
|
//----------------------------------------------------
|
protected abstract void onDataReceived(ComBean ComRecData);
|
}
|