Hallo zusammen, ich möchte die COMM API von SUN einsetzen, um die serielle Schnittstelle mit JAVA 1.6 nutzen zu können. Auf dem Rechner ist OpenSuse 10.3 installiert. Für die ersten Gehversuche sollten die Beispiele aus dem Verzeichnis "examples" aus dem Archiv comm3.0_u1_linux.zip herhalten. Die Lib libLinuxSerialParallel.so wurde nach /usr/lib kopiert. Die Datei javax.comm.properties liegt im Verzeichnis von SerialDemo. Ihr Inhalt ist: Driver=com.sun.comm.LinuxDriver Der Start von SerialDemo erfolgt problemlos. Eine Auswahl der Schnittstelle ist nicht möglich. Die Liste ist leer. Die gleiche Vorgehensweise führte auf einen Ubuntu-System zum Erfolg. Die Liste enthielt zwei COM und einmal Parallel-Port. Doch zurück zum Suse-System: linux:/root/commapi/examples/SerialDemo # dmesg | grep ttyS serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A 00:0a: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A Eine RS232-Schnittstelle wurde wie erwartet vom Kernel erkannt. Weitere Untersuchungen im Quell-Code von SerialDemo zeigten, dass der Aufruf "CommPortIdentifier.getPortIdentifiers()" in der Datei SerialDemo.java eine leere Liste zurückgibt: void listPortChoices() { CommPortIdentifier portId; Enumeration en = CommPortIdentifier.getPortIdentifiers(); // iterate through the ports. while (en.hasMoreElements()) { portId = (CommPortIdentifier) en.nextElement(); if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) { portChoice.addItem(portId.getName()); } } portChoice.select(parameters.getPortName()); } Was sind die Eigenheiten von Suse-Linux in diesem Fall? Habt ihr eine Idee wieso diese Liste unter suse leer ist? Ein langer Text und ein Dank im Voraus für's Lesen. Ich hoffe auf eure Tipps ... Grüße, Olli
Olli wrote: > Hallo zusammen, > ich möchte die COMM API von SUN einsetzen, um die serielle Schnittstelle > mit JAVA 1.6 nutzen zu können. Beileid. Sun's JavaComm ist sowas von kaputt ... > Was sind die Eigenheiten von Suse-Linux in diesem Fall? Habt ihr eine > Idee wieso diese Liste unter suse leer ist? Unbedingt wichtig ist, dass javax.comm.properties gefunden wird. Nehmen wir mal an, dass ist der Fall. JavaComm macht eine primitive Suche nach im JavaComm Quelltext fest eingetragenen Device-Namen im Verzeichnis /dev. Hat man ein Linux, auf dem serielle Schnittstellen anderes heißen als es JavaComm genehm ist, fällt JavaComm auf die Fresse. Zusätzlich, und das kann der Rettungsanker bei diesem Scheißdreck sein, kann man in javax.comm.properties Device-Namen eintragen. Beispiel:
1 | serpath0 = /dev/ttyS0 |
2 | serpath1 = /dev/ttyS1 |
3 | serpath2 = /dev/ttyS2 |
Wobei für "/dev/ttyS..." die echten Device-Namen einzutragen sind. Alles ziemlicher Bockmist, da man normalen DAUs eine solche Konfiguration für eine Applikation nicht zumuten kann. Merkt man, dass ich diesen JavaComm-Dreck nicht mag? Was kaum geht ist die Device-Namen im eigentlichen Code JavaComm unterzuschieben, da das API dafür natürlich auch kaputt ist. Man braucht einen Parameter, eine Treiberinstanz, die JavaComm eigentlich selber geladen haben sollte. Da rumzufummeln geht manchmal gut, gelegentlich crasht JavaComm allerdings unmotiviert. Der Ablauf ist grob: Treiberername auslesen. Treiber-Instanz kreieren (Problem: durch die selbst kreierte Instanz hat man den Treiber ev. zwei Mal im System). Mit addPortName() JavaComm einen Device-Namen unterschieben. Dabei braucht man die Treiberinstanz. Zusammenfassung: Nimm was anderes. RxTx (rxtx.org) ist auch ziemlich kaputt, aber wenigstens anders kaputt und hat das JavaComm API. Noch besser, nimm eine Programmiersprache mit der man vernünftig auf Systemschnittstellen zugreifen kann, wie C oder C++, statt den Spinnereien von Sun-Programmierern ausgeliefert zu sein, die alle Schnittstellen hassen wie die Pest.
Hallo Hannes, die Erweiterung der javax.comm.properties war die Lösung... Danke, Olli
Hallo Olli, ich bin erst jetzt über Deine Anfrage im Forum gestolpert und sehe, dass Dein Problem bereits gelöst ist. Grundsätzlich solltest Du aber besser RXTX von http://www.rxtx.org verwenden! Gründe: 1. Vollständig freie Software (Open Source) 2. Vollständig kompatibel mit dem 'alten' javax.comm 3. Unterstützt in der aktuellen Version auch Windows (obwohl ich selber auch SuSE-Nutzer bin). Das JavaComm-API 3.0 bietet KEINE Unterstützung mehr für Windows! 4. Die javax.comm.properties werden NICHT benötigt! Unter openSuSE (ich hab rxtx gerade am letzten Wochenende auch unter der 11.1) zum Laufen gekriegt, müssen folgende Gruppenzugehörigkeiten gesetzt werden: Jeder User, der auf serielle Ports zugreifen darf, MUSS Mitglied der Gruppe 'uucp' sein, und jeder User, der auf parallele Ports zugreifen darf, muss Mitglied der Gruppe 'lp' sein. Ich weiß nicht, wie dies unter Ubuntu geregelt ist: Möglicherweise sind dort diese Gruppenzugehörigkeiten per Default eingestellt, sodass es dort sofort funktioniert! Viele Grüße Ralf Weitere Hinweise:
Was fuer eine dumpfbacke bist den du??? Hast, keine ahnung von schnittstellen, oder? RS232 gibts schon lange nicht mehr, und war auch dreck! in java wird nur versucht irgentwie eine saubere loesung fuer diese coldplug-interfaces zu erstellen. versuch den link; und halt dich an deren anweisungen, wie nicht anders zu erwarten functioniert so eine meist nicht mehr portierte, fossile schnittstelle halbwegs brauchbar. http://www.jcontrol.org/download/rxtx_de.html frohes schaffen.
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.