Paralelni port [long]

Jozef Martiniak jozo na soueza.utc.sk
Středa Říjen 27 11:17:12 CEST 2004


Takze hadam vam pomoze tento zdrojak :

void dsend(int byte) - zapis dat na dat. zbernicu
int dget(void) - nacitanie dat z dat zbernice 

#include <unistd.h>
#include <sys/perm.h>
#include <asm/io.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>

#define lpt1            0x378
#define lpt2            0x278

#define us              1000
#define ms              1000000
#define s               1000000000

class parport {
	public:
		parport(int baseport);
		~parport();
		int bitronic;
		
		void dsend(int byte);
		int dget(void);
		void csend(int byte);
		int status(void);

		void nsleep(unsigned int ns);
	private:
		short int base;
		struct timespec ts;
		int lastcmd;
};

parport::parport(int baseport)
{
	base = baseport;
	ioperm(base, 3, 1);
	ts.tv_sec=bitronic=lastcmd=0;
	dsend(0);
	csend(0);
}

parport::~parport()
{
	ioperm(base, 3, 0);
}

void parport::dsend(int byte)
{
	if (!bitronic) 
	{
		outb(byte, base);
	} else {
		bitronic=0;
		csend(lastcmd);
		outb(byte, base);
		bitronic=1;
		csend(lastcmd);
	}
}

int parport::dget(void)
{
	if (bitronic) 
	{
		return inb(base);
	} else {
		bitronic=1;
		csend(lastcmd);
		int res=inb(base);
		bitronic=0;
		csend(lastcmd);
		return res;
	}
}

void parport::csend(int byte)
{
	lastcmd=byte;
	if (!bitronic)
	{
		outb((byte & 7) ^ 2, base+2);
	} else {
		outb(((byte & 7) ^ 2) | 32, base+2);
	}
}

int parport::status(void)
{
	return (inb(base+1) ^ 200) >> 3;
}

void parport::nsleep(unsigned int ns)
{
	ts.tv_nsec = ns;
	nanosleep(&ts, &ts);
}

Dňa Streda 27 Október 2004 10:48 Tomas Rett napísal:
> Ano, presne tak. Chci si pripojit 8255A a pripojeni na paralelni port je 
> to jedine, co bych byl schopen ubastlit.
> 
> Cetl jsem nejake ovladace pro 8255A pro Linux, ale to bylo na nejake 
> firemni karte, kterou nemam. Cesta pres paralelni port se mi zdala 
> schudna, protoze jsem cetl v Amaterskem radiu, jak se to da udelat.


Další informace o konferenci Linux