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_state(stateClosed), m_timeout(0), m_tuneTimer(0), m_fbc(false)
#if HAVE_DVB_API_VERSION < 3
,m_secfd(-1)
#endif
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();
}
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)
#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);
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)
{
RESULT eDVBFrontend::setVoltage(int voltage)
{
-
#if HAVE_DVB_API_VERSION < 3
secVoltage vlt;
#else
{
if (m_simulate)
return 0;
+
#if HAVE_DVB_API_VERSION < 3
struct secCommand cmd;
cmd.type = SEC_CMDTYPE_DISEQC_RAW;
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 )
// m_slotid, m_description);
return false;
}
- m_enabled = Enabled == Py_True;
+ m_enabled = (Enabled == Py_True);
// HACK.. the rotor workaround is neede for all NIMs with LNBP21 voltage regulator...
m_need_rotor_workaround = !!strstr(m_description, "Alps BSBE1") ||
!!strstr(m_description, "Alps BSBE2") ||
/* HACK for legacy dvb api without DELSYS support */
m_delsys[SYS_DVBT2] = true;
}
+
eDebugNoSimulate("setSlotInfo for dvb frontend %d to slotid %d, descr %s, need rotorworkaround %s, enabled %s, DVB-S2 %s, DVB-T2 %s",
- m_dvbid, m_slotid, m_description, m_need_rotor_workaround ? "Yes" : "No", m_enabled == Py_True ? "Yes" : "No", IsDVBS2 == Py_True ? "Yes" : "No", IsDVBT2 == Py_True ? "Yes" : "No" );
+ m_dvbid, m_slotid, m_description, m_need_rotor_workaround ? "Yes" : "No", Enabled == Py_True ? "Yes" : "No", IsDVBS2 == Py_True ? "Yes" : "No", IsDVBT2 == Py_True ? "Yes" : "No" );
return true;
arg_error:
PyErr_SetString(PyExc_StandardError,