openATV enigma2
openATV is an open source SetTopBox Graphical user interface.
fastscan.h
Go to the documentation of this file.
1 #ifndef _lib_dvb_fastscan_h
2 #define _lib_dvb_fastscan_h
3 
4 #include <lib/base/object.h>
5 #include <lib/dvb/idvb.h>
6 
7 #ifndef SWIG
8 
9 #include <lib/dvb/idemux.h>
10 #include <lib/dvb/esection.h>
11 
12 #include <dvbsi++/long_crc_section.h>
13 #include <dvbsi++/service_descriptor.h>
14 #include <dvbsi++/network_name_descriptor.h>
15 #include <dvbsi++/service_list_descriptor.h>
16 #include <dvbsi++/satellite_delivery_system_descriptor.h>
17 
18 /* HACK: fastscan table uses a nonstandard version of the LogicalChannel descriptor, with 14bit channel numbers (instead of 10bit), and a nonstandard definition of a 'hidden' flag */
20 {
21 protected:
22  unsigned serviceId : 16;
23  unsigned hiddenFlag : 1;
24  unsigned logicalChannelNumber : 14;
25 
26 public:
27  FastScanLogicalChannel(const uint8_t *const buffer);
29 
30  uint16_t getServiceId(void) const;
31  uint8_t getHiddenFlag(void) const;
32  uint16_t getLogicalChannelNumber(void) const;
33 };
34 
35 typedef std::list<FastScanLogicalChannel *> FastScanLogicalChannelList;
36 typedef FastScanLogicalChannelList::iterator FastScanLogicalChannelListIterator;
37 typedef FastScanLogicalChannelList::const_iterator FastScanLogicalChannelListConstIterator;
38 
39 class FastScanLogicalChannelDescriptor : public Descriptor
40 {
41 protected:
43 
44 public:
45  FastScanLogicalChannelDescriptor(const uint8_t *const buffer);
47 
48  const FastScanLogicalChannelList *getChannelList(void) const;
49 };
50 
51 class FastScanService : public ServiceDescriptor
52 {
53 protected:
54  unsigned originalNetworkId : 16;
55  unsigned transportStreamId : 16;
56  unsigned serviceId : 16;
57  unsigned defaultVideoPid : 16;
58  unsigned defaultAudioPid : 16;
59  unsigned defaultVideoEcmPid : 16;
60  unsigned defaultAudioEcmPid : 16;
61  unsigned defaultPcrPid : 16;
62  unsigned descriptorLoopLength : 16;
63 
64 public:
65  FastScanService(const uint8_t *const buffer);
66  ~FastScanService(void);
67 
68  uint16_t getOriginalNetworkId(void) const;
69  uint16_t getTransportStreamId(void) const;
70  uint16_t getServiceId(void) const;
71  uint16_t getDefaultVideoPid(void) const;
72  uint16_t getDefaultAudioPid(void) const;
73  uint16_t getDefaultVideoEcmPid(void) const;
74  uint16_t getDefaultAudioEcmPid(void) const;
75  uint16_t getDefaultPcrPid(void) const;
76 };
77 
78 typedef std::list<FastScanService*> FastScanServiceList;
79 typedef FastScanServiceList::iterator FastScanServiceListIterator;
80 typedef FastScanServiceList::const_iterator FastScanServiceListConstIterator;
81 
82 class FastScanServicesSection : public LongCrcSection
83 {
84 protected:
85  //unsigned versionNumber : 5;
87 
88 public:
89  FastScanServicesSection(const uint8_t * const buffer);
91 
92  static const uint16_t LENGTH = 4096;
93  static const int TID = 0xBD;
94  static const uint32_t TIMEOUT = 5000;
95 
96  uint8_t getVersion(void) const;
97  const FastScanServiceList *getServices(void) const;
98 };
99 
101 {
102 protected:
103  unsigned transportStreamId : 16;
104  unsigned originalNetworkId : 16;
105  unsigned descriptorLoopLength : 16;
106 
107  SatelliteDeliverySystemDescriptor *deliverySystem;
108  ServiceListDescriptor *serviceList;
110 
111 public:
112  FastScanTransportStream(const uint8_t *const buffer);
114 
115  uint16_t getOriginalNetworkId(void) const;
116  uint16_t getTransportStreamId(void) const;
117  uint16_t getOrbitalPosition(void) const;
118  uint8_t getWestEastFlag(void) const;
119  uint32_t getFrequency(void) const;
120  uint8_t getPolarization(void) const;
121  uint8_t getRollOff(void) const;
122  uint8_t getModulationSystem(void) const;
123  uint8_t getModulation(void) const;
124  int32_t getSymbolRate(void) const;
125  uint8_t getFecInner(void) const;
126 
127  const ServiceListItemList *getServiceList(void) const;
129 };
130 
131 typedef std::list<FastScanTransportStream *> FastScanTransportStreamList;
132 typedef FastScanTransportStreamList::iterator FastScanTransportStreamListIterator;
133 typedef FastScanTransportStreamList::const_iterator FastScanTransportStreamListConstIterator;
134 
135 class FastScanNetworkSection : public LongCrcSection, public NetworkNameDescriptor
136 {
137 protected:
138  //unsigned versionNumber : 5;
140 
141 public:
142  FastScanNetworkSection(const uint8_t * const buffer);
144 
145  static const uint16_t LENGTH = 4096;
146  static const int TID = 0xBC;
147  static const uint32_t TIMEOUT = 5000;
148 
149  uint8_t getVersion(void) const;
151 };
152 
154 {
155  eDVBTableSpec m_spec;
156 public:
158  {
159  m_spec.pid = pid;
164  }
165  operator eDVBTableSpec &()
166  {
167  return m_spec;
168  }
169 };
170 
172 {
173  eDVBTableSpec m_spec;
174 public:
176  {
177  m_spec.pid = pid;
182  }
183  operator eDVBTableSpec &()
184  {
185  return m_spec;
186  }
187 };
188 
189 template <class Section>
190 class eFastScanTable : public eTable<Section>
191 {
192  std::set<int> seen;
193 public:
194  int createTable(unsigned int nr, const uint8_t *data, unsigned int max)
195  {
196  seen.insert(nr);
197  tableProgress(seen.size(), max);
199  }
200  sigc::signal2<void, int, int> tableProgress;
201 };
202 
203 template <class Section>
204 class eFastScanFileTable : public eFastScanTable<Section>
205 {
206 public:
207  void readFile(FILE *file)
208  {
209  if (!file) return;
210  unsigned char buffer[4096];
211  while (1)
212  {
213  if (fread(buffer, 3, 1, file) < 1) break;
214  unsigned int sectionsize = ((buffer[1]) & 0xf) * 256 + buffer[2];
215  if (fread(&buffer[3], sectionsize, 1, file) < 1) break;
216  if (eFastScanTable<Section>::createTable(buffer[6], buffer, buffer[7] + 1) > 0) break;
217  }
218  }
219 };
220 
221 #endif /* no SWIG */
222 
223 class eFastScan: public sigc::trackable, public iObject
224 {
225  DECLARE_REF(eFastScan);
226 
227 #ifndef SWIG
228  eUsePtr<iDVBChannel> m_channel;
229  ePtr<iDVBDemux> m_demux;
230  eDVBFrontendParametersSatellite transponderParameters;
231  bool originalNumbering;
232  bool useFixedServiceInfo;
233  bool createRadioBouquet;
234  int versionNumber;
235  std::string providerName, bouquetFilename;
236  int m_pid;
239 
240  void servicesTableProgress(int size, int max);
241  void networkTableProgress(int size, int max);
242  void servicesTableReady(int error);
243  void networkTableReady(int error);
244 
245  void fillBouquet(eBouquet *bouquet, std::map<int, eServiceReferenceDVB> &numbered_channels);
246  void parseResult();
247 #endif /* no SWIG */
248 
249 public:
250  eFastScan(int pid, const char *providername, eDVBFrontendParametersSatellite transponderparameters, bool originalnumbering = false, bool fixedserviceinfo = false, bool createRadioBouquet = false);
251  ~eFastScan();
252 
253  void start(int frontendid = 0);
254  void startFile(const char *fnt, const char *fst);
255  int getVersion();
256 
259 };
260 
261 #endif
Definition: fastscan.h:40
FastScanLogicalChannelDescriptor(const uint8_t *const buffer)
Definition: fastscan.cpp:40
const FastScanLogicalChannelList * getChannelList(void) const
Definition: fastscan.cpp:60
FastScanLogicalChannelList channelList
Definition: fastscan.h:42
~FastScanLogicalChannelDescriptor(void)
Definition: fastscan.cpp:54
Definition: fastscan.h:20
FastScanLogicalChannel(const uint8_t *const buffer)
Definition: fastscan.cpp:14
unsigned hiddenFlag
Definition: fastscan.h:23
uint16_t getServiceId(void) const
Definition: fastscan.cpp:25
unsigned logicalChannelNumber
Definition: fastscan.h:24
unsigned serviceId
Definition: fastscan.h:22
~FastScanLogicalChannel(void)
Definition: fastscan.cpp:21
uint16_t getLogicalChannelNumber(void) const
Definition: fastscan.cpp:35
uint8_t getHiddenFlag(void) const
Definition: fastscan.cpp:30
Definition: fastscan.h:136
FastScanNetworkSection(const uint8_t *const buffer)
Definition: fastscan.cpp:268
FastScanTransportStreamList transportStreams
Definition: fastscan.h:139
static const uint32_t TIMEOUT
Definition: fastscan.h:147
const FastScanTransportStreamList * getTransportStreams(void) const
Definition: fastscan.cpp:298
static const uint16_t LENGTH
Definition: fastscan.h:145
~FastScanNetworkSection(void)
Definition: fastscan.cpp:287
uint8_t getVersion(void) const
Definition: fastscan.cpp:293
static const int TID
Definition: fastscan.h:146
Definition: fastscan.h:52
FastScanService(const uint8_t *const buffer)
Definition: fastscan.cpp:65
~FastScanService(void)
Definition: fastscan.cpp:79
unsigned transportStreamId
Definition: fastscan.h:55
unsigned defaultAudioPid
Definition: fastscan.h:58
uint16_t getServiceId(void) const
Definition: fastscan.cpp:93
uint16_t getOriginalNetworkId(void) const
Definition: fastscan.cpp:83
unsigned defaultVideoPid
Definition: fastscan.h:57
uint16_t getDefaultAudioEcmPid(void) const
Definition: fastscan.cpp:113
uint16_t getTransportStreamId(void) const
Definition: fastscan.cpp:88
uint16_t getDefaultAudioPid(void) const
Definition: fastscan.cpp:103
uint16_t getDefaultPcrPid(void) const
Definition: fastscan.cpp:118
unsigned defaultVideoEcmPid
Definition: fastscan.h:59
unsigned defaultAudioEcmPid
Definition: fastscan.h:60
uint16_t getDefaultVideoPid(void) const
Definition: fastscan.cpp:98
uint16_t getDefaultVideoEcmPid(void) const
Definition: fastscan.cpp:108
unsigned defaultPcrPid
Definition: fastscan.h:61
unsigned serviceId
Definition: fastscan.h:56
unsigned descriptorLoopLength
Definition: fastscan.h:62
unsigned originalNetworkId
Definition: fastscan.h:54
Definition: fastscan.h:83
static const int TID
Definition: fastscan.h:93
~FastScanServicesSection(void)
Definition: fastscan.cpp:139
static const uint32_t TIMEOUT
Definition: fastscan.h:94
const FastScanServiceList * getServices(void) const
Definition: fastscan.cpp:150
FastScanServicesSection(const uint8_t *const buffer)
Definition: fastscan.cpp:123
static const uint16_t LENGTH
Definition: fastscan.h:92
FastScanServiceList services
Definition: fastscan.h:86
uint8_t getVersion(void) const
Definition: fastscan.cpp:145
Definition: fastscan.h:101
uint8_t getFecInner(void) const
Definition: fastscan.cpp:250
ServiceListDescriptor * serviceList
Definition: fastscan.h:108
const FastScanLogicalChannelList * getLogicalChannelList(void) const
Definition: fastscan.cpp:262
unsigned transportStreamId
Definition: fastscan.h:103
uint16_t getOrbitalPosition(void) const
Definition: fastscan.cpp:202
uint8_t getModulation(void) const
Definition: fastscan.cpp:238
uint16_t getTransportStreamId(void) const
Definition: fastscan.cpp:197
FastScanLogicalChannelDescriptor * logicalChannels
Definition: fastscan.h:109
uint8_t getRollOff(void) const
Definition: fastscan.cpp:226
uint32_t getFrequency(void) const
Definition: fastscan.cpp:214
uint8_t getWestEastFlag(void) const
Definition: fastscan.cpp:208
FastScanTransportStream(const uint8_t *const buffer)
Definition: fastscan.cpp:155
int32_t getSymbolRate(void) const
Definition: fastscan.cpp:244
uint16_t getOriginalNetworkId(void) const
Definition: fastscan.cpp:192
SatelliteDeliverySystemDescriptor * deliverySystem
Definition: fastscan.h:107
const ServiceListItemList * getServiceList(void) const
Definition: fastscan.cpp:256
unsigned descriptorLoopLength
Definition: fastscan.h:105
unsigned originalNetworkId
Definition: fastscan.h:104
uint8_t getPolarization(void) const
Definition: fastscan.cpp:220
~FastScanTransportStream(void)
Definition: fastscan.cpp:185
uint8_t getModulationSystem(void) const
Definition: fastscan.cpp:232
Definition: fastscan.h:172
eDVBFastScanNetworkSpec(int pid)
Definition: fastscan.h:175
Definition: fastscan.h:154
eDVBFastScanServicesSpec(int pid)
Definition: fastscan.h:157
Definition: frontendparms.h:20
Definition: fastscan.h:205
void readFile(FILE *file)
Definition: fastscan.h:207
Definition: fastscan.h:224
PSignal1< void, int > scanCompleted
Definition: fastscan.h:258
void start(int frontendid=0)
Definition: fastscan.cpp:356
PSignal1< void, int > scanProgress
Definition: fastscan.h:257
eFastScan(int pid, const char *providername, eDVBFrontendParametersSatellite transponderparameters, bool originalnumbering=false, bool fixedserviceinfo=false, bool createRadioBouquet=false)
Definition: fastscan.cpp:305
~eFastScan()
Definition: fastscan.cpp:317
int getVersion()
Definition: fastscan.cpp:390
void startFile(const char *fnt, const char *fst)
Definition: fastscan.cpp:321
Definition: fastscan.h:191
int createTable(unsigned int nr, const uint8_t *data, unsigned int max)
Definition: fastscan.h:194
sigc::signal2< void, int, int > tableProgress
Definition: fastscan.h:200
Definition: esection.h:41
int createTable(unsigned int nr, const uint8_t *data, unsigned int max)
Definition: esection.h:47
Definition: object.h:15
std::list< FastScanService * > FastScanServiceList
Definition: fastscan.h:78
std::list< FastScanLogicalChannel * > FastScanLogicalChannelList
Definition: fastscan.h:35
std::list< FastScanTransportStream * > FastScanTransportStreamList
Definition: fastscan.h:131
FastScanLogicalChannelList::iterator FastScanLogicalChannelListIterator
Definition: fastscan.h:36
FastScanTransportStreamList::iterator FastScanTransportStreamListIterator
Definition: fastscan.h:132
FastScanServiceList::iterator FastScanServiceListIterator
Definition: fastscan.h:79
FastScanLogicalChannelList::const_iterator FastScanLogicalChannelListConstIterator
Definition: fastscan.h:37
FastScanServiceList::const_iterator FastScanServiceListConstIterator
Definition: fastscan.h:80
FastScanTransportStreamList::const_iterator FastScanTransportStreamListConstIterator
Definition: fastscan.h:133
unsigned char data[256]
Definition: hdmi_cec.h:2
size
Definition: Plugins/SystemPlugins/PositionerSetup/log.py:16
file
Definition: newplugin.py:100
#define max(a, b)
Definition: region.cpp:7
Definition: idvb.h:62
Definition: idvb.h:37
int flags
Definition: idvb.h:58
int pid
Definition: idvb.h:38
int tid
Definition: idvb.h:38
int timeout
Definition: idvb.h:40
@ tfHaveTimeout
Definition: idvb.h:54
@ tfAnyVersion
Definition: idvb.h:49
@ tfHaveTID
Definition: idvb.h:51
@ tfCheckCRC
Definition: idvb.h:53