Parallelport bitweise schalten

schnuffie

Erfahrenes Mitglied
Hallo Experten,

ich benötige eine Schnittstelle in Java, die es ermöglicht, den Parallelport bitweise zu schalten. Dazu würde ich entweder in Java einen entsprechenden Treiber schreiben, falls es das nicht bereits gibt, oder eine vorhandene DLL mittels "native"-Methoden integrieren.

Kann mir Jemand einen entsprechenden Treiber empfehlen (mit Link) bzw. mit einfachen Worten / Beispielen erklären, wie ich an den Parallelport via Java rankomme? :confused:

P.S.: Von der Java-Comm-Api habe ich bereits gehört. Ist die für sowas geeignet? Beim kurzen Durchschauen bin ich leider nur auf Drucker-Funktionen gestoßen. :(

Die Schnittstelle soll in etwa so aussehen:
Code:
public interface ParallelAdapter {
 
public void setLevel(int bit, boolean high) throws IllegalBitException;
 
public boolean getLevel(int bit) throws IllegalBitException;
 
}

Vielen Dank.

CU schnuffie
 
Zuletzt bearbeitet:
Hmm, ist noch nicht ganz das, was mich weiterbringt, jedoch ein Anfang.

OK, mit setMode(...) kann ich den Parallelport auf Byte-Mode setzen. Wie setze ich nun eigentlich die einzelnen Bits? Was ist dabei noch zu beachten? :confused:

CU schnuffie
 
Da du kontrollierst, welche Bytes du schickst kannst du dir eine einfach Maske für jedes Bit als z.b. Char abspeichern. Das gibt dann 8 Masken. Willst du 2 oder mehr bits gleichzeitig schicken mußt du einfach diese Masken bitweise verodern.
 
OK, angenommen ich habe den Modus auf byte-weise festgelegt.
Das Interface ist vorab wie beschrieben festgelegt. Ich will durch Aufruf der Methode setLevel(...) das jeweilige Bit entweder mit L oder H setzen und könnte den Zustand dann auch mit getLevel() abrufen (true = H, false = L). Das Ganze würde von mir in der konkreten Klasse realisiert werden, die dieses Interface implementiert.
Die Vorgehensweise ist somit weitestgehend festgelegt.

Was mir fehlt, ist das eigentliche Setzen der einzelnen Bits, oder anders ausgedrückt: Welche Methode muß ich verwenden, um mit der Java-Comm-API z.B. "00001000" zu erreichen? :confused:

CU schnuffie
 
Schau mal hier:
Code:
/*
 * Created on 29.10.2004
 */
package de.tutorials;

/**
 * @author Darimont
 *  
 */
public class Test36 {

    public static void main(String[] args) {
        byte b = 0;
        //1 bit setzen:
        b |= 0x1;
        System.out.println(Integer.toBinaryString(b));
        //Bits zurücksetzen
        b &= 0x0;
        //2 bit setzen:
        b |= 0x2;
        System.out.println(Integer.toBinaryString(b));
        //Bits zurücksetzen
        b &= 0x0;
        //3 bit setzen:
        b |= 0x4;
        System.out.println(Integer.toBinaryString(b));
        //Bits zurücksetzen
        b &= 0x0;
        //4 bit setzen:
        b |= 0x8;
        System.out.println(Integer.toBinaryString(b));
        //Bits zurücksetzen
        b &= 0x0;
        //5 bit setzen:
        b |= 0x10;
        System.out.println(Integer.toBinaryString(b));

        //Testen ob 5 Bit gesetzt:
        if ((b & 0x10) == 0x10) {
            System.out.println("5 bit gesetzt...");
        }

        //Testen ob 3 Bit gesetzt:
        if ((b & 0x4) == 0x4) {
            System.out.println("3 bit gesetzt...");
        }
    }
}

@squeaker ein char ist unter Java aber (wegen Unicode) 2Byte groß.

Gruß Tom
 
Danke für den Hinweis. Habe sowas auch schon mit dem BitSet-Objekt gemacht.

Was mir fehlt, ist das Zwischenstück Java <---> Parallelport. :(

Welche Methode kann ich von der Java-Comm-API verwenden um z.B. "00001000" zu setzen. Bisher fand ich nur "isPrinterBusy()" oder "isPaperOut()", die mir natürlich garnicht weiterhelfen. :rolleyes:

CU schnuffie
 
Parallelport bitweise schalten - Hilfe! java.comm.* einrichten

Hallo Leute,

bin leider immernoch nicht so richtig schlauer. :mad:

Da ich leider mit dem "bitweise" z.Z. nicht weiterkomme, habe ich versucht, die java.comm.* auf meinem PC einzurichten.

win32com.dll ins bin-Verzeichnis der JRE
javax.comm.properties ins lib-Verzeichnis der JRE
comm.jar ins lib\ext-Verzeichnis der JRE

Leider wird überhaupt kein Port gefunden:
Code:
CommPortIdentifier port;
 
Enumeration enum = CommPortIdentifier.getPortIdentifiers();
 
System.out.println("Ports vorhanden: " + enum.hasMoreElements());
 
while (enum.hasMoreElements()) {
 
port = (CommPortIdentifier)enum.nextElement();
 
System.out.println(port.getName() + "###" + port.getPortType());
 
}

Es wird nur "Ports vorhanden: false" ausgegeben.
Was mache ich falsch? Ich nehme an, die erforderlichen Dateien liegen dort, wo sie sollen, sonst würde ich sicherlich eine Exception bekommen, oder?

Wer kann mir helfen?

CU schnuffie :(
 
Zuletzt bearbeitet:
Zurück