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");
68 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"dtor");
79 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"Stop() -- begin");
89 LOG(VB_CHANNEL, LOG_INFO,
LOC +
"Stop() -- end");
104 if (channel ==
nullptr)
130 m_error = QObject::tr(
"Error: stream handler died");
183 if (result.startsWith(
"OK:"))
185 return result.mid(3, 3) ==
"Yes";
187 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
188 (
"HasLock: invalid response '%1'").arg(result));
189 if (!result.startsWith(
"WARN"))
190 m_error = QString(
"HasLock: invalid response '%1'").arg(result);
199 if (result.startsWith(
"OK:"))
202 int percent = result.mid(3).toInt(&ok);
205 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
206 (
"GetSignalStrengthPercent: invalid response '%1'")
212 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
213 (
"GetSignalStrengthPercent: invalid response '%1'").arg(result));
214 if (!result.startsWith(
"WARN"))
215 m_error = QString(
"GetSignalStrengthPercent: invalid response '%1'")
225 if (result.startsWith(
"OK:"))
228 auto timeout = std::chrono::seconds(result.mid(3).toInt(&ok));
231 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
232 (
"GetLockTimeout: invalid response '%1'")
238 LOG(VB_CHANNEL, LOG_ERR,
LOC + QString
239 (
"GetLockTimeout: invalid response '%1'").arg(result));
240 if (!result.startsWith(
"WARN"))
241 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