Portal de São Romão

   Início   Ajuda Pesquisa Entrar Registe-se  

Páginas: [1]   Ir para o fundo
  Imprimir  
Autor Tópico: Acesso à Porta Paralela através do Linux  (Lida 1387 vezes)
0 Membros e 1 Visitante estão a ver este tópico.
blaster
Coronel
********

Karma: 269
Offline Offline

Sexo: Masculino
Mensagens: 1739



« em: 18 de Abril de 2007, 17:41 »


Esta matéria dá uma introdução à programação via Porta Paralela utilizando outro Sistema Operativo. A maioria das aplicações têm como uso o Sistema Operativo Windows. Agora tem-se mais uma opção que é a utilização do Linux para desenvolvimento. Para isso,  utiliza-se as características do Linux por ser um sistema seguro, multitarefa e fácil.

A ideia de todo este projecto 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 se começar, é preciso conhecer algumas características básicas do Linux, entre elas, para todo e qualquer acesso às portas é preciso solicitar permissão de acesso, ao contrário das aplicações feitas em DOS, Windows 9x e Me. Algumas vantagens desta segurança em relação ao Windows XP, NT e 2000 é a não necessidade de se criar os drivers e DLLs que precisam de dezenas de código fonte, onde em Linux precisa-se de apenas uma função em conjunto com um comando de comparação. Poderá também em Linux, a qualquer momento, disponibilizar a Porta para outro aplicação que solicitar, ex.: StarOffice onde queira imprimir algo.

Obs: A biblioteca conio.h (para Linux) deverá ser copiada para a sua directoria: ”/usr/include”. Faça o download aqui:

Criando o código:

Programa exemplo: LPTLinux: Sequência de LEDs

Citação de: João Henrique G. de Sá
//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 OUTBclass 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 no Ecrã
        {
            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(0×378, 3, 1)) return 0;
            //0×378 - Endereço Inicial de Permissão de acesso
            //3 - Endereço Final de Permissão de acesso (0×378, 9, A)
            //1 - Activa Permissão para o programa
            //Retorna 1 se permite acesso, 0 senão
        }
        void Close()
        {
            ioperm(0×378, 3, 0);
            //0×378 - Endereço Inicial de Permissão de acesso
            //3 - Endereço Final de Permissão de acesso
            //respectivamente (0×378, 9, A)
            //0 - Desactiva 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 = 0×01;
        for(int a = 0; a < 8; a++)
        {
            outb(Valor, 0×378);
            Valor = Valor << 1;
            sleep(1);
            Valor = Valor ^ 0×01;
        }
    }
}

void Menu::Opc2(void)
{
    for(int b = 0; b < 3; b++)
    {
        Valor = 0xff;
        for(int a = 0; a < 8; a++)
        {
            outb(Valor, 0×378);
            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, 0×378);
            Valor = Valor >> 1;
            sleep(1);
        }
        for(int a = 0; a < 8; a++)
        {
            outb(Valor, 0×378);
            Valor = Valor << 1;
            sleep(1);
            Valor = Valor ^ 0×01;
        }
    }
}

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


Algumas explicações básicas:

IOPERM:
int ioperm(0×378, 3, 0);
0×378 -> Endereço Inicial de Permissão de acesso;
3 -> Endereço Final de Permissão de acesso;
respectivamente 0×378, 9 e A;
0 -> Desactiva Permissão para o programa;
Retorna 1 se permite acesso, 0 senão
OUTB:
void outb(Valor, 0×378);
0×378 -> Endereço Inicial de Permissão de acesso;
Valor -> unsigned char a ser enviado para a porta.
Como se pode observar no código acima, o programa trás uma pequena base em programação orientada a objetos (POO), o funcionamento de permissões das portas, não só da paralela, como também série, usb etc.

Compilando o código:

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

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

Executar:
     /home/Porta.exe

Autor: João Henrique G. de Sá
 
Fonte: RogerCom

Registado

"Muitos homens querem ser doutores,
alguns doutores querem ser DEUS,
mas só DEUS quis ser HOMEM"
Páginas: [1]   Ir para o topo
  Imprimir  
 
Ir para:  


Powered by MySQL Powered by PHP Powered by SMF 1.1.9 | SMF © 2005, Simple Machines LLC XHTML 1.0 válido! CSS válido!