From: Jarod W. <ja...@wi...> - 2009-10-27 23:42:46
|
On Oct 27, 2009, at 2:20 PM, Jeremy Yoder wrote: > For Ubuntu I "fixed" this in LCDproc. > > Here's the diff: > --- lcdproc-0.5.3/server/drivers/imonlcd.c 2009-06-20 > 09:48:34.000000000 -0400 > +++ mythbuntu/jyoder/server/drivers/imonlcd.c 2009-10-11 > 17:56:20.303746532 -0400 > @@ -1180,10 +1180,18 @@ > send_packet(PrivateData *p) > { > int err; > + struct timespec req; > + > + req.tv_sec = 0; > + // 1,600,000 is a little too small. 2,000,000 never fails > + //req.tv_nsec = 2000000L; > + req.tv_nsec = 1700000L; > + nanosleep(&req, NULL); > + > err = write(p->imon_fd, p->tx_buf, sizeof(p->tx_buf)); > > if (err <= 0) > - printf("%s: error writing to file descriptor: %d", > "imon", err); > + printf("%s: error writing to file descriptor: %d\n", > "imon", err); > } > > I'm hoping that Jarod comes up with a better solution eventually (he > seems pretty busy at the moment) but this does do the trick. Yeah, been a bit tied up... Good news is I have an iMON VFD now that has issues w/frequent write errors... :) Bad news is that the box is misbehaving slightly, at least when hooked up to the TV in the kids' playroom, so I need to haul it back downstairs and hook it up to a monitor to poke at it more... However, here's what I had in mind (completely untested beyond a quick compile): diff --git a/drivers/input/lirc/lirc_imon.c b/drivers/input/lirc/ lirc_imon.c index 6d9ff3e..70fcc3e 100644 --- a/drivers/input/lirc/lirc_imon.c +++ b/drivers/input/lirc/lirc_imon.c @@ -30,6 +30,7 @@ #include <linux/usb/input.h> #include <linux/time.h> #include <linux/timer.h> +#include <linux/delay.h> #include "lirc.h" #include "lirc_dev.h" @@ -960,6 +961,9 @@ static ssize_t vfd_write(struct file *file, const char *buf, exit: mutex_unlock(&context->lock); + /* delay return a bit to prevent overwhelming the device */ + mdelay(2); + return (!retval) ? n_bytes : retval; } @@ -1018,6 +1022,10 @@ static ssize_t lcd_write(struct file *file, const char *buf, } exit: mutex_unlock(&context->lock); + + /* delay return a bit to prevent overwhelming the device */ + mdelay(2); + return (!retval) ? n_bytes : retval; } -- Jarod Wilson ja...@wi... |