git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
dont start timers as recurring timers... this is better for blocking syscalls
[enigma2.git]
/
lib
/
dvb
/
scan.h
diff --git
a/lib/dvb/scan.h
b/lib/dvb/scan.h
index df832bd637aa934cc97e62779b470f39ad81a69a..50de21dcfeed894eb4f344dd8787f5b9da34952e 100644
(file)
--- a/
lib/dvb/scan.h
+++ b/
lib/dvb/scan.h
@@
-1,21
+1,34
@@
#ifndef __lib_dvb_scan_h
#define __lib_dvb_scan_h
#ifndef __lib_dvb_scan_h
#define __lib_dvb_scan_h
-#include <dvbsi++/network_information_section.h>
#include <dvbsi++/service_description_section.h>
#include <dvbsi++/service_description_section.h>
+#include <dvbsi++/network_information_section.h>
#include <dvbsi++/bouquet_association_section.h>
#include <dvbsi++/bouquet_association_section.h>
+#include <dvbsi++/program_association_section.h>
+#include <dvbsi++/program_map_section.h>
+
#include <lib/dvb/idemux.h>
#include <lib/dvb/esection.h>
#include <lib/dvb/db.h>
#include <lib/dvb/idemux.h>
#include <lib/dvb/esection.h>
#include <lib/dvb/db.h>
+struct service
+{
+ service(unsigned short pmtPid)
+ :pmtPid(pmtPid), serviceType(0xFF), scrambled(false)
+ {
+ }
+ unsigned short pmtPid;
+ unsigned char serviceType;
+ bool scrambled;
+};
+
class eDVBScan: public Object, public iObject
{
class eDVBScan: public Object, public iObject
{
-DECLARE_REF(eDVBScan);
-private:
+ DECLARE_REF(eDVBScan);
/* chid helper functions: */
/* heuristically determine if onid/tsid is valid */
/* chid helper functions: */
/* heuristically determine if onid/tsid is valid */
- int isValidONIDTSID(eOriginalNetworkID onid, eTransportStreamID tsid);
+ int isValidONIDTSID(
int orbital_position,
eOriginalNetworkID onid, eTransportStreamID tsid);
/* build dvb namespace */
eDVBNamespace buildNamespace(eOriginalNetworkID onid, eTransportStreamID tsid, unsigned long hash);
/* build dvb namespace */
eDVBNamespace buildNamespace(eOriginalNetworkID onid, eTransportStreamID tsid, unsigned long hash);
@@
-31,8
+44,8
@@
private:
RESULT nextChannel();
RESULT startFilter();
RESULT nextChannel();
RESULT startFilter();
- enum { ready
SDT=1, readyNIT=2, readyBAT=4
,
- valid
SDT=8, validNIT=16, validBAT=32
};
+ enum { ready
PAT=1, readySDT=2, readyNIT=4, readyBAT=8
,
+ valid
PAT=16, validSDT=32, validNIT=64, validBAT=128
};
/* scan state variables */
int m_channel_state;
/* scan state variables */
int m_channel_state;
@@
-40,41
+53,62
@@
private:
std::map<eDVBChannelID, ePtr<iDVBFrontendParameters> > m_new_channels;
std::map<eServiceReferenceDVB, ePtr<eDVBService> > m_new_services;
std::map<eDVBChannelID, ePtr<iDVBFrontendParameters> > m_new_channels;
std::map<eServiceReferenceDVB, ePtr<eDVBService> > m_new_services;
-
+ std::map<eServiceReferenceDVB, ePtr<eDVBService> >::iterator m_last_service;
+
+ std::map<unsigned short, service> m_pmts_to_read;
+ std::map<unsigned short, service>::iterator m_pmt_in_progress;
+ bool m_pmt_running;
+ bool m_abort_current_pmt;
+
std::list<ePtr<iDVBFrontendParameters> > m_ch_toScan, m_ch_scanned, m_ch_unavailable;
ePtr<iDVBFrontendParameters> m_ch_current;
eDVBChannelID m_chid_current;
std::list<ePtr<iDVBFrontendParameters> > m_ch_toScan, m_ch_scanned, m_ch_unavailable;
ePtr<iDVBFrontendParameters> m_ch_current;
eDVBChannelID m_chid_current;
-
+ eTransportStreamID m_pat_tsid;
+
ePtr<eTable<ServiceDescriptionSection> > m_SDT;
ePtr<eTable<NetworkInformationSection> > m_NIT;
ePtr<eTable<BouquetAssociationSection> > m_BAT;
ePtr<eTable<ServiceDescriptionSection> > m_SDT;
ePtr<eTable<NetworkInformationSection> > m_NIT;
ePtr<eTable<BouquetAssociationSection> > m_BAT;
-
+ ePtr<eTable<ProgramAssociationSection> > m_PAT;
+ ePtr<eTable<ProgramMapSection> > m_PMT;
+
void SDTready(int err);
void NITready(int err);
void BATready(int err);
void SDTready(int err);
void NITready(int err);
void BATready(int err);
-
+ void PATready(int err);
+ void PMTready(int err);
+
void addKnownGoodChannel(const eDVBChannelID &chid, iDVBFrontendParameters *feparm);
void addChannelToScan(const eDVBChannelID &chid, iDVBFrontendParameters *feparm);
void addKnownGoodChannel(const eDVBChannelID &chid, iDVBFrontendParameters *feparm);
void addChannelToScan(const eDVBChannelID &chid, iDVBFrontendParameters *feparm);
- int sameChannel(iDVBFrontendParameters *ch1, iDVBFrontendParameters *ch2) const;
-
+
+ int sameChannel(iDVBFrontendParameters *ch1, iDVBFrontendParameters *ch2, bool exact=false) const;
+
void channelDone();
Signal1<void,int> m_event;
RESULT processSDT(eDVBNamespace dvbnamespace, const ServiceDescriptionSection &sdt);
int m_flags;
void channelDone();
Signal1<void,int> m_event;
RESULT processSDT(eDVBNamespace dvbnamespace, const ServiceDescriptionSection &sdt);
int m_flags;
+ bool m_usePAT;
public:
public:
- eDVBScan(iDVBChannel *channel);
+ eDVBScan(iDVBChannel *channel
, bool usePAT=true, bool debug=true
);
~eDVBScan();
~eDVBScan();
-
- enum { scanNetworkSearch = 1, scanSearchBAT = 2 };
+
+ enum {
+ scanNetworkSearch = 1, scanSearchBAT = 2,
+ scanRemoveServices = 4, scanDontRemoveFeeds = 8,
+ scanDontRemoveUnscanned = 16,
+ clearToScanOnFirstNIT = 32, scanOnlyFree = 64 };
+
void start(const eSmartPtrList<iDVBFrontendParameters> &known_transponders, int flags);
void start(const eSmartPtrList<iDVBFrontendParameters> &known_transponders, int flags);
- enum { evtUpdate, evtFinish, evtFail };
- RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &connection);
- void insertInto(iDVBChannelList *db);
+ enum { evtUpdate, evt
NewService, evt
Finish, evtFail };
+
RESULT connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &connection);
+ void insertInto(iDVBChannelList *db
, bool dontRemoveNewFlags=false
);
void getStats(int &transponders_done, int &transponders_total, int &services);
void getStats(int &transponders_done, int &transponders_total, int &services);
+ void getLastServiceName(std::string &name);
+ RESULT getFrontend(ePtr<iDVBFrontend> &);
+ RESULT getCurrentTransponder(ePtr<iDVBFrontendParameters> &);
};
#endif
};
#endif