// Checks DVB devs state void DVB::checkDVBDevs() { IDevList devs = getFactory()->getResources()->getResourceByType(dev::DVB_ALL); std::for_each(devs.begin(), devs.end(), boost::bind(&DVB::checkDVBDev, this, _1)); }
// Process changes at the DB // @param[in] msg - the input message void DVB::processDB(const IMessagePtr& msg) { BOOST_ASSERT(msg); // update DVB devs info from DB IDevList devs = getFactory()->getResources()->getResourceByType(dev::DVB_ALL); std::for_each(devs.begin(), devs.end(), boost::bind(&IDev::update, _1)); }
// Retrives a list with possible device names const StringList BaseCommand::getDevNames() { StringList result; IDevList list = getFactory()->getResources()->getResourceByType(dev::DVB_ALL); for (IDevList::iterator i = list.begin(); i != list.end(); i++) { result.push_back((*i)->getStringParam(dev::NAME)); } return result; }
// Finds a not used dev void StreamChannel::findFreeDev() { IDevList devs = m_factory->getResources()->getResourceByType(m_type); IDevList::iterator find = std::find_if(devs.begin(), devs.end(), boost::bind<bool>(CheckFreeDev(), _1, m_source.getValue())); if (find != devs.end()) { m_dev = *find; } }
// Finds a dev by frequency void StreamChannel::findWorkingDev(const int frequency) { IDevList devs = m_factory->getResources()->getResourceByType(m_type); IDevList::iterator find = std::find_if(devs.begin(), devs.end(), boost::bind<bool>(CheckDevByFrequency(), _1, frequency, m_source.getValue())); if (find != devs.end()) { m_dev = *find; } }
// 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; }
// Retrive dev from parameter const IDevPtr ScanStart::getDev(const std::string& source_name) { IDevList list = getFactory()->getResources()->getResourceByType(dev::DVB_ALL); IDevList::iterator dev = std::find_if( list.begin(), list.end(), boost::bind<bool>(IsMatchResource(), getFactory(), _1, source_name)); if (dev == list.end()) { throw Exception(__FILE__, __LINE__, "There is no any DVB adapter for '" + source_name + "'"); } return *dev; }
// Retrives a device by name const IDevPtr BaseCommand::getDev(const std::string& name) { IDevList list = getFactory()->getResources()->getResourceByType(dev::DVB_ALL); IDevList::const_iterator i = list.begin(); for (;i != list.end(); i++) { if ((*i)->getStringParam(dev::NAME) == name) break; } if (i == list.end()) { throw Exception(__FILE__, __LINE__, "Could not find dev with name: " + name); } (*i)->update(); return *i; }
// Processes SNMP request const snmp::IDataPtr DVB::processSNMP(const snmp::IDataPtr& req) { BOOST_ASSERT(req); snmp::ScalarPtr reqreal = boost::dynamic_pointer_cast<snmp::Scalar, snmp::IData>(req); BOOST_ASSERT(reqreal); const std::string reqstr = reqreal->getValue().toString(); // support only snmp::GETSTATUSTABLE if (reqstr != snmp::GETSTATUSTABLE) { throw Exception(__FILE__, __LINE__, "Unknown SNMP request: " + reqstr); } // create the response // table with data snmp::TablePtr table(new snmp::Table()); IDevList devs = getFactory()->getResources()->getResourceByType(dev::DVB_ALL); u_int count = 0; for (IDevList::iterator dev = devs.begin(); dev != devs.end(); dev++, count++) { // klkIndex Counter32 // klkCardName DisplayString, // klkCardType DisplayString, // klkAdapter Integer32, // klkFrontend Integer32, // klkHasLock TruthValue, // klkSignal Integer32, // klkSNR Integer32, // klkBER Integer32, // klkUNC Counter32, // klkRate Counter32 snmp::TableRow row; try { row.push_back(count); row.push_back((*dev)->getStringParam(dev::NAME)); const std::string type = (*dev)->getStringParam(dev::TYPE); if (type == dev::DVB_S) { row.push_back(DVB_S_NAME); } else if (type == dev::DVB_T) { row.push_back(DVB_T_NAME); } else if (type == dev::DVB_C) { row.push_back(DVB_C_NAME); } else { row.push_back(NOTAVAILABLE); } row.push_back((*dev)->getIntParam(dev::ADAPTER)); row.push_back((*dev)->getIntParam(dev::FRONTEND)); if ((*dev)->hasParam(dev::HASLOCK)) { row.push_back((*dev)->getIntParam(dev::HASLOCK)); row.push_back((*dev)->getIntParam(dev::SIGNAL)); row.push_back((*dev)->getIntParam(dev::SNR)); row.push_back((*dev)->getIntParam(dev::BER)); row.push_back((*dev)->getIntParam(dev::UNC)); } else { row.push_back(0); row.push_back(0); row.push_back(0); row.push_back(0); row.push_back(0); } if ((*dev)->hasParam(dev::RATE)) row.push_back((*dev)->getIntParam(dev::RATE)); else row.push_back(0); } catch(...) { row.clear(); row.push_back(count); row.push_back(NOTAVAILABLE); row.push_back(NOTAVAILABLE); row.push_back(0); row.push_back(0); row.push_back(0); row.push_back(0); row.push_back(0); row.push_back(0); row.push_back(0); row.push_back(0); } table->addRow(row); } return table; }