X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/8e13d1b1a0fb7309f6727b712a61f47dbd90a52c..d25cc68147eac7b8e7628a9abdffe55a758612a3:/lib/dvb/frontend.cpp diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index d4f3d369..dff3ddb9 100644 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -177,8 +177,11 @@ RESULT eDVBFrontendParameters::calculateDifference(const iDVBFrontendParameters diff = 1<<29; else if (sat.polarisation != osat.polarisation) diff = 1<<28; - else + else + { diff = abs(sat.frequency - osat.frequency); + diff += abs(sat.symbol_rate - osat.symbol_rate); + } return 0; } case iDVBFrontend::feCable: @@ -209,7 +212,7 @@ RESULT eDVBFrontendParameters::getHash(unsigned long &hash) const DEFINE_REF(eDVBFrontend); eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok) - :m_type(-1), m_fe(fe), m_timeout(0), m_tuneTimer(0), m_fd(-1) + :m_type(-1), m_fe(fe), m_fd(-1), m_timeout(0), m_tuneTimer(0) #if HAVE_DVB_API_VERSION < 3 ,m_secfd(-1) #endif @@ -229,6 +232,8 @@ eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok) for (int i=0; i= 0) { ::close(m_fd); @@ -342,8 +349,6 @@ int eDVBFrontend::closeFrontend() delete m_sn; m_sn=0; - setTone(iDVBFrontend::toneOff); - setVoltage(iDVBFrontend::voltageOff); return 0; } @@ -588,12 +593,12 @@ void eDVBFrontend::tuneLoop() // called by m_tuneTimer eDebug("[SEC] error read lnbp (%m)"); if ( m_sec_sequence.current()->mode == eSecCommand::modeStatic ) { - data[0] |= 0x90; // enable static current limiting + data[0] |= 0x80; // enable static current limiting eDebug("[SEC] set static current limiting"); } else { - data[0] &= ~0x90; // enable dynamic current limiting + data[0] &= ~0x80; // enable dynamic current limiting eDebug("[SEC] set dynamic current limiting"); } if(::write(fd, data, 1) != 1) @@ -609,7 +614,7 @@ void eDVBFrontend::tuneLoop() // called by m_tuneTimer break; case eSecCommand::IF_INPUTPOWER_DELTA_GOTO: { - int idleInputpower = m_idleInputpower[m_curVoltage == iDVBFrontend::voltage13 ? 0 : 1]; + int idleInputpower = m_idleInputpower[ (m_curVoltage&1) ? 0 : 1]; eSecCommand::rotor &cmd = m_sec_sequence.current()->measure; const char *txt = cmd.direction ? "running" : "stopped"; eDebug("[SEC] waiting for rotor %s %d, idle %d, delta %d", @@ -960,9 +965,9 @@ RESULT eDVBFrontend::setVoltage(int voltage) #if HAVE_DVB_API_VERSION < 3 secVoltage vlt; #else + bool increased=false; fe_sec_voltage_t vlt; #endif - m_curVoltage=voltage; switch (voltage) { @@ -971,9 +976,23 @@ RESULT eDVBFrontend::setVoltage(int voltage) m_data[i]=-1; vlt = SEC_VOLTAGE_OFF; break; + case voltage13_5: +#if HAVE_DVB_API_VERSION < 3 + vlt = SEC_VOLTAGE_13_5; + break; +#else + increased = true; +#endif case voltage13: vlt = SEC_VOLTAGE_13; break; + case voltage18_5: +#if HAVE_DVB_API_VERSION < 3 + vlt = SEC_VOLTAGE_18_5; + break; +#else + increased = true; +#endif case voltage18: vlt = SEC_VOLTAGE_18; break; @@ -983,6 +1002,8 @@ RESULT eDVBFrontend::setVoltage(int voltage) #if HAVE_DVB_API_VERSION < 3 return ::ioctl(m_secfd, SEC_SET_VOLTAGE, vlt); #else + if (::ioctl(m_fd, FE_ENABLE_HIGH_LNB_VOLTAGE, increased) < 0) + perror("FE_ENABLE_HIGH_LNB_VOLTAGE"); return ::ioctl(m_fd, FE_SET_VOLTAGE, vlt); #endif }