PUCRS
Programação de Software Básico
Faculdade de Informática
Acesso à Porta Paralela
O exemplo abaixo permite o acesso direto à porta parala do PC. Você pode obter o fonte neste link.
O programa foi testado com o compilador G++ tanto em Windows quanto em Linux.
Para ter acesso à porta paralela, utilizando o Windows, deve-se utilizar esta DLL.
// **************************************************
// PROGRAMAÇÃO DE SOFTWARE BÁSICO
// Paralela2.cpp
// Exemplo de programa de acesso à porta paralela.
// Este programa foi testado com o compilador G++,
// tanto em ambiente Windows quanto em Linux.
// **************************************************
#include <iostream>
#ifdef WIN32
// compila para o Windows
#include <windows.h>
#include <io.h> // para glibc
#else
// compila para Linux
#include <sys/io.h> // para glibc
#endif
using namespace std;
#ifdef WIN32
//what does these typedefs do???
typedef short (_stdcall *inpfuncPtr)(short portaddr);
typedef void (_stdcall *oupfuncPtr)(short portaddr, short datum);
HINSTANCE hLib;
inpfuncPtr inp32fp;
oupfuncPtr oup32fp;
#endif
void testaParalela()
{
#ifdef WIN32
hLib = LoadLibrary("inpout32.dll");
if (hLib != NULL)
{
cout << "DLL carregada com sucesso !!!" << endl;
}
else
{
cout << "Problemas ao carregar a DLL !!!" << endl;
cout << "Encerrando aplicação..." << endl;
exit(1);
}
inp32fp = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
if (inp32fp != NULL)
{
cout << "Função 'Inp32' encontrada !" << endl;
}
else
{
cout << "Problemas para obter o endereço da
função 'Inp32'..." << endl;
cout << "Encerrando aplicação..." << endl;
exit(1);
}
oup32fp = (oupfuncPtr) GetProcAddress(hLib, "Out32");
if (oup32fp != NULL)
{
cout << "Função 'Out32' encontrada !" << endl;
}
else
{
cout << "Problemas para obter o endereço da
função 'Out32'..." << endl;
cout << "Encerrando aplicação..." << endl;
exit(1);
}
#else
if(ioperm(0x378, 3, 1) == 0) // Liberando 3 portas: 0x378, 0x379 e 0x37A
{
cout << "Permissão de portas concedida!!!" << endl;
}
else
{
cout << "Problemas ao liberar portas..." << endl;
cout << "Encerrando aplicação..." << endl;
exit(1);
}
#endif
}
short Inp32 (short portaddr)
{
#ifdef WIN32
return (inp32fp)(portaddr);
#else
return inb(portaddr);
#endif
}
void Out32 (short portaddr, short datum)
{
#ifdef WIN32
(oup32fp)(portaddr,datum);
#else
outb(datum, portaddr);
#endif
}
int main(void)
{
char c;
cout << "Iniciando...." << endl;
testaParalela();
cout << "Pressione qualquer tecla para continuar..." << endl;
cin.get(c);
Out32(0x378,10);
do
{
cout << Inp32(0x379) << endl ;
} while (1);
#ifdef WIN32
FreeLibrary(hLib);
#endif
return 0;
}