Informações sobre o curso.
LINUX
Acesso à Porta Paralela
Por: João Henrique G. de Sá
Página 1 de 1     Home  Índice  
ACESSO À PORTA PARALELA ATRAVÉS DO LINUX 
Para uso particular ou educacional.
Copyright(c) 1999-2006 ROGERCOM.COM
Todos os direitos reservados.


       Esta matéria dá uma introdução à programação via Porta Paralela utilizando-se outro Sistema Operacional. Nós vínhamos desenvolvendo todos os aplicativos com ênfase no Sistema Operacional Windows. Agora temos mais uma opção que é a utilização do Linux para desenvolvimento. Iremos utilizar as características do Linux por ser um sistema seguro, multitarefa e fácil. A idéia de todo esse projeto são soluções baratas e confiáveis. Para começar foi desenvolvido um código utilizando o shell (linha de comando) do Linux. Os códigos que serão mostrados foram criados e compilados em Linux Conectiva 7 - Kernel 2.2 e 2.4. Antes de começarmos, precisamos saber algumas características básicas do Linux, entre elas, todo e qualquer acesso às portas temos que solicitar permissão de acesso, ao contrário dos aplicativos feitos em DOS, Windows 9x e Me. Algumas vantagens dessa segurança em relação ao windows XP, NT e 2000 é a não necessidade de criarmos drivers e DLLs que precisam de dezenas de código fonte, onde no Linux precisamos de apenas uma função em conjunto com um comando de comparação. Poderemos também no Linux, a qualquer momento, disponibilizar a Porta para outro aplicativo que solicitar, ex.: StarOffice que queira imprimir algo. Obs: A biblioteca conio.h (para Linux) deverá ser copiada para seu diretório "/usr/include". Faça o downloado clicando aqui Clique aqui para fazer download..


CRIANDO SEU CÓDIGO FONTE NO LINUX


Programa exemplo: Lptlinux - Seqüêncial de LEDs

//www.rogercom.com
//João Henrique G. de Sá
//rogercom@rogercom.com
//Copyright(c) 1999-2002 ROGERCOM.

#include <conio.h>     //Biblioteca criada por Riquecom & Rogercom
#include <iostream.h> //Biblioteca para C++
#include <unistd.h>    //Biblioteca para IOPERM
#include <sys/io.h>    //Biblioteca para OUTB

class Menu{ //Classe de Menu (Simples)
    private:
        unsigned char Valor; //Valor a ser enviado
    public:
        Menu(){   }
        void Opc1(void); //Opção de Padrões enviados
        void Opc2(void); //Opção de Padrões enviados
        void Opc3(void); //Opção de Padrões enviados
        void Print() //Exibe Menu na Tela
        {
            textcolor(TX_BLUE); //Seta a cor Azul (/usr/include/conio.h)
            gotoxy(2,4); cout << "1 - Desloc.Direita " << endl;
            gotoxy(2,5); cout << "2 - Desloc.Esquerda" << endl;
            gotoxy(2,6); cout << "3 - Vai e Volta " << endl;
            gotoxy(2,7); cout << "4 - Nibbles " << endl;
            gotoxy(2,8); cout << "Opcao: ";
        }
        int Start()
        {
            if(!ioperm(0x378, 3, 1)) return 0;
            //0x378 - Endereço Inicial de Permissão de acesso
            //3 - Endereço Final de Permissão de acesso (0x378, 9, A)
            //1 - Ativa Permissão para o programa
            //Retorna 1 se permite acesso, 0 senão

        }

        void Close()
        {
            ioperm(0x378, 3, 0);
            //0x378 - Endereço Inicial de Permissão de acesso
            //3 - Endereço Final de Permissão de acesso
            //respectivamente (0x378, 9, A)
            //0 - Desativa Permissão para o programa
            //Retorna 1 se permite acesso, 0 senão

        }

}; //Fim da classe.

void Menu::Opc1(void)
{
    for(int b = 0; b < 3; b++)
    {
        Valor = 0x01;
        for(int a = 0; a < 8; a++)
        {
            outb(Valor, 0x378);
            Valor = Valor << 1;
            sleep(1);
            Valor = Valor ^ 0x01;
        }
    }
}

void Menu::Opc2(void)
{
    for(int b = 0; b < 3; b++)
    {
        Valor = 0xff;
        for(int a = 0; a < 8; a++)
        {
            outb(Valor, 0x378);
            Valor = Valor >> 1;
            sleep(1);
        }
    }
}

void Menu::Opc3(void)
{
    for(int b = 0; b < 3; b++)
    {
        Valor = 0xff;
        for(int a = 0; a <= 8; a++)
        {
            outb(Valor, 0x378);
            Valor = Valor >> 1;
            sleep(1);
        }
        for(int a = 0; a < 8; a++)
        {
            outb(Valor, 0x378);
            Valor = Valor << 1;
            sleep(1);
            Valor = Valor ^ 0x01;
        }
    }
}

void main(void)
{
    unsigned char Valor = 0x01;
    Menu *Objeto = new Menu();
    clrscr();
    Objeto->Start();
    Objeto->Print();
    Objeto->Opc1();
    Objeto->Opc2();
    Objeto->Opc3();
    Objeto->Close();
    delete Objeto;
}



Algumas explicações básicas:

IOPERM:
int ioperm(0x378, 3, 0);
0x378 -> Endereço Inicial de Permissão de acesso;
3 -> Endereço Final de Permissão de acesso;
respectivamente 0x378, 9 e A;
0 -> Desativa Permissão para o programa;
Retorna 1 se permite acesso, 0 senão


OUTB:

void outb(Valor, 0x378);
0x378 -> Endereço Inicial de Permissão de acesso;
Valor -> unsigned char a ser enviado para a porta.


Como podemos observar no código acima, nosso programa trás uma pequena base em programação orientada a objetos (OOP), o funcionamento de permissões das portas, não só da paralela, como também serial, usb etc.


COMPILANDO SEU CÓDIGO FONTE NO LINUX

Editando:
     mcedit /home/Porta.cpp (Pressione F10 para Salvar e Sair)

Compilando:
     g++ /home/Porta.cpp -o Porta.exe

Executando:
     /home/Porta.exe

Nota final:

       Espero ter atendido as expectativas mínimas das pessoas interessadas; comunico que em breve estarei lançando o controle de Entradas de dados em Ambiente Gráfico KDE3 e GNOME.

João Henrique G. de Sá
rogercom@rogercom.com
www.rogercom.com

 


Volta à página principal. 
 

Índice dos artigos.
http://www.rogercom.com
© Copyright, 1999-2006 ROGERCOM - Antonio Rogério Messias - rogercom@rogercom.com
Todos os Direitos Reservados - All Rights Reserved.