Porta paralela com Parport

Olá pessoal,

Estou tentando controlar um display LCD 20x4 através da porta paralela. O conjunto de instruções do HD44780 requer o uso de 11 pinos, sendo:

Pino E: Pino de “enable”, que na transição de 1 pra 0 faz a MPU ler o barramento de dados;

Pino RS: Register Selector. Seleciona entre registrador de dados ou de instruções;

Pino R/W
: Read/Write. Seleciona entre modo escrita ou modo leitura;

Pinos DB0 a DB7
: barramento de dados.

Até aí tudo bem. Meu problema começa com a solução que encontrei aqui mesmo no fórum, o Parport. Nas instruções de uso e nos exemplos, pelo que entendi, só é possível enviar e ler bytes no barramento de dados. Não consigo imaginar como eu posso manipular o status dos pinos E, RS e R/W.

Será que alguém pode me dar uma luz?

Desde já, obrigado!

Por enquanto eu imagino que a porta paralela só pode enviar bytes para a impressora.

Mas tem que ter algum esquema para poder também ler os bytes que vem da impressora, ex, nível de tinta, papel atolado, falta papel…

E também no Bios de algumas máquinas dá para configurar a porta como bi-direcional. Também gostaria de entender isso.

Minha intenção é fazer leitura do estado de pelo menos 2 pinos na porta paralela, para iniciar/parar um cronômetro.

Só agora fui encontrar isso.

Segundo o site do roger.com ( http://www.rogercom.com/pparalela/introducao.htm ), dá para ler 5 pinos, que são o estado da impressora.
http://www.rogercom.com/pparalela/introducao.htm#recebendo

Este exemplo de código em C serve para ler a porta.

 //www.rogercom.com
//rogercom@rogercom.com
//-------------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <dos.h>
int main(void)
{
    unsigned char RetByte; //Para armazenar o valor recebido da Porta Paralela.
    while( ! kbhit( ) )           //Faz enquanto nenhuma tecla for pressionada.
    {
          RetByte = inportb(0x379);  //Ler um byte da Porta Paralela (0x379)LPT1.
              printf("%u\n",RetByte);
     }
}

Pergunto: Como posso fazer o mesmo, ler a porta paralela, só que usando java?

Achei outro site:
http://br.geocities.com/vagnersantosdasilva/artigos/artigojava.htm

Em resumo:

import parport.ParallelPort;
public static void main (String[] args){
    int Bit=1; 
    ParallelPort Lpt1=new ParallelPort(0x378); //Acessa registro de dados.
    Lpt1.write(Bit); // Escreve 1 bit na porta acionado D0.
}

Se fosse para fazer no linux, como poderia ser feito?