package parport; public class ParallelPort { /** The port base address (e.g. 0x378 is base address for LPT1) */ private int portBase; /** To cunstruct a ParallelPort object, * you need the port base address */ public ParallelPort (int portBase) { this.portBase = portBase; } /** Reads one byte from the STATUS pins of the parallel port. * * The byte read contains 5 valid bits, corresponing to 5 pins of input * from the STATUS pins of the parallel port (the STATUS is located * at "portBase + 1", e.g. the STATUS address for LPT1 is 0x379). * * This diagram shows the content of the byte: * * Bit | Pin # | Printer Status | Inverted * -----+-------+-----------------+----------- * 7 | ~11 | Busy | Yes * 6 | 10 | Acknowledge | * 5 | 12 | Out of paper | * 4 | 13 | Selected | * 3 | 15 | I/O error | * * Note that Pin 11 is inverted, this means that "Hi" input on pin * means 0 on bit 7, "Low" input on pin means 1 on bit 7. */ public int read () { return ParallelPort.readOneByte (this.portBase+1); } /** Writes one byte to the DATA pins of parallel port. * The byte is written to the DATA pins of the port. The DATA pins are * located at the base address of the port (e.g. DATA address for LPT1 * is 0x378). * * This diagram shows how the byte is written: * * Bit | Pin # | Printer DATA * -----+-------+-------------- * 7 | 9 | DATA 7 * 6 | 8 | DATA 6 * 5 | 7 | DATA 5 * 4 | 6 | DATA 4 * 3 | 5 | DATA 3 * 2 | 4 | DATA 2 * 1 | 3 | DATA 1 * 0 | 2 | DATA 0 */ public void write (int oneByte) { ParallelPort.writeOneByte (this.portBase, oneByte); } /** Reads one byte from the specified address. * (normally the address is the STATUS pins of the port) */ public static native int readOneByte (int address); /** Writes one byte to the specified address * (normally the address is the DATA pins of the port) */ public static native void writeOneByte (int address, int oneByte); static { System.loadLibrary("parport"); } }