00001 // -*- Mode: c++ -*- 00002 00003 #ifndef _FIREWIRESIGNALMONITOR_H_ 00004 #define _FIREWIRESIGNALMONITOR_H_ 00005 00006 #include <qmap.h> 00007 #include <qmutex.h> 00008 #include <qdatetime.h> 00009 00010 #include "dtvsignalmonitor.h" 00011 #include "firewiredevice.h" 00012 #include "util.h" 00013 00014 class FirewireChannel; 00015 00016 class FirewireSignalMonitor : public DTVSignalMonitor, public TSDataListener 00017 { 00018 Q_OBJECT 00019 00020 public: 00021 FirewireSignalMonitor(int db_cardnum, FirewireChannel *_channel, 00022 uint64_t _flags = kFWSigMon_WaitForPower, 00023 const char *_name = "FirewireSignalMonitor"); 00024 00025 virtual void HandlePAT(const ProgramAssociationTable*); 00026 virtual void HandlePMT(uint, const ProgramMapTable*); 00027 00028 void Stop(void); 00029 00030 public slots: 00031 void deleteLater(void); 00032 00033 protected: 00034 FirewireSignalMonitor(void); 00035 FirewireSignalMonitor(const FirewireSignalMonitor&); 00036 virtual ~FirewireSignalMonitor(); 00037 00038 virtual void UpdateValues(void); 00039 void EmitFirewireSignals(void); 00040 00041 static void *TableMonitorThread(void *param); 00042 void RunTableMonitor(void); 00043 00044 bool SupportsTSMonitoring(void); 00045 00046 void AddData(const unsigned char *data, uint dataSize); 00047 00048 public: 00049 static const uint kPowerTimeout; 00050 static const uint kBufferTimeout; 00051 00052 protected: 00053 bool dtvMonitorRunning; 00054 pthread_t table_monitor_thread; 00055 bool stb_needs_retune; 00056 bool stb_needs_to_wait_for_pat; 00057 bool stb_needs_to_wait_for_power; 00058 MythTimer stb_wait_for_pat_timer; 00059 MythTimer stb_wait_for_power_timer; 00060 00061 vector<unsigned char> buffer; 00062 00063 static QMap<void*,uint> pat_keys; 00064 static QMutex pat_keys_lock; 00065 }; 00066 00067 #endif // _FIREWIRESIGNALMONITOR_H_
1.5.5