Mailing List archive

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

[vdr] Singal strength, Channels display and Actuator



Luca Olivetti wrote:
> 
> Luca Olivetti wrote:
> > Klaus Schmidinger wrote:
> >
> >> Luca Olivetti wrote:
> >
> > [...]
> >
> >>> Any opinion on the patch I sent before your holidays?
> >>> http://www.linuxtv.org/mailinglists/vdr/2004/06-2004/msg00820.html
> >>>
> >>> Not that I'm in a hurry (didn't have time to advance with the plugin
> >>> that will be needing that functionality) but I'd like your opinion, (and
> >>> I can always patch vdr if it's negative).
> >>
> >>
> >>
> >> From a quick glance: what I don't like about this is the
> >> exposure you give to the cDisplayChannel object and that there is
> >> yet another cStatus call.
> >>
> >> What _exactly_ is it that you want to achieve?
> >> If it is just displaying a message, I'd say we should find another
> >> way to accomplish this.
> >
> >
> > Displaying a message quickly changing (the dish position) *and* keeping
> > the channel info on screen until the position has been reached or a
> > positioning error occurred.
> > You suggested to use Skins.Message but it didn't work/it's not enough:
> > http://www.linuxtv.org/mailinglists/vdr/2004/06-2004/msg00545.html
> 
> Maybe it's more clear if I show the method using this patch (note that
> returning true will extend the time the channel info is shown):
> 
> bool cStatusMonitor::AlterDisplayChannel(cSkinDisplayChannel
> *displayChannel)
> {
>    actuator_status status;
>    char *buf=NULL;
> 
>    CHECK(ioctl(fd_actuator, AC_RSTATUS, &status));
> 
>    bool showit=((last_state_shown != status.state) ||
> (last_position_shown != status.position));
>    last_state_shown=status.state;
>    last_position_shown=status.position;
> 
>    switch(status.state) {
>        case ACM_IDLE:
>          return false;
> 
>        case ACM_WEST:
>        case ACM_EAST:
>          if (showit) {
>            asprintf(&buf,tr("Dish target %i position %i"),status.target,
> status.position);
>            displayChannel->SetMessage(mtInfo,buf);
>            }
>          return true;
> 
>        case ACM_REACHED:
>          if (showit) displayChannel->SetMessage(mtInfo,tr("Position
> reached"));
>          return false;
> 
>        case ACM_STOPPED:
>        case ACM_CHANGE:
>          if (showit) displayChannel->SetMessage(mtInfo,tr("Motor wait"));
>          return true;
> 
>        case ACM_ERROR:
>          if (showit) displayChannel->SetMessage(mtError,tr("Motor error"));
>          return false;
>    }
>    return false;
> 
> }

I'm thinking of a different approach, which will also work for setups
without an actuator. cDevice will get a new function that reports the
strength of the received signal, and the channel display will stay up
until the signal exceeds a given lower limit for at least 5 seconds
(it will also re-appear if the signal strength drops below that limit
for more than a given time).

Additionally there will be a new plugin interface that gets called
periodically from the tuning thread of the cDevice, through which a
plugin can implement whatever additional actions are necessary to
allow for the reception of a given channel (this is not limited to
moving a dish - it could be anything).

I've started a new thread with a useful subject so that I'll have it in
my inbox and will find it again when I get to work on this ;-)

Klaus




Home | Main Index | Thread Index