7#if QT_VERSION >= QT_VERSION_CHECK(6,0,0)
8#include <QtSystemDetection>
14#include <sys/select.h>
28#define LOC QString("ExternSigMon[%1](%2): ").arg(m_inputid).arg(m_loc)
50 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"ctor");
56 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Open failed");
75 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"dtor");
86 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"Stop() -- begin");
96 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"Stop() -- end");
111 if (channel ==
nullptr)
137 m_error = QObject::tr(
"Error: stream handler died");
190 if (result.startsWith(
"OK:"))
192 return result.mid(3, 3) ==
"Yes";
194 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
195 (
"HasLock: invalid response '%1'").arg(result));
196 if (!result.startsWith(
"WARN"))
197 m_error = QString(
"HasLock: invalid response '%1'").arg(result);
206 if (result.startsWith(
"OK:"))
209 int percent = result.mid(3).toInt(&ok);
212 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
213 (
"GetSignalStrengthPercent: invalid response '%1'")
219 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
220 (
"GetSignalStrengthPercent: invalid response '%1'").arg(result));
221 if (!result.startsWith(
"WARN"))
222 m_error = QString(
"GetSignalStrengthPercent: invalid response '%1'")
232 if (result.startsWith(
"OK:"))
235 auto timeout = std::chrono::seconds(result.mid(3).toInt(&ok));
238 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
239 (
"GetLockTimeout: invalid response '%1'")
245 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
246 (
"GetLockTimeout: invalid response '%1'").arg(result));
247 if (!result.startsWith(
"WARN"))
248 m_error = QString(
"GetLockTimeout: invalid response '%1'").arg(result);
virtual bool IsExternalChannelChangeInUse(void)
virtual int GetInputID(void) const
virtual QString GetDevice(void) const
Returns String representing device, useful for debugging.
This class is intended to detect the presence of needed tables.
bool IsAllGood(void) const override
void AddFlags(uint64_t _flags) override
MPEGStreamData * GetStreamData()
Returns the MPEG stream data if it exists.
bool IsBackgroundTuning(void) const
ExternalSignalMonitor(void)
ExternalChannel * GetExternalChannel(void)
int GetSignalStrengthPercent(void)
void UpdateValues(void) override
Fills in frontend stats and emits status Qt signals.
ExternalStreamHandler * m_streamHandler
std::chrono::seconds GetLockTimeout(void)
bool m_streamHandlerStarted
void Stop(void) override
Stop signal monitoring and table monitoring threads.
~ExternalSignalMonitor() override
Stops signal monitoring and table monitoring threads.
std::chrono::milliseconds m_lockTimeout
static ExternalStreamHandler * Get(const QString &devname, int inputid, int majorid)
bool ProcessCommand(const QString &cmd, QString &result, std::chrono::milliseconds timeout=4s, uint retry_cnt=3)
bool StartStreaming(void)
static void Return(ExternalStreamHandler *&ref, int inputid)
int GetValue() const
Returns the value.
bool IsGood() const
Returns true if the value is equal to the threshold, or on the right side of the threshold (depends o...
void SetValue(int _value)
static const uint64_t kDTVSigMon_WaitForVCT
QRecursiveMutex m_statusLock
void SendMessageAllGood(void)
SignalMonitorValue m_signalLock
static const uint64_t kDTVSigMon_WaitForNIT
SignalMonitorValue m_scriptStatus
static const uint64_t kDTVSigMon_WaitForSDT
virtual void Stop()
Stop signal monitoring thread.
static const uint64_t kDTVSigMon_WaitForPMT
virtual void EmitStatus(void)
static const uint64_t kSigMon_WaitForSig
static const uint64_t kDTVSigMon_WaitForPAT
static const uint64_t kDTVSigMon_WaitForMGT
virtual void UpdateValues(void)
This should be overridden to actually do signal monitoring.
SignalMonitorValue m_signalStrength
bool HasAnyFlag(uint64_t _flags) const
bool HasError(void) const
bool IsRunning(void) const
virtual void RemoveListener(MPEGStreamData *data)
virtual void AddListener(MPEGStreamData *data, bool allow_section_reader=false, bool needs_buffering=false, const QString &output_file=QString())
#define LOG(_MASK_, _LEVEL_, _QSTRING_)