MythTV  master
dvbsignalmonitor.cpp
Go to the documentation of this file.
1 // -*- Mode: c++ -*-
2 
3 #include <cerrno>
4 #include <cmath>
5 #include <cstring>
6 
7 #include <unistd.h>
8 
9 //Qt headers
10 #include <QCoreApplication>
11 
12 // MythTV headers
13 #include "libmyth/mythcontext.h"
14 #include "libmythbase/mythdbcon.h"
15 
16 #include "cardutil.h"
17 #include "dvbchannel.h"
18 #include "dvbrecorder.h"
19 #include "dvbsignalmonitor.h"
20 #include "dvbstreamhandler.h"
21 #include "dvbtypes.h"
22 #include "mpeg/atscstreamdata.h"
23 #include "mpeg/atsctables.h"
24 #include "mpeg/dvbstreamdata.h"
25 #include "mpeg/mpegtables.h"
26 
27 #define LOC QString("DVBSigMon[%1](%2): ") \
28  .arg(m_inputid).arg(m_channel->GetDevice())
29 
46  bool _release_stream,
47  uint64_t _flags)
48  : DTVSignalMonitor(db_cardnum, _channel, _release_stream, _flags),
49  // This snr setup is incorrect for API 3.x but works better
50  // than int16_t range in practice, however this is correct
51  // for the 4.0 DVB API which uses a uint16_t for the snr
52  m_signalToNoise (QCoreApplication::translate("(Common)",
53  "Signal To Noise"), "snr",
54  0, true, 0, 65535, 0ms),
55  m_bitErrorRate (tr("Bit Error Rate"), "ber",
56  65535, false, 0, 65535, 0ms),
57  m_uncorrectedBlocks(tr("Uncorrected Blocks"), "ucb",
58  65535, false, 0, 65535, 0ms),
59  m_rotorPosition (tr("Rotor Progress"), "pos",
60  100, true, 0, 100, 0ms),
61  m_streamHandlerStarted(false),
62  m_streamHandler(nullptr)
63 {
64  // This value should probably come from the database...
65  int threshold = 0; // signal strength threshold
66 
67  // Tuning timeout time for channel lock from database, minimum is 3s
68  std::chrono::milliseconds wait = 3s; // Minimum timeout time
69  std::chrono::milliseconds signal_timeout = 0ms; // Not used
70  std::chrono::milliseconds tuning_timeout = 0ms; // Maximum time for channel lock from card
71  CardUtil::GetTimeouts(db_cardnum, signal_timeout, tuning_timeout);
72  if (tuning_timeout < wait)
73  {
74  LOG(VB_CHANNEL, LOG_DEBUG, LOC +
75  QString("Tuning timeout from database: %1 ms is too small, using %2 ms")
76  .arg(tuning_timeout.count()).arg(wait.count()));
77  }
78  else
79  {
80  wait = tuning_timeout; // Use value from database
81  LOG(VB_CHANNEL, LOG_DEBUG, LOC +
82  QString("Tuning timeout: %1 ms").arg(wait.count()));
83  }
84 
87  m_signalStrength.SetThreshold(threshold);
88 
89  // This is incorrect for API 3.x but works better than int16_t range
90  // in practice, however this is correct for the 4.0 DVB API
91  m_signalStrength.SetRange(0, 65535);
92 
93  // Determine the signal monitoring capabilities from the card and
94  // do not use the capabilities that are not present.
95  uint64_t rmflags = 0;
96  bool mok = false;
97 
98  auto log_message = [&mok](const QString& loc, const QString& msg)
99  {
100  if (mok)
101  LOG(VB_CHANNEL, LOG_INFO, loc + "Can " + msg);
102  else
103  LOG(VB_GENERAL, LOG_WARNING, loc + "Cannot " + msg + ENO);
104  };
105 
106  auto update_rmflags = [&mok, &rmflags](uint64_t flag)
107  {
108  if (!mok)
109  rmflags |= flag;
110  };
111 
112  // Signal strength
113  auto flag = kSigMon_WaitForSig;
114  if (HasFlags(flag))
115  {
116  _channel->GetSignalStrength(&mok);
117  update_rmflags(flag);
118  log_message(LOC, "measure Signal Strength");
119  }
120 
121  // Signal/Noise ratio
122  flag = kDVBSigMon_WaitForSNR;
123  if (HasFlags(flag))
124  {
125  _channel->GetSNR(&mok);
126  update_rmflags(flag);
127  log_message(LOC, "measure S/N");
128  }
129 
130  // Bit error rate
131  flag = kDVBSigMon_WaitForBER;
132  if (HasFlags(flag))
133  {
134  _channel->GetBitErrorRate(&mok);
135  update_rmflags(flag);
136  log_message(LOC, "measure Bit Error Rate");
137  }
138 
139  // Uncorrected block count
140  flag = kDVBSigMon_WaitForUB;
141  if (HasFlags(flag))
142  {
143  _channel->GetUncorrectedBlockCount(&mok);
144  update_rmflags(flag);
145  log_message(LOC, "count Uncorrected Blocks");
146  }
147 
148  RemoveFlags(rmflags);
149 
150  LOG(VB_CHANNEL, LOG_INFO, LOC + "DVBSignalMonitor::ctor " +
151  QString("initial flags %1").arg(sm_flags_to_string(m_flags)));
152 
154  if (m_minimumUpdateRate > 30ms)
156 
158 }
159 
164 {
167 }
168 
169 // documented in dtvsignalmonitor.h
171 {
172  QMutexLocker locker(&m_statusLock);
173  m_rotorPosition.SetThreshold((int)roundf(100 * target));
174 }
175 
176 void DVBSignalMonitor::GetRotorStatus(bool &was_moving, bool &is_moving)
177 {
178  DVBChannel *dvbchannel = GetDVBChannel();
179  if (!dvbchannel)
180  return;
181 
182  const DiSEqCDevRotor *rotor = dvbchannel->GetRotor();
183  if (!rotor)
184  return;
185 
186  QMutexLocker locker(&m_statusLock);
187  was_moving = m_rotorPosition.GetValue() < 100;
188  int pos = (int)truncf(rotor->GetProgress() * 100);
190  is_moving = m_rotorPosition.GetValue() < 100;
191 }
192 
197 {
198  LOG(VB_CHANNEL, LOG_INFO, LOC + "Stop() -- begin");
200  if (GetStreamData())
202  m_streamHandlerStarted = false;
203  m_streamHandler->SetRetuneAllowed(false, nullptr, nullptr);
204  LOG(VB_CHANNEL, LOG_INFO, LOC + "Stop() -- end");
205 }
206 
207 QStringList DVBSignalMonitor::GetStatusList(void) const
208 {
209  QStringList list = DTVSignalMonitor::GetStatusList();
210  m_statusLock.lock();
219  m_statusLock.unlock();
220  return list;
221 }
222 
223 void DVBSignalMonitor::HandlePMT(uint program_num, const ProgramMapTable *pmt)
224 {
225  DTVSignalMonitor::HandlePMT(program_num, pmt);
226 
227  if (pmt->ProgramNumber() == (uint)m_programNumber)
228  {
229  DVBChannel *dvbchannel = GetDVBChannel();
230  if (dvbchannel)
231  dvbchannel->SetPMT(pmt);
232  }
233 }
234 
236 {
238  DVBChannel *dvbchannel = GetDVBChannel();
239  if (dvbchannel)
240  dvbchannel->SetTimeOffset(GetStreamData()->TimeOffset());
241 }
242 
244 {
246  DVBChannel *dvbchannel = GetDVBChannel();
247  if (dvbchannel)
248  dvbchannel->SetTimeOffset(GetStreamData()->TimeOffset());
249 }
250 
252 {
253  return dynamic_cast<DVBChannel*>(m_channel);
254 }
255 
263 {
264  if (!m_running || m_exit)
265  return;
266 
268  {
269  if (!m_streamHandler->IsRunning())
270  {
271  m_error = tr("Error: stream handler died");
272  m_updateDone = true;
273  return;
274  }
275 
276  // Update signal status for display
277  DVBChannel *dvbchannel = GetDVBChannel();
278  if (dvbchannel)
279  {
280  // Get info from card
281  uint sig = (uint) (dvbchannel->GetSignalStrength() * 65535);
282  uint snr = (uint) (dvbchannel->GetSNR() * 65535);
283 
284  // Set SignalMonitorValues from info from card.
285  {
286  QMutexLocker locker(&m_statusLock);
287 
292 
293  // LOG(VB_CHANSCAN, LOG_DEBUG, LOC +
294  // QString("Update sig:%1 snr:%2").arg(sig).arg(snr));
295  }
296  }
297 
298  EmitStatus();
299  if (IsAllGood())
301 
302  m_updateDone = true;
303  return;
304  }
305 
307 
308  DVBChannel *dvbchannel = GetDVBChannel();
309  if (!dvbchannel)
310  return;
311 
312  // Handle retuning after rotor has turned
314  {
315  if (dvbchannel->GetRotor())
316  {
318  m_streamHandler->SetRetuneAllowed(true, this, dvbchannel);
320  }
321  else
323  }
324 
325  bool wasLocked = false;
326  bool isLocked = false;
327  uint sig = 0;
328  uint snr = 0;
329  uint ber = 0;
330  uint ublocks = 0;
331 
332  // Get info from card
333  bool has_lock = dvbchannel->HasLock();
335  sig = (uint) (dvbchannel->GetSignalStrength() * 65535);
337  snr = (uint) (dvbchannel->GetSNR() * 65535);
339  ber = (uint) dvbchannel->GetBitErrorRate();
341  ublocks = (uint) dvbchannel->GetUncorrectedBlockCount();
342 
343  has_lock |= m_streamHandler->IsRunning();
344 
345  // Set SignalMonitorValues from info from card.
346  {
347  QMutexLocker locker(&m_statusLock);
348 
349  // BER and UB are actually uint32 values, but we
350  // clamp them at 64K. This is because these values
351  // are actually cumulative, but we don't try to
352  // normalize these to a time period.
353 
354  wasLocked = m_signalLock.IsGood();
355  m_signalLock.SetValue((has_lock) ? 1 : 0);
356  isLocked = m_signalLock.IsGood();
357 
365  m_uncorrectedBlocks.SetValue(ublocks);
366  }
367 
368  // Signal lock change
369  if (wasLocked != isLocked)
370  {
371  LOG(VB_CHANNEL, LOG_INFO, LOC + "UpdateValues -- Signal " +
372  (isLocked ? "Locked" : "Lost"));
373  }
374 
375  EmitStatus();
376  if (IsAllGood())
378 
379  // Start table monitoring if we are waiting on any table
380  // and we have a lock.
381  if (isLocked && GetStreamData() &&
386  {
388  m_streamHandler->AddListener(GetStreamData(), true, false);
389  m_streamHandlerStarted = true;
390  }
391 
392  m_updateDone = true;
393 }
394 
399 {
400  // Emit signals..
410 }
DVBSignalMonitor::m_signalToNoise
SignalMonitorValue m_signalToNoise
Definition: dvbsignalmonitor.h:61
DTVSignalMonitor::AddFlags
void AddFlags(uint64_t _flags) override
Definition: dtvsignalmonitor.cpp:140
DVBChannel::GetUncorrectedBlockCount
double GetUncorrectedBlockCount(bool *ok=nullptr) const
Returns # of uncorrected blocks since last call. First call undefined.
Definition: dvbchannel.cpp:1493
SignalMonitor::m_flags
volatile uint64_t m_flags
Definition: signalmonitor.h:206
ENO
#define ENO
This can be appended to the LOG args with "+".
Definition: mythlogging.h:73
DTVSignalMonitor::RemoveFlags
void RemoveFlags(uint64_t _flags) override
Definition: dtvsignalmonitor.cpp:146
DVBStreamHandler::SetRetuneAllowed
void SetRetuneAllowed(bool allow, DTVSignalMonitor *sigmon, DVBChannel *dvbchan)
Definition: dvbstreamhandler.cpp:493
SignalMonitor::m_minimumUpdateRate
std::chrono::milliseconds m_minimumUpdateRate
Definition: signalmonitor.h:209
DVBChannel::GetRotor
const DiSEqCDevRotor * GetRotor(void) const
Returns rotor object if it exists, nullptr otherwise.
Definition: dvbchannel.cpp:1158
DiSEqCDevRotor
Rotor class.
Definition: diseqc.h:302
SignalMonitorValue::SetValue
void SetValue(int _value)
Definition: signalmonitorvalue.h:74
DVBSignalMonitor::m_bitErrorRate
SignalMonitorValue m_bitErrorRate
Definition: dvbsignalmonitor.h:62
false
VERBOSE_PREAMBLE false
Definition: verbosedefs.h:89
SignalMonitorValue::SetThreshold
void SetThreshold(int _threshold)
Definition: signalmonitorvalue.h:84
TimeDateTable
This table gives the current DVB stream time.
Definition: dvbtables.h:383
PID::MPEG_PAT_PID
@ MPEG_PAT_PID
Definition: mpegtables.h:211
SignalMonitorValue::GetStatus
QString GetStatus() const
Returns a signal monitor value as one long string.
Definition: signalmonitorvalue.h:32
DVBSignalMonitor::m_uncorrectedBlocks
SignalMonitorValue m_uncorrectedBlocks
Definition: dvbsignalmonitor.h:63
MThread::wait
bool wait(std::chrono::milliseconds time=std::chrono::milliseconds::max())
Wait for the MThread to exit, with a maximum timeout.
Definition: mthread.cpp:300
SignalMonitor::m_channel
ChannelBase * m_channel
Definition: signalmonitor.h:203
ProgramMapTable
A PMT table maps a program described in the ProgramAssociationTable to various PID's which describe t...
Definition: mpegtables.h:692
MThread::usleep
static void usleep(std::chrono::microseconds time)
Definition: mthread.cpp:335
SignalMonitor::kDTVSigMon_WaitForMGT
static const uint64_t kDTVSigMon_WaitForMGT
Definition: signalmonitor.h:183
SignalMonitor::kDVBSigMon_WaitForSNR
static const uint64_t kDVBSigMon_WaitForSNR
Wait for the Signal to Noise Ratio to rise above a threshold.
Definition: signalmonitor.h:194
DTVSignalMonitor::HandleSTT
void HandleSTT(const SystemTimeTable *stt) override
Definition: dtvsignalmonitor.cpp:419
SignalMonitor::SendMessage
void SendMessage(SignalMonitorMessageType type, const SignalMonitorValue &val)
Definition: signalmonitor.cpp:413
DVBSignalMonitor::SetRotorTarget
void SetRotorTarget(float target) override
Sets rotor target pos from 0.0 to 1.0.
Definition: dvbsignalmonitor.cpp:170
SignalMonitor::m_exit
volatile bool m_exit
Definition: signalmonitor.h:227
mythdbcon.h
DVBSignalMonitor::m_streamHandler
DVBStreamHandler * m_streamHandler
Definition: dvbsignalmonitor.h:67
DTVSignalMonitor::GetStreamData
MPEGStreamData * GetStreamData()
Returns the MPEG stream data if it exists.
Definition: dtvsignalmonitor.h:59
atscstreamdata.h
ProgramMapTable::ProgramNumber
uint ProgramNumber(void) const
Definition: mpegtables.h:729
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
DVBSignalMonitor::~DVBSignalMonitor
~DVBSignalMonitor() override
Stops signal monitoring and table monitoring threads.
Definition: dvbsignalmonitor.cpp:163
DVBSignalMonitor::GetStatusList
QStringList GetStatusList(void) const override
Returns QStringList containing all signals and their current values.
Definition: dvbsignalmonitor.cpp:207
DTVSignalMonitor::HandleTDT
void HandleTDT(const TimeDateTable *tdt) override
Definition: dtvsignalmonitor.cpp:502
SignalMonitor::m_running
volatile bool m_running
Definition: signalmonitor.h:226
DVBStreamHandler::RetuneMonitor
void RetuneMonitor(void)
Definition: dvbstreamhandler.cpp:512
SignalMonitor::kDVBSigMon_WaitForBER
static const uint64_t kDVBSigMon_WaitForBER
Wait for the Bit Error Rate to fall below a threshold.
Definition: signalmonitor.h:196
DVBSignalMonitor::HandleTDT
void HandleTDT(const TimeDateTable *tdt) override
Definition: dvbsignalmonitor.cpp:243
DVBChannel::GetSignalStrength
double GetSignalStrength(bool *ok=nullptr) const
Returns signal strength in the range [0.0..1.0] (non-calibrated).
Definition: dvbchannel.cpp:1257
DVBChannel::SetPMT
void SetPMT(const ProgramMapTable *pmt)
Tells the Conditional Access Module which streams we wish to decode.
Definition: dvbchannel.cpp:726
SignalMonitorValue::GetName
QString GetName(void) const
Returns the long name of this value.
Definition: signalmonitorvalue.cpp:83
DVBSignalMonitor::EmitStatus
void EmitStatus(void) override
Emits signals for lock, signal strength, etc.
Definition: dvbsignalmonitor.cpp:398
DVBSignalMonitor::UpdateValues
void UpdateValues(void) override
Fills in frontend stats and emits status Qt signals.
Definition: dvbsignalmonitor.cpp:262
SignalMonitor::HasAnyFlag
bool HasAnyFlag(uint64_t _flags) const
Definition: signalmonitor.cpp:283
dvbchannel.h
true
VERBOSE_PREAMBLE Most true
Definition: verbosedefs.h:95
SignalMonitor::kSigMon_WaitForSig
static const uint64_t kSigMon_WaitForSig
Definition: signalmonitor.h:187
SignalMonitor::m_error
QString m_error
Definition: signalmonitor.h:216
DVBSignalMonitor::GetRotorStatus
void GetRotorStatus(bool &was_moving, bool &is_moving) override
Definition: dvbsignalmonitor.cpp:176
DVBSignalMonitor::m_rotorPosition
SignalMonitorValue m_rotorPosition
Definition: dvbsignalmonitor.h:64
StreamHandler::RemoveListener
virtual void RemoveListener(MPEGStreamData *data)
Definition: streamhandler.cpp:80
SignalMonitor::m_statusLock
QRecursiveMutex m_statusLock
Definition: signalmonitor.h:232
dvbstreamhandler.h
DTVSignalMonitor::HandlePMT
void HandlePMT(uint program_num, const ProgramMapTable *pmt) override
Definition: dtvsignalmonitor.cpp:359
dvbrecorder.h
DiSEqCDevRotor::GetProgress
double GetProgress(void) const
Returns an indication of rotor progress.
Definition: diseqc.cpp:1953
SignalMonitorValue::GetValue
int GetValue() const
Returns the value.
Definition: signalmonitorvalue.h:40
SignalMonitor::kDVBSigMon_WaitForUB
static const uint64_t kDVBSigMon_WaitForUB
Wait for uncorrected FEC blocks to fall below a threshold.
Definition: signalmonitor.h:198
SignalMonitorValue::SetTimeout
void SetTimeout(std::chrono::milliseconds _timeout)
Definition: signalmonitorvalue.h:98
dvbsignalmonitor.h
dvbtypes.h
SignalMonitor::m_signalStrength
SignalMonitorValue m_signalStrength
Definition: signalmonitor.h:219
SignalMonitor::m_inputid
int m_inputid
Definition: signalmonitor.h:205
SignalMonitor::kDVBSigMon_WaitForPos
static const uint64_t kDVBSigMon_WaitForPos
Wait for rotor to complete turning the antenna.
Definition: signalmonitor.h:200
DVBStreamHandler::Return
static void Return(DVBStreamHandler *&ref, int inputid)
Definition: dvbstreamhandler.cpp:74
DVBStreamHandler::Get
static DVBStreamHandler * Get(const QString &devname, int inputid)
Definition: dvbstreamhandler.cpp:44
sm_flags_to_string
QString sm_flags_to_string(uint64_t flags)
Definition: signalmonitor.h:237
DVBStreamHandler::IsRetuneAllowed
bool IsRetuneAllowed(void) const
Definition: dvbstreamhandler.h:42
SignalMonitor::m_signalLock
SignalMonitorValue m_signalLock
Definition: signalmonitor.h:218
DVBSignalMonitor::GetDVBChannel
DVBChannel * GetDVBChannel(void)
Definition: dvbsignalmonitor.cpp:251
SignalMonitor::SendMessageAllGood
void SendMessageAllGood(void)
Definition: signalmonitor.cpp:468
kStatusBitErrorRate
@ kStatusBitErrorRate
Definition: signalmonitorlistener.h:16
SignalMonitor::kDTVSigMon_WaitForPMT
static const uint64_t kDTVSigMon_WaitForPMT
Definition: signalmonitor.h:182
DVBSignalMonitor::HandlePMT
void HandlePMT(uint program_num, const ProgramMapTable *pmt) override
Definition: dvbsignalmonitor.cpp:223
SignalMonitor::kDTVSigMon_WaitForPAT
static const uint64_t kDTVSigMon_WaitForPAT
Definition: signalmonitor.h:181
SignalMonitor::m_updateDone
bool m_updateDone
Definition: signalmonitor.h:210
SignalMonitor::kDTVSigMon_WaitForNIT
static const uint64_t kDTVSigMon_WaitForNIT
Definition: signalmonitor.h:185
SignalMonitor::EmitStatus
virtual void EmitStatus(void)
Definition: signalmonitor.cpp:475
SignalMonitor::kDTVSigMon_WaitForSDT
static const uint64_t kDTVSigMon_WaitForSDT
Definition: signalmonitor.h:186
DVBChannel::GetSNR
double GetSNR(bool *ok=nullptr) const
Returns signal/noise in the range [0..1.0].
Definition: dvbchannel.cpp:1342
DTVSignalMonitor::GetStatusList
QStringList GetStatusList(void) const override
Returns QStringList containing all signals and their current values.
Definition: dtvsignalmonitor.cpp:74
DVBSignalMonitor::HandleSTT
void HandleSTT(const SystemTimeTable *stt) override
Definition: dvbsignalmonitor.cpp:235
mpegtables.h
kStatusRotorPosition
@ kStatusRotorPosition
Definition: signalmonitorlistener.h:18
SignalMonitorValue::SetRange
void SetRange(int _min, int _max)
Sets the minimum and maximum values.
Definition: signalmonitorvalue.h:93
LOC
#define LOC
Definition: dvbsignalmonitor.cpp:27
uint
unsigned int uint
Definition: compat.h:79
CardUtil::GetTimeouts
static bool GetTimeouts(uint inputid, std::chrono::milliseconds &signal_timeout, std::chrono::milliseconds &channel_timeout)
Definition: cardutil.cpp:2235
DVBSignalMonitor::DVBSignalMonitor
DVBSignalMonitor(void)
kStatusSignalToNoise
@ kStatusSignalToNoise
Definition: signalmonitorlistener.h:15
SignalMonitorValue::IsGood
bool IsGood() const
Returns true if the value is equal to the threshold, or on the right side of the threshold (depends o...
Definition: signalmonitorvalue.h:56
DVBChannel::GetMinSignalMonitorDelay
std::chrono::milliseconds GetMinSignalMonitorDelay(void) const
Definition: dvbchannel.h:65
dvbstreamdata.h
TimeOffset
Definition: channelsettings.cpp:175
DVBChannel::GetBitErrorRate
double GetBitErrorRate(bool *ok=nullptr) const
Returns # of corrected bits since last call. First call undefined.
Definition: dvbchannel.cpp:1425
DVBChannel
Provides interface to the tuning hardware when using DVB drivers.
Definition: dvbchannel.h:31
SignalMonitor::HasFlags
bool HasFlags(uint64_t _flags) const
Definition: signalmonitor.cpp:278
cardutil.h
DVBChannel::SetTimeOffset
void SetTimeOffset(double offset)
Tells the Conditional Access Module the offset from the computers utc time to dvb time.
Definition: dvbchannel.cpp:738
kStatusUncorrectedBlocks
@ kStatusUncorrectedBlocks
Definition: signalmonitorlistener.h:17
mythcontext.h
DVBChannel::HasLock
bool HasLock(bool *ok=nullptr) const
Returns true iff we have a signal carrier lock.
Definition: dvbchannel.cpp:1166
DTVSignalMonitor
This class is intended to detect the presence of needed tables.
Definition: dtvsignalmonitor.h:14
atsctables.h
SystemTimeTable
This table contains the GPS time at the time of transmission.
Definition: atsctables.h:681
StreamHandler::AddListener
virtual void AddListener(MPEGStreamData *data, bool allow_section_reader=false, bool needs_buffering=false, const QString &output_file=QString())
Definition: streamhandler.cpp:35
MPEGStreamData::AddListeningPID
virtual void AddListeningPID(uint pid, PIDPriority priority=kPIDPriorityNormal)
Definition: mpegstreamdata.h:120
DVBSignalMonitor::Stop
void Stop(void) override
Stop signal monitoring and table monitoring threads.
Definition: dvbsignalmonitor.cpp:196
StreamHandler::IsRunning
bool IsRunning(void) const
Definition: streamhandler.cpp:163
SignalMonitor::Stop
virtual void Stop()
Stop signal monitoring thread.
Definition: signalmonitor.cpp:307
DTVSignalMonitor::IsAllGood
bool IsAllGood(void) const override
Definition: dtvsignalmonitor.cpp:585
DVBChannel::GetCardNum
QString GetCardNum(void) const
Returns DVB device number, used to construct filenames for DVB devices.
Definition: dvbchannel.h:59
DTVSignalMonitor::m_programNumber
int m_programNumber
Definition: dtvsignalmonitor.h:137
DVBSignalMonitor::m_streamHandlerStarted
bool m_streamHandlerStarted
Definition: dvbsignalmonitor.h:66
SignalMonitor::kDTVSigMon_WaitForVCT
static const uint64_t kDTVSigMon_WaitForVCT
Definition: signalmonitor.h:184