miércoles, 9 de abril de 2008

Controlando el puerto paralelo en linux II

En la entrada anterior puse 2 ejemplos de como controlar el puerto paralelo, en esta entrada pondre otros 2 ejemplos.

El siguiente ejemple es:

#include  <stdlib.h>
#include <parapin.h>
#include <unistd.h>

int i;

main () {
pin_init_user(LPT1);
pin_output_mode(LP_DATA_PINS);
pin_input_mode(LP_PIN10 |LP_PIN12);

while( !pin_is_set(LP_PIN10)) {
clear_pin(LP_DATA_PINS);

if ( pin_is_set(LP_PIN12)){
for (i = 2; i <= 9; i++){ set_pin(LP_PIN[i]); usleep(200000); } } } }

Lo guardamos como prueba.c y compilamos con :
 gcc -o prueba prueba.c -lparapin


En los 3 ejemplos que hemos visto hasta ahora es necesario el ejecutarlos como root, si queremos hacer uso del puerto paralelo como usuarios normales podemos hacer uso de ioctl() y de ppdev, de la siguiente forma:
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/ppdev.h>
#include <unistd.h>

#define pin12 32
#define pin10 64


int fd;
int i, x=0, dato=1;


main (){
fd = open("/dev/parport0", O_RDWR );
ioctl(fd, PPCLAIM); //pido puerto
ioctl(fd, PPWDATA, &i); // escribo puerto

while( (pin10 & dato) != pin10){

x = 0;
ioctl(fd, PPWDATA, &x); //escribo puerto
ioctl(fd, PPRSTATUS, &dato); //Leo puerto

if ((pin12 & dato) == pin12){
for ( i = 1; i <= 8; i++){ x = x*2+1; ioctl(fd, PPWDATA, &x); //escribo puerto usleep(200000); } } } close(fd); }


Si queremos saber mas de como acceder mas al puerto paralelo por medio de ppdev ver este enlace

1 comentario:

Unknown dijo...

¿Como que nadie ha puesto un comentario a este maravilloso blog?. Si no fuera por tí, no habría aprendido a usar Parapin. Me estoy haciendo un driver de joystick usando el LPT y si no fuera por esto... en fin, no me molaba leer la maldita documentacion extensa y en inglés. Muy educativo, didáctico e ilustrativo todo. Muy bien, si señor y muchas gracias por tu aporte