Beispiel #1
0
/** Determines which delivery system to use. */
static const delsys_t *GuessSystem (const char *scheme, dvb_device_t *dev)
{
    /* NOTE: We should guess the delivery system for the "cable", "satellite"
     * and "terrestrial" shortcuts (i.e. DVB, ISDB, ATSC...). But there is
     * seemingly no sane way to do get the info with Linux DVB version 5.2.
     * In particular, the frontend infos distinguish only the modulator class
     * (QPSK, QAM, OFDM or ATSC).
     *
     * Furthermore, if the demodulator supports 2G, we cannot guess whether
     * 1G or 2G is intended. For backward compatibility, 1G is assumed
     * (this is not a limitation of Linux DVB). We will probably need something
     * smarter when 2G (semi automatic) scanning is implemented. */
    if (!strcasecmp (scheme, "cable"))
        scheme = "dvb-c";
    else
    if (!strcasecmp (scheme, "satellite"))
        scheme = "dvb-s";
    else
    if (!strcasecmp (scheme, "terrestrial"))
        scheme = "dvb-t";

    if (!strcasecmp (scheme, "atsc"))
        return &atsc;
    if (!strcasecmp (scheme, "cqam"))
        return &cqam;
    if (!strcasecmp (scheme, "dvb-c"))
        return &dvbc;
    if (!strcasecmp (scheme, "dvb-s"))
        return &dvbs;
    if (!strcasecmp (scheme, "dvb-s2"))
        return &dvbs2;
    if (!strcasecmp (scheme, "dvb-t"))
        return &dvbt;
    if (!strcasecmp (scheme, "dvb-t2"))
        return &dvbt2;
    if (!strcasecmp (scheme, "isdb-c"))
        return &isdbc;
    if (!strcasecmp (scheme, "isdb-s"))
        return &isdbs;
    if (!strcasecmp (scheme, "isdb-t"))
        return &isdbt;

    unsigned systems = dvb_enum_systems (dev);
    if (systems & ATSC)
        return &atsc;
    if (systems & DVB_C)
        return &dvbc;
    if (systems & DVB_S)
        return &dvbc;
    if (systems & DVB_T)
        return &dvbt;
    return NULL;
}
Beispiel #2
0
/** Determines which delivery system to use. */
static const delsys_t *GuessSystem (const char *scheme, dvb_device_t *dev)
{
    /* Specific delivery system is specified */
    if (!strcasecmp (scheme, "atsc"))
        return &atsc;
    if (!strcasecmp (scheme, "cqam"))
        return &cqam;
    if (!strcasecmp (scheme, "dvb-c"))
        return &dvbc;
    if (!strcasecmp (scheme, "dvb-s"))
        return &dvbs;
    if (!strcasecmp (scheme, "dvb-s2"))
        return &dvbs2;
    if (!strcasecmp (scheme, "dvb-t"))
        return &dvbt;
    if (!strcasecmp (scheme, "dvb-t2"))
        return &dvbt2;
    if (!strcasecmp (scheme, "isdb-c"))
        return &isdbc;
    if (!strcasecmp (scheme, "isdb-s"))
        return &isdbs;
    if (!strcasecmp (scheme, "isdb-t"))
        return &isdbt;

    /* If the demodulator supports 2G, we cannot guess whether
     * 1G or 2G is intended. For backward compatibility, 1G is assumed
     * (this is not a limitation of Linux DVB). We will probably need something
     * smarter when 2G (semi automatic) scanning is implemented. */
    unsigned systems = dvb_enum_systems (dev);

    /* Only wave carrier is specified */
    if (!strcasecmp (scheme, "cable"))
    {
        if (systems & DVB_C)
            return &dvbc;
        if (systems & CQAM)
            return &cqam;
        if (systems & ISDB_C)
            return &isdbc;
    }
    if (!strcasecmp (scheme, "satellite"))
    {
        if (systems & DVB_S)
            return &dvbs;
        if (systems & ISDB_S)
            return &isdbs;
    }
    if (!strcasecmp (scheme, "terrestrial"))
    {
        if (systems & DVB_T)
            return &dvbc;
        if (systems & ATSC)
            return &cqam;
        if (systems & ISDB_T)
            return &isdbt;
    }

    /* Only standards family or nothing is specified */
    if (systems & DVB_C)
        return &dvbc;
    if (systems & DVB_S)
        return &dvbs;
    if (systems & DVB_T)
        return &dvbt;
    if (systems & ATSC)
        return &atsc;
    return NULL;
}