aboutsummaryrefslogtreecommitdiff
path: root/lib/dvb/frontend.cpp
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2011-05-03 11:41:36 +0200
committerghost <andreas.monzner@multimedia-labs.de>2011-05-03 11:41:36 +0200
commitd6dd733f6a7ade7f07b0721e576d66e56cf8b563 (patch)
tree25c037d8eb29416ccdf5c2300edff72cd7cbd34f /lib/dvb/frontend.cpp
parent316f6a4f78d654e7822431cca75659709c6c3fee (diff)
parente34d976be38fb06fb8819379198e89fb591d987f (diff)
downloadenigma2-d6dd733f6a7ade7f07b0721e576d66e56cf8b563.tar.gz
enigma2-d6dd733f6a7ade7f07b0721e576d66e56cf8b563.zip
Merge remote-tracking branch 'remotes/origin/bug_739_fix_CT_tuner_timer_bug'
Diffstat (limited to 'lib/dvb/frontend.cpp')
-rw-r--r--lib/dvb/frontend.cpp107
1 files changed, 53 insertions, 54 deletions
diff --git a/lib/dvb/frontend.cpp b/lib/dvb/frontend.cpp
index b5de46c9..57188963 100644
--- a/lib/dvb/frontend.cpp
+++ b/lib/dvb/frontend.cpp
@@ -453,8 +453,8 @@ DEFINE_REF(eDVBFrontend);
int eDVBFrontend::PriorityOrder=0;
-eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok, bool simulate)
- :m_simulate(simulate), m_enabled(false), m_type(-1), m_dvbid(fe), m_slotid(fe)
+eDVBFrontend::eDVBFrontend(int adap, int fe, int &ok, bool simulate, eDVBFrontend *simulate_fe)
+ :m_simulate(simulate), m_enabled(false), m_type(-1), m_simulate_fe(simulate_fe), m_dvbid(fe), m_slotid(fe)
,m_fd(-1), m_rotor_mode(false), m_need_rotor_workaround(false), m_can_handle_dvbs2(false)
,m_state(stateClosed), m_timeout(0), m_tuneTimer(0)
#if HAVE_DVB_API_VERSION < 3
@@ -503,10 +503,10 @@ int eDVBFrontend::openFrontend()
#else
dvb_frontend_info fe_info;
#endif
- eDebugNoSimulate("opening frontend %d", m_dvbid);
- if (m_fd < 0)
+ if (!m_simulate)
{
- if (!m_simulate || m_type == -1)
+ eDebug("opening frontend %d", m_dvbid);
+ if (m_fd < 0)
{
m_fd = ::open(m_filename, O_RDWR|O_NONBLOCK);
if (m_fd < 0)
@@ -515,70 +515,69 @@ int eDVBFrontend::openFrontend()
return -1;
}
}
- }
- else
- eWarning("frontend %d already opened", m_dvbid);
- if (m_type == -1)
- {
- if (::ioctl(m_fd, FE_GET_INFO, &fe_info) < 0)
+ else
+ eWarning("frontend %d already opened", m_dvbid);
+ if (m_type == -1)
{
- eWarning("ioctl FE_GET_INFO failed");
- ::close(m_fd);
- m_fd = -1;
- return -1;
- }
+ if (::ioctl(m_fd, FE_GET_INFO, &fe_info) < 0)
+ {
+ eWarning("ioctl FE_GET_INFO failed");
+ ::close(m_fd);
+ m_fd = -1;
+ return -1;
+ }
- switch (fe_info.type)
- {
- case FE_QPSK:
- m_type = iDVBFrontend::feSatellite;
- break;
- case FE_QAM:
- m_type = iDVBFrontend::feCable;
- break;
- case FE_OFDM:
- m_type = iDVBFrontend::feTerrestrial;
- break;
- default:
- eWarning("unknown frontend type.");
- ::close(m_fd);
- m_fd = -1;
- return -1;
+ switch (fe_info.type)
+ {
+ case FE_QPSK:
+ m_type = iDVBFrontend::feSatellite;
+ break;
+ case FE_QAM:
+ m_type = iDVBFrontend::feCable;
+ break;
+ case FE_OFDM:
+ m_type = iDVBFrontend::feTerrestrial;
+ break;
+ default:
+ eWarning("unknown frontend type.");
+ ::close(m_fd);
+ m_fd = -1;
+ return -1;
+ }
+ if (m_simulate_fe)
+ m_simulate_fe->m_type = m_type;
+ eDebugNoSimulate("detected %s frontend", "satellite\0cable\0 terrestrial"+fe_info.type*10);
}
- eDebugNoSimulate("detected %s frontend", "satellite\0cable\0 terrestrial"+fe_info.type*10);
- }
#if HAVE_DVB_API_VERSION < 3
- if (m_type == iDVBFrontend::feSatellite)
- {
- if (m_secfd < 0)
- {
- if (!m_simulate)
+ if (m_type == iDVBFrontend::feSatellite)
+ {
+ if (m_secfd < 0)
{
- m_secfd = ::open(m_sec_filename, O_RDWR);
- if (m_secfd < 0)
+ if (!m_simulate)
{
- eWarning("failed! (%s) %m", m_sec_filename);
- ::close(m_fd);
- m_fd=-1;
- return -1;
+ m_secfd = ::open(m_sec_filename, O_RDWR);
+ if (m_secfd < 0)
+ {
+ eWarning("failed! (%s) %m", m_sec_filename);
+ ::close(m_fd);
+ m_fd=-1;
+ return -1;
+ }
}
}
- }
- else
- eWarning("sec %d already opened", m_dvbid);
- }
+ else
+ eWarning("sec %d already opened", m_dvbid);
+ }
#endif
- setTone(iDVBFrontend::toneOff);
- setVoltage(iDVBFrontend::voltageOff);
-
- if (!m_simulate)
- {
m_sn = eSocketNotifier::create(eApp, m_fd, eSocketNotifier::Read, false);
CONNECT(m_sn->activated, eDVBFrontend::feEvent);
}
+ setTone(iDVBFrontend::toneOff);
+ setVoltage(iDVBFrontend::voltageOff);
+
return 0;
}