// Retrives list of possible completions for a n's parameter const cli::ParameterVector ScanStart::getCompletion(const cli::ParameterVector& setparams) { cli::ParameterVector res; if (setparams.empty()) { // possible source names IDevList list = getFactory()->getResources()->getResourceByType(dev::DVB_ALL); for (IDevList::iterator i = list.begin(); i != list.end(); i++) { const std::string source = (*i)->getStringParam(dev::SOURCE); if (!source.empty()) { const std::string source_name = dvb::Utils::getSourceName(getFactory(), source); if (std::find(res.begin(), res.end(), source_name) == res.end()) { res.push_back(source_name); } } } } else if (setparams.size() == 1) { IDevPtr dev = getDev(setparams[0]); // possible frequency table StringList list; if (dev->getStringParam(dev::TYPE) == dev::DVB_T) { list = base::Utils::getFiles(dir::SHARE + "/scan/dvb-t"); } else if (dev->getStringParam(dev::TYPE) == dev::DVB_S) { list = base::Utils::getFiles(dir::SHARE + "/scan/dvb-s"); } for (StringList::iterator i = list.begin(); i != list.end(); i++) { const std::string fname = base::Utils::getFileName(*i); if (std::find(res.begin(), res.end(), fname) == res.end()) { res.push_back(fname); } } } return res; }
// Process the command const std::string ScanStart::process( const cli::ParameterVector& params) { if (getModule<Scan>()->isScanStarted() == true) { return "Scan is already running\n"; } if (params.size() != 2) { return getUsage(); } // check source const std::string source_name(params[0]); IDevPtr dev = getDev(source_name); // check frequency table std::string scanfile = params[1]; if (*scanfile.begin() != '/') { if (dev->getStringParam(dev::TYPE) == dev::DVB_T) { scanfile = dir::SHARE + "/scan/dvb-t/" + scanfile; } else if (dev->getStringParam(dev::TYPE) == dev::DVB_S) { scanfile = dir::SHARE + "/scan/dvb-s/" + scanfile; } else { return "Unsupported DVB dev type\n"; } } if (base::Utils::fileExist(scanfile) == false) { return "Scan data file does not exist: " + scanfile + "\n"; } getModule<Scan>()->startScan( dev->getStringParam(dev::SOURCE), scanfile); std::string info = "started scan\n"; return info; }
inline bool operator()(const IDevPtr dev, const std::string source) { if (dev->hasParam(dev::SOURCE) == false) return false; if (dev->getIntParam(dev::LOSTLOCK) != 0) { klk_log(KLKLOG_DEBUG, "DVB dev '%s' has lost lock " "and was ignored for new streaming", dev->getStringParam(dev::NAME).c_str()); return false; // the dev lost lock } return (dev->getState() == dev::IDLE && dev->getStringParam(dev::SOURCE) == source); }
// Gets a StreamThread pointer const IThreadInfoPtr TestThreadFactory::createStreamThread(const IDevPtr& dev) { boost::shared_ptr<TestThread> thread(new TestThread(this)); // the dev always has a lock dev->setParam(dev::HASLOCK, 1); return IThreadInfoPtr(new ThreadInfo(thread, dev, thread)); }
inline bool operator()(IFactory* factory, const IDevPtr dev, const std::string source_name) { const std::string source_uuid = dev->getStringParam(dev::SOURCE); const std::string dev_source_name = dvb::Utils::getSourceName(factory, source_uuid); return (dev_source_name == source_name); }
inline bool operator()(const IDevPtr dev, int freq, std::string source) { if (dev->hasParam(dev::SOURCE) == false) return false; if (dev->getIntParam(dev::LOSTLOCK) != 0) { klk_log(KLKLOG_DEBUG, "DVB dev '%s' has lost lock " "and was ignored for continue streaming", dev->getStringParam(dev::NAME).c_str()); return false; // the dev lost lock } // look only STREAMMING if (!dev->hasParam(dev::DVBACTIVITY)) return false; // ignore without activity if (dev->getStringParam(dev::DVBACTIVITY) != dev::STREAMING) return false; // ignore not streaming // Frequency should be set BOOST_ASSERT(dev->hasParam(dev::FREQUENCY) == true); return (dev->getIntParam(dev::FREQUENCY) == freq && dev->getStringParam(dev::SOURCE) == source); }
// Checks a DVB dev state void DVB::checkDVBDev(const IDevPtr& dev) { BOOST_ASSERT(dev); // check last update time bool old = (static_cast<u_long>(time(NULL)) > dev->getLastUpdateTime() + CHECKINTERVAL); // first of all to clear lost lock flag // to be able to use the dev // dont update last update time dev->setParam(dev::LOSTLOCK, 0, true); if (dev->getState() == dev::IDLE) { // just clear lost lock flag return; } // check update time if (old) { getFactory()->getSNMP()->sendTrap( TRAP_TIMEOUT, dev->getStringParam(dev::UUID)); klk_log(KLKLOG_ERROR, "Cannot retrive DVB device state within %d seconds. " "Device UUID: '%s'", CHECKINTERVAL, dev->getStringParam(dev::UUID).c_str()); // signal lost m_processor->doSignalLost(dev); return; } // check has lock if (dev->getIntParam(dev::HASLOCK) == 0) { getFactory()->getSNMP()->sendTrap( TRAP_NOSIGNAL, dev->getStringParam(dev::UUID)); klk_log(KLKLOG_ERROR, "DVB dev does not get a lock " "Device name: '%s'", dev->getStringParam(dev::NAME).c_str()); // signal lost m_processor->doSignalLost(dev); return; } // check signal if (dev->getIntParam(dev::SIGNAL) < SIGNAL_THRESHOLD) { getFactory()->getSNMP()->sendTrap( TRAP_BADSIGNAL, dev->getStringParam(dev::UUID)); klk_log(KLKLOG_ERROR, "Bad signal strength: Failed %d < %d. " "Device name: '%s'", signal, SIGNAL_THRESHOLD, dev->getStringParam(dev::NAME).c_str()); #if 0 //FIXME!!! sometime can really have signal if (signal == 0) { // signal lost m_processor->doSignalLost(dev); } #endif } // check snr int snr = dev->getIntParam(dev::SNR); if (snr < SNR_THRESHOLD) { getFactory()->getSNMP()->sendTrap( TRAP_BADSNR, dev->getStringParam(dev::UUID)); klk_log(KLKLOG_ERROR, "Bad SNR: %d < %d. " "Device name: '%s'", snr, SNR_THRESHOLD, dev->getStringParam(dev::NAME).c_str()); } // check ber int ber = dev->getIntParam(dev::BER); if (ber > BER_THRESHOLD) { getFactory()->getSNMP()->sendTrap( TRAP_BADBER, dev->getStringParam(dev::UUID)); klk_log(KLKLOG_ERROR, "Bad BER: %d > %d. " "Device name: '%s'", ber, BER_THRESHOLD, dev->getStringParam(dev::NAME).c_str()); } // check unc int unc = dev->getIntParam(dev::UNC); if (unc > UNC_THRESHOLD) { getFactory()->getSNMP()->sendTrap( TRAP_BADUNC, dev->getStringParam(dev::UUID)); klk_log(KLKLOG_ERROR, "Bad UNC: %d > %d. " "Device name: '%s'", unc, UNC_THRESHOLD, dev->getStringParam(dev::NAME).c_str()); } }