LINUX.ORG.RU

Опрос LPT порта.


0

0

Извините за столь тупой вопрос, но опыта программирования под Linux очень мало, а с железом - вообще ноль, ну и, как всегда, сделать нужно на вчера :( Есть железка, которая подключатся к ПК через LPT порт. Нужно проверять ее состояние раз 20 в секунду, и в зависимости от состояния производить некоторые действия. Как правильно организовать опрос? Что бы использовать как можно менше ресурсов. Буду признателен за любой ответ.


#include <sys/io.h>

#define BASEPORT        0x378
#define DATA            BASEPORT
#define CTRL            BASEPORT + 1
#define RES             BASEPORT + 2

int main(void)
{
        int a;
	if (ioperm(BASEPORT, 3, 0)) {
                perror("ioperm");
        	return 1;
	}
	outb(0x55, RES);
        outb(0xAA, DATA);
	a = inb(CTRL);
	return 0;
}

Что то типа этого, только рутовые права проге нужны. Лучше использовать parapin либу.

ip ★★★★
()
Ответ на: комментарий от eXire

НИКОГДА НЕ ПИШИТЕ В ПОРТ НАПРЯМУЮ!!!!! Делайте лучше так:
#include <stdio.h>
#include <unistd.h>
#include <sys/io.h>
#define time 10000000
#include <sys/types.h>
#include <sys/time.h>
#include <fcntl.h>
#include <signal.h>
#include <linux/ppdev.h>
#include <sys/ioctl.h>
#include <termios.h>
int main(){
printf("идет импульс в парралельный порт !\n");
unsigned char bitpat;
int fd,i;

fd = open("/dev/parport0", O_RDWR );
if (fd < 0) {
printf("ERROR: cannot open device \n");
}
i=0;
ioctl(fd, PPCLAIM, &i)&&printf("ERROR: could not claim parport\n");
i=0;
ioctl(fd, PPDATADIR, &i)&&printf("ERROR: could not claim parport\n");

while(1){
bitpat = 255;
ioctl(fd, PPWDATA, &bitpat);
usleep(time);
bitpat = 0;
ioctl(fd,PPWDATA, &bitpat);
usleep(time);
}
return 0;
}

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.