SignalMonitor Class Reference

#include <signalmonitor.h>

Inheritance diagram for SignalMonitor:

AnalogSignalMonitor DTVSignalMonitor DVBSignalMonitor FirewireSignalMonitor HDHRSignalMonitor IPTVSignalMonitor

List of all members.


Detailed Description

Signal monitoring base class.

Signal monitors should extend this to add signal monitoring to their recorder. All signal monitors must implement one signals, the StatusSignalLock(int) signal. The lock signal should only be set to true when it is absolutely safe to begin or to continue recording. The optional StatusSignalStrength signal should report the actual signal value.

Additional signals may be implemented, see DTVSignalMonitor and DVBSignalMonitor for example.

See also:
AnalocSignalMonitor, DTVSignalMonitor, DVBSignalMonitor, HDHRSignalMonitor, SignalMonitorValue

Definition at line 28 of file signalmonitor.h.


Public Slots

virtual void deleteLater (void)
 Safer alternative to just deleting signal monitor directly.

Signals

void StatusSignalLock (const SignalMonitorValue &)
 Signal to be sent as true when it is safe to begin or continue recording, and false if it may not be safe.
void StatusSignalStrength (const SignalMonitorValue &)
 Signal to be sent with an actual signal value.
void AllGood (void)
 Signal to be sent when you have a lock on all values.

Public Member Functions

virtual ~SignalMonitor ()
 Stops monitoring thread.
virtual void Start ()
 Start signal monitoring thread.
virtual void Stop ()
 Stop signal monitoring thread.
virtual void Kick ()
 Wake up monitor thread, and wait for UpdateValue() to execute once.
virtual bool WaitForLock (int timeout=-1)
 Wait for a StatusSignaLock(int) of true.
virtual void AddFlags (uint64_t _flags)
virtual void RemoveFlags (uint64_t _flags)
bool HasFlags (uint64_t _flags) const
bool HasAnyFlag (uint64_t _flags) const
uint64_t GetFlags (void) const
bool GetNotifyFrontend ()
 Returns whether or not a SIGNAL MythEvent is being sent regularly to the frontend.
int GetUpdateRate ()
 Returns milliseconds between signal monitoring events.
virtual QStringList GetStatusList (bool kick=true)
 Returns QStringList containing all signals and their current values.
bool HasSignalLock (void) const
 Returns true iff signalLock.IsGood() returns true.
virtual bool IsAllGood (void) const
void SetNotifyFrontend (bool notify)
 Enables or disables frontend notification of the current signal value.
void SetUpdateRate (int msec)
 Sets the number of milliseconds between signal monitoring attempts in the signal monitoring thread.

Static Public Member Functions

static bool IsRequired (const QString &cardtype)
 Returns true iff the card type supports signal monitoring.
static bool IsSupported (const QString &cardtype)
static SignalMonitorInit (QString cardtype, int db_cardnum, ChannelBase *channel)

Static Public Attributes

static const uint64_t kDTVSigMon_PATSeen = 0x0000000001ULL
 We've seen a PAT, which maps MPEG program numbers to pids where we find PMTs.
static const uint64_t kDTVSigMon_PMTSeen = 0x0000000002ULL
 We've seen a PMT, which maps program to audio, video and other stream PIDs.
static const uint64_t kDTVSigMon_MGTSeen = 0x0000000004ULL
 We've seen an MGT, which ells us on which PIDs to find VCT and other ATSC tables.
static const uint64_t kDTVSigMon_VCTSeen = 0x0000000008ULL
 We've seen a VCT, which maps ATSC Channels to MPEG program numbers, and provides additional data.
static const uint64_t kDTVSigMon_TVCTSeen = 0x0000000010ULL
 We've seen a TVCT, the terrestrial version of the VCT.
static const uint64_t kDTVSigMon_CVCTSeen = 0x0000000020ULL
 We've seen a CVCT, the cable version of the VCT.
static const uint64_t kDTVSigMon_NITSeen = 0x0000000040ULL
 We've seen an NIT, which tells us where to find SDT and other DVB tables.
static const uint64_t kDTVSigMon_SDTSeen = 0x0000000080ULL
 We've seen an SDT, which maps DVB Channels to MPEG program numbers, and provides additional data.
static const uint64_t kFWSigMon_PowerSeen = 0x0000000100ULL
 We've seen the FireWire STB power state.
static const uint64_t kDTVSigMon_CryptSeen = 0x0000000200ULL
 We've seen something indicating whether the data stream is encrypted.
static const uint64_t kDTVSigMon_PATMatch = 0x0000001000ULL
 We've seen a PAT matching our requirements.
static const uint64_t kDTVSigMon_PMTMatch = 0x0000002000ULL
 We've seen a PMT matching our requirements.
static const uint64_t kDTVSigMon_MGTMatch = 0x0000004000ULL
 We've seen an MGT matching our requirements.
static const uint64_t kDTVSigMon_VCTMatch = 0x0000008000ULL
 We've seen a VCT matching our requirements.
static const uint64_t kDTVSigMon_TVCTMatch = 0x0000010000ULL
 We've seen a TVCT matching our requirements.
static const uint64_t kDTVSigMon_CVCTMatch = 0x0000020000ULL
 We've seen a CVCT matching our requirements.
static const uint64_t kDTVSigMon_NITMatch = 0x0000040000ULL
 We've seen an NIT matching our requirements.
static const uint64_t kDTVSigMon_SDTMatch = 0x0000080000ULL
 We've seen an SDT matching our requirements.
static const uint64_t kFWSigMon_PowerMatch = 0x0000100000ULL
 We've seen a FireWire STB power state matching our requirements.
static const uint64_t kDTVSigMon_CryptMatch = 0x0000200000ULL
 We've seen unencrypted data in data stream.
static const uint64_t kDTVSigMon_WaitForPAT = 0x0001000000ULL
static const uint64_t kDTVSigMon_WaitForPMT = 0x0002000000ULL
static const uint64_t kDTVSigMon_WaitForMGT = 0x0004000000ULL
static const uint64_t kDTVSigMon_WaitForVCT = 0x0008000000ULL
static const uint64_t kDTVSigMon_WaitForNIT = 0x0010000000ULL
static const uint64_t kDTVSigMon_WaitForSDT = 0x0020000000ULL
static const uint64_t kDTVSigMon_WaitForSig = 0x0040000000ULL
static const uint64_t kFWSigMon_WaitForPower = 0x0080000000ULL
static const uint64_t kDTVSigMon_WaitForCrypt = 0x0100000000ULL
static const uint64_t kDTVSigMon_WaitForAll = 0x01FF000000ULL
static const uint64_t kDVBSigMon_WaitForSNR = 0x1000000000ULL
 Wait for the Signal to Noise Ratio to rise above a threshhold.
static const uint64_t kDVBSigMon_WaitForBER = 0x2000000000ULL
 Wait for the Bit Error Rate to fall below a threshhold.
static const uint64_t kDVBSigMon_WaitForUB = 0x4000000000ULL
 Wait for uncorrected FEC blocks to fall below a threshhold.
static const uint64_t kDVBSigMon_WaitForPos = 0x8000000000ULL
 Wait for rotor to complete turning the antenna.

Protected Member Functions

 SignalMonitor (int db_cardnum, ChannelBase *_channel, uint64_t wait_for_mask, const char *name="SignalMonitor")
virtual void MonitorLoop ()
 Basic signal monitoring loop.
virtual void UpdateValues ()
 This should be overriden to actually do signal monitoring.

Static Protected Member Functions

static void * SpawnMonitorLoop (void *)
 Runs MonitorLoop() within the monitor_thread pthread.

Protected Attributes

pthread_t monitor_thread
ChannelBasechannel
int capturecardnum
uint64_t flags
int update_rate
uint minimum_update_rate
bool running
bool exit
bool update_done
bool notify_frontend
SignalMonitorValue signalLock
SignalMonitorValue signalStrength
QMutex startStopLock
QMutex statusLock

Constructor & Destructor Documentation

SignalMonitor::~SignalMonitor (  )  [virtual]

Stops monitoring thread.

Definition at line 173 of file signalmonitor.cpp.

SignalMonitor::SignalMonitor ( int  db_cardnum,
ChannelBase _channel,
uint64_t  wait_for_mask,
const char *  name = "SignalMonitor" 
) [protected]

Definition at line 155 of file signalmonitor.cpp.


Member Function Documentation

bool SignalMonitor::IsRequired ( const QString &  cardtype  )  [inline, static]

Returns true iff the card type supports signal monitoring.

Definition at line 294 of file signalmonitor.h.

Referenced by RemoteEncoder::GetSignalLockTimeout(), IsSupported(), and TVRec::TuningFrequency().

bool SignalMonitor::IsSupported ( const QString &  cardtype  )  [inline, static]

Definition at line 303 of file signalmonitor.h.

Referenced by TVRec::SetSignalMonitoringRate(), and TVRec::SetupSignalMonitor().

SignalMonitor * SignalMonitor::Init ( QString  cardtype,
int  db_cardnum,
ChannelBase channel 
) [static]

Definition at line 71 of file signalmonitor.cpp.

Referenced by TVRec::SetupSignalMonitor().

void SignalMonitor::Start ( void   )  [virtual]

Start signal monitoring thread.

Definition at line 213 of file signalmonitor.cpp.

Referenced by SIScan::ScanTransport(), and TVRec::SetupSignalMonitor().

void SignalMonitor::Stop ( void   )  [virtual]

void SignalMonitor::Kick (  )  [virtual]

Wake up monitor thread, and wait for UpdateValue() to execute once.

Definition at line 247 of file signalmonitor.cpp.

Referenced by GetStatusList(), and WaitForLock().

bool SignalMonitor::WaitForLock ( int  timeout = -1  )  [virtual]

Wait for a StatusSignaLock(int) of true.

This can be called only after the signal monitoring thread has been started.

Parameters:
timeout maximum time to wait in milliseconds.
Returns:
true if signal was acquired.
This can be called whether or not the signal monitoring thread has been started.

Parameters:
timeout maximum time to wait in milliseconds.
Returns:
true if signal was acquired.

Reimplemented in DTVSignalMonitor.

Definition at line 346 of file signalmonitor.cpp.

void SignalMonitor::AddFlags ( uint64_t  _flags  )  [virtual]

Reimplemented in DTVSignalMonitor.

Definition at line 188 of file signalmonitor.cpp.

Referenced by DTVSignalMonitor::AddFlags().

void SignalMonitor::RemoveFlags ( uint64_t  _flags  )  [virtual]

Reimplemented in DTVSignalMonitor.

Definition at line 194 of file signalmonitor.cpp.

Referenced by DTVSignalMonitor::RemoveFlags().

bool SignalMonitor::HasFlags ( uint64_t  _flags  )  const

bool SignalMonitor::HasAnyFlag ( uint64_t  _flags  )  const

uint64_t SignalMonitor::GetFlags ( void   )  const [inline]

Definition at line 54 of file signalmonitor.h.

bool SignalMonitor::GetNotifyFrontend (  )  [inline]

Returns whether or not a SIGNAL MythEvent is being sent regularly to the frontend.

Definition at line 61 of file signalmonitor.h.

int SignalMonitor::GetUpdateRate (  )  [inline]

Returns milliseconds between signal monitoring events.

Definition at line 63 of file signalmonitor.h.

QStringList SignalMonitor::GetStatusList ( bool  kick = true  )  [virtual]

Returns QStringList containing all signals and their current values.

This searlializes the signal monitoring values so that they can be passed from a backend to a frontend.

SignalMonitorValue::Parse(const QStringList&) will convert this to a vector of SignalMonitorValue instances.

Parameters:
kick if true Kick() will be employed so that this call will not have to wait for the next signal monitoring event.

Reimplemented in DTVSignalMonitor, and DVBSignalMonitor.

Definition at line 271 of file signalmonitor.cpp.

Referenced by DTVSignalMonitor::GetStatusList(), and MonitorLoop().

bool SignalMonitor::HasSignalLock ( void   )  const [inline]

Returns true iff signalLock.IsGood() returns true.

Definition at line 67 of file signalmonitor.h.

Referenced by SIScan::HasTimedOut(), and IsAllGood().

virtual bool SignalMonitor::IsAllGood ( void   )  const [inline, virtual]

void SignalMonitor::SetNotifyFrontend ( bool  notify  )  [inline]

Enables or disables frontend notification of the current signal value.

Parameters:
notify if true SIGNAL MythEvents are sent to the frontend, otherwise they are not.

Definition at line 83 of file signalmonitor.h.

Referenced by TVRec::SetupSignalMonitor().

void SignalMonitor::SetUpdateRate ( int  msec  )  [inline]

Sets the number of milliseconds between signal monitoring attempts in the signal monitoring thread.

Defaults to 25 milliseconds.

Parameters:
msec Milliseconds between signal monitoring events.

Definition at line 91 of file signalmonitor.h.

Referenced by TVRec::SetupSignalMonitor().

void SignalMonitor::deleteLater ( void   )  [virtual, slot]

Safer alternative to just deleting signal monitor directly.

Reimplemented in DTVSignalMonitor, DVBSignalMonitor, FirewireSignalMonitor, HDHRSignalMonitor, and IPTVSignalMonitor.

Definition at line 181 of file signalmonitor.cpp.

Referenced by DTVSignalMonitor::deleteLater(), SIScan::StopScanner(), TVRec::TeardownSignalMonitor(), and TVRec::TuningFrequency().

void SignalMonitor::StatusSignalLock ( const SignalMonitorValue  )  [signal]

Signal to be sent as true when it is safe to begin or continue recording, and false if it may not be safe.

Note: Signals are only sent once the monitoring thread has been started.

Referenced by DVBSignalMonitor::EmitDVBSignals(), FirewireSignalMonitor::EmitFirewireSignals(), HDHRSignalMonitor::EmitHDHRSignals(), IPTVSignalMonitor::EmitIPTVSignals(), and AnalogSignalMonitor::UpdateValues().

void SignalMonitor::StatusSignalStrength ( const SignalMonitorValue  )  [signal]

Signal to be sent with an actual signal value.

Note: Signals are only sent once the monitoring thread has been started.

Referenced by DVBSignalMonitor::EmitDVBSignals(), FirewireSignalMonitor::EmitFirewireSignals(), HDHRSignalMonitor::EmitHDHRSignals(), IPTVSignalMonitor::EmitIPTVSignals(), and AnalogSignalMonitor::UpdateValues().

void SignalMonitor::AllGood ( void   )  [signal]

Signal to be sent when you have a lock on all values.

Note: Signals are only sent once the monitoring thread has been started.

Referenced by IPTVSignalMonitor::UpdateValues(), HDHRSignalMonitor::UpdateValues(), FirewireSignalMonitor::UpdateValues(), DVBSignalMonitor::UpdateValues(), and AnalogSignalMonitor::UpdateValues().

void * SignalMonitor::SpawnMonitorLoop ( void *  self  )  [static, protected]

Runs MonitorLoop() within the monitor_thread pthread.

Definition at line 331 of file signalmonitor.cpp.

Referenced by Start().

void SignalMonitor::MonitorLoop (  )  [protected, virtual]

Basic signal monitoring loop.

Definition at line 291 of file signalmonitor.cpp.

virtual void SignalMonitor::UpdateValues ( void   )  [inline, protected, virtual]

This should be overriden to actually do signal monitoring.

Reimplemented in AnalogSignalMonitor, DVBSignalMonitor, FirewireSignalMonitor, HDHRSignalMonitor, and IPTVSignalMonitor.

Definition at line 124 of file signalmonitor.h.

Referenced by GetStatusList(), MonitorLoop(), and WaitForLock().


Member Data Documentation

const uint64_t SignalMonitor::kDTVSigMon_PATSeen = 0x0000000001ULL [static]

We've seen a PAT, which maps MPEG program numbers to pids where we find PMTs.

Definition at line 129 of file signalmonitor.h.

Referenced by FirewireSignalMonitor::HandlePAT(), DTVSignalMonitor::HandlePAT(), DTVSignalMonitor::SetChannel(), sm_flags_to_string(), and DTVSignalMonitor::UpdateMonitorValues().

const uint64_t SignalMonitor::kDTVSigMon_PMTSeen = 0x0000000002ULL [static]

const uint64_t SignalMonitor::kDTVSigMon_MGTSeen = 0x0000000004ULL [static]

We've seen an MGT, which ells us on which PIDs to find VCT and other ATSC tables.

Definition at line 135 of file signalmonitor.h.

Referenced by DTVSignalMonitor::HandleMGT(), sm_flags_to_string(), and DTVSignalMonitor::UpdateMonitorValues().

const uint64_t SignalMonitor::kDTVSigMon_VCTSeen = 0x0000000008ULL [static]

We've seen a VCT, which maps ATSC Channels to MPEG program numbers, and provides additional data.

Definition at line 138 of file signalmonitor.h.

Referenced by DTVSignalMonitor::HandleCVCT(), DTVSignalMonitor::HandleTVCT(), DTVSignalMonitor::SetChannel(), sm_flags_to_string(), and DTVSignalMonitor::UpdateMonitorValues().

const uint64_t SignalMonitor::kDTVSigMon_TVCTSeen = 0x0000000010ULL [static]

We've seen a TVCT, the terrestrial version of the VCT.

Definition at line 140 of file signalmonitor.h.

Referenced by DTVSignalMonitor::HandleTVCT(), and sm_flags_to_string().

const uint64_t SignalMonitor::kDTVSigMon_CVCTSeen = 0x0000000020ULL [static]

We've seen a CVCT, the cable version of the VCT.

Definition at line 142 of file signalmonitor.h.

Referenced by DTVSignalMonitor::HandleCVCT(), and sm_flags_to_string().

const uint64_t SignalMonitor::kDTVSigMon_NITSeen = 0x0000000040ULL [static]

We've seen an NIT, which tells us where to find SDT and other DVB tables.

Definition at line 145 of file signalmonitor.h.

Referenced by DTVSignalMonitor::HandleNIT(), sm_flags_to_string(), and DTVSignalMonitor::UpdateMonitorValues().

const uint64_t SignalMonitor::kDTVSigMon_SDTSeen = 0x0000000080ULL [static]

We've seen an SDT, which maps DVB Channels to MPEG program numbers, and provides additional data.

Definition at line 148 of file signalmonitor.h.

Referenced by DTVSignalMonitor::HandleSDT(), DTVSignalMonitor::SetDVBService(), sm_flags_to_string(), and DTVSignalMonitor::UpdateMonitorValues().

const uint64_t SignalMonitor::kFWSigMon_PowerSeen = 0x0000000100ULL [static]

We've seen the FireWire STB power state.

Definition at line 150 of file signalmonitor.h.

Referenced by sm_flags_to_string(), and FirewireSignalMonitor::UpdateValues().

const uint64_t SignalMonitor::kDTVSigMon_CryptSeen = 0x0000000200ULL [static]

const uint64_t SignalMonitor::kDTVSigMon_PATMatch = 0x0000001000ULL [static]

const uint64_t SignalMonitor::kDTVSigMon_PMTMatch = 0x0000002000ULL [static]

const uint64_t SignalMonitor::kDTVSigMon_MGTMatch = 0x0000004000ULL [static]

We've seen an MGT matching our requirements.

Definition at line 159 of file signalmonitor.h.

Referenced by DTVSignalMonitor::HandleMGT(), sm_flags_to_string(), and DTVSignalMonitor::UpdateMonitorValues().

const uint64_t SignalMonitor::kDTVSigMon_VCTMatch = 0x0000008000ULL [static]

const uint64_t SignalMonitor::kDTVSigMon_TVCTMatch = 0x0000010000ULL [static]

We've seen a TVCT matching our requirements.

Definition at line 163 of file signalmonitor.h.

Referenced by DTVSignalMonitor::HandleTVCT(), and sm_flags_to_string().

const uint64_t SignalMonitor::kDTVSigMon_CVCTMatch = 0x0000020000ULL [static]

We've seen a CVCT matching our requirements.

Definition at line 165 of file signalmonitor.h.

Referenced by DTVSignalMonitor::HandleCVCT(), and sm_flags_to_string().

const uint64_t SignalMonitor::kDTVSigMon_NITMatch = 0x0000040000ULL [static]

We've seen an NIT matching our requirements.

Definition at line 167 of file signalmonitor.h.

Referenced by sm_flags_to_string(), and DTVSignalMonitor::UpdateMonitorValues().

const uint64_t SignalMonitor::kDTVSigMon_SDTMatch = 0x0000080000ULL [static]

We've seen an SDT matching our requirements.

Definition at line 169 of file signalmonitor.h.

Referenced by DTVSignalMonitor::HandleSDT(), DTVSignalMonitor::SetDVBService(), sm_flags_to_string(), and DTVSignalMonitor::UpdateMonitorValues().

const uint64_t SignalMonitor::kFWSigMon_PowerMatch = 0x0000100000ULL [static]

We've seen a FireWire STB power state matching our requirements.

Definition at line 171 of file signalmonitor.h.

Referenced by sm_flags_to_string(), and FirewireSignalMonitor::UpdateValues().

const uint64_t SignalMonitor::kDTVSigMon_CryptMatch = 0x0000200000ULL [static]

const uint64_t SignalMonitor::kDTVSigMon_WaitForPAT = 0x0001000000ULL [static]

const uint64_t SignalMonitor::kDTVSigMon_WaitForPMT = 0x0002000000ULL [static]

const uint64_t SignalMonitor::kDTVSigMon_WaitForMGT = 0x0004000000ULL [static]

const uint64_t SignalMonitor::kDTVSigMon_WaitForVCT = 0x0008000000ULL [static]

const uint64_t SignalMonitor::kDTVSigMon_WaitForNIT = 0x0010000000ULL [static]

const uint64_t SignalMonitor::kDTVSigMon_WaitForSDT = 0x0020000000ULL [static]

const uint64_t SignalMonitor::kDTVSigMon_WaitForSig = 0x0040000000ULL [static]

const uint64_t SignalMonitor::kFWSigMon_WaitForPower = 0x0080000000ULL [static]

Definition at line 182 of file signalmonitor.h.

Referenced by sm_flags_to_string(), and FirewireSignalMonitor::UpdateValues().

const uint64_t SignalMonitor::kDTVSigMon_WaitForCrypt = 0x0100000000ULL [static]

const uint64_t SignalMonitor::kDTVSigMon_WaitForAll = 0x01FF000000ULL [static]

Definition at line 185 of file signalmonitor.h.

const uint64_t SignalMonitor::kDVBSigMon_WaitForSNR = 0x1000000000ULL [static]

Wait for the Signal to Noise Ratio to rise above a threshhold.

Definition at line 188 of file signalmonitor.h.

Referenced by DVBSignalMonitor::DVBSignalMonitor(), DVBSignalMonitor::EmitDVBSignals(), DVBSignalMonitor::GetStatusList(), sm_flags_to_string(), and DVBSignalMonitor::UpdateValues().

const uint64_t SignalMonitor::kDVBSigMon_WaitForBER = 0x2000000000ULL [static]

const uint64_t SignalMonitor::kDVBSigMon_WaitForUB = 0x4000000000ULL [static]

Wait for uncorrected FEC blocks to fall below a threshhold.

Definition at line 192 of file signalmonitor.h.

Referenced by DVBSignalMonitor::DVBSignalMonitor(), DVBSignalMonitor::EmitDVBSignals(), DVBSignalMonitor::GetStatusList(), sm_flags_to_string(), and DVBSignalMonitor::UpdateValues().

const uint64_t SignalMonitor::kDVBSigMon_WaitForPos = 0x8000000000ULL [static]

Definition at line 197 of file signalmonitor.h.

Referenced by Start(), and Stop().

Definition at line 199 of file signalmonitor.h.

Referenced by MonitorLoop().

int SignalMonitor::update_rate [protected]

Definition at line 201 of file signalmonitor.h.

Referenced by GetUpdateRate(), MonitorLoop(), and SetUpdateRate().

Definition at line 202 of file signalmonitor.h.

Referenced by DVBSignalMonitor::DVBSignalMonitor(), and SetUpdateRate().

Definition at line 206 of file signalmonitor.h.

Referenced by GetNotifyFrontend(), MonitorLoop(), and SetNotifyFrontend().

QMutex SignalMonitor::startStopLock [protected]

Definition at line 211 of file signalmonitor.h.

Referenced by Start(), and Stop().

QMutex SignalMonitor::statusLock [mutable, protected]


The documentation for this class was generated from the following files:

Generated on Sat Dec 18 05:16:11 2010 for MythTV by  doxygen 1.5.5