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);
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)
{
if (!unused)
unused = i;
}
- else if (!fe || (i->m_adapter == fe->m_adapter &&
- i->m_demux->getSource() == fe->m_frontend->getDVBID()))
+ else
{
- demux = new eDVBAllocatedDemux(i);
- return 0;
+ if (fe)
+ {
+ if (i->m_adapter == fe->m_adapter &&
+ i->m_demux->getSource() == fe->m_frontend->getDVBID())
+ {
+ demux = new eDVBAllocatedDemux(i);
+ return 0;
+ }
+ }
+ else if (i->m_demux->getSource() == -1) // PVR
+ {
+ demux = new eDVBAllocatedDemux(i);
+ return 0;
+ }
}
}
-
}
- else if (m_demux.size() < 5) // ATI
+ else if (m_boxtype == DM7025) // ATI
{
/* FIXME: hardware demux policy */
if (!(cap & iDVBChannel::capDecode))
}
}
}
- else // we asume dm8000
+ else if (m_boxtype == DM8000)
{
for (; i != m_demux.end(); ++i, ++n)
{