diff -u -r --exclude=.svn mythtv-svn-backup-09152005/mythtv/libs/libmythtv/dvbdiseqc.cpp mythtv/libs/libmythtv/dvbdiseqc.cpp --- mythtv-svn-backup-09152005/mythtv/libs/libmythtv/dvbdiseqc.cpp 2005-09-15 14:41:03.000000000 -0700 +++ mythtv/libs/libmythtv/dvbdiseqc.cpp 2005-09-16 17:08:31.000000000 -0700 @@ -88,7 +88,12 @@ if (!Diseqc1xSwitch_10way(tuning, reset, havetuned)) return false; break; - + case 9: // SW21 + case 10: // SW64 + if (!LegacyDishSwitch(tuning, reset, havetuned)) + return false; + break; + default: ERRNO("Unsupported DiSEqC type."); } @@ -96,6 +101,64 @@ return true; } +bool DVBDiSEqC::LegacyDishSwitch(DVBTuning& tuning, bool reset, + bool& havetuned) +{ + if (reset) + { + //Do legacy switches need to be reset? + } + GENERAL(QString("Legacy Dish Switch - Port %1").arg(tuning.diseqc_port)); + if ((prev_tuning.diseqc_port != tuning.diseqc_port || + prev_tuning.tone != tuning.tone || + prev_tuning.voltage != tuning.voltage) || reset) + { + dvb_diseqc_master_cmd cmd = + {{0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00}, 3}; + + switch(tuning.diseqc_type) { + //is there a pattern here? + case 9: //SW21 + if(! tuning.diseqc_port) + cmd.msg[2]=0x34; + else + cmd.msg[2]=0x65; + break; + case 10: //SW64 + if(tuning.diseqc_port == 0) + if(tuning.voltage == SEC_VOLTAGE_13) + cmd.msg[2]=0x39; + else + cmd.msg[2]=0x1A; + else if(tuning.diseqc_port == 1) + if(tuning.voltage == SEC_VOLTAGE_13) + cmd.msg[2]=0x4B; + else + cmd.msg[2]=0x5C; + else + if(tuning.voltage == SEC_VOLTAGE_13) + cmd.msg[2]=0x0D; + else + cmd.msg[2]=0x2E; + break; + } + if(tuning.voltage == SEC_VOLTAGE_18) + cmd.msg[2]|=0x80; + if (ioctl(fd_frontend, FE_DISHNETWORK_SEND_LEGACY_CMD, cmd.msg[2]) <0) + { + ERRNO("Setup: Sending init command failed."); + return false; + } + usleep(DISEQC_SHORT_WAIT); + + prev_tuning.diseqc_port = tuning.diseqc_port; + prev_tuning.tone = tuning.tone; + prev_tuning.voltage = tuning.voltage; + havetuned = true; + } + return true; +} + /***************************************************************************** Backward Compatible Methods ****************************************************************************/ diff -u -r --exclude=.svn mythtv-svn-backup-09152005/mythtv/libs/libmythtv/dvbdiseqc.h mythtv/libs/libmythtv/dvbdiseqc.h --- mythtv-svn-backup-09152005/mythtv/libs/libmythtv/dvbdiseqc.h 2005-09-15 14:41:03.000000000 -0700 +++ mythtv/libs/libmythtv/dvbdiseqc.h 2005-09-16 17:09:10.000000000 -0700 @@ -37,6 +37,7 @@ bool ToneVoltageLnb(DVBTuning& tuning, bool reset, bool& havetuned); bool ToneSwitch(DVBTuning& tuning, bool reset, bool& havetuned); + bool LegacyDishSwitch(DVBTuning& tuning, bool reset, bool& havetuned); bool Diseqc1xSwitch(DVBTuning& tuning, bool reset, bool& havetuned); bool Diseqc1xSwitch_10way(DVBTuning& tuning, bool reset, bool& havetuned); bool PositionerGoto(DVBTuning& tuning, bool reset, bool& havetuned); diff -u -r --exclude=.svn mythtv-svn-backup-09152005/mythtv/libs/libmythtv/videosource.cpp mythtv/libs/libmythtv/videosource.cpp --- mythtv-svn-backup-09152005/mythtv/libs/libmythtv/videosource.cpp 2005-09-15 14:41:03.000000000 -0700 +++ mythtv/libs/libmythtv/videosource.cpp 2005-09-16 17:23:08.000000000 -0700 @@ -1121,6 +1121,8 @@ addSelection("DiSEqC v1.2 Positioner","6"); addSelection("DiSEqC v1.3 Positioner (Goto X)","7"); addSelection("DiSEqC v1.1 or 2.1 (10-way method2)","8"); + addSelection("SW21 Switch","9"); + addSelection("SW64 Switch","10"); setHelpText(QObject::tr("Select the input type for DVB-S cards. " "Leave as Single LNB/Input for DVB-C or DVB-T. " "The inputs are mapped from Input Connections option " @@ -2193,6 +2195,20 @@ list.append(DVBDiseqcInputList(QString("DiSEqC Switch Input 10"), QString("9"), QString(""))); break; + case 9: + list.append(DVBDiseqcInputList(QString("SW21 Input 1"), + QString("0"), QString(""))); + list.append(DVBDiseqcInputList(QString("SW21 Input 2"), + QString("1"), QString(""))); + break; + case 10: + list.append(DVBDiseqcInputList(QString("SW64 Input 1"), + QString("0"), QString(""))); + list.append(DVBDiseqcInputList(QString("SW64 Input 2"), + QString("1"), QString(""))); + list.append(DVBDiseqcInputList(QString("SW64 Input 3"), + QString("2"), QString(""))); + break; default: list.append(DVBDiseqcInputList( QString("DVBInput"), QString(""), QString("")));