X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=blobdiff_plain;f=lib%2Fdvb%2Ffrontend.cpp;h=848b5155ee94e7b5389f69c7364d7972aabdc6bf;hp=1e7cb6b24d0105cada765e4aa197c8cebf3f85cc;hb=eb510064c67c19fec47fd04ea03017c17569e3c5;hpb=afa141eedd597d0468d33b97a79f738a9ebfd11f diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp index 1e7cb6b..848b515 100755 --- a/lib/dvb/frontend.cpp +++ b/lib/dvb/frontend.cpp @@ -502,7 +502,7 @@ int eDVBFrontend::PreferredFrontendIndex=-1; eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok, bool simulate, eDVBFrontend *simulate_fe) :m_simulate(simulate), m_enabled(false), m_simulate_fe(simulate_fe), m_dvbid(fe), m_slotid(fe) ,m_fd(-1), m_rotor_mode(false), m_need_rotor_workaround(false) - ,m_state(stateClosed), m_timeout(0), m_tuneTimer(0), m_fbc(false) + ,m_state(stateClosed), m_timeout(0), m_tuneTimer(0), m_fbc(false), m_is_usbtuner(false) #if HAVE_DVB_API_VERSION < 3 ,m_secfd(-1) #endif @@ -525,11 +525,6 @@ eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok, bool simulate, eDVBFronten m_idleInputpower[0]=m_idleInputpower[1]=0; - char fileName[32] = {0}; - sprintf(fileName, "/proc/stb/frontend/%d/fbc_id", m_slotid); - if (access(fileName, F_OK) == 0) - m_fbc = true; - ok = !openFrontend(); closeFrontend(); } @@ -787,7 +782,10 @@ void eDVBFrontend::feEvent(int w) eDebug("stateLostLock"); state = stateLostLock; if (!m_rotor_mode) + { sec_fe->m_data[CSW] = sec_fe->m_data[UCSW] = sec_fe->m_data[TONEBURST] = -1; // reset diseqc + sec_fe->m_data[LINKABLE_CSW] = sec_fe->m_data[LINKABLE_UCSW] = sec_fe->m_data[LINKABLE_TONEBURST] = -1; + } } } if (m_state != state) @@ -806,6 +804,7 @@ void eDVBFrontend::timeout() #ifdef BUILD_VUPLUS eDVBFrontend *sec_fe = this; sec_fe->m_data[CSW] = sec_fe->m_data[UCSW] = sec_fe->m_data[TONEBURST] = -1; // reset diseqc + sec_fe->m_data[LINKABLE_CSW] = sec_fe->m_data[LINKABLE_UCSW] = sec_fe->m_data[LINKABLE_TONEBURST] = -1; #endif m_state = stateFailed; m_stateChanged(this); @@ -1054,6 +1053,8 @@ int eDVBFrontend::readFrontendData(int type) } case frontendNumber: return m_slotid; + case isUsbTuner: + return m_is_usbtuner; } return 0; } @@ -1874,12 +1875,14 @@ int eDVBFrontend::tuneLoopInt() // called by m_tuneTimer tmp = prev->m_frontend->m_data[LINKED_PREV_PTR]; if (tmp == -1 && sec_fe != this && !prev->m_inuse) { int state = sec_fe->m_state; +#if 0 // Since following code causes lock fail for linked tuners in certain conditions, it does not apply. // workaround to put the kernel frontend thread into idle state! if (state != eDVBFrontend::stateIdle && state != stateClosed) { sec_fe->closeFrontend(true); state = sec_fe->m_state; } +#endif // sec_fe is closed... we must reopen it here.. if (state == stateClosed) { @@ -3115,6 +3118,24 @@ RESULT eDVBFrontend::setSecSequence(eSecCommandList &list) return 0; } +bool eDVBFrontend::isScheduledSendDiseqc() +{ + bool has_senddiseqc = false; + if ( m_sec_sequence && m_sec_sequence.current() != m_sec_sequence.end() ) + { + eSecCommandList::iterator cur = m_sec_sequence.current(); + while(cur != m_sec_sequence.end()) + { + if (((cur++)->cmd == eSecCommand::SEND_DISEQC)) + { + has_senddiseqc = true; + break; + } + } + } + return has_senddiseqc; +} + RESULT eDVBFrontend::getData(int num, long &data) { if ( num < NUM_DATA_ENTRIES )