Como usar Porta Paralela

Como usar a porta paralela não é um problema Gambas, mas um problema do kernel Linux.

O kernel impede qualquer programa de fazer coisas ruins como hardware acessando diretamente. Em vez disso, você deve usar devices, ou seja, arquivos especiais localizados no diretório /dev, que permitem acessar o hardware sob controle do kernel.

Você pode acessar a porta paralela usando arquivos de dispositivos como /dev/lp0.../dev/lpN. Mas se você precisar de mais controle, ou seja, se você quer ser capaz de escrever para x86 portas de entrada / saída, você pode usar um arquivo de dispositivo chamado /dev/port.

Você vai encontrar mais explicações aqui.

O capítulo 2.2 diz que:

2.2 Um método alternativo: /dev/port

Outra maneira de acessar portas I/O é open() /dev/port (um dispositivo de caractere,
maior número é 1, menor 4) para ler/escrever (a função stdio f*()
tem buffer interno, para evitá-los). Então, lseek() para o byte adequado
no arquivo (arquivo de posição 0 = porta 0x00, posição do arquivo 1 = porta 0x01, e assim por
diante) e read() ou write() um byte ou palavra para ou a partir de.

Naturalmente, para que isso funcione seu programa necessita ler/escrever para /dev/port.
Este método é provavelmente mais lento do que o método acima, mas não
necessita de otimização do compilador nem ioperm(). Não necessita de acesso root ou,
se você der um acesso do usuário ou grupo não-root /dev/porta --- mas este é uma
coisa muito ruim de fazer em termos de segurança do sistema, uma vez que é possível
ferir o sistema, talvez até ganhar acesso root, usando /dev/port para acessar
diretamente discos rígidos, placas de rede, etc.

Você não pode usar select(2) ou poll(2) para ler /dev/porto, porque o hardware
não tem muita facilidade para notificar a CPU quando um valor em uma porta de entrada
é modificado.

Então, como root, você pode fazer o que é explicado acima: abrir /dev/port com OPEN e ler ou escrever em um local específico.

Exemplo

Dim hPort As File
Dim iPortNumber As Integer
Dim iValue as Byte

' Enviar 42 a porta 1
iPortNumber = 1
iValue = 42

hPort = Open "/dev/port" For Read Write
Seek #hPort, iPortNumber
Write #hPort, iValue
...

Existe também outra solução baseada em uma biblioteca C chamada 'parapin'. Você vai encontrar mais informações em http://parapin.sourceforge.net/

Veja Também