openATV enigma2
openATV is an open source SetTopBox Graphical user interface.
dvb/scan.h
Go to the documentation of this file.
1 #ifndef __lib_dvb_scan_h
2 #define __lib_dvb_scan_h
3 
4 #include <dvbsi++/service_description_section.h>
5 #include <dvbsi++/network_information_section.h>
6 #include <dvbsi++/bouquet_association_section.h>
7 #include <dvbsi++/program_association_section.h>
8 #include <dvbsi++/program_map_section.h>
9 
10 #include <lib/dvb/idemux.h>
11 #include <lib/dvb/esection.h>
12 #include <lib/dvb/db.h>
13 #include <lib/dvb/atsc.h>
14 
15 struct service
16 {
17  service(unsigned short pmtPid)
18  :pmtPid(pmtPid), serviceType(0xFF), scrambled(false)
19  {
20  }
21  unsigned short pmtPid;
22  unsigned char serviceType;
23  bool scrambled;
24 };
25 
26 class eDVBScan: public sigc::trackable, public iObject
27 {
28  DECLARE_REF(eDVBScan);
29  /* chid helper functions: */
30 
31  /* heuristically determine if onid/tsid is valid */
32  int isValidONIDTSID(int orbital_position, eOriginalNetworkID onid, eTransportStreamID tsid);
33  /* build dvb namespace */
34  eDVBNamespace buildNamespace(eOriginalNetworkID onid, eTransportStreamID tsid, unsigned long hash);
35 
36  /* scan resources */
37  eUsePtr<iDVBChannel> m_channel;
38  ePtr<iDVBDemux> m_demux;
39 
40  /* infrastructure */
41  void stateChange(iDVBChannel *);
42  ePtr<eConnection> m_stateChanged_connection;
43 
44  /* state handling */
45  RESULT nextChannel();
46 
47  RESULT startFilter();
48  enum { readyPAT=1, readySDT=2, readyNIT=4, readyBAT=8,
49  validPAT=16, validSDT=32, validNIT=64, validBAT=128, validVCT=256};
50 
51  /* scan state variables */
52  int m_channel_state;
53  int m_ready, m_ready_all;
54 
55  std::map<eDVBChannelID, ePtr<iDVBFrontendParameters> > m_new_channels;
56  std::map<eDVBChannelID, int> m_tuner_data; // frequency read from tuner for every new channel
57 
58  std::map<eServiceReferenceDVB, ePtr<eDVBService> > m_new_services;
59  std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator m_last_service;
60 
61  std::map<unsigned short, service> m_pmts_to_read;
62  std::map<unsigned short, service>::iterator m_pmt_in_progress;
63  bool m_pmt_running;
64  bool m_abort_current_pmt;
65 
66  std::list<ePtr<iDVBFrontendParameters> > m_ch_toScan, m_ch_scanned, m_ch_unavailable, m_ch_blindscan;
67  ePtr<iDVBFrontendParameters> m_ch_current, m_ch_blindscan_result;
68  eDVBChannelID m_chid_current;
69  eTransportStreamID m_pat_tsid;
70 
77 
78  void SDTready(int err);
79  void NITready(int err);
80  void BATready(int err);
81  void PATready(int err);
82  void PMTready(int err);
83  void VCTready(int err);
84 
85  void addKnownGoodChannel(const eDVBChannelID &chid, iDVBFrontendParameters *feparm);
86  void addChannelToScan(iDVBFrontendParameters *feparm);
87 
88  int sameChannel(iDVBFrontendParameters *ch1, iDVBFrontendParameters *ch2, bool exact=false) const;
89 
90  void channelDone();
91 
92  sigc::signal1<void,int> m_event;
93  RESULT processSDT(eDVBNamespace dvbnamespace, const ServiceDescriptionSection &sdt);
94  RESULT processVCT(eDVBNamespace dvbnamespace, const VirtualChannelTableSection &vct, int onid);
95 
96  int m_flags;
97  int m_networkid;
98  bool m_usePAT;
99  bool m_scan_debug;
100 
101  FILE *m_lcn_file;
102  std::map<eDVBChannelID, uint32_t> m_aus_da_flags;
103  std::map<eDVBChannelID, std::string> m_default_authorities;
104  void addLcnToDB(eDVBNamespace ns, eOriginalNetworkID onid, eTransportStreamID tsid, eServiceID sid, uint16_t lcn, uint32_t signal);
105 public:
106  eDVBScan(iDVBChannel *channel, bool usePAT=true, bool debug=true );
107  ~eDVBScan();
108 
109  enum {
115 
116  void start(const eSmartPtrList<iDVBFrontendParameters> &known_transponders, int flags, int networkid = 0);
117 
119  RESULT connectEvent(const sigc::slot1<void,int> &event, ePtr<eConnection> &connection);
120  void insertInto(iDVBChannelList *db, bool backgroundscanresult=false);
121 
122  void getStats(int &transponders_done, int &transponders_total, int &services);
123  void getLastServiceName(std::string &name);
124  void getLastServiceRef(std::string &name);
127  eDVBChannelID getCurrentChannelID() { return m_chid_current; }
128 };
129 
130 #endif
Definition: atsc.h:93
Definition: dvb/scan.h:27
eDVBScan(iDVBChannel *channel, bool usePAT=true, bool debug=true)
Definition: dvb/scan.cpp:39
void insertInto(iDVBChannelList *db, bool backgroundscanresult=false)
Definition: dvb/scan.cpp:1385
void start(const eSmartPtrList< iDVBFrontendParameters > &known_transponders, int flags, int networkid=0)
Definition: dvb/scan.cpp:1299
void getLastServiceName(std::string &name)
Definition: dvb/scan.cpp:1864
void getLastServiceRef(std::string &name)
Definition: dvb/scan.cpp:1872
void getStats(int &transponders_done, int &transponders_total, int &services)
Definition: dvb/scan.cpp:1857
RESULT connectEvent(const sigc::slot1< void, int > &event, ePtr< eConnection > &connection)
Definition: dvb/scan.cpp:1851
~eDVBScan()
Definition: dvb/scan.cpp:56
@ clearToScanOnFirstNIT
Definition: dvb/scan.h:113
@ scanRemoveServices
Definition: dvb/scan.h:111
@ scanDontRemoveFeeds
Definition: dvb/scan.h:111
@ scanOnlyFree
Definition: dvb/scan.h:113
@ scanNetworkSearch
Definition: dvb/scan.h:110
@ scanBlindSearch
Definition: dvb/scan.h:114
@ scanSearchBAT
Definition: dvb/scan.h:110
@ scanDontRemoveUnscanned
Definition: dvb/scan.h:112
@ evtNewService
Definition: dvb/scan.h:118
@ evtFail
Definition: dvb/scan.h:118
@ evtUpdate
Definition: dvb/scan.h:118
@ evtFinish
Definition: dvb/scan.h:118
RESULT getFrontend(ePtr< iDVBFrontend > &)
Definition: dvb/scan.cpp:1880
RESULT getCurrentTransponder(ePtr< iDVBFrontendParameters > &)
Definition: dvb/scan.cpp:1888
eDVBChannelID getCurrentChannelID()
Definition: dvb/scan.h:127
Definition: idvb.h:637
Definition: idvb.h:443
Definition: idvb.h:475
Definition: object.h:15
debug
Definition: Components/HdmiCec.py:77
name
Definition: newplugin.py:9
db
Definition: lamedb2satxml.py:14
int RESULT
Definition: object.h:12
Definition: idvb.h:144
Definition: idvb.h:130
Definition: idvb.h:116
Definition: idvb.h:102
Definition: idvb.h:88
Definition: dvb/scan.h:16
unsigned short pmtPid
Definition: dvb/scan.h:21
unsigned char serviceType
Definition: dvb/scan.h:22
service(unsigned short pmtPid)
Definition: dvb/scan.h:17
bool scrambled
Definition: dvb/scan.h:23