diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2008-09-06 12:44:10 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2008-09-06 12:44:10 +0000 |
| commit | 53c757daa021cf7b742bd686a7cbd884d8612444 (patch) | |
| tree | bc9f9e7f2be386a8e60fb8e8ecf8a042baf37ea4 /lib/dvb/sec.cpp | |
| parent | 17d3a96180031686d9709182bd4152efb66ea253 (diff) | |
| download | enigma2-53c757daa021cf7b742bd686a7cbd884d8612444.tar.gz enigma2-53c757daa021cf7b742bd686a7cbd884d8612444.zip | |
allow more complicated sat configuration
Diffstat (limited to 'lib/dvb/sec.cpp')
| -rw-r--r-- | lib/dvb/sec.cpp | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index 10b2c2c1..b1f421c0 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -114,9 +114,12 @@ eDVBSatelliteEquipmentControl::eDVBSatelliteEquipmentControl(eSmartPtrList<eDVBR setRotorPosNum(1); // stored pos 1 } -int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite &sat, iDVBFrontend *fe, int slot_id ) +int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite &sat, iDVBFrontend *fe, int slot_id, int *highest_score_lnb) { - int ret=0, satcount=0; + int score=0, satcount=0; + + if (highest_score_lnb) + *highest_score_lnb = -1; for (int idx=0; idx <= m_lnbidx; ++idx ) { @@ -124,6 +127,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite eDVBSatelliteLNBParameters &lnb_param = m_lnbs[idx]; if ( lnb_param.slot_mask & slot_id ) // lnb for correct tuner? { + int ret = 0; eDVBSatelliteDiseqcParameters &di_param = lnb_param.m_diseqc_parameters; satcount += lnb_param.m_satellites.size(); @@ -261,14 +265,20 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite if (tuner_freq < 900000 || tuner_freq > 2200000) ret=0; } + if (ret > score) + { + score = ret; + if (highest_score_lnb) + *highest_score_lnb = idx; + } } } } - if (ret && satcount) - ret -= (satcount-1); - if (ret && m_not_linked_slot_mask & slot_id) - ret += 5; // increase score for tuners with direct sat connection - return ret; + if (score && satcount) + score -= (satcount-1); + if (score && m_not_linked_slot_mask & slot_id) + score += 5; // increase score for tuners with direct sat connection + return score; } bool need_turn_fast(int turn_speed) @@ -299,11 +309,10 @@ bool need_turn_fast(int turn_speed) RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPARAMETERS &parm, const eDVBFrontendParametersSatellite &sat, int slot_id, unsigned int tunetimeout) { - for (int idx=0; idx <= m_lnbidx; ++idx ) + int lnb_idx = -1; + if (canTune(sat, &frontend, slot_id, &lnb_idx)) { - eDVBSatelliteLNBParameters &lnb_param = m_lnbs[idx]; - if (!(lnb_param.slot_mask & slot_id)) // lnb for correct tuner? - continue; + eDVBSatelliteLNBParameters &lnb_param = m_lnbs[lnb_idx]; eDVBSatelliteDiseqcParameters &di_param = lnb_param.m_diseqc_parameters; eDVBSatelliteRotorParameters &rotor_param = lnb_param.m_rotor_parameters; @@ -842,6 +851,8 @@ RESULT eDVBSatelliteEquipmentControl::prepare(iDVBFrontend &frontend, FRONTENDPA return 0; } } + else + eFatal("canTune failed in sec prepare!!! this should never ever happen!"); eDebug("found no useable satellite configuration for orbital position (%d)", sat.orbital_position ); return -1; |
