#include #include #include #include #include #include #include #include #define PORT "/dev/parport0" int pp_open(char *port); int pp_close(int pp); int pp_setdir(int pp, int direction); int pp_setdata(int pp, char byte); int main(int argc, char *argv[]) { int pp, chr; pp = pp_open(PORT); for (;;) { chr = getc(stdin); if (chr == 'T') { pp_setdata(pp, 0xFF); usleep(1000); pp_setdata(pp, 0x00); } else if (chr == 'C') { return 0; } } pp_close(pp); } int pp_open(char *port) { int pp; /* Parallel port file descriptor */ int mode = IEEE1284_MODE_COMPAT; /* Set transfer mode; COMPAT, BYTE, NIBBLE, EPP or ECP */ /* Open port */ pp = open(port, O_RDWR); if (pp == -1) return pp; /* Claims access to the port, this fails if any other program have used PPEXCL. */ if (ioctl(pp, PPCLAIM)) { close(pp); return -1; } /* Set transfer mode, and do negotiation */ if (ioctl(pp, PPNEGOT, &mode)) { close(pp); return -1; } /* Return file descriptor, should be used when calling these functions later */ return pp; } int pp_close(int pp) { /* Release port and close file descriptor */ ioctl(pp, PPRELEASE); return close(pp); } int pp_setdir(int pp, int direction) { /* Set data direction forward/reverse */ return ioctl(pp, PPDATADIR, direction); } int pp_setdata(int pp, char byte) { /* Set data bits to byte */ return ioctl(pp, PPWDATA, &byte); }