Galera montei uma classe que se conecta a uma porta serial envia um comando AT e fica aguardando a resposta, em seguida exibe a resposta e fecha a porta.
O problema é que mesmo fechando a porta e não dando nenhum erro no fechamento, ao tentar reabri-la a seguinte exception é mostrada. “javax.comm. Conexao owned byPortInUseException: Port currently owned by ConexaoCampo”
Ou seja parece que ela não foi fechada.
segue abaixo os codigos, se alguem tiver uma ideia do que pode ser, por favor me ajude.
Obrigado!
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package comandosat;
/**
*
* @author Shakall
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
SerialComm.setPorta("COM1:");
SerialComm.setTimeout(500);
SerialComm.setVelocidade(9600);
int cont = 0;
while (cont < 3) {
cont++;
System.out.println(cont);
System.out.println(SerialComm.getPosicaoGPS());
}
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package comandosat;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import javax.comm.CommPortIdentifier;
import javax.comm.SerialPort;
/**
*
* @author Shakall
*/
public class SerialComm {
private static String porta;
private static int timeout=1000;
private static int velocidade=9600;
private static CommPortIdentifier cp;
private static SerialPort serial;
private static InputStream entrada;
private static OutputStream saida;
private static Enumeration list;
public static int getTimeout() {
return timeout;
}
public static int getVelocidade() {
return velocidade;
}
public static void setTimeout(int timeout) {
SerialComm.timeout = timeout;
}
public static void setVelocidade(int velocidade) {
SerialComm.velocidade = velocidade;
}
private static void listarPortas() {
list = CommPortIdentifier.getPortIdentifiers();
}
public static void exibirPortas() {
if (list == null) {
listarPortas();
}
while (list.hasMoreElements()) {
System.out.println(((CommPortIdentifier) list.nextElement()).getName());
}
}
public static void setPorta(String comm) {
porta = comm;
}
public String getPorta() {
return porta;
}
public static String getPosicao(String porta) {
setPorta(porta);
return getPosicaoGPS();
}
public static String executarComando(String comando) {
if (porta != null) {
try {
ObterIdDaPorta();
AbrirPorta();
enviarComando(comando);
entrada = serial.getInputStream();
StringBuffer aux = new StringBuffer();
while (entrada.available() > 0) {
aux.append((char) entrada.read());
Thread.sleep(100);
}
FecharCom();
return aux.toString();
} catch (Exception ex) {
System.out.println("executarcomando");
ex.printStackTrace();
}
}
return null;
}
public static String getPosicaoGPS() {
return executarComando("AT_IGPS");
}
private static String AbrirPorta() {//abre a porta disponivel ou não
if (cp != null) {
try {
serial = (SerialPort) cp.open("ConexaoCampo", timeout);
serial.setSerialPortParams(velocidade, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
//serial.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
return "OK";
} catch (Exception ex) {
System.out.println("abrirporta");
ex.printStackTrace();
}
}
return "Erro ao criar porta";
}
private static void FecharCom() {//fechar porta
try {
if (entrada != null) {
entrada.close();
}
if (saida != null) {
saida.close();
}
if (serial != null) {
System.out.println("fechado");
serial.close();
}
} catch (Exception ex) {
System.out.println("fecharcomm");
ex.printStackTrace();
}
}
private static String enviarComando(String comando) {//envia um comando para a porta
if (comando.indexOf("\r") < 0) {
comando = comando + "\r";
}
try {
saida = serial.getOutputStream();
saida.write(comando.getBytes());
Thread.sleep(100);
return "Envio ok";
} catch (Exception ex) {
System.out.println("enviarcomando");
ex.printStackTrace();
}
return "Não enviado, verifique a porta";
}
private static String ObterIdDaPorta() {//pega a porta especificada no construtor
try {
if (cp == null) {
cp = CommPortIdentifier.getPortIdentifier(porta);
if (cp == null) {
return "erro ao obter porta";
}
}
} catch (Exception ex) {
System.out.println("obterid");
ex.printStackTrace();
}
return "ok";
}
}