00001
00008 #include "mythlogging.h"
00009 #include "mythdbcon.h"
00010
00011 #include "cetonsignalmonitor.h"
00012 #include "cetonstreamhandler.h"
00013 #include "cetonrecorder.h"
00014 #include "cetonchannel.h"
00015
00016 #define LOC QString("CetonSM(%1): ").arg(channel->GetDevice())
00017
00032 CetonSignalMonitor::CetonSignalMonitor(
00033 int db_cardnum, CetonChannel* _channel, uint64_t _flags) :
00034 DTVSignalMonitor(db_cardnum, _channel, _flags),
00035 streamHandlerStarted(false), streamHandler(NULL)
00036 {
00037 LOG(VB_CHANNEL, LOG_INFO, LOC + "ctor");
00038
00039 signalStrength.SetThreshold(45);
00040
00041 AddFlags(kSigMon_WaitForSig);
00042
00043 streamHandler = CetonStreamHandler::Get(_channel->GetDevice());
00044 }
00045
00049 CetonSignalMonitor::~CetonSignalMonitor()
00050 {
00051 LOG(VB_CHANNEL, LOG_INFO, LOC + "dtor");
00052 Stop();
00053 CetonStreamHandler::Return(streamHandler);
00054 }
00055
00059 void CetonSignalMonitor::Stop(void)
00060 {
00061 LOG(VB_CHANNEL, LOG_INFO, LOC + "Stop() -- begin");
00062 SignalMonitor::Stop();
00063 if (GetStreamData())
00064 streamHandler->RemoveListener(GetStreamData());
00065 streamHandlerStarted = false;
00066
00067 LOG(VB_CHANNEL, LOG_INFO, LOC + "Stop() -- end");
00068 }
00069
00070 CetonChannel *CetonSignalMonitor::GetCetonChannel(void)
00071 {
00072 return dynamic_cast<CetonChannel*>(channel);
00073 }
00074
00081 void CetonSignalMonitor::UpdateValues(void)
00082 {
00083 if (!running || exit)
00084 return;
00085
00086 if (streamHandlerStarted)
00087 {
00088 EmitStatus();
00089 if (IsAllGood())
00090 SendMessageAllGood();
00091
00092
00093
00094 update_done = true;
00095 return;
00096 }
00097
00098 uint sig = 100;
00099
00100
00101 bool isLocked = false;
00102 {
00103 QMutexLocker locker(&statusLock);
00104 signalStrength.SetValue(sig);
00105 signalLock.SetValue(true);
00106
00107 isLocked = signalLock.IsGood();
00108 }
00109
00110 EmitStatus();
00111 if (IsAllGood())
00112 SendMessageAllGood();
00113
00114
00115
00116 if (isLocked && GetStreamData() &&
00117 HasAnyFlag(kDTVSigMon_WaitForPAT | kDTVSigMon_WaitForPMT |
00118 kDTVSigMon_WaitForMGT | kDTVSigMon_WaitForVCT |
00119 kDTVSigMon_WaitForNIT | kDTVSigMon_WaitForSDT))
00120 {
00121 streamHandler->AddListener(GetStreamData());
00122 streamHandlerStarted = true;
00123 }
00124
00125 update_done = true;
00126 }