openATV enigma2
openATV is an open source SetTopBox Graphical user interface.
vps.h
Go to the documentation of this file.
1 #ifndef INCLUDED_E2_PLUGIN_VPS_H
2 #define INCLUDED_E2_PLUGIN_VPS_H
3 
16 #include <linux/dvb/dmx.h>
17 #include <time.h>
18 #include <set>
19 #include <byteswap.h>
20 #include <endian.h>
21 #include <inttypes.h>
22 
23 
24 #define READ_BUF_SIZE (4*1024)
25 
26 int main(int argc, char *argv[]);
27 void abort_program(int signal);
28 
30 {
31  protected:
32  char *f_demux;
33  int fd_demux = 0;
34  uint8_t buf[READ_BUF_SIZE];
35  uint8_t *b = nullptr;
36  uint16_t onid;
37  uint16_t tsid;
38  uint16_t sid;
39  uint16_t event_id;
40  int pdc_time = 0;
41  int timeout = 0;
42  uint16_t pid = 0;
43  uint8_t table_id = 0;
44  uint8_t table_mask = 0;
45  struct dmx_sct_filter_params demux_filter;
47  uint16_t section_length = 0;
48  uint8_t section_number = 0;
49  bool only_header = false;
50 
51  void virtual process() = 0;
52  bool openDemux();
53  void checkTable();
54 
55  public:
56  Monitoring_epg(int argc, char *argv[]);
58  int start(uint16_t pid_, uint8_t table_id_, uint8_t table_mask_, int timeout_);
59 };
60 
62 {
63  private:
64  uint16_t service_event_now;
65  uint16_t service_event_next;
66  bool service_event_checked_now;
67  bool service_event_checked_next;
68  char event_last_running_status;
69  char seeking_mode;
70  // 1 überprüfe, ob Event bereits gelaufen ist, 2 suche nach anderen Events mit gleicher PDC
71  time_t event_now_start_time;
72  time_t started_seeking;
73  bool seeking_initiated;
74  std::set<uint8_t> checked_sections;
75  std::set<uint16_t> pdc_exclude_event_ids;
76 
77 
78  void setNowNext(int nevent);
79  bool checkPDC(bool set = false);
80  void process_schedule_eit();
81  bool checkFinished(uint8_t last_section_number, uint8_t segment_last_section_number);
82  void changeFilter(bool enable);
83 
84  public:
85  Event_monitoring(int argc, char *argv[]);
87  void virtual process();
88 };
89 
91 {
92  public:
93  Wait_for_beginning(int argc, char *argv[]);
95  void virtual process();
96 };
97 
98 class Seek_pdc: public Monitoring_epg
99 {
100  public:
101  Seek_pdc(int argc, char *argv[]);
102  ~Seek_pdc();
103  void virtual process();
104 };
105 
107 {
108  public:
109  Check_pdc_existing(int argc, char *argv[]);
111  void virtual process();
112 };
113 
114 
115 
116 // übernommen aus Enigma2
117 time_t parseDVBtime(uint8_t t1, uint8_t t2, uint8_t t3, uint8_t t4, uint8_t t5);
118 inline int fromBCD(int bcd)
119 {
120  if ((bcd&0xF0)>=0xA0)
121  return -1;
122  if ((bcd&0xF)>=0xA)
123  return -1;
124  return ((bcd&0xF0)>>4)*10+(bcd&0xF);
125 }
126 
127 // aus libdvbsi++
128 #if __BYTE_ORDER == __BIG_ENDIAN
129 #define r16(p) (*(const uint16_t * const)(p))
130 #else
131 #define r16(p) bswap_16(*(const uint16_t * const)p)
132 #endif
133 
134 #define GET_PDC(p) (((p[2] & 0x0f) << 16) | r16(&p[3]))
135 
136 #endif
Definition: vps.h:107
virtual void process()
Definition: vps.cpp:575
~Check_pdc_existing()
Definition: vps.cpp:573
Check_pdc_existing(int argc, char *argv[])
Definition: vps.cpp:571
Definition: vps.h:62
virtual void process()
Definition: vps.cpp:278
~Event_monitoring()
Definition: vps.cpp:239
Event_monitoring(int argc, char *argv[])
Definition: vps.cpp:227
Definition: vps.h:30
time_t received_event_last_time
Definition: vps.h:46
int pdc_time
Definition: vps.h:40
int timeout
Definition: vps.h:41
uint16_t tsid
Definition: vps.h:37
void checkTable()
Definition: vps.cpp:159
uint8_t * b
Definition: vps.h:35
uint16_t sid
Definition: vps.h:38
uint16_t pid
Definition: vps.h:42
uint8_t table_id
Definition: vps.h:43
virtual void process()=0
int fd_demux
Definition: vps.h:33
uint16_t onid
Definition: vps.h:36
uint16_t section_length
Definition: vps.h:47
uint8_t section_number
Definition: vps.h:48
int start(uint16_t pid_, uint8_t table_id_, uint8_t table_mask_, int timeout_)
Definition: vps.cpp:110
bool only_header
Definition: vps.h:49
char * f_demux
Definition: vps.h:32
struct dmx_sct_filter_params demux_filter
Definition: vps.h:45
~Monitoring_epg()
Definition: vps.cpp:108
uint8_t buf[READ_BUF_SIZE]
Definition: vps.h:34
uint16_t event_id
Definition: vps.h:39
Monitoring_epg(int argc, char *argv[])
Definition: vps.cpp:99
bool openDemux()
Definition: vps.cpp:186
uint8_t table_mask
Definition: vps.h:44
Definition: vps.h:99
Seek_pdc(int argc, char *argv[])
Definition: vps.cpp:515
~Seek_pdc()
Definition: vps.cpp:526
virtual void process()
Definition: vps.cpp:528
Definition: vps.h:91
Wait_for_beginning(int argc, char *argv[])
Definition: vps.cpp:475
~Wait_for_beginning()
Definition: vps.cpp:477
virtual void process()
Definition: vps.cpp:478
enable
Definition: Extensions/MiniTV/plugin.py:8
int main(int argc, char *argv[])
Definition: vps.cpp:44
#define READ_BUF_SIZE
Definition: vps.h:24
time_t parseDVBtime(uint8_t t1, uint8_t t2, uint8_t t3, uint8_t t4, uint8_t t5)
Definition: vps.cpp:619
int fromBCD(int bcd)
Definition: vps.h:118
void abort_program(int signal)
Definition: vps.cpp:641