Example #1
0
// 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;
}
Example #2
0
// 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;
}
Example #3
0
    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);
    }
Example #4
0
// 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));
}
Example #5
0
 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);
     }
Example #6
0
    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);
    }
Example #7
0
// 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());
    }
}