sábado, 12 de julho de 2008

Como acessar a porta paralela do Pc, no sistema windows?! (C/C++)


1. Como acessar a porta paralela do Pc, no sistema windows?! (C/C++)

                Esta é uma grande incógnita para quase todos os estudantes que iniciam um cursos de engenharia nas areas de computação, elétrica, mecânica e demais cursos afins, bem como  entusiastas!  

            Com o objetivo de nortear uma resolução para esta questão básica, que surge quando se inicia o estudo para o controle de dipositivos externos via porta paralela, no sistema windows, tentei compilar neste artigos algumas soluções,  interessantes e viáveis.
            Primeiramente, vale ressaltar que, se formos buscar por toda a internet, existem muitas formas de acessar a porta paralela nos sistemas windows NT, 2000 e XP, mas foram apenas duas delas que realmente chamaram a atenção, sendo pela sua viábilidade, bem como suas carateristicas.  E elas são:

1.    Inpout32¹;

2.    Userport¹.

¹. Todos os links para download encontram-se no tópico 5 (Links).

2. Inpout32.dll

A  inpout32 é uma dll criada para ser usada no acesso a porta paralela.

A DLL(Dynamic-link library) é, segundo a wikipedia: uma implementação feita pela Microsoft para o conceito de bibliotecas compartilhadas nos sistemas operacionais Microsoft Windows e OS/2.   Essas bibliotecas geralmente tem as extensões DLL, OCX (para bibliotecas que contêm controles ActiveX), ou DRV (para drivers de sistema legacy). 

A inpout32, tem a função de permitir o acesso de seu futuro aplicativo à porta paralela. Para tanto é necessário que o inpout32.dll esteja no mesmo diretório que se encontra o código fonte e tambem no diretório do executável:

Estando a inpout32 nos diretórios corretos, realizaremos as alterações no código fonte. Nele deverão estar incluídas, obrigatóriamente, as seguintes bibliotecas:

·       windows.h // stdlib.h // stdio.h // conio.h:

Uma vez declaradas as bibliotecas necessárias, é chegada a hora de criarmos o código fonte de teste para a comunicação a inpout32. Para tal, colocaremos o seguinte trecho*:

 typedef short _stdcall (*inpfuncPtr)(short portaddr);

typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

 

*sempre antes do main(): 

e logo depois, já dentro da main() deve-se declarar as seguintes instâncias para a utilização da inpout32:


HINSTANCE hLib; //Instância para a DLL inpout32.dll.

inpfuncPtr inportb; //Instância para a função Imp32().

oupfuncPtr outportb; //Instância para a função Out32().

 /*------------------------------------------------------------------------------*/ 

hLib = LoadLibrary("inpout32.dll"); //Carrega a DLL na memória

if (hLib == NULL) { //Verifica se houve erro.

   printf("LoadLibrary Failed.\n");

   return -1;

}

 /*------------------------------------------------------------------------------*/ 

inportb=(inpfuncPtr) GetProcAddress(hLib, "Inp32");

if (inportb == NULL) {

    printf("GetProcAddress for Inp32 Failed.\n");

    return -1;

}

outportb= (oupfuncPtr) GetProcAddress(hLib, "Out32");

if (outportb == NULL) {

    printf("GetProcAddress for Oup32 Failed.\n");

    return -1;

}

Uma vez realizados, corretamente, todos os passos anteriores, é só usar as funções inport(PORTA) e outport(PORTA,DADOS) no codigo fonte.

É muito importante que ao final de seu código fonte a memória alocada durante a execução de seu aplicativo seja liberada, para isso, usa-se a função FreeLibrary(hLib).

Lembrete: A DLL deve ser distribuída juntamente com o executável e colocada no mesmo diretório de seu aplicativo. 

3.UserPort

Diferentemente do método que foi apresentado no tópico anterior, o UserPort é um programa executavel (.exe) que habilita o uso das portas. O userport foi criado por: Tomas Franzon.

Na imagem abaixo temos uma visão geral dos arquivos que compõem o diretório UserPort 

3.1 Visão Geral


3.2 Localização do .SYS

            Para que este método funcione o arquivo UserPort.sys deve ser colocado no seguinte diretório:  ..\\WINDOWS\system32\drivers.  A figura abaixo dá uma ideia melhor sobre a sua localização:


3.2   Visão executável

Feito a etapa anterior, basta configurar as portas e “startar” o UserPort.


        Bastando apartir de agora apenas a declaração dos métodos nativos da liguagem para o acesso à porta paralela.

4. Considerações finais

·         Todo o codigo foi desenvolvido em linguagem C.

o    Compilado em Dev C++ IDE;

o    Windows XP SP2.

·         O hardware de teste será mostrado em breve(eu espero...), em futuro artigo.

·         Proximos artigos propostos:

o    Metodo para controle da porta paralela em liguagem Java;

o    Hardware de teste para porta paralela.

5. Links:

Inpout32                                                      UserPort

Código-Fonte para teste                        

Todos os arquivos

Este artigo em PDF