Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux-dvb] Re: Are frontend events queued?



> On Wed, Jul 21, 2004 at 07:31:36PM +0200, Wolfgang Fritz wrote:
> > Hello,
> >
> > I'm trying to get some facts about the infamous "video data stream
> > broken" error in VDR.
> >
> > The following modified code from VDR-1.3.10/dvbdevice.c
cDvbTuner::Action
> >
> >   active = true;
> >   while (active) {
> >         ....
> >         if (tunerStatus == tsTuned) {
> >            fe_status_t status = fe_status_t(0);
> >            CHECK(ioctl(fd_frontend, FE_READ_STATUS, &status));
> >            if (status & FE_HAS_LOCK) {
> >               tunerStatus = tsLocked;
> >       dsyslog ("Frontend %d locked", cardIndex);
> >       }
> >            }
> >         if (tunerStatus != tsIdle) {
> >            dvb_frontend_event event;
> >            if (ioctl(fd_frontend, FE_GET_EVENT, &event) == 0) {
> >       dsyslog ("Event on frontend %d: %02x", cardIndex, event.status);
> >               if (event.status & FE_REINIT) {
> >                  tunerStatus = tsSet;
> >                  esyslog("ERROR: frontend %d was reinitialized -
> > re-tuning", cardIndex);
> >                  continue;
> >                  }
> >               }
> >            }
> >      ....
> >         bool fast = (tunerStatus == tsTuned) || (ciHandler &&
> > (time(NULL) - startTime < 20));
> >         newSet.TimedWait(mutex, fast ? 100 : 1000);
> >         }
> >
> > sometimes gives the following output:
> >
> > Jul 21 19:06:21 vdr vdr[1697]: Event on frontend 1: 00
> > Jul 21 19:06:21 vdr vdr[1697]: Frontend 1 locked
> > Jul 21 19:06:21 vdr vdr[1697]: Event on frontend 1: 03
> > Jul 21 19:06:22 vdr vdr[1697]: Event on frontend 1: 1f
> >
> > What does this mean?
> >
> > - Did the frontend really lose lock for a short time?
> >
> > Or
> >
> > - Are the frontend events queued so that the event "03"
> > in fact occured before the "Frontend 1 locked"?
>
> Events are queued. You are supposed to use poll() and read
> events as soon as they are generated, or let FE_GET_EVENT
> block waiting for events. To fix up vdr you could also
> open the frontend with O_NONBLOCK and loop until
> FE_GET_EVENT returns -EGAIN, discarding old events.
>
> Once upon a time szap did something like that:
>
http://linuxtv.org/cgi-bin/cvsweb.cgi/DVB/apps/szap/szap.c?rev=1.3.2.1&content-type=text/plain
>

Hi,

i have some other question;)

I see every second FE_GET_EVENT an diseqc ioctl in my logs. Is that normal?

Jul 21 19:32:30 amd-linux kernel: dvb_frontend_ioctl :  case FE_GET_EVENT
Jul 21 19:32:30 amd-linux kernel: flexcop_diseqc_ioctl: diseqc ioctl init
Jul 21 19:32:30 amd-linux kernel: flexcop_diseqc_ioctl: Not supported
Jul 21 19:32:31 amd-linux kernel: DVB (dvb_dmxdev_filter_start)
DMX_TYPE_SEC: PID=300
Jul 21 19:32:31 amd-linux kernel: DVB (dvb_dmxdev_filter_start)
DMX_TYPE_SEC: PID=1034
Jul 21 19:32:31 amd-linux kernel: dvb_frontend_ioctl :  case FE_GET_EVENT
Jul 21 19:32:31 amd-linux kernel: DVB (dvb_dmxdev_filter_start)
DMX_TYPE_SEC: PID=400
Jul 21 19:32:31 amd-linux kernel: DVB (dvb_dmxdev_filter_start)
DMX_TYPE_SEC: PID=1021
Jul 21 19:32:31 amd-linux kernel: DVB (dvb_dmxdev_filter_start)
DMX_TYPE_SEC: PID=100
Jul 21 19:32:31 amd-linux kernel: dvb_frontend_ioctl :  case FE_GET_EVENT
Jul 21 19:32:31 amd-linux kernel: flexcop_diseqc_ioctl: diseqc ioctl init
Jul 21 19:32:31 amd-linux kernel: flexcop_diseqc_ioctl: Not supported

and so one....

Andreas





Home | Main Index | Thread Index