# Parallelport bitweise schalten



## schnuffie (29. Oktober 2004)

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?  

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:

```
public interface ParallelAdapter {
 
public void setLevel(int bit, boolean high) throws IllegalBitException;
 
public boolean getLevel(int bit) throws IllegalBitException;
 
}
```
 
Vielen Dank.

CU schnuffie


----------



## Thomas Darimont (29. Oktober 2004)

Hallo!

Schau mal hier:
http://forum.java.sun.com/thread.jsp?forum=4&thread=488192



> case ParallelPort.LPT_MODE_PS2:                        System.out.println("mode PS2 - byte mode ");



Gruß Tom


----------



## schnuffie (29. Oktober 2004)

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?  

CU schnuffie


----------



## squeaker (29. Oktober 2004)

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.


----------



## schnuffie (29. Oktober 2004)

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?  

CU schnuffie


----------



## Thomas Darimont (29. Oktober 2004)

Schau mal hier:

```
/*
 * 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


----------



## schnuffie (29. Oktober 2004)

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.  

CU schnuffie


----------



## schnuffie (31. Oktober 2004)

Kann mir wirklich Keiner helfen? ...oder zumindest einen Tipp geben, wo ich die passende Antwort finde?


----------



## schnuffie (1. November 2004)

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

Hallo Leute,

bin leider immernoch nicht so richtig schlauer.  

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:

```
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


----------



## schnuffie (11. November 2004)

...nachdem ich nun immernoch nicht schlauer bin und auch noch nichts Brauchbares im Internet fand, bin ich langsam am Verzweifeln.


----------



## sP4Xx (30. November 2004)

Hallo,

 der Thread ist zwar schon älter und ich weiss nicht ob du schon eine Lösung hast. Ich hatte genau dasselbe Problem beim ansprechen des Parallel Port mit javax.comm.*!

 Nach einigem Surfen habe ich dann noch folgende Library gefunden mit der es dann ohne Probleme funktioniert hat: http://www.rxtx.org
 Ich hoffe das hilft dir weiter...


 Ich will etwas ähnliches realisieren wie du, sprich auch bitweise daten auf den Port schicken. In meinem Fall 11000000, 00110000, etc.
 Bisher habe ich noch nicht genau damit beschäftigt, aber hier sind ja schon einige Ansätze vorhanden...


 Gruß, sP4Xx


----------



## schnuffie (30. November 2004)

Hi sP4Xx,

 danke für die Antwort. Werde das mal bei Gelegenheit testen.

 Schön, daß auch mal Jemand auf ältere und *noch offene* Beiträge antwortet. Hatte die Hoffnung schon aufgegeben... 

 Tja, es ist eben nicht das einzige Problem oder die einzige Baustelle. Macht man halt mal mit was Anderem weiter... ;-)

 Ja, will die Ausgänge "zweckentfremdet" nutzen. Im Endeffekt soll am Parallelport über eine Matrix eine Relaiskarte hängen, die dann eben mittels 8 Kanälen verschiedene Ausgänge schaltet, also nicht nur 8 sondern theoretisch bis zu 2 hoch 7 - brauch' ich natürlich nicht... 

 Mein Interface bietet die definierte Java-Schnittstelle für dieses Schalten der 8 Daten-Pins. Die Java-Anwendung wäre somit egal, selbst die Relaiskarte wäre austauschbar, da nur die 8 Daten-Pins die Schnittstelle darstellen.


----------

