Ticket #1990: myth_bandstacked_r10285.diff

File myth_bandstacked_r10285.diff, 20.2 KB (added by anonymous, 14 years ago)
  • libs/libmythtv/videosource.h

     
    531531class LNBLofSwitch;
    532532class LNBLofLo;
    533533class LNBLofHi;
     534class LNBLofStackLo;
     535class LNBLofStackHi;
     536class LNBBandstacked;
     537class LNBBandstackPol;
    534538
    535539class CardInput: public ConfigurationWizard
    536540{
     
    584588    LNBLofSwitch    *lnblofswitch;
    585589    LNBLofLo        *lnbloflo;
    586590    LNBLofHi        *lnblofhi;
     591    LNBLofStackLo   *lnblofstacklo;
     592    LNBLofStackHi   *lnblofstackhi;
     593    LNBBandstacked  *lnbbandstacked;
     594    LNBBandstackPol *lnbbandstackpol;
    587595    StartingChannel *startchan;
    588596};
    589597
  • libs/libmythtv/dbcheck.cpp

     
    1010#include "mythdbcon.h"
    1111
    1212/// This is the DB schema version expected by the running MythTV instance.
    13 const QString currentDatabaseVersion = "1146";
     13const QString currentDatabaseVersion = "1147";
    1414
    1515static bool UpdateDBVersionNumber(const QString &newnumber);
    1616static bool performActualUpdate(const QString updates[], QString version,
     
    23152315            return false;
    23162316    }
    23172317
     2318    if (dbver == "1145")
     2319    {
     2320        const QString updates[] = {
     2321"ALTER TABLE cardinput ADD COLUMN lnb_lof_stack_hi int(11) DEFAULT 0 AFTER lnb_lof_lo;",
     2322"ALTER TABLE cardinput ADD COLUMN lnb_lof_stack_lo int(11) DEFAULT 0 AFTER lnb_lof_stack_hi;",
     2323"ALTER TABLE cardinput ADD COLUMN bandstacked int(1) DEFAULT 0 AFTER lnb_lof_stack_lo;",
     2324"ALTER TABLE cardinput ADD COLUMN bandstack_pol char(1) DEFAULT "" AFTER bandstacked;",
     2325""
     2326};
     2327
     2328        if (!performActualUpdate(updates, "1146", dbver))
     2329            return false;
     2330    }
     2331
    23182332//"ALTER TABLE capturecard DROP COLUMN dvb_recordts;" in 0.21
    23192333//"ALTER TABLE capturecard DROP COLUMN dvb_hw_decoder;" in 0.21
    23202334//"ALTER TABLE cardinput DROP COLUMN  preference;" in 0.22
  • libs/libmythtv/dvbtypes.cpp

     
    581581
    582582    if (FE_QPSK == type)
    583583    {
    584         msg = QString("Frequency: %1 Symbol Rate: %2 Pol: %3 Inv: %4")
     584        msg = QString("Frequency: %1 Symbol Rate: %2 Pol: %3 Inv: %4 BS: %5")
    585585            .arg(Frequency())
    586586            .arg(QPSKSymbolRate())
    587587            .arg((voltage == SEC_VOLTAGE_13) ? "V/R" : "H/L")
    588             .arg(InversionString());
     588            .arg(InversionString())
     589            .arg(bandstacked ? "Y" : "N");
    589590    }
    590591    else if (FE_QAM == type)
    591592    {
     
    682683    const QString& _lnb_lof_switch,
    683684    const QString& _lnb_lof_hi,
    684685    const QString& _lnb_lof_lo,
     686    const QString& _lnb_lof_stack_hi,
     687    const QString& _lnb_lof_stack_lo,
     688    const QString& _bandstacked,
     689    const QString& bandstack_pol,
    685690    const QString &modulation)
    686691{
    687692    bool ok = true;
     
    702707        return false;
    703708    }
    704709
    705     voltage = parsePolarity(pol, ok);
     710    voltage = parsePolarity(pol, _bandstacked, bandstack_pol, ok);
    706711    if (SEC_VOLTAGE_OFF == voltage)
    707712    {
    708713        VERBOSE(VB_IMPORTANT, LOC_ERR + "Invalid polarization, aborting.");
     
    718723    lnb_lof_switch = _lnb_lof_switch.toInt();
    719724    lnb_lof_hi  = _lnb_lof_hi.toInt();
    720725    lnb_lof_lo  = _lnb_lof_lo.toInt();
     726    lnb_lof_stack_hi = _lnb_lof_stack_hi.toInt();
     727    lnb_lof_stack_lo = _lnb_lof_stack_lo.toInt();
    721728    return true;
    722729}
    723730#endif
     
    730737                          const QString& _diseqc_pos,
    731738                          const QString& _lnb_lof_switch,
    732739                          const QString& _lnb_lof_hi,
    733                           const QString& _lnb_lof_lo)
     740                          const QString& _lnb_lof_lo,
     741                          const QString& _lnb_lof_stack_hi,
     742                          const QString& _lnb_lof_stack_lo,
     743                          const QString& _bandstacked,
     744                          const QString& bandstack_pol)
    734745{
    735746    bool ok = true;
    736747
     
    753764        return false;
    754765    }
    755766
    756     voltage = parsePolarity(pol, ok);
     767    voltage = parsePolarity(pol, _bandstacked, bandstack_pol, ok);
    757768    if (SEC_VOLTAGE_OFF == voltage)
    758769    {
    759770        VERBOSE(VB_IMPORTANT, LOC_ERR + "Invalid polarization, aborting.");
     
    769780    lnb_lof_switch = _lnb_lof_switch.toInt();
    770781    lnb_lof_hi  = _lnb_lof_hi.toInt();
    771782    lnb_lof_lo  = _lnb_lof_lo.toInt();
     783    lnb_lof_stack_hi = _lnb_lof_stack_hi.toInt();
     784    lnb_lof_stack_lo = _lnb_lof_stack_lo.toInt();
    772785    return true;
    773786}
    774787
     
    823836    return BANDWIDTH_AUTO;
    824837}
    825838
    826 fe_sec_voltage DVBTuning::parsePolarity(const QString &pol, bool &ok)
     839fe_sec_voltage DVBTuning::parsePolarity(const QString &pol, const QString &_bandstacked,
     840                                        const QString &bandstack_pol, bool &ok)
    827841{
     842    fe_sec_voltage voltage;
     843    fe_sec_voltage voltage_stack;
     844
    828845    char polarity = QChar(pol[0]).lower();
     846    char polarity_stack = QChar(bandstack_pol[0]).lower();
    829847    ok = true;
    830848    switch (polarity)
    831849    {
    832850        case 'v':
    833         case 'r': return SEC_VOLTAGE_13;
     851        case 'r':
     852            voltage = SEC_VOLTAGE_13;
     853            break;
    834854        case 'h':
    835         case 'l': return SEC_VOLTAGE_18;
    836         default: return SEC_VOLTAGE_OFF;
     855        case 'l':
     856            voltage = SEC_VOLTAGE_18;
     857            break;
     858        default:
     859            voltage = SEC_VOLTAGE_OFF;
    837860    }
     861
     862    switch (polarity_stack)
     863    {
     864        case 'v':
     865        case 'r':
     866            voltage_stack = SEC_VOLTAGE_13;
     867            break;
     868        case 'h':
     869        case 'l':
     870            voltage_stack = SEC_VOLTAGE_18;
     871            break;
     872        default:
     873            voltage_stack = SEC_VOLTAGE_OFF;
     874    }
     875
     876    if (_bandstacked.toInt() && (voltage == voltage_stack))
     877    {
     878        bandstacked = true;
     879
     880        switch (voltage)
     881        {
     882            case SEC_VOLTAGE_13:
     883                voltage = SEC_VOLTAGE_18;
     884                break;
     885            case SEC_VOLTAGE_18:
     886                voltage = SEC_VOLTAGE_13;
     887                break;
     888            default:
     889                voltage = SEC_VOLTAGE_OFF;
     890        }
     891    }
     892    else
     893        bandstacked = false;
     894
     895    return voltage;
    838896}
    839897
    840898fe_guard_interval DVBTuning::parseGuardInterval(const QString &gi, bool &ok)
  • libs/libmythtv/scanwizardscanner.cpp

     
    276276    MSqlQuery query(MSqlQuery::InitCon());
    277277    query.prepare(
    278278        "SELECT dvb_diseqc_type, diseqc_port,  diseqc_pos, "
    279         "       lnb_lof_switch,  lnb_lof_hi,   lnb_lof_lo "
     279        "       lnb_lof_switch,  lnb_lof_hi,   lnb_lof_lo, "
     280        "       lnb_lof_stack_hi, lnb_lof_stack_lo, "
     281        "       bandstacked, bandstack_pol "
    280282        "FROM cardinput, capturecard "
    281283        "WHERE cardinput.cardid   = capturecard.cardid AND "
    282284        "      cardinput.cardid   = :CARDID            AND "
     
    298300        startChan["lnb_lof_switch"] = query.value(3).toString();
    299301        startChan["lnb_lof_hi"]     = query.value(4).toString();
    300302        startChan["lnb_lof_lo"]     = query.value(5).toString();
     303        startChan["lnb_lof_stack_hi"] = query.value(6).toString();
     304        startChan["lnb_lof_stack_lo"] = query.value(7).toString();
     305        startChan["bandstacked"]      = query.value(8).toString();
     306        startChan["bandstack_pol"]    = query.value(9).toString();
    301307        return true;
    302308    }
    303309
     
    387393                startChan["polarity"],
    388394                startChan["diseqc_type"], startChan["diseqc_port"],
    389395                startChan["diseqc_pos"],  startChan["lnb_lof_switch"],
    390                 startChan["lnb_lof_hi"],  startChan["lnb_lof_lo"]);
     396                startChan["lnb_lof_hi"],  startChan["lnb_lof_lo"],
     397                startChan["lnb_lof_stack_hi"], startChan["lnb_lof_stack_lo"],
     398                startChan["bandstacked"], startChan["bandstack_pol"]);
    391399        }
    392400#endif // USING_DVB
    393401    }
  • libs/libmythtv/siscan.cpp

     
    830830            startChan["polarity"],
    831831            startChan["diseqc_type"], startChan["diseqc_port"],
    832832            startChan["diseqc_pos"],  startChan["lnb_lof_switch"],
    833             startChan["lnb_lof_hi"],  startChan["lnb_lof_lo"]);
     833            startChan["lnb_lof_hi"],  startChan["lnb_lof_lo"],
     834            startChan["lnb_lof_stack_hi"], startChan["lnb_lof_stack_lo"],
     835            startChan["bandstacked"], startChan["bandstacked_pol"]);
    834836    }
    835837    else if (std == "dvb" && mod.left(3) == "qam")
    836838    {
  • libs/libmythtv/dvbchannel.h

     
    8787        QString frequency,    QString inversion,      QString symbolrate,
    8888        QString fec,          QString polarity,       QString dvb_diseqc_type,
    8989        QString diseqc_port,  QString diseqc_pos,     QString lnb_lof_switch,
    90         QString lnb_lof_hi,   QString lnb_lof_lo,     QString _sistandard,
     90        QString lnb_lof_hi,   QString lnb_lof_lo,     QString lnb_lof_stack_hi,
     91        QString lnb_lof_stack_lo, QString bandstacked, QString bandstack_pol,
     92        QString _sistandard,
    9193        QString hp_code_rate, QString lp_code_rate,   QString constellation,
    9294        QString trans_mode,   QString guard_interval, QString hierarchy,
    9395        QString modulation,   QString bandwidth,      QString _input_id);
  • libs/libmythtv/dvbtypes.h

     
    320320    DVBTuning()
    321321      : voltage(SEC_VOLTAGE_OFF), tone(SEC_TONE_OFF),
    322322        diseqc_type(0), diseqc_port(0), diseqc_pos(0.0f),
    323         lnb_lof_switch(0), lnb_lof_hi(0), lnb_lof_lo(0)
     323        lnb_lof_switch(0), lnb_lof_hi(0), lnb_lof_lo(0),
     324        lnb_lof_stack_hi(0), lnb_lof_stack_lo(0),
     325        bandstacked(false)
    324326    {
    325327        bzero(&params, sizeof(dvb_fe_params));
    326328    }
     
    334336    unsigned int        lnb_lof_switch;
    335337    unsigned int        lnb_lof_hi;
    336338    unsigned int        lnb_lof_lo;
     339    unsigned int        lnb_lof_stack_hi;
     340    unsigned int        lnb_lof_stack_lo;
     341    bool                bandstacked;
    337342
    338343    bool equalQPSK(const DVBTuning& other, uint range = 0) const
    339344        { return equal_qpsk(params, other.params, range);  }
     
    356361
    357362    // Helper functions to parse params from DB friendly strings
    358363    static fe_bandwidth      parseBandwidth(    const QString&, bool &ok);
    359     static fe_sec_voltage    parsePolarity(     const QString&, bool &ok);
    360364    static fe_guard_interval parseGuardInterval(const QString&, bool &ok);
    361365    static fe_transmit_mode  parseTransmission( const QString&, bool &ok);
    362366    static fe_hierarchy      parseHierarchy(    const QString&, bool &ok);
    363367    static fe_spectral_inversion parseInversion(const QString&, bool &ok);
    364368    static fe_code_rate      parseCodeRate(     const QString&, bool &ok);
    365369    static fe_modulation     parseModulation(   const QString&, bool &ok);
     370    fe_sec_voltage           parsePolarity(     const QString&, const QString&,
     371                                                const QString&, bool &ok);
    366372
    367373    // Helper functions for UI and DB
    368374    uint Frequency()      const { return params.frequency; }
     
    393399                   const QString& pol,            const QString& diseqc_type,
    394400                   const QString& diseqc_port,    const QString& diseqc_pos,
    395401                   const QString& lnb_lof_switch, const QString& lnb_lof_hi,
    396                    const QString& lnb_lof_lo);
     402                   const QString& lnb_lof_lo,     const QString& lnb_lof_stack_hi,
     403                   const QString& lnb_lof_stack_lo, const QString& bandstacked,
     404                   const QString& bandstack_pol);
    397405
    398406    bool parseQAM(const QString& frequency,       const QString& inversion,
    399407                  const QString& symbol_rate,     const QString& fec_inner,
     
    408416                   const QString& pol,            const QString& diseqc_type,
    409417                   const QString& diseqc_port,    const QString& diseqc_pos,
    410418                   const QString& lnb_lof_switch, const QString& lnb_lof_hi,
    411                    const QString& lnb_lof_lo,     const QString& modulation);
     419                   const QString& lnb_lof_lo,     const QString& lnb_lof_stack_hi,
     420                   const QString& lnb_lof_stack_lo, const QString& bandstacked,
     421                   const QString& bandstack_pol,  const QString& modulation);
    412422#endif
    413423};
    414424
  • libs/libmythtv/dvbchannel.cpp

     
    408408        "SELECT frequency,         inversion,      symbolrate, "
    409409        "       fec,               polarity,       dvb_diseqc_type, "
    410410        "       diseqc_port,       diseqc_pos,     lnb_lof_switch, "
    411         "       lnb_lof_hi,        lnb_lof_lo,     sistandard, "
     411        "       lnb_lof_hi,        lnb_lof_lo,     lnb_lof_stack_hi, "
     412        "       lnb_lof_stack_lo, "
     413        "       bandstacked,       bandstack_pol,  sistandard, "
    412414        "       hp_code_rate,      lp_code_rate,   constellation, "
    413415        "       transmission_mode, guard_interval, hierarchy, "
    414416        "       modulation,        bandwidth,      cardinputid "
     
    447449        query.value(14).toString(), query.value(15).toString(),
    448450        query.value(16).toString(), query.value(17).toString(),
    449451        query.value(18).toString(), query.value(19).toString(),
    450         query.value(20).toString());
     452        query.value(20).toString(), query.value(21).toString(),
     453        query.value(22).toString(), query.value(23).toString(),
     454        query.value(23).toString());
    451455}
    452456
    453457bool DVBChannel::ParseTuningParams(
     
    455459    QString frequency,    QString inversion,      QString symbolrate,
    456460    QString fec,          QString polarity,       QString dvb_diseqc_type,
    457461    QString diseqc_port,  QString diseqc_pos,     QString lnb_lof_switch,
    458     QString lnb_lof_hi,   QString lnb_lof_lo,     QString _sistandard,
     462    QString lnb_lof_hi,   QString lnb_lof_lo,     QString lnb_lof_stack_hi,
     463    QString lnb_lof_stack_lo,
     464    QString bandstacked,  QString bandstack_pol,  QString _sistandard,
    459465    QString hp_code_rate, QString lp_code_rate,   QString constellation,
    460466    QString trans_mode,   QString guard_interval, QString hierarchy,
    461467    QString modulation,   QString bandwidth,      QString _input_id)
     
    467473        return cur_tuning.parseQPSK(
    468474            frequency,       inversion,     symbolrate,   fec,   polarity,
    469475            dvb_diseqc_type, diseqc_port,   diseqc_pos,
    470             lnb_lof_switch,  lnb_lof_hi,    lnb_lof_lo);
     476            lnb_lof_switch,  lnb_lof_hi,    lnb_lof_lo,   lnb_lof_stack_hi,
     477            lnb_lof_stack_lo, bandstacked,  bandstack_pol);
    471478    else if (FE_QAM == type)
    472479        return cur_tuning.parseQAM(
    473480            frequency,       inversion,     symbolrate,   fec,   modulation);
     
    483490        return cur_tuning.parseDVBS2(
    484491            frequency,       inversion,     symbolrate,   fec,   polarity,
    485492            dvb_diseqc_type, diseqc_port,   diseqc_pos,
    486             lnb_lof_switch,  lnb_lof_hi,    lnb_lof_lo, modulation);
     493            lnb_lof_switch,  lnb_lof_hi,    lnb_lof_lo,   lnb_lof_stack_hi,
     494            lnb_lof_stack_lo, bandstacked,  bandstack_pol, modulation);
    487495#endif // FE_GET_EXTENDED_INFO
    488496   
    489497    return false;
     
    864872        return tuning.Frequency();
    865873#endif
    866874
     875    unsigned int lnb_lof_hi;
     876    unsigned int lnb_lof_lo;
     877
     878    if (tuning.bandstacked)
     879    {
     880        lnb_lof_hi = tuning.lnb_lof_stack_hi;
     881        lnb_lof_lo = tuning.lnb_lof_stack_lo;
     882    }
     883    else
     884    {
     885        lnb_lof_hi = tuning.lnb_lof_hi;
     886        lnb_lof_lo = tuning.lnb_lof_lo;
     887    }
     888
    867889    uint freq   = tuning.Frequency();
    868890    bool tone   = freq >= tuning.lnb_lof_switch;
    869     uint lnb_hi = (uint) abs((int)freq - (int)tuning.lnb_lof_hi);
    870     uint lnb_lo = (uint) abs((int)freq - (int)tuning.lnb_lof_lo);
     891    uint lnb_hi = (uint) abs((int)freq - (int)lnb_lof_hi);
     892    uint lnb_lo = (uint) abs((int)freq - (int)lnb_lof_lo);
    871893
    872894    if (p_tone)
    873895        *p_tone = (tone) ? SEC_TONE_ON : SEC_TONE_OFF;
  • libs/libmythtv/videosource.cpp

     
    15111511    };
    15121512};
    15131513
     1514class LNBLofStackHi: public LineEditSetting, public CISetting {
     1515  public:
     1516    LNBLofStackHi(const CardInput& parent):
     1517        CISetting(parent, "lnb_lof_stack_hi") {
     1518        setLabel(QObject::tr("Bandstacked LNB LOF High"));
     1519        setValue("13700000");
     1520        setHelpText(QObject::tr("This defines the offset (in Hz) the "
     1521                    "frequency coming from the bandstacked LNB polarity "
     1522                    "will be in high setting."));
     1523    };
     1524};
     1525
     1526class LNBLofStackLo: public LineEditSetting, public CISetting {
     1527  public:
     1528    LNBLofStackLo(const CardInput& parent):
     1529        CISetting(parent, "lnb_lof_stack_lo") {
     1530        setLabel(QObject::tr("Bandstacked LNB LOF Low"));
     1531        setValue("12850000");
     1532        setHelpText(QObject::tr("This defines the offset (in Hz) the "
     1533                    "frequency coming from the bandstacked LNB polarity "
     1534                    "will be in low setting."));
     1535    };
     1536};
     1537
     1538class LNBBandstacked: public CheckBoxSetting, public CISetting {
     1539  public:
     1540    LNBBandstacked(const CardInput& parent):
     1541        CISetting(parent, "bandstacked")
     1542    {
     1543        setValue(false);
     1544        setLabel(QObject::tr("This is a bandstacked LNB."));
     1545        setHelpText(QObject::tr("Set this if your LNB is bandstacked "
     1546                    "(Dish Network DishPro LNBFs for example)"));
     1547    };
     1548};
     1549
     1550class LNBBandstackPol: public ComboBoxSetting, public CISetting
     1551{
     1552  public:
     1553    LNBBandstackPol(const CardInput& parent):
     1554        CISetting(parent, "bandstack_pol") {
     1555        setLabel("LNB Bandstack Polarity:");
     1556        addSelection(QObject::tr("No Bandstacking"), "");
     1557        addSelection(QObject::tr("Horizontal/Left"), "h");
     1558        addSelection(QObject::tr("Verticle/Right"), "v");
     1559        setHelpText(QObject::tr("For bandstacked LNBs, select the polarity "
     1560                    "which is bandstacked."));
     1561    };
     1562};
     1563
    15141564class DiSEqCPos: public LineEditSetting, public CISetting
    15151565{
    15161566  public:
     
    17511801        dvbgroup->addChild(lnblofswitch = new LNBLofSwitch(*this));
    17521802        dvbgroup->addChild(lnblofhi = new LNBLofHi(*this));
    17531803        dvbgroup->addChild(lnbloflo = new LNBLofLo(*this));
     1804        dvbgroup->addChild(lnbbandstacked = new LNBBandstacked(*this));
     1805        dvbgroup->addChild(lnblofstacklo = new LNBLofStackLo(*this));
     1806        dvbgroup->addChild(lnblofstackhi = new LNBLofStackHi(*this));
     1807        dvbgroup->addChild(lnbbandstackpol = new LNBBandstackPol(*this));
    17541808
    17551809        dvbgroup->addChild(new FreeToAir(*this));
    17561810        dvbgroup->addChild(new RadioServices(*this));
     
    18851939            lnblofswitch->setVisible(true);
    18861940            lnbloflo->setVisible(true);
    18871941            lnblofhi->setVisible(true);
     1942            lnblofstackhi->setVisible(true);
     1943            lnblofstacklo->setVisible(true);
     1944            lnbbandstacked->setVisible(true);
     1945            lnbbandstackpol->setVisible(true);
    18881946
    18891947            DISEQC_TYPES dt = CardUtil::GetDISEqCType(_cardid);
    18901948            bool pos = (dt == DISEQC_POSITIONER_X);
     
    18961954            lnblofswitch->setVisible(false);
    18971955            lnbloflo->setVisible(false);
    18981956            lnblofhi->setVisible(false);
     1957            lnblofstackhi->setVisible(false);
     1958            lnblofstacklo->setVisible(false);
     1959            lnbbandstacked->setVisible(false);
     1960            lnbbandstackpol->setVisible(false);
    18991961        }
    19001962    }
    19011963}