fixes for /dev/misc/pvr opening problems in some conditions
[enigma2.git] / lib / dvb / epgcache.h
index 98a38451a2f1b3cfc727fcc2981e0f37384378ef..dfd19482ca252b379e1e03e576e9e6c965489d3e 100644 (file)
@@ -155,15 +155,15 @@ class eEPGCache: public eMainloop, private eThread, public Object
                pthread_mutex_t channel_active;
                channel_data(eEPGCache*);
                eEPGCache *cache;
-               eTimer abortTimer, zapTimer;
+               ePtr<eTimer> abortTimer, zapTimer;
                int prevChannelState;
                __u8 state, isRunning, haveData;
                ePtr<eDVBChannel> channel;
-               ePtr<eConnection> m_stateChangedConn, m_NowNextConn, m_ScheduleConn, m_ScheduleOtherConn;
-               ePtr<iDVBSectionReader> m_NowNextReader, m_ScheduleReader, m_ScheduleOtherReader;
-               tidMap seenSections[3], calcedSections[3];
+               ePtr<eConnection> m_stateChangedConn, m_NowNextConn, m_ScheduleConn, m_ScheduleOtherConn, m_ViasatConn;
+               ePtr<iDVBSectionReader> m_NowNextReader, m_ScheduleReader, m_ScheduleOtherReader, m_ViasatReader;
+               tidMap seenSections[4], calcedSections[4];
 #ifdef ENABLE_PRIVATE_EPG
-               eTimer startPrivateTimer;
+               ePtr<eTimer> startPrivateTimer;
                int m_PrevVersion;
                int m_PrivatePid;
                uniqueEPGKey m_PrivateService;
@@ -181,7 +181,7 @@ class eEPGCache: public eMainloop, private eThread, public Object
                ePtr<eConnection> m_MHWConn, m_MHWConn2;
                ePtr<iDVBSectionReader> m_MHWReader, m_MHWReader2;
                eDVBSectionFilterMask m_MHWFilterMask, m_MHWFilterMask2;
-               eTimer m_MHWTimeoutTimer;
+               ePtr<eTimer> m_MHWTimeoutTimer;
                bool m_MHWTimeoutet;
                void MHWTimeout() { m_MHWTimeoutet=true; }
                void readMHWData(const __u8 *data);
@@ -198,18 +198,20 @@ class eEPGCache: public eMainloop, private eThread, public Object
                void storeTitle(std::map<__u32, mhw_title_t>::iterator itTitle, std::string sumText, const __u8 *data);
 #endif
                void readData(const __u8 *data);
+               void readDataViasat(const __u8 *data);
                void startChannel();
                void startEPG();
                bool finishEPG();
                void abortEPG();
                void abortNonAvail();
        };
-       void FixOverlapping(std::pair<eventMap,timeMap> &servicemap, time_t TM, int duration, const timeMap::iterator &tm_it, const uniqueEPGKey &service);
+       bool FixOverlapping(std::pair<eventMap,timeMap> &servicemap, time_t TM, int duration, const timeMap::iterator &tm_it, const uniqueEPGKey &service);
 public:
        enum {PRIVATE=0, NOWNEXT=1, SCHEDULE=2, SCHEDULE_OTHER=4
 #ifdef ENABLE_MHW_EPG
        ,MHW=8
 #endif
+       ,VIASAT=16
        };
        struct Message
        {
@@ -249,7 +251,7 @@ private:
        friend class channel_data;
        static eEPGCache *instance;
 
-       eTimer cleanTimer;
+       ePtr<eTimer> cleanTimer;
        std::map<iDVBChannel*, channel_data*> m_knownChannels;
        ePtr<eConnection> m_chanAddedConn;
 
@@ -309,9 +311,9 @@ public:
 #ifndef SWIG
        // eventData's are plain entrys out of the cache.. it's not safe to use them after cache unlock
        // but its faster in use... its not allowed to delete this pointers via delete or free..
-       SWIG_VOID(RESULT) lookupEventId(const eServiceReference &service, int event_id, const eventData *&SWIG_OUTPUT);
-       SWIG_VOID(RESULT) lookupEventTime(const eServiceReference &service, time_t, const eventData *&SWIG_OUTPUT, int direction=0);
-       SWIG_VOID(RESULT) getNextTimeEntry(const eventData *&SWIG_OUTPUT);
+       RESULT lookupEventId(const eServiceReference &service, int event_id, const eventData *&);
+       RESULT lookupEventTime(const eServiceReference &service, time_t, const eventData *&, int direction=0);
+       RESULT getNextTimeEntry(const eventData *&);
 
        // eit_event_struct's are plain dvb eit_events .. it's not safe to use them after cache unlock
        // its not allowed to delete this pointers via delete or free..