5 #include <sys/select.h> 17 #define LOC QString("FireSigMon[%1](%2): ") \ 18 .arg(inputid).arg(channel->GetDevice()) 52 dtvMonitorRunning(
false),
53 tableMonitorThread(nullptr),
54 stb_needs_retune(
true),
55 stb_needs_to_wait_for_pat(
false),
56 stb_needs_to_wait_for_power(
false)
58 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"ctor");
73 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"dtor");
82 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"Stop() -- begin");
91 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"Stop() -- end");
106 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"HandlePAT() ignoring PAT");
114 LOG(VB_GENERAL, LOG_WARNING,
LOC +
"Wait for valid PAT timed out");
123 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"HandlePMT()");
130 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"HandlePMT() ignoring PMT");
143 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"RunTableMonitor(): -- begin");
148 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"RunTableMonitor(): -- err");
150 std::this_thread::sleep_for(std::chrono::milliseconds(10));
152 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"RunTableMonitor(): -- err end");
162 std::this_thread::sleep_for(std::chrono::milliseconds(10));
164 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"RunTableMonitor(): -- shutdown ");
170 std::this_thread::sleep_for(std::chrono::milliseconds(10));
172 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"RunTableMonitor(): -- end");
223 bool retried =
false;
241 if (qfailed && !retried)
247 LOG(VB_RECORD, LOG_WARNING,
248 "Can't determine if STB is power on, assuming it is...");
292 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"UpdateValues() -- " 293 "Waiting for table monitor to start");
296 std::this_thread::sleep_for(std::chrono::milliseconds(5));
298 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"UpdateValues() -- " 299 "Table monitor started");
void RunEpilog(void)
Cleans up a thread's resources, call this if you reimplement run().
void HandlePMT(uint, const ProgramMapTable *) override
void HandlePAT(const ProgramAssociationTable *) override
static const uint kPowerTimeout
static const uint64_t kDTVSigMon_PATSeen
We've seen a PAT, which maps MPEG program numbers to pids where we find PMTs.
VERBOSE_PREAMBLE Most true
FirewireTableMonitorThread * tableMonitorThread
static const uint kBufferTimeout
static const uint64_t kDTVSigMon_WaitForPMT
static const uint64_t kDTVSigMon_WaitForPAT
virtual ~FirewireSignalMonitor()
Stops signal monitoring and table monitoring threads.
bool wait(unsigned long time=ULONG_MAX)
Wait for the MThread to exit, with a maximum timeout.
bool HasAnyFlag(uint64_t _flags) const
static const uint64_t kFWSigMon_PowerMatch
We've seen a FireWire STB power state matching our requirements.
static const uint64_t kDTVSigMon_PMTSeen
We've seen a PMT, which maps program to audio, video and other stream PIDs.
void HandlePMT(uint, const ProgramMapTable *) override
static const uint64_t kDTVSigMon_WaitForVCT
static const uint64_t kDTVSigMon_WaitForMGT
FirewireSignalMonitor * m_parent
SignalMonitorValue signalLock
void SetVersionPMT(uint pnum, int version, uint last_section)
static QMutex pat_keys_lock
void SetValue(int _value)
bool Retune(void) override
FirewireSignalMonitor(void)
static const uint64_t kDTVSigMon_WaitForNIT
virtual void Stop()
Stop signal monitoring thread.
bool stb_needs_to_wait_for_pat
static const uint64_t kSigMon_WaitForSig
volatile bool dtvMonitorRunning
void RunTableMonitor(void)
virtual FirewireDevice::PowerState GetPowerState(void) const
FirewireChannel Copyright (c) 2005 by Jim Westfall and Dave Abrahams Distributed as part of MythTV un...
static const uint64_t kFWSigMon_PowerSeen
We've seen the FireWire STB power state.
MPEGStreamData * GetStreamData()
Returns the MPEG stream data if it exists.
void SendMessageAllGood(void)
virtual int ProcessData(const unsigned char *buffer, int len)
The Program Association Table lists all the programs in a stream, and is always found on PID 0.
uint TransportStreamID(void) const
void HandlePAT(const ProgramAssociationTable *) override
static const uint64_t kDTVSigMon_PATMatch
We've seen a PAT matching our requirements.
int elapsed(void) const
Returns milliseconds elapsed since last start() or restart()
This class is intended to detect the presence of needed tables.
void Stop(void) override
Stop signal monitoring and table monitoring threads.
virtual FirewireDevice * GetFirewireDevice(void)
MythTimer stb_wait_for_pat_timer
void AddFlags(uint64_t _flags) override
bool stb_needs_to_wait_for_power
void SetVersionPAT(uint tsid, int version, uint last_section)
#define LOG(_MASK_, _LEVEL_, _STRING_)
bool IsAllGood(void) const override
virtual void RemoveListener(TSDataListener *)
void RunProlog(void)
Sets up a thread, call this if you reimplement run().
static const uint64_t kDTVSigMon_WaitForSDT
SignalMonitorValue signalStrength
static const uint64_t kFWSigMon_WaitForPower
SignalMonitorValue scriptStatus
static QMap< void *, uint > pat_keys
virtual bool ClosePort(void)=0
virtual bool OpenPort(void)=0
virtual void AddListener(TSDataListener *)
void run(void) override
Runs the Qt event loop unless we have a QRunnable, in which case we run the runnable run instead.
bool IsGood() const
Returns true if the value is equal to the threshold, or on the right side of the threshold (depends o...
friend class FirewireTableMonitorThread
void SetThreshold(int _threshold)
void UpdateValues(void) override
Fills in frontend stats and emits status Qt signals.
A PMT table maps a program described in the ProgramAssociationTable to various PID's which describe t...
void start(void)
starts measuring elapsed time.
virtual void EmitStatus(void)
MythTimer stb_wait_for_power_timer
virtual void UpdateValues(void)
This should be overridden to actually do signal monitoring.
bool IsSTBBufferCleared(void) const
bool HasFlags(uint64_t _flags) const
virtual bool SetPowerState(bool on)
void AddData(const unsigned char *data, uint dataSize) override
Callback function to add MPEG2 TS data.