Mailing List archive

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

[linux-dvb] Re: Another issue: frontend timeout value and low symbol rates



> Well, the DVB API as specified by Nokia says that FE_SET_FRONTEND
> should start tuning, and the result (failure or success) is relayed
> to the application by means of an event with FE_GET_EVENT.
> I.e. one FE_SET_FRONTEND -> one FE_GET_EVENT. But it's also
> possible for the frontend to generate additional events, e.g.
> when the cable is unplugged and replugged.
>
> The frontend code should do what it can get a lock, and if that
> fails, report the failure. IMHO this is the job of the driver,
> because the timeouts depend on the type of frontend (or even
> on the frontend making and model).
>
> But Holger thought differently, and said the application should
> do its own timeouts, because the driver cannot know how
> long it wants to wait before assuming failure. The code
> also generated superflous events during tuning. After some
> debate he put in the current FE_TIMEDOUT cruft (with an arbitrarily
> chosen timeout), which essentially means "your tuning attempt
> already timed out, so the following tuning-failed event is
> superflous and can be discarded". Or something like this
> (I never quite understood it).
>
> It's possible that a frontend reports failure after tuning, and
> some time later report a success event (because the zig-zag
> scan never gives up).
>

Yeah, that is pretty much my thinking. I don't see how the Nokia API could 
actually work in the real world. Unless we were prepared to break with the 
Nokia API, and have apps do timeouts, I don't know if theres any point in me 
attempting to fix it, because whatever I do, it will be a hack, and not work 
in all situations. The driver just doesn't have enough information on what 
the app is wanting it to do.

If there _isn't_ a problem with breaking the Nokia API, I would be glad to 
have a look. 

If there is, all I have to do to fix my stuff is ignore the FE_TIMEDOUT bit.

> My thinking of what the code should do:
>
> - if someone does SEC/DiSEqC stuff, put the frontend thread to
>   sleep until the next FE_SET_FRONTEND (the order of FE ioctls
>   is undocumented, but this is the only order that makes sense)
> - initial tuning: set frontend paramters, wait for things to settle
>   down before querying FE status (time depends on FE HW driver);
>   if it fails, try zigzag, if that fails retry slower
>   zigzag, if that fails, report failure and keep trying with low prio
>   and a limited scan range around the given frequency (i.e. wait for
>   user to plug in the cable);
>   things could be more complicated if one has to do autoprobing for
>   inversion etc. in software
> - lost signal: there are two possibilities:
>     1. cable unplugged or a bird sits on your dish  -> do not zigzag,
>        just wait for signal
>     2. sun heated up the LNB until the freq drift got too large
>        -> zigzag to correct drift
>   Obviously there's no way to decide between 1. and 2., so one has
>   to try zigzag always. I don't know how likely 2. is in practice.
>
> Also, if one has found a LNB offset during zigzag, it would be the
> same for all frequencies. But since one doesn't know whether one
> is correcting an LNB offset or whether the frequency given to
> FE_SET_FRONTEND was wrong, there is no way to tell -> LNB offset
> must be determined from scratch at every zigzag scan. (One could
> use a heuristic to retry the last LNB offset for the new freq,
> but only if there was no DiSEqC seq which changed the LNB in between,
> but I doubt it's worth trying...)

That all makes perfect sense to me.


-- 
Info:
To unsubscribe send a mail to ecartis@linuxtv.org with "unsubscribe linux-dvb" as subject.



Home | Main Index | Thread Index