Hey Leute, ich habe folgendes Problem: Ich greife per Java mit einem FileWriter auf /dev/ttyAMA0 zu. Nun rufe ich die .write() Methode auf und übergebe ihr z.B. 112, so funktioniert alles normal. Wenn ich nun 255 übergebe, kommen 2 Bytes an, nämlich 195 und 191. Hab es dann mit 127 und 128 probiert, also wenn in Java das Byte zu Ende geht. Und so ist es, bei 127 sendet er 1 Byte, bei 128 wieder 2, nämlich 194 und 128. Bevor ich den Raspberry neu installiert habe ging alles problemlos.. Verwendet wird Raspbian Wheezy. Woran kann das liegen, was müsste ich da umstellen?
Donni Donis schrieb: > Woran kann das liegen, was müsste ich da umstellen? sieht mir nach einen Zeichensatz Problem aus. Kann sein das Java es als Unicode senden will?
Sowas hab ich mir auch gedacht.. Die Frage ist wo ich soetwas umstellen kann?
Du solltest zB libRXTX oder die nativen com.sun.serial schnittstellen benutzen um solche probleme zu vermeiden. Unter C/C++ geht das öffnen von chardev userspace treibern zwar problemlos, unter java und anderen hochsprachen kann es jedoch aufgrund von zechenkodierung usw. zu unerwarteten problemen kommen.
Vorher hat es noch alles funktioniert :/ Das defaultCharset steht auf UTF-8, hab es mir grad mal ausgeben lassen
Andi D. schrieb: > Unter C/C++ geht das öffnen > von chardev userspace treibern zwar problemlos, unter java und anderen > hochsprachen kann es jedoch aufgrund von zechenkodierung usw. zu > unerwarteten problemen kommen. Kann man denn in Java Dateien nicht im Binary-Modus öffnen?
Ich hab nun die RXTXlib eingebunden, trotzdem das Selbe Problem. Denke also das es an Linux/Einstellungen der Seriellen Schnittstelle liegt.. Hat noch wer Ideen?
Donni Donis schrieb: > Denke > also das es an Linux/Einstellungen der Seriellen Schnittstelle liegt.. dann mache doch einfach ein test. Lege eine Datei an und schicke sie per USB raus: cat Datei > dev/ttyAMA0
Hab in die Datei "Testÿ" geschrieben, ÿ ist das Zeichen für den Wert 255. So, ankommen tut: 84, 101, 115, 116, 195, 191 Dann scheint es wohl irgendwie ein der Schnittstelle zu hapern... 84 - 116 ist das Wort Test, hinten kommen wieder diese 2 Bytes an, anstatt 255..
Rolf Magnus schrieb: > Kann man denn in Java Dateien nicht im Binary-Modus öffnen? Ja schon seltsam, dauernd versuchen Leute Binärdaten über Klassen/Funktionen die eigentlich für Text gedacht sind zu versenden - und das nicht nur bei Java ;D Es gibt da OutputStream, das wird auch z.B. hier genutzt: http://www.mikrocontroller.net/articles/Serielle_Schnittstelle_unter_Java
Ok dann hab ich noch was komisches.. Wenn ich per Terminal "echo -e "\xFF" >> dev/ttyAMA0" ausführe kommt die 255 an. Ich verstehe so langsam garnichts mehr ://
sicher das du in die Testdatei nicht auch schon Unicode eingefügt hattest? schau doch mal auf die größe der Datei.
Die Datei ist 7 Byte groß Dann wird Test denke ich 4 Byte sein, das 255 Zeichen 2 und Zeilenumbruch 1 Byte..
Das lässt sich einfach herausfinden:
1 | $cat 1.txt |
2 | Testÿ |
3 | |
4 | $file 1.txt |
5 | 1.txt: UTF-8 Unicode text |
6 | |
7 | $hd 1.txt |
8 | 00000000 54 65 73 74 c3 bf 0a |Test...| |
9 | 00000007 |
:
Bearbeitet durch User
Genau so sieht es aus.. ich frag mich aber warum er das jetzt so abspeichern :/ In der raspi-config hab ich als Zeichensatz de_DE UTF8 genommen und damit hatte es bisher, so meine ich jedenfalls, immer geklappt. Was muss ich denn nun umstellen dass dort 255 gespeichert wird?
Passt doch eigentlich alles, du schreibst mit einem FileWrite auf die Schnittstelle und das System steht auf UTF8. Klar das er Dir die Zeichen dann auch in Unicode codiert. Wenn Du explizit 255 binär auf die Schnittstelle schreibst funktioniert das dann natürlich: "echo -e "\xFF" >> dev/ttyAMA0" Dein Problem ist also nicht die Schnittstelle sondern die FileWrite Funktion die abhängig vom Zeichensatz schreibt.
Ich bin mir nur sicher das es vorher funktioniert hat.. Welchen Zeichensatz muss ich denn wählen, dass mein Vorhaben gelingt?
Donni Donis schrieb: > Ich bin mir nur sicher das es vorher funktioniert hat.. Welchen > Zeichensatz muss ich denn wählen, dass mein Vorhaben gelingt? gar keinen - du darfst nicht mit text arbeiten du musst binary verarbeiten, dort gibt es keinen Zeichensatz. FileWriter ist also schon falsch. http://www.javapractices.com/topic/TopicAction.do?Id=245
So, hab als Zeichensatz nun ISO-8859-15 gewählt, funktioniert wieder alles ;) Werde aber trotzdem auf den FileOutputStream umschwenken, man weiß ja nie.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.