ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Linux-DVB/eg/extract-si
Revision: 1.2
Committed: Mon Sep 6 06:28:33 2004 UTC (19 years, 10 months ago) by root
Branch: MAIN
Changes since 1.1: +15 -7 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #!/opt/bin/perl
2
3 # extract whatever data available in the currently tuned transponder
4
5 # this program is slightly overdesigned as it is was the base for a
6 # larger program, it still shows how to react to channel changes
7 # and scan pids and decode si info.
8
9 my $PID = 18; # epg data and more
10
11 use Event;
12 use Linux::DVB;
13
14 use Data::Dumper;
15
16 my $fe = new Linux::DVB::Frontend "/dev/dvb/adapter0/frontend0";
17
18 sub new_demux {
19 new Linux::DVB::Demux "/dev/dvb/adapter0/demux0";
20 }
21
22 package scanner;
23
24 sub new {
25 print "new scanner\n";
26 my $self = bless { };
27
28 $self->{dmx} = ::new_demux;
29 $self->{dmx}->sct_filter ($PID, "", "");
30 $self->{dmx}->start;
31
32 $self->{w} = Event->io (fd => $self->{dmx}->fh, poll => 'r', cb => sub {
33 sysread $self->{dmx}->fh, my $data, 8192;
34 print Data::Dumper::Dumper Linux::DVB::Decode::si $data;
35 });
36 }
37
38 sub DESTROY {
39 my $self = shift;
40 $self->{w}->cancel;
41 }
42
43 package main;
44
45 my $frequency = -1;
46
47 sub status_changed {
48 if ($fe->parameters->{frequency} != $frequency) {
49 $frequency = $fe->parameters->{frequency};
50 undef $scanner;
51 }
52 if ($fe->status & FE_HAS_LOCK) {
53 $scanner ||= new scanner;
54 } else {
55 undef $scanner;
56 }
57 }
58
59 Event->io (fd => $fe->{fd}, poll => 'e', cb => sub {
60 my $event = $fe->event;
61 # tuning event, status changes not reported
62 status_changed;
63 });
64
65 Event->timer (interval => 1, cb => sub {
66 #print $fe->status & FE_HAS_LOCK, "\n";
67 });
68
69 status_changed;
70
71 Event::loop;