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