Hallo zusammen 
Momentan bin ich dabei unter Verwendung von RXTX (RXTX: The Prescription for Transmission) über COM-Ports Hex-Messages zu senden und zu empfangen.
Hierbei wandle ich das Empfangene in Strings um, mappe diese, und sende entsprechend etwas auf einem beliebigem Port wieder raus.
Hierbei habe ich un mir wirklich total unbegreifliches Problem...
Und zwar liest mir das Programm immer anstatt das gesendete und auch rein physikalisch empfangene Byte "80" die zwei Bytes "20AC" ein.
Ich habe diesen Fehler auf alle Hex-Bytes eingrenzen können von "80" bis "9F". Alles dazischen wird falsch - d.h. als zwei falsche Bytes - aus dem Puffer ausgelesen, alles außerhalb richtig.
Rein Code-Technisch habe ich den Fehler auf den den
zurückführen können. Lese ich diesen aus, so bekomme ich hier bereits die falschen Werte.
Für mich würde das eigentlich bedeuten, dass ich nichts von meiner Logik her falsch gemacht habe, sondern wenn dann nur bei der Verwendung des BufferedReader.
Ich konnte auch nach längerem hin- und her-shiften der einzelnen Bits und Anwendung diversester Rechenmethoden mit Bits und Bytes keine Verbindung zwischen dem eigentlich zu empfangendem und dem falschen, real empfangenem Byte(s) feststellen können.
Ich hoffe ihr könnt mir bei meinem Problem weiterhelfen!
Hier noch der relevante Source-Code:
Momentan bin ich dabei unter Verwendung von RXTX (RXTX: The Prescription for Transmission) über COM-Ports Hex-Messages zu senden und zu empfangen.
Hierbei wandle ich das Empfangene in Strings um, mappe diese, und sende entsprechend etwas auf einem beliebigem Port wieder raus.
Hierbei habe ich un mir wirklich total unbegreifliches Problem...
Und zwar liest mir das Programm immer anstatt das gesendete und auch rein physikalisch empfangene Byte "80" die zwei Bytes "20AC" ein.
Ich habe diesen Fehler auf alle Hex-Bytes eingrenzen können von "80" bis "9F". Alles dazischen wird falsch - d.h. als zwei falsche Bytes - aus dem Puffer ausgelesen, alles außerhalb richtig.
Rein Code-Technisch habe ich den Fehler auf den den
Java:
BufferedReader(new InputStreamReader(in))
Für mich würde das eigentlich bedeuten, dass ich nichts von meiner Logik her falsch gemacht habe, sondern wenn dann nur bei der Verwendung des BufferedReader.
Ich konnte auch nach längerem hin- und her-shiften der einzelnen Bits und Anwendung diversester Rechenmethoden mit Bits und Bytes keine Verbindung zwischen dem eigentlich zu empfangendem und dem falschen, real empfangenem Byte(s) feststellen können.
Ich hoffe ihr könnt mir bei meinem Problem weiterhelfen!
Hier noch der relevante Source-Code:
Java:
Reader buf;
ITransferable comManager = ComManager.getInstance();
public SerialReader(InputStream in) {
buf = new BufferedReader(new InputStreamReader(in));
}
public void run() {
// nothing
}
@Override
public void serialEvent(SerialPortEvent event) {
String eventSource;
switch (event.getEventType()) {
case SerialPortEvent.DATA_AVAILABLE:
try {
// Kurz warten, damit alle Daten in den Puffer wandern, bevor er ausgelesen
// werden soll.
Thread.sleep(SleepTime.getTime());
} catch (InterruptedException e) {
System.out.println(e);
}
eventSource = event.getSource().toString();
handleStreamBuffered(cutEventSource(eventSource));
break;
default:
break;
}
}
private String cutEventSource(String eventSource) {
int indexOfCharacterC = eventSource.indexOf("C");
return eventSource.substring(indexOfCharacterC, eventSource.length());
}
private void handleStreamBuffered(String eventSource) {
int temp;
try {
StringBuilder builder = new StringBuilder();
while (buf.ready()) {
temp = buf.read();
// System.out.println("Empfangener Wert als int: " + temp);
String character = Integer.toHexString(temp);
character = character.toUpperCase();
if (character.length() == 1) {
// Wir wollen die Daten immer zweistellig sehen.
character = "0" + character;
}
builder.append(character);
builder.append(" ");
}
// System.out.println("SerialReader.builder: " + builder.toString());
RecievedData.getInstance().addText(builder.toString(), eventSource);
// replyNeeded(builder.toString());
builder = new StringBuilder();
} catch (IOException e) {
System.out.println(e);
}
}
[/Java]
Danke! :-)
Mit freundlichen Grüßen,
Julian R.