00001 // -*- Mode: c++ -*- 00002 00003 #ifndef _FIREWIRESIGNALMONITOR_H_ 00004 #define _FIREWIRESIGNALMONITOR_H_ 00005 00006 // C++ headers 00007 #include <vector> 00008 using namespace std; 00009 00010 // Qt headers 00011 #include <QMutex> 00012 #include <QMap> 00013 00014 // MythTV headers 00015 #include "dtvsignalmonitor.h" 00016 #include "firewiredevice.h" 00017 #include "mthread.h" 00018 #include "mythmiscutil.h" 00019 00020 class FirewireChannel; 00021 00022 class FirewireSignalMonitor; 00023 00024 class FirewireTableMonitorThread : public MThread 00025 { 00026 public: 00027 FirewireTableMonitorThread(FirewireSignalMonitor *p) : 00028 MThread("FirewireTableMonitor"), m_parent(p) { start(); } 00029 virtual ~FirewireTableMonitorThread() { wait(); m_parent = NULL; } 00030 virtual void run(void); 00031 private: 00032 FirewireSignalMonitor *m_parent; 00033 }; 00034 00035 class FirewireSignalMonitor : public DTVSignalMonitor, public TSDataListener 00036 { 00037 friend class FirewireTableMonitorThread; 00038 public: 00039 FirewireSignalMonitor(int db_cardnum, FirewireChannel *_channel, 00040 uint64_t _flags = kFWSigMon_WaitForPower); 00041 00042 virtual void HandlePAT(const ProgramAssociationTable*); 00043 virtual void HandlePMT(uint, const ProgramMapTable*); 00044 00045 void Stop(void); 00046 00047 protected: 00048 FirewireSignalMonitor(void); 00049 FirewireSignalMonitor(const FirewireSignalMonitor&); 00050 virtual ~FirewireSignalMonitor(); 00051 00052 virtual void UpdateValues(void); 00053 00054 void RunTableMonitor(void); 00055 00056 bool SupportsTSMonitoring(void); 00057 00058 void AddData(const unsigned char *data, uint dataSize); 00059 00060 public: 00061 static const uint kPowerTimeout; 00062 static const uint kBufferTimeout; 00063 00064 protected: 00065 volatile bool dtvMonitorRunning; 00066 FirewireTableMonitorThread *tableMonitorThread; 00067 bool stb_needs_retune; 00068 bool stb_needs_to_wait_for_pat; 00069 bool stb_needs_to_wait_for_power; 00070 MythTimer stb_wait_for_pat_timer; 00071 MythTimer stb_wait_for_power_timer; 00072 00073 vector<unsigned char> buffer; 00074 00075 static QMap<void*,uint> pat_keys; 00076 static QMutex pat_keys_lock; 00077 }; 00078 00079 #endif // _FIREWIRESIGNALMONITOR_H_
1.6.3