00001 // -*- Mode: c++ -*- 00002 #ifndef EITSCANNER_H 00003 #define EITSCANNER_H 00004 00005 // Qt includes 00006 #include <QWaitCondition> 00007 #include <QStringList> 00008 #include <QDateTime> 00009 #include <QRunnable> 00010 #include <QMutex> 00011 00012 class TVRec; 00013 class MThread; 00014 class ChannelBase; 00015 class DVBSIParser; 00016 class EITHelper; 00017 class ProgramMapTable; 00018 00019 class EITSource 00020 { 00021 protected: 00022 virtual ~EITSource() {} 00023 public: 00024 virtual void SetEITHelper(EITHelper*) = 0; 00025 virtual void SetEITRate(float rate) = 0; 00026 }; 00027 00028 class EITScanner; 00029 00030 class EITScanner : public QRunnable 00031 { 00032 public: 00033 EITScanner(uint cardnum); 00034 ~EITScanner() { TeardownAll(); } 00035 00036 void StartPassiveScan(ChannelBase*, EITSource*); 00037 void StopPassiveScan(void); 00038 00039 void StartActiveScan(TVRec*, uint max_seconds_per_source); 00040 00041 void StopActiveScan(void); 00042 00043 protected: 00044 void run(void); 00045 00046 private: 00047 void TeardownAll(void); 00048 static void *SpawnEventLoop(void*); 00049 static void RescheduleRecordings(void); 00050 00051 QMutex lock; 00052 ChannelBase *channel; 00053 EITSource *eitSource; 00054 00055 EITHelper *eitHelper; 00056 MThread *eventThread; 00057 volatile bool exitThread; 00058 QWaitCondition exitThreadCond; // protected by lock 00059 00060 TVRec *rec; 00061 volatile bool activeScan; 00062 volatile bool activeScanStopped; // protected by lock 00063 QWaitCondition activeScanCond; // protected by lock 00064 QDateTime activeScanNextTrig; 00065 uint activeScanTrigTime; 00066 QStringList activeScanChannels; 00067 QStringList::iterator activeScanNextChan; 00068 00069 uint cardnum; 00070 00071 static QMutex resched_lock; 00072 static QDateTime resched_next_time; 00073 00075 static const uint kMinRescheduleInterval; 00076 }; 00077 00078 #endif // EITSCANNER_H
1.6.3