55 lines
911 B
C
55 lines
911 B
C
/*
|
|
* Simple command interface to ioctl(fd, LPSETIRQ, irq).
|
|
* Nigel Gamble (nigel@gate.net)
|
|
* e.g.
|
|
* lpcntl /dev/lp1 7
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <fcntl.h>
|
|
#include <errno.h>
|
|
#include <linux/lp.h>
|
|
|
|
int
|
|
main(int argc, char **argv)
|
|
{
|
|
unsigned int irq;
|
|
int fd;
|
|
int ret;
|
|
|
|
if (argc < 2) {
|
|
fprintf(stderr, "usage: %s <lp device> [<irq>]\n", argv[0]);
|
|
exit(1);
|
|
}
|
|
|
|
fd = open(argv[1], O_RDONLY);
|
|
if (fd == -1) {
|
|
perror(argv[1]);
|
|
exit(1);
|
|
}
|
|
|
|
if (argc == 2) {
|
|
irq = ioctl(fd, LPGETIRQ);
|
|
if (irq == -1) {
|
|
perror(argv[1]);
|
|
exit(1);
|
|
}
|
|
if (irq)
|
|
printf("%s using IRQ %d\n", argv[1], irq);
|
|
else
|
|
printf("%s using polling\n", argv[1]);
|
|
} else {
|
|
irq = atoi(argv[2]);
|
|
ret = ioctl(fd, LPSETIRQ, irq);
|
|
if (ret == -1) {
|
|
if (errno == EPERM)
|
|
fprintf(stderr, "%s: only super-user can change the IRQ\n", argv[0]);
|
|
else
|
|
perror(argv[1]);
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|