Fala pessoal, tudo bem? Tô tentando converter um código C# pra Java e to com alguns problemas…
Eu tô tentando ler uma porta serial,
private InputStream inputStream;
private OutputStream outputStream;
outputStream = serialPort.getOutputStream();
inputStream = serialPort.getInputStream();
Pra enviar os dados, está indo certinho, o problema está na hora de ler mesmo.
No C#, eu tenho um método de recepção:
public void recepcaoResposta(int tam, byte[] frameHex)
{
byte[] l_frameHex = new byte[2000];
byte[] frameEvt = new byte[16];
string linha, linhaTipo;
// !! Copia vetor-parâmetro para vetor-local (evita exception nos "if's"
//caso apenas 1 byte recebido) !!
Buffer.BlockCopy(frameHex, 0, l_frameHex, 0, tam);
.....
}
Convertendo pro Java fica:
public void recepcaoResposta(int tam, byte[] frameHex) {
byte[] l_frameHex = new byte[2000];
byte[] frameEvt = new byte[16];
String linha, linhaTipo;
// !! Copia vetor-parâmetro para vetor-local (evita exception nos "if's"
//caso apenas 1 byte recebido) !!
System.arraycopy(frameHex, 0, l_frameHex, 0, tam);
...
}
Até aí ok, o problema está na hora de receber o tam, que é o tamanho do array. No java eu tenho o retorno de tamanho 8, independente do que eu faça, vem o 8.
Até tentei mudar os ifs que tem um número “aleátório” de tamanho pra 8. MAS obviamente eu obtive erros:
Código original:
//**********************************************************
//4 - Envio automático de evento
//**********************************************************
if ( (l_frameHex[1] == 0x04) && (tam == 20) )
{
....
}
Enfim, estou recebendo os dados do serial assim:
@Override
public void serialEvent(SerialPortEvent event) {
switch (event.getEventType()) {
case SerialPortEvent.DATA_AVAILABLE:
try {
while (inputStream.available() > 0) {
// int t = inputStream.read();
int t = serialPort.getDataBits();
byte[] f = new byte[t];
inputStream.read(f, 0, t); // Frame de bytes
recepcaoResposta(t, f);
}
} catch (IOException e) {
System.out.println("IO Exception in SerialEvent()" + e);
}
break;
}
}
Mas como foi dito, só tenho o retorno de tamanho 8, que nesse código acima é o
int t = serialPort.getDataBits();