eDVBSatelliteEquipmentControl *eDVBSatelliteEquipmentControl::instance;
eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl(eSmartPtrList<eDVBRegisteredFrontend> &avail_frontends)
- :m_lnbidx(-1), m_curSat(m_lnbs[0].m_satellites.end()), m_avail_frontends(avail_frontends)
+ :m_lnbidx(-1), m_curSat(m_lnbs[0].m_satellites.end()), m_avail_frontends(avail_frontends), m_rotorMoving(false)
{
if (!instance)
instance = this;
clear();
+#if 1
// ASTRA
addLNB();
setLNBTunerMask(3);
setVoltageMode(eDVBSatelliteSwitchParameters::HV);
setToneMode(eDVBSatelliteSwitchParameters::HILO);
-// HOTBIRD
+// Hotbird
addLNB();
setLNBTunerMask(3);
setLNBLOFL(9750000);
- setLNBLOFH(10600000);
setLNBThreshold(11750000);
+ setLNBLOFH(10600000);
setDiSEqCMode(eDVBSatelliteDiseqcParameters::V1_0);
setToneburst(eDVBSatelliteDiseqcParameters::NO);
setRepeats(0);
addSatellite(130);
setVoltageMode(eDVBSatelliteSwitchParameters::HV);
setToneMode(eDVBSatelliteSwitchParameters::HILO);
+#else
+
+// Rotor
+ addLNB();
+ setLNBTunerMask(3);
+ setLNBLOFL(9750000);
+ setLNBThreshold(11750000);
+ setLNBLOFH(10600000);
+ setDiSEqCMode(eDVBSatelliteDiseqcParameters::V1_2);
+ setToneburst(eDVBSatelliteDiseqcParameters::NO);
+ setRepeats(0);
+ setCommittedCommand(eDVBSatelliteDiseqcParameters::AA);
+ setCommandOrder(0); // committed, toneburst
+ setFastDiSEqC(true);
+ setSeqRepeat(false);
+ setLaDirection(eDVBSatelliteRotorParameters::NORTH);
+ setLoDirection(eDVBSatelliteRotorParameters::EAST);
+ setLatitude(51.017);
+ setLongitude(8.683);
+ setUseInputpower(true);
+ setInputpowerDelta(50);
+
+ addSatellite(130);
+ setVoltageMode(eDVBSatelliteSwitchParameters::HV);
+ setToneMode(eDVBSatelliteSwitchParameters::HILO);
+ setRotorPosNum(0);
+
+ addSatellite(192);
+ setVoltageMode(eDVBSatelliteSwitchParameters::HV);
+ setToneMode(eDVBSatelliteSwitchParameters::HILO);
+ setRotorPosNum(0);
+
+ addSatellite(284);
+ setVoltageMode(eDVBSatelliteSwitchParameters::HV);
+ setToneMode(eDVBSatelliteSwitchParameters::HILO);
+ setRotorPosNum(0);
+
+ addSatellite(420);
+ setVoltageMode(eDVBSatelliteSwitchParameters::HV);
+ setToneMode(eDVBSatelliteSwitchParameters::HILO);
+ setRotorPosNum(1); // stored pos 1
+#endif
}
int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite &sat, iDVBFrontend *fe, int frontend_id )
if (sat.polarisation == eDVBFrontendParametersSatellite::Polarisation::Horizontal)
band |= 2;
+ bool rotor=false;
+ bool diseqc=false;
+
if (di_param.m_diseqc_mode >= eDVBSatelliteDiseqcParameters::V1_0)
{
+ diseqc=true;
if ( di_param.m_committed_cmd < eDVBSatelliteDiseqcParameters::SENDNO )
{
csw = 0xF0 | (csw << 2);
if ( di_param.m_diseqc_mode == eDVBSatelliteDiseqcParameters::V1_2 ) // ROTOR
{
+ rotor=true;
if ( curRotorPos == sat.orbital_position )
ret=20;
else
if (found && it->m_inuse)
{
- int lastcsw = -1,
- lastucsw = -1,
- lastToneburst = -1,
- curRotorPos = -1;
- it->m_frontend->getData(0, lastcsw);
- it->m_frontend->getData(1, lastucsw);
- it->m_frontend->getData(2, lastToneburst);
- it->m_frontend->getData(6, curRotorPos);
-
- if (csw != lastcsw || ucsw != lastucsw ||
- toneburst != lastToneburst || curRotorPos != sat.orbital_position )
+ int ocsw = -1,
+ oucsw = -1,
+ oToneburst = -1,
+ oRotorPos = -1;
+ it->m_frontend->getData(0, ocsw);
+ it->m_frontend->getData(1, oucsw);
+ it->m_frontend->getData(2, oToneburst);
+ it->m_frontend->getData(6, oRotorPos);
+
+ eDebug("compare csw %02x == lcsw %02x",
+ csw, ocsw);
+ if ( diseqc )
+ eDebug("compare ucsw %02x == lucsw %02x\ncompare toneburst %02x == oToneburst %02x",
+ ucsw, oucsw, toneburst, oToneburst);
+ if ( rotor )
+ eDebug("compare pos %d == current pos %d",
+ sat.orbital_position, oRotorPos);
+
+ if ( (csw != ocsw) ||
+ ( diseqc && (ucsw != oucsw || toneburst != oToneburst) ) ||
+ ( rotor && oRotorPos != sat.orbital_position ) )
{
eDebug("can not tune this transponder with linked tuner in use!!");
ret=0;
{
eDebug("[SEC] frontend is linked with another one and the other is in use.. so we dont do SEC!!");
linked=true;
- continue;
}
}
{
send_diseqc = changed_csw;
if ( send_diseqc && di_param.m_use_fast && (csw & 0xF0) && (lastcsw & 0xF0) && ((csw / 4) == (lastcsw / 4)) )
+ {
+ frontend.setData(0, csw); // needed for linked tuner handling
send_diseqc = false;
+ }
}
if ( send_diseqc || changed_burst )
{
sec_sequence.push_back( eSecCommand(eSecCommand::SEND_TONEBURST, di_param.m_toneburst_param) );
sec_sequence.push_back( eSecCommand(eSecCommand::SLEEP, 50) );
- frontend.setData(2, di_param.m_toneburst_param);
}
if ( send_diseqc )
frontend.setData(0, csw);
frontend.setData(1, ucsw);
+ frontend.setData(2, di_param.m_toneburst_param);
}
}
RotorCmd=sw_param.m_rotorPosNum;
else // we must calc gotoxx cmd
{
- eDebug("Entry for %d,%d° not in Rotor Table found... i try gotoXX°", sat.orbital_position / 10, sat.orbital_position % 10 );
+ eDebug("Entry for %d,%d? not in Rotor Table found... i try gotoXX?", sat.orbital_position / 10, sat.orbital_position % 10 );
useGotoXX = true;
int satDir = sat.orbital_position < 0 ?
sec_sequence.push_back( eSecCommand(eSecCommand::GOTO, -4) ); // running loop start
/////////////////////
sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_ROTORPARAMS) );
- frontend.setData(3, RotorCmd);
- frontend.setData(4, sat.orbital_position);
+ if ( linked )
+ {
+ frontend.setData(5, RotorCmd);
+ frontend.setData(6, sat.orbital_position);
+ }
+ else
+ {
+ frontend.setData(3, RotorCmd);
+ frontend.setData(4, sat.orbital_position);
+ }
}
else
eFatal("rotor turning without inputpowermeasure not implemented yet");
else
frontend.setData(0, band); // store band as csw .. needed for linked tuner handling
+ if ( linked )
+ return 0;
+
eSecCommand::pair compare;
compare.voltage = voltage;
compare.steps = +3;
}
return -1;
}
+
+bool eDVBSatelliteEquipmentControl::isRotorMoving()
+{
+ return m_rotorMoving;
+}
+
+void eDVBSatelliteEquipmentControl::setRotorMoving(bool b)
+{
+ m_rotorMoving=b;
+}