X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/354bc82ac66fc75ede33a38e9f9ba870b16352f0..e448808c8c2faf89397318e61fd83259835d1977:/lib/dvb/sec.cpp diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index a9426ff7..83092d8e 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -61,14 +61,14 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite bool direct_connected = m_not_linked_slot_mask & slot_id; int score=0, satcount=0; long linked_prev_ptr=-1, linked_next_ptr=-1, linked_csw=-1, linked_ucsw=-1, linked_toneburst=-1, - satpos_depends_ptr=-1, rotor_pos=-1; + fe_satpos_depends_ptr=-1, fe_rotor_pos=-1; bool linked_in_use = false; eSecDebugNoSimulate("direct_connected %d", !!direct_connected); fe->getData(eDVBFrontend::LINKED_PREV_PTR, linked_prev_ptr); fe->getData(eDVBFrontend::LINKED_NEXT_PTR, linked_next_ptr); - fe->getData(eDVBFrontend::SATPOS_DEPENDS_PTR, satpos_depends_ptr); + fe->getData(eDVBFrontend::SATPOS_DEPENDS_PTR, fe_satpos_depends_ptr); // first we search the linkage base frontend and check if any tuner in prev direction is used while (linked_prev_ptr != -1) @@ -80,7 +80,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite linked_fe->m_frontend->getData(eDVBFrontend::LINKED_PREV_PTR, (long&)linked_prev_ptr); } - fe->getData(eDVBFrontend::ROTOR_POS, rotor_pos); + fe->getData(eDVBFrontend::ROTOR_POS, fe_rotor_pos); // now check also the linked tuners is in use while (!linked_in_use && linked_next_ptr != -1) @@ -123,10 +123,11 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite { bool diseqc=false; long band=0, - satpos_depends_ptr=-1, + satpos_depends_ptr=fe_satpos_depends_ptr, csw = di_param.m_committed_cmd, ucsw = di_param.m_uncommitted_cmd, - toneburst = di_param.m_toneburst_param; + toneburst = di_param.m_toneburst_param, + rotor_pos = fe_rotor_pos; eSecDebugNoSimulate("sat %d found", sat.orbital_position); @@ -147,7 +148,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite if ( di_param.m_diseqc_mode == eDVBSatelliteDiseqcParameters::V1_2 ) // ROTOR rotor = true; - ret=10000; + ret = 10000; } else { @@ -164,20 +165,20 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite ( diseqc && (ucsw != linked_ucsw || toneburst != linked_toneburst) ) || ( rotor && rotor_pos != sat.orbital_position ) ) { - ret=0; + ret = 0; } + else + ret += 15; eSecDebugNoSimulate("ret2 %d", ret); if (ret) // special case when this tuner is linked to a satpos dependent tuner { - long satpos_depends_ptr=-1; fe->getData(eDVBFrontend::SATPOS_DEPENDS_PTR, satpos_depends_ptr); if (satpos_depends_ptr != -1) { eDVBRegisteredFrontend *satpos_depends_to_fe = (eDVBRegisteredFrontend*) satpos_depends_ptr; - long satpos_depends_rotor_pos; - satpos_depends_to_fe->m_frontend->getData(eDVBFrontend::ROTOR_POS, satpos_depends_rotor_pos); - if (!rotor || satpos_depends_rotor_pos == -1 /* we dont know the rotor position yet */ - || satpos_depends_rotor_pos != sat.orbital_position ) // not the same orbital position? + satpos_depends_to_fe->m_frontend->getData(eDVBFrontend::ROTOR_POS, rotor_pos); + if (!rotor || rotor_pos == -1 /* we dont know the rotor position yet */ + || rotor_pos != sat.orbital_position ) // not the same orbital position? { ret = 0; } @@ -194,16 +195,17 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite if (satpos_depends_to_fe->m_inuse) // if the dependent frontend is in use? { if (!rotor || rotor_pos != sat.orbital_position) // new orbital position not equal to current orbital pos? - ret=0; + ret = 0; + else + ret += 10; } } else // current fe is dependent of another tuner ... (so this fe can't turn the rotor!) { // get current orb pos of the tuner with rotor connection - long satpos_depends_rotor_pos; - satpos_depends_to_fe->m_frontend->getData(eDVBFrontend::ROTOR_POS, satpos_depends_rotor_pos); - if (!rotor || satpos_depends_rotor_pos == -1 /* we dont know the rotor position yet */ - || satpos_depends_rotor_pos != sat.orbital_position ) // not the same orbital position? + satpos_depends_to_fe->m_frontend->getData(eDVBFrontend::ROTOR_POS, rotor_pos); + if (!rotor || rotor_pos == -1 /* we dont know the rotor position yet */ + || rotor_pos != sat.orbital_position ) // not the same orbital position? { ret = 0; } @@ -222,7 +224,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite lnb_param.m_lof_hi : lnb_param.m_lof_lo; int tuner_freq = abs(sat.frequency - lof); if (tuner_freq < 900000 || tuner_freq > 2200000) - ret=0; + ret = 0; } if (ret && lnb_param.m_prio != -1)