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 public:
00022 DTVSignalMonitor(int db_cardnum,
00023 DTVChannel *_channel,
00024 uint64_t wait_for_mask);
00025 virtual ~DTVSignalMonitor();
00026
00027 public:
00028 virtual QStringList GetStatusList(void) const;
00029
00030 void SetChannel(int major, int minor);
00031 int GetMajorChannel() const { return majorChannel; }
00032 int GetMinorChannel() const { return minorChannel; }
00033
00034 void SetProgramNumber(int progNum);
00035 int GetProgramNumber() const { return programNumber; }
00036
00037 void SetDVBService(uint network_id, uint transport_id, int service_id);
00038 uint GetTransportID(void) const { return transportID; }
00039 uint GetNetworkID(void) const { return networkID; }
00040 int GetServiceID(void) const { return programNumber; }
00041
00042 uint GetDetectedNetworkID(void) const { return detectedNetworkID; }
00043 uint GetDetectedTransportID(void) const { return detectedTransportID; }
00044
00046 virtual void SetRotorTarget(float) {}
00047 virtual void GetRotorStatus(bool &was_moving, bool &is_moving)
00048 { was_moving = is_moving = false; }
00049 virtual void SetRotorValue(int) {}
00050
00051 virtual void AddFlags(uint64_t _flags);
00052 virtual void RemoveFlags(uint64_t _flags);
00053
00056 void SetStreamData(MPEGStreamData* data);
00057
00059 MPEGStreamData *GetStreamData() { return stream_data; }
00061 ATSCStreamData *GetATSCStreamData();
00063 DVBStreamData *GetDVBStreamData();
00065 ScanStreamData *GetScanStreamData();
00066
00068 const MPEGStreamData *GetStreamData() const { return stream_data; }
00070 const ATSCStreamData *GetATSCStreamData() const;
00072 const DVBStreamData *GetDVBStreamData() const;
00074 const ScanStreamData *GetScanStreamData() const;
00075
00076 virtual bool IsAllGood(void) const;
00077
00078
00079 void HandlePAT(const ProgramAssociationTable*);
00080 void HandleCAT(const ConditionalAccessTable*) {}
00081 void HandlePMT(uint, const ProgramMapTable*);
00082 void HandleEncryptionStatus(uint, bool enc_status);
00083
00084
00085 void HandleSTT(const SystemTimeTable*);
00086 void HandleVCT(uint , const VirtualChannelTable*) {}
00087 void HandleMGT(const MasterGuideTable*);
00088
00089
00090 void HandleTVCT(uint, const TerrestrialVirtualChannelTable*);
00091 void HandleCVCT(uint, const CableVirtualChannelTable*);
00092 void HandleRRT(const RatingRegionTable*) {}
00093 void HandleDCCT(const DirectedChannelChangeTable*) {}
00094 void HandleDCCSCT(
00095 const DirectedChannelChangeSelectionCodeTable*) {}
00096
00097
00098 void HandleTDT(const TimeDateTable*);
00099 void HandleNIT(const NetworkInformationTable*);
00100 void HandleSDT(uint, const ServiceDescriptionTable*);
00101
00102 void IgnoreEncrypted(bool ignore) { ignore_encrypted = ignore; }
00103
00104 protected:
00105 DTVChannel *GetDTVChannel(void);
00106 void UpdateMonitorValues(void);
00107 void UpdateListeningForEIT(void);
00108
00109 protected:
00110 MPEGStreamData *stream_data;
00111 vector<uint> eit_pids;
00112 SignalMonitorValue seenPAT;
00113 SignalMonitorValue seenPMT;
00114 SignalMonitorValue seenMGT;
00115 SignalMonitorValue seenVCT;
00116 SignalMonitorValue seenNIT;
00117 SignalMonitorValue seenSDT;
00118 SignalMonitorValue seenCrypt;
00119 SignalMonitorValue matchingPAT;
00120 SignalMonitorValue matchingPMT;
00121 SignalMonitorValue matchingMGT;
00122 SignalMonitorValue matchingVCT;
00123 SignalMonitorValue matchingNIT;
00124 SignalMonitorValue matchingSDT;
00125 SignalMonitorValue matchingCrypt;
00126
00127
00128 int majorChannel;
00129 int minorChannel;
00130
00131 uint networkID;
00132 uint transportID;
00133
00134 uint detectedNetworkID;
00135 uint detectedTransportID;
00136
00137 int programNumber;
00138
00139 QList<uint64_t> seen_table_crc;
00140
00141 bool ignore_encrypted;
00142 };
00143
00144 #endif // DTVSIGNALMONITOR_H