Go to the documentation of this file.
8 #if !defined(USING_MINGW) && !defined(_WIN32)
9 #include <sys/select.h>
23 #define LOC QString("ExternSigMon[%1](%2): ").arg(m_inputid).arg(m_loc)
45 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"ctor");
51 LOG(VB_GENERAL, LOG_ERR,
LOC +
"Open failed");
70 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"dtor");
81 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"Stop() -- begin");
91 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"Stop() -- end");
106 if (channel ==
nullptr)
132 m_error = QObject::tr(
"Error: stream handler died");
185 if (result.startsWith(
"OK:"))
187 return result.mid(3, 3) ==
"Yes";
189 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
190 (
"HasLock: invalid response '%1'").arg(result));
191 if (!result.startsWith(
"WARN"))
192 m_error = QString(
"HasLock: invalid response '%1'").arg(result);
201 if (result.startsWith(
"OK:"))
204 int percent = result.mid(3).toInt(&ok);
207 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
208 (
"GetSignalStrengthPercent: invalid response '%1'")
214 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
215 (
"GetSignalStrengthPercent: invalid response '%1'").arg(result));
216 if (!result.startsWith(
"WARN"))
217 m_error = QString(
"GetSignalStrengthPercent: invalid response '%1'")
227 if (result.startsWith(
"OK:"))
230 auto timeout = std::chrono::seconds(result.mid(3).toInt(&ok));
233 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
234 (
"GetLockTimeout: invalid response '%1'")
240 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
241 (
"GetLockTimeout: invalid response '%1'").arg(result));
242 if (!result.startsWith(
"WARN"))
243 m_error = QString(
"GetLockTimeout: invalid response '%1'").arg(result);
void AddFlags(uint64_t _flags) override
void SetValue(int _value)
bool HasError(void) const
static const uint64_t kDTVSigMon_WaitForMGT
std::chrono::milliseconds m_lockTimeout
MPEGStreamData * GetStreamData()
Returns the MPEG stream data if it exists.
bool IsBackgroundTuning(void) const
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
bool HasAnyFlag(uint64_t _flags) const
static const uint64_t kSigMon_WaitForSig
int GetSignalStrengthPercent(void)
virtual void RemoveListener(MPEGStreamData *data)
QRecursiveMutex m_statusLock
SignalMonitorValue m_scriptStatus
int GetValue() const
Returns the value.
~ExternalSignalMonitor() override
Stops signal monitoring and table monitoring threads.
SignalMonitorValue m_signalStrength
std::chrono::seconds GetLockTimeout(void)
SignalMonitorValue m_signalLock
void SendMessageAllGood(void)
static const uint64_t kDTVSigMon_WaitForPMT
static const uint64_t kDTVSigMon_WaitForPAT
static const uint64_t kDTVSigMon_WaitForNIT
virtual void EmitStatus(void)
static const uint64_t kDTVSigMon_WaitForSDT
virtual void UpdateValues(void)
This should be overridden to actually do signal monitoring.
virtual bool IsExternalChannelChangeInUse(void)
static ExternalStreamHandler * Get(const QString &devname, int inputid, int majorid)
bool StartStreaming(void)
bool IsGood() const
Returns true if the value is equal to the threshold, or on the right side of the threshold (depends o...
ExternalChannel * GetExternalChannel(void)
bool ProcessCommand(const QString &cmd, QString &result, std::chrono::milliseconds timeout=4s, uint retry_cnt=3)
This class is intended to detect the presence of needed tables.
virtual int GetInputID(void) const
void UpdateValues(void) override
Fills in frontend stats and emits status Qt signals.
virtual QString GetDevice(void) const
Returns String representing device, useful for debugging.
bool m_streamHandlerStarted
virtual void AddListener(MPEGStreamData *data, bool allow_section_reader=false, bool needs_buffering=false, const QString &output_file=QString())
ExternalStreamHandler * m_streamHandler
void Stop(void) override
Stop signal monitoring and table monitoring threads.
bool IsRunning(void) const
virtual void Stop()
Stop signal monitoring thread.
bool IsAllGood(void) const override
static void Return(ExternalStreamHandler *&ref, int inputid)
ExternalSignalMonitor(void)
static const uint64_t kDTVSigMon_WaitForVCT