#!/opt/bin/perl use Event; use Linux::DVB; use Data::Dumper; my $fe = new Linux::DVB::Frontend "/dev/dvb/adapter0/frontend0"; sub new_demux { new Linux::DVB::Demux "/dev/dvb/adapter0/demux0"; } package scanner; sub new { print "new scanner\n"; my $self = bless { }; $self->{10} = ::new_demux; $self->{10}->sct_filter (18, "", ""); $self->{10}->start; $self->{w} = Event->io (fd => $self->{10}->fh, poll => 'r', cb => sub { sysread $self->{10}->fh, my $data, 8192; print PApp::Util::dumpval Linux::DVB::Decode::si $data; }); } sub DESTROY { my $self = shift; $self->{w}->cancel; } package main; my $frequency = -1; sub status_changed { if ($fe->parameters->{frequency} != $frequency) { $frequency = $fe->parameters->{frequency}; undef $scanner; } if ($fe->status & FE_HAS_LOCK) { $scanner ||= new scanner; } else { undef $scanner; } } Event->io (fd => $fe->{fd}, poll => 'e', cb => sub { my $event = $fe->event; # tuning event, status changes not reported status_changed; }); Event->timer (interval => 1, cb => sub { #print $fe->status & FE_HAS_LOCK, "\n"; }); status_changed; Event::loop;