diff options
| author | ghost <andreas.monzner@multimedia-labs.de> | 2009-06-04 22:23:42 +0200 |
|---|---|---|
| committer | ghost <andreas.monzner@multimedia-labs.de> | 2009-06-04 22:23:42 +0200 |
| commit | b7f07b6052ac2ca6b5e2a2c9e322b26e2c506109 (patch) | |
| tree | bbc10d38e84e725d9406df41793f765025c1ea05 /lib/dvb/dvb.cpp | |
| parent | d18113ea974703c0c6fc0396e83dbf59bc9e5b26 (diff) | |
| download | enigma2-b7f07b6052ac2ca6b5e2a2c9e322b26e2c506109.tar.gz enigma2-b7f07b6052ac2ca6b5e2a2c9e322b26e2c506109.zip | |
dvb.cpp: detect boxtype via /proc/stb/info/model for demux policy
Diffstat (limited to 'lib/dvb/dvb.cpp')
| -rw-r--r-- | lib/dvb/dvb.cpp | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index d30be29c..e6d9a25d 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -82,8 +82,32 @@ eDVBResourceManager::eDVBResourceManager() num_adapter++; } - eDebug("found %d adapter, %d frontends(%d sim) and %d demux", - m_adapter.size(), m_frontend.size(), m_simulate_frontend.size(), m_demux.size()); + int fd = open("/proc/stb/info/model", O_RDONLY); + char tmp[255]; + int rd = fd >= 0 ? read(fd, tmp, 255) : 0; + if (fd >= 0) + close(fd); + + if (!strncmp(tmp, "dm7025\n", rd)) + m_boxtype = DM7025; + else if (!strncmp(tmp, "dm8000\n", rd)) + m_boxtype = DM8000; + else if (!strncmp(tmp, "dm800\n", rd)) + m_boxtype = DM800; + else if (!strncmp(tmp, "dm500hd\n", rd)) + m_boxtype = DM500HD; + else { + eDebug("boxtype detection via /proc/stb/info not possible... use fallback via demux count!\n"); + if (m_demux.size() == 3) + m_boxtype = DM800; + else if (m_demux.size() < 5) + m_boxtype = DM7025; + else + m_boxtype = DM8000; + } + + eDebug("found %d adapter, %d frontends(%d sim) and %d demux, boxtype %d", + m_adapter.size(), m_frontend.size(), m_simulate_frontend.size(), m_demux.size(), m_boxtype); eDVBCAService::registerChannelCallback(this); @@ -429,7 +453,7 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBA ePtr<eDVBRegisteredDemux> unused; - if (m_demux.size() == 3) // dm800 / 500hd + if (m_boxtype == DM800 || m_boxtype == DM500HD) // dm800 / 500hd { for (; i != m_demux.end(); ++i, ++n) { @@ -457,7 +481,7 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBA } } } - else if (m_demux.size() < 5) // ATI + else if (m_boxtype == DM7025) // ATI { /* FIXME: hardware demux policy */ if (!(cap & iDVBChannel::capDecode)) @@ -484,7 +508,7 @@ RESULT eDVBResourceManager::allocateDemux(eDVBRegisteredFrontend *fe, ePtr<eDVBA } } } - else // we asume dm8000 + else if (m_boxtype == DM8000) { for (; i != m_demux.end(); ++i, ++n) { |
