00001
00002
00003 #ifndef DTVSIGNALMONITOR_H
00004 #define DTVSIGNALMONITOR_H
00005
00006 #include <vector>
00007 using namespace std;
00008
00009 #include "signalmonitor.h"
00010 #include "signalmonitorvalue.h"
00011 #include "streamlisteners.h"
00012
00013 class DTVChannel;
00014
00015 class DTVSignalMonitor : public SignalMonitor,
00016 public MPEGStreamListener,
00017 public ATSCMainStreamListener,
00018 public ATSCAuxStreamListener,
00019 public DVBMainStreamListener
00020 {
00021 Q_OBJECT
00022 public:
00023 DTVSignalMonitor(int db_cardnum,
00024 DTVChannel *_channel,
00025 uint64_t wait_for_mask,
00026 const char *name = "DTVSignalMonitor");
00027 ~DTVSignalMonitor();
00028
00029 public slots:
00030 void deleteLater(void);
00031
00032 public:
00033 virtual QStringList GetStatusList(bool kick = true);
00034
00035 void SetChannel(int major, int minor);
00036 int GetMajorChannel() const { return majorChannel; }
00037 int GetMinorChannel() const { return minorChannel; }
00038
00039 void SetProgramNumber(int progNum);
00040 int GetProgramNumber() const { return programNumber; }
00041
00042 void SetDVBService(uint network_id, uint transport_id, int service_id);
00043 uint GetTransportID(void) const { return transportID; }
00044 uint GetNetworkID(void) const { return networkID; }
00045 int GetServiceID(void) const { return programNumber; }
00046
00047 uint GetDetectedNetworkID(void) const { return detectedNetworkID; }
00048 uint GetDetectedTransportID(void) const { return detectedTransportID; }
00049
00051 virtual void SetRotorTarget(float) {}
00052 virtual void GetRotorStatus(bool &was_moving, bool &is_moving)
00053 { was_moving = is_moving = false; }
00054 virtual void SetRotorValue(int) {}
00055
00056 virtual void AddFlags(uint64_t _flags);
00057 virtual void RemoveFlags(uint64_t _flags);
00058
00061 void SetStreamData(MPEGStreamData* data);
00062
00064 MPEGStreamData *GetStreamData() { return stream_data; }
00066 ATSCStreamData *GetATSCStreamData();
00068 DVBStreamData *GetDVBStreamData();
00070 ScanStreamData *GetScanStreamData();
00071
00073 const MPEGStreamData *GetStreamData() const { return stream_data; }
00075 const ATSCStreamData *GetATSCStreamData() const;
00077 const DVBStreamData *GetDVBStreamData() const;
00079 const ScanStreamData *GetScanStreamData() const;
00080
00081 bool IsAllGood(void) const;
00082
00083 bool WaitForLock(int timeout=-1);
00084
00085
00086 void HandlePAT(const ProgramAssociationTable*);
00087 void HandleCAT(const ConditionalAccessTable*) {}
00088 void HandlePMT(uint, const ProgramMapTable*);
00089 void HandleEncryptionStatus(uint, bool enc_status);
00090
00091
00092 void HandleSTT(const SystemTimeTable*);
00093 void HandleVCT(uint , const VirtualChannelTable*) {}
00094 void HandleMGT(const MasterGuideTable*);
00095
00096
00097 void HandleTVCT(uint, const TerrestrialVirtualChannelTable*);
00098 void HandleCVCT(uint, const CableVirtualChannelTable*);
00099 void HandleRRT(const RatingRegionTable*) {}
00100 void HandleDCCT(const DirectedChannelChangeTable*) {}
00101 void HandleDCCSCT(
00102 const DirectedChannelChangeSelectionCodeTable*) {}
00103
00104
00105 void HandleTDT(const TimeDateTable*);
00106 void HandleNIT(const NetworkInformationTable*);
00107 void HandleSDT(uint, const ServiceDescriptionTable*);
00108
00109 void IgnoreEncrypted(bool ignore) { ignore_encrypted = ignore; }
00110
00111 protected:
00112 DTVChannel *GetDTVChannel(void);
00113 void UpdateMonitorValues(void);
00114 void UpdateListeningForEIT(void);
00115
00116 protected:
00117 MPEGStreamData *stream_data;
00118 vector<uint> eit_pids;
00119 SignalMonitorValue seenPAT;
00120 SignalMonitorValue seenPMT;
00121 SignalMonitorValue seenMGT;
00122 SignalMonitorValue seenVCT;
00123 SignalMonitorValue seenNIT;
00124 SignalMonitorValue seenSDT;
00125 SignalMonitorValue seenCrypt;
00126 SignalMonitorValue matchingPAT;
00127 SignalMonitorValue matchingPMT;
00128 SignalMonitorValue matchingMGT;
00129 SignalMonitorValue matchingVCT;
00130 SignalMonitorValue matchingNIT;
00131 SignalMonitorValue matchingSDT;
00132 SignalMonitorValue matchingCrypt;
00133
00134
00135 int majorChannel;
00136 int minorChannel;
00137
00138 uint networkID;
00139 uint transportID;
00140
00141 uint detectedNetworkID;
00142 uint detectedTransportID;
00143
00144 int programNumber;
00145
00146 int64_t last_pat_crc;
00147
00148 QString error;
00149
00150 bool ignore_encrypted;
00151 };
00152
00153 #endif // DTVSIGNALMONITOR_H