--- lirc_parallel.c.orig 2004-11-07 11:31:18.000000000 -0200 +++ lirc_parallel.c 2005-02-22 20:11:19.000000000 -0300 @@ -81,6 +81,8 @@ ************************* Globale Variablen *********************** ***********************************************************************/ +#undef LIRC_TIMER + static int debug = 0; unsigned int irq = LIRC_IRQ; unsigned int io = LIRC_PORT; @@ -160,6 +162,7 @@ out(LIRC_PORT_DATA,0); } +#ifdef LIRC_TIMER static unsigned int init_lirc_timer(void) { struct timeval tv,now; @@ -218,6 +221,7 @@ return(0); } } +#endif static int lirc_claim(void) { @@ -281,12 +286,14 @@ disable_irq(irq); out(LIRC_PORT_IRQ,in(LIRC_PORT_IRQ)&(~LP_PINTEN)); */ + +#ifdef LIRC_TIMER if(in(1)&LP_PSELECD) { return; } -#ifdef LIRC_TIMER + if(init) { do_gettimeofday(&tv); @@ -362,6 +369,33 @@ do_gettimeofday(&lasttv); #else /* add your code here */ + + if(!init) + { + do_gettimeofday(&lasttv); + init = 1; + } + + do_gettimeofday(&tv); + + signal= (tv.tv_sec-lasttv.tv_sec)*1000000 + + (tv.tv_usec-lasttv.tv_usec); + + /* printk(KERN_NOTICE "%s: sinal %ld\n",LIRC_DRIVER_NAME, signal); */ + + if(signal>10) /* avoid glitch */ + { + if(signal>200000) + { + rbuf_write(PULSE_MASK); /* really long time */ + rbuf_write((lirc_t)9000|PULSE_BIT); + } else { + rbuf_write((lirc_t)(signal/2)); + rbuf_write((lirc_t)(signal/2)|PULSE_BIT); + } + + do_gettimeofday(&lasttv); + } #endif wake_up_interruptible(&lirc_wait);