Bueno al parecer también existen otras personas interesadas en el tema así que decidi incluir este articulo en el blog.
Este es el programa (muy sencillo) que uso para enviar un pulso (+5 Volts DC) al pine 2 del puerto paralelo:
#include
#include
#define IMPRESORA 0x378
#define ACTIVA 0x01
#define DESACTIVA 0x00
void outp(unsigned short puerto, unsigned char dato)
{
unsigned char D=dato;
__asm __volatile("outb %0,%%dx" : : "a" (D), "d" (puerto) );
}
int main(void)
{
FILE *IO;
IO=fopen("/dev/io","rw");
if (IO!=NULL)
{
outp(IMPRESORA, ACTIVA);
usleep(950);
outp(IMPRESORA, DESACTIVA);
fclose(IO);
return (0);
}
else
{
fprintf(stderr,"Error de Entrada/Salida\n");
return (1);
}
}
Por otro lado también esta la programación en lenguaje PHP que permite operar via web
c2.php
include('conectarse2.php');
$link=Conectarse();
$date = ucfirst(strftime("%A %B %d, %Y. %I:%M %p %Z"));
$donde=$REMOTE_ADDR;
$estado=yes;
if ($estado == 'yes') { system("sudo /usr/local/www/data/homechannel");
echo 'Se realizo el cambio';
}
mysql_query("Update canal set donde='$REMOTE_ADDR'",$link);
mysql_query("Update canal set cuando='$date'",$link);
mysql_query("insert into canal2 (fecha,donde,estado) values ('$date','$REMOTE_ADDR','celular')",$link);
"La idea de la base de datos es saber cuando y desde que ip se realizo el cambio" por otra parte me permite ver en que estado esta el puerto (aunque en teoría me comentan que por lenguaje c no se puede leer el estado del puerto) tengo la idea de utilizar otros pines del puerto como buffers de entrada y saber de forma real que evento ocurrió (si se coloco en 0 (cero) o en 1). Tal vez aproveche mis vacaciones documentándome y echando código.
El dispositivo que utilice en lugar de un Rele común fue un optoacoplador los mismo son muy baratos (al menos en mi pais) consumen menor corriente y el tiempo de respuesta es mejor.
NOTA: se debe usar sudo ya que el user www de apache no tiene permisologia para acceder al paralelo, solo con sudo lo hice funcionar (claro que no tenia mucho tiempo para buscar y documentarme mas a fondo) creo que hay una librería o instrucción que permite que cualquier user pueda escribir en el puerto.
Espero que les sea de Utilidad.
Saludos...