skin_default.xml \
skin.xml \
startwizard.xml \
- tutorialwizard.xml
+ tutorialwizard.xml \
+ unicable.xml
--- /dev/null
+<?xml version="1.0" encoding="iso-8859-1"?>
+<unicable version="20100522">
+<!--
+structur of tree
+unicable (version)
+ |
+ |\
+ | \
+ | lnb
+ | |
+ | |\
+ | | \
+ | | manufacturer (name)
+ | | |\
+ | | | \
+ | | | product (name, position, sc11-scr8. lofl, lofh, loft)
+ | | |
+ | | |\
+ | | | \
+ | | | product
+ | |
+ | |\
+ | | \
+ | | manufacturer
+ | | |\
+ | | | \
+ | | | product
+ | | |
+ | | |\
+ | | | \
+ | | | product
+ |
+ \
+ \
+ matrix
+ |
+ |\
+ | \
+ | manufacturer
+ | |\
+ | | \
+ | | product
+ | |
+ | |\
+ | | \
+ | | product
+ |
+ |\
+ | \
+ | manufacturer
+ | |\
+ | | \
+ | | product
+ | |
+ | |\
+ | | \
+ | | product
+
+-->
+
+ <lnb>
+ <manufacturer name="DUR-line">
+ <product name="Unicable LNB" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+ </manufacturer>
+ <manufacturer name="G-STAR">
+ <product name="GS-404-L1" scr1="1280" scr2="1382" scr3="1484"/>
+ <product name="GS-406-L1" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+ </manufacturer>
+ <manufacturer name="Humax">
+ <product name="150 SCR" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+ </manufacturer>
+ <manufacturer name="Inverto">
+ <product name="IDLP-40UNIQD+S" scr1="1680" scr2="1420" scr3="2040" scr4="1210"/>
+ <product name="IDLB-QUDL-UNI2L-OPP" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+ </manufacturer>
+ <manufacturer name="Kathrein">
+ <product name="UAS481" lofl="10200" lofh="10200" scr1="1400" scr2="1516" scr3="1632" scr4="1748"/>
+ </manufacturer>
+ <manufacturer name="Kreiling">
+ <product name="KR1440" scr1="1680" scr2="1420" scr3="2040" scr4="1210"/>
+ </manufacturer>
+ <manufacturer name="Radix">
+ <product name="Unicable LNB" scr1="1680" scr2="1420" scr3="2040" scr4="1210"/>
+ </manufacturer>
+ <manufacturer name="Wisi">
+ <product name="OC 05" scr1="1210" scr2="1420" scr3="1680" scr4="2040"/>
+ </manufacturer>
+ </lnb>
+ <matrix>
+ <manufacturer name="Ankaro">
+ <product name="UCS 51440" scr1="1400" scr2="1632" scr3="1284" scr4="1516"/>
+ <product name="UCS 51820" scr1="1400" scr2="1632" scr3="1284" scr4="1516" scr5="1864" scr6="2096" scr7="1748" scr8="1980"/>
+ <product name="UCS 51840" scr1="1400" scr2="1632" scr3="1284" scr4="1516" scr5="1864" scr6="2096" scr7="1748" scr8="1980"/>
+ <product name="UCS 52240" scr1="1400" scr2="1632"/>
+ <product name="UCS 52420" scr1="1400" scr2="1632" scr3="1284" scr4="1516"/>
+ <product name="UCS 52440" scr1="1400" scr2="1632" scr3="1284" scr4="1516"/>
+ <product name="UCS 91440" positions="2" scr1="1400" scr2="1632" scr3="1284" scr4="1516"/>
+ <product name="UCS 91820" positions="2" scr1="1400" scr2="1632" scr3="1284" scr4="1516" scr5="1864" scr6="2096" scr7="1748" scr8="1980"/>
+ <product name="UCS 91840" positions="2" scr1="1400" scr2="1632" scr3="1284" scr4="1516" scr5="1864" scr6="2096" scr7="1748" scr8="1980"/>
+ <product name="UCS 92240" positions="2" scr1="1400" scr2="1632"/>
+ <product name="UCS 92420" positions="2" scr1="1400" scr2="1632" scr3="1284" scr4="1516"/>
+ <product name="UCS 92440" positions="2" scr1="1400" scr2="1632" scr3="1284" scr4="1516"/>
+ </manufacturer>
+ <manufacturer name="DCT Delta">
+ <product name="SUM518" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+ <product name="SUM918" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+ <product name="SUM928" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+ </manufacturer>
+ <manufacturer name="Dura-Sat">
+ <product name="UCP18" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+ <product name="VDU543NT" scr1="1280" scr2="1382" scr3="1484"/>
+ <product name="VDU563NT" scr1="1280" scr2="1382" scr3="1484"/>
+ <product name="VDU583NT" scr1="1280" scr2="1382" scr3="1484"/>
+ <product name="VDU586NT" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+ <product name="VDU983NT" positions="2" scr1="1280" scr2="1382" scr3="1484"/>
+ </manufacturer>
+ <manufacturer name="G-STAR">
+ <product name="GS-506-S1" scr1="1280" scr2="1382" scr3="1484"/>
+ <product name="GS-516-S1" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+ </manufacturer>
+ <manufacturer name="Inverto">
+ <product name="IDLP-UST11O-CUO1O-8PP" scr1="1076" scr2="1178" scr3="1280" scr4="1382" scr5="1484" scr6="1586" scr7="1688" scr8="1790"/>
+ </manufacturer>
+ <manufacturer name="JULTEC">
+ <product name="JPS0501-6" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+ <product name="JPS0502-3" scr1="1280" scr2="1382" scr3="1484"/>
+ <product name="JPS0502-6" scr1="1280" scr2="1382" scr3="1484" scr4="1586" scr5="1688" scr6="1790"/>
+ <product name="JPS0504-3" scr1="1280" scr2="1382" scr3="1484"/>
+ </manufacturer>
+ <manufacturer name="Kathrein">
+ <product name="EXR501" scr1="1400" scr2="1516" scr3="1632" scr4="1748"/>
+ <product name="EXR551" scr1="1400" scr2="1516" scr3="1632" scr4="1748"/>
+ <product name="EXR552" scr1="1400" scr2="1516"/>
+ <product name="EXR1541" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
+ <product name="EXR1542" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
+ <product name="EXR1581" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+ <product name="EXR1942" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
+ <product name="EXR1981" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+ <product name="EXR2541" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
+ <product name="EXR2542" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
+ <product name="EXR2581" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+ <product name="EXR2942" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
+ <product name="EXR2981" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+ <product name="EXU908" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
+ </manufacturer>
+ <manufacturer name="ROTEK">
+ <product name="EKL2/1" scr1="1400" scr2="1516"/>
+ <product name="EKL2/1E" scr3="1632" scr4="1748"/>
+ </manufacturer>
+ <manufacturer name="Smart">
+ <product name="DPA 51" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+ </manufacturer>
+ <manufacturer name="Technisat">
+ <product name="TechniRouter 5/1x8" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+ <product name="TechniRouter 9/1x8" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+ <product name="TechniRouter 5/2x4" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
+ <product name="TechniRouter 9/2x4" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
+ </manufacturer>
+ <manufacturer name="Telstar">
+ <product name="SCR 5/1x8" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+ <product name="SCR 9/1x8" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632" scr5="1748" scr6="1864" scr7="1980" scr8="2096"/>
+ <product name="SCR 5/2x4" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
+ <product name="SCR 9/2x4" positions="2" scr1="1284" scr2="1400" scr3="1516" scr4="1632"/>
+ </manufacturer>
+ <manufacturer name="Wisi">
+ <product name="DY 64 1810" scr1="1178" scr2="1280" scr3="1382" scr4="1484" scr5="1586" scr6="1688" scr7="1790" scr8="1892"/>
+ <product name="DY 64 2410" scr1="1178" scr2="1280" scr3="1382" scr4="1484"/>
+ <product name="DY 68 1810" positions="2" scr1="1178" scr2="1280" scr3="1382" scr4="1484" scr5="1586" scr6="1688" scr7="1790" scr8="1892"/>
+ <product name="DY 68 2410" positions="2" scr1="1178" scr2="1280" scr3="1382" scr4="1484"/>
+ </manufacturer>
+ </matrix>
+</unicable>
return 0;
}
-int eDVBFrontend::closeFrontend(bool force)
+int eDVBFrontend::closeFrontend(bool force, bool no_delayed)
{
if (!force && m_data[CUR_VOLTAGE] != -1 && m_data[CUR_VOLTAGE] != iDVBFrontend::voltageOff)
{
eDebugNoSimulate("close frontend %d", m_dvbid);
if (m_data[SATCR] != -1)
{
- turnOffSatCR(m_data[SATCR]);
+ if (!no_delayed)
+ {
+ m_sec->prepareTurnOffSatCR(*this, m_data[SATCR]);
+ m_tuneTimer->start(0, true);
+ if(!m_tuneTimer->isActive())
+ {
+ int timeout=0;
+ eDebug("[turnOffSatCR] no mainloop");
+ while(true)
+ {
+ timeout = tuneLoopInt();
+ if (timeout == -1)
+ break;
+ usleep(timeout*1000); // blockierendes wait.. eTimer gibts ja nicht mehr
+ }
+ }
+ else
+ eDebug("[turnOffSatCR] running mainloop");
+ return 0;
+ }
+ else
+ m_data[ROTOR_CMD] = -1;
}
+
setTone(iDVBFrontend::toneOff);
setVoltage(iDVBFrontend::voltageOff);
m_tuneTimer->stop();
+
if (m_sec && !m_simulate)
m_sec->setRotorMoving(m_slotid, false);
if (!::close(m_fd))
return true;
}
-void eDVBFrontend::tuneLoop() // called by m_tuneTimer
+void eDVBFrontend::tuneLoop()
+{
+ tuneLoopInt();
+}
+
+int eDVBFrontend::tuneLoopInt() // called by m_tuneTimer
{
- int delay=0;
+ int delay=-1;
eDVBFrontend *sec_fe = this;
eDVBRegisteredFrontend *regFE = 0;
long tmp = m_data[LINKED_PREV_PTR];
{
long *sec_fe_data = sec_fe->m_data;
// eDebugNoSimulate("tuneLoop %d\n", m_sec_sequence.current()->cmd);
+ delay = 0;
switch (m_sec_sequence.current()->cmd)
{
case eSecCommand::SLEEP:
++m_sec_sequence.current();
break;
}
+ case eSecCommand::DELAYED_CLOSE_FRONTEND:
+ {
+ eDebugNoSimulate("[SEC] delayed close frontend");
+ closeFrontend(false, true);
+ ++m_sec_sequence.current();
+ break;
+ }
default:
eDebugNoSimulate("[SEC] unhandled sec command %d",
++m_sec_sequence.current()->cmd);
regFE->dec_use();
if (m_simulate && m_sec_sequence.current() != m_sec_sequence.end())
tuneLoop();
+ return delay;
}
void eDVBFrontend::setFrontend(bool recvEvents)
return 0;
}
-RESULT eDVBFrontend::setSecSequence(const eSecCommandList &list)
+RESULT eDVBFrontend::setSecSequence(eSecCommandList &list)
{
- m_sec_sequence = list;
+ if (m_data[SATCR] != -1 && m_sec_sequence.current() != m_sec_sequence.end())
+ m_sec_sequence.push_back(list);
+ else
+ m_sec_sequence = list;
return 0;
}
"eDVBFrontend::setSlotInfo must get a tuple with first param slotid, second param slot description and third param enabled boolean");
return false;
}
-
-RESULT eDVBFrontend::turnOffSatCR(int satcr)
-{
- eSecCommandList sec_sequence;
- // check if voltage is disabled
- eSecCommand::pair compare;
- compare.steps = +9; //nothing to do
- compare.voltage = iDVBFrontend::voltageOff;
- sec_sequence.push_back( eSecCommand(eSecCommand::IF_NOT_VOLTAGE_GOTO, compare) );
- sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) );
- sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50 ) );
-
- sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage18_5) );
- sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
- sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 250) );
-
- eDVBDiseqcCommand diseqc;
- memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
- diseqc.len = 5;
- diseqc.data[0] = 0xE0;
- diseqc.data[1] = 0x10;
- diseqc.data[2] = 0x5A;
- diseqc.data[3] = satcr << 5;
- diseqc.data[4] = 0x00;
-
- sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
- sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50+20+14*diseqc.len) );
- sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) );
- setSecSequence(sec_sequence);
- return 0;
-}
-
-RESULT eDVBFrontend::ScanSatCR()
-{
- setFrontend();
- usleep(20000);
- setTone(iDVBFrontend::toneOff);
- return 0;
-}
void feEvent(int);
void timeout();
void tuneLoop(); // called by m_tuneTimer
+ int tuneLoopInt();
void setFrontend(bool recvEvents=true);
bool setSecSequencePos(int steps);
static int PriorityOrder;
RESULT sendDiseqc(const eDVBDiseqcCommand &diseqc);
RESULT sendToneburst(int burst);
RESULT setSEC(iDVBSatelliteEquipmentControl *sec);
- RESULT setSecSequence(const eSecCommandList &list);
+ RESULT setSecSequence(eSecCommandList &list);
RESULT getData(int num, long &data);
RESULT setData(int num, long val);
void reopenFrontend();
int openFrontend();
- int closeFrontend(bool force=false);
+ int closeFrontend(bool force=false, bool no_delayed=false);
const char *getDescription() const { return m_description; }
bool is_simulate() const { return m_simulate; }
-
- RESULT turnOffSatCR(int satcr);
- RESULT ScanSatCR();
};
#endif // SWIG
public:
virtual RESULT getFrontendType(int &SWIG_OUTPUT)=0;
virtual RESULT tune(const iDVBFrontendParameters &where)=0;
- virtual int closeFrontend(bool force = false)=0;
+ virtual int closeFrontend(bool force = false, bool no_delayed = false)=0;
virtual void reopenFrontend()=0;
#ifndef SWIG
virtual RESULT connectStateChange(const Slot1<void,iDVBFrontend*> &stateChange, ePtr<eConnection> &connection)=0;
virtual RESULT sendToneburst(int burst)=0;
#ifndef SWIG
virtual RESULT setSEC(iDVBSatelliteEquipmentControl *sec)=0;
- virtual RESULT setSecSequence(const eSecCommandList &list)=0;
+ virtual RESULT setSecSequence(eSecCommandList &list)=0;
#endif
virtual int readFrontendData(int type)=0;
virtual void getFrontendStatus(SWIG_PYOBJECT(ePyObject) dest)=0;
{
public:
virtual RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, const eDVBFrontendParametersSatellite &sat, int frontend_id, unsigned int timeout)=0;
+ virtual void prepareTurnOffSatCR(iDVBFrontend &frontend, int satcr)=0;
virtual int canTune(const eDVBFrontendParametersSatellite &feparm, iDVBFrontend *fe, int frontend_id, int *highest_score_lnb=0)=0;
virtual void setRotorMoving(int slotid, bool)=0;
};
{
bool rotor=false;
eDVBSatelliteLNBParameters &lnb_param = m_lnbs[idx];
+ bool is_unicable = lnb_param.SatCR_idx != -1;
+ bool is_unicable_position_switch = lnb_param.SatCR_positions > 1;
+
if ( lnb_param.m_slot_mask & slot_id ) // lnb for correct tuner?
{
int ret = 0;
eSecDebugNoSimulate("ret1 %d", ret);
- if (linked_in_use)
+ if (linked_in_use && !is_unicable)
{
// compare tuner data
if ( (csw != linked_csw) ||
ret += 15;
eSecDebugNoSimulate("ret2 %d", ret);
}
- else if (satpos_depends_ptr != -1)
+ else if ((satpos_depends_ptr != -1) && !(is_unicable && is_unicable_position_switch))
{
eSecDebugNoSimulate("satpos depends");
eDVBRegisteredFrontend *satpos_depends_to_fe = (eDVBRegisteredFrontend*) satpos_depends_ptr;
eSecDebugNoSimulate("ret5 %d", ret);
- if (ret)
+ if (ret && lnb_param.SatCR_idx != -1)
{
int lof = sat.frequency > lnb_param.m_lof_threshold ?
lnb_param.m_lof_hi : lnb_param.m_lof_lo;
{
// calc Frequency
local = abs(sat.frequency
- - ((lof - (lof % 1000)) + ((lof % 1000)>500 ? 1000 : 0)) ); //TODO für den Mist mal ein Macro schreiben
- parm.FREQUENCY = (local - (local % 125)) + ((local % 125)>62 ? 125 : 0);
+ - lof);
+ parm.FREQUENCY = ((((local * 2) / 125) + 1) / 2) * 125;
frontend.setData(eDVBFrontend::FREQ_OFFSET, sat.frequency - parm.FREQUENCY);
if ( voltage_mode == eDVBSatelliteSwitchParameters::_14V
}
else
{
- unsigned int tmp = abs(sat.frequency
- - ((lof - (lof % 1000)) + ((lof % 1000)>500 ? 1000 : 0)) )
+ int tmp1 = abs(sat.frequency
+ -lof)
+ lnb_param.SatCRvco
- 1400000
+ lnb_param.guard_offset;
- parm.FREQUENCY = (lnb_param.SatCRvco - (tmp % 4000))+((tmp%4000)>2000?4000:0)+lnb_param.guard_offset;
- lnb_param.UnicableTuningWord = (((tmp / 4000)+((tmp%4000)>2000?1:0))
+ int tmp2 = ((((tmp1 * 2) / 4000) + 1) / 2) * 4000;
+ parm.FREQUENCY = lnb_param.SatCRvco - (tmp1-tmp2) + lnb_param.guard_offset;
+ lnb_param.UnicableTuningWord = ((tmp2 / 4000)
| ((band & 1) ? 0x400 : 0) //HighLow
| ((band & 2) ? 0x800 : 0) //VertHor
| ((lnb_param.LNBNum & 1) ? 0 : 0x1000) //Umschaltung LNB1 LNB2
| (lnb_param.SatCR_idx << 13)); //Adresse des SatCR
eDebug("[prepare] UnicableTuningWord %#04x",lnb_param.UnicableTuningWord);
eDebug("[prepare] guard_offset %d",lnb_param.guard_offset);
- frontend.setData(eDVBFrontend::FREQ_OFFSET, sat.frequency - ((lnb_param.UnicableTuningWord & 0x3FF) *4000 + 1400000 - lnb_param.SatCRvco + lof));
+ frontend.setData(eDVBFrontend::FREQ_OFFSET, (lnb_param.UnicableTuningWord & 0x3FF) *4000 + 1400000 + lof - (2 * (lnb_param.SatCRvco - (tmp1-tmp2))) );
}
if (diseqc_mode >= eDVBSatelliteDiseqcParameters::V1_0)
diseqc.data[3] = RotorCmd;
diseqc.data[4] = 0x00;
}
- if(lnb_param.SatCR_idx == -1)
+// if(lnb_param.SatCR_idx == -1)
{
int mrt = m_params[MOTOR_RUNNING_TIMEOUT]; // in seconds!
- if ( rotor_param.m_inputpower_parameters.m_use )
+ if ( rotor_param.m_inputpower_parameters.m_use || lnb_param.SatCR_idx == -1)
{ // use measure rotor input power to detect rotor state
bool turn_fast = need_turn_fast(rotor_param.m_inputpower_parameters.m_turning_speed);
eSecCommand::rotor cmd;
return -1;
}
+void eDVBSatelliteEquipmentControl::prepareTurnOffSatCR(iDVBFrontend &frontend, int satcr)
+{
+ eSecCommandList sec_sequence;
+
+ // check if voltage is disabled
+ eSecCommand::pair compare;
+ compare.steps = +9; //only close frontend
+ compare.voltage = iDVBFrontend::voltageOff;
+
+ sec_sequence.push_back( eSecCommand(eSecCommand::IF_VOLTAGE_GOTO, compare) );
+ sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) );
+ sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_ENABLE_VOLTAGE_BEFORE_SWITCH_CMDS]) );
+
+ sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage18_5) );
+ sec_sequence.push_back( eSecCommand(eSecCommand::SET_TONE, iDVBFrontend::toneOff) );
+ sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_VOLTAGE_CHANGE_BEFORE_SWITCH_CMDS]) );
+
+ eDVBDiseqcCommand diseqc;
+ memset(diseqc.data, 0, MAX_DISEQC_LENGTH);
+ diseqc.len = 5;
+ diseqc.data[0] = 0xE0;
+ diseqc.data[1] = 0x10;
+ diseqc.data[2] = 0x5A;
+ diseqc.data[3] = satcr << 5;
+ diseqc.data[4] = 0x00;
+
+ sec_sequence.push_back( eSecCommand(eSecCommand::SEND_DISEQC, diseqc) );
+ sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, m_params[DELAY_AFTER_LAST_DISEQC_CMD]) );
+ sec_sequence.push_back( eSecCommand(eSecCommand::SET_VOLTAGE, iDVBFrontend::voltage13) );
+ sec_sequence.push_back( eSecCommand(eSecCommand::DELAYED_CLOSE_FRONTEND) );
+
+ frontend.setSecSequence(sec_sequence);
+}
+
RESULT eDVBSatelliteEquipmentControl::clear()
{
eSecDebug("eDVBSatelliteEquipmentControl::clear()");
return -ENOENT;
return 0;
}
+
+RESULT eDVBSatelliteEquipmentControl::setLNBSatCRpositions(int SatCR_positions)
+{
+ eSecDebug("eDVBSatelliteEquipmentControl::setLNBSatCRpositions(%d)", SatCR_positions);
+ if(SatCR_positions < 1 || SatCR_positions > 2)
+ return -EPERM;
+ if ( currentLNBValid() )
+ m_lnbs[m_lnbidx].SatCR_positions = SatCR_positions;
+ else
+ return -ENOENT;
+ return 0;
+}
+
+RESULT eDVBSatelliteEquipmentControl::getLNBSatCRpositions()
+{
+ if ( currentLNBValid() )
+ return m_lnbs[m_lnbidx].SatCR_positions;
+ return -ENOENT;
+}
+
RESULT eDVBSatelliteEquipmentControl::getLNBSatCR()
{
if ( currentLNBValid() )
IF_TONE_GOTO, IF_NOT_TONE_GOTO,
START_TUNE_TIMEOUT,
SET_ROTOR_MOVING,
- SET_ROTOR_STOPPED
+ SET_ROTOR_STOPPED,
+ DELAYED_CLOSE_FRONTEND
};
int cmd;
struct rotor
{
secSequence.push_back(cmd);
}
+ void push_back(eSecCommandList &list)
+ {
+ ASSERT(*this != list);
+ secSequence.splice(end(), list.secSequence);
+ }
void clear()
{
secSequence.clear();
#define MAX_SATCR 8
#define MAX_LNBNUM 32
+ int SatCR_positions;
int SatCR_idx;
unsigned int SatCRvco;
unsigned int UnicableTuningWord;
#ifndef SWIG
eDVBSatelliteEquipmentControl(eSmartPtrList<eDVBRegisteredFrontend> &avail_frontends, eSmartPtrList<eDVBRegisteredFrontend> &avail_simulate_frontends);
RESULT prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, const eDVBFrontendParametersSatellite &sat, int frontend_id, unsigned int tunetimeout);
+ void prepareTurnOffSatCR(iDVBFrontend &frontend, int satcr); // used for unicable
int canTune(const eDVBFrontendParametersSatellite &feparm, iDVBFrontend *, int frontend_id, int *highest_score_lnb=0);
bool currentLNBValid() { return m_lnbidx > -1 && m_lnbidx < (int)(sizeof(m_lnbs) / sizeof(eDVBSatelliteLNBParameters)); }
#endif
/* Unicable Specific Parameters */
RESULT setLNBSatCR(int SatCR_idx);
RESULT setLNBSatCRvco(int SatCRvco);
-// RESULT checkGuardOffset(const eDVBFrontendParametersSatellite &sat);
+ RESULT setLNBSatCRpositions(int SatCR_positions);
RESULT getLNBSatCR();
RESULT getLNBSatCRvco();
+ RESULT getLNBSatCRpositions();
/* Satellite Specific Parameters */
RESULT addSatellite(int orbital_position);
RESULT setVoltageMode(int mode);
from datetime import datetime
from Tools.BoundFunction import boundFunction
+from Tools import Directories
+import xml.etree.cElementTree
+
def getConfigSatlist(orbpos, satlist):
default_orbpos = None
for x in satlist:
print "sec config completed"
def updateAdvanced(self, sec, slotid):
+ try:
+ if config.Nims[slotid].advanced.unicableconnected is not None:
+ if config.Nims[slotid].advanced.unicableconnected.value == True:
+ config.Nims[slotid].advanced.unicableconnectedTo.save_forced = True
+ self.linkNIMs(sec, slotid, int(config.Nims[slotid].advanced.unicableconnectedTo.value))
+ connto = self.getRoot(slotid, int(config.Nims[slotid].advanced.unicableconnectedTo.value))
+ if not self.linked.has_key(connto):
+ self.linked[connto] = []
+ self.linked[connto].append(slotid)
+ else:
+ config.Nims[slotid].advanced.unicableconnectedTo.save_forced = False
+ except:
+ pass
+
lnbSat = {}
for x in range(1,37):
lnbSat[x] = []
sec.setLNBLOFH(10600000)
sec.setLNBThreshold(11700000)
elif currLnb.lof.value == "unicable":
- sec.setLNBLOFL(9750000)
- sec.setLNBLOFH(10600000)
- sec.setLNBThreshold(11700000)
if currLnb.unicable.value == "unicable_user":
+#TODO satpositions for satcruser
+ sec.setLNBLOFL(currLnb.lofl.value * 1000)
+ sec.setLNBLOFH(currLnb.lofh.value * 1000)
+ sec.setLNBThreshold(currLnb.threshold.value * 1000)
sec.setLNBSatCR(currLnb.satcruser.index)
sec.setLNBSatCRvco(currLnb.satcrvcouser[currLnb.satcruser.index].value*1000)
+ sec.setLNBSatCRpositions(1) #HACK
elif currLnb.unicable.value == "unicable_matrix":
manufacturer_name = currLnb.unicableMatrixManufacturer.value
manufacturer = currLnb.unicableMatrix[manufacturer_name]
product_name = manufacturer.product.value
sec.setLNBSatCR(manufacturer.scr[product_name].index)
sec.setLNBSatCRvco(manufacturer.vco[product_name][manufacturer.scr[product_name].index].value*1000)
+ sec.setLNBSatCRpositions(manufacturer.positions[product_name][0].value)
+ sec.setLNBLOFL(manufacturer.lofl[product_name][0].value * 1000)
+ sec.setLNBLOFH(manufacturer.lofh[product_name][0].value * 1000)
+ sec.setLNBThreshold(manufacturer.loft[product_name][0].value * 1000)
+ currLnb.unicableMatrixManufacturer.save_forced = True
+ manufacturer.product.save_forced = True
+ manufacturer.vco[product_name][manufacturer.scr[product_name].index].save_forced = True
elif currLnb.unicable.value == "unicable_lnb":
manufacturer_name = currLnb.unicableLnbManufacturer.value
manufacturer = currLnb.unicableLnb[manufacturer_name]
product_name = manufacturer.product.value
sec.setLNBSatCR(manufacturer.scr[product_name].index)
sec.setLNBSatCRvco(manufacturer.vco[product_name][manufacturer.scr[product_name].index].value*1000)
+ sec.setLNBSatCRpositions(manufacturer.positions[product_name][0].value)
+ sec.setLNBLOFL(manufacturer.lofl[product_name][0].value * 1000)
+ sec.setLNBLOFH(manufacturer.lofh[product_name][0].value * 1000)
+ sec.setLNBThreshold(manufacturer.loft[product_name][0].value * 1000)
+ currLnb.unicableLnbManufacturer.save_forced = True
+ manufacturer.product.save_forced = True
+ manufacturer.vco[product_name][manufacturer.scr[product_name].index].save_forced = True
elif currLnb.lof.value == "c_band":
sec.setLNBLOFL(5150000)
sec.setLNBLOFH(5150000)
lnb_choices_default = "universal_lnb"
- unicablelnbproducts = {
- "Humax": {"150 SCR":("1210","1420","1680","2040")},
- "Inverto": {"IDLP-40UNIQD+S":("1680","1420","2040","1210")},
- "Kathrein": {"UAS481":("1400","1516","1632","1748")},
- "Kreiling": {"KR1440":("1680","1420","2040","1210")},
- "Radix": {"Unicable LNB":("1680","1420","2040","1210")},
- "Wisi": {"OC 05":("1210","1420","1680","2040")}}
+ unicablelnbproducts = {}
+ unicablematrixproducts = {}
+ doc = xml.etree.cElementTree.parse("/usr/share/enigma2/unicable.xml")
+ root = doc.getroot()
+
+ entry = root.find("lnb")
+ for manufacturer in entry.getchildren():
+ m={}
+ for product in manufacturer.getchildren():
+ scr=[]
+ lscr=("scr1","scr2","scr3","scr4","scr5","scr6","scr7","scr8")
+ for i in range(len(lscr)):
+ scr.append(product.get(lscr[i],"0"))
+ for i in range(len(lscr)):
+ if scr[len(lscr)-i-1] == "0":
+ scr.pop()
+ else:
+ break;
+ lof=[]
+ lof.append(product.get("positions","1"))
+ lof.append(product.get("lofl","9750"))
+ lof.append(product.get("lofh","10600"))
+ lof.append(product.get("threshold","11700"))
+ scr.append(tuple(lof))
+ m.update({product.get("name"):tuple(scr)})
+ unicablelnbproducts.update({manufacturer.get("name"):m})
+
+ entry = root.find("matrix")
+ for manufacturer in entry.getchildren():
+ m={}
+ for product in manufacturer.getchildren():
+ scr=[]
+ lscr=("scr1","scr2","scr3","scr4","scr5","scr6","scr7","scr8")
+ for i in range(len(lscr)):
+ scr.append(product.get(lscr[i],"0"))
+ for i in range(len(lscr)):
+ if scr[len(lscr)-i-1] == "0":
+ scr.pop()
+ else:
+ break;
+ lof=[]
+ lof.append(product.get("positions","1"))
+ lof.append(product.get("lofl","9750"))
+ lof.append(product.get("lofh","10600"))
+ lof.append(product.get("threshold","11700"))
+ scr.append(tuple(lof))
+ m.update({product.get("name"):tuple(scr)})
+ unicablematrixproducts.update({manufacturer.get("name"):m})
+
UnicableLnbManufacturers = unicablelnbproducts.keys()
UnicableLnbManufacturers.sort()
-
- unicablematrixproducts = {
- "Ankaro": {
- "UCS 51440":("1400","1632","1284","1516"),
- "UCS 51820":("1400","1632","1284","1516","1864","2096","1748","1980"),
- "UCS 51840":("1400","1632","1284","1516","1864","2096","1748","1980"),
- "UCS 52240":("1400","1632"),
- "UCS 52420":("1400","1632","1284","1516"),
- "UCS 52440":("1400","1632","1284","1516"),
- "UCS 91440":("1400","1632","1284","1516"),
- "UCS 91820":("1400","1632","1284","1516","1864","2096","1748","1980"),
- "UCS 91840":("1400","1632","1284","1516","1864","2096","1748","1980"),
- "UCS 92240":("1400","1632"),
- "UCS 92420":("1400","1632","1284","1516"),
- "UCS 92440":("1400","1632","1284","1516")},
- "DCT Delta": {
- "SUM518":("1284","1400","1516","1632","1748","1864","1980","2096"),
- "SUM918":("1284","1400","1516","1632","1748","1864","1980","2096"),
- "SUM928":("1284","1400","1516","1632","1748","1864","1980","2096")},
- "Inverto": {
- "IDLP-UST11O-CUO1O-8PP":("1076","1178","1280","1382","1484","1586","1688","1790")},
- "Kathrein": {
- "EXR501":("1400","1516","1632","1748"),
- "EXR551":("1400","1516","1632","1748"),
- "EXR552":("1400","1516")},
- "ROTEK": {
- "EKL2/1":("1400","1516"),
- "EKL2/1E":("0","0","1632","1748")},
- "Smart": {
- "DPA 51":("1284","1400","1516","1632","1748","1864","1980","2096")},
- "Technisat": {
- "TechniRouter 5/1x8 G":("1284","1400","1516","1632","1748","1864","1980","2096"),
- "TechniRouter 5/1x8 K":("1284","1400","1516","1632","1748","1864","1980","2096"),
- "TechniRouter 5/2x4 G":("1284","1400","1516","1632"),
- "TechniRouter 5/2x4 K":("1284","1400","1516","1632")},
- "Telstar": {
- "SCR 5/1x8 G":("1284","1400","1516","1632","1748","1864","1980","2096"),
- "SCR 5/1x8 K":("1284","1400","1516","1632","1748","1864","1980","2096"),
- "SCR 5/2x4 G":("1284","1400","1516","1632"),
- "SCR 5/2x4 K":("1284","1400","1516","1632")}}
UnicableMatrixManufacturers = unicablematrixproducts.keys()
UnicableMatrixManufacturers.sort()
scrlist = []
vcolist = unicablematrixproducts[y][z]
tmp.vco[z] = ConfigSubList()
- for cnt in range(1,1+len(vcolist)):
+ for cnt in range(1,1+len(vcolist)-1):
vcofreq = int(vcolist[cnt-1])
if vcofreq == 0:
scrlist.append(("%d" %cnt,"SCR %d " %cnt +_("not used")))
tmp.product = ConfigSelection(choices = products, default = products[0])
tmp.scr = ConfigSubDict()
tmp.vco = ConfigSubDict()
+ tmp.lofl = ConfigSubDict()
+ tmp.lofh = ConfigSubDict()
+ tmp.loft = ConfigSubDict()
+ tmp.positions = ConfigSubDict()
for z in products:
scrlist = []
vcolist = unicablelnbproducts[y][z]
tmp.vco[z] = ConfigSubList()
- for cnt in range(1,1+len(vcolist)):
+ for cnt in range(1,1+len(vcolist)-1):
scrlist.append(("%d" %cnt,"SCR %d" %cnt))
vcofreq = int(vcolist[cnt-1])
tmp.vco[z].append(ConfigInteger(default=vcofreq, limits = (vcofreq, vcofreq)))
tmp.scr[z] = ConfigSelection(choices = scrlist, default = scrlist[0][0])
+
+ positions = int(vcolist[len(vcolist)-1][0])
+ tmp.positions[z] = ConfigSubList()
+ tmp.positions[z].append(ConfigInteger(default=positions, limits = (positions, positions)))
+
+ lofl = vcolist[len(vcolist)-1][1]
+ tmp.lofl[z] = ConfigSubList()
+ tmp.lofl[z].append(ConfigInteger(default=lofl, limits = (lofl, lofl)))
+
+ lofh = int(vcolist[len(vcolist)-1][2])
+ tmp.lofh[z] = ConfigSubList()
+ tmp.lofh[z].append(ConfigInteger(default=lofh, limits = (lofh, lofh)))
+
+ loft = int(vcolist[len(vcolist)-1][3])
+ tmp.loft[z] = ConfigSubList()
+ tmp.loft[z].append(ConfigInteger(default=loft, limits = (loft, loft)))
+
section.unicableLnb[y] = tmp
-
+
+#TODO satpositions for satcruser
section.satcruser = ConfigSelection(advanced_lnb_satcruser_choices, default="1")
tmp = ConfigSubList()
- tmp.append(ConfigInteger(default=1284, limits = (0, 9999)))
- tmp.append(ConfigInteger(default=1400, limits = (0, 9999)))
- tmp.append(ConfigInteger(default=1516, limits = (0, 9999)))
- tmp.append(ConfigInteger(default=1632, limits = (0, 9999)))
- tmp.append(ConfigInteger(default=1748, limits = (0, 9999)))
- tmp.append(ConfigInteger(default=1864, limits = (0, 9999)))
- tmp.append(ConfigInteger(default=1980, limits = (0, 9999)))
- tmp.append(ConfigInteger(default=2096, limits = (0, 9999)))
+ tmp.append(ConfigInteger(default=1284, limits = (950, 2150)))
+ tmp.append(ConfigInteger(default=1400, limits = (950, 2150)))
+ tmp.append(ConfigInteger(default=1516, limits = (950, 2150)))
+ tmp.append(ConfigInteger(default=1632, limits = (950, 2150)))
+ tmp.append(ConfigInteger(default=1748, limits = (950, 2150)))
+ tmp.append(ConfigInteger(default=1864, limits = (950, 2150)))
+ tmp.append(ConfigInteger(default=1980, limits = (950, 2150)))
+ tmp.append(ConfigInteger(default=2096, limits = (950, 2150)))
section.satcrvcouser = tmp
+ nim.advanced.unicableconnected = ConfigYesNo(default=False)
+ nim.advanced.unicableconnectedTo = ConfigSelection([(str(id), nimmgr.getNimDescription(id)) for id in nimmgr.getNimListOfType("DVB-S") if id != x])
+
def configDiSEqCModeChanged(configElement):
section = configElement.section
if configElement.value == "1_2" and isinstance(section.longitude, ConfigNothing):
class ConfigElement(object):
def __init__(self):
self.saved_value = None
+ self.save_forced = False
self.last_value = None
self.save_disabled = False
self.__notifiers = None
# you need to override this if str(self.value) doesn't work
def save(self):
- if self.save_disabled or self.value == self.default:
+ if self.save_disabled or (self.value == self.default and not self.save_forced):
self.saved_value = None
else:
self.saved_value = self.tostring(self.value)
self.advancedType = None
self.advancedManufacturer = None
self.advancedSCR = None
+ self.advancedConnected = None
if self.nim.isMultiType():
multiType = self.nimConfig.multiType
checkList = (self.configMode, self.diseqcModeEntry, self.advancedSatsEntry, \
self.advancedLnbsEntry, self.advancedDiseqcMode, self.advancedUsalsEntry, \
self.advancedLof, self.advancedPowerMeasurement, self.turningSpeed, \
- self.advancedType, self.advancedSCR, self.advancedManufacturer, self.advancedUnicable, \
+ self.advancedType, self.advancedSCR, self.advancedManufacturer, self.advancedUnicable, self.advancedConnected, \
self.uncommittedDiseqcCommand, self.cableScanType, self.multiType)
if self["config"].getCurrent() == self.multiType:
from Components.NimManager import InitNimManager
self.list.append(self.advancedType)
self.list.append(self.advancedSCR)
self.list.append(getConfigListEntry(_("Frequency"), manufacturer.vco[product_name][manufacturer.scr[product_name].index]))
+
+ choices = []
+ connectable = nimmanager.canConnectTo(self.slotid)
+ for id in connectable:
+ choices.append((str(id), nimmanager.getNimDescription(id)))
+ if len(choices):
+ self.advancedConnected = getConfigListEntry(_("connected"), self.nimConfig.advanced.unicableconnected)
+ self.list.append(self.advancedConnected)
+ if self.nimConfig.advanced.unicableconnected.value == True:
+ self.nimConfig.advanced.unicableconnectedTo.setChoices(choices)
+ self.list.append(getConfigListEntry(_("Connected to"),self.nimConfig.advanced.unicableconnectedTo))
+
else: #kein Unicable
self.list.append(getConfigListEntry(_("Voltage mode"), Sat.voltage))
self.list.append(getConfigListEntry(_("Increased voltage"), currLnb.increased_voltage))