Hallo zusammen ich habe da eine Verbindung zu Rs232 aufegbaut und kann Daten auch empfangen. Nur sollte nach jeder EOT meldung eine ACK versendet werden damit neue Daten kommen. So hab ich den Code geschrieben. Funktioniert nicht bekomme nur eine Zeile Daten und nicht weiter. Kann mir jemand da helfen?
byte[] newData = new byte[comPort.bytesAvailable()];
int numRead = comPort.readBytes(newData, newData.length);
//Liest wie viele Byte verfügbar sind
System.out.println("Read " + numRead + " bytes.");
if (newData[0] == 2 && newData.length == 85 && newData[83] == 3) {
//start der messung wird mit STX deklariert
System.out.println("STX detected");
// FIXME: ack
byte [] ack = new byte[1];
ack[0]=6;
ByteArrayOutputStream serial = new ByteArrayOutputStream(1);
serial.writeBytes(ack);
System.out.println("send ACK");
procesingData(newData);
//testen ob es funktioniert
}
else if (newData[0] == 4) {
//Ende der Nachricht wird mit EOT deklariert
System.out.println("EOT detected");
//Sollte nach jedem EOT eine ACK senden
byte [] ack = new byte[1];
ack[0]=6;
ByteArrayOutputStream serial = new ByteArrayOutputStream(1);
serial.writeBytes(ack);
System.out.println("send ACK");
// FIXME: ack
} else {
//ansonsten ungültige Daten
System.out.println("invalid data");
}
}
@Override
public int getListeningEvents() {
return SerialPort.LISTENING_EVENT_DATA_AVAILABLE;
}
});
}
byte[] newData = new byte[comPort.bytesAvailable()];
int numRead = comPort.readBytes(newData, newData.length);
//Liest wie viele Byte verfügbar sind
System.out.println("Read " + numRead + " bytes.");
if (newData[0] == 2 && newData.length == 85 && newData[83] == 3) {
//start der messung wird mit STX deklariert
System.out.println("STX detected");
// FIXME: ack
byte [] ack = new byte[1];
ack[0]=6;
ByteArrayOutputStream serial = new ByteArrayOutputStream(1);
serial.writeBytes(ack);
System.out.println("send ACK");
procesingData(newData);
//testen ob es funktioniert
}
else if (newData[0] == 4) {
//Ende der Nachricht wird mit EOT deklariert
System.out.println("EOT detected");
//Sollte nach jedem EOT eine ACK senden
byte [] ack = new byte[1];
ack[0]=6;
ByteArrayOutputStream serial = new ByteArrayOutputStream(1);
serial.writeBytes(ack);
System.out.println("send ACK");
// FIXME: ack
} else {
//ansonsten ungültige Daten
System.out.println("invalid data");
}
}
@Override
public int getListeningEvents() {
return SerialPort.LISTENING_EVENT_DATA_AVAILABLE;
}
});
}