MythTV  master
dvbsignalmonitor.cpp
Go to the documentation of this file.
1 // -*- Mode: c++ -*-
2 
3 #include <cerrno>
4 #include <cstring>
5 #include <cmath>
6 
7 #include <unistd.h>
8 
9 //Qt headers
10 #include <QCoreApplication>
11 
12 // MythTV headers
13 #include "mythcontext.h"
14 #include "mythdbcon.h"
15 #include "dvbsignalmonitor.h"
16 #include "dvbchannel.h"
17 #include "dvbstreamdata.h"
18 #include "atscstreamdata.h"
19 #include "mpegtables.h"
20 #include "atsctables.h"
21 #include "cardutil.h"
22 
23 #include "dvbtypes.h"
24 #include "dvbchannel.h"
25 #include "dvbrecorder.h"
26 #include "dvbstreamhandler.h"
27 
28 #define LOC QString("DVBSigMon[%1](%2): ") \
29  .arg(m_inputid).arg(m_channel->GetDevice())
30 
47  bool _release_stream,
48  uint64_t _flags)
49  : DTVSignalMonitor(db_cardnum, _channel, _release_stream, _flags),
50  // This snr setup is incorrect for API 3.x but works better
51  // than int16_t range in practice, however this is correct
52  // for the 4.0 DVB API which uses a uint16_t for the snr
53  m_signalToNoise (QCoreApplication::translate("(Common)",
54  "Signal To Noise"), "snr",
55  0, true, 0, 65535, 0ms),
56  m_bitErrorRate (tr("Bit Error Rate"), "ber",
57  65535, false, 0, 65535, 0ms),
58  m_uncorrectedBlocks(tr("Uncorrected Blocks"), "ucb",
59  65535, false, 0, 65535, 0ms),
60  m_rotorPosition (tr("Rotor Progress"), "pos",
61  100, true, 0, 100, 0ms),
62  m_streamHandlerStarted(false),
63  m_streamHandler(nullptr)
64 {
65  // This value should probably come from the database...
66  int threshold = 0; // signal strength threshold
67 
68  // Tuning timeout time for channel lock from database, minimum is 3s
69  std::chrono::milliseconds wait = 3s; // Minimum timeout time
70  std::chrono::milliseconds signal_timeout = 0ms; // Not used
71  std::chrono::milliseconds tuning_timeout = 0ms; // Maximum time for channel lock from card
72  CardUtil::GetTimeouts(db_cardnum, signal_timeout, tuning_timeout);
73  if (tuning_timeout < wait)
74  {
75  LOG(VB_CHANNEL, LOG_DEBUG, LOC +
76  QString("Tuning timeout from database: %1 ms is too small, using %2 ms")
77  .arg(tuning_timeout.count()).arg(wait.count()));
78  }
79  else
80  {
81  wait = tuning_timeout; // Use value from database
82  LOG(VB_CHANNEL, LOG_DEBUG, LOC +
83  QString("Tuning timeout: %1 ms").arg(wait.count()));
84  }
85 
88  m_signalStrength.SetThreshold(threshold);
89 
90  // This is incorrect for API 3.x but works better than int16_t range
91  // in practice, however this is correct for the 4.0 DVB API
92  m_signalStrength.SetRange(0, 65535);
93 
94  uint64_t rmflags = 0;
95 
96 #define DVB_IO(FLAG, METHOD, MSG) \
97  do { if (HasFlags(FLAG)) { bool mok; _channel->METHOD(&mok); \
98  if (!mok) { \
99  LOG(VB_GENERAL, LOG_WARNING, LOC+"Cannot "+(MSG)+ENO); \
100  rmflags |= (FLAG); } \
101  else { \
102  LOG(VB_CHANNEL, LOG_INFO, LOC + "Can " + (MSG)); } } } while (false)
103 
105  "measure Signal Strength");
107  "measure S/N");
108  DVB_IO(kDVBSigMon_WaitForBER, GetBitErrorRate,
109  "measure Bit Error Rate");
110  DVB_IO(kDVBSigMon_WaitForUB, GetUncorrectedBlockCount,
111  "count Uncorrected Blocks");
112 
113 #undef DVB_IO
114 
115  RemoveFlags(rmflags);
116 
117  LOG(VB_CHANNEL, LOG_INFO, LOC + "DVBSignalMonitor::ctor " +
118  QString("initial flags %1").arg(sm_flags_to_string(m_flags)));
119 
121  if (m_minimumUpdateRate > 30ms)
123 
125 }
126 
131 {
134 }
135 
136 // documented in dtvsignalmonitor.h
138 {
139  QMutexLocker locker(&m_statusLock);
140  m_rotorPosition.SetThreshold((int)roundf(100 * target));
141 }
142 
143 void DVBSignalMonitor::GetRotorStatus(bool &was_moving, bool &is_moving)
144 {
145  DVBChannel *dvbchannel = GetDVBChannel();
146  if (!dvbchannel)
147  return;
148 
149  const DiSEqCDevRotor *rotor = dvbchannel->GetRotor();
150  if (!rotor)
151  return;
152 
153  QMutexLocker locker(&m_statusLock);
154  was_moving = m_rotorPosition.GetValue() < 100;
155  int pos = (int)truncf(rotor->GetProgress() * 100);
157  is_moving = m_rotorPosition.GetValue() < 100;
158 }
159 
164 {
165  LOG(VB_CHANNEL, LOG_INFO, LOC + "Stop() -- begin");
167  if (GetStreamData())
169  m_streamHandlerStarted = false;
170  m_streamHandler->SetRetuneAllowed(false, nullptr, nullptr);
171  LOG(VB_CHANNEL, LOG_INFO, LOC + "Stop() -- end");
172 }
173 
174 QStringList DVBSignalMonitor::GetStatusList(void) const
175 {
176  QStringList list = DTVSignalMonitor::GetStatusList();
177  m_statusLock.lock();
186  m_statusLock.unlock();
187  return list;
188 }
189 
190 void DVBSignalMonitor::HandlePMT(uint program_num, const ProgramMapTable *pmt)
191 {
192  DTVSignalMonitor::HandlePMT(program_num, pmt);
193 
194  if (pmt->ProgramNumber() == (uint)m_programNumber)
195  {
196  DVBChannel *dvbchannel = GetDVBChannel();
197  if (dvbchannel)
198  dvbchannel->SetPMT(pmt);
199  }
200 }
201 
203 {
205  DVBChannel *dvbchannel = GetDVBChannel();
206  if (dvbchannel)
207  dvbchannel->SetTimeOffset(GetStreamData()->TimeOffset());
208 }
209 
211 {
213  DVBChannel *dvbchannel = GetDVBChannel();
214  if (dvbchannel)
215  dvbchannel->SetTimeOffset(GetStreamData()->TimeOffset());
216 }
217 
219 {
220  return dynamic_cast<DVBChannel*>(m_channel);
221 }
222 
230 {
231  if (!m_running || m_exit)
232  return;
233 
235  {
236  if (!m_streamHandler->IsRunning())
237  {
238  m_error = tr("Error: stream handler died");
239  m_updateDone = true;
240  return;
241  }
242 
243  // Update signal status for display
244  DVBChannel *dvbchannel = GetDVBChannel();
245  if (dvbchannel)
246  {
247  // Get info from card
248  uint sig = (uint) (dvbchannel->GetSignalStrength() * 65535);
249  uint snr = (uint) (dvbchannel->GetSNR() * 65535);
250 
251  // Set SignalMonitorValues from info from card.
252  {
253  QMutexLocker locker(&m_statusLock);
254 
259 
260  // LOG(VB_CHANSCAN, LOG_DEBUG, LOC +
261  // QString("Update sig:%1 snr:%2").arg(sig).arg(snr));
262  }
263  }
264 
265  EmitStatus();
266  if (IsAllGood())
268 
269  m_updateDone = true;
270  return;
271  }
272 
274 
275  DVBChannel *dvbchannel = GetDVBChannel();
276  if (!dvbchannel)
277  return;
278 
279  // Handle retuning after rotor has turned
281  {
282  if (dvbchannel->GetRotor())
283  {
285  m_streamHandler->SetRetuneAllowed(true, this, dvbchannel);
287  }
288  else
290  }
291 
292  bool wasLocked = false;
293  bool isLocked = false;
294  uint sig = 0;
295  uint snr = 0;
296  uint ber = 0;
297  uint ublocks = 0;
298 
299  // Get info from card
300  bool has_lock = dvbchannel->HasLock();
302  sig = (uint) (dvbchannel->GetSignalStrength() * 65535);
304  snr = (uint) (dvbchannel->GetSNR() * 65535);
306  ber = (uint) dvbchannel->GetBitErrorRate();
308  ublocks = (uint) dvbchannel->GetUncorrectedBlockCount();
309 
310  has_lock |= m_streamHandler->IsRunning();
311 
312  // Set SignalMonitorValues from info from card.
313  {
314  QMutexLocker locker(&m_statusLock);
315 
316  // BER and UB are actually uint32 values, but we
317  // clamp them at 64K. This is because these values
318  // are actually cumulative, but we don't try to
319  // normalize these to a time period.
320 
321  wasLocked = m_signalLock.IsGood();
322  m_signalLock.SetValue((has_lock) ? 1 : 0);
323  isLocked = m_signalLock.IsGood();
324 
332  m_uncorrectedBlocks.SetValue(ublocks);
333  }
334 
335  // Signal lock change
336  if (wasLocked != isLocked)
337  {
338  LOG(VB_CHANNEL, LOG_INFO, LOC + "UpdateValues -- Signal " +
339  (isLocked ? "Locked" : "Lost"));
340  }
341 
342  EmitStatus();
343  if (IsAllGood())
345 
346  // Start table monitoring if we are waiting on any table
347  // and we have a lock.
348  if (isLocked && GetStreamData() &&
353  {
355  m_streamHandler->AddListener(GetStreamData(), true, false);
356  m_streamHandlerStarted = true;
357  }
358 
359  m_updateDone = true;
360 }
361 
366 {
367  // Emit signals..
377 }
DVB_IO
#define DVB_IO(FLAG, METHOD, MSG)
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:1492
SignalMonitor::m_flags
volatile uint64_t m_flags
Definition: signalmonitor.h:208
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:486
SignalMonitor::m_minimumUpdateRate
std::chrono::milliseconds m_minimumUpdateRate
Definition: signalmonitor.h:211
DVBChannel::GetRotor
const DiSEqCDevRotor * GetRotor(void) const
Returns rotor object if it exists, nullptr otherwise.
Definition: dvbchannel.cpp:1157
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:85
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:303
SignalMonitor::m_channel
ChannelBase * m_channel
Definition: signalmonitor.h:205
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:338
SignalMonitor::kDTVSigMon_WaitForMGT
static const uint64_t kDTVSigMon_WaitForMGT
Definition: signalmonitor.h:185
SignalMonitor::kDVBSigMon_WaitForSNR
static const uint64_t kDVBSigMon_WaitForSNR
Wait for the Signal to Noise Ratio to rise above a threshold.
Definition: signalmonitor.h:196
DTVSignalMonitor::HandleSTT
void HandleSTT(const SystemTimeTable *stt) override
Definition: dtvsignalmonitor.cpp:398
SignalMonitor::SendMessage
void SendMessage(SignalMonitorMessageType type, const SignalMonitorValue &val)
Definition: signalmonitor.cpp:412
DVBSignalMonitor::SetRotorTarget
void SetRotorTarget(float target) override
Sets rotor target pos from 0.0 to 1.0.
Definition: dvbsignalmonitor.cpp:137
SignalMonitor::m_exit
volatile bool m_exit
Definition: signalmonitor.h:229
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
SignalMonitor::GetSignalStrength
int GetSignalStrength(void)
Definition: signalmonitor.h:75
atscstreamdata.h
ProgramMapTable::ProgramNumber
uint ProgramNumber(void) const
Definition: mpegtables.h:729
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:23
DVBSignalMonitor::~DVBSignalMonitor
~DVBSignalMonitor() override
Stops signal monitoring and table monitoring threads.
Definition: dvbsignalmonitor.cpp:130
DVBSignalMonitor::GetStatusList
QStringList GetStatusList(void) const override
Returns QStringList containing all signals and their current values.
Definition: dvbsignalmonitor.cpp:174
DTVSignalMonitor::HandleTDT
void HandleTDT(const TimeDateTable *tdt) override
Definition: dtvsignalmonitor.cpp:481
SignalMonitor::m_running
volatile bool m_running
Definition: signalmonitor.h:228
DVBStreamHandler::RetuneMonitor
void RetuneMonitor(void)
Definition: dvbstreamhandler.cpp:505
SignalMonitor::kDVBSigMon_WaitForBER
static const uint64_t kDVBSigMon_WaitForBER
Wait for the Bit Error Rate to fall below a threshold.
Definition: signalmonitor.h:198
DVBSignalMonitor::HandleTDT
void HandleTDT(const TimeDateTable *tdt) override
Definition: dvbsignalmonitor.cpp:210
DVBChannel::GetSignalStrength
double GetSignalStrength(bool *ok=nullptr) const
Returns signal strength in the range [0.0..1.0] (non-calibrated).
Definition: dvbchannel.cpp:1256
DVBChannel::SetPMT
void SetPMT(const ProgramMapTable *pmt)
Tells the Conditional Access Module which streams we wish to decode.
Definition: dvbchannel.cpp:725
SignalMonitorValue::GetName
QString GetName(void) const
Returns the long name of this value.
Definition: signalmonitorvalue.cpp:82
DVBSignalMonitor::EmitStatus
void EmitStatus(void) override
Emits signals for lock, signal strength, etc.
Definition: dvbsignalmonitor.cpp:365
DVBSignalMonitor::UpdateValues
void UpdateValues(void) override
Fills in frontend stats and emits status Qt signals.
Definition: dvbsignalmonitor.cpp:229
SignalMonitor::HasAnyFlag
bool HasAnyFlag(uint64_t _flags) const
Definition: signalmonitor.cpp:282
dvbchannel.h
true
VERBOSE_PREAMBLE Most true
Definition: verbosedefs.h:91
SignalMonitor::kSigMon_WaitForSig
static const uint64_t kSigMon_WaitForSig
Definition: signalmonitor.h:189
SignalMonitor::m_error
QString m_error
Definition: signalmonitor.h:218
DVBSignalMonitor::GetRotorStatus
void GetRotorStatus(bool &was_moving, bool &is_moving) override
Definition: dvbsignalmonitor.cpp:143
DVBSignalMonitor::m_rotorPosition
SignalMonitorValue m_rotorPosition
Definition: dvbsignalmonitor.h:64
StreamHandler::RemoveListener
virtual void RemoveListener(MPEGStreamData *data)
Definition: streamhandler.cpp:78
SignalMonitor::m_statusLock
QRecursiveMutex m_statusLock
Definition: signalmonitor.h:234
dvbstreamhandler.h
DTVSignalMonitor::HandlePMT
void HandlePMT(uint program_num, const ProgramMapTable *pmt) override
Definition: dtvsignalmonitor.cpp:342
dvbrecorder.h
DiSEqCDevRotor::GetProgress
double GetProgress(void) const
Returns an indication of rotor progress.
Definition: diseqc.cpp:1958
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:200
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:221
SignalMonitor::m_inputid
int m_inputid
Definition: signalmonitor.h:207
SignalMonitor::kDVBSigMon_WaitForPos
static const uint64_t kDVBSigMon_WaitForPos
Wait for rotor to complete turning the antenna.
Definition: signalmonitor.h:202
DVBStreamHandler::Return
static void Return(DVBStreamHandler *&ref, int inputid)
Definition: dvbstreamhandler.cpp:63
DVBStreamHandler::Get
static DVBStreamHandler * Get(const QString &devname, int inputid)
Definition: dvbstreamhandler.cpp:33
sm_flags_to_string
QString sm_flags_to_string(uint64_t flags)
Definition: signalmonitor.h:239
DVBStreamHandler::IsRetuneAllowed
bool IsRetuneAllowed(void) const
Definition: dvbstreamhandler.h:42
SignalMonitor::m_signalLock
SignalMonitorValue m_signalLock
Definition: signalmonitor.h:220
DVBSignalMonitor::GetDVBChannel
DVBChannel * GetDVBChannel(void)
Definition: dvbsignalmonitor.cpp:218
SignalMonitor::SendMessageAllGood
void SendMessageAllGood(void)
Definition: signalmonitor.cpp:467
kStatusBitErrorRate
@ kStatusBitErrorRate
Definition: signalmonitorlistener.h:16
SignalMonitor::kDTVSigMon_WaitForPMT
static const uint64_t kDTVSigMon_WaitForPMT
Definition: signalmonitor.h:184
DVBSignalMonitor::HandlePMT
void HandlePMT(uint program_num, const ProgramMapTable *pmt) override
Definition: dvbsignalmonitor.cpp:190
SignalMonitor::kDTVSigMon_WaitForPAT
static const uint64_t kDTVSigMon_WaitForPAT
Definition: signalmonitor.h:183
SignalMonitor::m_updateDone
bool m_updateDone
Definition: signalmonitor.h:212
SignalMonitor::kDTVSigMon_WaitForNIT
static const uint64_t kDTVSigMon_WaitForNIT
Definition: signalmonitor.h:187
SignalMonitor::EmitStatus
virtual void EmitStatus(void)
Definition: signalmonitor.cpp:474
SignalMonitor::kDTVSigMon_WaitForSDT
static const uint64_t kDTVSigMon_WaitForSDT
Definition: signalmonitor.h:188
DVBChannel::GetSNR
double GetSNR(bool *ok=nullptr) const
Returns signal/noise in the range [0..1.0].
Definition: dvbchannel.cpp:1341
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:202
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:28
uint
unsigned int uint
Definition: compat.h:140
CardUtil::GetTimeouts
static bool GetTimeouts(uint inputid, std::chrono::milliseconds &signal_timeout, std::chrono::milliseconds &channel_timeout)
Definition: cardutil.cpp:2098
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:64
dvbstreamdata.h
TimeOffset
Definition: channelsettings.cpp:174
DVBChannel::GetBitErrorRate
double GetBitErrorRate(bool *ok=nullptr) const
Returns # of corrected bits since last call. First call undefined.
Definition: dvbchannel.cpp:1424
DVBChannel
Provides interface to the tuning hardware when using DVB drivers.
Definition: dvbchannel.h:30
SignalMonitor::HasFlags
bool HasFlags(uint64_t _flags) const
Definition: signalmonitor.cpp:277
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:737
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:1165
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:33
MPEGStreamData::AddListeningPID
virtual void AddListeningPID(uint pid, PIDPriority priority=kPIDPriorityNormal)
Definition: mpegstreamdata.h:119
DVBSignalMonitor::Stop
void Stop(void) override
Stop signal monitoring and table monitoring threads.
Definition: dvbsignalmonitor.cpp:163
StreamHandler::IsRunning
bool IsRunning(void) const
Definition: streamhandler.cpp:161
SignalMonitor::Stop
virtual void Stop()
Stop signal monitoring thread.
Definition: signalmonitor.cpp:306
DTVSignalMonitor::IsAllGood
bool IsAllGood(void) const override
Definition: dtvsignalmonitor.cpp:564
DVBChannel::GetCardNum
QString GetCardNum(void) const
Returns DVB device number, used to construct filenames for DVB devices.
Definition: dvbchannel.h:58
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:186