packagecom.ims.interfaces.commPort;importgnu.io.CommPortIdentifier;importgnu.io.SerialPort;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.io.OutputStreamWriter;importjava.util.Enumeration;public classCommPortManager {/*** 串口定义*/
privateCommPort commPort;/*** 串口对象*/
privateSerialPort serialPort;/*** 字节输入*/
privateInputStream in;/*** 字节输出*/
privateOutputStream out;/*** 字符输入*/
privateBufferedReader bufReader;/*** 字符输出*/
privateBufferedWriter bufWriter;/*** 数据输入*/
privateDataInputStream dataIn;/*** 数据输出*/
privateDataOutputStream dataOut;/*** 串口是否在使用*/
private booleanisUse;publicCommPortManager(CommPort commPort){this.commPort =commPort;
}/*** 打开串口
*@throwsException*/
public void open() throwsException{
CommPortIdentifier commPortId=CommPortIdentifier.getPortIdentifier(commPort.getCommPortName());//第一个参数:通常设置为你的应用程序的名字;第二个参数:开启端口超时的毫秒数
serialPort = (SerialPort)commPortId.open(commPort.getOwnerName(), 5000);
serialPort.setOutputBufferSize(2048);
in=serialPort.getInputStream();
out=serialPort.getOutputStream();
bufReader= new BufferedReader(new InputStreamReader(in, "Unicode"));
bufWriter= new BufferedWriter(newOutputStreamWriter(out));
dataIn= newDataInputStream(in);
dataOut= newDataOutputStream(out);//设置串口参数
serialPort.setSerialPortParams(Integer.valueOf(commPort.getBaudRate()), Integer.valueOf(commPort.getDataBit()),
Integer.valueOf(commPort.getStopBit()), Integer.valueOf(commPort.getPartityBit()));
}/*** 判断串口是否可用*/
public booleancommPortEnable(){boolean result = false;
Enumeration en=CommPortIdentifier.getPortIdentifiers();while(en.hasMoreElements()) {
CommPortIdentifier portId=(CommPortIdentifier) en.nextElement();if (portId.getPortType() ==CommPortIdentifier.PORT_SERIAL&&portId.getName().equalsIgnoreCase(commPort.getCommPortName())) {
result= true;
}
}returnresult;
}/*** 设置串口接收超时时间
*@paramtimeout 超时时间,单位秒
*@throwsException*/
public void setReceiveTimeout(int timeout) throwsException{
getSerialPort().enableReceiveTimeout(timeout*1000);
}publicCommPort getCommPort() {returncommPort;
}publicSerialPort getSerialPort() {returnserialPort;
}publicInputStream getIn() {returnin;
}publicOutputStream getOut() {returnout;
}publicBufferedReader getBufReader() {returnbufReader;
}publicBufferedWriter getBufWriter() {returnbufWriter;
}publicDataInputStream getDataIn() {returndataIn;
}publicDataOutputStream getDataOut() {returndataOut;
}public booleanisUse() {returnisUse;
}public void setUse(booleanisUse) {this.isUse =isUse;
}
}