From 8d76012a43ac01189160992ce3a5a08614fc93f0 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 26 Nov 2010 12:54:28 +0100 Subject: [PATCH] sec.cpp: fixed rotor turning without inputpower measurement (introduced with latest unicable changes) TODO: recheck rotor turning with unicable components... it seems broken refs #347 --- lib/dvb/sec.cpp | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index a8292c0c..9ca0f734 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -212,7 +212,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite eSecDebugNoSimulate("ret5 %d", ret); - if (ret && lnb_param.SatCR_idx == -1) + if (ret && !is_unicable) { int lof = sat.frequency > lnb_param.m_lof_threshold ? lnb_param.m_lof_hi : lnb_param.m_lof_lo; @@ -300,11 +300,6 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA if ( sit != lnb_param.m_satellites.end()) { eSecCommandList sec_sequence; - - lnb_param.guard_offset = 0; //HACK - - frontend.setData(eDVBFrontend::SATCR, lnb_param.SatCR_idx); - eDVBSatelliteSwitchParameters &sw_param = sit->second; bool doSetFrontend = true; bool doSetVoltageToneFrontend = true; @@ -327,6 +322,11 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA eDVBSatelliteDiseqcParameters::t_diseqc_mode diseqc_mode = di_param.m_diseqc_mode; eDVBSatelliteSwitchParameters::t_voltage_mode voltage_mode = sw_param.m_voltage_mode; bool diseqc13V = voltage_mode == eDVBSatelliteSwitchParameters::HV_13; + bool is_unicable = lnb_param.SatCR_idx != -1; + + lnb_param.guard_offset = 0; //HACK + + frontend.setData(eDVBFrontend::SATCR, lnb_param.SatCR_idx); if (diseqc13V) voltage_mode = eDVBSatelliteSwitchParameters::HV; @@ -371,13 +371,10 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA int lof = (band&1)?lnb_param.m_lof_hi:lnb_param.m_lof_lo; - int local=0; - - - if(lnb_param.SatCR_idx == -1) + if(!is_unicable) { - // calc Frequency - local = abs(sat.frequency + // calc Frequency + int local= abs(sat.frequency - lof); parm.FREQUENCY = ((((local * 2) / 125) + 1) / 2) * 125; frontend.setData(eDVBFrontend::FREQ_OFFSET, sat.frequency - parm.FREQUENCY); @@ -693,7 +690,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA if ( RotorCmd != -1 && RotorCmd != lastRotorCmd ) { eSecCommand::pair compare; - if (!send_mask && lnb_param.SatCR_idx == -1) + if (!send_mask && !is_unicable) { compare.steps = +3; compare.tone = iDVBFrontend::toneOff; @@ -747,10 +744,10 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA diseqc.data[3] = RotorCmd; diseqc.data[4] = 0x00; } -// if(lnb_param.SatCR_idx == -1) +// if(!is_unicable) { int mrt = m_params[MOTOR_RUNNING_TIMEOUT]; // in seconds! - if ( rotor_param.m_inputpower_parameters.m_use || lnb_param.SatCR_idx == -1) + if ( rotor_param.m_inputpower_parameters.m_use && !is_unicable) { // 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; @@ -882,7 +879,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA sec_fe->setData(eDVBFrontend::NEW_UCSW, ucsw); sec_fe->setData(eDVBFrontend::NEW_TONEBURST, di_param.m_toneburst_param); - if ((doSetVoltageToneFrontend) && (lnb_param.SatCR_idx == -1)) + if (doSetVoltageToneFrontend && !is_unicable) { eSecCommand::pair compare; compare.voltage = voltage; @@ -898,7 +895,7 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA sec_sequence.push_back( eSecCommand(eSecCommand::UPDATE_CURRENT_SWITCHPARMS) ); - if(lnb_param.SatCR_idx != -1) + if(is_unicable) { // check if voltage is disabled eSecCommand::pair compare; -- 2.30.2