openATV enigma2
openATV is an open source SetTopBox Graphical user interface.
epgtransponderdatareader.h
Go to the documentation of this file.
1 #ifndef __epgtransponderdatareader_h_
2 #define __epgtransponderdatareader_h_
3 
4 #ifdef AUSTRALIA
5 /* Restart EPG data capture */
6 #define UPDATE_INTERVAL (5 * 60 * 1000) // Australian EIT EPG is very dynamic, updates can come less than a minute apart
7 /* Time to wait after tuning in before EPG data capturing starts */
8 #define ZAP_DELAY (500) // 1/2 second (want to grab EPG data before time shift starts)
9 #else
10 /* Restart EPG data capture */
11 #define UPDATE_INTERVAL 3600000 // 60 min
12 /* Time to wait after tuning in before EPG data capturing starts */
13 #define ZAP_DELAY 2000 // 2 sec
14 #endif
15 
16 #include <tr1/unordered_map>
17 
18 #ifdef ENABLE_OPENTV
19 #include <lib/dvb/opentv.h>
20 #include <lib/base/huffman.h>
21 #endif
22 #include <lib/dvb/epgcache.h>
23 #include <lib/base/thread.h>
24 #include <lib/base/message.h>
25 
27 class eEPGChannelData;
28 
29 typedef std::map<eDVBChannelID, time_t> updateMap;
30 typedef std::map<iDVBChannel*, eEPGChannelData*> ChannelMap;
31 
32 #ifdef ENABLE_FREESAT
33 #include <bitset>
34 class freesatEITSubtableStatus
35 {
36 private:
37  u_char version;
38  uint16_t sectionMap[32];
39  void initMap(uint8_t maxSection);
40 
41 public:
42  freesatEITSubtableStatus(u_char version, uint8_t maxSection);
43  bool isSectionPresent(uint8_t sectionNo);
44  void seen(uint8_t sectionNo, uint8_t maxSegmentSection);
45  bool isVersionChanged(u_char testVersion);
46  void updateVersion(u_char newVersion, uint8_t maxSection);
47  bool isCompleted();
48 };
49 #endif
50 
51 class eEPGTransponderDataReader: public eMainloop, private eThread, public sigc::trackable
52 {
54 public:
57 
58  static pthread_mutex_t known_channel_lock;
59  static pthread_mutex_t last_channel_update_lock;
60 
61  struct Message
62  {
63  enum
64  {
73  };
74  int type;
77  union {
78  int err;
79  int pid;
80  };
82  :type(0) {}
84  :type(type) {}
86  :type(type), channel(channel), err(err) {}
88  :type(type), service(service), err(err) {}
89  };
91 
92  static eEPGTransponderDataReader *getInstance() { return instance; }
93 
94  void restartReader();
95 
96 #ifdef ENABLE_PRIVATE_EPG
97  void PMTready(eDVBServicePMTHandler *pmthandler);
98 #else
99  void PMTready(eDVBServicePMTHandler *pmthandler) {}
100 #endif
101 
102 private:
103  friend class eEPGCache;
104  friend class eEPGChannelData;
105 
107  bool m_running;
108 
109  ChannelMap m_knownChannels;
110  ePtr<eConnection> m_chanAddedConn;
111  updateMap m_channelLastUpdated;
112 
113  std::map<std::string,int> customeitpids;
114 
115  void thread(); // thread function
116  void startThread();
117 
118  void gotMessage(const Message &message);
119 
120  // called from main thread
121  void DVBChannelAdded(eDVBChannel*);
122  void DVBChannelStateChanged(iDVBChannel*);
123  void DVBChannelRunning(iDVBChannel *);
124 };
125 
126 #endif
Definition: dvb.h:278
Definition: pmt.h:66
Definition: epgcache.h:113
Definition: epgchanneldata.h:75
Definition: epgtransponderdatareader.h:52
~eEPGTransponderDataReader()
Definition: epgtransponderdatareader.cpp:58
eEPGTransponderDataReader()
Definition: epgtransponderdatareader.cpp:15
static eEPGTransponderDataReader * getInstance()
Definition: epgtransponderdatareader.h:92
void restartReader()
Definition: epgtransponderdatareader.cpp:215
void PMTready(eDVBServicePMTHandler *pmthandler)
Definition: epgtransponderdatareader.h:99
static pthread_mutex_t known_channel_lock
Definition: epgtransponderdatareader.h:58
eFixedMessagePump< Message > m_messages
Definition: epgtransponderdatareader.h:90
static pthread_mutex_t last_channel_update_lock
Definition: epgtransponderdatareader.h:59
Definition: ebase.h:187
Definition: iservice.h:15
Definition: thread.h:27
Definition: idvb.h:637
std::map< iDVBChannel *, eEPGChannelData * > ChannelMap
Definition: epgtransponderdatareader.h:30
std::map< eDVBChannelID, time_t > updateMap
Definition: epgtransponderdatareader.h:27
instance
Definition: NavigationInstance.py:2
#define DECLARE_REF(x)
Definition: object.h:57
const char * version
Definition: rtspstreamserver.cpp:73
Definition: epgtransponderdatareader.h:62
Message(int type)
Definition: epgtransponderdatareader.h:83
int type
Definition: epgtransponderdatareader.h:74
Message(int type, iDVBChannel *channel, int err=0)
Definition: epgtransponderdatareader.h:85
iDVBChannel * channel
Definition: epgtransponderdatareader.h:75
uniqueEPGKey service
Definition: epgtransponderdatareader.h:76
@ got_mhw2_summary_pid
Definition: epgtransponderdatareader.h:71
@ timeChanged
Definition: epgtransponderdatareader.h:72
@ got_mhw2_channel_pid
Definition: epgtransponderdatareader.h:69
@ quit
Definition: epgtransponderdatareader.h:65
@ got_private_pid
Definition: epgtransponderdatareader.h:68
@ got_mhw2_title_pid
Definition: epgtransponderdatareader.h:70
@ startChannel
Definition: epgtransponderdatareader.h:66
@ leaveChannel
Definition: epgtransponderdatareader.h:67
int err
Definition: epgtransponderdatareader.h:78
Message()
Definition: epgtransponderdatareader.h:81
int pid
Definition: epgtransponderdatareader.h:79
Message(int type, const eServiceReference &service, int err=0)
Definition: epgtransponderdatareader.h:87
Definition: dvb/scan.h:16
Definition: epgcache.h:30